#pragma once #include #include "modbus_basic.hpp" typedef struct { ModbusMasterData_t* rx; ModbusSlaveData_t* tx; } modbus_processer_context_t; typedef struct modbus_processer { uint8_t modbus_device_id; // default 0x01; uint8_t* modbus_processer_rx_buf; uint8_t modbus_processer_rx_buf_size; // uint8_t* modbus_processer_tx_buf; uint8_t modbus_processer_tx_buf_size; // /*************************************/ void (*tx)(uint8_t* rx, uint16_t len); void (*process_rx)(modbus_processer_context_t* context); } modbus_processer_t; void modbus_processer_init(modbus_processer_t* processer); void modbus_processer_push_data(uint8_t rxdata); // void modbus_processer_try_process_data(void); void modbus_processer_process_data(uint8_t* rx, uint16_t rxlen); /*********************************************************************************************************************** * ====================================================¸¨Öú·½·¨==================================================== * ***********************************************************************************************************************/ ModbusFunctionCode modbus_get_function_code(modbus_processer_context_t* context); void modbus_set_tx_reg_03(modbus_processer_context_t* context, uint16_t regoff, uint16_t regdata); void modbus_set_tx_regs_03(modbus_processer_context_t* context, uint16_t regoff, uint16_t* regdata, int reglen); uint16_t modbus_get_reg_10(modbus_processer_context_t* context, uint16_t regoff); bool modbus_if_register_exists_03(modbus_processer_context_t* context, uint16_t regoff); bool modbus_if_registers_exists_03(modbus_processer_context_t* context, uint16_t regoff, uint16_t reglen); bool modbus_if_register_exists_10(modbus_processer_context_t* context, uint16_t regoff); uint8_t* modbus_get_buf_10(modbus_processer_context_t* context, uint16_t regoff); void modbus_send_03(modbus_processer_context_t* context, ModbusStatus modbus_status); void modbus_send_10(modbus_processer_context_t* context, ModbusStatus modbus_status);