From f580bc70a7169c5785093bf9f7ac3e52e83102e0 Mon Sep 17 00:00:00 2001 From: Saksham Bhutani Date: Sat, 25 Jul 2026 00:44:56 -0700 Subject: [PATCH 1/2] Add LittleMeatball R10M support and harden the shared YCBT stack --- .../r10m.imageset/Contents.json | 12 + .../Assets.xcassets/r10m.imageset/r10m.png | Bin 0 -> 345217 bytes .../ColmiSmartHealthCoordinator.swift | 7 +- PulseLoop/RingProtocol/RingBLEClient.swift | 36 ++- PulseLoop/RingProtocol/TK5Coordinator.swift | 10 +- PulseLoop/RingProtocol/YCBTCoordinator.swift | 134 +++++++++++ PulseLoop/RingProtocol/YCBTDecoder.swift | 6 +- PulseLoop/RingProtocol/YCBTDriver.swift | 106 ++++++++- PulseLoop/RingProtocol/YCBTEncoder.swift | 75 +++++- .../RingProtocol/YCBTHealthRecords.swift | 20 +- .../RingProtocol/YCBTHistoryTransfer.swift | 56 ++++- PulseLoop/RingProtocol/YCBTProtocol.swift | 32 ++- PulseLoop/RingProtocol/YCBTSyncEngine.swift | 131 ++++++++++- PulseLoop/Views/Settings/DeviceHeroCard.swift | 4 + PulseLoop/Wearables/WearableCoordinator.swift | 6 + PulseLoop/Wearables/WearableDriver.swift | 23 ++ PulseLoop/Wearables/WearableModel.swift | 25 +- PulseLoopTests/YCBTCoordinatorTests.swift | 177 ++++++++++++++ PulseLoopTests/YCBTDecoderTests.swift | 53 ++++- PulseLoopTests/YCBTDriverTests.swift | 85 ++++++- PulseLoopTests/YCBTEncoderTests.swift | 73 +++++- PulseLoopTests/YCBTHealthRecordsTests.swift | 66 ++++-- PulseLoopTests/YCBTHistoryTransferTests.swift | 218 +++++++++++++++++- PulseLoopTests/YCBTSupportFunctionTests.swift | 7 +- 24 files changed, 1292 insertions(+), 70 deletions(-) create mode 100644 PulseLoop/Assets.xcassets/r10m.imageset/Contents.json create mode 100644 PulseLoop/Assets.xcassets/r10m.imageset/r10m.png create mode 100644 PulseLoop/RingProtocol/YCBTCoordinator.swift create mode 100644 PulseLoopTests/YCBTCoordinatorTests.swift diff --git a/PulseLoop/Assets.xcassets/r10m.imageset/Contents.json b/PulseLoop/Assets.xcassets/r10m.imageset/Contents.json new file mode 100644 index 0000000..3f8c93b --- /dev/null +++ b/PulseLoop/Assets.xcassets/r10m.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "r10m.png", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/PulseLoop/Assets.xcassets/r10m.imageset/r10m.png b/PulseLoop/Assets.xcassets/r10m.imageset/r10m.png new file mode 100644 index 0000000000000000000000000000000000000000..ee6e308a97cbd0d83f1a4160986ac8296f35dcc2 GIT binary patch literal 345217 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 z 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

