21#ifndef PROTOCORE_MODBUS_MASTER_H
22#define PROTOCORE_MODBUS_MASTER_H
28#if PC_ENABLE_MODBUS_MASTER
42size_t pc_modbus_build_read(uint8_t fc, uint16_t txid, uint8_t unit, uint16_t start, uint16_t count, uint8_t *out,
56int pc_modbus_parse_response(
const uint8_t *adu,
size_t len, uint16_t *regs_out,
size_t max_regs,
57 uint8_t *exception_out);
71size_t pc_modbus_build_read_bits(uint8_t fc, uint16_t txid, uint8_t unit, uint16_t start, uint16_t count, uint8_t *out,
86int pc_modbus_parse_read_bits_response(
const uint8_t *adu,
size_t len, uint16_t count, uint8_t *bits_out,
87 size_t max_bits, uint8_t *exception_out);
96size_t pc_modbus_build_write_single_coil(uint16_t txid, uint8_t unit, uint16_t addr,
bool on, uint8_t *out,
size_t cap);
106size_t pc_modbus_build_write_multiple_coils(uint16_t txid, uint8_t unit, uint16_t start,
const uint8_t *bits,
107 uint16_t count, uint8_t *out,
size_t cap);
120size_t pc_modbus_build_write_single(uint16_t txid, uint8_t unit, uint16_t addr, uint16_t value, uint8_t *out,
135size_t pc_modbus_build_write_multiple(uint16_t txid, uint8_t unit, uint16_t start,
const uint16_t *values,
136 uint16_t count, uint8_t *out,
size_t cap);
150int pc_modbus_parse_write_response(
const uint8_t *adu,
size_t len, uint16_t *addr_out, uint8_t *exception_out);
160size_t pc_modbus_build_mask_write(uint16_t txid, uint8_t unit, uint16_t addr, uint16_t and_mask, uint16_t or_mask,
161 uint8_t *out,
size_t cap);
171size_t pc_modbus_build_read_write_multiple(uint16_t txid, uint8_t unit, uint16_t read_start, uint16_t read_count,
172 uint16_t write_start,
const uint16_t *values, uint16_t write_count,
173 uint8_t *out,
size_t cap);
181int pc_modbus_parse_mask_write_response(
const uint8_t *adu,
size_t len, uint16_t *addr_out, uint16_t *and_out,
182 uint16_t *or_out, uint8_t *exception_out);
User-facing configuration for ProtoCore.