/** * @file radar_protocol.h * @brief R60ABD1 60G 毫米波雷达通信协议定义 * * 协议: SIP-S v1.0 串口协议 (云帆瑞达 Micradar) * 帧格式: 帧头(2B) + 控制字(1B) + 命令字(1B) + 长度(2B) + 数据(NB) + 校验(1B) + 帧尾(2B) */ #ifndef RADAR_PROTOCOL_H #define RADAR_PROTOCOL_H #include // ============================================================ // 帧定界符 // ============================================================ #define FRAME_HEADER_1 0x53 // 'S' #define FRAME_HEADER_2 0x59 // 'Y' #define FRAME_TAIL_1 0x54 // 'T' #define FRAME_TAIL_2 0x43 // 'C' #define FRAME_HEADER_SIZE 2 #define FRAME_TAIL_SIZE 2 #define FRAME_MIN_SIZE 8 // 最小帧: 头2+控制1+命令1+长度2+校验1+尾2 = 9 字节 // ============================================================ // 控制字 (Control Word) // ============================================================ enum RadarControl : uint8_t { CTRL_HEARTBEAT = 0x01, // 心跳包 CTRL_PRODUCT_INFO = 0x02, // 产品信息 CTRL_OTA = 0x03, // OTA 升级 CTRL_WORK_STATUS = 0x05, // 工作状态 CTRL_DETECT_RANGE = 0x07, // 探测范围 CTRL_PRESENCE = 0x80, // 人体存在 CTRL_BREATHING = 0x81, // 呼吸检测 CTRL_SLEEP = 0x84, // 睡眠监测 CTRL_HEART_RATE = 0x85, // 心率监测 }; // ============================================================ // 命令字 (Command Word) // ============================================================ enum RadarCommand : uint8_t { CMD_QUERY = 0x01, // 查询命令 CMD_REPORT = 0x02, // 主动上报 CMD_SET = 0x03, // 设置命令 CMD_ACK = 0x04, // 应答 }; // ============================================================ // 工作状态命令 (CTRL_WORK_STATUS 下的子命令) // ============================================================ enum WorkStatusCmd : uint8_t { WS_INIT_COMPLETE = 0x01, // 初始化完成 WS_INIT_QUERY = 0x81, // 查询初始化状态 WS_POS_OUT_BOUNDS = 0x07, // 位置超出范围 }; // ============================================================ // 呼吸状态 // ============================================================ enum RespirationStatus : uint8_t { RESPI_NORMAL = 0, // 正常 (10~25 次/分) RESPI_HIGH = 1, // 过高 (>25) RESPI_LOW = 2, // 过低 (<10) }; // ============================================================ // 睡眠状态 // ============================================================ enum SleepStatus : uint8_t { SLEEP_AWAKE = 0, // 清醒 SLEEP_LIGHT = 1, // 浅睡 SLEEP_DEEP = 2, // 深睡 }; // ============================================================ // 帧解析状态机 // ============================================================ enum FrameState { STATE_IDLE, // 等待帧头 0x53 STATE_GOT_HEADER1, // 已收到 0x53, 等待 0x59 STATE_GOT_HEADER2, // 已收到帧头, 等待控制字 STATE_GOT_CONTROL, // 已收到控制字, 等待命令字 STATE_GOT_COMMAND, // 已收到命令字, 等待长度高字节 STATE_GOT_LEN_H, // 已收到长度高字节, 等待长度低字节 STATE_GOT_LEN_L, // 已收到长度低字节, 读取数据 STATE_GOT_DATA, // 数据接收完成, 等待校验 STATE_GOT_CHECKSUM, // 已收到校验, 等待帧尾 0x54 STATE_GOT_TAIL1, // 已收到 0x54, 等待 0x43 STATE_FRAME_COMPLETE, // 帧接收完成 }; // ============================================================ // 帧缓冲区大小 // ============================================================ #define RADAR_FRAME_BUF_SIZE 128 // 单帧最大缓冲区 #define RADAR_RING_BUF_SIZE 512 // 环形接收缓冲区 // ============================================================ // 解析后的雷达帧数据 (原始) // ============================================================ struct RadarFrame { uint8_t control; uint8_t command; uint16_t data_length; uint8_t data[RADAR_FRAME_BUF_SIZE]; uint8_t checksum; bool valid; // 校验通过 uint32_t timestamp; }; #endif // RADAR_PROTOCOL_H