What's Changed in v3.2.1
This is a bug-fix release focused on O2 Ring Bluetooth reliability, resolving
the issues reported in #302.
Fixed
-
O2 Ring stops syncing until reboot ("connect start failed: 6").
A race between NimBLE's connect timeout and a late-arriving connection
event could leak a BLE connection slot. Once leaked, every subsequent
connect attempt failed until SomnoTrace was rebooted. Connect attempts
are now properly cancelled on timeout, late connections are terminated,
and leftover state is cleaned up before each new attempt — in both the
Gen2/OxyII and Gen1 ring drivers. -
SomnoTrace could connect to the wrong Wellue/Viatom device.
If the paired O2 Ring was asleep or out of range while another Wellue
device (e.g. an ER1-LW ECG Holter, or a second ring in the household)
was advertising, SomnoTrace would fall back to connecting to it anyway —
and could corrupt its saved paired-address hint in the process. The ring
is now identified by its own identity: exact MAC address, saved BLE name,
or the last 4 digits of its serial number. If the paired device isn't
seen in a scan, the cycle is skipped instead of connecting to whatever
happens to be nearby. -
Pairing discovery remains model-agnostic. Scanning is still
permissive, so unofficial and future Viatom/Wellue models (Oxyfit,
O2 Flex, etc.) continue to appear and work during pairing — see
discussion #257.
Internal
- The paired MAC address hint is now only updated after the device's
serial number has been verified over GATT. - Added host-side unit tests covering paired-device selection
(MAC match, name match, serial-suffix match, and rejection of
unrelated devices).