Skip to content

Releases

V0.6 - b7efb2c

Choose a tag to compare

@honnet honnet released this 14 Nov 03:56

Main new features:

  • ring temperature (experimental): none of the chips has a usable temperature sensor, so the ring uses an oscillator inside its microcontroller (RC16M, counted against the crystal every second): fewer counts when warmer, ~9.5 counts per °C on one ring between 7.5 and 42 °C. Shown in the Heart Rate app (Session panel) as an estimate in °C; "Set" adds a reference for each ring at a known temperature, and the estimate interpolates between them. It is the temperature of the ring itself, not of the skin
  • every web app connects automatically to the last ring used when it opens (no ring chooser), and releases it when the page closes or reloads

Extra:

  • Perlin app: fills the window and follows its size (computer or phone), F or double-click for full screen, and about twice as fast in full screen (60 instead of ~27 frames per second at 1920x1080)
  • rings already running this firmware (V0.1 or later) accept any of the 2 binaries, whatever their model. Stock rings only accept the binary of their product ID:
    • LibRing_b7efb2c_0x4C_2026_rings.bin: 2026 rings (product ID 0x4C)
    • LibRing_b7efb2c_0x17_older_rings.bin: original SR08 rings (product ID 0x17)

Notes:

  • the temperature needs references per ring: each ring's oscillator is different (2645 to 3157 counts at 22 °C on 4 rings, 5.4 to 8.0 counts per °C). Since 7d9d36e (web app update, same firmware), LibRing_6B, 0E, 06 and 57 come calibrated in the app (22 and 37 °C); other rings: "Set" at two known temperatures
  • automatic connection after a Chrome restart needs chrome://flags/#enable-web-bluetooth-new-permissions-backend (without it, it works after page reloads only)

V0.5 - 094f900

Choose a tag to compare

@honnet honnet released this 12 Nov 05:41

Main new features:

  • ring-to-ring RSSI: each connected ring measures the signal strength of the other rings (~6 reports/s, both directions agree within 1-3 dB), groundwork for estimating distances between rings (e.g. between the hands)
  • new "Multi-ring experiments" app: several rings at once ("Add rings" asks for one ring after another, allowed rings reconnect automatically when the page opens), RSSI to the computer and between rings with live graphs, sorting by name / RSSI / reports / heard, battery level, Forget and Disconnect all
  • battery level: the ring estimates its charge (also while charging) and learns its own range; shown in the app and in make scan
  • RSSI between each ring and the computer, measured by the ring

Extra:

  • flash rings from macOS (make scan, make flash)
  • fix: over-the-air updates with large writes could fail as the custom service grew (memory pool size)
  • the app keeps working when Chrome on Linux stops delivering notifications (it reads the values instead)
  • rings already running this firmware (V0.1 or later) accept any of the 2 binaries, whatever their model. Stock rings only accept the binary of their product ID:
    • LibRing_094f900_0x4C_2026_rings.bin: 2026 rings (product ID 0x4C)
    • LibRing_094f900_0x17_older_rings.bin: original SR08 rings (product ID 0x17)

