Files
AC7911BB_JL-AIBT-SoundBox/radar/radar_report_service.h
T

95 lines
2.1 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#ifndef RADAR_REPORT_SERVICE_H
#define RADAR_REPORT_SERVICE_H
#include "typedef.h"
#include "radar_manager.h"
/*
* radar_report_service 的职责:
*
* 1. 从 radar_manager 获取统一业务快照
* 2. 判断当前是否需要上报
* 3. 在真正上报成功后推进“已上报”状态
*
* 它不知道:
* - UART
* - R60 CTRL/CMD
* - WiFi
* - MQTT
* - JSON
* - Flash
*
* 本模块不创建任务。
* 由未来的上报/网络执行流主动调用。
*/
enum radar_report_reason {
RADAR_REPORT_REASON_NONE = 0,
RADAR_REPORT_REASON_INITIAL,
RADAR_REPORT_REASON_CHANGE,
RADAR_REPORT_REASON_PERIODIC,
};
struct radar_report_service_config {
/*
* manager 快照允许的最大数据年龄。
* 超过这个时间的数据不提交给上层上报。
*/
u32 max_age_ms;
/*
* 即使没有 meaningful change
* 也允许按周期强制产生一次快照。
*
* 设为 0 表示关闭周期强制上报。
*/
u32 periodic_interval_ms;
};
/*
* 初始化上报决策层。
*/
int radar_report_service_init(
const struct radar_report_service_config *config
);
/*
* 检查当前是否存在待上报快照。
*
* return:
* 1 有快照需要上报,out/reason 有效
* 0 当前不需要上报
* <0 错误
*
* 注意:
* 一旦产生 pending snapshot
* 在 radar_report_service_mark_reported() 成功调用前,
* 后续 check 会返回同一份 pending snapshot。
*
* 这样上层发送失败时可以重试,
* 不会因为 manager 又更新而偷偷替换发送内容。
*/
int radar_report_service_check(
u32 now_ms,
struct radar_report_snapshot *out,
u8 *reason
);
/*
* 只有“上层已经真正发送成功”后才调用。
*
* 该函数会:
* - 清除 pending snapshot
* - 记录成功上报时间
* - 在安全情况下推进 manager 的 consumed baseline
*
* 如果 pending 产生以后 manager 又发生了有意义字段变化,
* 本函数不会把那个新变化错误地消费掉;
* 下一次 check 仍会重新产生 CHANGE 上报。
*/
int radar_report_service_mark_reported(
u32 now_ms
);
#endif