4#ifndef PROTOCORE_MODBUS_MASTER_H
5#define PROTOCORE_MODBUS_MASTER_H
39 size_t (*build_read)(uint8_t *, uint8_t, uint16_t, uint8_t, uint16_t, uint16_t, uint8_t *, size_t);
40 int (*parse_response)(uint8_t *,
const uint8_t *, size_t, uint16_t *, size_t, uint8_t *);
41 size_t (*build_read_bits)(uint8_t *, uint8_t, uint16_t, uint8_t, uint16_t, uint16_t, uint8_t *, size_t);
42 int (*parse_read_bits_response)(uint8_t *,
const uint8_t *, size_t, uint16_t, uint8_t *, size_t, uint8_t *);
43 size_t (*build_write_single_coil)(uint8_t *, uint16_t, uint8_t, uint16_t,
proto_bool, uint8_t *, size_t);
44 size_t (*build_write_multiple_coils)(uint8_t *, uint16_t, uint8_t, uint16_t,
const uint8_t *, uint16_t, uint8_t *,
46 size_t (*build_write_single)(uint8_t *, uint16_t, uint8_t, uint16_t, uint16_t, uint8_t *, size_t);
47 size_t (*build_write_multiple)(uint8_t *, uint16_t, uint8_t, uint16_t,
const uint16_t *, uint16_t, uint8_t *,
49 int (*parse_write_response)(uint8_t *,
const uint8_t *, size_t, uint16_t *, uint8_t *);
50 size_t (*build_mask_write)(uint8_t *, uint16_t, uint8_t, uint16_t, uint16_t, uint16_t, uint8_t *, size_t);
51 size_t (*build_read_write_multiple)(uint8_t *, uint16_t, uint8_t, uint16_t, uint16_t, uint16_t,
const uint16_t *,
52 uint16_t, uint8_t *, size_t);
53 int (*parse_mask_write_response)(uint8_t *,
const uint8_t *, size_t, uint16_t *, uint16_t *, uint16_t *, uint8_t *);
56 build_write_single_coil, build_write_multiple_coils, build_write_single, build_write_multiple,
57 parse_write_response, build_mask_write, build_read_write_multiple, parse_mask_write_response);
72 uint16_t count, uint8_t *out,
size_t cap);
84 size_t max_regs, uint8_t *exception_out);
98 uint16_t count, uint8_t *out,
size_t cap);
111 uint8_t *bits_out,
size_t max_bits, uint8_t *exception_out);
138 const uint8_t *bits, uint16_t count, uint8_t *out,
152 uint16_t value, uint8_t *out,
size_t cap);
166 const uint16_t *values, uint16_t count, uint8_t *out,
size_t cap);
177 uint8_t *exception_out);
191 uint16_t and_mask, uint16_t or_mask, uint8_t *out,
size_t cap);
207 uint16_t read_start, uint16_t read_count, uint16_t write_start,
208 const uint16_t *values, uint16_t write_count, uint8_t *out,
222 uint16_t *and_out, uint16_t *or_out, uint8_t *exception_out);
int protocore_modbus_master_parse_mask_write_response(uint8_t *work, const uint8_t *adu, size_t len, uint16_t *addr_out, uint16_t *and_out, uint16_t *or_out, uint8_t *exception_out)
Parse a Mask Write Register response (FC 0x16), which echoes the .
size_t protocore_modbus_master_build_write_single_coil(uint8_t *work, uint16_t txid, uint8_t unit, uint16_t addr, proto_bool on, uint8_t *out, size_t cap)
Build a Write Single Coil request ADU (FC 0x05).
size_t protocore_modbus_master_build_write_multiple(uint8_t *work, uint16_t txid, uint8_t unit, uint16_t start, const uint16_t *values, uint16_t count, uint8_t *out, size_t cap)
Build a Write Multiple Registers request ADU (FC 0x10).
size_t protocore_modbus_master_build_read(uint8_t *work, uint8_t fc, uint16_t txid, uint8_t unit, uint16_t start, uint16_t count, uint8_t *out, size_t cap)
Build a read-request ADU (FC 0x03 holding or 0x04 input registers).
int protocore_modbus_master_parse_write_response(uint8_t *work, const uint8_t *adu, size_t len, uint16_t *addr_out, uint8_t *exception_out)
Parse a write-response ADU (FC 0x05, 0x06, 0x0F, or 0x10). A normal .
size_t protocore_modbus_master_build_mask_write(uint8_t *work, uint16_t txid, uint8_t unit, uint16_t addr, uint16_t and_mask, uint16_t or_mask, uint8_t *out, size_t cap)
Build a Mask Write Register request ADU (FC 0x16). The slave .
size_t protocore_modbus_master_build_read_write_multiple(uint8_t *work, uint16_t txid, uint8_t unit, uint16_t read_start, uint16_t read_count, uint16_t write_start, const uint16_t *values, uint16_t write_count, uint8_t *out, size_t cap)
Build a Read/Write Multiple Registers request ADU (FC 0x17): write.
size_t protocore_modbus_master_build_write_multiple_coils(uint8_t *work, uint16_t txid, uint8_t unit, uint16_t start, const uint8_t *bits, uint16_t count, uint8_t *out, size_t cap)
Build a Write Multiple Coils request ADU (FC 0x0F).
size_t protocore_modbus_master_build_read_bits(uint8_t *work, uint8_t fc, uint16_t txid, uint8_t unit, uint16_t start, uint16_t count, uint8_t *out, size_t cap)
Build a read-bits request ADU (FC 0x01 coils or 0x02 discrete .
int protocore_modbus_master_parse_read_bits_response(uint8_t *work, const uint8_t *adu, size_t len, uint16_t count, uint8_t *bits_out, size_t max_bits, uint8_t *exception_out)
Parse a read-bits response ADU (FC 0x01 / 0x02) into one byte (0/1).
PROTOCORE_NS ModbusMasterNs ModbusMaster PROTOCORE_UNUSED
Module namespace.
int protocore_modbus_master_parse_response(uint8_t *work, const uint8_t *adu, size_t len, uint16_t *regs_out, size_t max_regs, uint8_t *exception_out)
Parse a read-response ADU into register values.
size_t protocore_modbus_master_build_write_single(uint8_t *work, uint16_t txid, uint8_t unit, uint16_t addr, uint16_t value, uint8_t *out, size_t cap)
Build a Write Single Register request ADU (FC 0x06).
#define PROTOCORE_NS_LAYOUT(T,...)
Pin every dispatch slot of a table that is nothing but function pointers.
#define PROTOCORE_NS
Storage for a dispatch table. The const is load bearing.
Dispatch table. Addressed by offset, so the layout is asserted below.
size_t(* build_read)(uint8_t *, uint8_t, uint16_t, uint8_t, uint16_t, uint16_t, uint8_t *, size_t)
#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