diff options
-rw-r--r-- | driver_sirf.c | 58 | ||||
-rw-r--r-- | gpsdecode.c | 2 |
2 files changed, 24 insertions, 36 deletions
diff --git a/driver_sirf.c b/driver_sirf.c index 395d2cd0..43b30a8b 100644 --- a/driver_sirf.c +++ b/driver_sirf.c @@ -141,7 +141,7 @@ static gps_mask_t sirf_msg_ublox(struct gps_device_t *, unsigned char *, size_t); -static bool sirf_write(int fd, unsigned char *msg) +static bool sirf_write(struct gps_device_t *session, unsigned char *msg) { unsigned int crc; size_t i, len; @@ -159,13 +159,8 @@ static bool sirf_write(int fd, unsigned char *msg) msg[len + 4] = (unsigned char)((crc & 0xff00) >> 8); msg[len + 5] = (unsigned char)(crc & 0x00ff); - gpsd_report(LOG_IO, "SiRF: Writing control type %02x:%s\n", msg[4], - gpsd_hexdump_wrapper(msg, len + 8, LOG_IO)); - ok = (write(fd, msg, len + 8) == (ssize_t) (len + 8)); - if (!ok) { - gpsd_report(LOG_WARN, "SiRF: Writing error.\n"); - } - (void)tcdrain(fd); + gpsd_report(LOG_IO, "SiRF: Writing control type %02x:\n", msg[4]); + ok = (gpsd_write(session, msg, len + 8) == (ssize_t) (len + 8)); return (ok); } @@ -184,7 +179,7 @@ static ssize_t sirf_control_send(struct gps_device_t *session, char *msg, session->msgbuflen = len + 8; /* *INDENT-OFF* */ - return sirf_write(session->gpsdata.gps_fd, + return sirf_write(session, (unsigned char *)session->msgbuf) ? (int)session->msgbuflen : -1; /* *INDENT-ON* */ /*@ -charint -matchanyintegral +initallelements +mayaliasunique @*/ @@ -192,7 +187,7 @@ static ssize_t sirf_control_send(struct gps_device_t *session, char *msg, #endif /* ALLOW_CONTROLSEND */ #ifdef ALLOW_RECONFIGURE -static bool sirf_speed(int ttyfd, speed_t speed, char parity, int stopbits) +static bool sirfbin_speed(struct gps_device_t *session, speed_t speed, char parity, int stopbits) /* change speed in binary mode */ { /*@ +charint @*/ @@ -234,10 +229,10 @@ static bool sirf_speed(int ttyfd, speed_t speed, char parity, int stopbits) msg[8] = (unsigned char)LO(speed); msg[10] = (unsigned char)stopbits; msg[11] = (unsigned char)parity; - return (sirf_write(ttyfd, msg)); + return (sirf_write(session, msg)); } -static bool sirf_to_nmea(int ttyfd, speed_t speed) +static bool sirf_to_nmea(struct gps_device_t *session, speed_t speed) /* switch from binary to NMEA at specified baud */ { /*@ +charint @*/ @@ -261,15 +256,14 @@ static bool sirf_to_nmea(int ttyfd, speed_t speed) msg[26] = (unsigned char)HI(speed); msg[27] = (unsigned char)LO(speed); - return (sirf_write(ttyfd, msg)); + return (sirf_write(session, msg)); } static void sirfbin_mode(struct gps_device_t *session, int mode) { char parity = '0'; if (mode == MODE_NMEA) { - (void)sirf_to_nmea(session->gpsdata.gps_fd, - session->gpsdata.dev.baudrate); + (void)sirf_to_nmea(session, session->gpsdata.dev.baudrate); } else if (mode == MODE_BINARY) { switch (session->gpsdata.dev.parity) { default: @@ -413,7 +407,7 @@ static gps_mask_t sirf_msg_swversion(struct gps_device_t *session, } #ifdef ALLOW_RECONFIGURE gpsd_report(LOG_PROG, "SiRF: Enabling PPS message...\n"); - (void)sirf_write(session->gpsdata.gps_fd, enablemid52); + (void)sirf_write(session, enablemid52); #endif /* ALLOW_RECONFIGURE */ if (strstr((char *)(buf + 1), "ES")) @@ -427,7 +421,7 @@ static gps_mask_t sirf_msg_swversion(struct gps_device_t *session, if (session->gpsdata.dev.baudrate >= 38400) { /* some USB are also too slow, no way to tell which ones */ gpsd_report(LOG_PROG, "SiRF: Enabling subframe transmission...\n"); - (void)sirf_write(session->gpsdata.gps_fd, enablesubframe); + (void)sirf_write(session, enablesubframe); } else { gpsd_report(LOG_WARN, "SiRF: link too slow, disabling subframes.\n"); } @@ -459,7 +453,7 @@ static gps_mask_t sirf_msg_navdata(struct gps_device_t *session, /* some USB are also too slow, no way to tell which ones */ gpsd_report(LOG_WARN, "WARNING: SiRF: link too slow, disabling subframes.\n"); - (void)sirf_write(session->gpsdata.gps_fd, disablesubframe); + (void)sirf_write(session, disablesubframe); } #endif /* ALLOW_RECONFIGURE */ @@ -849,7 +843,7 @@ static gps_mask_t sirf_msg_sysparam(struct gps_device_t *session, session->driver.sirf.track_smooth_mode = (unsigned char)getub(buf, 12); #ifdef ALLOW_RECONFIGURE gpsd_report(LOG_PROG, "SiRF: Setting Navigation Parameters\n"); - (void)sirf_write(session->gpsdata.gps_fd, modecontrol); + (void)sirf_write(session, modecontrol); #endif /* ALLOW_RECONFIGURE */ return 0; } @@ -1274,30 +1268,30 @@ static void sirfbin_event_hook(struct gps_device_t *session, event_t event) session->gpsdata.dev.baudrate); (void)usleep(3330); /* guessed settling time */ gpsd_report(LOG_PROG, "SiRF: unset MID 30...\n"); - (void)sirf_write(session->gpsdata.gps_fd, unsetmid30); + (void)sirf_write(session, unsetmid30); (void)usleep(3330); /* guessed settling time */ gpsd_report(LOG_PROG, "SiRF: Requesting periodic ecef reports...\n"); - (void)sirf_write(session->gpsdata.gps_fd, requestecef); + (void)sirf_write(session, requestecef); gpsd_report(LOG_PROG, "SiRF: Requesting periodic tracker reports...\n"); - (void)sirf_write(session->gpsdata.gps_fd, requesttracker); + (void)sirf_write(session, requesttracker); gpsd_report(LOG_PROG, "SiRF: Setting DGPS control to use SBAS...\n"); - (void)sirf_write(session->gpsdata.gps_fd, dgpscontrol); + (void)sirf_write(session, dgpscontrol); gpsd_report(LOG_PROG, "SiRF: Setting SBAS to auto/integrity mode...\n"); - (void)sirf_write(session->gpsdata.gps_fd, sbasparams); + (void)sirf_write(session, sbasparams); gpsd_report(LOG_PROG, "SiRF: unset MID 29...\n"); - (void)sirf_write(session->gpsdata.gps_fd, unsetmid29); + (void)sirf_write(session, unsetmid29); gpsd_report(LOG_PROG, "SiRF: Probing for firmware version...\n"); - (void)sirf_write(session->gpsdata.gps_fd, versionprobe); + (void)sirf_write(session, versionprobe); gpsd_report(LOG_PROG, "SiRF: Requesting navigation parameters...\n"); - (void)sirf_write(session->gpsdata.gps_fd, navparams); + (void)sirf_write(session, navparams); } } if (event == event_deactivate) { @@ -1327,18 +1321,10 @@ static void sirfbin_event_hook(struct gps_device_t *session, event_t event) putbyte(moderevert, 17, session->driver.sirf.track_smooth_mode); /*@ +shiftimplementation @*/ gpsd_report(LOG_PROG, "SiRF: Reverting navigation parameters...\n"); - (void)sirf_write(session->gpsdata.gps_fd, moderevert); + (void)sirf_write(session, moderevert); } } -#ifdef ALLOW_RECONFIGURE -static bool sirfbin_speed(struct gps_device_t *session, - speed_t speed, char parity, int stopbits) -{ - return sirf_speed(session->gpsdata.gps_fd, speed, parity, stopbits); -} -#endif /* ALLOW_RECONFIGURE */ - /* this is everything we export */ /* *INDENT-OFF* */ const struct gps_type_t sirf_binary = diff --git a/gpsdecode.c b/gpsdecode.c index f0d4af68..6a8e7f34 100644 --- a/gpsdecode.c +++ b/gpsdecode.c @@ -371,9 +371,11 @@ static void decode(FILE *fpin, FILE *fpout) policy.json = json; gps_context_init(&context); + context.readonly = true; gpsd_init(&session, &context, NULL); gpsd_clear(&session); session.gpsdata.gps_fd = fileno(fpin); + session.gpsdata.dev.baudrate = 38400; /* hack to enable subframes */ for (;;) { |