diff options
author | Eric S. Raymond <esr@thyrsus.com> | 2010-06-13 18:34:13 -0400 |
---|---|---|
committer | Eric S. Raymond <esr@thyrsus.com> | 2010-06-13 18:34:13 -0400 |
commit | 41d348111305af41b0ada5512fd6593314c429a2 (patch) | |
tree | 86d57ff8e6c5f1b9c35a462e87dd7f03b709c995 /drivers.c | |
parent | 190e80886b96fb4dc81ab7b4ecb4f51424e4dc56 (diff) | |
download | gpsd-41d348111305af41b0ada5512fd6593314c429a2.tar.gz |
Add code to recover from false lock to Garmin Simple Text mode.
That is, if we later see NMEA or some other packet type. It's easy to get
a false lock from line noise because this format is not checksummed.
Diffstat (limited to 'drivers.c')
-rw-r--r-- | drivers.c | 20 |
1 files changed, 18 insertions, 2 deletions
@@ -901,8 +901,24 @@ static const struct gps_type_t rtcm104v3 = { static gps_mask_t garmintxt_parse_input(struct gps_device_t *session) { - //gpsd_report(LOG_PROG, "Garmin Simple Text packet\n"); - return garmintxt_parse(session); + if (session->packet.type == COMMENT_PACKET) { + return 0; + } else if (session->packet.type == GARMINTXT_PACKET) { + //gpsd_report(LOG_PROG, "Garmin Simple Text packet\n"); + return garmintxt_parse(session); + } else { + const struct gps_type_t **dp; + + for (dp = gpsd_drivers; *dp; dp++) { + if (session->packet.type == (*dp)->packet_type) { + gpsd_report(LOG_WARN, "%s packet seen when NMEA expected.\n", + (*dp)->type_name); + (void)gpsd_switch_driver(session, (*dp)->type_name); + return (*dp)->parse_packet(session); + } + } + return 0; + } } /* *INDENT-OFF* */ |