Add handler prototypes and server data object

This commit is contained in:
Donghoon Park 2024-10-04 13:14:23 +09:00 committed by Valerio De Benedetto
parent 6248a24789
commit f7649300a4
2 changed files with 71 additions and 5 deletions

View File

@ -15,18 +15,72 @@ typedef struct tRingBuf {
static ringBuf rb;
static void ringbuf_init(ringBuf* rb, void (*overflow_callback)(struct tRingBuf* rq));
static void ring_buf_overflow_error(ringBuf* rb);
static void ringbuf_overflow_error(ringBuf* rb);
void nanomodbus_rtu_init(nmbs_t* nmbs)
uint8_t coil_buf[COIL_BUF_SIZE];
uint16_t reg_buf [REG_BUF_SIZE];
static nmbs_error server_read_coils(uint16_t address, uint16_t quantity, nmbs_bitfield coils_out, uint8_t unit_id, void* arg);
static nmbs_error server_read_holding_registers(uint16_t address, uint16_t quantity, uint16_t* registers_out, uint8_t unit_id, void* arg);
static nmbs_error server_write_single_coil(uint16_t address, bool value, uint8_t unit_id, void* arg);
static nmbs_error server_write_multiple_coils(uint16_t address, uint16_t quantity, const nmbs_bitfield coils, uint8_t unit_id, void* arg);
static nmbs_error server_write_single_register(uint16_t address, uint16_t value, uint8_t unit_id, void* arg);
static nmbs_error server_write_multiple_resisters(uint16_t address, uint16_t quantity, const uint16_t* registers, uint8_t unit_id, void* arg);
void nanomodbus_server_init(nmbs_t* nmbs)
{
ring_buf_init(&rb, ring_buf_overflow_error);
ringbuf_init(&rb, ringbuf_overflow_error);
nmbs_platform_conf pf_conf;
nmbs_callbacks cb;
nmbs_platform_conf_create(&pf_conf);
pf_conf.transport = NMBS_TRANSPORT_RTU;
pf_conf.read = read_serial;
pf_conf.write = write_serial;
nmbs_callbacks_create(&cb);
cb.read_coils = server_read_coils;
cb.read_holding_registers = server_read_holding_registers;
cb.write_single_coil = server_write_single_coil;
cb.write_multiple_coils = server_write_multiple_coils;
cb.write_single_register = server_write_single_register;
cb.write_multiple_registers = server_write_multiple_resisters;
}
void nanomodbus_server_add(nmbs_server_t* server)
{
}
static nmbs_error server_read_coils(uint16_t address, uint16_t quantity, nmbs_bitfield coils_out, uint8_t unit_id, void* arg)
{
}
static nmbs_error server_read_holding_registers(uint16_t address, uint16_t quantity, uint16_t* registers_out, uint8_t unit_id, void* arg)
{
}
static nmbs_error server_write_single_coil(uint16_t address, bool value, uint8_t unit_id, void* arg)
{
}
static nmbs_error server_write_multiple_coils(uint16_t address, uint16_t quantity, const nmbs_bitfield coils, uint8_t unit_id, void* arg)
{
}
static nmbs_error server_write_single_register(uint16_t address, uint16_t value, uint8_t unit_id, void* arg)
{
}
static nmbs_error server_write_multiple_registers(uint16_t address, uint16_t quantity, const uint16_t* registers, uint8_t unit_id, void* arg)
{
}
// Function to initialize the ring buffer
@ -98,7 +152,7 @@ uint16_t ringbuf_size(ringBuf* rb) {
}
// Example callback function to handle buffer overflow
static void ring_buf_overflow_error(ringBuf* rb)
static void ringbuf_overflow_error(ringBuf* rb)
{
//In here we may check the overflow situation
while(true){}

View File

@ -7,6 +7,11 @@ extern "C" {
#define NANOMB_UART huart1
#define RX_BUF_SIZE 256
// Max size of coil and register area
#define COIL_BUF_SIZE 1024
#define REG_BUF_SIZE 2048
// Other hardware configuration have done in *.ioc file
// Core name may vary with your hardware
@ -14,7 +19,14 @@ extern "C" {
// NanoModbus include
#include "nanomodbus.h"
void nanomodbus_rtu_init(nmbs_t* nmbs);
void nanomodbus_server_init(nmbs_t* nmbs);
void nanomodbus_server_add(nmbs_server_t* server);
struct tNmbsServer{
uint8_t id;
uint8_t coils[COIL_BUF_SIZE];
uint16_t regs[REG_BUF_SIZE];
}typedef nmbs_server_t;
extern UART_HandleTypeDef NANOMB_UART;