17#define NX_MODBUS_ADU_MAX 256u
18#define NX_MODBUS_REGISTER_MAX 125u
57 bool (*
write)(
void*,
const uint8_t*, size_t, uint64_t deadline_us);
58 bool (*
drain)(
void*, uint64_t deadline_us);
139 uint64_t arrival_us);
bool nx_modbus_rtu_init(nx_modbus_rtu_t *server, const nx_modbus_config_t *config)
Initialize an unused or fully quiesced protocol instance.
#define NX_MODBUS_ADU_MAX
void nx_modbus_rtu_rx_error(nx_modbus_rtu_t *server, uint64_t now_us)
Discard an errored or overrun receive frame.
bool nx_modbus_rtu_feed(nx_modbus_rtu_t *server, uint8_t byte, uint64_t arrival_us)
Feed an externally timestamped UART byte.
#define NX_MODBUS_REGISTER_MAX
uint16_t nx_modbus_crc16(const uint8_t *bytes, size_t length)
Compute standard Modbus CRC16 over caller bytes.
nx_modbus_register_result_t
@ NX_MODBUS_DEVICE_FAILURE
@ NX_MODBUS_ILLEGAL_ADDRESS
@ NX_MODBUS_ILLEGAL_VALUE
bool nx_modbus_rtu_stop(nx_modbus_rtu_t *server)
Settle the port before reclaiming protocol storage.
bool nx_modbus_rtu_recover(nx_modbus_rtu_t *server)
Settle retained TX then restore receive silence acquisition.
bool nx_modbus_rtu_poll(nx_modbus_rtu_t *server, uint64_t now_us)
Service RTU silence and bounded synchronous RS485 response.
nx_modbus_registers_t registers
uint32_t abort_timeout_us
nx_modbus_rs485_port_t port
uint8_t bits_per_character
nx_modbus_register_result_t(* read)(void *, uint16_t, uint16_t, uint16_t *)
nx_modbus_register_result_t(* write_atomic)(void *, uint16_t, uint16_t, const uint16_t *)
nx_modbus_register_result_t(* authorize_write)(void *, uint16_t, uint16_t, const uint16_t *)
bool(* write)(void *, const uint8_t *, size_t, uint64_t deadline_us)
bool(* direction)(void *, bool transmit)
bool(* drain)(void *, uint64_t deadline_us)
uint64_t(* now_us)(void *)
bool(* abort_and_settle)(void *, uint64_t deadline_us)
uint16_t values[NX_MODBUS_REGISTER_MAX]
nx_modbus_config_t config
uint8_t rx[NX_MODBUS_ADU_MAX]
uint8_t tx[NX_MODBUS_ADU_MAX]
nx_modbus_counters_t counters
nx_modbus_link_state_t state