7#define CHECK(condition) \
10 fprintf(stderr, "%s:%d: %s\n", __FILE__, __LINE__, #condition); \
22 for (
size_t i = 0; i <
n; ++i) {
33 return feed(
p, (
const uint8_t*)s, strlen(s));
38static const char gga[] =
39 "$GPGGA,123519,4807.038,N,01131.000,E,1,08,0.9,545.4,M,46.9,M,,*47\r\n";
40static const char txt[] =
"$GNTXT,01,01,02,u-blox AG - www.u-blox.com*4E\r\n";
41static const uint8_t
ack[] = {0xB5, 0x62, 0x05, 0x01, 0x02,
42 0x00, 0x06, 0x8A, 0x98, 0xC1};
59 CHECK(
feed_str(&
p,
"$GNTXT,01,01,02,u-blox AG - www.u-blox.com*4e").nmea ==
66 char bad[
sizeof(
gga)];
67 memcpy(bad,
gga,
sizeof(
gga));
68 bad[strlen(bad) - 3] =
'8';
72 memcpy(bad,
gga,
sizeof(
gga));
78 for (
size_t i = 2; i <
sizeof(
ack); ++i) {
81 uint8_t bad[
sizeof(
ack)];
82 memcpy(bad,
ack,
sizeof(
ack));
93 static const uint8_t noise[] = {0xFF, 0x00,
'g',
'a',
'r', 0xB5,
'z',
94 '$',
'G',
'P',
'G',
'G',
'A',
','};
95 CHECK(
feed(&
p, noise,
sizeof(noise)).nmea == 0);
103 char longline[200] =
"$";
104 memset(longline + 1,
'A', 150);
105 strcat(longline,
"*00");
117 const uint8_t big[] = {0xB5, 0x62, 0x01, 0x07, 0xFF, 0xFF};
131 puts(
"gnss_frame: all tests passed");
gnss_frame_kind_t gnss_frame_feed(gnss_frame_parser_t *p, uint8_t byte)
void gnss_frame_init(gnss_frame_parser_t *parser)
*brief user defined string literal for JSON values *sa std::size_t n
static void test_overlong_and_binary_nmea(void)
static counts_t feed_str(gnss_frame_parser_t *p, const char *s)
static void test_wrong_nmea_checksum(void)
static void test_valid_frames(void)
static const uint8_t ack[]
static void test_lowercase_checksum(void)
static void test_corrupt_ubx(void)
static void test_ubx_length_limit(void)
static counts_t feed(gnss_frame_parser_t *p, const uint8_t *bytes, size_t n)
static void test_noise_then_frame(void)