#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