Files

106 lines
1.7 KiB
C

#ifndef R60ABD1_H
#define R60ABD1_H
#include "typedef.h"
/*
* R60ABD1最新状态快照。
*
* 该结构只表示“当前最新值”,
* 不负责历史数据存储。
*/
struct radar_r60abd1_data {
/* 人体存在/运动 */
u8 presence;
u8 motion;
u8 body_movement;
/* 距离 */
u16 distance_cm;
/*
* 心率/呼吸率。
*
* x10保存:
* 例如 72.0 bpm -> 720
*/
u16 heart_rate_x10;
u16 breath_rate_x10;
/* 睡眠状态 */
u8 sleep_state;
/* XYZ坐标 */
s16 pos_x_mm;
s16 pos_y_mm;
s16 pos_z_mm;
/* 最新波形采样值 */
u8 heart_waveform;
u8 breath_waveform;
/*
* 最近一次“已识别业务数据更新”的系统时间。
*
* 未知但checksum正确的合法帧不会刷新该时间。
* 单位:ms。
*/
u32 update_ms;
/* 运行统计 */
u32 rx_bytes;
/*
* checksum正确的合法帧总数。
* 包含当前没有解析业务含义的帧。
*/
u32 frame_count;
/*
* 当前parser真正识别并更新业务字段的帧数。
*/
u32 data_update_count;
u32 checksum_errors;
};
/*
* 初始化R60ABD1协议层。
*
* 必须在input/get_data之前调用。
*/
int radar_r60abd1_init(void);
/*
* 输入UART收到的原始字节流。
*/
int radar_r60abd1_input_bytes(
const u8 *data,
u16 len
);
/*
* 获取当前最新状态快照。
*
* 内部使用mutex保护。
*/
int radar_r60abd1_get_data(
struct radar_r60abd1_data *out
);
/*
* 发送一条已经组好的R60ABD1协议命令。
*/
int radar_r60abd1_send_command(
const u8 *cmd,
u16 len
);
#endif