diff options
-rw-r--r-- | packet.c | 69 | ||||
-rw-r--r-- | packet_states.h | 20 |
2 files changed, 83 insertions, 6 deletions
@@ -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 */ |