garmin sports watch pairing - #361
Conversation
opens the multi-link gfdi channel, answers the plumbing it needs answered (acks, current-time), reads the unprompted device-info push, asks for battery once. no history drain, no realtime streams — device sits behind its own picker row, syncs on demand and on the background piggyback, same as the ring's.
Reviewer's GuideIntroduces an explicitly experimental Garmin sports-watch integration backed by the pinned GFDI protocol implementation, with a bounded Multi-Link session that reports device identity and battery, archives raw traffic, and is wired through pairing, manual/background sync, teardown, and tests without exposing physiological signals. Sequence diagram for the bounded Garmin GFDI sync sessionsequenceDiagram
participant GarminWatch
participant GarminLink
participant GarminAdapter
participant GFDI
GarminLink->>GarminWatch: connect()
GarminLink->>GarminAdapter: run(link)
GarminAdapter->>GFDI: garminCloseAllRequest()
GFDI-->>GarminAdapter: CLOSE_ALL_RESP
GarminAdapter->>GFDI: garminRegisterMlRequest(kGarminServiceGfdi)
GFDI-->>GarminAdapter: REGISTER_ML_RESP
GFDI-->>GarminAdapter: DEVICE_INFORMATION
GarminAdapter->>GFDI: garminBuildStatusAck()
GarminAdapter->>GFDI: garminBuildProtobufRequest()
GFDI-->>GarminAdapter: PROTOBUF_RESPONSE
GarminAdapter->>GFDI: garminBuildStatusAck()
GarminAdapter-->>GarminLink: BandNote(model, firmware, battery)
GarminLink->>GarminWatch: disconnect()
File-Level Changes
Tips and commandsInteracting with Sourcery
Customizing Your ExperienceAccess your dashboard to:
Getting Help
|
|
Warning Review limit reachedNext included review available in 3 minutes. View limit detailsLimit details: You’ve used all 4 included reviews currently available. You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository. Review configuration: ⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: ASSERTIVE Plan: Team Run ID: ⛔ Files ignored due to path filters (4)
📒 Files selected for processing (8)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Hey - I've reviewed your changes and they look great!
Sourcery assessment
Needs a human reviewer. If the Garmin protocol or session behavior is wrong, the watch could have its existing link closed and the session could archive incorrect raw frames or metadata. Reverting stops future sessions, but it does not undo watch-side connection effects or remove records already written; those are bounded and repairable.
|
Failed to generate code suggestions for PR |
pubspec.yaml's protocol ref moved for #361 but this constant didn't follow it, failing the pin-consistency check. no kAlgoVersion move — the repin only adds garmin.dart, nothing on the derivation path changed.
|
Failed to generate code suggestions for PR |
|
@coderabbitai review |
Rate Limit Exceeded
|
|
@coderabbitai review |
|
PR Reviewer Guide 🔍Here are some key observations to aid the review process:
|
PR Code Suggestions ✨Explore these optional code suggestions:
|
pairs a garmin watch the same way oura/dafit are wired: opens the multi-link
gfdi channel, acks what needs acking, answers the current-time request, reads
the unprompted device-info push and asks for battery once. bounded session,
no history drain, no realtime streams.
signals is empty — this doesn't decode a physiological signal, just device
identity and battery. depends on protocol#52 (pinned by commit until merged).
Summary by Sourcery
Add experimental Garmin watch pairing that performs a bounded GFDI session for device identity and battery data without importing health signals or draining history.
New Features:
Enhancements:
Build:
Documentation:
Tests: