Conversation
gunicsba
force-pushed
the
feature/guidance-track-announcement
branch
from
September 19, 2026 22:02
3cd61c4 to
ef9fbb9
Compare
2 of 3 tasks
gunicsba
added this pull request to stack #86
September 19, 2026 22:08
6 tasks
gunicsba
force-pushed
the
feature/guidance-track-announcement
branch
from
September 19, 2026 22:58
ef9fbb9 to
54bfe97
Compare
Parses AOG's guidance track context (PGN 0xF4) and field name (PGN 0xF3) and pushes the current track to every client whose DDOP declares the DDIs, every 250 ms while AOG has a valid track: - 507 GuidanceTrackSequenceNumber: advances whenever the track number or the reference line changes (a line switch can land on the same track index). - 508 UniqueGuidanceReferenceLineID: AOG's 16-bit line ID in the low 16 bits and a persistent per-field index in the high 16 bits, so it is unique across fields. The index comes from FieldRegistry (field_registry.csv next to settings.json). - 509-511 actual/right/left track number, with the +1 offset field testing showed implements need to stay in phase with AOG's on/off state. - 512 GuidanceLineSwathWidth: AOG's track spacing (tool width minus overlap), read from the optional bytes 10-11 of PGN 0xF4. Not sent when AOG omits it or reports 0, so older AOG builds keep working. - 513 GuidanceLineDeviation from AOG's XTE. The DDIs are mapped in request_measurement_commands() by extending the loop that maps GNSS quality, so, as for DDI 514, only DDIs an implement declares as settable are mapped. Nothing is gated on track-control negotiation: the TC pushes these values and any implement declaring them receives them. Adds unit tests for the PGN 0xF4 parser (sequence freshness and wrap, offset, validity, swath width). test_guidance_track is a dependency of iop_validator so the validation workflow, which builds only that target, builds it too. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
gunicsba
force-pushed
the
feature/guidance-track-announcement
branch
from
September 19, 2026 23:04
54bfe97 to
46fe425
Compare
…nnouncement Resolve conflict in request_measurement_commands(): keep this branch's generalized guidance-DDI mapping and use log() as the base branch now does. Also switch the FieldRegistry and TRACK prints to log() to match the async logging from #79. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
guidance_track_context.cpp now logs through log(), which needs async_log.cpp; the standalone test target only compiled the parser, so the IOP validation build failed to link. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Third of four PRs split out of #73. Stacked on #83 (base is
feature/gnss-quality-announcement, so this diff shows only this PR's changes; GitHub retargets it todeveloponce #83 merges). It reuses #83's DDI-mapping loop.Parses AOG's guidance track context (PGN
0xF4) and field name (PGN0xF3) and pushes the current track to every client whose DDOP declares the DDIs as settable, every 250 ms while AOG has a valid track:GuidanceTrackSequenceNumberUniqueGuidanceReferenceLineIDFieldRegistry(field_registry.csvnext tosettings.json).GuidanceLineSwathWidth0xF4. Not sent when AOG omits it or reports 0, so AOG builds without the field keep working. Needs AgOpenGPS-Official/AgOpenGPS#1218, which adds the field.GuidanceLineDeviationNothing here is gated on track-control negotiation — the TC pushes these values, so any implement that declares the DDI as settable gets it.
Things worth knowing
0xF4parser (sequence freshness/wrap, offset, validity, swath width, reset).test_guidance_trackis made a dependency ofiop_validatorso the validation workflow, which only builds that target, builds it too (no workflow edit, so no conflict with Add Tractor Facilities (PGN 65033) for the TECU #82's).docs/PROTOCOL.md(0xEF/0xF3/0xF4, new §5.4.1) and the readme's guidance subsection from Send GNSS quality (DDI 514) to implements #83.Test plan
AOG_TC_VALIDATE_IOP=ONbuild with only--target iop_validator(as CI does),ctest6/6 includingguidance_track_parsing.🤖 Generated with Claude Code