Skip to content

GPS guard: reject a fix the receiver reports as 2D (GSA) - #3821

Open
AlexandrTyshchenko wants to merge 1 commit into
meshcore-dev:devfrom
AlexandrTyshchenko:feature/gps-guard-3d-fix
Open

AlexandrTyshchenko wants to merge 1 commit into
meshcore-dev:devfrom
AlexandrTyshchenko:feature/gps-guard-3d-fix

Conversation

@AlexandrTyshchenko

Copy link
Copy Markdown

Follow-up to the review comment by Avamander in #3753: the guard checked satellites and HDOP, but not the fix type.

  • MicroNMEALocationProvider reads the fix mode from GSA (any talker: GPGSA, GNGSA, BDGSA, ...). MicroNMEA itself does not parse GSA.
  • GpsGuard::acceptFix() rejects a fix the receiver reports as 2D or no-fix: gps guard shows rej 2d.
  • Receivers that don't send GSA are unchanged: with no GSA in the last 2 s the fix mode is unknown and not checked.
  • GPS_GUARD_REQUIRE_3D=0 turns the check off.
  • gps diag shows the fix mode as fm (1 none, 2 2D, 3 3D, 0 no recent GSA), only with GPS_GUARD.

Only builds with GPS_GUARD are affected.

Tested on a Faketec (nRF52840) with a UART GPS at 38400: the module sends GSA, gps diag shows fm:3, fixes are accepted (ok 5sat), periodic mode keeps working (time to fix 7–40 s over 4 cycles at a 5 min period). A real 2D fix was not observed on the bench (needs an obstructed sky), so the reject path is checked only by reading the code.

The guard checked satellites and HDOP but not the fix type. When the
receiver sends GSA, a fix it reports as 2D or no-fix is now rejected
(`rej 2d`). Receivers without GSA are unchanged (fix mode unknown).
GPS_GUARD_REQUIRE_3D=0 turns the check off. `gps diag` shows the fix
mode as `fm`.

This branch has not been deployed

No deployments
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.

1 participant