summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--packet.c69
-rw-r--r--packet_states.h20
2 files changed, 83 insertions, 6 deletions
diff --git a/packet.c b/packet.c
index b088af48..5e376f81 100644
--- a/packet.c
+++ b/packet.c
@@ -96,7 +96,7 @@ static void nextstate(struct gps_packet_t *lexer,
#endif /* NMEA_ENABLE */
#if defined(TNT_ENABLE) || defined(GARMINTXT_ENABLE)
if (c == '@') {
- lexer->state = TNT_LEADER;
+ lexer->state = AT_LEADER;
break;
}
#endif
@@ -221,10 +221,71 @@ static void nextstate(struct gps_packet_t *lexer,
lexer->state = GROUND_STATE;
break;
#if defined(TNT_ENABLE) || defined(GARMINTXT_ENABLE)
- case TNT_LEADER:
- lexer->state = NMEA_LEADER_END;
+ case AT_LEADER:
+#ifdef GARMINTXT_ENABLE
+ if (isdigit(c))
+ lexer->state = GARMINTXT_NUM1;
+#ifdef TNT_ENABLE
+ else
+#endif /* TNT_ENABLE */
+#endif /* GARMINTXT_ENABLE */
+#ifdef TNT_ENABLE
+ if ((c == 'B') || (c == 'C') || (c == 'F') || (c == 'I') || (c == 'W') || (c == 'X'))
+ lexer->state = TNT_CMDCHAR;
+ else
+ lexer->state = GROUND_STATE;
+#endif /* TNT_ENABLE */
break;
-#endif
+#ifdef GARMINTXT_ENABLE
+ case GARMINTXT_NUM1:
+ if (isdigit(c))
+ lexer->state = GARMINTXT_NUM2;
+ else
+ lexer->state = GROUND_STATE;
+ break;
+ case GARMINTXT_NUM2:
+ if (isdigit(c))
+ lexer->state = GARMINTXT_NUM3;
+ else
+ lexer->state = GROUND_STATE;
+ break;
+ case GARMINTXT_NUM3:
+ if (isdigit(c))
+ lexer->state = GARMINTXT_NUM4;
+ else
+ lexer->state = GROUND_STATE;
+ break;
+ case GARMINTXT_NUM4:
+ if (isdigit(c))
+ lexer->state = GARMINTXT_NUM5;
+ else
+ lexer->state = GROUND_STATE;
+ break;
+ case GARMINTXT_NUM5:
+ if (isdigit(c))
+ lexer->state = GARMINTXT_NUM6;
+ else
+ lexer->state = GROUND_STATE;
+ break;
+ case GARMINTXT_NUM6:
+ if (isdigit(c))
+ lexer->state = GARMINTXT_RECOGNIZED;
+ else
+ lexer->state = GROUND_STATE;
+ break;
+#endif /* GARMINTXT_ENABLE */
+#ifdef TNT_ENABLE
+ case TNT_CMDCHAR:
+ lexer->state = NMEA_LEADER_END;
+ break;
+#endif /* TNT_ENABLE */
+#endif /* TNT_ENABLE || GARMINTXT_ENABLE */
+#ifdef GARMINTXT_ENABLE
+ case GARMINTXT_RECOGNIZED: /* FALLTHROUGH */
+#endif /* GARMINTXT_ENABLE */
+#ifdef TNT_ENABLE
+ case TNT_RECOGNIZED: /* FALLTHROUGH */
+#endif /* TNT_ENABLE */
case NMEA_LEADER_END:
if (c == '\r')
lexer->state = NMEA_CR;
diff --git a/packet_states.h b/packet_states.h
index b3a0af95..2bfe9c78 100644
--- a/packet_states.h
+++ b/packet_states.h
@@ -65,10 +65,26 @@
#endif /* ZODIAC_ENABLE */
#if defined(TNT_ENABLE) || defined(GARMINTXT_ENABLE)
- TNT_LEADER, /* saw True North status leader '@' */
- /* Garmin Simple Text starts with @ leader */
+ AT_LEADER, /* saw True North status leader '@' */
+ /* Garmin Simple Text starts with @ leader */
#endif
+#ifdef TNT_ENABLE
+ TNT_CMDCHAR, /* one of: B C F I W X */
+ TNT_RECOGNIZED,
+#endif
+
+#ifdef GARMINTXT_ENABLE
+ GARMINTXT_NUM1, /* Garmin Simple Text starts with a YYMMDD date */
+ GARMINTXT_NUM2, /* Attempt to match that to reduce wrong sniffs */
+ GARMINTXT_NUM3,
+ GARMINTXT_NUM4,
+ GARMINTXT_NUM5,
+ GARMINTXT_NUM6,
+ GARMINTXT_RECOGNIZED,
+#endif
+
+
#ifdef EVERMORE_ENABLE
EVERMORE_LEADER_1, /* a DLE after having seen EverMore data */
EVERMORE_LEADER_2, /* seen opening STX of EverMore packet */