ZCFn4e1{7%1+yR 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 WearableDriver { - YCBTDriver(writer: writer) + YCBTDriver(writer: writer, profile: YCBTFamilyProfile( + baselineCapabilities: capabilities, + bitmapGatedCapabilities: bitmapGatedCapabilities, + queryChipSchemeAtStartup: true, + supportsBloodPressureMonitor: true + )) } } diff --git a/PulseLoop/RingProtocol/RingBLEClient.swift b/PulseLoop/RingProtocol/RingBLEClient.swift index 51603a7..7a2c3be 100644 --- a/PulseLoop/RingProtocol/RingBLEClient.swift +++ b/PulseLoop/RingProtocol/RingBLEClient.swift @@ -38,6 +38,11 @@ final class RingBLEClient: NSObject { /// `TK5x`-named LuckRing sibling. ("TK18" does not hit the `TK5` prefix, so today it is moot.) static let coordinators: [WearableCoordinator.Type] = [ JringCoordinator.self, + // Ahead of both Colmi coordinators: `ColmiSmartHealthCoordinator`'s ` <4 hex>` name + // convention accepts "R10M FCF4", so an R10M carrying the shared `1078` company ID would + // otherwise be claimed as a Colmi and handed the Colmi baseline. This coordinator's own matcher + // is narrow enough (see there) that leading the Colmis costs them nothing. + YCBTCoordinator.self, ColmiSmartHealthCoordinator.self, ColmiCoordinator.self, LuckRingCoordinator.self, @@ -106,6 +111,10 @@ final class RingBLEClient: NSObject { /// Optional second write characteristic for big-data requests (Colmi `de5bf72a`). private var commandChar: CBCharacteristic? private var notifyChars: [CBUUID: CBCharacteristic] = [:] + /// Notify characteristics that have actually reported `isNotifying` on *this* link. Reset per + /// connection: a driver survives a reconnect, so a set carried over would let the next link claim + /// readiness on subscriptions that belong to the dead one. + private var subscribedNotifyUUIDs: Set = [] private var batteryCharacteristic: CBCharacteristic? // MARK: Active driver / engine (selected per connection) @@ -297,6 +306,19 @@ final class RingBLEClient: NSObject { pumpWrites() } + /// Put commands at the **head** of the write queue, preserving their order relative to each other. + /// + /// Only for `WearableDriver.immediatePostSubscriptionCommands()`. Everything else must append: the + /// queue is what makes writes serial and ordered, and a caller jumping it would reorder a protocol + /// that depends on its own sequence. + private func prependWrites(_ commands: [Data]) { + let framed = commands.map { command -> (data: Data, useCommandChannel: Bool) in + let framed = activeDriver?.frame(command) ?? command + return (data: framed, useCommandChannel: activeDriver?.usesCommandChannel(for: framed) ?? false) + } + writeQueue.insert(contentsOf: framed, at: 0) + } + func readBattery() { guard let peripheral, let batteryCharacteristic else { return } peripheral.readValue(for: batteryCharacteristic) @@ -358,6 +380,7 @@ final class RingBLEClient: NSObject { central.cancelPeripheralConnection(old) } writeChar = nil; commandChar = nil; notifyChars = [:]; batteryCharacteristic = nil + subscribedNotifyUUIDs = [] writeInFlight = false; writeQueue = [] peripheral = target target.delegate = self @@ -732,6 +755,7 @@ extension RingBLEClient: CBCentralManagerDelegate { writeChar = nil commandChar = nil notifyChars = [:] + subscribedNotifyUUIDs = [] batteryCharacteristic = nil writeInFlight = false writeQueue = [] @@ -817,8 +841,12 @@ extension RingBLEClient: CBPeripheralDelegate { guard let driver = activeDriver, driver.notifyUUIDs.contains(characteristic.uuid), characteristic.isNotifying else { return } - // Fully connected once at least one notify char is live. (Multi-notify devices may fire - // this twice; guard against re-running startup.) + subscribedNotifyUUIDs.insert(characteristic.uuid) + // Fully connected once every channel the driver declared *required* is live — or, for a + // driver that declares none, on the first one, which is the historical behaviour. (Multi-notify + // devices fire this once per channel; guard against re-running startup.) + let required = driver.requiredSubscriptionsBeforeConnected + guard required.allSatisfy(subscribedNotifyUUIDs.contains) else { return } guard state != .connected else { return } state = .connected cancelConnectTimeout() // the attempt landed @@ -844,6 +872,10 @@ extension RingBLEClient: CBPeripheralDelegate { startKeepalive() startWatchdog() readBattery() + // Order on the wire: the driver's own handshake, then the engine's startup sequence. + // `onConnected` is what queues the latter, so the prepend has to happen first — after it, the + // engine's commands are already in the queue and "head" would mean jumping them too. + prependWrites(driver.immediatePostSubscriptionCommands()) onConnected?() pumpWrites() } diff --git a/PulseLoop/RingProtocol/TK5Coordinator.swift b/PulseLoop/RingProtocol/TK5Coordinator.swift index c0d78cb..fe10521 100644 --- a/PulseLoop/RingProtocol/TK5Coordinator.swift +++ b/PulseLoop/RingProtocol/TK5Coordinator.swift @@ -124,7 +124,15 @@ final class TK5Coordinator: WearableCoordinator { let iconSystemName = "circle.circle.fill" + /// Both firmware flags stay `true`: the TK5 answers `02 1b` GetChipScheme without dropping the link, + /// and the R99 session showed a YCBT ring NAKing the all-day BP monitor harmlessly rather than + /// needing it suppressed. Only the R10M turns either off. func makeDriver(writer: RingCommandWriter) -> WearableDriver { - YCBTDriver(writer: writer) + YCBTDriver(writer: writer, profile: YCBTFamilyProfile( + baselineCapabilities: capabilities, + bitmapGatedCapabilities: bitmapGatedCapabilities, + queryChipSchemeAtStartup: true, + supportsBloodPressureMonitor: true + )) } } diff --git a/PulseLoop/RingProtocol/YCBTCoordinator.swift b/PulseLoop/RingProtocol/YCBTCoordinator.swift new file mode 100644 index 0000000..bf35dfd --- /dev/null +++ b/PulseLoop/RingProtocol/YCBTCoordinator.swift @@ -0,0 +1,134 @@ +import Foundation +@preconcurrency import CoreBluetooth + +/// Coordinator for generic YCBT / SmartHealth rings that belong to neither the Colmi line nor the TK5 — +/// the **LittleMeatball R10M** is the hardware-validated unit (FCF4, firmware 2.32). +/// +/// The *protocol* is not R10M-specific: the ring speaks YCBT, so the driver, encoder, decoder and sync +/// engine it builds are the shared `YCBT*` types. This file is the whole of what makes an R10M an R10M — +/// its advertised identity, its capability set, and the two firmware quirks carried in +/// `YCBTFamilyProfile`. +/// +/// ## Why a separate family rather than another `.colmiSmartHealth` card +/// +/// `.colmiSmartHealth` is the Colmi line's SmartHealth firmware; its capability baseline, its product art +/// and its app-variant picker are all Colmi facts. The R10M is a different vendor's ring that happens to +/// speak the same protocol. Folding it in would have it inherit Colmi art and Colmi claims, and would put +/// an "is this a QRing or a SmartHealth ring?" question in front of a user whose ring only ever shipped +/// one firmware. +@MainActor +final class YCBTCoordinator: WearableCoordinator { + nonisolated deinit {} // skip the main-actor isolated-deinit hop (crashes on older sim runtimes) + + static let deviceType: RingDeviceType = .ycbt + + /// The R10M naming convention, normalized (trimmed + uppercased) before matching. + /// + /// Deliberately **looser** than `WearableModel.r10m`'s catalog pattern: that one is user-facing + /// identity and must not mislabel a ring, while this one only decides which driver to install. A + /// bare `R10M`, a `-` separator, or a non-hex suffix still gets the right protocol — it just resolves + /// to no catalog model, so it pairs with a generic name and the fallback art. + private static let namePattern = "^R10M(?:[ _-][0-9A-Z]+)?$" + + /// The QRing-flavoured Colmi rings advertise one of these. Presence is a positive disqualifier: that + /// ring answers to `ColmiDriver`, and this coordinator is registered ahead of it. + private static let qringServiceUUIDs: [CBUUID] = [ + CBUUID(string: ColmiUUIDs.serviceV1), + CBUUID(string: ColmiUUIDs.serviceV2), + ] + + /// Service-first, then name — the reverse of `TK5Coordinator`, because unlike the TK5 the R10M + /// **does** advertise its proprietary `be940000` service. + /// + /// 1. A QRing service disqualifies outright. + /// 2. If a catalog card claims the name, the card decides — so a `TK5 24AA` or an `R09_A1B2` is + /// handed straight back even though both are YCBT rings, because their cards name other families. + /// 3. Otherwise: the `be940000` service, or an R10M-shaped name, is enough on its own. + /// + /// Note what is **not** here: no `TK5`/`T50`/`SR0x`/`R0x` name prefixes and no `1078` manufacturer + /// marker. Both would let this coordinator — registered ahead of `TK5Coordinator` and + /// `ColmiSmartHealthCoordinator` — swallow uncataloged rings that belong to those families and hand + /// them a capability set built for a different ring. A YCBT ring nothing recognizes is better served + /// by the coordinator whose baseline was written for it. + static func matches(name: String?, advertisement: AdvertisementInfo) -> Bool { + guard !advertisement.serviceUUIDs.contains(where: { qringServiceUUIDs.contains($0) }) + else { return false } + if let model = WearableModel.model(advertisedName: name) { + return model.families.contains(deviceType) + } + if advertisement.serviceUUIDs.contains(CBUUID(string: YCBTUUIDs.service)) { return true } + return isYCBTName(name) + } + + /// Does this local name follow the R10M convention? + static func isYCBTName(_ name: String?) -> Bool { + guard let name, let regex = try? NSRegularExpression(pattern: namePattern) else { return false } + let normalized = name.trimmingCharacters(in: .whitespacesAndNewlines).uppercased() + let range = NSRange(normalized.startIndex.. = [ + .heartRate, .spo2, .steps, .sleep, .remSleep, .battery, + .manualHeartRate, .manualSpo2, + .realtimeHeartRate, .realtimeSteps, + .measurementInterval, + ] + + /// The per-SKU sensors: offered only if this unit's `02 01` bitmap claims them. + /// + /// FW 2.32 on the validated unit declares none of temperature, blood sugar, HRV, stress, fatigue or + /// Find Device, so in practice the R10M shows exactly its baseline plus blood pressure. They stay + /// listed because the gate costs a ring that *does* have them nothing — it claims them, and it gets + /// them — and because "R10M" is a model, not a firmware. + /// + /// `.fatigue` rides the stress bit for the same reason it does on the TK5: there is no + /// `ISHASFATIGUE`, but fatigue is the `body` field of the body-data record (`05 33`) whose whole query + /// the vendor app gates on `IS_HAS_PRESSURE` — one record, one bit, two fields. + let bitmapGatedCapabilities: Set = [ + .temperature, .bloodPressure, .manualBloodPressure, + .stress, .fatigue, .bloodSugar, + .hrv, .manualHrv, + .findDevice, + ] + + let iconSystemName = "circle.circle.fill" + + /// Two firmware quirks, both observed on the R10M and both absent on the TK5 / SmartHealth-Colmi + /// (which pass these flags `true`): + /// + /// - **No `02 1b` GetChipScheme.** The R10M closes an otherwise healthy connection with HCI `0x13` on + /// this purely informational query. + /// - **No `01 1c` all-day blood-pressure monitor.** The ring does not implement it; sending it earns a + /// NAK and nothing else. + func makeDriver(writer: RingCommandWriter) -> WearableDriver { + YCBTDriver(writer: writer, profile: YCBTFamilyProfile( + baselineCapabilities: capabilities, + bitmapGatedCapabilities: bitmapGatedCapabilities, + queryChipSchemeAtStartup: false, + supportsBloodPressureMonitor: false + )) + } +} diff --git a/PulseLoop/RingProtocol/YCBTDecoder.swift b/PulseLoop/RingProtocol/YCBTDecoder.swift index 749ef5b..5e3aab4 100644 --- a/PulseLoop/RingProtocol/YCBTDecoder.swift +++ b/PulseLoop/RingProtocol/YCBTDecoder.swift @@ -79,7 +79,11 @@ struct YCBTDecoder { // Cumulative day totals. steps verified against capture (0x027b = 635); distance/calories // are the adjacent u16s — UNVERIFIED (capture-inferred), but `applyActivityUpdate` uses // max() so an over-read can't corrupt the day. - guard p.count >= 2 else { return [.commandAck(commandId: frame.cmd)] } + // + // All three fields or none. `YCBTBytes.u16` returns 0 past the end of the buffer, so a short + // frame decoded as a *valid* activity row with zeroed distance and calories — the ratchet + // keeps the totals safe, but the row itself asserts the ring reported a zero it never sent. + guard p.count >= 6 else { return [.commandAck(commandId: frame.cmd)] } return [.activityUpdate(timestamp: now, steps: YCBTBytes.u16(p, 0), distanceMeters: Double(YCBTBytes.u16(p, 2)), calories: Double(YCBTBytes.u16(p, 4)))] diff --git a/PulseLoop/RingProtocol/YCBTDriver.swift b/PulseLoop/RingProtocol/YCBTDriver.swift index fc5be61..a036eaf 100644 --- a/PulseLoop/RingProtocol/YCBTDriver.swift +++ b/PulseLoop/RingProtocol/YCBTDriver.swift @@ -1,6 +1,30 @@ import Foundation @preconcurrency import CoreBluetooth +/// The handful of facts that differ between the ring families sharing this driver. Everything else about +/// the YCBT stack is protocol, identical for all of them. +/// +/// The two `Bool`s are firmware quirks, not preferences — both default to the permissive value so an +/// existing family keeps its behaviour, and only the R10M turns them off. +struct YCBTFamilyProfile { + /// Unconditional promises from the coordinator. The ring's own bitmap can never take one back. + let baselineCapabilities: Set + /// Capabilities the coordinator will grant *if* the ring's `02 01` reply claims them. + let bitmapGatedCapabilities: Set + /// Send the informational `02 1b` GetChipScheme during startup. The R10M closes an otherwise healthy + /// connection with HCI `0x13` when asked. + var queryChipSchemeAtStartup: Bool = true + /// Send the all-day blood-pressure monitor `01 1c`. The R10M does not implement it even when its + /// bitmap declares the BP sensor, so the flag is separate from the `.bloodPressure` capability. + var supportsBloodPressureMonitor: Bool = true + + /// The additive refinement, identical in rule to `WearableCoordinator.refinedCapabilities` — the + /// driver needs its own copy because it filters decoded events before the client ever sees them. + func refined(bitmapDerived: Set) -> Set { + baselineCapabilities.union(bitmapGatedCapabilities.intersection(bitmapDerived)) + } +} + /// YCBT driver. Owns the length-prefixed CRC16 framing and the split-channel topology: the command /// characteristic `be940001` is *both* the write target and a notify source (command replies), while /// `be940003` carries the async live/history stream. The standard `180D`/`2A37` Heart Rate @@ -52,8 +76,19 @@ final class YCBTDriver: WearableDriver { /// entries are then the stale ones, and dropping them keeps the newest command pairable. private static let maxPendingMeasurementReplies = 8 - init(writer: RingCommandWriter) { + /// The family this connection is serving — capability sets plus the two firmware quirks. + private let profile: YCBTFamilyProfile + private let encoder = YCBTEncoder() + + /// What this ring is currently believed to have: the family baseline until its `02 01` reply lands, + /// then the additive refinement. Reset on every connect and disconnect, because the answer belongs to + /// one link — a reconnect to a *different* ring of the same family must not inherit it. + private var capabilities: Set + + init(writer: RingCommandWriter, profile: YCBTFamilyProfile) { self.writer = writer + self.profile = profile + self.capabilities = profile.baselineCapabilities self.transfer = YCBTHistoryTransfer(writer: writer) } @@ -73,6 +108,23 @@ final class YCBTDriver: WearableDriver { let batteryServiceUUID: CBUUID? = nil // battery is in-band (GetDeviceInfo 02 00, payload[5]) let batteryCharUUID: CBUUID? = nil + /// **Both** channels must be live before the connection counts as up. They are not redundant: command + /// replies (the whole handshake — device info, the capability bitmap, every ACK) arrive on `be940001`, + /// while the live and history streams arrive on `be940003`. Publishing `.connected` on whichever + /// subscribed first — which is what a driver that declares nothing here gets — starts the handshake + /// against a half-subscribed ring, and whichever half was still pending silently swallows its share + /// of the replies. + let requiredSubscriptionsBeforeConnected: [CBUUID] = [ + CBUUID(string: YCBTUUIDs.command), + CBUUID(string: YCBTUUIDs.stream), + ] + + /// Run ahead of the startup sequence, the moment both channels are up. See + /// `YCBTEncoder.postSubscriptionHandshake`. + func immediatePostSubscriptionCommands() -> [Data] { + encoder.postSubscriptionHandshake().map { Data($0) } + } + // MARK: Framing func frame(_ command: Data) -> Data { // Every outbound command passes through here exactly once, which is what makes this the seam that @@ -110,6 +162,7 @@ final class YCBTDriver: WearableDriver { // Commands the old link never got a reply for are owed nothing by the new one; leaving them // queued would pair the fresh connection's first `03 2f` reply with a dead command's mode. pendingMeasurementReplies.removeAll() + capabilities = profile.baselineCapabilities } /// Cancelling on the next *connect* is too late for the transfer: its stall watchdog is a timer, and @@ -121,6 +174,7 @@ final class YCBTDriver: WearableDriver { assembler.reset() transfer.cancel() pendingMeasurementReplies.removeAll() + capabilities = profile.baselineCapabilities } // MARK: Inbound decode @@ -151,7 +205,53 @@ final class YCBTDriver: WearableDriver { events.append(contentsOf: decoder.decode(frame)) } } - return events + updateCapabilities(from: events) + return events.filter(isSupported) + } + + /// Fold the ring's own `02 01` reply into what we believe it has. Additive only, exactly as the + /// coordinator does for the UI-facing set — the bitmap can grant a gated capability, never revoke a + /// baseline one. + private func updateCapabilities(from events: [RingDecodedEvent]) { + for case let .supportFunctions(derived) in events { + capabilities = profile.refined(bitmapDerived: derived) + } + } + + /// Drop samples for sensors this ring has not claimed. + /// + /// The UI already hides the *cards* for unclaimed metrics, so why also drop the data? Because the two + /// gates answer different questions. A hidden card still accumulates rows in the store, and those rows + /// outlive the gate: they sync to HealthKit, they feed the coach's summaries, and they reappear the + /// day the capability is granted — as history the ring never actually measured. The R99 session is the + /// precedent: a ring that denies a sensor four ways still emits *something* in that field, and + /// whatever it is, it is not a reading. + /// + /// Heart rate, SpO₂, respiratory rate and VO₂max are never filtered: no support-function bit names + /// them, so a gate here could only ever be a permanent deletion. + private func isSupported(_ event: RingDecodedEvent) -> Bool { + switch event { + case .bloodPressureSample: return capabilities.contains(.bloodPressure) + case .bloodSugarSample: return capabilities.contains(.bloodSugar) + case .hrvSample: return capabilities.contains(.hrv) + case .stressSample: return capabilities.contains(.stress) + case .fatigueSample: return capabilities.contains(.fatigue) + case .temperatureSample: return capabilities.contains(.temperature) + case let .historyMeasurement(kind, _, _): return isSupported(kind) + default: return true + } + } + + private func isSupported(_ kind: MeasurementKind) -> Bool { + switch kind { + case .heartRate, .spo2, .respiratoryRate, .vo2max: return true + case .bloodPressureSystolic, .bloodPressureDiastolic: return capabilities.contains(.bloodPressure) + case .bloodSugar: return capabilities.contains(.bloodSugar) + case .hrv: return capabilities.contains(.hrv) + case .stress: return capabilities.contains(.stress) + case .fatigue: return capabilities.contains(.fatigue) + case .temperature: return capabilities.contains(.temperature) + } } /// The ring **retransmits an unacknowledged DevControl push** until the app answers `04 {00}`, @@ -172,6 +272,6 @@ final class YCBTDriver: WearableDriver { } func makeSyncEngine() -> RingSyncEngine { - YCBTSyncEngine(writer: writer, transfer: transfer) + YCBTSyncEngine(writer: writer, transfer: transfer, profile: profile) } } diff --git a/PulseLoop/RingProtocol/YCBTEncoder.swift b/PulseLoop/RingProtocol/YCBTEncoder.swift index 2eba5ef..b38577b 100644 --- a/PulseLoop/RingProtocol/YCBTEncoder.swift +++ b/PulseLoop/RingProtocol/YCBTEncoder.swift @@ -17,8 +17,27 @@ struct YCBTEncoder { settings.setTime(date, calendar: calendar) } - /// The connect handshake, in the SmartHealth app's own order: clock → device interrogation → - /// locale → all-day monitors → user profile → live-status stream. + /// The two commands that go out the *instant* both indication channels are live, ahead of everything + /// `startupSequence` queues — `RingBLEClient` prepends them via + /// `WearableDriver.immediatePostSubscriptionCommands()`. + /// + /// They lead for different reasons. `02 03` GetDeviceName is the cheapest possible round-trip that + /// proves the ring is answering on `be940001` at all, so a topology that came up half-subscribed + /// fails here rather than silently swallowing the whole handshake. `01 00` SetTime leads because + /// every record the ring stores is stamped from its own RTC in local wall-clock: a clock set *after* + /// the history walk has begun mis-stamps everything read before it. + func postSubscriptionHandshake(_ date: Date = Date(), calendar: Calendar = .current) -> [[UInt8]] { + [deviceNameRequest(), setTime(date, calendar: calendar)] + } + + /// Read the ring's stored name (`02 03`). + func deviceNameRequest() -> [UInt8] { + logical(YCBTGroup.get, YCBTCommand.getDeviceName, [0x47, 0x50]) + } + + /// The connect handshake, in the SmartHealth app's own order: device interrogation → locale → + /// all-day monitors → user profile → live-status stream. The clock and the name request run ahead of + /// this, in `postSubscriptionHandshake`. /// /// **Never add these to it** — each was once here, and each was a different kind of wrong: /// • **No `05 xx`.** The Health group is the *history* protocol: `YCBTHistoryTransfer` owns those @@ -29,33 +48,71 @@ struct YCBTEncoder { /// legitimate `04` write is an ACK for a push it received (`YCBTDriver.acknowledgePush`) — the /// `04 0e 00` seen in a capture was SmartHealth ACKing a `MeasurementResult`, not a handshake /// step, and replaying it unprompted does nothing. + /// + /// - Parameters: + /// - capabilities: what this ring is currently believed to have. Filters the monitor writes so a + /// ring is never asked to run a sensor it doesn't declare. + /// - queryChipScheme: `false` suppresses the informational `02 1b`. The R10M closes an otherwise + /// healthy link with HCI `0x13` on that query; the TK5 and SmartHealth-Colmi answer it fine. + /// - supportsBloodPressureMonitor: `false` suppresses the all-day BP monitor `01 1c` outright, + /// regardless of the `.bloodPressure` capability — the R10M has the sensor but not the monitor. func startupSequence( date: Date = Date(), measurement: MeasurementSettings = .allOnDefault, profile: UserProfileValues = UserProfileValues(metric: true, sex: nil, age: nil, heightCm: nil, weightKg: nil), languageCode: UInt8 = 0, - is24Hour: Bool = true + is24Hour: Bool = true, + capabilities: Set = Set(WearableCapability.allCases), + queryChipScheme: Bool = true, + supportsBloodPressureMonitor: Bool = true ) -> [[UInt8]] { var seq: [[UInt8]] = [] - seq.append(setTime(date)) // Device interrogation. The 2-byte tags are cosmetic (the firmware ignores the payload of a Get) // but we keep the app's exact bytes: they cost nothing and keep a byte-diff against a capture clean. seq.append(logical(YCBTGroup.get, YCBTCommand.getDeviceInfo, [0x47, 0x43])) seq.append(logical(YCBTGroup.get, YCBTCommand.getSupportFunction, [0x47, 0x46])) - seq.append(logical(YCBTGroup.get, YCBTCommand.getChipScheme, [])) - seq.append(logical(YCBTGroup.get, YCBTCommand.getDeviceName, [0x47, 0x50])) + if queryChipScheme { + seq.append(logical(YCBTGroup.get, YCBTCommand.getChipScheme, [])) + } seq.append(logical(YCBTGroup.get, YCBTCommand.getUserConfig, [0x43, 0x46])) seq.append(settings.language(languageCode)) seq.append(settings.units(metric: profile.metric, is24Hour: is24Hour)) - seq.append(contentsOf: settings.monitorCommands(measurement)) + seq.append(contentsOf: monitorCommands( + measurement, + capabilities: capabilities, + supportsBloodPressureMonitor: supportsBloodPressureMonitor + )) seq.append(settings.userInfo(profile)) seq.append(enableLiveStatus()) return seq } /// Re-push the all-day monitors without the rest of the handshake (the live "Save" path). - func monitorCommands(_ measurement: MeasurementSettings) -> [[UInt8]] { - settings.monitorCommands(measurement) + /// + /// Filtered by capability on the way out: each `01 xx {enable, interval}` write names one sensor, and + /// a ring that lacks it answers `0xFC`. Sending it anyway is not merely noise — it puts a rejection + /// in the middle of the handshake for something the user can't fix, and on the R10M the all-day BP + /// monitor is unimplemented even though the BP *sensor* is present (hence the separate flag). + /// + /// A capability we can't map to a monitor byte drops the command rather than passing it through: the + /// default `capabilities` is the full set, so an unfiltered caller still gets all five. + func monitorCommands( + _ measurement: MeasurementSettings, + capabilities: Set = Set(WearableCapability.allCases), + supportsBloodPressureMonitor: Bool = true + ) -> [[UInt8]] { + settings.monitorCommands(measurement).filter { command in + guard command.count >= 2 else { return false } + switch command[1] { + case YCBTSettingKey.heartMonitor: return capabilities.contains(.heartRate) + case YCBTSettingKey.bloodPressureMonitor: + return supportsBloodPressureMonitor && capabilities.contains(.bloodPressure) + case YCBTSettingKey.temperatureMonitor: return capabilities.contains(.temperature) + case YCBTSettingKey.bloodOxygenMonitor: return capabilities.contains(.spo2) + case YCBTSettingKey.hrvMonitor: return capabilities.contains(.hrv) + default: return false + } + } } /// Push the user's real height/weight/sex/age (`01 03`). diff --git a/PulseLoop/RingProtocol/YCBTHealthRecords.swift b/PulseLoop/RingProtocol/YCBTHealthRecords.swift index 3beb7d4..ecc2fbc 100644 --- a/PulseLoop/RingProtocol/YCBTHealthRecords.swift +++ b/PulseLoop/RingProtocol/YCBTHealthRecords.swift @@ -105,8 +105,12 @@ enum YCBTHealthRecords { var events: [RingDecodedEvent] = [] for r in records(in: buffer, size: 20) { let ts = YCBTBytes.date(YCBTBytes.u32(r, 0)) - events.append(.activityUpdate(timestamp: ts, steps: YCBTBytes.u16(r, 4), - distanceMeters: 0, calories: 0)) + // Steps (`u16` @4) are deliberately **not** emitted. The field is the ring's *cumulative* + // day counter as of this record, and `.activityUpdate` is a per-day max ratchet — so the + // oldest record in a dump that spans midnight sets today's total to yesterday's count and + // nothing can lower it again for the rest of the day. Activity has two sources that don't + // have this problem: the `05 02` sport buckets (additive intervals) and the `06 00` live + // status (the counter, always current). events.append(contentsOf: bloodPressureEvents(systolic: r[7], diastolic: r[8], timestamp: ts)) if r[9] > 0 { events.append(.historyMeasurement(kind: .spo2, value: Double(r[9]), timestamp: ts)) @@ -249,8 +253,15 @@ enum YCBTHealthRecords { guard seenStarts.insert(segmentStart).inserted else { continue } // firmware repeat — count once let segmentSeconds = YCBTBytes.u24(buffer, offset + 5) if sessionStart == nil { sessionStart = YCBTBytes.date(segmentStart) } + // The timeline is expanded positionally — one entry per minute from the session start — + // so a bogus duration doesn't just mis-size one stage, it allocates. The field is u24: + // an all-ones segment is 194 days, or ~280 000 array entries for a single 8-byte record, + // and a buffer of them exhausts memory before anything gets a chance to reject it. No + // real session exceeds a day, so cap there and stop. + let remaining = Self.maxSleepSessionMinutes - stages.count + if remaining <= 0 { break } let minutes = Int((Double(segmentSeconds) / 60.0).rounded()) - stages.append(contentsOf: Array(repeating: stage, count: max(1, minutes))) + stages.append(contentsOf: Array(repeating: stage, count: min(max(1, minutes), remaining))) } if let start = sessionStart, !stages.isEmpty { @@ -291,6 +302,9 @@ enum YCBTHealthRecords { /// The ring's "no temperature sample" fraction marker. SmartHealth's own chart drops on it /// **independently of the integer part** (`TemperatureActivity`: `int <= 42 && int >= 33 && frac != 15`), /// so it is a sentinel, not a fraction that happens to be 15. + /// Ceiling on one decoded sleep session, in minutes. See the sleep segment loop. + static let maxSleepSessionMinutes = 24 * 60 + private static let temperatureFiller: UInt8 = 15 /// Temperature from an int/fraction pair, shared by the dedicated record and the All record. diff --git a/PulseLoop/RingProtocol/YCBTHistoryTransfer.swift b/PulseLoop/RingProtocol/YCBTHistoryTransfer.swift index 2201e09..c95bc8f 100644 --- a/PulseLoop/RingProtocol/YCBTHistoryTransfer.swift +++ b/PulseLoop/RingProtocol/YCBTHistoryTransfer.swift @@ -44,6 +44,9 @@ final class YCBTHistoryTransfer { private var buffer: [UInt8] = [] /// A CRC mismatch buys the type exactly one re-request; a second failure gives up on it. private var retriedCurrentType = false + /// What the header promised, kept for the terminal block to be checked against. See `handleTerminal`. + private var expectedPackets = 0 + private var expectedBytes = 0 /// Types the firmware answered `0xFB`/`0xFC` for — never asked again this session. private var unsupported: Set = [] @@ -82,6 +85,29 @@ final class YCBTHistoryTransfer { publishOutOfBand(advance()) } + /// Add types to the queue **without** disturbing whatever is in flight. + /// + /// `start` deliberately refuses while a transfer is running, which is right for a second full pass + /// but wrong for the one case this exists for: the ring's `02 01` capability bitmap arrives *during* + /// the startup history walk, and the types it unlocks would otherwise wait for the next sync. Appending + /// leaves the current type's buffer and terminal untouched — the new keys are simply asked for when + /// the queue reaches them. + /// + /// Duplicates are dropped rather than re-queued: asking twice would re-dump a log we already hold and + /// re-upsert every record in it. Idle is handled too, so a late bitmap after a finished walk still + /// pulls its types. + func append(types: [YCBTHistoryType]) { + let additions = types.filter { type in + !unsupported.contains(type.queryKey) + && !queue.contains(type) + && state.type != type + } + guard !additions.isEmpty else { return } + queue.append(contentsOf: additions) + guard !isActive else { return } + publishOutOfBand(advance()) + } + /// Abandon any in-flight transfer (disconnect / teardown). func cancel() { cancelWatchdog() @@ -98,6 +124,8 @@ final class YCBTHistoryTransfer { buffer.removeAll(keepingCapacity: false) bufferCap = Self.defaultBufferCap retriedCurrentType = false + expectedPackets = 0 + expectedBytes = 0 guard !queue.isEmpty else { state = .idle return [.historySyncFinished] @@ -147,6 +175,8 @@ final class YCBTHistoryTransfer { private func handleHeader(_ type: YCBTHistoryType, payload: [UInt8]) -> [RingDecodedEvent] { guard payload.count >= YCBTHealth.headerPayloadLength else { return advance() } let totalBytes = YCBTBytes.u32(payload, 6) + expectedPackets = YCBTBytes.u16(payload, 2) + expectedBytes = totalBytes buffer.removeAll(keepingCapacity: true) bufferCap = max(totalBytes, Self.defaultBufferCap) state = .receiving(type) @@ -175,6 +205,23 @@ final class YCBTHistoryTransfer { private func handleTerminal(_ type: YCBTHistoryType, payload: [UInt8]) -> [RingDecodedEvent] { if case .requestSent = state, buffer.isEmpty { return [] } guard payload.count >= YCBTHealth.terminalPayloadLength else { return advance() } + + // Count check before CRC, because the CRC alone does not catch a *short* buffer. A dropped data + // frame leaves us with fewer bytes than the ring sent, and the terminal's CRC was computed over + // what the ring sent — so it fails, which looks the same as corruption but isn't. Worse is the + // reverse: a transfer whose last frames never arrived can still terminate with a buffer whose CRC + // happens to be checked over exactly what we hold if the ring recomputed it. Cross-checking the + // packet and byte counts against *both* the header's promise and the buffer we actually built + // turns "silently short" into a NAK and a retry. + let packets = YCBTBytes.u16(payload, 0) + let bytes = YCBTBytes.u16(payload, 2) + let matchesHeader = packets == expectedPackets && bytes == expectedBytes + let matchesBuffer = bytes == buffer.count + guard matchesHeader, matchesBuffer else { + writer?.enqueue(Data(YCBTHealthCommand.historyBlockAck(status: YCBTHealth.ackCrcFailure))) + return retryOrSkip(type) + } + let expected = UInt16(YCBTBytes.u16(payload, 4)) let matches = YCBTFrame.crc16(buffer) == expected @@ -227,11 +274,18 @@ final class YCBTHistoryTransfer { typeDeadline = nil } + /// Set by `YCBTSyncEngine`, which needs to see a completion it did not cause. `handle`'s events reach + /// the engine via the driver's return value; `start`, `append` and the watchdog have no such channel, + /// and the engine acts on `.historySyncFinished` (it re-issues the live-status subscription), so a + /// walk that the watchdog ended would otherwise leave today's steps stale until the next sync. + var onOutOfBandEvents: (([RingDecodedEvent]) -> Void)? + /// `handle` returns its events to the driver, which publishes them. `start` and the watchdog have no - /// such return channel, so the one event they can produce — completion — is published here. + /// such return channel, so the one event they can produce — completion — is surfaced here. private func publishOutOfBand(_ events: [RingDecodedEvent]) { guard events.contains(where: { if case .historySyncFinished = $0 { return true } else { return false } }) else { return } + onOutOfBandEvents?(events) Task { await PulseEventBus.shared.publish(.syncProgress(stage: "done")) } } } diff --git a/PulseLoop/RingProtocol/YCBTProtocol.swift b/PulseLoop/RingProtocol/YCBTProtocol.swift index cd03080..3cca23d 100644 --- a/PulseLoop/RingProtocol/YCBTProtocol.swift +++ b/PulseLoop/RingProtocol/YCBTProtocol.swift @@ -122,12 +122,34 @@ enum YCBTBytes { /// time, so decoding must un-apply the device's UTC offset to recover the true absolute instant. /// Without this, `Calendar.current` re-applies that same offset when a caller later extracts /// local components (e.g. `Calendar.wakingDay(forSleepStart:)`'s hour check), doubling it instead - /// of cancelling it. Uses the *current* offset as an approximation of the offset in effect when - /// the timestamp was recorded — correct for same-session syncs, only wrong across a DST - /// transition that happens between recording and decoding. + /// of cancelling it. + /// + /// The offset is resolved **at the timestamp's own date**, not today's. Reading the ring seconds as + /// UTC recovers the wall-clock fields the ring actually stored; re-interpreting those fields in the + /// local zone then picks whichever offset was in force *then*. Subtracting today's offset instead — + /// which is what this did — silently shifts every record on the far side of a DST transition by an + /// hour, so a Sunday-night sleep session read on Monday lands in the wrong hour bucket and, near + /// midnight, the wrong day. `ringSeconds(_:)` has always been date-aware; this makes the pair + /// symmetric. + /// + /// Ambiguous and skipped wall-clock times (the hour that repeats in autumn, the hour that doesn't + /// exist in spring) resolve however `Calendar` resolves them — earliest match and forward shift + /// respectively. Both are one-hour errors in a one-hour window per year, and neither is recoverable + /// from the wire: the ring simply does not record which side of the transition it meant. static func date(_ ringSeconds: Int, timeZone: TimeZone = .current) -> Date { - let offset = TimeInterval(timeZone.secondsFromGMT()) - return Date(timeIntervalSince1970: TimeInterval(ringSeconds) + epochOffset - offset) + let wallClock = Date(timeIntervalSince1970: TimeInterval(ringSeconds) + epochOffset) + var utcCalendar = Calendar(identifier: .gregorian) + utcCalendar.timeZone = TimeZone(secondsFromGMT: 0) ?? timeZone + let fields: Set = [.year, .month, .day, .hour, .minute, .second] + var localCalendar = Calendar(identifier: .gregorian) + localCalendar.timeZone = timeZone + guard let resolved = localCalendar.date(from: utcCalendar.dateComponents(fields, from: wallClock)) + else { + // Unreachable for a Gregorian calendar with complete components; fall back to the old + // fixed-offset behaviour rather than returning a timestamp that isn't a time at all. + return wallClock.addingTimeInterval(-TimeInterval(timeZone.secondsFromGMT())) + } + return resolved } /// Convert a `Date` to ring seconds (2000-epoch), the inverse of `date(_:timeZone:)`. diff --git a/PulseLoop/RingProtocol/YCBTSyncEngine.swift b/PulseLoop/RingProtocol/YCBTSyncEngine.swift index fd56392..efb7b1c 100644 --- a/PulseLoop/RingProtocol/YCBTSyncEngine.swift +++ b/PulseLoop/RingProtocol/YCBTSyncEngine.swift @@ -17,6 +17,14 @@ final class YCBTSyncEngine: RingSyncEngine { private weak var writer: RingCommandWriter? private let encoder = YCBTEncoder() private let transfer: YCBTHistoryTransfer + private let profile: YCBTFamilyProfile + + /// What this ring is believed to have — the family baseline until its `02 01` bitmap lands. Drives + /// which history types are worth asking for and which all-day monitors are worth writing. + private var historyCapabilities: Set + + /// Set for the startup walk only, cleared when it finishes. See `handle(_:)`. + private var requestActivityAfterStartupHistory = false /// Every type `YCBTHealthRecords` can decode, in the SDK's own ascending-key sync order. /// @@ -42,15 +50,22 @@ final class YCBTSyncEngine: RingSyncEngine { private var measurementSettings = MeasurementSettings.allOnDefault private var userProfile = UserProfileValues(metric: true, sex: nil, age: nil, heightCm: nil, weightKg: nil) - init(writer: RingCommandWriter?, transfer: YCBTHistoryTransfer) { + init(writer: RingCommandWriter?, transfer: YCBTHistoryTransfer, profile: YCBTFamilyProfile) { self.writer = writer self.transfer = transfer + self.profile = profile + self.historyCapabilities = profile.baselineCapabilities + // A walk the watchdog ends, or one `append` restarts from idle, produces its `.historySyncFinished` + // outside `handle`'s return path. Route it back in so the completion hook below fires either way. + transfer.onOutOfBandEvents = { [weak self] events in + events.forEach { self?.handle($0) } + } } // MARK: Startup func runStartup() { - for command in encoder.startupSequence(measurement: measurementSettings, profile: userProfile) { + for command in startupCommands() { writer?.enqueue(Data(command)) } // The transfer machine writes the first `05 ` query itself and advances off the ring's @@ -58,11 +73,103 @@ final class YCBTSyncEngine: RingSyncEngine { // `.activityUpdate` (a per-day max ratchet) and history measurements upsert by (kind, timestamp) // in `EventPersistenceSubscriber`, so a re-sync is already idempotent — and the reset case is a // documented no-op in the bus. - transfer.start(types: Self.historyTypes) + requestActivityAfterStartupHistory = true + transfer.start(types: supportedHistoryTypes(Self.historyTypes)) + } + + private func startupCommands() -> [[UInt8]] { + encoder.startupSequence( + measurement: measurementSettings, + profile: userProfile, + capabilities: historyCapabilities, + queryChipScheme: profile.queryChipSchemeAtStartup, + supportsBloodPressureMonitor: profile.supportsBloodPressureMonitor + ) + } + + /// Two events need acting on; everything else the transfer machine handles itself. + func handle(_ event: RingDecodedEvent) { + switch event { + case let .supportFunctions(derived): + applySupportFunctions(derived) + case .historySyncFinished: + // Some R10M firmware ACKs the `03 09` live-status subscription sent during the handshake but + // doesn't actually start publishing until after its history dump is done — so today's step + // count sits at whatever the last session left until the user pulls to refresh. Asking once + // more, after the walk, costs one frame and fixes a reconnect that otherwise looks frozen. + guard requestActivityAfterStartupHistory else { return } + requestActivityAfterStartupHistory = false + writer?.enqueue(Data(encoder.enableLiveStatus())) + default: + return + } + } + + /// The ring's own capability bitmap, which arrives mid-handshake — after the startup sequence has + /// already been queued from the baseline. Two things it can unlock: + /// + /// 1. **All-day monitors.** Only the *newly* permitted ones are pushed; re-sending a monitor already + /// in the startup sequence would just re-write the same setting. + /// 2. **History types.** `append` rather than `start`, so the in-flight block is not disturbed. + private func applySupportFunctions(_ derived: Set) { + let refined = profile.refined(bitmapDerived: derived) + guard refined != historyCapabilities else { return } + let added = refined.subtracting(historyCapabilities) + historyCapabilities = refined + + let alreadySent = encoder.monitorCommands( + measurementSettings, + capabilities: refined.subtracting(added), + supportsBloodPressureMonitor: profile.supportsBloodPressureMonitor + ) + for command in encoder.monitorCommands( + measurementSettings, + capabilities: refined, + supportsBloodPressureMonitor: profile.supportsBloodPressureMonitor + ) where !alreadySent.contains(command) { + writer?.enqueue(Data(command)) + } + + var newTypes = supportedHistoryTypes(Self.historyTypes) + // The `05 09` combined record carries BP, HRV, temperature and blood sugar as *optional fields* of + // a record we always fetch — so unlike the others, a late unlock of one of these doesn't add a new + // query, it means the one we already ran was decoded with those fields dropped. Re-run it once. + if added.contains(where: { [.bloodPressure, .hrv, .temperature, .bloodSugar].contains($0) }) { + newTypes.append(.all) + } + transfer.append(types: newTypes) } - /// History is protocol-driven now — nothing here advances it. - func handle(_ event: RingDecodedEvent) {} + /// Ask only for logs this ring is believed to keep. + /// + /// A ring that doesn't implement a type answers with a no-data header or a `0xFC`, both of which + /// `YCBTHistoryTransfer` handles — so this is not about correctness, it is about not spending ten + /// seconds of watchdog per absent type on every sync. `.all` is never gated: the combined record is + /// the fallback source for half these metrics, and no bit names it. + private func supportedHistoryTypes(_ types: [YCBTHistoryType]) -> [YCBTHistoryType] { + types.filter { type in + switch type { + case .sport: return historyCapabilities.contains(.steps) + case .sleep: return historyCapabilities.contains(.sleep) + case .heart: return historyCapabilities.contains(.heartRate) + case .blood: return historyCapabilities.contains(.bloodPressure) + case .all: return true + // Not `.spo2` — this is the dedicated `05 1a` all-day log, which a ring can lack while still + // reporting SpO₂ in the combined record. The R10M is exactly that ring. + case .spo2: return historyCapabilities.contains(.spo2History) + case .temperature: return historyCapabilities.contains(.temperature) + case .comprehensive: return historyCapabilities.contains(.bloodSugar) + case .bodyData: + return historyCapabilities.contains(.hrv) + || historyCapabilities.contains(.stress) + || historyCapabilities.contains(.fatigue) + // `YCBTHistoryType` is a struct of static members, not an enum, so the compiler can't check + // this for exhaustiveness — every member of `YCBTHistoryType.catalog` is named above, and a + // new one has to declare its gate here before it will ever be requested. + default: return false + } + } + } // MARK: History passes // @@ -72,14 +179,18 @@ final class YCBTSyncEngine: RingSyncEngine { /// Re-run the full queue without re-sending the connect handshake. Driven by `RingSyncCoordinator`'s /// 30-minute periodic pass (SmartHealth's own cadence) while connected. func syncHistory() { - transfer.start(types: Self.historyTypes) + // Re-assert the live-status subscription first. Pull-to-refresh is the gesture a user makes + // *because* today's steps look stale, and on a ring whose `03 09` went quiet the history walk + // alone won't move them — the cumulative counter comes from the `06 00` stream, not the logs. + writer?.enqueue(Data(encoder.enableLiveStatus())) + transfer.start(types: supportedHistoryTypes(Self.historyTypes)) } /// Post-workout backfill: pull just the vitals logs so samples the ring recorded while the phone was /// away or suspended land in the session that just finished (`ActivityRecorderService.linkSample` /// windows them in). func syncVitalsHistory() { - transfer.start(types: Self.vitalsTypes) + transfer.start(types: supportedHistoryTypes(Self.vitalsTypes)) } // MARK: All-day measurement config (the five `01 xx {enable, interval}` monitors) @@ -92,7 +203,11 @@ final class YCBTSyncEngine: RingSyncEngine { /// Store *and* push immediately — the live "Save" path while connected. func applyMeasurementSettings(_ settings: MeasurementSettings) { measurementSettings = settings - for command in encoder.monitorCommands(settings) { + for command in encoder.monitorCommands( + settings, + capabilities: historyCapabilities, + supportsBloodPressureMonitor: profile.supportsBloodPressureMonitor + ) { writer?.enqueue(Data(command)) } } diff --git a/PulseLoop/Views/Settings/DeviceHeroCard.swift b/PulseLoop/Views/Settings/DeviceHeroCard.swift index c4e19af..fe3a553 100644 --- a/PulseLoop/Views/Settings/DeviceHeroCard.swift +++ b/PulseLoop/Views/Settings/DeviceHeroCard.swift @@ -239,6 +239,10 @@ struct DeviceHeroCard: View { case .colmiR02, .colmiSmartHealth: return nil case .tk5: return "tk5" case .luckRing: return "luckring-tk18" + // R10M is the only catalogued ring in this family and the only one anyone has tested, so its art + // is the family's representative — an uncatalogued YCBT ring is far more likely to be one of + // these than anything else. + case .ycbt: return "r10m" case nil: return nil } } diff --git a/PulseLoop/Wearables/WearableCoordinator.swift b/PulseLoop/Wearables/WearableCoordinator.swift index c00eb80..13d18cc 100644 --- a/PulseLoop/Wearables/WearableCoordinator.swift +++ b/PulseLoop/Wearables/WearableCoordinator.swift @@ -15,6 +15,11 @@ enum RingDeviceType: String, Codable, CaseIterable, Sendable { /// LuckRing / TK18 family (the "K6" vendor SDK, company ID `0xFF64`). Sold under simsonlab and other /// brands; TK18 is the hardware-tested unit. See `LuckRingCoordinator`. case luckRing + /// Generic YCBT / SmartHealth rings that are **not** part of the Colmi line and carry no TK5 + /// identity — the LittleMeatball R10M is the hardware-validated unit. Same wire protocol as `.tk5` + /// and `.colmiSmartHealth` (so it shares the whole `YCBT*` stack), kept a separate family because its + /// capability set, product art and firmware quirks are its own. See `YCBTCoordinator`. + case ycbt /// Human-facing default name when no advertised name is available. var displayName: String { @@ -24,6 +29,7 @@ enum RingDeviceType: String, Codable, CaseIterable, Sendable { case .tk5: return "TK5 ring" case .colmiSmartHealth: return "Colmi ring (SmartHealth)" case .luckRing: return "LuckRing" + case .ycbt: return "YCBT / SmartHealth ring" } } } diff --git a/PulseLoop/Wearables/WearableDriver.swift b/PulseLoop/Wearables/WearableDriver.swift index baf170d..1c5a406 100644 --- a/PulseLoop/Wearables/WearableDriver.swift +++ b/PulseLoop/Wearables/WearableDriver.swift @@ -58,6 +58,25 @@ protocol WearableDriver: AnyObject { /// must be stopped here. Default: no-op. func connectionDidEnd() + /// Notify characteristics that must **all** be subscribed before the connection counts as up. + /// + /// A driver that leaves this empty gets the historical behaviour: `.connected` fires — and with it + /// the startup handshake — on whichever notify characteristic reports `isNotifying` first. That is + /// fine for a device whose channels are interchangeable, and wrong for one that splits its protocol + /// across them: YCBT puts every command *reply* on `be940001` and the live/history stream on + /// `be940003`, so a handshake begun after only one is live loses whichever half was still pending — + /// silently, because a missing reply is indistinguishable from a slow one. + /// + /// These must be a subset of `notifyUUIDs`; anything else can never be satisfied. + var requiredSubscriptionsBeforeConnected: [CBUUID] { get } + + /// Logical commands to write the moment those subscriptions complete, **ahead of** the sync engine's + /// startup sequence. For a vendor handshake that has to lead — a clock write whose ordering changes + /// how subsequent records are stamped, say — queueing it in `runStartup` is too late: the engine's + /// commands are appended to a queue that may already hold battery reads and optional CCCD work. + /// Default: none. + func immediatePostSubscriptionCommands() -> [Data] + /// The stateful brain: startup sequence + (for Colmi) the response-driven history machine. func makeSyncEngine() -> RingSyncEngine } @@ -68,6 +87,10 @@ extension WearableDriver { func usesCommandChannel(for frame: Data) -> Bool { false } func connectionDidStart() {} func connectionDidEnd() {} + /// Empty keeps the historical behaviour: the connection is up as soon as *any* notify characteristic + /// starts notifying. + var requiredSubscriptionsBeforeConnected: [CBUUID] { [] } + func immediatePostSubscriptionCommands() -> [Data] { [] } } /// User-chosen all-day measurement configuration, passed as a plain value from the app layer into a diff --git a/PulseLoop/Wearables/WearableModel.swift b/PulseLoop/Wearables/WearableModel.swift index 5babdcd..23131af 100644 --- a/PulseLoop/Wearables/WearableModel.swift +++ b/PulseLoop/Wearables/WearableModel.swift @@ -53,7 +53,7 @@ enum RingAppVariant: String, CaseIterable, Identifiable, Sendable { switch family { case .colmiR02: self = .qring case .colmiSmartHealth: self = .smartHealth - case .jring, .tk5, .luckRing: return nil + case .jring, .tk5, .luckRing, .ycbt: return nil } } @@ -114,6 +114,9 @@ extension RingDeviceType { case .tk5: return .limited // TK18 is the only hardware-tested LuckRing; every 0xFF64 sibling is still a prediction. case .luckRing: return .limited + // Validated end-to-end on an R10M FCF4 running firmware 2.32 — pairing, handshake, reconnect, + // activity and history sync, HR/SpO₂/BP, battery, sleep stages and REM. + case .ycbt: return .full } } } @@ -174,6 +177,23 @@ extension WearableModel { advertisedNamePatterns: ["^TK5 ?[0-9A-Fa-f]{0,4}$"], imageName: "tk5" ) + /// R10M — sold as the "LittleMeatball" smart ring, and the hardware-validated unit of the generic + /// `.ycbt` family (FCF4, firmware 2.32). It speaks the same YCBT protocol as the TK5 and the + /// SmartHealth-flavoured Colmis, but it is **not** a Colmi ring, so it carries its own product art and + /// its own capability set rather than borrowing theirs. + /// + /// The pattern accepts both separators (`R10M FCF4` and `R10M_FCF4`) because both forms have been + /// observed. It is deliberately narrower than `YCBTCoordinator`'s own name check: this one is + /// user-facing identity, and mis-labelling a ring is worse than showing it un-named. + /// + /// Blurb mirrors `YCBTCoordinator`'s baseline plus the BP its bitmap grants — BP, temperature, HRV, + /// stress and blood sugar are all claimed from the ring's own `02 01` reply at connect time. + static let r10m = WearableModel( + id: "r10m", displayName: "R10M (LittleMeatball)", brand: "LittleMeatball", family: .ycbt, + tint: PulseColors.hrv, blurb: "HR · SpO₂ · BP · Sleep", + advertisedNamePatterns: ["^R10M[ _][0-9A-F]{4}$"], imageName: "r10m" + ) + // TK18 — the LuckRing app / "K6" protocol (company ID 0xFF64). The only hardware-tested unit of the // whole 0xFF64 family, so it is `.limited`. Its baseline is what the driver can decode; untested // siblings still pair via the coordinator's strong-signal match and get generic art + a fallback name. @@ -310,6 +330,9 @@ extension WearableModel { colmiR02, colmiR03, colmiR06, colmiR07, colmiR08, colmiR09, colmiR10, colmiR11, colmiR12, colmiR99, yawellR05, yawellR10, yawellR11, h59, + // Ahead of the YCBT siblings: `model(advertisedName:)` takes the first pattern that matches, and + // R10M is the narrowest of the three. + r10m, tk5, luckRingTK18, ] diff --git a/PulseLoopTests/YCBTCoordinatorTests.swift b/PulseLoopTests/YCBTCoordinatorTests.swift new file mode 100644 index 0000000..b9b0e6e --- /dev/null +++ b/PulseLoopTests/YCBTCoordinatorTests.swift @@ -0,0 +1,177 @@ +import XCTest +import CoreBluetooth +@testable import PulseLoop + +/// What makes an R10M an R10M: its advertised identity and its capability set. The protocol itself is +/// the shared `YCBT*` stack, covered by the other YCBT suites. +@MainActor +final class YCBTCoordinatorTests: XCTestCase { + private func advertisement(services: [String] = [], manufacturer: Data? = nil) -> AdvertisementInfo { + AdvertisementInfo(serviceUUIDs: services.map { CBUUID(string: $0) }, manufacturerData: manufacturer) + } + + // MARK: Matching + + /// Both separators have been observed on the hardware. `R10M FCF4` is the validated unit. + func testClaimsTheR10MByName() { + for name in ["R10M FCF4", "R10M_FCF4", "R10M-FCF4", "R10M", "r10m fcf4"] { + XCTAssertTrue( + YCBTCoordinator.matches(name: name, advertisement: advertisement()), + "\(name) should be claimed" + ) + } + } + + /// The R10M advertises its proprietary service, unlike the TK5 — so the service alone is enough even + /// when the local name is something nobody recognizes. + func testClaimsAnyRingAdvertisingTheProprietaryService() { + XCTAssertTrue(YCBTCoordinator.matches( + name: "Unknown Ring", + advertisement: advertisement(services: [YCBTUUIDs.service]) + )) + } + + /// A QRing service means the ring answers to `ColmiDriver`. This coordinator is registered ahead of + /// it, so the disqualifier has to run first and win outright. + func testRejectsRingsAdvertisingAQRingService() { + XCTAssertFalse(YCBTCoordinator.matches( + name: "R10M FCF4", + advertisement: advertisement(services: [ColmiUUIDs.serviceV1]) + )) + XCTAssertFalse(YCBTCoordinator.matches( + name: "R10M FCF4", + advertisement: advertisement(services: [ColmiUUIDs.serviceV2]) + )) + } + + /// Registered ahead of `TK5Coordinator` and `ColmiSmartHealthCoordinator`, so it must not claim rings + /// those families catalog — they are YCBT too, but their capability baselines were written for + /// different hardware. + func testDoesNotClaimTheOtherYCBTFamilies() { + XCTAssertFalse(YCBTCoordinator.matches(name: "TK5 24AA", advertisement: advertisement())) + XCTAssertFalse(YCBTCoordinator.matches(name: "R99 54DC", advertisement: advertisement())) + XCTAssertFalse(YCBTCoordinator.matches(name: "R02_A1B2", advertisement: advertisement())) + XCTAssertFalse(YCBTCoordinator.matches(name: "SMART_RING", advertisement: advertisement())) + XCTAssertFalse(YCBTCoordinator.matches(name: nil, advertisement: advertisement())) + } + + /// The Yucheng company ID is shared by every ring in this SDK family, the TK5 included, so it must + /// not be a claim signal here — `TK5Coordinator` is checked after us and would never get the chance. + func testDoesNotClaimOnTheSharedManufacturerMarkerAlone() { + XCTAssertFalse(YCBTCoordinator.matches( + name: "Some Ring", + advertisement: advertisement(manufacturer: Data([0x10, 0x78, 0x65, 0x01])) + )) + } + + /// Registry order is load-bearing: `ColmiSmartHealthCoordinator`'s ` <4 hex>` convention + /// accepts "R10M FCF4", so it must not be reached first. + func testIsRegisteredAheadOfTheColmiCoordinators() { + let order = RingBLEClient.coordinators.map { ObjectIdentifier($0) } + guard let ycbt = order.firstIndex(of: ObjectIdentifier(YCBTCoordinator.self)), + let smartHealth = order.firstIndex(of: ObjectIdentifier(ColmiSmartHealthCoordinator.self)), + let colmi = order.firstIndex(of: ObjectIdentifier(ColmiCoordinator.self)), + let tk5 = order.firstIndex(of: ObjectIdentifier(TK5Coordinator.self)) else { + return XCTFail("every YCBT-adjacent coordinator must be registered") + } + XCTAssertLessThan(ycbt, smartHealth) + XCTAssertLessThan(ycbt, colmi) + XCTAssertLessThan(ycbt, tk5) + } + + /// The whole point of the family: an R10M resolves to the YCBT driver, not a Colmi one. + func testScanResolvesAnR10MToTheYCBTFamily() { + XCTAssertEqual( + RingBLEClient.matchDeviceType(name: "R10M FCF4", advertisement: advertisement()), + .ycbt + ) + } + + // MARK: Capabilities + + /// Everything in the baseline is an unconditional promise — the refinement is additive-only, so the + /// ring's bitmap can never take one back. Only what the R10M was *seen* doing belongs here. + func testBaselineIsWhatTheHardwareSessionConfirmed() { + XCTAssertEqual(YCBTCoordinator().capabilities, [ + .heartRate, .spo2, .steps, .sleep, .remSleep, .battery, + .manualHeartRate, .manualSpo2, + .realtimeHeartRate, .realtimeSteps, + .measurementInterval, + ]) + } + + /// HRV is gated here and baseline on the TK5 — deliberately. The TK5's HRV was observed and + /// cross-checked against the vendor app; nobody has seen an R10M produce one, and FW 2.32 does not + /// declare the bit. + func testPerSKUSensorsAreBitmapGated() { + let gated = YCBTCoordinator().bitmapGatedCapabilities + for capability in [ + WearableCapability.temperature, .bloodPressure, .manualBloodPressure, + .stress, .fatigue, .bloodSugar, .hrv, .manualHrv, .findDevice, + ] { + XCTAssertTrue(gated.contains(capability), "\(capability) should be bitmap-gated") + XCTAssertFalse(YCBTCoordinator().capabilities.contains(capability), "\(capability) is not baseline") + } + } + + /// `.spo2History` is in **neither** set, and that is what stops the `05 1a` query being issued at + /// all — the R10M has no dedicated SpO₂ log, its all-day SpO₂ rides the `05 09` combined record. + /// Putting it in the gated set instead would be worse than useless: no bit maps to it, so the gate + /// could never be satisfied, and the type would be unreachable rather than simply unrequested. + func testSpo2HistoryIsNeitherBaselineNorGated() { + let coordinator = YCBTCoordinator() + XCTAssertFalse(coordinator.capabilities.contains(.spo2History)) + XCTAssertFalse(coordinator.bitmapGatedCapabilities.contains(.spo2History)) + } + + /// A bitmap claiming something outside the gated set cannot smuggle it in. + func testRefinementStaysAdditiveAndPreApproved() { + let coordinator = YCBTCoordinator() + let refined = coordinator.refinedCapabilities(bitmapDerived: [.bloodPressure, .powerOff]) + XCTAssertTrue(refined.contains(.bloodPressure), "a pre-approved claim is granted") + XCTAssertFalse(refined.contains(.powerOff), "a claim this family never gated is refused") + XCTAssertTrue(coordinator.capabilities.isSubset(of: refined), "the baseline is never revoked") + } + + // MARK: Firmware quirks + + /// The two R10M workarounds, asserted where they are declared. Their effect on the wire is covered by + /// `YCBTEncoderTests`. + func testDriverCarriesTheR10MFirmwareQuirks() { + final class Writer: RingCommandWriter { + nonisolated deinit {} + func enqueue(_ command: Data) {} + } + guard let driver = YCBTCoordinator().makeDriver(writer: Writer()) as? YCBTDriver else { + return XCTFail("the YCBT family must build a YCBTDriver") + } + // Both indication channels are required before the handshake may start. + XCTAssertEqual(driver.requiredSubscriptionsBeforeConnected, [ + CBUUID(string: YCBTUUIDs.command), + CBUUID(string: YCBTUUIDs.stream), + ]) + } + + // MARK: Catalog identity + + func testR10MCatalogEntry() { + guard let model = WearableModel.model(advertisedName: "R10M FCF4") else { + return XCTFail("R10M FCF4 must resolve to a catalog model") + } + XCTAssertEqual(model.id, "r10m") + XCTAssertEqual(model.displayName, "R10M (LittleMeatball)") + XCTAssertEqual(model.brand, "LittleMeatball") + XCTAssertEqual(model.family, .ycbt) + XCTAssertEqual(model.imageName, "r10m") + XCTAssertTrue(model.appVariants.isEmpty, "single-firmware ring — no app-variant picker") + XCTAssertEqual(WearableModel.model(advertisedName: "R10M_FCF4")?.id, "r10m") + } + + /// The catalog pattern is narrower than the coordinator's on purpose: this one drives user-facing + /// identity, and mislabelling a ring is worse than showing it un-named. + func testCatalogPatternIsNarrowerThanTheCoordinators() { + XCTAssertNil(WearableModel.model(advertisedName: "R10M-FCF4")) + XCTAssertNil(WearableModel.model(advertisedName: "R10M")) + XCTAssertTrue(YCBTCoordinator.matches(name: "R10M-FCF4", advertisement: advertisement())) + } +} diff --git a/PulseLoopTests/YCBTDecoderTests.swift b/PulseLoopTests/YCBTDecoderTests.swift index 48d8b31..5df703f 100644 --- a/PulseLoopTests/YCBTDecoderTests.swift +++ b/PulseLoopTests/YCBTDecoderTests.swift @@ -72,6 +72,22 @@ final class YCBTDecoderTests: XCTestCase { XCTAssertEqual(calories, 26) // 0x001a (capture-inferred) } + /// All three fields or none. `YCBTBytes.u16` returns 0 past the end of the buffer, so a truncated + /// `06 00` used to decode as a *valid* activity row with zeroed distance and calories — the ratchet + /// keeps the totals safe, but the row itself asserts a zero the ring never reported. + func testShortLiveStatusFrameEmitsNoActivityRow() { + // 06 00 with only the step field — 2 payload bytes where the layout needs 6. + let frame = YCBTFrame(validating: YCBTFrame.frame([0x06, 0x00, 0x7b, 0x02]))! + let events = decoder.decode(frame) + XCTAssertFalse( + events.contains { if case .activityUpdate = $0 { return true } else { return false } }, + "a short frame must not publish a half-read activity row, got \(events)" + ) + guard case .commandAck = events.first else { + return XCTFail("expected a bare ack, got \(events)") + } + } + /// `06 03` is one fixed layout (`unpackRealBloodData`), not two shapes: `[SBP][DBP][hr][hrv][spo2]` /// `[tempInt][tempFrac]`. The old "BP-vs-HRV heuristic" was reading exactly these offsets without /// knowing it — in BP mode the ring fills @0/@1 and zeroes @3, in HRV mode the reverse — so both @@ -418,6 +434,41 @@ final class YCBTDecoderTests: XCTestCase { XCTAssertEqual(decoded.timeIntervalSince1970, date.timeIntervalSince1970, accuracy: 1) } + /// The offset must be resolved at the **timestamp's own date**, not today's. A ring record written in + /// January and read back in July is stamped with a wall-clock the ring never converted, so applying + /// July's offset to it shifts the whole record by an hour — enough to move a late-evening sample into + /// the wrong day, and every sleep stage into the wrong hour bucket. + func testDateDecodeUsesTheOffsetInForceAtTheRecordsOwnDate() { + let tz = TimeZone(identifier: "America/New_York")! // EST (-5) in January, EDT (-4) in July + var utc = Calendar(identifier: .gregorian) + utc.timeZone = TimeZone(identifier: "UTC")! + + // The ring stored "2026-01-15 22:30:00" as naive local wall-clock. + let stored = DateComponents(year: 2026, month: 1, day: 15, hour: 22, minute: 30) + guard let naive = utc.date(from: stored) else { return XCTFail("fixture") } + let ringSeconds = Int(naive.timeIntervalSince1970 - YCBTBytes.epochOffset) + + let decoded = YCBTBytes.date(ringSeconds, timeZone: tz) + + // Read back as local components it must still say 22:30 on the 15th — whatever today's offset is. + var local = Calendar(identifier: .gregorian) + local.timeZone = tz + let parts = local.dateComponents([.year, .month, .day, .hour, .minute], from: decoded) + XCTAssertEqual(parts.year, 2026) + XCTAssertEqual(parts.month, 1) + XCTAssertEqual(parts.day, 15) + XCTAssertEqual(parts.hour, 22) + XCTAssertEqual(parts.minute, 30) + + // Concretely: EST is -5, so the true instant is 03:30 UTC on the 16th. Using July's -4 would put + // it at 02:30 — the hour of drift this test exists to catch. + XCTAssertEqual( + decoded.timeIntervalSince1970, + naive.timeIntervalSince1970 + 5 * 3600, + accuracy: 1 + ) + } + /// Sleep segment durations are u24; a u16 read truncates anything over 18h12m. func testU24ReadsThreeBytesLittleEndian() { XCTAssertEqual(YCBTBytes.u24([0x40, 0x19, 0x01], 0), 72_000) @@ -431,7 +482,7 @@ final class YCBTDecoderTests: XCTestCase { @MainActor private func makeDriver() -> YCBTDriver { - YCBTDriver(writer: SilentRingWriter()) + YCBTDriver(writer: SilentRingWriter(), profile: .permissiveTestProfile) } } diff --git a/PulseLoopTests/YCBTDriverTests.swift b/PulseLoopTests/YCBTDriverTests.swift index 77691f3..a52e5e0 100644 --- a/PulseLoopTests/YCBTDriverTests.swift +++ b/PulseLoopTests/YCBTDriverTests.swift @@ -26,7 +26,7 @@ final class YCBTDriverTests: XCTestCase { /// A measurement-status push (`04 13`) must be ACKed with `04 13 07 00 00 ` **and** decoded. func testDevControlPushIsAckedAndDecoded() { let writer = FakeWriter() - let driver = YCBTDriver(writer: writer) + let driver = YCBTDriver(writer: writer, profile: .permissiveTestProfile) // 04 13 | type 0 (heart rate), state 1, 72 bpm let push = YCBTFrame.frame([0x04, 0x13, 0x00, 0x01, 72]) @@ -45,7 +45,7 @@ final class YCBTDriverTests: XCTestCase { /// (SOS, find-phone, sedentary) still has to stop retransmitting. It surfaces as a plain ack. func testUnhandledDevControlPushIsStillAcked() { let writer = FakeWriter() - let driver = YCBTDriver(writer: writer) + let driver = YCBTDriver(writer: writer, profile: .permissiveTestProfile) // 04 00 — FindMobile ("find my phone" pressed on the ring). No product surface; ACK + log only. let events = driver.ingest(YCBTFrame.frame([0x04, 0x00, 0x01]), from: stream) @@ -62,7 +62,7 @@ final class YCBTDriverTests: XCTestCase { /// silently; ACKing it would answer a rejection with an ACK for a push that never happened. func testDevControlErrorFrameIsNotAcked() { let writer = FakeWriter() - let driver = YCBTDriver(writer: writer) + let driver = YCBTDriver(writer: writer, profile: .permissiveTestProfile) _ = driver.ingest(YCBTFrame.frame([0x04, 0x13, 0xfc]), from: stream) @@ -73,7 +73,7 @@ final class YCBTDriverTests: XCTestCase { /// write on the wire for every heartbeat the ring streams. func testLiveStreamFramesAreNotAcked() { let writer = FakeWriter() - let driver = YCBTDriver(writer: writer) + let driver = YCBTDriver(writer: writer, profile: .permissiveTestProfile) _ = driver.ingest(YCBTFrame.frame([0x06, 0x01, 82]), from: stream) @@ -92,19 +92,88 @@ final class YCBTDriverTests: XCTestCase { /// query again is the proof that the disconnect really did abandon the first. func testConnectionDidEndAbandonsTheInFlightHistoryTransfer() { let writer = FakeWriter() - let driver = YCBTDriver(writer: writer) + let driver = YCBTDriver(writer: writer, profile: .permissiveTestProfile) let engine = driver.makeSyncEngine() + // `syncHistory` re-asserts the live-status subscription before the walk, so the query is the + // *second* write, not the first. + let liveStatus = Data([0x03, 0x09, 0x01, 0x00, 0x02]) engine.syncHistory() // → `05 02` (sport); the transfer is now in flight - XCTAssertEqual(writer.sent, [Data([0x05, 0x02])]) + XCTAssertEqual(writer.sent, [liveStatus, Data([0x05, 0x02])]) writer.sent.removeAll() engine.syncHistory() - XCTAssertTrue(writer.sent.isEmpty, "sanity: an in-flight transfer refuses a re-entrant start") + XCTAssertEqual(writer.sent, [liveStatus], "sanity: an in-flight transfer refuses a re-entrant start") + writer.sent.removeAll() driver.connectionDidEnd() // the ring went out of range mid-dump engine.syncHistory() - XCTAssertEqual(writer.sent, [Data([0x05, 0x02])], "the transfer must have been abandoned on disconnect") + XCTAssertEqual( + writer.sent, [liveStatus, Data([0x05, 0x02])], + "the transfer must have been abandoned on disconnect" + ) } + + // MARK: Capability gating of decoded events + + /// A sample for a sensor the ring hasn't claimed must not reach the store. The UI already hides the + /// *card*, but a hidden card still accumulates rows — and those rows outlive the gate: they sync to + /// HealthKit and reappear as history the moment the capability is granted. + func testGatedSamplesAreDroppedUntilTheBitmapGrantsThem() { + let writer = FakeWriter() + let driver = YCBTDriver(writer: writer, profile: YCBTFamilyProfile( + baselineCapabilities: [.heartRate, .spo2], + bitmapGatedCapabilities: [.bloodPressure] + )) + + // 06 03 live vitals: 118/79, hr 64. BP is gated and the bitmap hasn't spoken yet. + let vitals = YCBTFrame.frame([0x06, 0x03, 118, 79, 64]) + XCTAssertFalse( + driver.ingest(vitals, from: stream).contains { if case .bloodPressureSample = $0 { true } else { false } }, + "BP must be dropped before the ring claims the sensor" + ) + + // `02 01` reply with ISHASBLOOD (byte 0 bit 0) set, at the SDK's 14-byte minimum length. + var bitmap: [UInt8] = Array(repeating: 0, count: 14) + bitmap[0] = 0x01 + _ = driver.ingest(YCBTFrame.frame([0x02, 0x01] + bitmap), from: stream) + + XCTAssertTrue( + driver.ingest(vitals, from: stream).contains { if case .bloodPressureSample = $0 { true } else { false } }, + "once the bitmap claims BP the same frame must decode through" + ) + + // A reconnect starts from the family baseline again — the answer belonged to that one link, and + // the next one may be a different ring of the same family. + driver.connectionDidEnd() + XCTAssertFalse( + driver.ingest(vitals, from: stream).contains { if case .bloodPressureSample = $0 { true } else { false } }, + "disconnect must reset the capability set to the baseline" + ) + } + + /// Heart rate, SpO₂, respiratory rate and VO₂max carry no support-function bit, so a gate on them + /// could only ever be a permanent deletion rather than a deferral. + func testUngatedMetricsAlwaysPassRegardlessOfBitmap() { + let writer = FakeWriter() + let driver = YCBTDriver(writer: writer, profile: YCBTFamilyProfile( + baselineCapabilities: [], bitmapGatedCapabilities: [] + )) + + let events = driver.ingest(YCBTFrame.frame([0x06, 0x01, 82]), from: stream) + guard case let .heartRateSample(bpm, _) = events.first else { + return XCTFail("expected a heart-rate sample, got \(events)") + } + XCTAssertEqual(bpm, 82) + } +} + +extension YCBTFamilyProfile { + /// Everything claimed, both quirk flags permissive — i.e. exactly how the driver behaved before + /// families were distinguished, so tests about *other* behaviour stay unaffected by the gate. + static let permissiveTestProfile = YCBTFamilyProfile( + baselineCapabilities: Set(WearableCapability.allCases), + bitmapGatedCapabilities: [] + ) } diff --git a/PulseLoopTests/YCBTEncoderTests.swift b/PulseLoopTests/YCBTEncoderTests.swift index 705126a..ae3bbe3 100644 --- a/PulseLoopTests/YCBTEncoderTests.swift +++ b/PulseLoopTests/YCBTEncoderTests.swift @@ -105,22 +105,23 @@ final class YCBTEncoderTests: XCTestCase { /// Order matters: the SmartHealth app interrogates the device before it writes settings, and the /// live-status push is last (`03 09 01 00 02` — without it the ring never streams `06 00` and live /// steps freeze). + /// + /// The clock (`01 00`) and the name read (`02 03`) are **not** here — they moved to + /// `postSubscriptionHandshake`, which `RingBLEClient` writes ahead of this whole sequence. func testStartupOrderMirrorsTheSmartHealthHandshake() { let sequence = encoder.startupSequence().map { Array($0.prefix(2)) } - XCTAssertEqual(sequence.first, [0x01, 0x00], "the clock goes first") XCTAssertEqual(sequence.last, [0x03, 0x09], "the live-status push goes last") - XCTAssertEqual(Array(sequence[1...5]), [ + XCTAssertEqual(Array(sequence[0...3]), [ [0x02, 0x00], // GetDeviceInfo — battery + firmware [0x02, 0x01], // GetSupportFunction — capability bitmap [0x02, 0x1b], // GetChipScheme - [0x02, 0x03], // GetDeviceName [0x02, 0x07], // GetUserConfig ]) XCTAssertEqual(encoder.startupSequence().last, [0x03, 0x09, 0x01, 0x00, 0x02]) // Settings follow the interrogation: language, units, the five monitors, then the profile. - XCTAssertEqual(Array(sequence[6...]), [ + XCTAssertEqual(Array(sequence[4...]), [ [0x01, 0x12], [0x01, 0x04], [0x01, 0x0c], [0x01, 0x1c], [0x01, 0x20], [0x01, 0x26], [0x01, 0x45], [0x01, 0x03], @@ -128,6 +129,70 @@ final class YCBTEncoderTests: XCTestCase { ]) } + /// The two commands that lead, before anything the sync engine queues. The clock leads for a reason + /// beyond tidiness: every record the ring stores is stamped from its own RTC in local wall-clock, so + /// a clock written *after* the history walk has begun mis-stamps everything read before it. + func testPostSubscriptionHandshakeIsTheNameReadThenTheClock() { + let handshake = encoder.postSubscriptionHandshake() + XCTAssertEqual(handshake.count, 2) + XCTAssertEqual(handshake[0], [0x02, 0x03, 0x47, 0x50], "GetDeviceName — the cheapest proof of life") + XCTAssertEqual(Array(handshake[1].prefix(2)), [0x01, 0x00], "then SetTime") + } + + // MARK: Family quirks + + /// The R10M closes an otherwise healthy link with HCI 0x13 when asked for the chip scheme, and does + /// not implement the all-day BP monitor. Both are suppressed by profile flag, and neither suppression + /// may leak into the families that answer those commands fine. + func testR10MStartupOmitsChipSchemeAndTheBloodPressureMonitor() { + let sequence = encoder.startupSequence( + capabilities: YCBTCoordinator().capabilities.union([.bloodPressure]), + queryChipScheme: false, + supportsBloodPressureMonitor: false + ).map { Array($0.prefix(2)) } + + XCTAssertFalse(sequence.contains([0x02, 0x1b]), "02 1b drops the R10M's link") + XCTAssertFalse(sequence.contains([0x01, 0x1c]), "the R10M has no all-day BP monitor") + XCTAssertEqual(sequence, [ + [0x02, 0x00], [0x02, 0x01], [0x02, 0x07], + [0x01, 0x12], [0x01, 0x04], + [0x01, 0x0c], // heart — baseline + [0x01, 0x26], // SpO₂ — baseline + [0x01, 0x03], [0x03, 0x09], + ]) + } + + /// The TK5 / SmartHealth-Colmi path is unchanged: both flags stay true and all five monitors go out. + func testDefaultStartupStillSendsChipSchemeAndEveryMonitor() { + let sequence = encoder.startupSequence().map { Array($0.prefix(2)) } + XCTAssertTrue(sequence.contains([0x02, 0x1b])) + for monitor in [0x0c, 0x1c, 0x20, 0x26, 0x45] as [UInt8] { + XCTAssertTrue(sequence.contains([0x01, monitor]), "monitor 01 \(String(monitor, radix: 16)) missing") + } + } + + /// A monitor names one sensor; a ring that lacks it answers `0xFC`. Filtering them out keeps a + /// rejection the user can't act on out of the middle of the handshake. + func testMonitorCommandsAreFilteredByCapability() { + let commands = encoder.monitorCommands(.allOnDefault, capabilities: [.heartRate, .spo2]) + .map { Array($0.prefix(2)) } + XCTAssertEqual(commands, [[0x01, 0x0c], [0x01, 0x26]]) + } + + /// The BP monitor needs *both* the sensor capability and the family flag — the R10M has the sensor + /// and not the monitor, so the capability alone must not be enough. + func testBloodPressureMonitorNeedsTheFamilyFlagAsWellAsTheCapability() { + XCTAssertTrue( + encoder.monitorCommands(.allOnDefault, capabilities: [.bloodPressure]) + .contains { Array($0.prefix(2)) == [0x01, 0x1c] } + ) + XCTAssertFalse( + encoder.monitorCommands( + .allOnDefault, capabilities: [.bloodPressure], supportsBloodPressureMonitor: false + ).contains { Array($0.prefix(2)) == [0x01, 0x1c] } + ) + } + // MARK: History commands func testHistoryRequestAndBlockAckBytes() { diff --git a/PulseLoopTests/YCBTHealthRecordsTests.swift b/PulseLoopTests/YCBTHealthRecordsTests.swift index 2aea513..7ee6392 100644 --- a/PulseLoopTests/YCBTHealthRecordsTests.swift +++ b/PulseLoopTests/YCBTHealthRecordsTests.swift @@ -45,12 +45,15 @@ final class YCBTHealthRecordsTests: XCTestCase { XCTAssertEqual(values(.bloodPressureDiastolic, in: events).last, 70) XCTAssertFalse(events.contains { if case .bloodPressureSample = $0 { return true } else { return false } }) - // Steps are the ring's cumulative daily counter, so they ride `.activityUpdate` (per-day max), - // not an additive bucket. First record = the 23:00 daily total. - let steps = events.compactMap { event -> Int? in - if case let .activityUpdate(_, value, _, _) = event { return value } else { return nil } - } - XCTAssertEqual(steps.max(), 3336) + // Steps (@4) are deliberately **not** emitted. The field is the ring's cumulative day counter as + // of each record, and `.activityUpdate` is a per-day max ratchet — so the oldest record in a dump + // that spans midnight sets today's total to yesterday's count, and nothing can lower it again for + // the rest of the day. The `05 02` sport buckets and the live `06 00` counter are the sources + // that don't have this problem. + XCTAssertFalse( + events.contains { if case .activityUpdate = $0 { return true } else { return false } }, + "the combined record must not publish its stale cumulative step counter" + ) } /// Respiratory rate (@10) was decoded but silently dropped before A3. @@ -77,14 +80,12 @@ final class YCBTHealthRecordsTests: XCTestCase { XCTAssertEqual(MeasurementKind.bloodSugar.unit, "mg/dL") } - /// An unworn record (SpO₂ out of range, HRV 0, BP 0) still carries the day's step count — and - /// nothing else. - func testUnwornCombinedVitalsRecordYieldsStepsOnly() { + /// An unworn record (SpO₂ out of range, HRV 0, BP 0) carries nothing but the day's step count, and + /// that counter is no longer published from here — so the record decodes to nothing at all rather + /// than to a row asserting a measurement the ring never took. + func testUnwornCombinedVitalsRecordYieldsNothing() { let events = YCBTHealthRecords.combinedVitals(bytes("1cf0de31080d4700000000000000000000000000")) - XCTAssertEqual(events.count, 1) - guard case .activityUpdate = events.first else { - return XCTFail("expected a lone activityUpdate, got \(events)") - } + XCTAssertTrue(events.isEmpty, "expected no events, got \(events)") } /// Records are sliced from the whole buffer, so a trailing partial record is dropped rather than @@ -288,6 +289,39 @@ final class YCBTHealthRecordsTests: XCTestCase { XCTAssertEqual(timestamps(in: events).first, YCBTBytes.date(836_694_044)) } + // MARK: Hostile input + + /// Segment durations are u24, so an all-ones field is 194 days. The timeline is expanded + /// *positionally* — one entry per minute from the session start — so a bogus duration doesn't + /// mis-size one stage, it allocates ~280 000 array entries for a single 8-byte record, and a buffer + /// of them exhausts memory before anything gets a chance to reject the reading. + func testSleepSegmentDurationIsClampedToOneDay() { + // header: recordLength 28 (20 header + 1 segment), then one DEEP segment of 0xFFFFFF seconds. + let record = bytes("00001c00" + "1cf0de31" + "a0f3de31" + "0000000000000000") + + bytes("02" + "1cf0de31" + "ffffff") + let events = YCBTHealthRecords.sleep(record) + + guard case let .sleepTimeline(_, stages) = events.first else { + return XCTFail("expected a sleep timeline, got \(events)") + } + XCTAssertEqual(stages.count, YCBTHealthRecords.maxSleepSessionMinutes) + XCTAssertEqual(stages.count, 24 * 60) + } + + /// A real night is nowhere near the cap, so the clamp must not touch it. + func testRealisticSleepSegmentsAreNotClamped() { + // Two segments: 30 min deep, 45 min light. + let record = bytes("00002400" + "1cf0de31" + "a0f3de31" + "0000000000000000") + + bytes("01" + "1cf0de31" + "080700") // tag 1 = deep, 1800 s + + bytes("02" + "44fdde31" + "8c0a00") // tag 2 = light, 2700 s + guard case let .sleepTimeline(_, stages) = YCBTHealthRecords.sleep(record).first else { + return XCTFail("expected a sleep timeline") + } + XCTAssertEqual(stages.count, 75) + XCTAssertEqual(stages.filter { $0 == .deep }.count, 30) + XCTAssertEqual(stages.filter { $0 == .light }.count, 45) + } + // MARK: Type table → decoder wiring /// `decode(_:type:)` is what the transfer machine actually calls; every catalog type must reach a @@ -304,9 +338,9 @@ final class YCBTHealthRecordsTests: XCTestCase { XCTAssertEqual(YCBTHealthRecords.decode(temperature, type: .temperature).count, 2) // hrv + stress + fatigue + vo2max XCTAssertEqual(YCBTHealthRecords.decode(capturedBodyRecord, type: .bodyData).count, 4) - // 8 records × (steps + systolic + diastolic + spo2 + respiratory rate + hrv); temp and blood - // sugar are the unmeasured fillers in this capture. - XCTAssertEqual(YCBTHealthRecords.decode(capturedAllRecords, type: .all).count, 8 * 6) + // 8 records × (systolic + diastolic + spo2 + respiratory rate + hrv); temp and blood sugar are + // the unmeasured fillers in this capture, and the cumulative step counter is not published. + XCTAssertEqual(YCBTHealthRecords.decode(capturedAllRecords, type: .all).count, 8 * 5) XCTAssertFalse(YCBTHealthRecords.decode(capturedNight, type: .sleep).isEmpty) XCTAssertFalse(YCBTHealthRecords.decode(capturedHeartRecords, type: .heart).isEmpty) } diff --git a/PulseLoopTests/YCBTHistoryTransferTests.swift b/PulseLoopTests/YCBTHistoryTransferTests.swift index 4317d8f..4a389c7 100644 --- a/PulseLoopTests/YCBTHistoryTransferTests.swift +++ b/PulseLoopTests/YCBTHistoryTransferTests.swift @@ -150,6 +150,100 @@ final class YCBTHistoryTransferTests: XCTestCase { XCTAssertTrue(writer.sent.isEmpty, "types the firmware rejected are not re-requested this session") } + // MARK: Terminal cross-check + + /// The CRC alone does not catch a **short** buffer. A dropped data frame leaves us holding fewer + /// bytes than the ring sent; cross-checking the terminal's packet and byte counts against both the + /// header's promise and the buffer we actually built turns "silently short" into a NAK and a retry. + func testTerminalWithMismatchedCountsIsNakedAndRetried() { + let writer = FakeWriter() + let transfer = YCBTHistoryTransfer(writer: writer) + transfer.start(types: [.heart]) + _ = transfer.handle(cmd: 0x06, payload: header(records: 2, packets: 1, bytes: heartBuffer.count)) + _ = transfer.handle(cmd: 0x15, payload: Array(heartBuffer.prefix(6))) // one frame lost + writer.sent.removeAll() + + // The ring's terminal describes what it *sent* — 12 bytes — but we only hold 6. + let events = transfer.handle(cmd: 0x80, payload: terminal(packets: 1, buffer: heartBuffer)) + + XCTAssertEqual(writer.sent.first, ackCrcFailure, "a short buffer must be NAKed, not accepted") + XCTAssertEqual(writer.sent.last, heartQuery, "and the type re-requested") + XCTAssertTrue(events.isEmpty, "nothing may be decoded from a buffer we know is incomplete") + } + + /// A terminal whose counts disagree with the *header* is equally untrustworthy, even when its own + /// byte count happens to match the buffer. + func testTerminalDisagreeingWithTheHeaderIsNaked() { + let writer = FakeWriter() + let transfer = YCBTHistoryTransfer(writer: writer) + transfer.start(types: [.heart]) + _ = transfer.handle(cmd: 0x06, payload: header(records: 2, packets: 9, bytes: heartBuffer.count)) + _ = transfer.handle(cmd: 0x15, payload: heartBuffer) + writer.sent.removeAll() + + _ = transfer.handle(cmd: 0x80, payload: terminal(packets: 1, buffer: heartBuffer)) + + XCTAssertEqual(writer.sent.first, ackCrcFailure) + } + + /// The happy path must be unaffected: matching counts and CRC still ACK and decode. + func testMatchingCountsStillAcceptTheTransfer() { + let writer = FakeWriter() + let transfer = YCBTHistoryTransfer(writer: writer) + transfer.start(types: [.heart]) + _ = transfer.handle(cmd: 0x06, payload: header(records: 2, packets: 1, bytes: heartBuffer.count)) + _ = transfer.handle(cmd: 0x15, payload: heartBuffer) + writer.sent.removeAll() + + let events = transfer.handle(cmd: 0x80, payload: terminal(packets: 1, buffer: heartBuffer)) + + XCTAssertEqual(writer.sent.first, ackAccepted) + XCTAssertEqual(events.filter { if case .historyMeasurement = $0 { return true } else { return false } }.count, 2) + } + + // MARK: append + + /// The ring's `02 01` bitmap arrives *during* the startup walk, so the types it unlocks have to join + /// the queue without disturbing the block in flight — `start` refuses outright while active, which is + /// right for a second full pass and wrong for this. + func testAppendExtendsTheQueueWithoutDisturbingTheInFlightType() { + let writer = FakeWriter() + let transfer = YCBTHistoryTransfer(writer: writer) + transfer.start(types: [.heart]) + _ = transfer.handle(cmd: 0x06, payload: header(records: 2, packets: 1, bytes: heartBuffer.count)) + _ = transfer.handle(cmd: 0x15, payload: heartBuffer) + writer.sent.removeAll() + + transfer.append(types: [.all]) + XCTAssertTrue(writer.sent.isEmpty, "append must not interrupt the block being received") + + _ = transfer.handle(cmd: 0x80, payload: terminal(packets: 1, buffer: heartBuffer)) + XCTAssertEqual(writer.sent.last, allQuery, "the appended type is requested when the queue reaches it") + } + + /// Appending while idle has to start the machine, or a bitmap that lands after a finished walk would + /// leave its types unfetched until the next sync. + func testAppendStartsTheMachineWhenIdle() { + let writer = FakeWriter() + let transfer = YCBTHistoryTransfer(writer: writer) + + transfer.append(types: [.all]) + + XCTAssertEqual(writer.sent, [allQuery]) + } + + /// Asking twice would re-dump a log we already hold and re-upsert every record in it. + func testAppendIgnoresTypesAlreadyQueuedOrInFlight() { + let writer = FakeWriter() + let transfer = YCBTHistoryTransfer(writer: writer) + transfer.start(types: [.heart, .all]) + writer.sent.removeAll() + + transfer.append(types: [.heart, .all]) + + XCTAssertTrue(writer.sent.isEmpty, "neither the in-flight type nor a queued one may be re-added") + } + // MARK: Queue composition (A3) /// The engine asks for the full nine-type catalog, in the SDK's ascending-key order @@ -160,7 +254,7 @@ final class YCBTHistoryTransferTests: XCTestCase { func testEngineRequestsEveryHistoryTypeInOrder() { let writer = FakeWriter() let transfer = YCBTHistoryTransfer(writer: writer) - let engine = YCBTSyncEngine(writer: writer, transfer: transfer) + let engine = YCBTSyncEngine(writer: writer, transfer: transfer, profile: .permissiveTestProfile) engine.runStartup() var requested: [UInt8] = [] @@ -173,6 +267,104 @@ final class YCBTHistoryTransferTests: XCTestCase { XCTAssertEqual(requested, [0x02, 0x04, 0x06, 0x08, 0x09, 0x1a, 0x1e, 0x2f, 0x33]) } + // MARK: Capability-gated queue + + /// A ring that doesn't implement a type answers "no data" or `0xFC`, both handled — so this is not + /// about correctness, it is about not spending ten seconds of watchdog per absent type on every + /// single sync. For the R10M baseline that leaves exactly four queries. + func testR10MStartupAsksOnlyForTheLogsItKeeps() { + let writer = FakeWriter() + let transfer = YCBTHistoryTransfer(writer: writer) + let engine = YCBTSyncEngine(writer: writer, transfer: transfer, profile: YCBTFamilyProfile( + baselineCapabilities: YCBTCoordinator().capabilities, + bitmapGatedCapabilities: YCBTCoordinator().bitmapGatedCapabilities, + queryChipSchemeAtStartup: false, + supportsBloodPressureMonitor: false + )) + engine.runStartup() + + var requested: [UInt8] = [] + while let query = writer.sent.last(where: { $0.count == 2 && $0[0] == 0x05 }) { + requested.append(query[1]) + writer.sent.removeAll() + _ = transfer.handle(cmd: query[1], payload: [0x00]) // "no data" → advance + } + XCTAssertEqual(requested, [0x02, 0x04, 0x06, 0x09], "sport, sleep, heart, all — and nothing else") + XCTAssertFalse(requested.contains(0x1a), "no dedicated SpO₂ log on this ring") + } + + /// A capability the bitmap unlocks mid-walk has to reach the queue, or its log waits for the next + /// sync. `.all` is re-queued alongside because BP is an *optional field* of a record we already ran — + /// so the run that just happened decoded it with that field dropped. + func testALateBitmapAppendsTheNewlyUnlockedTypes() { + let writer = FakeWriter() + let transfer = YCBTHistoryTransfer(writer: writer) + let engine = YCBTSyncEngine(writer: writer, transfer: transfer, profile: YCBTFamilyProfile( + baselineCapabilities: [.heartRate], + bitmapGatedCapabilities: [.bloodPressure] + )) + // Baseline is heart-rate only, so the startup queue is heart + all (all is never gated). + engine.runStartup() + // The bitmap lands while `05 06` is still in flight — the case `start` cannot serve. + engine.handle(.supportFunctions([.bloodPressure])) + + var requested: [UInt8] = [] + while let query = writer.sent.last(where: { $0.count == 2 && $0[0] == 0x05 }) { + requested.append(query[1]) + writer.sent.removeAll() + _ = transfer.handle(cmd: query[1], payload: [0x00]) // "no data" → advance + } + XCTAssertEqual(requested, [0x06, 0x09, 0x08], "the blood-pressure log joins the queue behind the rest") + } + + /// A bitmap that lands *after* the walk finished has to restart the machine for its new types — the + /// `05 09` combined record it already ran was decoded with the BP fields dropped. + func testALateBitmapAfterTheWalkRerunsTheCombinedRecord() { + let writer = FakeWriter() + let transfer = YCBTHistoryTransfer(writer: writer) + let engine = YCBTSyncEngine(writer: writer, transfer: transfer, profile: YCBTFamilyProfile( + baselineCapabilities: [.heartRate], + bitmapGatedCapabilities: [.bloodPressure] + )) + engine.runStartup() + while let query = writer.sent.last(where: { $0.count == 2 && $0[0] == 0x05 }) { + writer.sent.removeAll() + _ = transfer.handle(cmd: query[1], payload: [0x00]) + } + writer.sent.removeAll() + + engine.handle(.supportFunctions([.bloodPressure])) + + var requested: [UInt8] = [] + while let query = writer.sent.last(where: { $0.count == 2 && $0[0] == 0x05 }) { + requested.append(query[1]) + writer.sent.removeAll() + _ = transfer.handle(cmd: query[1], payload: [0x00]) + } + XCTAssertTrue(requested.contains(0x08), "the blood-pressure log is now worth asking for") + XCTAssertTrue(requested.contains(0x09), "and `all` is re-run for its optional BP fields") + } + + /// The R10M ACKs the handshake's `03 09` but doesn't always start publishing until its history dump + /// is done, so today's steps sit at whatever the last session left. One extra frame after the walk + /// fixes a reconnect that otherwise looks frozen — and it must fire exactly once. + func testLiveStatusIsReassertedOnceAfterTheStartupWalk() { + let writer = FakeWriter() + let transfer = YCBTHistoryTransfer(writer: writer) + let engine = YCBTSyncEngine(writer: writer, transfer: transfer, profile: .permissiveTestProfile) + let liveStatus = Data([0x03, 0x09, 0x01, 0x00, 0x02]) + + engine.runStartup() + writer.sent.removeAll() + + engine.handle(.historySyncFinished) + XCTAssertEqual(writer.sent, [liveStatus]) + + writer.sent.removeAll() + engine.handle(.historySyncFinished) + XCTAssertTrue(writer.sent.isEmpty, "only the startup walk earns the re-issue") + } + // MARK: Targeted passes + re-entrancy (A5) /// The post-workout backfill asks for exactly the three logs a workout can have added to — heart @@ -181,7 +373,7 @@ final class YCBTHistoryTransferTests: XCTestCase { func testSyncVitalsHistoryQueuesOnlyTheThreeVitalsTypes() { let writer = FakeWriter() let transfer = YCBTHistoryTransfer(writer: writer) - let engine = YCBTSyncEngine(writer: writer, transfer: transfer) + let engine = YCBTSyncEngine(writer: writer, transfer: transfer, profile: .permissiveTestProfile) engine.syncVitalsHistory() @@ -198,12 +390,28 @@ final class YCBTHistoryTransferTests: XCTestCase { func testSyncHistoryRerunsTheFullCatalog() { let writer = FakeWriter() let transfer = YCBTHistoryTransfer(writer: writer) - let engine = YCBTSyncEngine(writer: writer, transfer: transfer) + let engine = YCBTSyncEngine(writer: writer, transfer: transfer, profile: .permissiveTestProfile) + + engine.syncHistory() + + XCTAssertEqual( + writer.sent, + [Data([0x03, 0x09, 0x01, 0x00, 0x02]), Data([0x05, 0x02])], + "live status is re-asserted, then the queue starts at the first catalog type" + ) + } + + /// Pull-to-refresh is the gesture a user makes *because* today's steps look stale, and on a ring whose + /// `03 09` subscription went quiet the history walk alone won't move them: the cumulative counter + /// arrives on the `06 00` stream, not in any log. + func testSyncHistoryReassertsLiveStatusBeforeTheWalk() { + let writer = FakeWriter() + let transfer = YCBTHistoryTransfer(writer: writer) + let engine = YCBTSyncEngine(writer: writer, transfer: transfer, profile: .permissiveTestProfile) engine.syncHistory() - XCTAssertEqual(writer.sent, [Data([0x05, 0x02])], "the queue starts at the first catalog type") - XCTAssertTrue(writer.sent.allSatisfy { $0[0] == 0x05 }, "no handshake frames — history only") + XCTAssertEqual(writer.sent.first, Data([0x03, 0x09, 0x01, 0x00, 0x02])) } /// Three callers can now ask for a transfer (connect, post-workout backfill, the 30-minute pass). A diff --git a/PulseLoopTests/YCBTSupportFunctionTests.swift b/PulseLoopTests/YCBTSupportFunctionTests.swift index be428d7..a7a8b16 100644 --- a/PulseLoopTests/YCBTSupportFunctionTests.swift +++ b/PulseLoopTests/YCBTSupportFunctionTests.swift @@ -177,7 +177,12 @@ final class YCBTSupportFunctionTests: XCTestCase { let capabilities: Set = [.heartRate, .steps, .battery] let bitmapGatedCapabilities: Set = [.temperature, .stress] let iconSystemName = "circle" - func makeDriver(writer: RingCommandWriter) -> WearableDriver { YCBTDriver(writer: writer) } + func makeDriver(writer: RingCommandWriter) -> WearableDriver { + YCBTDriver(writer: writer, profile: YCBTFamilyProfile( + baselineCapabilities: capabilities, + bitmapGatedCapabilities: bitmapGatedCapabilities + )) + } } /// A gated capability the ring claims is added. From 50a64fc1538ed006d6e15d9d654793d03bbbeadd Mon Sep 17 00:00:00 2001 From: Saksham Bhutani Date: Sat, 25 Jul 2026 06:55:49 -0700 Subject: [PATCH 2/2] Document R10M ring support in the hardware docs --- README.md | 7 ++ docs/hardware/colmi.md | 5 +- docs/hardware/index.md | 108 ++++++++++++++++------------- docs/hardware/r10m.md | 153 +++++++++++++++++++++++++++++++++++++++++ docs/hardware/tk5.md | 28 ++++---- mkdocs.yml | 1 + 6 files changed, 242 insertions(+), 60 deletions(-) create mode 100644 docs/hardware/r10m.md diff --git a/README.md b/README.md index 8152785..0e336ee 100644 --- a/README.md +++ b/README.md @@ -141,6 +141,7 @@ declares exactly what it can do and the app shows only those features. | jring (generic smart ring) | `56ff` | `SMART_RING` | $7–12 | | Colmi / Yawell ring family — **QRing app** | `6e40fff0` / `de5bf728` | `R02_…`, `R0x…`, `COLMI R1x…`, `H59_…` | $15–30 | | Colmi / Yawell ring family — **SmartHealth app** | `be940` (Yucheng YCBT) | `R99 54DC` and similar | $15–30 | +| R10M (**LittleMeatball**) | `be940` (Yucheng YCBT) | `R10M …` (e.g. `R10M FCF4`) | $15–30 | | TK5 ring — 🧪 **limited support** | `be940` (Yucheng YCBT) | `TK5 …` (e.g. `TK5 24AA`) | ❓ | > ⚠️ **A Colmi ring ships with *either* the QRing or the SmartHealth app** — two completely different @@ -149,6 +150,12 @@ declares exactly what it can do and the app shows only those features. > app" retry. Both are supported. See the > [Colmi page](https://saksham2001.github.io/PulseLoopiOS/hardware/colmi/#smarthealth-app-colmi-rings). > +> ✅ **The R10M is the best-tested YCBT ring.** It speaks the same protocol as the SmartHealth-app +> Colmi rings and the TK5, but it is a different vendor's ring, so it pairs on its own — no app-type +> question — and carries its own capability set. Pairing, sync, HR/SpO₂/BP, battery and sleep are all +> validated on firmware 2.32. See the +> [R10M page](https://saksham2001.github.io/PulseLoopiOS/hardware/r10m/). +> > 🧪 **The TK5 is still experimental.** It shares its driver with the SmartHealth-app Colmi rings, and > that driver is confirmed working on one — but no TK5 has run it, and a few value scales still need a > confirmed reading. The app labels it "Limited support" when you pair it. See the diff --git a/docs/hardware/colmi.md b/docs/hardware/colmi.md index 8c92fe8..bf1dbe5 100644 --- a/docs/hardware/colmi.md +++ b/docs/hardware/colmi.md @@ -163,7 +163,8 @@ The VC30F is the PPG bio-sensor used in R10, R11, and R12: Some Colmi rings ship with **SmartHealth** (`com.zhuoting.healthyucheng`) instead of QRing: same brand, same product numbers, often the same box — but the firmware speaks the **Yucheng YCBT** protocol (`be940`), which has nothing in common at the wire level with QRing's Nordic-UART frames. It is the -[TK5](tk5.md)'s protocol byte for byte, so these rings run the same shared driver. +[TK5](tk5.md)'s and the [R10M](r10m.md)'s protocol byte for byte, so all three run the same shared +driver. ### Which rings @@ -254,4 +255,4 @@ The manufacturer publishes firmware update images with no authenticity checks See the [hardware overview](index.md) for the full cross-manufacturer comparison tables, the [Jring / 56ff](jring.md) page for the cheaper option, or — if your Colmi came with the -SmartHealth app — the [TK5](tk5.md) page, whose driver it shares. +SmartHealth app — the [TK5](tk5.md) and [R10M](r10m.md) pages, whose driver it shares. diff --git a/docs/hardware/index.md b/docs/hardware/index.md index 05929ab..a11d7a5 100644 --- a/docs/hardware/index.md +++ b/docs/hardware/index.md @@ -15,7 +15,7 @@ section breaks the hardware down by manufacturer. This is a cross-platform reference shared by both the iOS and Android ports — they drive the same rings over the same reverse-engineered BLE protocols. Compiled from project documentation, web research, product pages, and - teardowns. *Last updated: 2026-06-25.* + teardowns. *Last updated: 2026-07-25.* !!! warning "No affiliation" PulseLoop has no affiliation with the sellers or manufacturers of any ring @@ -46,6 +46,16 @@ section breaks the hardware down by manufacturer. [:octicons-arrow-right-24: Colmi / Yawell](colmi.md) +- :material-ring: __R10M / LittleMeatball__ + + --- + + ✅ Supported. Yucheng **YCBT** protocol (SmartHealth app), **validated end to + end on hardware** — FW 2.32. Not a Colmi ring despite the shared protocol, so + it gets its own family and capability set. + + [:octicons-arrow-right-24: R10M / LittleMeatball](r10m.md) + - :material-flask-outline: __TK5 / SmartHealth__ --- @@ -103,59 +113,62 @@ section breaks the hardware down by manufacturer. with when you pair it. See [SmartHealth-app Colmi rings](colmi.md#smarthealth-app-colmi-rings). -| | 56ff / Jring | Colmi R02/R03/etc | Colmi R10 | Colmi R12 | Colmi R11 | TK5 | -|---|---:|---:|---:|---:|---:|---:| -| **SoC** | Renesas DA14531 | Realtek RTL8762 | RTL8762 ESF | Realtek RTL8762 | Realtek AB2026 | JieLi (part ❓)⁴ | -| **Architecture** | ARM Cortex-M0 | ARM | ARM | ARM | ARM | ❓ | -| **Bluetooth** | BLE 5.x | BLE 5.0 | BLE 5.0 | BLE 5.0 | BLE 5.0 | BLE | -| **PPG sensor** | Unknown (HR/SpO₂) | Unknown | Vcare VC30F | Vcare VC30F | Vcare VC30F | ❓ | -| **PPG LEDs** | Unknown | Unknown | Red + green (dual) | Red + green (dual) | Red + green (dual) | Green + red/IR | -| **Accelerometer** | Yes | Unknown | STK8321 | ST LIS2DOC | STK8321 | Yes (❓ part) | -| **Skin temperature** | ❌ | ❓ | ✅ | ✅ | ✅ | ✅ | -| **Battery** | Unknown | Varies | 17 mAh | 15–18 mAh | 15–18 mAh¹ | ❓ | -| **Battery life** | Unknown | Varies | ~4–7 days | ~4–7 days | ~4–7 days | ❓ | -| **Charging case** | ❌ | ❌ | ✅ (200 mAh) | ❌ | ✅ (200 mAh) | ❓ | -| **Display** | ❌ | ❌ | ❌ | ✅ | ❌ | ❓ | -| **Waterproof** | Varies by seller | IP68 / 3ATM | 5ATM | IP68 + 1ATM | IP68 + 5ATM | ❓ | -| **Weight** | Unknown | Unknown | Unknown | ~4 g | Unknown | ❓ | -| **Price** | $7–12 | $15–25 | $15–25 | ~$30 | ~$15–25 | ❓ | -| **Protocol** | Custom 56ff | Nordic-UART QRing | Nordic-UART QRing | Nordic-UART QRing | Nordic-UART QRing² | Yucheng YCBT (`be940`) | -| **Frame size** | Fixed 20 bytes | 16 bytes (checksum) | 16 bytes (checksum) | 16 bytes (checksum) | 16 bytes (checksum) | Variable (CRC16) | -| **Encryption** | None | None | None | None | None | None³ | -| **FW OTA** | ✅ Renesas SUOTA | ✅ BLE OTA (no sign) | ❓ | ❓ | ❓ | ❌³ | -| **Custom firmware** | ✅ (SR08 ref) | ✅ (RF03 ref) | ❓ | ❓ | ❓ | ❓ | -| **PulseLoop support** | ✅ | ✅ | ✅ | ✅ | ✅ | 🧪 | +| | 56ff / Jring | Colmi R02/R03/etc | Colmi R10 | Colmi R12 | Colmi R11 | TK5 | R10M | +|---|---:|---:|---:|---:|---:|---:|---:| +| **SoC** | Renesas DA14531 | Realtek RTL8762 | RTL8762 ESF | Realtek RTL8762 | Realtek AB2026 | JieLi (part ❓)⁴ | ❓ | +| **Architecture** | ARM Cortex-M0 | ARM | ARM | ARM | ARM | ❓ | ❓ | +| **Bluetooth** | BLE 5.x | BLE 5.0 | BLE 5.0 | BLE 5.0 | BLE 5.0 | BLE | BLE | +| **PPG sensor** | Unknown (HR/SpO₂) | Unknown | Vcare VC30F | Vcare VC30F | Vcare VC30F | ❓ | ❓ (green + red/IR) | +| **PPG LEDs** | Unknown | Unknown | Red + green (dual) | Red + green (dual) | Red + green (dual) | Green + red/IR | Green + red/IR | +| **Accelerometer** | Yes | Unknown | STK8321 | ST LIS2DOC | STK8321 | Yes (❓ part) | Yes (❓ part) | +| **Skin temperature** | ❌ | ❓ | ✅ | ✅ | ✅ | ✅ | ❔ | +| **Battery** | Unknown | Varies | 17 mAh | 15–18 mAh | 15–18 mAh¹ | ❓ | ❓ | +| **Battery life** | Unknown | Varies | ~4–7 days | ~4–7 days | ~4–7 days | ❓ | ~4–5 days⁹ | +| **Charging case** | ❌ | ❌ | ✅ (200 mAh) | ❌ | ✅ (200 mAh) | ❓ | ❌ | +| **Display** | ❌ | ❌ | ❌ | ✅ | ❌ | ❓ | ❌ | +| **Waterproof** | Varies by seller | IP68 / 3ATM | 5ATM | IP68 + 1ATM | IP68 + 5ATM | ❓ | IP68⁹ | +| **Weight** | Unknown | Unknown | Unknown | ~4 g | Unknown | ❓ | ~3.6–4.5 g | +| **Price** | $7–12 | $15–25 | $15–25 | ~$30 | ~$15–25 | ❓ | $15–30 | +| **Protocol** | Custom 56ff | Nordic-UART QRing | Nordic-UART QRing | Nordic-UART QRing | Nordic-UART QRing² | Yucheng YCBT (`be940`) | Yucheng YCBT (`be940`) | +| **Frame size** | Fixed 20 bytes | 16 bytes (checksum) | 16 bytes (checksum) | 16 bytes (checksum) | 16 bytes (checksum) | Variable (CRC16) | Variable (CRC16) | +| **Encryption** | None | None | None | None | None | None³ | None | +| **FW OTA** | ✅ Renesas SUOTA | ✅ BLE OTA (no sign) | ❓ | ❓ | ❓ | ❌³ | ❌ | +| **Custom firmware** | ✅ (SR08 ref) | ✅ (RF03 ref) | ❓ | ❓ | ❓ | ❓ | ❓ | +| **PulseLoop support** | ✅ | ✅ | ✅ | ✅ | ✅ | 🧪 | ✅ | ¹ 15 mAh for sizes 8–9, 18 mAh for sizes 10–13. ² Works with the QRing app; also has a companion "Da Rings" app. Matched by Colmi driver. ³ The TK5's health protocol is cleartext with no auth. Its separate `AE00` service is **JieLi RCSP** — the chipset vendor's auth, which gates firmware updates and watch faces only. PulseLoop implements neither, so it doesn't implement the handshake. See [TK5](tk5.md#the-ae00-service). ⁴ JieLi chipset inferred from the `AE00` RCSP service; the exact part is unknown. +⁹ Reseller-listed, not measured. The R10M's internals have not been identified beyond what its exposed PCB shows. ## Supported Rings — Capabilities The Colmi columns are the **QRing** firmware. The same rings sold with the SmartHealth app get their -own column — same hardware, different protocol, different driver. - -| Capability | 56ff / Jring | Colmi R02/etc | Colmi R10 | Colmi R12 | Colmi R11 | Colmi (SmartHealth)⁶ | TK5 | -|---|---:|---:|---:|---:|---:|---:|---:| -| Heart rate — spot | ✅ | ✅ | ✅ | ✅ | ✅ | 🧪 | 🧪 | -| Heart rate — history | ✅ | ✅ | ✅ | ✅ | ✅ | 🧪 | 🧪 | -| Heart rate — live | ✅ | ✅ | ✅ | ✅ | ✅ | 🧪 | 🧪 | -| SpO₂ — history | ✅ | ✅ | ✅ | ✅ | ✅ | 🧪 | 🧪 | -| SpO₂ — spot | ✅ | ❌¹ | ❌¹ | ❌¹ | ❌¹ | 🧪 | 🧪 | -| Steps / distance / calories | ✅ | ✅ | ✅ | ✅ | ✅ | 🧪 | 🧪 | -| Sleep (light/deep/awake) | ✅ | ✅ | ✅ | ✅ | ✅ | 🧪 | 🧪 | -| REM sleep | ❌ | ✅ | ✅ | ✅ | ✅ | 🧪 | 🧪 | -| Blood pressure | ✅² | ❌ | ❌ | ❌ | ❌ | ❔⁷ | 🧪 | -| Blood sugar | ✅³ | ❌ | ❌ | ❌ | ❌ | ❔⁷ | 🧪⁴ | -| HRV | ✅ | ✅ | ✅ | ✅ | ✅ | 🧪 | 🧪 | -| Stress | ✅ | ✅ | ✅ | ✅ | ✅ | ❔⁷ | 🧪 | -| Fatigue | ✅ | ✅ | ✅ | ✅ | ✅ | ❌⁸ | 🧪 | -| Skin temperature | ❌ | ✅ | ✅ | ✅ | ✅ | ❔⁷ | 🧪⁴ | -| Battery level | ✅ | ✅ | ✅ | ✅ | ✅ | 🧪 | 🧪 | -| Find device | ✅ | ✅ | ✅ | ✅ | ✅ | 🧪 | 🧪 | -| Continuous background sync | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | -| FW update via app | ✅ | ✅ | ❓ | ❓ | ❓ | ❌⁵ | ❌⁵ | +own column — same hardware, different protocol, different driver. The last three columns are the three +[YCBT](r10m.md#not-the-only-ring-that-speaks-it) families, which share one driver: only the **R10M** has +been validated end to end on hardware. + +| Capability | 56ff / Jring | Colmi R02/etc | Colmi R10 | Colmi R12 | Colmi R11 | Colmi (SmartHealth)⁶ | TK5 | R10M | +|---|---:|---:|---:|---:|---:|---:|---:|---:| +| Heart rate — spot | ✅ | ✅ | ✅ | ✅ | ✅ | 🧪 | 🧪 | ✅ | +| Heart rate — history | ✅ | ✅ | ✅ | ✅ | ✅ | 🧪 | 🧪 | ✅ | +| Heart rate — live | ✅ | ✅ | ✅ | ✅ | ✅ | 🧪 | 🧪 | ✅ | +| SpO₂ — history | ✅ | ✅ | ✅ | ✅ | ✅ | 🧪 | 🧪 | ✅¹⁰ | +| SpO₂ — spot | ✅ | ❌¹ | ❌¹ | ❌¹ | ❌¹ | 🧪 | 🧪 | ✅ | +| Steps / distance / calories | ✅ | ✅ | ✅ | ✅ | ✅ | 🧪 | 🧪 | ✅ | +| Sleep (light/deep/awake) | ✅ | ✅ | ✅ | ✅ | ✅ | 🧪 | 🧪 | ✅ | +| REM sleep | ❌ | ✅ | ✅ | ✅ | ✅ | 🧪 | 🧪 | ✅ | +| Blood pressure | ✅² | ❌ | ❌ | ❌ | ❌ | ❔⁷ | 🧪 | ❔⁷ | +| Blood sugar | ✅³ | ❌ | ❌ | ❌ | ❌ | ❔⁷ | 🧪⁴ | ❔⁷ | +| HRV | ✅ | ✅ | ✅ | ✅ | ✅ | 🧪 | 🧪 | ❔⁷ | +| Stress | ✅ | ✅ | ✅ | ✅ | ✅ | ❔⁷ | 🧪 | ❔⁷ | +| Fatigue | ✅ | ✅ | ✅ | ✅ | ✅ | ❌⁸ | 🧪 | ❔⁷ | +| Skin temperature | ❌ | ✅ | ✅ | ✅ | ✅ | ❔⁷ | 🧪⁴ | ❔⁷ | +| Battery level | ✅ | ✅ | ✅ | ✅ | ✅ | 🧪 | 🧪 | ✅ | +| Find device | ✅ | ✅ | ✅ | ✅ | ✅ | 🧪 | 🧪 | ❔⁷ | +| Continuous background sync | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | +| FW update via app | ✅ | ✅ | ❓ | ❓ | ❓ | ❌⁵ | ❌⁵ | ❌ | ¹ Colmi family has no on-demand SpO₂ reading; SpO₂ is all-day background only. ² Direct PPG sensor reading, no user profile required. @@ -165,6 +178,7 @@ own column — same hardware, different protocol, different driver. ⁶ A Colmi/Yawell ring that shipped with the **SmartHealth** app rather than QRing — R09/R10 confirmed, other models possible. It speaks the TK5's YCBT protocol, so it runs the same driver. The family is **verified on hardware** (an R99 runs against the driver daily — connect, battery, activity/sleep/HR/BP/vitals sync); 🧪 marks the capabilities not yet individually cross-checked against the vendor app. See [SmartHealth-app Colmi rings](colmi.md#smarthealth-app-colmi-rings). ⁷ Sensor-dependent, so it is claimed **per ring** rather than per family: the handshake reads the ring's own capability bitmap and PulseLoop enables the metric only if the ring claims it. ⁸ Not claimed: no capability bit names fatigue, so it can be neither gated nor honestly promised on hardware nobody has connected. The first real sync decides. +¹⁰ From the `05 09` combined record, not a dedicated log — the R10M has no `05 1A` all-day SpO₂ history, so PulseLoop never issues that query for it. The TK5 stores stress and fatigue on the ring itself (the body-data record), which an earlier version of this page denied — it also reads respiratory rate and VO₂max, which no other supported ring exposes. Its whole column is 🧪 until the [on-device checkpoint](tk5.md#needs-on-device-confirmation) clears. @@ -192,6 +206,7 @@ Multiple hardware platforms span from $7 commodity rings to $350 premium devices | **[Colmi / Yawell (SmartHealth)](colmi.md#smarthealth-app-colmi-rings)** | Realtek RTL8762 family | Yucheng YCBT (`be940`) | SmartHealth | $15–30 | ✅ App (same protocol as the TK5; verified on an R99) | | **[Colmi R11](colmi.md#colmi-r11-qring-compatible-with-fidget-shell)** | Realtek AB2026 | Nordic-UART QRing | QRing / Da Rings | ~$15–25 | ✅ App (untested) | | **[TK5](tk5.md)** | JieLi (part ❓) | Yucheng YCBT (`be940`) | SmartHealth | ❓ | 🧪 App (limited) | +| **[R10M / LittleMeatball](r10m.md)** | ❓ | Yucheng YCBT (`be940`) | SmartHealth | $15–30 | ✅ App (validated on FW 2.32) | | **[LuckRing / TK18](luckring.md)** | ❓ (Coolwear/Kewo OEM) | Custom "K6" (`F618`) | LuckRing | ~$10 | 🧪 App (limited) | | **[SIMSONLAB](simsonlab.md)** | Phyplus PHY6222 | Unknown | SIMSONLAB app | ~$10–20 | ❌ | @@ -263,7 +278,8 @@ full detail, see each manufacturer's page. | **On-ring display** | [Colmi R12](colmi.md) | | **Best waterproofing** | [Colmi R10 or R11](colmi.md) (5ATM) | | **Best HR accuracy** | [Colmi R10/R12](colmi.md) (VC30F sensor, verified accuracy) | -| **Works with PulseLoop today** | [56ff Jring](jring.md) or [Colmi QRing family](colmi.md) | +| **Works with PulseLoop today** | [56ff Jring](jring.md), the [Colmi QRing family](colmi.md), or the [R10M](r10m.md) | +| **A YCBT ring that's actually been tested** | [R10M / LittleMeatball](r10m.md) — the only one validated on hardware | --- diff --git a/docs/hardware/r10m.md b/docs/hardware/r10m.md new file mode 100644 index 0000000..c3a52f8 --- /dev/null +++ b/docs/hardware/r10m.md @@ -0,0 +1,153 @@ +--- +title: R10M / LittleMeatball +description: >- + The LittleMeatball R10M ring — the Yucheng YCBT protocol, validated end to end + on firmware 2.32. +--- + +# R10M / LittleMeatball + +**PulseLoop support: ✅ Supported — validated on hardware (R10M FCF4, firmware 2.32)** + +The R10M is sold as the **LittleMeatball** smart ring (and unbranded by a long tail of resellers — +ORIWHIZ, JTLlink, and others list the same `R10M` hardware). It pairs with the **SmartHealth** app and +speaks the **Yucheng YCBT** protocol on a `be940` service, the same wire format as the +[TK5](tk5.md) and the [SmartHealth-app Colmi rings](colmi.md#smarthealth-app-colmi-rings). + +!!! success "This is the best-validated YCBT ring PulseLoop drives" + Pairing, the handshake, reconnect and day rollover; activity and history sync; HR, SpO₂ and blood + pressure both as history and as spot measurements; battery; sleep stages and REM — all confirmed on + a physical R10M running firmware 2.32. + + The support was [ported from the Android app](https://github.com/foureight84/PulseLoopAndroid/pull/31), + where that validation was done. The iOS port shares no code with it, but it does share the protocol + and the two firmware workarounds below. + +## Not the only ring that speaks it + +The R10M is one of **three** ring families PulseLoop drives over YCBT — the others are the +[TK5](tk5.md) and [Colmi rings that ship with SmartHealth](colmi.md#smarthealth-app-colmi-rings). The +protocol is byte-identical, so all three share the whole driver (the device-neutral `YCBT*` core); +each family adds only a coordinator with its advertisement matcher and capability set, plus a small +profile for firmware quirks. + +**It is deliberately not filed under Colmi.** The R10M is a different vendor's ring that happens to +speak the same protocol. Folding it into the Colmi family would have it inherit Colmi product art and +Colmi capability claims, and would put an "is this a QRing or a SmartHealth ring?" question in front of +an owner whose ring only ever shipped one firmware. + +| | R10M | TK5 | SmartHealth-Colmi | +|---|---|---|---| +| **Advertisement** | `R10M <4 hex>` (space or underscore) **and** the `be940000` service | `TK5 <4 hex>`; service not advertised | a Colmi-line name, which a *QRing* Colmi can also carry — so PulseLoop asks which app the ring came with | +| **Hardware validation** | ✅ full session, FW 2.32 | ❌ none — protocol proven on a sibling | ✅ an R99 runs it daily | +| **Chip scheme query** (`02 1b`) | ❌ suppressed — drops the link | ✅ answered | ✅ answered | +| **All-day BP monitor** (`01 1c`) | ❌ not implemented | ✅ sent | ✅ sent | +| **Dedicated SpO₂ log** (`05 1a`) | ❌ never queried | ✅ queried | ✅ queried | + +A fix to any `YCBT*` file fixes all three rings; a regression in one breaks all three. + +## At a glance + +| | Detail | +|---|---| +| **SoC** | ❓ Unknown | +| **Bluetooth** | BLE (version ❓) | +| **PPG sensor** | ❓ Unknown — green LED for HR, red/IR for SpO₂ (both visible in the ring's exposed PCB) | +| **Accelerometer** | Yes (steps and sport buckets decoded; part ❓) | +| **Battery / life** | ❓ Unknown (resellers claim ~4–5 days) | +| **Waterproof** | IP68 per the reseller listings | +| **Weight** | ~3.6–4.5 g | +| **Sizes** | 7 (17.3 mm) – 13 (22.2 mm) | +| **Price** | ~$15–30 depending on seller and finish | +| **Protocol** | Yucheng **YCBT** — variable-length frames, CRC16/CCITT-FALSE, cleartext | +| **App** | SmartHealth | +| **Advertised name** | `R10M <4 hex>` — e.g. `R10M FCF4`; `R10M_FCF4` also observed | +| **Firmware tested** | 2.32 | +| **Custom firmware** | ❓ Unknown | + +## Protocol + +Identical to the [TK5's](tk5.md#protocol) — same service, same framing, same history state machine: + +| Property | Value | +|---|---| +| **Service** | `be940000-7333-be46-b7ae-689e71722bd5` (advertised, unlike the TK5's) | +| **Command char** | `be940001` — write **and** indicate | +| **Stream char** | `be940003` — indicate: live vitals and all history data frames | +| **Frame** | `[type:1][cmd:1][len:2 LE][payload:N][crc16:2 LE]`, `len` = total frame length | +| **CRC** | CRC16/CCITT-FALSE (poly `0x1021`, init `0xFFFF`, no reflection), little-endian | +| **Epoch** | Seconds since 2000-01-01, in the ring's **local wall-clock** (no timezone concept) | +| **History** | `05 ` query → header → concatenated data frames → `05 80` terminal → **mandatory `05 80 {00}` ACK** | +| **Encryption** | None. No `AE00` / JieLi RCSP service on this ring | + +**Both indication channels must be live before the handshake starts.** Command replies — device info, +the capability bitmap, every ACK — arrive on `be940001`, while live and history data arrive on +`be940003`. PulseLoop waits for both, then writes the name read and the clock ahead of everything else. +A ring missing either channel fails the connect attempt with a visible error rather than hanging +half-connected. + +## Firmware quirks + +Two commands are suppressed for this family, and only this family: + +| Command | Why | +|---|---| +| `02 1b` **GetChipScheme** | The R10M closes an otherwise healthy connection with HCI `0x13` when asked. It is purely informational — nothing depends on the answer — so it is simply not sent. | +| `01 1c` **all-day BP monitor** | The ring has the blood-pressure *sensor* but does not implement the all-day monitor. The flag is separate from the capability for exactly this reason. | + +The TK5 and SmartHealth-Colmi families answer both fine and still send them. + +## Capabilities + +**Ring-declared vs. baseline.** The rows marked **🔓 ring-declared** are offered only if *this* unit's +`02 01` capability bitmap sets their bit. Everything else is a **baseline** promise — claimed +unconditionally, and the bitmap can only ever *add*, never remove. + +**Firmware 2.32 declares none of the gated bits**, so a stock R10M shows its baseline plus blood +pressure. They stay listed because "R10M" is a model, not a firmware, and the gate costs a ring that +*does* have them nothing. + +| Capability | Status | Notes | +|---|:---:|---| +| Heart rate — spot | ✅ | `03 2f` mode `00` → `06 01` stream | +| Heart rate — live | ✅ | `06 01` stream | +| Heart rate — history | ✅ | `05 06` query, 6-byte records | +| SpO₂ — spot | ✅ | red/IR LED, `03 2f` mode `02` | +| SpO₂ — history | ✅ | **from the `05 09` combined record only** — this ring has no dedicated `05 1a` log, so that query is never issued | +| Steps / distance / calories | ✅ | `05 02` history buckets + the live `06 00` counter | +| Sleep (light / deep / awake) | ✅ | `05 04` timeline; stage = `tag & 0x0F` | +| REM sleep | ✅ | stage tag `3` — a stage *inside* the timeline `ISHASSLEEP` grants, so no bit names it and it is not gated | +| Blood pressure — history | 🔓 | ring-declared (`ISHASBLOOD`, byte 0 bit 0). Dedicated `05 08` log + the combined record | +| Blood pressure — spot | 🔓 | ring-declared (`ISHASTESTBLOOD`, byte 15 bit 2). `03 2f` mode `01`; no cuff calibration, so treat as a trend, not a number | +| HRV | 🔓 | ring-declared (`ISHASHRV`, byte 1 bit 1). **Gated, unlike the TK5** — nobody has seen an R10M produce an HRV figure, and FW 2.32 does not declare the bit | +| Skin temperature | 🔓 | ring-declared (`ISHASTEMP`, byte 8 bit 0) | +| Stress | 🔓 | ring-declared (`IS_HAS_PRESSURE`, byte 22 bit 6), from the body-data record (`05 33`) | +| Fatigue | 🔓 | ring-declared on the **same bit as stress** — one record, one bit, two fields | +| Blood sugar | 🔓 | ring-declared (`ISHASBLOODSUGAR`, byte 17 bit 3) | +| Respiratory rate | ✅ | combined record @10 | +| Battery level | ✅ | in-band: `02 00` reply payload[5], plus the unprompted `06 15` push | +| Find device | 🔓 | ring-declared (`ISHASFINDDEVICE`, byte 6 bit 4) — not declared by FW 2.32 | +| Measurement intervals | ✅ | the `01 xx {enable, interval}` monitors, **filtered to the sensors this ring declares**; floored at the firmware's 30-min minimum | +| Periodic re-sync while connected | ✅ | every 30 min, plus a post-workout vitals pass | +| Continuous background sync | ❌ | the ring is only read while connected | +| FW update via app | ❌ | not implemented | + +## Known limitations + +- **No dedicated SpO₂ history log.** All-day SpO₂ comes from the `05 09` combined record instead. This + is why `spo2History` is claimed neither as baseline nor as a gated capability — that is precisely what + stops the `05 1a` query being issued. +- **Blood pressure is uncalibrated.** There is no cuff reference, so the number is a PPG-derived trend. +- **~8-day history horizon.** History samples, sleep sessions and activity timestamps outside + `now − 8 days … now + 1 hour` are dropped, because a ring's log can hold records stamped under a + *previous* clock and history rows upsert — one misdecoded record would re-persist on every sync. +- **No background sync while disconnected.** The ring keeps logging on its own schedule; PulseLoop + reads it on connect, every 30 minutes thereafter, and after a workout. +- **The ring's log is never deleted.** As with every YCBT ring, PulseLoop does not issue the + Health-Delete opcodes, so the ring replays its whole log on each sync and deduplication is app-side. + See [how PulseLoop diverges from SmartHealth](tk5.md#how-pulseloop-diverges-from-smarthealth). + +--- + +See the [TK5](tk5.md) and the [SmartHealth-app Colmi rings](colmi.md#smarthealth-app-colmi-rings) that +share this driver, or the [hardware overview](index.md) for the cross-manufacturer comparison. diff --git a/docs/hardware/tk5.md b/docs/hardware/tk5.md index 837aafe..f1cf499 100644 --- a/docs/hardware/tk5.md +++ b/docs/hardware/tk5.md @@ -24,18 +24,20 @@ YCBT** protocol on a `be940` service — nothing in common at the wire level wit ## Not the only ring that speaks it -The TK5 is one of **two** ring families PulseLoop drives over YCBT. The other is -**[Colmi rings that ship with SmartHealth](colmi.md#smarthealth-app-colmi-rings)** instead of QRing. -The protocol is byte-identical, so they share the whole driver (the device-neutral `YCBT*` core); each -family adds only a coordinator with its advertisement matcher and capability set. They differ in two -ways: +The TK5 is one of **three** ring families PulseLoop drives over YCBT. The others are the +**[R10M / LittleMeatball](r10m.md)** and **[Colmi rings that ship with SmartHealth](colmi.md#smarthealth-app-colmi-rings)** +instead of QRing. The protocol is byte-identical, so they share the whole driver (the device-neutral +`YCBT*` core); each family adds only a coordinator with its advertisement matcher and capability set, +plus a small profile for firmware quirks. They differ in three ways: -| | TK5 | SmartHealth-Colmi | -|---|---|---| -| **Advertisement** | `TK5 <4 hex>` — unambiguous, so it auto-detects | a Colmi-line name, which a *QRing* Colmi can also carry, so PulseLoop asks which app the ring came with | -| **SupportFunction bitmap** (`02 01`) | gates temperature, BP, stress, fatigue, blood sugar. HRV is **not** gated — it was observed working on this ring | gates those *and* HRV, which the tested R09 denies | +| | TK5 | R10M | SmartHealth-Colmi | +|---|---|---|---| +| **Advertisement** | `TK5 <4 hex>` — unambiguous, so it auto-detects | `R10M <4 hex>` **and** the `be940000` service | a Colmi-line name, which a *QRing* Colmi can also carry, so PulseLoop asks which app the ring came with | +| **Hardware validation** | none — the protocol is proven on a sibling, this ring isn't | ✅ full session on FW 2.32 | an R99 runs it daily | +| **SupportFunction bitmap** (`02 01`) | gates temperature, BP, stress, fatigue, blood sugar. HRV is **not** gated — it was observed working on this ring | gates all of those *and* HRV | gates those *and* HRV, which the tested R09 denies | -A fix to any `YCBT*` file fixes both rings; a regression in one breaks both. +A fix to any `YCBT*` file fixes all three rings; a regression in one breaks all three. The R10M also +suppresses two commands the other two send — see [its firmware quirks](r10m.md#firmware-quirks). ## At a glance @@ -166,8 +168,10 @@ replay, so a double-sync produces no duplicates. The cost is a longer sync as th emits a cached resting HR (~87 bpm) even off-finger, which would mask real readings. Live HR comes solely from the proprietary `06 01` stream, as in the official app. - **Timestamps are timezone-naive.** The ring stores local wall-clock seconds with no timezone byte, - so the decoder un-applies the device's UTC offset to recover the true instant. This is exact for - same-session syncs and can be an hour off across a DST transition. + so the decoder un-applies the device's UTC offset to recover the true instant. The offset is + resolved at each record's *own* date, so history read across a DST change decodes correctly; the + only residue is the ambiguous hour a fall-back repeats and the hour a spring-forward skips, which + the wire format simply cannot disambiguate. --- diff --git a/mkdocs.yml b/mkdocs.yml index 08d2301..949efe1 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -110,6 +110,7 @@ nav: - Overview: hardware/index.md - Jring / 56ff: hardware/jring.md - Colmi / Yawell (QRing + SmartHealth): hardware/colmi.md + - R10M / LittleMeatball: hardware/r10m.md - TK5 / SmartHealth: hardware/tk5.md - LuckRing / TK18: hardware/luckring.md - SIMSONLAB: hardware/simsonlab.md

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 z%0A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