Skip to content

Syncing Surfacing of G5/G6 Sensor Lifecycle + Detect Anubis-modded G6 to LoopKit#215

Merged
marionbarker merged 6 commits into
LoopKit:devfrom
loopandlearn:dev
Jul 20, 2026
Merged

Syncing Surfacing of G5/G6 Sensor Lifecycle + Detect Anubis-modded G6 to LoopKit#215
marionbarker merged 6 commits into
LoopKit:devfrom
loopandlearn:dev

Conversation

@dnzxy

@dnzxy dnzxy commented Jul 1, 2026

Copy link
Copy Markdown
Contributor

See loopandlearn#6
Tests are pending as of loopandlearn#7

dnzxy added 4 commits June 16, 2026 03:51
- Implement cgmStatusHighlight and cgmLifecycleProgress on G5/G6 so
  consumers can render sensor warmup, calibration state, sensor and
  session failure, and remaining-time UI. Status is driven by
  Glucose.state (CalibrationState); lifecycle is driven by
  sessionStartDate / sessionExpDate from the transmitter.

- Parse transmitterExpiryInDays from the version-rx frame (bytes 13-14)
  and expose isAnubis on G6CGMManager. Stock G6 reports a 90-day
  lifetime; Anubis-modded G6 reports 180 (heuristic borrowed from
  xDrip4iOS).

- Active-mode connect reads the version frame after glucose; passive
  mode catches it via the control-response listener. The field is
  persisted on TransmitterManagerState so isAnubis survives an app
  restart.

- The lifecycle ring fills against the actual warmup window: 2 h for
  stock G5/G6, 50 min for Anubis-modded G6.
Surface G5/G6 sensor lifecycle; detect Anubis-modded G6
@ps2

ps2 commented Jul 9, 2026

Copy link
Copy Markdown
Contributor

Maybe add the tests to this one, too, and I'll merge this.

Tests for Anubis detection + xcstrings sync
@dnzxy

dnzxy commented Jul 9, 2026

Copy link
Copy Markdown
Contributor Author

Tests added and successfully run (see loopandlearn#7 (comment)).

* Add sensor life configuration for Anubis transmitters

Implements user-configurable sensor session length (10–60 days) for Anubis-modded transmitters, while maintaining stock 10-day sessions for standard G5/G6 transmitters.

Key changes:
- Transmitter version frame detection identifies Anubis modification (180-day expiry)
- sessionExpDate now updated dynamically based on configured sensor life
- Warmup period adjusted for Anubis (50 min) vs stock (2 h)
- Settings UI provides wheel picker for sensor life selection (10–60 days)
- State persistence for selected sensor life across app sessions

* Hide session ring until final 48 hours

Add a guard statement to keep the session progress ring hidden until the transmitter session enters its final 48 hours. This improves the user experience by reducing visual clutter during the early stages of a session.

* Correct ring to lifecycle
@marionbarker

Copy link
Copy Markdown
Contributor

Test

  • Ensure this builds for both Loop and Trio.
    • ✅ Loop
    • ✅ Trio
  • Fake an Anubis (set variable to true) and rebuild to see the extra UI row for selecting desired Anubis Sensor Life to track for lifecycle
    • ✅ Loop
    • ✅ Trio
  • Run the CGMBLEKit tests in Xcode using the LoopWorkspace session
    • ✅ successful test

@marionbarker marionbarker left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Approve by code review and test

@marionbarker
marionbarker merged commit c9e6c84 into LoopKit:dev Jul 20, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants