28#ifndef DETERMINISTICESPASYNCWEBSERVER_MBUS_H
29#define DETERMINISTICESPASYNCWEBSERVER_MBUS_H
38#define MBUS_START_SHORT 0x10u
39#define MBUS_START_LONG 0x68u
40#define MBUS_STOP 0x16u
44#define MBUS_C_SND_NKE 0x40u
45#define MBUS_C_REQ_UD2 0x5Bu
46#define MBUS_C_REQ_UD1 0x5Au
47#define MBUS_C_SND_UD 0x53u
48#define MBUS_C_RSP_UD 0x08u
51#define MBUS_CI_DATA_SEND 0x51u
52#define MBUS_CI_SELECT 0x52u
53#define MBUS_CI_RSP_VARIABLE 0x72u
54#define MBUS_CI_RSP_FIXED 0x73u
56#define MBUS_MAX_DATA 252u
59enum class MbusFrameType : uint8_t
79enum class MbusDifCoding : uint8_t
86 MBUS_DIF_REAL32 = 0x5,
89 MBUS_DIF_READOUT = 0x8,
94 MBUS_DIF_VARIABLE = 0xD,
96 MBUS_DIF_SPECIAL = 0xF,
112size_t mbus_build_ack(uint8_t *buf,
size_t cap);
115size_t mbus_build_short(uint8_t *buf,
size_t cap, uint8_t c, uint8_t a);
118size_t mbus_build_long(uint8_t *buf,
size_t cap, uint8_t c, uint8_t a, uint8_t ci,
const uint8_t *data,
122size_t mbus_build_snd_nke(uint8_t *buf,
size_t cap, uint8_t a);
125size_t mbus_build_req_ud2(uint8_t *buf,
size_t cap, uint8_t a,
bool fcb);
133bool mbus_parse(
const uint8_t *buf,
size_t len, MbusFrame *out,
size_t *consumed);
138uint8_t mbus_dif_data_len(uint8_t coding);
145bool mbus_record_next(
const uint8_t *body,
size_t len,
size_t *pos, MbusRecord *out);
User-facing configuration for DeterministicESPAsyncWebServer.