Protocol
Time·
How the ring keeps time: 6-byte local-epoch seconds, the set-time echo, and what that means for UTC.
In 10 seconds
The ring knows no time zones: every stamp is local wall-clock seconds in a 6-byte LE field (ts6).
utc = ts6 − tz_offset of whoever set the clock. Audio packets carry a counter seeded with the start time, not
per-packet stamps. ring-cli settime
(BleCommonUtils.deviceTimestampToUtcTimestamp in the APK does exactly this.)
Setting the clock·
LoraFit, ring-cli handshake and the gateways set the time on every connect; history pulled before that carries
whatever drift the ring accumulated.
Where time shows up·
| where | field | notes |
|---|---|---|
| live ticks (11, 24, 21) | ts6 |
ring clock at the tick |
| history items (33/34/36) | ts6 |
34 = bucket end, minute :59 style; 33 = bucket start |
| terminators (42/43/45) | ts6 |
00:00 of the requested day |
| audio packets (0x32–0x34) | u32 |
ring clock at recording start, then +1 per packet — a counter, not a per-packet stamp |
| health platform | ISO-8601 UTC | the gateway converts once, with its own zone |
A memo's real start is packet 1's value; its length is packets × 240 ms, not the counter span.