Notes:

  • ring-to-ring RSSI uses more battery (the ring listens about 60 % of the time): "Stop ring-to-ring RSSI" in the app when it isn't needed
  • the battery % is an estimate: until a ring has seen a charger plug-in / removal and a full charge, it shows "(not learned yet)"; learned values are lost when the ring restarts or is updated
  • Chrome remembers the rings across its restarts only with chrome://flags/#enable-web-bluetooth-new-permissions-backend
  • "Scan RSSI" (computer-side RSSI of rings that aren't connected) doesn't work in Chrome on Linux

V0.4 - 68d9c07

Choose a tag to compare

@honnet honnet released this 10 Nov 04:56

Main new features:

  • SpO2: cleaner pulses with new red / IR defaults (current 32 = 25 mA, 64 us pulses instead of 8 / 24 at 128 us): 1.2x (red) and 1.4x (IR) the pulse-to-noise ratio, measured in a sweep on 5 rings worn at once
  • SpO2 fix: the IR stayed off when the heart-rate LED was switched off ("Off" in the app), so the SpO2 IR graph showed only noise (the web app also works around it on V0.3 rings)
  • Heart Rate, HRV & SpO2 app: red / IR brightness and pulse length controls, a spectral SpO2 estimate (red / IR amplitudes at the heart rate over 20 s, more robust than the time-domain one), and a recorder to label the signal good / medium / bad and download the raw data
  • display mode over BLE: [0xF4, mode] on the PPG characteristic (0 fluid, 1 ring ID, 2 off), e.g. to switch the displays off before optical measurements

Extra:

  • light leak calibration: stored per ring and per pulse length, turns Auto on and gives up after 30 s (it could hang); recalibrate each ring once in the dark with the new defaults
  • camera check: makes the IR LED visible through a phone camera; brightness slider up to 255
  • SpO2 tips in the app: sensor on the palm side, hand palm up (palm down gave ~2.5x weaker pulses), nothing pressing on the sensor
  • make flash with several rings: fixed the final check
  • the PPG driver is now HX3918.c (the actual sensor)
  • rings already running this firmware (V0.1 or later) accept any of the 2 binaries, whatever their model. Stock rings only accept the binary of their product ID:
    • LibRing_68d9c07_0x4C_2026_rings.bin: 2026 rings (product ID 0x4C)
    • LibRing_68d9c07_0x17_older_rings.bin: original SR08 rings (product ID 0x17)

Notes:

  • SpO2 is experimental and not a medical measurement (not calibrated against a reference oximeter; the red / IR ratio differs between rings)
  • a stock ring that was used with the vendor app refuses the computer: flash it once with the Android SUOTA app

V0.3 - 41bdceb

Choose a tag to compare

@honnet honnet released this 09 Nov 04:34

Main new features:

  • heart-rate sensor (PPG, TYHX HX3918) streamed over BLE, with the heart rate computed on the ring (only with a clear pulse and a still hand) and an experimental SpO2 mode (red + IR, not calibrated)
  • new web demos: Heart Rate, HRV & SpO2 (pulse, heart rate variability, session trends) and Webcam Pulse (heart rate from the laptop webcam)
  • outside indicators: red heart while an app uses the heart-rate sensor, green steps while it streams the accelerometer
  • charging indicators: dim red heart while charging, dim green when nearly full (also with the display off)

Extra:

  • faster, more reliable connections (advertising every 100 ms instead of 687.5 ms: ~1.5 s instead of 3-10 s); the web apps retry, warn when a connection fails, and keep working after a reconnection (Chrome on Linux)
  • fluid display twice as fast (200 steps/s, with half the CPU time), display at 50 % brightness
  • make scan shows the firmware commit of each ring; make flash LibRing_XX flashes rings by name
  • MIDI app: the touch sensor is sent as a note (or CC); all the apps use one plot library (no Chart.js)
  • rings already running this firmware (V0.1 or later) accept any of the 2 binaries, whatever their model. Stock rings only accept the binary of their product ID:
    • output_41bdceb_0x4C_2026_rings.bin: 2026 rings (product ID 0x4C)
    • output_41bdceb_0x17_older_rings.bin: original SR08 rings (product ID 0x17)

Notes:

  • the accelerometer range is now set to +-16 g on every ring (it was never set, and rings differed); the accelerometer demos read the range from the ring, so update the rings to this version
  • a stock ring that was used with the vendor app refuses the computer: flash it once with the Android SUOTA app
  • SpO2 is experimental and not a medical measurement

V0.2 - f0a6f8c

Choose a tag to compare

@honnet honnet released this 07 Nov 01:43

Main new features:

  • long press (3 s) on the button cycles the display: fluid simulation, ring ID (the 2 hex digits of its BLE name), display off
  • unique BLE address and name per ring (LibRing_XX): now using all 16 bytes of the flash unique ID

Extra:

  • make flash is ~3-4x faster (~15 s per ring instead of ~53 s)
  • make flash_all: flashes every ring in range, one after the other
  • rings already running this firmware (V0.1 or later) accept any of the 2 binaries, whatever their model. Stock rings only accept the binary of their product ID:
    • output_f0a6f8c.bin: 2026 rings (product ID 0x4C)
    • output_f0a6f8c_0x17.bin: original SR08 rings (product ID 0x17)

Notes:

  • the rings updated from V0.1 get a new BLE address and name (new ID computation)
  • battery level still not streamed in this version (battery demo gets no data)
  • many optimizations and cross platform efforts are still needed...

V0.1 - 07b56a3

Choose a tag to compare

@honnet honnet released this 05 Nov 15:40

Main features:

  • accel + button streaming
  • fluid simulation on the 7 seg display
  • BLE name includes 2 hex nibbles of hardware ID (format: LibRing_XX)

Extra:

  • firmware update over BLE from a linux computer (make flash), or the Android SUOTA app
  • supports original SR08 rings (product ID 0x17) and 2026 rings (0x4C)
  • web app demos: gesture/sleep recognition, camera, Perlin noise, music (MIDI), battery

Known issues:

  • with mixed ring models, flash each ring with its own PRODUCT_ID
  • battery level not streamed in this version (battery demo gets no data)
  • many optimizations and cross platform efforts are needed...