/****************************************************************************** * @file app_runrec.h * @brief CBR2 31 天运行记录(规格书 14.1 节,DP18 RO,124B):泵实际导通计秒 * @author cyWu <1917507415@qq.com> * @date 2026.09.09 * @version V1.0.0,首次发布 * * @note 什么叫在运行:app_pump_get()==1(PC2 与 PA6 **都已导通**)。 * 间隔等待、作业态为开但泵已关都不计。日期轴:未对时只往 slot[0] * 加不旋转;对时后按本地日历左移。落盘:每累计 600s 写一次 VM; * 跨天立刻写。 ******************************************************************************/ #ifndef __APP_RUNREC_H__ #define __APP_RUNREC_H__ #include #include "board_pin.h" #define APP_RUNREC_PACK_LEN (BOARD_RUN_RECORD_DAYS * 4u) /**< 124B */ /** * @brief 初始化(未对时:只往 slot0 加,不旋转) * @return 无 */ void app_runrec_init(void); /** * @brief 20ms 节拍:继电器实际吸合则累计秒,满 10 分钟打脏(不写 flash) * @param dt 距上次调用的毫秒数 * @return 无 */ void app_runrec_tick(uint16_t dt); /** * @brief 500ms 任务上下文:收下 pending 秒并灌 DP17;对时后跨天左移旋转 * @return 无 */ void app_runrec_rotate_if_needed(void); /** * @brief 读某天秒数(0=今天) * @param day 0~30 * @return 秒 */ uint32_t app_runrec_get(uint8_t day); /** * @brief 打包 124B(每格 uint32 大端),灌 gDevData.run_record * @param out 输出缓冲(≥124B) * @return 无 */ void app_runrec_pack(uint8_t *out); /** * @brief 从 VM 解包 124B(uint32 大端) * @param in 输入缓冲 * @return 无 */ void app_runrec_unpack(const uint8_t *in); /** * @brief slot[0] 对应本地日期(yyyymmdd 打包) * @return 日期 */ uint32_t app_runrec_get_slot0_date(void); /** * @brief 设置 slot[0] 日期(对时/旋转后写回) * @param ymd yyyymmdd * @return 无 */ void app_runrec_set_slot0_date(uint32_t ymd); /** * @brief 清零 31 天记录与日期(出厂重置) * @return 无 */ void app_runrec_reset(void); #endif /* __APP_RUNREC_H__ */