github zmd22/diskos-disco v2.6.1
diskOS Disco! 2.6.1

4 hours ago

diskOS Disco! 2.6.1

Fixes for Bluetooth headphones dropping during playback, and for the Disc powering off while in use.

Bluetooth

  • Headphones no longer drop mid-song. Every few seconds Disco checks the headphones' audio link. When the Disc
    was busy (a cover loading, a skip, or simply the screen being off), that check could answer late, and 2.6.0 took a
    late answer for "the link is gone". It then set the connection up again, which restarts the player's Bluetooth
    service: the headphones dropped, reconnected and switched codec again. Now a late answer changes nothing; only
    three checks in a row that really find no link (9 seconds) count as a disconnect.
  • Music starts on AAC/LDAC right away. Just after headphones connect, Disco still has to switch them from SBC to
    AAC or LDAC, and switching stops a playing song. Now a song you start in that moment waits a second or two ("Getting
    Bluetooth ready...") and then plays on the right codec from the start, instead of starting and pausing a few
    seconds in. Pressing Play again starts it at once.
  • Skipping during the short codec-switch pause (first or second song after connecting) no longer leaves the
    music paused on the new song: the pause follows you to the song you land on and plays it once the switch is done.

Idle power-off

  • No more power-off while the Disc is in use without playing a song of its own
    (#17). Disco's idle power-off only looked at songs playing on the
    Disc, so it switched off in Bluetooth DAC mode and the other working modes (USB DAC, BT streaming, AirPlay, USB
    storage), and while charging. It now only counts as idle in Playback mode, with nothing playing, and the Disc
    neither plugged in nor charging: a full battery still on the charger keeps it on too.

Never stopped on a guess

  • Disco's idea of "playing" is a guess from the song's position moving, and it can miss music that is in fact
    playing. Before any action that would stop or interrupt music because it "isn't playing" - idle power-off,
    setting up the Bluetooth route, the play/pause around a codec switch - Disco now also asks the audio system whether
    sound is going out. If it is, the Disc stays on and the music isn't touched.

Everything else is as in 2.6.0.

Testing: the Bluetooth fix is covered by an automatic test that fails on 2.6.0 and passes on 2.6.1. Neither fix
was tried on a Disc before release.

Installing and updating

  • Already on diskOS Disco! 1.4.1 or newer? Update from the SD card: download mq_ui, sign it with your own
    keys and copy the diskos-update folder to the card (how). Your settings, music and stats stay.
  • New install? Start from FiiO's stock V2.57 firmware (recommended). Installing over upstream diskOS or
    another diskOS build is not supported and can be buggy; restore stock first. See Install.
  • Windows: Unsupported, but working as intended: confirmed several times by users, installs and SD updates included.

After updating

  • Settings > System > About shows 2.6.1.
  • The new version starts as a trial: play some music or tap Keep to keep it. If it doesn't start properly,
    the Disc goes back to the previous version by itself, or choose Go back.
Technical notes

bt_autoroute_poll_cb now calls run_cap_to directly: a timed-out bluealsa-cli list-pcms probe (-1) returns
without touching any state; only three consecutive completed probes without an A2DP PCM clear the auto-route latch,
cancel a pending codec switch and call ui_route_forget("link gone"). In 2.6.0 two timed-out probes (read as empty by
run_cap_bounded) forgot the route, and the following re-route's 06c1 restarted bluetoothd/BlueALSA. Test:
ui/tests/bt_autoroute_test.py. A skip during the codec hold re-takes the song identity for 3 s
(ui_route_hold_follow) instead of cancelling the hold; ui_audio_running() (kernel /proc/asound/card*/pcm*p/sub*/status
"state: RUNNING", and BlueALSA's "Running:" when it reports one) gates idle power-off, the route's was-playing, the
codec gate, the hold end and play deferral; a list play or Play on a paused song while the codec
upgrade is pending waits for it (play_defer_tick: confirmed, 10 s, or the route gone; a second Play starts at once); the player-restart path and ui_route_analog now drop the
route's codec switch, hold and guard explicitly. Idle power-off: power_tick gets "busy" = playing, Music Assistant playing, a
working mode other than Playback (ui_get_source_mode() != 0), charging (usage_charging(), a positive charge
current) or plugged in (usage_plugged_in(): any non-battery entry in /sys/class/power_supply with online=1, read
at most every 5 s). Tests: ui/tests/power_plugged_test.py. Built with the GCC 11.2 MIPS toolchain; build record in payload/mq_ui.build.json.

Don't miss a new diskos-disco release

NewReleases is sending notifications on new releases.