summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric S. Raymond <esr@thyrsus.com>2010-06-13 18:34:13 -0400
committerEric S. Raymond <esr@thyrsus.com>2010-06-13 18:34:13 -0400
commit41d348111305af41b0ada5512fd6593314c429a2 (patch)
tree86d57ff8e6c5f1b9c35a462e87dd7f03b709c995
parent190e80886b96fb4dc81ab7b4ecb4f51424e4dc56 (diff)
downloadgpsd-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.
-rw-r--r--drivers.c20
1 files changed, 18 insertions, 2 deletions
diff --git a/drivers.c b/drivers.c
index ad3e51ca..1e32b90f 100644
--- a/drivers.c
+++ b/drivers.c
@@ -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* */