summaryrefslogtreecommitdiff
path: root/driver_sirf.c
diff options
context:
space:
mode:
authorGary E. Miller <gem@rellim.com>2009-11-17 19:59:37 +0000
committerGary E. Miller <gem@rellim.com>2009-11-17 19:59:37 +0000
commitadf6a6c2f107e95e9691ebd47925f2a8f0733630 (patch)
tree6c5103537b2376665cd0c86eca439d85e7f8390e /driver_sirf.c
parent9c9497981cc554c218d55ed15aae9217b9a159b9 (diff)
downloadgpsd-adf6a6c2f107e95e9691ebd47925f2a8f0733630.tar.gz
Make 'gpsctl -b' work for SiRF binary.
Very ugly, proof of concept. Gimmme another patch or two before cleaning it up.
Diffstat (limited to 'driver_sirf.c')
-rw-r--r--driver_sirf.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/driver_sirf.c b/driver_sirf.c
index 3c85d289..b0ae1f0e 100644
--- a/driver_sirf.c
+++ b/driver_sirf.c
@@ -210,13 +210,20 @@ static bool sirf_to_nmea(int ttyfd, speed_t speed)
return (sirf_write(ttyfd, msg));
}
-static void sirfbin_mode(struct gps_device_t *session, int mode)
+void sirfbin_mode(struct gps_device_t *session, int mode)
{
if (mode == MODE_NMEA) {
(void)sirf_to_nmea(session->gpsdata.gps_fd,session->gpsdata.dev.baudrate);
- } else {
- session->back_to_nmea = false;
+ } else if (mode == MODE_BINARY) {
+ (void)nmea_send(session,
+ "$PSRF100,0,%d,%d,%d,0",
+ session->gpsdata.dev.baudrate,
+ 9-session->gpsdata.dev.stopbits,
+ session->gpsdata.dev.stopbits);
+ (void)usleep(333); /* guessed settling time */
+ session->gpsdata.dev.driver_mode = MODE_BINARY;
}
+ session->back_to_nmea = false;
}
#endif /* ALLOW_RECONFIGURE */