Files
health-wellness-device-2/include/radar_protocol.h
yangzhijia 49e3abbb34 feat: init
2026-07-22 11:27:37 +08:00

115 lines
4.4 KiB
C

/**
* @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 <stdint.h>
// ============================================================
// 帧定界符
// ============================================================
#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