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 thediskos-updatefolder 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.