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.

46 lines
1.6 KiB

  1. #pragma once
  2. #include <stdint.h>
  3. #include "zmodbus_common.h"
  4. #include "zmodbus_slave.h"
  5. #include "zport.h"
  6. typedef struct {
  7. ModbusMasterData_t* rx;
  8. ModbusSlaveData_t* tx;
  9. } modbus_processer_context_t;
  10. typedef struct modbus_processer {
  11. uint8_t modbus_device_id; // default 0x01;
  12. uint8_t* modbus_processer_rx_buf;
  13. uint8_t modbus_processer_rx_buf_size; //
  14. uint8_t* modbus_processer_tx_buf;
  15. uint8_t modbus_processer_tx_buf_size; //
  16. /*************************************/
  17. int modbus_baundrate_one_packet_delay_us;
  18. void (*port_enter_critical)();
  19. void (*port_exit_critical)();
  20. void (*port_delay_us)(uint32_t us);
  21. void (*tx)(uint8_t* rx, uint16_t len);
  22. //
  23. void (*process_rx)(modbus_processer_context_t* context);
  24. } modbus_processer_t;
  25. void modbus_processer_init(modbus_processer_t* processer);
  26. void modbus_processer_push_data(uint8_t rxdata);
  27. ModbusFunctionCode modbus_get_function_code(modbus_processer_context_t* context);
  28. void modbus_set_tx_reg_03(modbus_processer_context_t* context, uint16_t regoff, uint16_t regdata);
  29. uint16_t modbus_get_reg_10(modbus_processer_context_t* context, uint16_t regoff);
  30. bool modbus_if_register_exists_03(modbus_processer_context_t* context, uint16_t regoff);
  31. bool modbus_if_register_exists_10(modbus_processer_context_t* context, uint16_t regoff);
  32. void modbus_send_03(modbus_processer_context_t* context, ModbusStatus modbus_status);
  33. void modbus_send_10(modbus_processer_context_t* context, ModbusStatus modbus_status);
  34. void modbus_processer_try_process_data();
  35. void ModbusProcessRxData(uint8_t *rxraw, uint8_t length, ModbusMasterData_t *rxparsed);