diff options
author | Reinhard Arlt <reinhard.arlt@t-online.de> | 2013-07-21 23:53:44 +0200 |
---|---|---|
committer | Reinhard Arlt <reinhard.arlt@t-online.de> | 2013-07-21 23:53:44 +0200 |
commit | b8fffbe3871316d1cf892d1288fc6ddce017c038 (patch) | |
tree | 680179ab0a8f289e89a384ba58d0a31a448c1e0c /pseudonmea.c | |
parent | 393adafe5abb4959d5575aa52b670096adc09134 (diff) | |
download | gpsd-b8fffbe3871316d1cf892d1288fc6ddce017c038.tar.gz |
Groundbreaking for AIVDM messages in nmea mode.
Diffstat (limited to 'pseudonmea.c')
-rw-r--r-- | pseudonmea.c | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/pseudonmea.c b/pseudonmea.c index 216ad645..01111086 100644 --- a/pseudonmea.c +++ b/pseudonmea.c @@ -276,6 +276,45 @@ static void gpsd_binary_almanac_dump(struct gps_device_t *session, } } +#ifdef AIVDM_ENABLE +static void gpsd_binary_ais_dump(struct gps_device_t *session, + char bufp[], size_t len) +{ + static unsigned int number = 0; + char type[8] = "!AIVDM"; + unsigned char data[256]; + unsigned int msg1, msg2; + unsigned char number1; + char numc[4]; + char channel; + unsigned int left; + unsigned int datalen; + + msg1 = 1; + msg2 = 1; + number = -1; + numc[0] = 0; + data[0] = 0; + left = 0; + channel = 'A'; + + memset(data, 0, sizeof(data)); + datalen = ais_binary_encode(&session->gpsdata.ais, &data[0]); + + (void)snprintf(bufp, len, + "%s,%d,%d,%s,%c,%s,%d", + type, + msg1, + msg2, + numc, + channel, + data, + left); + + nmea_add_checksum(bufp); +} +#endif /* AIVDM_ENABLE */ + /*@-compdef -mustdefine@*/ /* *INDENT-OFF* */ void nmea_tpv_dump(struct gps_device_t *session, @@ -316,6 +355,17 @@ void nmea_subframe_dump(struct gps_device_t *session, len - strlen(bufp)); } +#ifdef AIVDM_ENABLE +void nmea_ais_dump(struct gps_device_t *session, + /*@out@*/ char bufp[], size_t len) +{ + bufp[0] = '\0'; + if ((session->gpsdata.set & AIS_SET) != 0) + gpsd_binary_ais_dump(session, bufp + strlen(bufp), + len - strlen(bufp)); +} +#endif /* AIVDM_ENABLE */ + /*@+compdef +mustdefine@*/ /* pseudonmea.c ends here */ |