diff options
-rw-r--r-- | driver_aivdm.c | 3 | ||||
-rw-r--r-- | gps.h | 1 | ||||
-rw-r--r-- | gpsdecode.c | 8 |
3 files changed, 8 insertions, 4 deletions
diff --git a/driver_aivdm.c b/driver_aivdm.c index 0214e5d1..7d577a4b 100644 --- a/driver_aivdm.c +++ b/driver_aivdm.c @@ -86,7 +86,7 @@ bool aivdm_decode(struct gps_device_t *session, struct ais_t *ais) /* assemble the binary data */ if (session->driver.aivdm.part == 1) { - (void)memset(session->driver.aivdm.bits, '\0', sizeof((char *)session->driver.aivdm.bits)); + (void)memset(session->driver.aivdm.bits, '\0', sizeof(session->driver.aivdm.bits)); session->driver.aivdm.bitlen = 0; } @@ -231,6 +231,7 @@ gps_mask_t aivdm_parse(struct gps_device_t *session) gps_mask_t mask = ONLINE_SET; if (aivdm_decode(session, &session->driver.aivdm.decoded)) { + mask |= PACKET_SET; /* * XXX The tag field is only 8 bytes, whic will truncate the MMSI; * widen it when ready for production. @@ -562,6 +562,7 @@ struct gps_data_t { #define RTCM2_SET 0x20000000u #define RTCM3_SET 0x40000000u #define FIX_SET (TIME_SET|MODE_SET|TIMERR_SET|LATLON_SET|HERR_SET|ALTITUDE_SET|VERR_SET|TRACK_SET|TRACKERR_SET|SPEED_SET|SPEEDERR_SET|CLIMB_SET|CLIMBERR_SET) +#define PACKET_SET 0x80000000u double online; /* NZ if GPS is on line, 0 if not. * * Note: gpsd clears this flag when sentences diff --git a/gpsdecode.c b/gpsdecode.c index 4db0895a..6986855a 100644 --- a/gpsdecode.c +++ b/gpsdecode.c @@ -263,7 +263,9 @@ static void decode(FILE *fpin, FILE *fpout) char buf[BUFSIZ]; for (;;) { - if (gpsd_poll(&session) & ERROR_SET) { + gps_mask_t state = gpsd_poll(&session); + + if (state & ERROR_SET) { gpsd_report(LOG_ERROR,"Error during packet fetch.\n"); break; } @@ -279,8 +281,8 @@ static void decode(FILE *fpin, FILE *fpout) rtcm3_dump(&rtcm3, stdout); } else if (session.packet.type == AIVDM_PACKET) { - aivdm_decode(&session, &session.driver.aivdm.decoded); - aivdm_dump(&session.driver.aivdm.decoded, stdout); + if (state & PACKET_SET) + aivdm_dump(&session.driver.aivdm.decoded, stdout); } else gpsd_report(LOG_ERROR, "unknown packet type %d\n", session.packet.type); if (packet_buffered_input(&session.packet) <= 0) |