STAR
Cal STAR — firmware, DAQ server, and engine design
Loading...
Searching...
No Matches
gnss_frame.h
Go to the documentation of this file.
1
#ifndef STAR_GNSS_FRAME_H
2
#define STAR_GNSS_FRAME_H
3
4
/*
5
* Byte-at-a-time validator for what a u-blox M10 sends on its UART:
6
*
7
* NMEA $<body>*<HH> HH = XOR of every body byte (between $ and *)
8
* UBX B5 62 <class> <id> <len16 LE> <payload> <CK_A> <CK_B>
9
* CK = 8-bit Fletcher over class..payload
10
*
11
* Portable (no HAL): the board feeds it UART bytes, the host tests feed it
12
* strings. It only proves a well-formed frame arrived, not a position fix.
13
*/
14
15
#include <stdint.h>
16
17
#ifdef __cplusplus
18
extern
"C"
{
19
#endif
20
21
typedef
enum
{
22
GNSS_FRAME_NONE
= 0,
/* no complete valid frame ended at this byte */
23
GNSS_FRAME_NMEA
,
24
GNSS_FRAME_UBX
25
}
gnss_frame_kind_t
;
26
27
#define GNSS_FRAME_NMEA_MAX_BODY 96U
/* NMEA 0183 says 82 incl. $ and CRLF */
28
#define GNSS_FRAME_UBX_MAX_PAYLOAD 1024U
29
/* NAV-PVT is 92; NAV-SAT is 8 + 12 per satellite, so 488 holds 40. */
30
#define GNSS_FRAME_UBX_CAPTURE 488U
31
32
typedef
struct
{
33
uint8_t
state
;
34
uint8_t
xor_sum
;
35
uint8_t
ck_a
;
36
uint8_t
ck_b
;
37
uint8_t
hex_hi
;
38
uint16_t
count
;
39
uint16_t
length
;
40
uint32_t
rejected
;
/* frames that started but failed a check */
41
/* Last UBX frame: valid when gnss_frame_feed() returns GNSS_FRAME_UBX.
42
* Payloads longer than GNSS_FRAME_UBX_CAPTURE keep only the first bytes
43
* (ubx_len says the real length). */
44
uint8_t
ubx_class
,
ubx_id
;
45
uint16_t
ubx_len
;
46
uint8_t
ubx_payload
[
GNSS_FRAME_UBX_CAPTURE
];
47
}
gnss_frame_parser_t
;
48
49
void
gnss_frame_init
(
gnss_frame_parser_t
*
parser
);
50
gnss_frame_kind_t
gnss_frame_feed
(
gnss_frame_parser_t
*
parser
, uint8_t
byte
);
51
52
#ifdef __cplusplus
53
}
54
#endif
55
#endif
parser
Definition
toml.hpp:13509
gnss_frame_kind_t
gnss_frame_kind_t
Definition
gnss_frame.h:21
GNSS_FRAME_NONE
@ GNSS_FRAME_NONE
Definition
gnss_frame.h:22
GNSS_FRAME_UBX
@ GNSS_FRAME_UBX
Definition
gnss_frame.h:24
GNSS_FRAME_NMEA
@ GNSS_FRAME_NMEA
Definition
gnss_frame.h:23
GNSS_FRAME_UBX_CAPTURE
#define GNSS_FRAME_UBX_CAPTURE
Definition
gnss_frame.h:30
gnss_frame_feed
gnss_frame_kind_t gnss_frame_feed(gnss_frame_parser_t *parser, uint8_t byte)
Definition
gnss_frame.c:57
gnss_frame_init
void gnss_frame_init(gnss_frame_parser_t *parser)
Definition
gnss_frame.c:35
gnss_frame_parser_t
Definition
gnss_frame.h:32
gnss_frame_parser_t::rejected
uint32_t rejected
Definition
gnss_frame.h:40
gnss_frame_parser_t::length
uint16_t length
Definition
gnss_frame.h:39
gnss_frame_parser_t::ubx_id
uint8_t ubx_id
Definition
gnss_frame.h:44
gnss_frame_parser_t::ubx_class
uint8_t ubx_class
Definition
gnss_frame.h:44
gnss_frame_parser_t::ck_b
uint8_t ck_b
Definition
gnss_frame.h:36
gnss_frame_parser_t::ck_a
uint8_t ck_a
Definition
gnss_frame.h:35
gnss_frame_parser_t::state
uint8_t state
Definition
gnss_frame.h:33
gnss_frame_parser_t::ubx_payload
uint8_t ubx_payload[GNSS_FRAME_UBX_CAPTURE]
Definition
gnss_frame.h:46
gnss_frame_parser_t::xor_sum
uint8_t xor_sum
Definition
gnss_frame.h:34
gnss_frame_parser_t::hex_hi
uint8_t hex_hi
Definition
gnss_frame.h:37
gnss_frame_parser_t::count
uint16_t count
Definition
gnss_frame.h:38
gnss_frame_parser_t::ubx_len
uint16_t ubx_len
Definition
gnss_frame.h:45
firmware
Flight_Computer
src
chips
gnss_frame.h
Generated by
1.15.0