Skip to content

v1.2.2

Latest

Choose a tag to compare

@ilyakruchinin ilyakruchinin released this 30 Aug 16:27

What's new since v1.2.1

O2 Ring (Gen1 / Legacy) support

This is the headline change. First-generation O2 Ring devices were
syncing files but their recordings never appeared on the dashboard,
and uploads to SleepHQ silently failed. The root cause was a
misinterpreted binary file format — the firmware was reading the
vendor's VLD3 header at the wrong byte offsets, so every recording
looked like it had an invalid timestamp and was discarded.

  • Recordings now show up. The VLD3 file parser was rewritten from
    scratch against the vendor's documented byte layout. SpO₂, pulse,
    and acceleration samples are decoded correctly, and the recording's
    start time is extracted from the header (with the filename as a
    fallback when the header clock was never set on the ring).
  • One bad file no longer blocks the whole sync. If a single
    recording fails to transfer or convert, the sync continues with the
    remaining files instead of aborting. Failed files are retried on the
    next sync automatically.
  • The ring's clock is now synchronized and verified. When you pair
    or pull from a Gen1 ring, the firmware checks the ring's current
    time against the real clock, corrects it if it's off by more than a
    couple of seconds, and then reads it back to confirm it took. This
    prevents future recordings from being stamped with wrong dates.
  • You can see what's happening. The dashboard now reports how many
    recordings loaded, how many have time-quality warnings, how many
    failed to parse, and how many were downloaded but are still awaiting
    conversion — so you're not left guessing why a graph is missing.
  • Bad data is held back from SleepHQ. Recordings with missing or
    unreliable timestamps, or whose file size doesn't match what the
    header claims, are marked as not uploadable. They still appear on
    the local dashboard (with a warning) but won't be pushed upstream
    until they're trustworthy.
  • Power-loss recovery. If the device loses power mid-conversion,
    the next boot picks up where it left off instead of leaving a
    half-written recording stuck in limbo.

Device scanning

  • Both ring generations are found in a single scan. Previously the
    scanner only looked for whichever ring type was currently paired.
    Now it scans for Gen1 and Gen2 rings at the same time and merges the
    results, so switching devices no longer requires forgetting and
    re-pairing.

SD card reliability

  • Factory exFAT cards now work out of the box. New 64 GB SDXC
    cards ship formatted as exFAT, which the firmware's FATFS doesn't
    support. Pressing "Format SD" used to silently do nothing on these
    cards. Now it reformats them to FAT32 and mounts cleanly.
  • Automatic reboot after formatting. After a successful SD format
    the device reboots itself so the card is remounted in a clean state,
    instead of requiring a manual power cycle.
  • 1-bit fallback. If the SD card can't be initialised in 4-bit
    mode, the formatter retries in 1-bit mode before giving up — useful
    for cards or slots with marginal wiring.

Display

  • No more screen glitches when rotating. Panel rotation was
    previously applied from the HTTP handler thread, which could race
    with the display task's SPI transactions and corrupt the screen.
    Rotation is now deferred to the display task.
  • Info panel no longer pauses therapy tracking. Switching to the
    info panel view used to make the firmware think therapy had stopped;
    now both the graph and info views are treated as "therapy active."