summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--driver_aivdm.c3
-rw-r--r--gps.h1
-rw-r--r--gpsdecode.c8
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.
diff --git a/gps.h b/gps.h
index 6ad9385d..0ac0d919 100644
--- a/gps.h
+++ b/gps.h
@@ -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)