29#ifndef PROTOCORE_MBUS_H
30#define PROTOCORE_MBUS_H
34#if PROTOCORE_ENABLE_MBUS
42#define MBUS_START_SHORT 0x10u
43#define MBUS_START_LONG 0x68u
44#define MBUS_STOP 0x16u
48#define MBUS_C_SND_NKE 0x40u
49#define MBUS_C_REQ_UD2 0x5Bu
50#define MBUS_C_REQ_UD1 0x5Au
51#define MBUS_C_SND_UD 0x53u
52#define MBUS_C_RSP_UD 0x08u
55#define MBUS_CI_DATA_SEND 0x51u
56#define MBUS_CI_SELECT 0x52u
57#define MBUS_CI_RSP_VARIABLE 0x72u
58#define MBUS_CI_RSP_FIXED 0x73u
60#define MBUS_MAX_DATA 252u
62#define MBUS_VAR_HEADER_LEN 12u
65#define MBUS_MEDIUM_OTHER 0x00u
66#define MBUS_MEDIUM_OIL 0x01u
67#define MBUS_MEDIUM_ELECTRICITY 0x02u
68#define MBUS_MEDIUM_GAS 0x03u
69#define MBUS_MEDIUM_HEAT_OUTLET 0x04u
70#define MBUS_MEDIUM_STEAM 0x05u
71#define MBUS_MEDIUM_WARM_WATER 0x06u
72#define MBUS_MEDIUM_WATER 0x07u
73#define MBUS_MEDIUM_HEAT_COST 0x08u
74#define MBUS_MEDIUM_HEAT_INLET 0x0Cu
75#define MBUS_MEDIUM_HEAT_COOLING 0x0Du
76#define MBUS_MEDIUM_COLD_WATER 0x16u
102 MBUS_DIF_INT16 = 0x2,
103 MBUS_DIF_INT24 = 0x3,
104 MBUS_DIF_INT32 = 0x4,
105 MBUS_DIF_REAL32 = 0x5,
106 MBUS_DIF_INT48 = 0x6,
107 MBUS_DIF_INT64 = 0x7,
108 MBUS_DIF_READOUT = 0x8,
113 MBUS_DIF_VARIABLE = 0xD,
114 MBUS_DIF_BCD12 = 0xE,
115 MBUS_DIF_SPECIAL = 0xF,
131 MBUS_UNIT_UNKNOWN = 0,
148 char manufacturer[4];
149 uint16_t manufacturer_raw;
191} MbusBuildSndNkeArgs;
200} MbusBuildReqUd2Args;
209} MbusBuildReqUd1Args;
240} MbusRecordValueIntArgs;
247} MbusRecordValueRealArgs;
263} MbusParseVarHeaderArgs;
312 MbusBuildAckArgs build_ack_args;
313 MbusBuildShortArgs build_short_args;
314 MbusBuildLongArgs build_long_args;
315 MbusBuildSndNkeArgs build_snd_nke_args;
316 MbusBuildReqUd2Args build_req_ud2_args;
317 MbusBuildReqUd1Args build_req_ud1_args;
318 MbusParseArgs parse_args;
319 MbusDifDataLenArgs dif_data_len_args;
320 MbusRecordNextArgs record_next_args;
321 MbusRecordValueIntArgs record_value_int_args;
322 MbusRecordValueRealArgs record_value_real_args;
323 MbusVifDecodeArgs vif_decode_args;
324 MbusParseVarHeaderArgs parse_var_header_args;
331extern MbusVars MbusV;
336 void (*
const build_ack)(uint8_t *work);
337 void (*
const build_short)(uint8_t *work);
338 void (*
const build_long)(uint8_t *work);
339 void (*
const build_snd_nke)(uint8_t *work);
340 void (*
const build_req_ud2)(uint8_t *work);
341 void (*
const build_req_ud1)(uint8_t *work);
342 void (*
const parse)(uint8_t *work);
343 void (*
const dif_data_len)(uint8_t *work);
344 void (*
const record_next)(uint8_t *work);
345 void (*
const record_value_int)(uint8_t *work);
346 void (*
const record_value_real)(uint8_t *work);
347 void (*
const vif_decode)(uint8_t *work);
348 void (*
const parse_var_header)(uint8_t *work);
353void protocore_mbus_build_ack(uint8_t *work);
354void protocore_mbus_build_short(uint8_t *work);
355void protocore_mbus_build_long(uint8_t *work);
356void protocore_mbus_build_snd_nke(uint8_t *work);
357void protocore_mbus_build_req_ud2(uint8_t *work);
358void protocore_mbus_build_req_ud1(uint8_t *work);
359void protocore_mbus_parse(uint8_t *work);
360void protocore_mbus_dif_data_len(uint8_t *work);
361void protocore_mbus_record_next(uint8_t *work);
362void protocore_mbus_record_value_int(uint8_t *work);
363void protocore_mbus_record_value_real(uint8_t *work);
364void protocore_mbus_vif_decode(uint8_t *work);
365void protocore_mbus_parse_var_header(uint8_t *work);
371static const MbusNs Mbus __attribute__((unused)) = {
372 .build_ack = protocore_mbus_build_ack,
373 .build_short = protocore_mbus_build_short,
374 .build_long = protocore_mbus_build_long,
375 .build_snd_nke = protocore_mbus_build_snd_nke,
376 .build_req_ud2 = protocore_mbus_build_req_ud2,
377 .build_req_ud1 = protocore_mbus_build_req_ud1,
378 .parse = protocore_mbus_parse,
379 .dif_data_len = protocore_mbus_dif_data_len,
380 .record_next = protocore_mbus_record_next,
381 .record_value_int = protocore_mbus_record_value_int,
382 .record_value_real = protocore_mbus_record_value_real,
383 .vif_decode = protocore_mbus_vif_decode,
384 .parse_var_header = protocore_mbus_parse_var_header,
PROTO_ENUM_PACKED
Application protocol spoken on a listener port or connection slot.
#define PROTOCORE_BEGIN_DECLS
Give a header's declarations C linkage, so their symbol names carry no parameter types.
_Bool proto_bool
The truth value.
#define PROTOCORE_END_DECLS