Modbus RTU - Multi Devices
This commit is contained in:
63
main/modbus_rtu.h
Normal file
63
main/modbus_rtu.h
Normal file
@@ -0,0 +1,63 @@
|
||||
#ifndef MODBUS_RTU_H
|
||||
#define MODBUS_RTU_H
|
||||
|
||||
#include <stdbool.h>
|
||||
#include <stddef.h>
|
||||
#include <stdint.h>
|
||||
|
||||
#include "driver/uart.h"
|
||||
#include "freertos/FreeRTOS.h"
|
||||
#include "freertos/task.h"
|
||||
|
||||
#include "modbus_memory.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define MODBUS_RTU_MAX_ADU_LEN 256
|
||||
#define MODBUS_RTU_MAX_DEVICES 16
|
||||
|
||||
typedef struct
|
||||
{
|
||||
uint8_t unit_id;
|
||||
modbus_memory_t *mem;
|
||||
const char *name;
|
||||
} modbus_rtu_device_t;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
uart_port_t uart_num;
|
||||
uint32_t baud_rate;
|
||||
uint8_t unit_count;
|
||||
modbus_rtu_device_t devices[MODBUS_RTU_MAX_DEVICES];
|
||||
} modbus_rtu_ctx_t;
|
||||
|
||||
void modbus_rtu_init(modbus_rtu_ctx_t *ctx, uart_port_t uart_num, uint32_t baud_rate);
|
||||
|
||||
bool modbus_rtu_add_device(modbus_rtu_ctx_t *ctx,
|
||||
uint8_t unit_id,
|
||||
modbus_memory_t *mem,
|
||||
const char *name);
|
||||
|
||||
modbus_rtu_device_t *modbus_rtu_find_device(modbus_rtu_ctx_t *ctx, uint8_t unit_id);
|
||||
|
||||
int modbus_rtu_read_frame(modbus_rtu_ctx_t *ctx,
|
||||
uint8_t *buf,
|
||||
size_t buf_size,
|
||||
TickType_t first_byte_timeout);
|
||||
|
||||
bool modbus_rtu_process_request(modbus_rtu_ctx_t *ctx,
|
||||
const uint8_t *req,
|
||||
size_t req_len,
|
||||
uint8_t *resp,
|
||||
size_t resp_size,
|
||||
size_t *resp_len);
|
||||
|
||||
uint16_t modbus_rtu_crc16(const uint8_t *data, size_t len);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* MODBUS_RTU_H */
|
||||
Reference in New Issue
Block a user