diff options
author | Christian Gagneraud <cgagneraud@techworks.ie> | 2012-06-05 13:32:31 +0100 |
---|---|---|
committer | Christian Gagneraud <chris@techworks.ie> | 2012-06-20 10:05:40 +0100 |
commit | e4974575fdd9fe5c04f765eecb19a119fd55e3ec (patch) | |
tree | db38ebb3eb0f0b5f65f1c503bc24bdd6108c47a0 /packet.c | |
parent | 5f2fd318f9c80a57d0897613b2c5b5d5e44893d8 (diff) | |
download | gpsd-e4974575fdd9fe5c04f765eecb19a119fd55e3ec.tar.gz |
Add BS talker ID (used by AIS base stations)
check and packet-regress passed
Diffstat (limited to 'packet.c')
-rw-r--r-- | packet.c | 18 |
1 files changed, 18 insertions, 0 deletions
@@ -412,6 +412,8 @@ static void nextstate(struct gps_packet_t *lexer, unsigned char c) case NMEA_BANG: if (c == 'A') lexer->state = AIS_LEAD_1; + else if (c == 'B') + lexer->state = AIS_LEAD_ALT1; else lexer->state = GROUND_STATE; break; @@ -427,6 +429,18 @@ static void nextstate(struct gps_packet_t *lexer, unsigned char c) else lexer->state = GROUND_STATE; break; + case AIS_LEAD_ALT1: + if (c == 'S') + lexer->state = AIS_LEAD_ALT2; + else + lexer->state = GROUND_STATE; + break; + case AIS_LEAD_ALT2: + if (isalpha(c)) + lexer->state = NMEA_LEADER_END; + else + lexer->state = GROUND_STATE; + break; #if defined(TNT_ENABLE) || defined(GARMINTXT_ENABLE) || defined(ONCORE_ENABLE) case AT1_LEADER: switch (c) { @@ -1467,6 +1481,10 @@ void packet_parse(struct gps_packet_t *lexer) packet_accept(lexer, AIVDM_PACKET); else if (strncmp((char *)lexer->inbuffer, "!AIVDO", 6) == 0) packet_accept(lexer, AIVDM_PACKET); + else if (strncmp((char *)lexer->inbuffer, "!BSVDM", 6) == 0) + packet_accept(lexer, AIVDM_PACKET); + else if (strncmp((char *)lexer->inbuffer, "!BSVDO", 6) == 0) + packet_accept(lexer, AIVDM_PACKET); else #endif /* AIVDM_ENABLE */ packet_accept(lexer, NMEA_PACKET); |