23 switch ((key >> 28) & 7U) {
40 if (len < 4 ||
p[0] != 0 || !(
p[1] & 1U)) {
44 uint32_t new_baud = 0;
46 for (uint16_t
o = 4;
o + 4 <= len;) {
47 uint32_t key = (uint32_t)
p[
o] | (uint32_t)
p[
o + 1] << 8 |
48 (uint32_t)
p[
o + 2] << 16 | (uint32_t)
p[
o + 3] << 24;
50 if (size < 0 || o + 4 + size > len) {
55 for (
int k = 0; k < size && k < 4; ++k)
56 v |= (uint32_t)
p[
o + 4 + k] << (8 * k);
81 o = (uint16_t)(
o + 4 + size);
97static void module_rx(
void* ctx,
const uint8_t* bytes, uint16_t len) {
105 for (uint16_t i = 0; i < len; ++i) {
119 memset(f, 0,
sizeof(*f));
143 memset(&v, 0,
sizeof(v));
150 uint32_t y = (uint32_t)(x); \
152 p[o + 1] = (uint8_t)(y >> 8); \
153 p[o + 2] = (uint8_t)(y >> 16); \
154 p[o + 3] = (uint8_t)(y >> 24); \
181 static const char gga[] =
182 "$GPGGA,123519,4807.038,N,01131.000,E,1,08,0.9,545.4,M,46.9,M,,"
196 memset(out, 0xF0,
n);
void fake_gnss_power_cycle(fake_gnss_t *f, uint32_t now_us)
static void queue(fake_gnss_t *f, const uint8_t *b, size_t n)
static int value_size(uint32_t key)
size_t fake_gnss_emit(fake_gnss_t *f, uint32_t now_us, uint8_t *out, size_t cap)
static void module_rx(void *ctx, const uint8_t *bytes, uint16_t len)
static void pvt(fake_gnss_t *f, uint32_t t)
gnss_io_t fake_gnss_io(fake_gnss_t *f)
static void on_valset(fake_gnss_t *f, const uint8_t *p, uint16_t len)
void fake_gnss_init(fake_gnss_t *f, uint32_t baud, fake_gnss_truth_t truth)
static void set_baud(void *ctx, uint32_t baud)
void(* fake_gnss_truth_t)(uint32_t t_us, ubx_pvt_t *out)
gnss_frame_kind_t gnss_frame_feed(gnss_frame_parser_t *p, uint8_t byte)
void gnss_frame_init(gnss_frame_parser_t *parser)
static void set_baud(void *ctx, uint32_t baud)
static const idle_config_t config
*brief create JSON pointer *sa reference_tokens const string_t const string_t & b
*brief user defined string literal for JSON values *sa std::size_t n
uint8_t ubx_payload[GNSS_FRAME_UBX_CAPTURE]
static std::vector< uint8_t > frame(uint8_t hi, uint8_t lo, size_t payload_len, uint8_t fill)
One wire packet: len(4, LE) then len bytes of body, where the first 4 body bytes are ty/packet_id(2)/...
static void truth(uint32_t t, ubx_pvt_t *v)
static const uint8_t ack[]
size_t ubx_frame(uint8_t *out, size_t cap, uint8_t cls, uint8_t id, const uint8_t *payload, uint16_t len)
#define UBX_KEY_UART1OUTPROT_NMEA
#define UBX_ID_CFG_VALSET
#define UBX_KEY_UART1_BAUDRATE
#define UBX_KEY_NAVSPG_DYNMODEL
#define UBX_KEY_MSGOUT_NAV_PVT_UART1
#define UBX_KEY_RATE_MEAS