diff options
author | Chris Lawrence <lordsutch@gmail.com> | 2017-12-11 01:12:14 -0500 |
---|---|---|
committer | Gary E. Miller <gem@rellim.com> | 2018-06-15 21:00:00 -0700 |
commit | aed938aacb07f304265c36638b081b0d65007bd5 (patch) | |
tree | b5308527f670735dba366922080eb071988f3b1d /packet.c | |
parent | 648ccd2a9d3eb2fa2f88f2116a84b2e5ac6278b1 (diff) | |
download | gpsd-aed938aacb07f304265c36638b081b0d65007bd5.tar.gz |
Support Galileo $GA... talkers and fix a couple of $GB cases
Now that the Galileo constellation is live, the NMEA 4.1 standard
appears to have standardized on the "$GA..." prefix for
Galileo-specific messages. The lexer currently filters these out; this
patch ensures they go through to e.g. gpspipe -r. (I tore my hair out
for days trying to figure out why these were not being passed through
even though I could see them using screen etc.)
Also added logic to the GSA and GSV message parsing to account for the
Galileo messages. It probably needs more work to match up satellite
numbers between the GSA and GSV messages and to account for the GNSS
type field in NMEA 4.1, but it's a start at least.
I also fixed a couple of situations where the 'GB' prefix was being
ignored even though 'BD' was not. This leads to a regression in
test/daemon/beidou-gb.log, but the "regression" is actually incorrect
old behavior (JSON messages omitting BeiDou satellites) exposed by the
patch.
Signed-off-by: Gary E. Miller <gem@rellim.com>
Diffstat (limited to 'packet.c')
-rw-r--r-- | packet.c | 3 |
1 files changed, 2 insertions, 1 deletions
@@ -94,6 +94,7 @@ PERMISSIONS * $GN -- Mixed GPS and GLONASS data, according to IEIC 61162-1 * $BD -- Beidou * $GB -- Beidou + * $GA -- Galileo * $QZ -- QZSS GPS augmentation system * $II -- Integrated Instrumentation (Raytheon's SeaTalk system). * $IN -- Integrated Navigation (Garmin uses this). @@ -389,7 +390,7 @@ static bool nextstate(struct gps_lexer_t *lexer, unsigned char c) * We have a log from China with a Beidou device using $GB * rather than $BD. */ - if (c == 'B' || c == 'P' || c == 'N' || c == 'L') + if (c == 'B' || c == 'P' || c == 'N' || c == 'L' || c == 'A') lexer->state = NMEA_LEADER_END; else (void) character_pushback(lexer, GROUND_STATE); |