diskOS Disco! 2.6.0
Steadier under pressure: smoother fast skipping, a much more careful Bluetooth, up-to-date help, and a crash log.
Testing: the fast-skipping changes and the crash log were used on the maintainer's Disc with deliberately rough
skipping, without crashes. The Bluetooth changes and the updated help were checked with automatic tests and on a
computer only. The AAC fallback was confirmed on the maintainer's Disc; LDAC hasn't been tried (no such headphones at hand). Reports are welcome on
issue #13.
Smoother fast skipping
- Skips are paced. Pressing Next or Previous quickly sends them to the player one every 0.3 s, so it never gets
flooded; you still land on the same song. Up to 8 presses can wait; Play/Pause stops any still waiting. (The Disc's
own buttons go straight to the player, as before.) - Covers settle first. A song's cover is decoded once the song has been current for about 0.3 s, so the songs
you fly past cost nothing. Title, artist and times still change at once. - Play history counts a song after it has played for a second, not the moment it flashes by.
Bluetooth
- No more pauses a few seconds into a song. Disco no longer sends play/pause on its own to "fix" playback after
a Bluetooth change: that single command could pause music that was in fact playing. If music really stopped, it
shows "Playback paused - press Play to resume" instead. - Switching to AAC/LDAC no longer stops a playing song. Changing codec rebuilds the Bluetooth link, which pauses
FiiO's player. Disco now only switches with nothing playing, or pauses first, switches, waits until BlueALSA
confirms the new codec, and then plays again: a short silence instead of a stuck pause. If the link is already on
the chosen codec, nothing is switched at all. - Codec fallback: LDAC, then AAC, then SBC. With any LDAC setting, headphones without LDAC get AAC when they offer
it; SBC only when they offer neither. An LDAC request that can't get through also tries AAC first. - More reliable routing: the same headphones reconnecting get the full set-up again; changing source (USB DAC,
Bluetooth receiving...) and coming back routes afresh; a route started while a song is still starting waits a moment;
a step that fails is reported instead of being taken for success. - Connecting and disconnecting: device search is stopped before pairing and never runs twice at once; Disconnect
cancels a connection still in progress; turning Bluetooth off and on quickly ends with it on; Forget only says so
when the device is really gone. - Old commands can't act late: commands waiting for a busy player are dropped if the player restarted meanwhile,
and a cancelled codec switch is withdrawn. - The connected device is found in long device lists too.
Help
- First-use hints and Help > How to match what Disco does today: Immersive with circular control, the time
preview when holding the progress line, Quick Settings EQ (tap: on/off, hold: Equalizer), "hold an item" for
artists and folders too. Two new How-to pages: Queue / picking and Start-up / battery (Volume Up at power-on
for the other interface; holding the battery line to reset its totals).
A crash log
Disco now keeps a small log at /usr/data/diskos_crash.log: when it started, when the player restarted, crashes
(with where in the code), low memory and moments the interface was held up. If Disco ever drops back to FiiO's own
interface, that file tells us why: please attach its last lines to an issue.
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.0.
- 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
Fast skipping: ui_transport_command paces on-screen skips (300 ms, SKIP_PENDING_MAX 8); update_cover_for_path
posts the decode after COVER_SETTLE_MS 300 via ui_art_poll; mdb_record_play after 1 s current. Crash log:
crashlog.c (signal handler with pc/ra/sp/thread, start lines, player restarts, MemAvailable under 12 MB, main-loop
gaps over 1.5 s). Bluetooth, from the 2.5.9 Bluetooth audit (B01-B07, B09 part), the delayed-pause report (P01, P02)
and the additional findings (N01-N04): route validity separate from device identity (forgotten after two empty polls
or a source change), routing only in Playback, codec hold bound to song/session and never toggling a playing song,
post-route guard hint-only, routing deferred while a play request is pending, codec switches gated by
ui_codec_switch_gate (never under a playing song: pause and hold first) and confirmed via BlueALSA's selected codec
before the hold releases (0.5 s settle, 10 s cap), per-bring-up token with a synchronous
teardown marker, close-on-exec capture pipes with exit status, codec send retried and LDAC -> AAC -> SBC, our own
discovery and connect processes (stopped before connecting / on Disconnect), Forget verified, session-tagged outgoing
frames dropped after a player restart, targeted withdrawal of cancelled codec frames, every route step checked, peer
status resumed across passes. Not yet: a persistent pairing agent (B08), details/Forget off the UI thread, confirming
the selected codec. Tests: queue_test, bt_capture, bt_power, bt_codec, bt_peer, ipc_queue, bt_bulk_favourites (guard,
route hold), art_transition, art_responsiveness. Built with the GCC 11.2 MIPS toolchain; build record in
payload/mq_ui.build.json.