From 341eeedaefb59c275e954a77cb7381201baedcb6 Mon Sep 17 00:00:00 2001 From: LeonardSEO <130681849+LeonardSEO@users.noreply.github.com> Date: Wed, 21 Oct 2026 16:30:55 +0200 Subject: [PATCH] Name destructive commands 155-159 (certificate transfer, LOCK_DEVICE) for log legibility Names from the official app's command table via LeonardSEO/wearable5.0. Schema and Kotlin name map only; listed as destructive and absent from the send allowlist on both platforms. --- .../Sources/WhoopProtocol/Resources/whoop_protocol.json | 4 +++- android/app/src/main/java/com/noop/protocol/Enums.kt | 7 +++++++ docs/PROTOCOL_IMPLEMENTATION.md | 5 +++++ 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/Packages/WhoopProtocol/Sources/WhoopProtocol/Resources/whoop_protocol.json b/Packages/WhoopProtocol/Sources/WhoopProtocol/Resources/whoop_protocol.json index 0b854df9b4..e9be19f2df 100644 --- a/Packages/WhoopProtocol/Sources/WhoopProtocol/Resources/whoop_protocol.json +++ b/Packages/WhoopProtocol/Sources/WhoopProtocol/Resources/whoop_protocol.json @@ -57,7 +57,9 @@ "140": "SET_ADVERTISING_NAME", "141": "GET_ADVERTISING_NAME", "142": "START_FIRMWARE_LOAD_NEW", "143": "LOAD_FIRMWARE_DATA_NEW", "144": "PROCESS_FIRMWARE_IMAGE_NEW", "145": "GET_HELLO", "151": "GET_BATTERY_PACK_INFO", - "153": "TOGGLE_PERSISTENT_R20", "154": "TOGGLE_PERSISTENT_R21"}, + "153": "TOGGLE_PERSISTENT_R20", "154": "TOGGLE_PERSISTENT_R21", + "155": "START_CERTIFICATE_TRANSFER", "156": "LOAD_CERTIFICATE", "157": "VERIFY_CERTIFICATE", + "158": "PROCESS_CERTIFICATE", "159": "LOCK_DEVICE"}, "CommandResult": {"0": "FAILURE", "1": "SUCCESS", "2": "PENDING", "3": "UNSUPPORTED"} }, "envelope": [ diff --git a/android/app/src/main/java/com/noop/protocol/Enums.kt b/android/app/src/main/java/com/noop/protocol/Enums.kt index 8d64e2f513..4319366450 100644 --- a/android/app/src/main/java/com/noop/protocol/Enums.kt +++ b/android/app/src/main/java/com/noop/protocol/Enums.kt @@ -423,6 +423,13 @@ object CommandNames { 151 to "GET_BATTERY_PACK_INFO", 153 to "TOGGLE_PERSISTENT_R20", 154 to "TOGGLE_PERSISTENT_R21", + // 155-159: certificate transfer and LOCK_DEVICE (official app 5.473.0, via wearable5.0). Named for + // log legibility only; all five are destructive and absent from the send allowlist. + 155 to "START_CERTIFICATE_TRANSFER", + 156 to "LOAD_CERTIFICATE", + 157 to "VERIFY_CERTIFICATE", + 158 to "PROCESS_CERTIFICATE", + 159 to "LOCK_DEVICE", ) /** `"NAME(raw)"` for a known opcode, else `"0xHH(raw)"` — byte-identical to Swift `Schema.enumName`. */ diff --git a/docs/PROTOCOL_IMPLEMENTATION.md b/docs/PROTOCOL_IMPLEMENTATION.md index 935c7246e3..1a50fe3860 100644 --- a/docs/PROTOCOL_IMPLEMENTATION.md +++ b/docs/PROTOCOL_IMPLEMENTATION.md @@ -531,6 +531,11 @@ WHOOP 4 probe described below. | 142 | `START_FIRMWARE_LOAD_NEW` | firmware write | | 143 | `LOAD_FIRMWARE_DATA_NEW` | firmware write | | 144 | `PROCESS_FIRMWARE_IMAGE_NEW` | firmware write | +| 155–158 | `START_CERTIFICATE_TRANSFER`, `LOAD_CERTIFICATE`, `VERIFY_CERTIFICATE`, `PROCESS_CERTIFICATE` | replaces the strap's device certificate | +| 159 | `LOCK_DEVICE` | locks the strap; effect and reversal unknown | + +155–159 are named in the official app 5.473.0 (found via [wearable5.0](https://github.com/LeonardSEO/wearable5.0)); +they are in the schema for log legibility only and absent from the send allowlist on both platforms. The 142–144 family is the high-opcode-space counterpart of 36/37/38, in the same style as the clock family answering at 145–147 on MAVERICK. It is named by the schema and absent from the sender enum on