| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183 |
- //
- // Created by EDZ on 25-9-11.
- //
- #ifndef E52_H
- #define E52_H
- #include "main.h"
- #include <stdio.h>
- #include <sys/types.h>
- #include "string.h"
- #include "stdlib.h"
- #include "RTC_SLEEP.h"
- #include "ring_buffer.h"
- #include "Global.h"
- // 组合命令和步骤的宏
- #define COMBINE_CMD_STEP(cmd, step) ((cmd) | (step))
- // 从组合值中提取命令
- #define GET_CMD(value) (value & 0x0F)
- // 从组合值中提取步骤
- #define GET_STEP(value) ((value & 0xF0))
- enum {
- TRUE = 1,
- FALSE = 0
- };
- // 定义云端命令枚举,使命令含义更清晰
- typedef enum {
- IDLE = 0x00,
- REQUEST_BLUETOOTH_DATA = 0x03, // 请求发送蓝牙数据
- CONFIGURE_E52 = 0x07, // E52 配置命令
- E52_ENTER_SLEEP = 0x05, // E52 进入睡眠模式
- E52_HEARTBEAT = 0x08, // E52 心跳包命令
- IS_ONLINE = 0x0A
- } CloudCommand;
- // 定义步骤枚举,高4位用于存储步骤(0x00~0x50,间隔0x10) 通用
- typedef enum {
- STEP_INIT = 0x00 << 4, // 0x00 - 原始命令
- STEP_VERIFY = 0x01 << 4, // 0x10 - 中断已处理(while中防止一个命令被多次分析数据,导致内存崩溃)(有新数据过来)
- STEP_COMPLETE = 0x0F << 4 // 0x40 - 完成步骤
- } CommandStep;
- //独立step范围(0x02~0x0E
- typedef enum {
- REQUEST_BLUETOOTH_DATA_SCAN = 0x02 << 4, // 请求蓝牙数据第1步
- REQUEST_BLUETOOTH_DATA_SEND = 0x03 << 4 // 发送蓝牙数据第2步
- } REQUEST_BLUETOOTH_DATA_STEP;
- typedef enum {
- CONFIGURE_E52_SET_BROADCAST_TYPE= 0x02 << 4, //设置广播类型
- CONFIGURE_E52_SET_LORA_ADDRESS= 0x03 << 4, //设置目标地址
- CONFIGURE_E52_CONNECT_TEST= 0x04 << 4 //测试通讯
- } CONFIGURE_E52_STEP;
- typedef enum {
- HEARTBEAT_SEND = 0x02 << 4, //发送心跳包
- } HEARTBEAT_E52_STEP;
- typedef enum {
- RTC_SLEEP_STEP = 0x02 << 4, //睡眠模式
- } SLEEP_STEP;
- typedef enum {
- E52_TYPE_TERMINAL = 1, // 终端
- E52_TYPE_REPEATER = 0, // 中继
- // E52_TYPE_MASTER = 2 // 主机
- } E52_TYPE;
- // // 发送 "请求蓝牙数据" 命令的第2步
- // uint8_t cmd = COMBINE_CMD_STEP(REQUEST_BLUETOOTH_DATA, STEP_2);
- // // cmd 的值为 0x23 (0x03 | 0x20)
- //
- // // 解析接收到的命令
- // uint8_t received_cmd = 0x23;
- // CloudCommand command = GET_CMD(received_cmd); // 得到 0x03 (REQUEST_BLUETOOTH_DATA)
- // uint8_t step = GET_STEP(received_cmd); // 得到 2
- typedef enum {
- TIMER_IDLE,
- TIMER_ENABLE,
- TIMER_DISABLE
- } TimerSTATUS;
- // 定义定时器操作类型
- typedef enum {
- TIMER_OP_START, // 启动定时器
- TIMER_OP_STOP // 停止定时器
- } Timer_Operation;
- typedef enum {
- BL_IDLE,
- BL_START,
- BL_STOP
- } BLSTATUS;
- typedef enum {
- BROADCAST_SINGLE = 0x01, //单播
- BROADCAST_MULTI, //多播
- BROADCAST_ALL //广播
- }BROADCAST;
- // 只声明变量,不定义变量,使用extern关键字
- extern Device_structure deviceInfo;
- // 心跳数据结构体
- typedef struct __attribute__((packed)){
- uint8_t frame_header_H; // 帧头高字节
- uint8_t frame_header_L; // 帧头低字节
- uint8_t function_code; // 功能码
- uint8_t badge_addr_high; //胸牌地址高字节
- uint8_t badge_addr_low; //胸牌地址低字节
- uint8_t broadcast_type; // 广播类型
- uint8_t target_addr_H; // 目标地址高字节
- uint8_t target_addr_L; // 目标地址低字节
- uint8_t frame_tail_H; // 帧尾高字节
- uint8_t frame_tail_L; // 帧尾低字节
- } Heartbeat_structure;
- void E52_Heartbeat_Fun(void);
- // 发送蓝牙结构体
- typedef struct __attribute__((packed)){
- uint8_t frame_header_H; // 帧头高字节
- uint8_t frame_header_L; // 帧头低字节
- uint8_t function_code; // 功能码
- uint8_t badge_addr_high; //胸牌地址高字节
- uint8_t badge_addr_low; //胸牌地址低字节
- uint8_t bl_data[8]; //蓝牙数据
- uint8_t finish_send; // 是否完成发送
- // uint8_t target_addr_H; // 目标地址高字节
- // uint8_t target_addr_L; // 目标地址低字节
- uint8_t frame_tail_H; // 帧尾高字节
- uint8_t frame_tail_L; // 帧尾低字节
- } SendBlData_structure;
- void E52_Send_Bl_Data_Fun(uint8_t *sendData,uint8_t);
- // 发送SOS结构体
- typedef struct __attribute__((packed)){
- uint8_t frame_header_H; // 帧头高字节
- uint8_t frame_header_L; // 帧头低字节
- uint8_t function_code; // 功能码
- uint8_t badge_addr_high; //胸牌地址高字节
- uint8_t badge_addr_low; //胸牌地址低字节
- // uint8_t SOS_data; //蓝牙数据
- uint8_t bl_data[8]; //蓝牙数据
- uint8_t finish_send; // 是否完成发送
- uint8_t target_addr_H; // 目标地址高字节
- uint8_t target_addr_L; // 目标地址低字节
- uint8_t frame_tail_H; // 帧尾高字节
- uint8_t frame_tail_L; // 帧尾低字节
- } SendSOS_structure;
- void E52_Send_SOS_Fun(uint8_t *sendData,uint8_t finishData);
- void E52_Analyze_Data(void);
- void E52_Heartbeat_Fun(void);
- void E52_CONFIG_BROADCAST_TYPE_FUN(uint8_t);
- void E104_BT5005A_DST_ADDR_Fun(void);
- //开启lora电源
- void E52_CtlPowerOn_Fun();
- //关闭lora电源
- void E52_CtlPowerOff_Fun();
- void schedule_Fun(void);
- void Enter_Sleep_ACK_Fun(void);
- void E52_AT_TYPE_Fun(uint8_t type);
- #endif //E52_H
|