27#ifndef DETERMINISTICESPASYNCWEBSERVER_RTCM3_H
28#define DETERMINISTICESPASYNCWEBSERVER_RTCM3_H
32#if DETWS_ENABLE_NTRIP_CASTER
37#define RTCM3_PREAMBLE 0xD3u
38#define RTCM3_HDR_LEN 3
39#define RTCM3_CRC_LEN 3
40#define RTCM3_MAX_PAYLOAD 1023
41#define RTCM3_MAX_FRAME (RTCM3_HDR_LEN + RTCM3_MAX_PAYLOAD + RTCM3_CRC_LEN)
48uint32_t rtcm3_crc24q(
const uint8_t *data,
size_t len);
64void rtcm_bw_init(RtcmBitWriter *w, uint8_t *buf,
size_t cap);
66void rtcm_bw_u(RtcmBitWriter *w, uint64_t val, uint8_t nbits);
68void rtcm_bw_s(RtcmBitWriter *w, int64_t val, uint8_t nbits);
71uint64_t rtcm_br_u(
const uint8_t *buf,
size_t *pos, uint8_t nbits);
73int64_t rtcm_br_s(
const uint8_t *buf,
size_t *pos, uint8_t nbits);
83 const uint8_t *payload;
95size_t rtcm3_frame_parse(
const uint8_t *buf,
size_t len, Rtcm3Frame *out);
98size_t rtcm3_sync(
const uint8_t *buf,
size_t len);
104size_t rtcm3_frame_build(uint8_t *out,
size_t cap,
const uint8_t *payload, uint16_t payload_len);
111struct Rtcm3StationArp
117 uint16_t antenna_height_01mm;
122size_t rtcm3_build_1005(uint8_t *out,
size_t cap, uint16_t station_id, int64_t ecef_x_01mm, int64_t ecef_y_01mm,
123 int64_t ecef_z_01mm);
126size_t rtcm3_build_1006(uint8_t *out,
size_t cap, uint16_t station_id, int64_t ecef_x_01mm, int64_t ecef_y_01mm,
127 int64_t ecef_z_01mm, uint16_t antenna_height_01mm);
133bool rtcm3_parse_1005(
const uint8_t *payload, uint16_t payload_len, Rtcm3StationArp *out);
User-facing configuration for DeterministicESPAsyncWebServer.