22#ifndef DETERMINISTICESPASYNCWEBSERVER_J2735_H
23#define DETERMINISTICESPASYNCWEBSERVER_J2735_H
49void uper_writer_init(UperWriter *w, uint8_t *buf,
size_t cap);
51size_t uper_writer_finish(UperWriter *w);
54void uper_put_bits(UperWriter *w, uint32_t value,
unsigned nbits);
56void uper_put_bool(UperWriter *w,
bool v);
58void uper_put_cint(UperWriter *w, int64_t value, int64_t lo, int64_t hi);
60void uper_reader_init(UperReader *r,
const uint8_t *buf,
size_t nbits);
62uint32_t uper_get_bits(UperReader *r,
unsigned nbits);
63bool uper_get_bool(UperReader *r);
65int64_t uper_get_cint(UperReader *r, int64_t lo, int64_t hi);
68unsigned uper_cint_bits(int64_t lo, int64_t hi);
89size_t detws_j2735_bsm_core_encode(
const J2735BsmCore *c, uint8_t *out,
size_t cap);
92bool detws_j2735_bsm_core_decode(
const uint8_t *in,
size_t len, J2735BsmCore *c);
95enum class J2735PhaseState : uint8_t
98 J2735_PHASE_STOP_THEN_PROCEED = 1,
99 J2735_PHASE_STOP_AND_REMAIN = 3,
100 J2735_PHASE_PERMISSIVE_MOVEMENT_ALLOWED = 5,
101 J2735_PHASE_PROTECTED_MOVEMENT_ALLOWED = 6,
102 J2735_PHASE_PERMISSIVE_CLEARANCE = 7,
103 J2735_PHASE_PROTECTED_CLEARANCE = 8,
104 J2735_PHASE_CAUTION_CONFLICTING_TRAFFIC = 9
108struct J2735MovementState
110 uint8_t signal_group;
112 uint16_t min_end_time;
113 uint16_t max_end_time;
125size_t detws_j2735_spat_encode(
const J2735MovementState *states,
size_t count, uint8_t *out,
size_t cap);
134bool detws_j2735_spat_decode(
const uint8_t *in,
size_t len, J2735MovementState *out_states,
size_t max_states,
147struct J2735MapIntersection
149 uint16_t intersection_id;
160size_t detws_j2735_map_encode(
const J2735MapIntersection *isect,
const J2735Lane *lanes,
size_t count, uint8_t *out,
166bool detws_j2735_map_decode(
const uint8_t *in,
size_t len, J2735MapIntersection *isect, J2735Lane *out_lanes,
167 size_t max_lanes,
size_t *out_count);
User-facing configuration for DeterministicESPAsyncWebServer.