tr_protocol.h 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. /*
  2. * tr_protocol.h
  3. *
  4. * Created on: 2025年10月13日
  5. * Author: Administrator
  6. */
  7. #ifndef CODE_HLX_TR_PROTOCOL_H_
  8. #define CODE_HLX_TR_PROTOCOL_H_
  9. #include <stdio.h>
  10. #include <stdint.h>
  11. typedef struct
  12. {
  13. uint8_t version; // 版本
  14. uint8_t destAddress; // 目的地址
  15. uint8_t sourceAddress; // 源地址
  16. uint8_t type; // 类型
  17. uint16_t length; // 长度
  18. uint16_t optionsNum; // option个数
  19. uint16_t currentOptinNumber; // 当前option的编号
  20. uint8_t message[2048]; // 报文
  21. }
  22. trProtocol;
  23. // 拼包的方法
  24. void ProtocolInit(trProtocol* protocol);
  25. // 设置目的地址
  26. void ProtocolSetDestAddress(trProtocol* protocol, uint8_t destAddress);
  27. // 设置源地址
  28. void ProtocolSetSourceAddress(trProtocol* protocol, uint8_t sourceAddress);
  29. // 设置类型
  30. void ProtocolSetType(trProtocol* protocol, uint8_t type);
  31. // 设置option
  32. void ProtocolSetOption(trProtocol* protocol, uint16_t optionNumber, uint16_t optionLength, uint8_t* optionValue);
  33. // 设置字符串类型的option
  34. void ProtocolSetOptionString(trProtocol* protocol, uint16_t optionNumber, char* optionValue);
  35. // 设置short类型的option
  36. void ProtocolSetOptionShort(trProtocol* protocol, uint16_t optionNumber, uint16_t optionValue);
  37. // 设置char类型的option
  38. void ProtocolSetOptionChar(trProtocol* protocol, uint16_t optionNumber, uint8_t optionValue);
  39. // 设置payload
  40. void ProtocolSetPayload(trProtocol* protocol, uint16_t payloadLength, uint8_t* payload);
  41. // 设置字符串类型的payload
  42. void ProtocolSetPayloadString(trProtocol* protocol, const char* payloadString);
  43. // 打包
  44. void ProtocolPackage(trProtocol* protocol);
  45. // 报文解析
  46. // CRC校验
  47. uint8_t ProtocolCheckCRC(uint8_t* message, uint16_t messageLength);
  48. // 获取版本号
  49. uint8_t ProtocolGetVersion(uint8_t* message, uint16_t messageLength);
  50. // 获取报文类型
  51. uint8_t ProtocolGetType(uint8_t* message, uint16_t messageLength);
  52. // 获取目的地址
  53. uint8_t ProtocolGetDestAddress(uint8_t* message, uint16_t messageLength);
  54. // 获取源地址
  55. uint8_t ProtocolGetSourceAddress(uint8_t* message, uint16_t messageLength);
  56. // 获取option
  57. uint16_t ProtocolGetOption(uint8_t* message, uint16_t messageLength, uint16_t optionNumber, uint8_t* optionValue);
  58. // 获取short类型的option
  59. uint8_t ProtocolGetOptionShort(uint8_t* message, uint16_t messageLength, uint16_t optionNumber, uint16_t* optionValue);
  60. // 获取char类型的option
  61. uint8_t ProtocolGetOptionChar(uint8_t* message, uint16_t messageLength, uint16_t optionNumber, uint8_t* optionValue);
  62. // 获取payload
  63. uint16_t ProtocolGetPayload(uint8_t* message, uint16_t messageLength, uint8_t* payload);
  64. #endif /* CODE_HLX_TR_PROTOCOL_H_ */