E52.h 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  1. //
  2. // Created by EDZ on 25-9-11.
  3. //
  4. #ifndef E52_H
  5. #define E52_H
  6. #include "main.h"
  7. #include <stdio.h>
  8. #include <sys/types.h>
  9. #include "string.h"
  10. #include "stdlib.h"
  11. // 组合命令和步骤的宏
  12. #define COMBINE_CMD_STEP(cmd, step) ((cmd) | (step))
  13. // 从组合值中提取命令
  14. #define GET_CMD(value) (value & 0x0F)
  15. // 从组合值中提取步骤
  16. #define GET_STEP(value) ((value & 0xF0))
  17. // 定义云端命令枚举,使命令含义更清晰
  18. typedef enum {
  19. IDLE = 0x00,
  20. REQUEST_BLUETOOTH_DATA = 0x03, // 请求发送蓝牙数据
  21. CONFIGURE_E52 = 0x07, // E52 配置命令
  22. E52_ENTER_SLEEP = 0x05, // E52 进入睡眠模式
  23. E52_HEARTBEAT = 0x08 // E52 心跳包命令
  24. } CloudCommand;
  25. // 定义步骤枚举,高4位用于存储步骤(0x00~0x50,间隔0x10) 通用
  26. typedef enum {
  27. STEP_INIT = 0x00 << 4, // 0x00 - 原始命令
  28. STEP_VERIFY = 0x01 << 4, // 0x10 - 中断已处理(while中防止一个命令被多次分析数据,导致内存崩溃)(有新数据过来)
  29. STEP_COMPLETE = 0x0F << 4 // 0x40 - 完成步骤
  30. } CommandStep;
  31. //独立step范围(0x02~0x0E
  32. typedef enum {
  33. REQUEST_BLUETOOTH_DATA_SCAN = 0x02 << 4, // 请求蓝牙数据第1步
  34. REQUEST_BLUETOOTH_DATA_SEND = 0x03 << 4 // 发送蓝牙数据第2步
  35. } REQUEST_BLUETOOTH_DATA_STEP;
  36. typedef enum {
  37. CONFIGURE_E52_STEP1 = 0x01 << 4, //还没想好
  38. CONFIGURE_E52_STEP2 = 0x02 << 4 // 还没想好
  39. } CONFIGURE_E52_STEP;
  40. // // 发送 "请求蓝牙数据" 命令的第2步
  41. // uint8_t cmd = COMBINE_CMD_STEP(REQUEST_BLUETOOTH_DATA, STEP_2);
  42. // // cmd 的值为 0x23 (0x03 | 0x20)
  43. //
  44. // // 解析接收到的命令
  45. // uint8_t received_cmd = 0x23;
  46. // CloudCommand command = GET_CMD(received_cmd); // 得到 0x03 (REQUEST_BLUETOOTH_DATA)
  47. // uint8_t step = GET_STEP(received_cmd); // 得到 2
  48. typedef enum {
  49. TIMER_IDLE,
  50. TIMER_ENABLE,
  51. TIMER_DISABLE
  52. } TimerSTATUS;
  53. // 定义定时器操作类型
  54. typedef enum {
  55. TIMER_OP_START, // 启动定时器
  56. TIMER_OP_STOP // 停止定时器
  57. } Timer_Operation;
  58. typedef enum {
  59. BL_IDLE,
  60. BL_START,
  61. BL_STOP
  62. } BLSTATUS;
  63. // 设备信息结构体
  64. typedef struct __attribute__((packed)){
  65. uint8_t isReady; // 设备是否就绪
  66. uint8_t broadcast_type; // 广播类型 01:单波 02:广播 03:多播
  67. uint8_t loraDeviceAddress_H; //设备地址高位 默认0
  68. uint8_t loraDeviceAddress_L; //设备地址低位 默认0
  69. uint8_t target_addr_H; // 目标地址高字节 默认FF
  70. uint8_t target_addr_L; // 目标地址低字节 默认FF
  71. uint8_t powerValue; //电量 默认0
  72. // uint8_t receivingNewDataFlag; //接收lora新数据
  73. //使能蓝牙收发数据
  74. uint8_t BlDataFlag; //发送蓝牙数据
  75. //lora接收到新的消息
  76. uint8_t newLoraDataFlag; //接收lora数据成功标志位。1:有新数据来。0.表示等待接收数据。后续可以改成队列类型。
  77. //后台的远程命令
  78. uint8_t commandFromCloud; //从云端接收到的命令 1.请求蓝牙数据,2.请求lora数据,3.睡眠 4,重新发送点卯数据
  79. //lora发生成功标志
  80. uint8_t loraSendSuccessFlag;
  81. //定时器相关
  82. uint8_t timerEnable; //定时器使能
  83. uint16_t timeCount; //定时器计数
  84. uint16_t forwardBLAndLoraDataDuration; //转发蓝牙数据持续时间高位ms
  85. } Device_structure;
  86. // 只声明变量,不定义变量,使用extern关键字
  87. extern Device_structure deviceInfo;
  88. // 心跳数据结构体
  89. typedef struct __attribute__((packed)){
  90. uint8_t frame_header_H; // 帧头高字节
  91. uint8_t frame_header_L; // 帧头低字节
  92. uint8_t function_code; // 功能码
  93. uint8_t badge_addr_high; //胸牌地址高字节
  94. uint8_t badge_addr_low; //胸牌地址低字节
  95. uint8_t broadcast_type; // 广播类型
  96. uint8_t target_addr_H; // 目标地址高字节
  97. uint8_t target_addr_L; // 目标地址低字节
  98. uint8_t frame_tail_H; // 帧尾高字节
  99. uint8_t frame_tail_L; // 帧尾低字节
  100. } Heartbeat_structure;
  101. void E52_Heartbeat_Fun(void);
  102. // 发送蓝牙结构体
  103. typedef struct __attribute__((packed)){
  104. uint8_t frame_header_H; // 帧头高字节
  105. uint8_t frame_header_L; // 帧头低字节
  106. uint8_t function_code; // 功能码
  107. uint8_t badge_addr_high; //胸牌地址高字节
  108. uint8_t badge_addr_low; //胸牌地址低字节
  109. uint8_t bl_data[8]; //蓝牙数据
  110. uint8_t finish_send; // 是否完成发送
  111. // uint8_t target_addr_H; // 目标地址高字节
  112. // uint8_t target_addr_L; // 目标地址低字节
  113. uint8_t frame_tail_H; // 帧尾高字节
  114. uint8_t frame_tail_L; // 帧尾低字节
  115. } SendBlData_structure;
  116. void E52_Send_Bl_Data_Fun(uint8_t);
  117. // 发送SOS结构体
  118. typedef struct __attribute__((packed)){
  119. uint8_t frame_header_H; // 帧头高字节
  120. uint8_t frame_header_L; // 帧头低字节
  121. uint8_t function_code; // 功能码
  122. uint8_t badge_addr_high; //胸牌地址高字节
  123. uint8_t badge_addr_low; //胸牌地址低字节
  124. uint8_t SOS_data; //蓝牙数据
  125. uint8_t finish_send; // 是否完成发送
  126. uint8_t target_addr_H; // 目标地址高字节
  127. uint8_t target_addr_L; // 目标地址低字节
  128. uint8_t frame_tail_H; // 帧尾高字节
  129. uint8_t frame_tail_L; // 帧尾低字节
  130. } SendSOS_structure;
  131. void E52_Send_SOS_Fun(void);
  132. void E52_Analyze_Data(void);
  133. #endif //E52_H