summaryrefslogtreecommitdiff
path: root/packet.c
diff options
context:
space:
mode:
authorEric S. Raymond <esr@thyrsus.com>2005-07-07 04:10:57 +0000
committerEric S. Raymond <esr@thyrsus.com>2005-07-07 04:10:57 +0000
commit7b410c5f28a80aa550d2f5dcf0392d4e1769df51 (patch)
tree23b3de78f71ebf4a37cc871bf97f010f7f545e72 /packet.c
parent354970e4b499e716115b340677d2d600d45b2ca2 (diff)
downloadgpsd-7b410c5f28a80aa550d2f5dcf0392d4e1769df51.tar.gz
Tighten up the packet state machine.
Diffstat (limited to 'packet.c')
-rw-r--r--packet.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/packet.c b/packet.c
index 47411861..4ea4a011 100644
--- a/packet.c
+++ b/packet.c
@@ -642,7 +642,8 @@ ssize_t packet_get(struct gps_device_t *session)
}
if (checksum_ok)
packet_accept(session, NMEA_PACKET);
- session->packet_state = GROUND_STATE;
+ else
+ session->packet_state = GROUND_STATE;
packet_discard(session);
#ifdef SIRFII_ENABLE
} else if (session->packet_state == SIRF_RECOGNIZED) {
@@ -654,14 +655,16 @@ ssize_t packet_get(struct gps_device_t *session)
crc &= 0x7fff;
if (checksum == crc)
packet_accept(session, SIRF_PACKET);
- session->packet_state = GROUND_STATE;
+ else
+ session->packet_state = GROUND_STATE;
packet_discard(session);
#endif /* SIRFII_ENABLE */
#ifdef TSIP_ENABLE
} else if (session->packet_state == TSIP_RECOGNIZED) {
if ((session->inbufptr - session->inbuffer) >= 4)
packet_accept(session, TSIP_PACKET);
- session->packet_state = GROUND_STATE;
+ else
+ session->packet_state = GROUND_STATE;
packet_discard(session);
#endif /* TSIP_ENABLE */
#ifdef ZODIAC_ENABLE
@@ -678,8 +681,8 @@ ssize_t packet_get(struct gps_device_t *session)
gpsd_report(4,
"Zodiac Data checksum 0x%hx over length %hd, expecting 0x%hx\n",
sum, len, getword(5 + len));
+ session->packet_state = GROUND_STATE;
}
- session->packet_state = GROUND_STATE;
packet_discard(session);
#undef getword
#endif /* ZODIAC_ENABLE */