36#ifndef ZEPHYR_INCLUDE_MODBUS_MODBUS_H_
37#define ZEPHYR_INCLUDE_MODBUS_MODBUS_H_
46#define MODBUS_MBAP_LENGTH 7
48#define MODBUS_MBAP_AND_FC_LENGTH (MODBUS_MBAP_LENGTH + 1)
54#define MODBUS_EXC_NONE 0
56#define MODBUS_EXC_ILLEGAL_FC 1
58#define MODBUS_EXC_ILLEGAL_DATA_ADDR 2
60#define MODBUS_EXC_ILLEGAL_DATA_VAL 3
62#define MODBUS_EXC_SERVER_DEVICE_FAILURE 4
64#define MODBUS_EXC_ACK 5
66#define MODBUS_EXC_SERVER_DEVICE_BUSY 6
68#define MODBUS_EXC_MEM_PARITY_ERROR 8
70#define MODBUS_EXC_GW_PATH_UNAVAILABLE 10
72#define MODBUS_EXC_GW_TARGET_FAILED_TO_RESP 11
223 const bool coil_state);
338 float *
const reg_buf,
361 float *
const reg_buf,
443 void *
const user_data);
449struct modbus_custom_fc {
461#define MODBUS_CUSTOM_FC_DEFINE(name, user_cb, user_fc, userdata) \
462 static struct modbus_custom_fc modbus_cfg_##name = { \
464 .user_data = userdata, \
466 .excep_code = MODBUS_EXC_NONE, \
Main header file for UART driver API.
int modbus_read_coils(const int iface, const uint8_t unit_id, const uint16_t start_addr, uint8_t *const coil_tbl, const uint16_t num_coils)
Coil read (FC01).
bool(* modbus_custom_cb_t)(const int iface, const struct modbus_adu *const rx_adu, struct modbus_adu *const tx_adu, uint8_t *const excep_code, void *const user_data)
Custom function code handler function signature.
Definition modbus.h:439
int modbus_disable(const uint8_t iface)
Disable Modbus Interface.
void modbus_raw_get_header(struct modbus_adu *adu, const uint8_t *header)
Get MBAP header from a buffer.
modbus_mode
Modbus interface mode.
Definition modbus.h:472
int modbus_read_input_regs(const int iface, const uint8_t unit_id, const uint16_t start_addr, uint16_t *const reg_buf, const uint16_t num_regs)
Read input registers (FC04).
int modbus_raw_submit_rx(const int iface, const struct modbus_adu *adu)
Submit raw ADU.
int(* modbus_raw_cb_t)(const int iface, const struct modbus_adu *adu, void *user_data)
ADU raw callback function signature.
Definition modbus.h:415
int modbus_write_holding_regs_fp(const int iface, const uint8_t unit_id, const uint16_t start_addr, float *const reg_buf, const uint16_t num_regs)
Write floating-point holding registers (FC16).
int modbus_raw_backend_txn(const int iface, struct modbus_adu *adu)
Use interface as backend to send and receive ADU.
int modbus_read_holding_regs(const int iface, const uint8_t unit_id, const uint16_t start_addr, uint16_t *const reg_buf, const uint16_t num_regs)
Read holding registers (FC03).
void modbus_raw_put_header(const struct modbus_adu *adu, uint8_t *header)
Put MBAP header into a buffer.
int modbus_read_dinputs(const int iface, const uint8_t unit_id, const uint16_t start_addr, uint8_t *const di_tbl, const uint16_t num_di)
Read discrete inputs (FC02).
int modbus_init_client(const int iface, struct modbus_iface_param param)
Configure Modbus Interface as raw ADU client.
int modbus_read_holding_regs_fp(const int iface, const uint8_t unit_id, const uint16_t start_addr, float *const reg_buf, const uint16_t num_regs)
Read floating-point holding registers (FC03).
int modbus_iface_get_by_name(const char *iface_name)
Get Modbus interface index according to interface name.
int modbus_write_coils(const int iface, const uint8_t unit_id, const uint16_t start_addr, uint8_t *const coil_tbl, const uint16_t num_coils)
Write coils (FC15).
int modbus_request_diagnostic(const int iface, const uint8_t unit_id, const uint16_t sfunc, const uint16_t data, uint16_t *const data_out)
Read diagnostic (FC08).
int modbus_write_coil(const int iface, const uint8_t unit_id, const uint16_t coil_addr, const bool coil_state)
Write single coil (FC05).
int modbus_register_user_fc(const int iface, struct modbus_custom_fc *custom_fc)
Register a user-defined function code handler.
void modbus_raw_set_server_failure(struct modbus_adu *adu)
Set Server Device Failure exception.
int modbus_write_holding_regs(const int iface, const uint8_t unit_id, const uint16_t start_addr, uint16_t *const reg_buf, const uint16_t num_regs)
Write holding registers (FC16).
int modbus_init_server(const int iface, struct modbus_iface_param param)
Configure Modbus Interface as raw ADU server.
int modbus_write_holding_reg(const int iface, const uint8_t unit_id, const uint16_t start_addr, const uint16_t reg_val)
Write single holding register (FC06).
@ MODBUS_MODE_RAW
Modbus raw ADU mode.
Definition modbus.h:478
@ MODBUS_MODE_RTU
Modbus over serial line RTU mode.
Definition modbus.h:474
@ MODBUS_MODE_ASCII
Modbus over serial line ASCII mode.
Definition modbus.h:476
struct _snode sys_snode_t
Single-linked list node structure.
Definition slist.h:44
uart_config_parity
Parity modes.
Definition uart.h:80
uart_config_stop_bits
Number of stop bits.
Definition uart.h:89
state
Definition parser_state.h:29
Header file for the single-linked list API.
#define bool
Definition stdbool.h:13
__UINT32_TYPE__ uint32_t
Definition stdint.h:90
__UINT8_TYPE__ uint8_t
Definition stdint.h:88
__UINT16_TYPE__ uint16_t
Definition stdint.h:89
Frame struct used internally and for raw ADU support.
Definition modbus.h:78
uint8_t fc
Function Code.
Definition modbus.h:88
uint16_t trans_id
Transaction Identifier.
Definition modbus.h:80
uint16_t crc
RTU CRC.
Definition modbus.h:92
uint8_t data[CONFIG_MODBUS_BUFFER_SIZE - 4]
Transaction Data.
Definition modbus.h:90
uint16_t length
Length of the data only (not the length of unit ID + PDU).
Definition modbus.h:84
uint8_t unit_id
Unit Identifier.
Definition modbus.h:86
uint16_t proto_id
Protocol Identifier.
Definition modbus.h:82
User parameter structure to configure Modbus interface as client or server.
Definition modbus.h:526
struct modbus_raw_cb rawcb
Pointer to raw ADU callback function.
Definition modbus.h:543
uint32_t rx_timeout
Amount of time client will wait for a response from the server.
Definition modbus.h:536
struct modbus_server_param server
Server parameter of the interface.
Definition modbus.h:532
struct modbus_serial_param serial
Serial support parameter of the interface.
Definition modbus.h:541
enum modbus_mode mode
Mode of the interface.
Definition modbus.h:528
Raw ADU callback parameter.
Definition modbus.h:515
modbus_raw_cb_t raw_tx_cb
Callback function used to send a raw ADU.
Definition modbus.h:517
void * user_data
Pointer to the user data passed to the callback function.
Definition modbus.h:519
Modbus serial line parameter.
Definition modbus.h:484
enum uart_config_parity parity
parity UART's parity setting: UART_CFG_PARITY_NONE, UART_CFG_PARITY_EVEN, UART_CFG_PARITY_ODD
Definition modbus.h:492
enum uart_config_stop_bits stop_bits
stop_bits UART's stop bits setting in non-compliant mode: UART_CFG_STOP_BITS_0_5, UART_CFG_STOP_BITS_...
Definition modbus.h:499
uint32_t baud
Baudrate of the serial line.
Definition modbus.h:486
Modbus server parameter.
Definition modbus.h:505
uint8_t unit_id
Modbus unit ID of the server.
Definition modbus.h:509
struct modbus_user_callbacks * user_cb
Pointer to the User Callback structure.
Definition modbus.h:507
Modbus Server User Callback structure.
Definition modbus.h:365
int(* coil_wr)(uint16_t addr, bool state)
Coil write callback.
Definition modbus.h:370
int(* holding_reg_wr_fp)(uint16_t addr, float reg)
Floating Point Holding Register write callback.
Definition modbus.h:391
int(* coil_rd)(uint16_t addr, bool *state)
Coil read callback.
Definition modbus.h:367
int(* holding_reg_wr)(uint16_t addr, uint16_t reg)
Holding Register write callback.
Definition modbus.h:385
int(* holding_reg_rd_fp)(uint16_t addr, float *reg)
Floating Point Holding Register read callback.
Definition modbus.h:388
int(* input_reg_rd)(uint16_t addr, uint16_t *reg)
Input Register read callback.
Definition modbus.h:376
int(* discrete_input_rd)(uint16_t addr, bool *state)
Discrete Input read callback.
Definition modbus.h:373
int(* holding_reg_rd)(uint16_t addr, uint16_t *reg)
Holding Register read callback.
Definition modbus.h:382
int(* input_reg_rd_fp)(uint16_t addr, float *reg)
Floating Point Input Register read callback.
Definition modbus.h:379