116 lines
1.9 KiB
C
116 lines
1.9 KiB
C
#ifndef RADAR_MANAGER_H
|
||
#define RADAR_MANAGER_H
|
||
|
||
#include "typedef.h"
|
||
/*
|
||
* radar_manager 的职责:
|
||
* 1. 保存“当前最新雷达状态”
|
||
* 2. 对上层提供一致快照
|
||
* 3. 判断 fresh / valid / meaningful change
|
||
*
|
||
* 它不知道:
|
||
* - UART
|
||
* - R60 CTRL/CMD
|
||
* - MQTT
|
||
* - WiFi
|
||
* - Flash
|
||
*/
|
||
|
||
struct radar_manager_input {
|
||
u8 presence;
|
||
u8 motion;
|
||
u8 body_movement;
|
||
|
||
u16 distance_cm;
|
||
|
||
u16 heart_rate_x10;
|
||
u16 breath_rate_x10;
|
||
|
||
u8 sleep_state;
|
||
|
||
s16 pos_x_mm;
|
||
s16 pos_y_mm;
|
||
s16 pos_z_mm;
|
||
|
||
u8 abnormal_state;
|
||
|
||
/*
|
||
* 由调用者传入本次数据真正更新的系统时间。
|
||
* manager 自己不依赖 AC79 timer API,
|
||
* 保持模块纯净。
|
||
*/
|
||
u32 update_ms;
|
||
};
|
||
|
||
struct radar_sensor_data {
|
||
u8 presence;
|
||
u8 motion;
|
||
u8 body_movement;
|
||
|
||
u16 distance_cm;
|
||
|
||
u16 heart_rate_x10;
|
||
u16 breath_rate_x10;
|
||
|
||
u8 heart_valid;
|
||
u8 breath_valid;
|
||
|
||
u8 sleep_state;
|
||
|
||
s16 pos_x_mm;
|
||
s16 pos_y_mm;
|
||
s16 pos_z_mm;
|
||
|
||
u8 abnormal_state;
|
||
|
||
u32 last_update_ms;
|
||
};
|
||
|
||
struct radar_change_flags {
|
||
u8 presence_changed;
|
||
u8 motion_changed;
|
||
u8 sleep_state_changed;
|
||
u8 body_movement_changed;
|
||
u8 distance_changed;
|
||
u8 heart_rate_changed;
|
||
u8 breath_rate_changed;
|
||
u8 abnormal_state_changed;
|
||
u8 any_changed;
|
||
};
|
||
|
||
struct radar_report_snapshot {
|
||
struct radar_sensor_data sensor;
|
||
|
||
u8 has_person;
|
||
u8 bed_occupied;
|
||
u8 has_valid_vitals;
|
||
u8 has_fresh_sample;
|
||
u8 has_meaningful_change;
|
||
|
||
u32 sample_age_ms;
|
||
};
|
||
|
||
int radar_manager_init(void);
|
||
|
||
int radar_manager_update(
|
||
const struct radar_manager_input *input
|
||
);
|
||
|
||
int radar_manager_get_sensor_data(
|
||
struct radar_sensor_data *out
|
||
);
|
||
|
||
int radar_manager_get_change_flags(
|
||
struct radar_change_flags *out
|
||
);
|
||
|
||
int radar_manager_get_report_snapshot(
|
||
u32 now_ms,
|
||
u32 max_age_ms,
|
||
struct radar_report_snapshot *out
|
||
);
|
||
|
||
int radar_manager_mark_snapshot_consumed(void);
|
||
|
||
#endif
|