Repository navigation
Name the 50.43 firmware data lock instead of advising a charger cycle #707
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Changes from all commits
e0cb953
5af5212
4c28d55
2e19ff3
9373193
0fdaf36
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -223,6 +223,10 @@ enum BandCondition { | |
| /// Syncs complete carrying no sensor data — the band's clock has lost sync. | ||
| clockLost, | ||
|
|
||
| /// The band is on a firmware that withholds all data until a WHOOP-signed | ||
| /// membership token is on it (edge#673), and no data is arriving. | ||
| firmwareLocked, | ||
|
|
||
| connected, | ||
| connecting, | ||
| scanning, | ||
|
|
@@ -271,6 +275,16 @@ class BandStatus { | |
| bool isLinkAuthRefusal(int? code) => | ||
| code == 5 || code == 8 || code == 15 || code == 137; | ||
|
|
||
| /// True for WHOOP 5.0 / MG firmware 50.43.x, which keeps answering commands | ||
| /// but sends no history or live data until a WHOOP-signed membership token is | ||
| /// on the band (edge#673; reported on 50.43.1.0 and 50.43.2.0). | ||
| /// [firmware] is `Gen5HelloInfo.firmwareVersion` (`major.minor.build.x`). | ||
| // ponytail: a version prefix, not a probe for the token itself. A later | ||
| // firmware with the same lock needs adding here; one that lifts it on 50.43 | ||
| // still only shows this while the data flags below are tripped. | ||
| bool isDataLockedFirmware(String? firmware) => | ||
| firmware != null && firmware.startsWith('50.43.'); | ||
|
|
||
| /// Fold the phone-level blocker and the band's own diagnostic flags into one | ||
| /// state. Pure; [connection] is `DeviceState.connection`. | ||
| /// | ||
|
|
@@ -287,6 +301,7 @@ BandStatus bandStatusFor({ | |
| bool strapNeedsReboot = false, | ||
| bool syncClockLost = false, | ||
| int bondRefusals = 0, | ||
| String? bandFirmware, | ||
| }) { | ||
| const repairFix = 'Forget the band in the phone’s Bluetooth settings, ' | ||
| 'then pair it again here'; | ||
|
|
@@ -355,6 +370,28 @@ BandStatus bandStatusFor({ | |
| fix: 'Reconnect the band; if it repeats tomorrow, pair it again', | ||
| ); | ||
| } | ||
| // The same two "no data is arriving" flags, explained by the firmware | ||
| // instead: a charger cycle or a re-pair cannot help a band that withholds | ||
| // its data by design, and both flags clear once records bank again. The | ||
| // flags cannot tell the lock from a real strap or clock fault, so the text | ||
| // says "probably", never "is". It sits BELOW the quarantine check on | ||
| // purpose: a quarantined batch is data that DID arrive, which a locked band | ||
| // does not send, so that diagnosis is the more specific one. | ||
| if ((strapNeedsReboot || syncClockLost) && | ||
| isDataLockedFirmware(bandFirmware)) { | ||
|
Comment on lines
+380
to
+381
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🟡 Medium · Firmware-lock guidance is hidden When a 50.43 band has either no-data flag set while Evaluate the firmware-lock condition before the quarantine check when its predicates match. Prompt for AI agentsIn `lib/ble/ble_state.dart` at lines 376-377:
**Firmware-lock guidance is hidden**
When a 50.43 band has either no-data flag set while `syncChunkQuarantined` is true, `bandStatusFor` returns `syncStuck` at the earlier quarantine check before evaluating the firmware-lock condition, so users see generic batch-transfer guidance instead of the 50.43 explanation.
Evaluate the firmware-lock condition before the quarantine check when its predicates match. |
||
| return const BandStatus( | ||
|
Comment on lines
+380
to
+382
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🟡 Medium · Other sync faults blamed on firmware When a band on firmware 50.43 has a token but trips either generic no-data flag for another cause, Only assert a firmware lock when the lock is positively identified; otherwise retain the existing status for the generic detector flags. Prompt for AI agentsIn `lib/ble/ble_state.dart` at lines 376-378:
**Other sync faults blamed on firmware**
When a band on firmware 50.43 has a token but trips either generic no-data flag for another cause, `strapNeedsReboot` and `syncClockLost` are generic no-data symptoms, not evidence that the membership token is missing. A 50.43 band with a token but a genuine strap or clock fault therefore gets the firmware-lock explanation and is told that charging or re-pairing will not help, obscuring the actual fault.
Only assert a firmware lock when the lock is positively identified; otherwise retain the existing status for the generic detector flags. |
||
| BandCondition.firmwareLocked, | ||
| 'The band’s firmware is probably holding back its data', | ||
| 'This band runs WHOOP firmware 50.43, which can connect and answer the ' | ||
| 'app but send no recordings or live heart rate until a ' | ||
| 'WHOOP-signed membership token is on it. That is the most likely ' | ||
| 'reason no data is arriving. OpenStrap cannot issue that token. ' | ||
| 'Everything already saved here is safe.', | ||
| fix: 'If it is the firmware, nothing in the app changes it, and this ' | ||
| 'clears once the band sends data again. If nothing arrives, ' | ||
| 'charging the band or re-pairing is still worth a try', | ||
| ); | ||
| } | ||
| if (strapNeedsReboot) { | ||
| return const BandStatus( | ||
| BandCondition.strapUnresponsive, | ||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -3037,6 +3037,9 @@ | |
| "whoopFirmwareWarningTitle": "WHOOP उपयोगकर्ता: WHOOP ऐप से दोबारा कनेक्ट न करें", | ||
| "whoopFirmwareWarningAction": "अगर आप OpenStrap या कोई दूसरा ओपन-सोर्स ऐप इस्तेमाल करते हैं, या बाद में किसी पर जाने की सोच रहे हैं, तो अपना बैंड आधिकारिक WHOOP ऐप से दोबारा कनेक्ट न करें। वह फ़र्मवेयर अपडेट अपने-आप इंस्टॉल कर सकता है। WHOOP ऐप को अनइंस्टॉल या अक्षम कर दें, ताकि वह आपके बैंड को अपडेट न कर सके।", | ||
| "whoopFirmwareWarningDetails": "WHOOP 5.0 / MG के फ़र्मवेयर 50.43.1.0 और 50.43.2.0 के बारे में रिपोर्टें बताती हैं कि डेटा तक पहुँच रोक दी जाती है। ब्लूटूथ फिर भी कनेक्ट हो सकता है। प्रभावित बैंड को अनलॉक करने के लिए WHOOP द्वारा साइन किया गया मेंबरशिप टोकन चाहिए, जिसे OpenStrap जारी नहीं कर सकता। हम समाधान पर काम कर रहे हैं, लेकिन अभी कोई उपाय उपलब्ध नहीं है।", | ||
| "bandStatusFirmwareLockedTitle": "बैंड का फ़र्मवेयर शायद उसका डेटा रोक रहा है", | ||
| "bandStatusFirmwareLockedReason": "यह बैंड WHOOP फ़र्मवेयर 50.43 पर चल रहा है, जो कनेक्ट होकर ऐप को जवाब दे सकता है, लेकिन जब तक बैंड पर WHOOP द्वारा साइन किया गया सदस्यता टोकन न हो, तब तक कोई रिकॉर्डिंग या लाइव हृदय गति नहीं भेजता। डेटा न आने का सबसे संभावित कारण यही है। OpenStrap वह टोकन जारी नहीं कर सकता। यहाँ पहले से सहेजा गया सब कुछ सुरक्षित है।", | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Qualify the firmware-lock statement. The Hindi text says firmware 50.43 sends no data without a token. The English text says this can happen, and some 50.43 bands send data normally. Use the same qualification so users with another fault do not receive a definite diagnosis.
|
||
| "bandStatusFirmwareLockedFix": "अगर वजह फ़र्मवेयर है, तो ऐप इसे बदल नहीं सकता और बैंड के फिर से डेटा भेजते ही यह संदेश हट जाएगा। अगर कुछ नहीं आता, तो बैंड को चार्ज करना या दोबारा पेयर करना फिर भी आज़माने लायक है", | ||
| "alarmNextLabel": "अगला", | ||
| "alarmScheduleGroup": "साप्ताहिक शेड्यूल", | ||
| "alarmWakeTimeRowTitle": "जागने का समय", | ||
|
|
||
Uh oh!
There was an error while loading. Please reload this page.