32#ifndef PROTOCORE_MODBUS_H
33#define PROTOCORE_MODBUS_H
37#if PROTOCORE_ENABLE_MODBUS
46#define MODBUS_ADU_MAX 260
51 MODBUS_FC_READ_COILS = 0x01,
52 MODBUS_FC_READ_DISCRETE_INPUTS = 0x02,
53 MODBUS_FC_READ_HOLDING_REGS = 0x03,
54 MODBUS_FC_READ_INPUT_REGS = 0x04,
55 MODBUS_FC_WRITE_SINGLE_COIL = 0x05,
56 MODBUS_FC_WRITE_SINGLE_REG = 0x06,
57 MODBUS_FC_WRITE_MULTIPLE_COILS = 0x0F,
58 MODBUS_FC_WRITE_MULTIPLE_REGS = 0x10,
59 MODBUS_FC_MASK_WRITE_REG = 0x16,
60 MODBUS_FC_READ_WRITE_MULTIPLE_REGS = 0x17,
66 MODBUS_EX_ILLEGAL_FUNCTION = 0x01,
67 MODBUS_EX_ILLEGAL_DATA_ADDRESS = 0x02,
68 MODBUS_EX_ILLEGAL_DATA_VALUE = 0x03,
69 MODBUS_EX_SERVER_FAILURE = 0x04,
79typedef void (*ModbusWriteCb)(uint8_t fc, uint16_t start, uint16_t count);
104} ModbusGetDiscreteInputArgs;
111} ModbusSetDiscreteInputArgs;
117} ModbusGetHoldingRegArgs;
124} ModbusSetHoldingRegArgs;
130} ModbusGetInputRegArgs;
137} ModbusSetInputRegArgs;
145 size_t protocore_resp_cap;
146} ModbusProcessAduArgs;
154 size_t protocore_resp_cap;
156} ModbusRtuProcessAduArgs;
211 ModbusOnWriteArgs on_write_args;
212 ModbusGetCoilArgs get_coil_args;
213 ModbusSetCoilArgs set_coil_args;
214 ModbusGetDiscreteInputArgs get_discrete_input_args;
215 ModbusSetDiscreteInputArgs set_discrete_input_args;
216 ModbusGetHoldingRegArgs get_holding_reg_args;
217 ModbusSetHoldingRegArgs set_holding_reg_args;
218 ModbusGetInputRegArgs get_input_reg_args;
219 ModbusSetInputRegArgs set_input_reg_args;
220 ModbusProcessAduArgs process_adu_args;
221 ModbusRtuProcessAduArgs rtu_process_adu_args;
222 ModbusRxArgs rx_args;
230extern ModbusVars ModbusV;
235 void (*
const server_init)(uint8_t *work);
236 void (*
const on_write)(uint8_t *work);
237 void (*
const get_coil)(uint8_t *work);
238 void (*
const set_coil)(uint8_t *work);
239 void (*
const get_discrete_input)(uint8_t *work);
240 void (*
const set_discrete_input)(uint8_t *work);
241 void (*
const get_holding_reg)(uint8_t *work);
242 void (*
const set_holding_reg)(uint8_t *work);
243 void (*
const get_input_reg)(uint8_t *work);
244 void (*
const set_input_reg)(uint8_t *work);
245 void (*
const process_adu)(uint8_t *work);
246 void (*
const rtu_process_adu)(uint8_t *work);
247 void (*
const rx)(uint8_t *work);
248 void (*
const handler)(uint8_t *work);
253void protocore_modbus_server_init(uint8_t *work);
254void protocore_modbus_on_write(uint8_t *work);
255void protocore_modbus_get_coil(uint8_t *work);
256void protocore_modbus_set_coil(uint8_t *work);
257void protocore_modbus_get_discrete_input(uint8_t *work);
258void protocore_modbus_set_discrete_input(uint8_t *work);
259void protocore_modbus_get_holding_reg(uint8_t *work);
260void protocore_modbus_set_holding_reg(uint8_t *work);
261void protocore_modbus_get_input_reg(uint8_t *work);
262void protocore_modbus_set_input_reg(uint8_t *work);
263void protocore_modbus_process_adu(uint8_t *work);
264void protocore_modbus_rtu_process_adu(uint8_t *work);
265void protocore_modbus_rx(uint8_t *work);
266void protocore_modbus_handler(uint8_t *work);
272static const ModbusNs Modbus __attribute__((unused)) = {
273 .server_init = protocore_modbus_server_init,
274 .on_write = protocore_modbus_on_write,
275 .get_coil = protocore_modbus_get_coil,
276 .set_coil = protocore_modbus_set_coil,
277 .get_discrete_input = protocore_modbus_get_discrete_input,
278 .set_discrete_input = protocore_modbus_set_discrete_input,
279 .get_holding_reg = protocore_modbus_get_holding_reg,
280 .set_holding_reg = protocore_modbus_set_holding_reg,
281 .get_input_reg = protocore_modbus_get_input_reg,
282 .set_input_reg = protocore_modbus_set_input_reg,
283 .process_adu = protocore_modbus_process_adu,
284 .rtu_process_adu = protocore_modbus_rtu_process_adu,
285 .rx = protocore_modbus_rx,
286 .handler = protocore_modbus_handler,
298uint8_t *protocore_modbus_span(
void);
PROTO_ENUM_PACKED
Application protocol spoken on a listener port or connection slot.
Per-protocol connection event/poll callbacks (the server's dispatch vtable).
#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