You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

43 lines
2.1 KiB

2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
  1. #pragma once
  2. #include <stdint.h>
  3. #include "modbus_basic.hpp"
  4. typedef struct {
  5. ModbusMasterData_t* rx;
  6. ModbusSlaveData_t* tx;
  7. } modbus_processer_context_t;
  8. typedef struct modbus_processer {
  9. uint8_t modbus_device_id; // default 0x01;
  10. uint8_t* modbus_processer_rx_buf;
  11. uint8_t modbus_processer_rx_buf_size; //
  12. uint8_t* modbus_processer_tx_buf;
  13. uint8_t modbus_processer_tx_buf_size; //
  14. /*************************************/
  15. void (*tx)(uint8_t* rx, uint16_t len);
  16. void (*process_rx)(modbus_processer_context_t* context);
  17. } modbus_processer_t;
  18. void modbus_processer_init(modbus_processer_t* processer);
  19. void modbus_processer_push_data(uint8_t rxdata);
  20. // void modbus_processer_try_process_data(void);
  21. void modbus_processer_process_data(uint8_t* rx, uint16_t rxlen);
  22. /***********************************************************************************************************************
  23. * ======================================================================================================== *
  24. ***********************************************************************************************************************/
  25. ModbusFunctionCode modbus_get_function_code(modbus_processer_context_t* context);
  26. void modbus_set_tx_reg_03(modbus_processer_context_t* context, uint16_t regoff, uint16_t regdata);
  27. void modbus_set_tx_regs_03(modbus_processer_context_t* context, uint16_t regoff, uint16_t* regdata, int reglen);
  28. uint16_t modbus_get_reg_10(modbus_processer_context_t* context, uint16_t regoff);
  29. bool modbus_if_register_exists_03(modbus_processer_context_t* context, uint16_t regoff);
  30. bool modbus_if_registers_exists_03(modbus_processer_context_t* context, uint16_t regoff, uint16_t reglen);
  31. bool modbus_if_register_exists_10(modbus_processer_context_t* context, uint16_t regoff);
  32. uint8_t* modbus_get_buf_10(modbus_processer_context_t* context, uint16_t regoff);
  33. void modbus_send_03(modbus_processer_context_t* context, ModbusStatus modbus_status);
  34. void modbus_send_10(modbus_processer_context_t* context, ModbusStatus modbus_status);