summaryrefslogtreecommitdiff
path: root/packet.c
diff options
context:
space:
mode:
authorChristian Gagneraud <cgagneraud@techworks.ie>2012-06-05 13:32:31 +0100
committerChristian Gagneraud <chris@techworks.ie>2012-06-20 10:05:40 +0100
commite4974575fdd9fe5c04f765eecb19a119fd55e3ec (patch)
treedb38ebb3eb0f0b5f65f1c503bc24bdd6108c47a0 /packet.c
parent5f2fd318f9c80a57d0897613b2c5b5d5e44893d8 (diff)
downloadgpsd-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.c18
1 files changed, 18 insertions, 0 deletions
diff --git a/packet.c b/packet.c
index fec34b97..3a1ffd11 100644
--- a/packet.c
+++ b/packet.c
@@ -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);