Parse GGA/GSA fix quality from NMEA, add PAIR command init sequence

Replace altitude-validity heuristic with authoritative GGA quality
field (SPS/DGPS/RTK) and GSA nav mode (2D/3D) via TinyGPSCustom
extractors. Send $PAIR062 commands at boot to filter NMEA output
to only GGA/GSA/RMC/GSV and configure PPS for fix-only pulses.
GpsPayload struct gains fix_quality field (16 -> 14 bytes packed).
This commit is contained in:
Ryan Malloy 2026-02-11 18:28:59 -07:00
parent 80158e10d7
commit 7db4204d26
3 changed files with 143 additions and 13 deletions

View file

@ -234,13 +234,24 @@ with sub-microsecond precision relative to the GPS epoch. The module's RTC
battery backup enables warm starts (~5s) after initial cold start fix (~30-60s).
**UART notes:** The RYS352A defaults to 115200 baud NMEA output with `GN`
talker ID (multi-constellation). The TX line (GPIO6) is optional — only needed
to send `$PAIR` proprietary commands (Airoha AG3352 engine) for changing
update rate (`$PAIR050`), constellation selection (`$PAIR066`), PPS config
(`$PAIR752`), or NMEA sentence output rates (`$PAIR062`). See
`docs/RYS352x_PAIR_Command_Guide.md` for the full command reference.
The firmware uses TinyGPS++ v1.1+ to parse standard GGA/RMC sentences —
v1.1 is required for `$GNGGA`/`$GNRMC` (multi-GNSS talker ID) support.
talker ID (multi-constellation). The TX line (GPIO6) is used at boot to send
`$PAIR` proprietary commands (Airoha AG3352 engine) that configure the GPS
module for satellite tracking use. See `docs/RYS352x_PAIR_Command_Guide.md`
for the full command reference.
**Boot-time PAIR init sequence:** The firmware sends `$PAIR062` commands at
startup to filter NMEA output — only GGA (position/quality), GSA (fix mode/DOP),
RMC (time/date/speed), and GSV (satellite visibility, every 5th fix) are enabled.
Redundant sentences (GLL, VTG, ZDA, GRS, GST, GNS) are disabled to reduce parser
load and latency. A `$PAIR752` command configures PPS to pulse only on 2D/3D fix
with 100ms pulse width. Each command waits for `$PAIR001` ACK; failures are
logged but non-fatal — the GPS works with defaults if PAIR commands are unsupported.
The firmware uses TinyGPS++ v1.1+ with custom field extractors (`TinyGPSCustom`)
to read GGA quality (field 6: SPS/DGPS/RTK) and GSA nav mode (field 2: 2D/3D)
directly from the NMEA stream, replacing the earlier heuristic that inferred
fix type from altitude validity. Both `GN` and `GP` talker ID variants are
registered for compatibility across constellation configurations.
## Full GPIO Map