P0/P1/P2功能实现:接入业务组合根(按键/LED/过零/配网/OTA),联动、11B定时、运行记录、灯泡寿命(DP3/DP4/DP25)、CBR0 VM、512分包

This commit is contained in:
2026-09-08 11:44:20 +08:00
parent 61821de0f8
commit 426bb8dab6
52 changed files with 6042 additions and 313 deletions
+65
View File
@@ -0,0 +1,65 @@
/******************************************************************************
* @file app_light_life.h
* @brief 灯泡剩余寿命(规格书 13.2 节,DP2/DP3/DP4/DP25
* @author cyWu <1917507415@qq.com>
* @date 2026.09.08
* @version V1.0.0
*
* @note 额定工时 2592000s(30 天),按继电器**实际吸合**每秒扣 1;
* 扣到 0 停住不回绕,置 alarm_code=1(灯泡到期告警,粘住)但**不互锁**,
* 灯仍可手动/定时/联动再开(第 12 章仲裁不参与)。
* DP3 上报节流:平时满 60s 才同步一次 gDevData(协议层 2s 防抖后
* 自然最多 60s 一包);到期 / DP4 / APP 写 DP3 / 出厂复位走边沿
* **立刻**同步 + 落盘(任务上下文,禁止 ISR 写 VM)。
* 剩余寿命持久化随运行记录 item(与 runrec 同写节奏 600s,边沿立刻)。
******************************************************************************/
#ifndef __APP_LIGHT_LIFE_H__
#define __APP_LIGHT_LIFE_H__
#include <stdint.h>
/**
* @brief 初始化剩余寿命:RAM 复位为额定值,告警按值推导
* @note 之后 app_nvm_load 若 VM 有效会调 app_light_life_set_remain 覆盖
* @return 无
*/
void app_light_life_init(void);
/**
* @brief 20ms 业务节拍(中断上下文):实际吸合才折秒扣减
* @param dt 距上次调用的毫秒数
* @note ISR 只碰 s_lifeRAM);gDevData 同步 / 落盘 / 上报在 app_light_life_loop
* @return 无
*/
void app_light_life_tick(uint16_t dt);
/**
* @brief 500ms 任务上下文:60s 节流同步 DP3、边沿立刻同步 + 落盘、推导告警
* @return 无
*/
void app_light_life_loop(void);
/**
* @brief 设置剩余寿命(APP 写 DP3 / VM 恢复 / 出厂复位共用,任务上下文)
* @param remain 剩余寿命秒,范围 0~0xFFFFFFFF 不封顶
* @note 立刻生效:同步 gDevData + 推导 alarm_code + 立刻落盘 + 变化上报由
* 协议层差分自动发出(2s 防抖后);remain>0 清到期告警,=0 置告警
* @return 无
*/
void app_light_life_set_remain(uint32_t remain);
/**
* @brief 灯泡复位(DP4 写 1):剩余寿命回到额定值、告警清 0
* @note WO 不上报;由 jb_product DP4 调用;边沿立刻落盘
* @return 无
*/
void app_light_life_reset(void);
/**
* @brief 查询剩余寿命
* @return 剩余寿命秒
*/
uint32_t app_light_life_get_remain(void);
#endif /* __APP_LIGHT_LIFE_H__ */