32#ifndef DETERMINISTICESPASYNCWEBSERVER_MODBUS_H
33#define DETERMINISTICESPASYNCWEBSERVER_MODBUS_H
39#if DETWS_ENABLE_MODBUS
42enum class ModbusFunction : uint8_t
44 MODBUS_FC_READ_COILS = 0x01,
45 MODBUS_FC_READ_DISCRETE_INPUTS = 0x02,
46 MODBUS_FC_READ_HOLDING_REGS = 0x03,
47 MODBUS_FC_READ_INPUT_REGS = 0x04,
48 MODBUS_FC_WRITE_SINGLE_COIL = 0x05,
49 MODBUS_FC_WRITE_SINGLE_REG = 0x06,
50 MODBUS_FC_WRITE_MULTIPLE_COILS = 0x0F,
51 MODBUS_FC_WRITE_MULTIPLE_REGS = 0x10,
55enum class ModbusException : uint8_t
57 MODBUS_EX_ILLEGAL_FUNCTION = 0x01,
58 MODBUS_EX_ILLEGAL_DATA_ADDRESS = 0x02,
59 MODBUS_EX_ILLEGAL_DATA_VALUE = 0x03,
60 MODBUS_EX_SERVER_FAILURE = 0x04,
64#define MODBUS_ADU_MAX 260
73typedef void (*ModbusWriteCb)(uint8_t fc, uint16_t start, uint16_t count);
80void modbus_server_init();
83void modbus_on_write(ModbusWriteCb cb);
85bool modbus_get_coil(uint16_t addr);
86void modbus_set_coil(uint16_t addr,
bool on);
87bool modbus_get_discrete_input(uint16_t addr);
88void modbus_set_discrete_input(uint16_t addr,
bool on);
89uint16_t modbus_get_holding_reg(uint16_t addr);
90void modbus_set_holding_reg(uint16_t addr, uint16_t value);
91uint16_t modbus_get_input_reg(uint16_t addr);
92void modbus_set_input_reg(uint16_t addr, uint16_t value);
109size_t modbus_process_adu(
const uint8_t *req,
size_t req_len, uint8_t *resp,
size_t resp_cap);
111#if DETWS_ENABLE_MODBUS_RTU
123size_t modbus_rtu_process_adu(
const uint8_t *req,
size_t req_len, uint8_t *resp,
size_t resp_cap, uint8_t my_addr);
131void modbus_rx(uint8_t slot);
User-facing configuration for DeterministicESPAsyncWebServer.
Per-protocol connection event/poll callbacks (Layer 5 dispatch vtable).