From 51dfc3c3ce262433887c12d542d89a0d3c7ef3d4 Mon Sep 17 00:00:00 2001 From: Wuchuyuan <1917507415@qq.com> Date: Fri, 4 Sep 2026 12:33:00 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0DP=E7=BC=96=E5=8F=B7=E4=BB=A5?= =?UTF-8?q?=E7=A1=AE=E4=BF=9D=E8=BF=9E=E7=BB=AD=E6=80=A7=EF=BC=8C=E8=B0=83?= =?UTF-8?q?=E6=95=B4=E5=AE=9A=E6=97=B6=E7=9B=B8=E5=85=B3DP=E7=9A=84ID?= =?UTF-8?q?=EF=BC=8C=E4=BB=8EDP13-21=E6=94=B9=E4=B8=BADP7-15=EF=BC=8C?= =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E6=96=87=E6=A1=A3=E5=92=8C=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E4=B8=AD=E7=9A=84=E7=9B=B8=E5=85=B3=E5=BC=95=E7=94=A8=EF=BC=8C?= =?UTF-8?q?=E7=A1=AE=E4=BF=9D=E4=B8=8E=E6=9C=80=E6=96=B0=E5=8D=8F=E8=AE=AE?= =?UTF-8?q?=E4=B8=80=E8=87=B4=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Doc/温湿度风扇_固件需求规格书.md | 48 ++++++------ apps/usr_app/app_function.c | 4 +- apps/usr_app/app_function.h | 2 +- apps/usr_app/app_nvm.c | 6 +- apps/usr_app/app_nvm.h | 2 +- apps/usr_app/app_th.h | 2 +- apps/usr_app/app_timer_task.c | 4 +- apps/usr_app/app_timer_task.h | 4 +- apps/usr_jb_proto/Protocol/jb_product.c | 52 ++++++------- apps/usr_jb_proto/Protocol/jb_protocol.c | 94 ++++++++++++------------ apps/usr_jb_proto/Protocol/jb_protocol.h | 74 +++++++++---------- apps/usr_jb_proto/usr_jb_main.c | 4 +- dp_definition.json | 36 ++++----- 13 files changed, 167 insertions(+), 165 deletions(-) diff --git a/Doc/温湿度风扇_固件需求规格书.md b/Doc/温湿度风扇_固件需求规格书.md index 298aa32..5714e15 100644 --- a/Doc/温湿度风扇_固件需求规格书.md +++ b/Doc/温湿度风扇_固件需求规格书.md @@ -7,14 +7,16 @@ | 工程 | `温湿度风扇_soc_JieLi-JL7016` | | 产品码 | ProdtCode=`CBR3`,productCode=`PRCBR3` | | 协议 | 见宝 SOC 55AA,V1.0.0(2026-09-02 重生:删条件 DP,加联动 / 运行记录 / 心跳预留) | -| 文档版本 | V3.0.0 | -| 日期 | 2026.09.02 | +| 文档版本 | V3.0.1 | +| 日期 | 2026.09.04 | | 作者 | cyWu | | 读者 | WorkBuddy / 固件开发 | | 参考工程 | `D:\Jianbao\Project\产品\宠物\门夹弹力绳\门夹弹力绳_soc_JieLi-JL7016` | | 新协议生成工程 | `D:\Jianbao\Project\产品\爬宠\温湿度风扇\温湿度风扇_soc_JieLi-JL7016_新协议` | -> **V3.0.0 变更(2026-09-02):** 协议 DP 重生。删除 `cond_en` / `cond_config1~7`(7 组条件引擎整段作废)。新增 DP5 `linkage_delete`、DP6 `linkage_config`(20B,缸体 + 温湿度 min/max)、DP21 `run_record`(31 天运行秒数)、DP22 `heartbeat`(本版不做)。故障/告警/复位号后移,`factory_reset` 改为 DP27。联动按实时温湿度回差开 1 档 / 关风扇,不改 mode;仲裁改为手动 > 定时 > 联动。运行记录按风扇实际在转累加秒,满 10 分钟写 VM。生成协议 `MAX_PACKAGE_LEN` 必须改回 **256**(124B 的 `run_record` 装不进 128)。旧条件 VM **不迁移**。 +> **V3.0.1 变更(2026-09-04):** DP 号收紧为连续 0~24。`time_en` 13→7,`time_config1~7` 14~20→8~14,`run_record` 21→15,`heartbeat` 22→16,`fault_en/code` 23/24→17/18,`alarm_en/code` 25/26→19/20,`factory_reset` 27→21,`reserva_dp1~3` 28~30→22~24。7–12 不再空置。以 `jb_protocol.h` / `dp_definition.json` 为准。 +> +> **V3.0.0 变更(2026-09-02):** 协议 DP 重生。删除 `cond_en` / `cond_config1~7`(7 组条件引擎整段作废)。新增 DP5 `linkage_delete`、DP6 `linkage_config`(20B,缸体 + 温湿度 min/max)、当时号为 DP21 `run_record`(现 DP15)、DP22 `heartbeat`(现 DP16,本版不做)。故障/告警/复位号后移,当时 `factory_reset` 为 DP27(现 DP21)。联动按实时温湿度回差开 1 档 / 关风扇,不改 mode;仲裁改为手动 > 定时 > 联动。运行记录按风扇实际在转累加秒,满 10 分钟写 VM。生成协议 `MAX_PACKAGE_LEN` 必须改回 **256**(124B 的 `run_record` 装不进 128)。旧条件 VM **不迁移**。 > > **V2.2.0 变更(2026-08-31):** 顺着 V2.1.0 删 `app_power` 的思路,继续清掉同一类"保留但无调用者"的死代码:删除 `app_function_soft_off()` / `app_function_is_power_on()` / `app_function_power_on_silent()`,`gDevData.power` 恒为 1、写死在 `app_function_init()`(不再需要 `s_func.app_power` 状态字段);`usr_on_key_short()` 里对应的"软关态唤醒"死分支一并删除。 > @@ -32,7 +34,7 @@ ## 0. WorkBuddy 开干前必读(硬约束) -1. **先改协议再写业务。** 从 `_新协议` 工程拷贝已生成的 `jb_protocol.*` / `dp_definition.json` / `jb_product` 骨架,再把现有 `jb_product.c` 业务回调迁过去(禁止用空壳 TODO 覆盖业务)。拷贝后立刻把 `MAX_PACKAGE_LEN` 从生成值 **128 改回 256**,否则 DP21 `run_record`(124B)组不出完整帧。 +1. **先改协议再写业务。** 从 `_新协议` 工程拷贝已生成的 `jb_protocol.*` / `dp_definition.json` / `jb_product` 骨架,再把现有 `jb_product.c` 业务回调迁过去(禁止用空壳 TODO 覆盖业务)。拷贝后立刻把 `MAX_PACKAGE_LEN` 从生成值 **128 改回 256**,否则 DP15 `run_record`(124B)组不出完整帧。 2. **不要把业务算法写进 `jb_product.c`。** 只把 DP 写入 `gDevData` 并转调 `app_*`。组合根是 `usr_jb_main.c`(照门夹)。 3. **不要抄门夹的电池 / 低电拒绝开机。** 本机 USB 常电、无电池。**上电即开机**(V2.0.0 起,不再长按 3s 才开机);拔电即关,无软关机深睡。 4. **不要把调试 UART 放在 PC5。** 调试 UART TX = **PG6**(`IO_PORTG_06`)。PC5 是 AHT20 SDA(独立使用)。 @@ -42,7 +44,7 @@ 8. 日志全部 **英文**。中文只出现在注释和本文。 9. 编码风格对齐门夹 + 工程师规范:文件小写+下划线,`g_` / `s_` 前缀,枚举 `Pascal_t`,接口 `xxx_init` / `xxx_run` 或 tick / `xxx_get_status`。 10. **禁止继续实现 7 组条件引擎。** `app_cond` 整模块替换为联动(`app_linkage`);旧 `CFG_USER_CBR3_COND` 作废,不读旧 49B。 -11. **DP22 心跳本版忽略。** 温湿度仍按协议 2s 变化防抖 / 10min 全量上报,不因 12s 无心跳停报。 +11. **DP16 心跳本版忽略。** 温湿度仍按协议 2s 变化防抖 / 10min 全量上报,不因 12s 无心跳停报。 --- @@ -511,7 +513,7 @@ usr_rtc_get_time() 失败 → 全部定时不执行(等同 time_en=0) - APP 改联动/定时、单次定时自毁、档位/模式稳定变化:500ms 防抖(避免短按循环打爆 Flash) - 运行记录:风扇累计转满 **10 分钟** 写一次;**跨天旋转时立刻写**(见 13.1) -### 13.1 运行记录(DP21 `run_record`,RO,124B) +### 13.1 运行记录(DP15 `run_record`,RO,124B) 31 天 × 4 字节,每格 uint32 **大端**,单位秒: @@ -532,11 +534,11 @@ usr_rtc_get_time() 失败 → 全部定时不执行(等同 time_en=0) **落盘:** 每累计运行满 600 秒写一次 VM。跨天立刻写。拔电没有软关机钩子,**接受最多丢不满 10 分钟的秒数**。 -`BOARD_RUNREC_ENABLE=0`:不累加、DP21 报全 0。 +`BOARD_RUNREC_ENABLE=0`:不累加、DP15 报全 0。 --- -## 14. 出厂重置(DP27 写 1) +## 14. 出厂重置(DP21 写 1) - **清全部业务 VM**(第 13 章列表,含联动 20B 与 31 天运行记录)。 - **保留 BLE 配对,不断开、不软复位。** @@ -547,7 +549,7 @@ usr_rtc_get_time() 失败 → 全部定时不执行(等同 time_en=0) ## 15. BLE / DP 行为摘要 -身份:`CBR3` / `PRCBR3`。帧格式见已生成 `jb_protocol.h`(以 `_新协议` 拷贝后、`MAX_PACKAGE_LEN=256` 的头文件为准)。DP 号 7–12 空置,不要填回条件配置。 +身份:`CBR3` / `PRCBR3`。帧格式见已生成 `jb_protocol.h`(以 `_新协议` 拷贝后、`MAX_PACKAGE_LEN=256` 的头文件为准)。DP 号 0–24 连续,不要填回条件配置。 | DP | 处理 | |---|---| @@ -557,16 +559,16 @@ usr_rtc_get_time() 失败 → 全部定时不执行(等同 time_en=0) | 3/4 温湿度 | 仅上报。变化防抖 2s,全量 10min(协议已有) | | 5 linkage_delete | 第 10.4 节,脉冲 | | 6 linkage_config | 20 字节 memcpy + 存 VM + 第 10.5 节立刻重判 | -| 13 time_en | 见第 11 章 | -| 14~20 time_config | 8 字节 + 存 VM | -| 21 run_record | RO,由 `app_runrec` 填 124B,禁止 APP 写 | -| 22 heartbeat | 本版忽略(写了也不停温湿度上报) | -| 23 fault_en | 原样存,P0 不做位级过滤 | -| 24 fault_code | 0 无 / 1 传感器故障 / 2 预留 | -| 25 alarm_en | 原样存 | -| 26 alarm_code | 保持 0 | -| 27 factory_reset | 第 14 章 | -| 28~30 | 存 RAM,可不实现动作 | +| 7 time_en | 见第 11 章 | +| 8~14 time_config | 8 字节 + 存 VM | +| 15 run_record | RO,由 `app_runrec` 填 124B,禁止 APP 写 | +| 16 heartbeat | 本版忽略(写了也不停温湿度上报) | +| 17 fault_en | 原样存,P0 不做位级过滤 | +| 18 fault_code | 0 无 / 1 传感器故障 / 2 预留 | +| 19 alarm_en | 原样存 | +| 20 alarm_code | 保持 0 | +| 21 factory_reset | 第 14 章 | +| 22~24 reserva | 存 RAM,可不实现动作 | OTA:运行态按住 12s 走门夹 `usr_app_ota_init`(在 `app_function_loop` 任务上下文调用,灯效 200ms 闪)。`jbOnOtaNotify` 等协议 OTA **P2 可继续 stub**,注释写明未实现,禁止假装升级成功后擦用户区。 @@ -635,7 +637,7 @@ apps/usr_app/ - [ ] DP0 写 0 风扇不变、设备不关 - [ ] VM:改档/改模式/写下联动与定时后断电,重新上电从周期头恢复 mode - [ ] 定时引擎可只存不跑(`BOARD_TIMER_ENABLE=0` 仍能保存 DP) -- [ ] 新协议 DP 号:读不到旧的 cond_config;能读写 DP6 20B、能读 DP21 +- [ ] 新协议 DP 号:读不到旧的 cond_config;能读写 DP6 20B、能读 DP15 ### P2 — 自动化 @@ -717,7 +719,7 @@ apps/usr_app/ | 风险 | 要求 | |---|---| | JSON 对 DP6 只写了「温度 int8、湿度/版本 uint8」 | 以本文第 10.2 节 **先 min 后 max** 为准,不要猜成单阈值 | -| 生成协议 `MAX_PACKAGE_LEN=128` | **必须改 256**,否则 DP21 组帧失败 | +| 生成协议 `MAX_PACKAGE_LEN=128` | **必须改 256**,否则 DP15 组帧失败 | | 旧条件 49B VM | 不迁移、不解析;当无联动 | | CT1642 鬼影/异显微亮 | IO 独立不解决:单锁存 + 移位实时输出的固有特性,软件靠"值不变不刷新"/提速分时压;残余微亮需 Q2-Q9 加 1~10k 硬件下拉 | | 10k 上拉偏弱 | 软件 I2C 放慢;不行再提硬件改 4.7k(SDA 建议外部 4.7k) | @@ -735,9 +737,9 @@ apps/usr_app/ 1. 从 `_新协议` 拷贝 `jb_protocol.*` / `dp_definition.json`,`MAX_PACKAGE_LEN` 改 256;把现有 `jb_product.c` 业务迁到新 DP 号(不要用空壳覆盖)。 2. `app_nvm`:丢掉 cond 49B,改为 linkage 20B + run_record;升版本。 3. 新建 `app_linkage`(替换 `app_cond`),仲裁 owner 改为 LINKAGE。 -4. 新建 `app_runrec`:20ms 累加、10 分钟脏、对时旋转、灌 DP21。 +4. 新建 `app_runrec`:20ms 累加、10 分钟脏、对时旋转、灌 DP15。 5. `app_disp` 闪烁改 8.2(出 [min,max] 就闪)。 -6. `jbEventProcess`:DP5 脉冲删除、DP6 重写重判、DP22 忽略、DP27 出厂重置。 +6. `jbEventProcess`:DP5 脉冲删除、DP6 重写重判、DP16 忽略、DP21 出厂重置。 7. 按第 17 章 P2 用例逐条验。 每一步都保持对应 `BOARD_xxx_ENABLE` 可关。 diff --git a/apps/usr_app/app_function.c b/apps/usr_app/app_function.c index d4a8100..2d73dc9 100644 --- a/apps/usr_app/app_function.c +++ b/apps/usr_app/app_function.c @@ -4,7 +4,7 @@ * @author cyWu <1917507415@qq.com> * @date 2026.09.02 * @version V3.0.0(规格书 V3.0.0):app_cond → app_linkage/app_runrec; - * 出厂重置改清联动 20B + 31 天运行记录(DP27,规格书第 14 章) + * 出厂重置改清联动 20B + 31 天运行记录(DP21,规格书第 14 章) ******************************************************************************/ #include "system/includes.h" /* 必须先于 app_main.h:u8/u16/u32 等类型由 SDK 定义 */ @@ -81,7 +81,7 @@ void app_function_poll(void) { gDevData.fan_gear = app_fan_get_gear(); /* DP2 必须等于当前真实档位 */ gDevData.mode = app_mode_get_active(); - /* DP24 fault_code:传感器连续失败报 1;2 预留,温湿度出范围只走显示闪烁不上报(8.2) */ + /* DP18 fault_code:传感器连续失败报 1;2 预留,温湿度出范围只走显示闪烁不上报(8.2) */ gDevData.fault_code = app_th_is_fault() ? 1 : 0; } diff --git a/apps/usr_app/app_function.h b/apps/usr_app/app_function.h index 44cda33..14af688 100644 --- a/apps/usr_app/app_function.h +++ b/apps/usr_app/app_function.h @@ -4,7 +4,7 @@ * @author cyWu <1917507415@qq.com> * @date 2026.09.02 * @version V3.0.0(规格书 V3.0.0):app_cond → app_linkage/app_runrec; - * 出厂重置改 DP27、清联动 20B 与 31 天运行记录 + * 出厂重置改 DP21、清联动 20B 与 31 天运行记录 * * @note 本模块只做"按键 → 动作"和"状态 → DP",不写业务算法。 * 档位/模式/联动/运行记录的执行在各自 app_* 模块(规格书 0 章第 2 条)。 diff --git a/apps/usr_app/app_nvm.c b/apps/usr_app/app_nvm.c index 1bfd7de..6119e35 100644 --- a/apps/usr_app/app_nvm.c +++ b/apps/usr_app/app_nvm.c @@ -67,9 +67,9 @@ typedef struct { uint8_t ver; /**< CBR3_VM_VER */ uint8_t mode; /**< 逻辑模式 0/1/2 */ uint8_t fan_gear; /**< 真实档位 0~3(模式未激活时即手动档) */ - uint8_t time_en; /**< DP13 定时总开关 */ - uint8_t fault_en; /**< DP23 */ - uint8_t alarm_en; /**< DP25 */ + uint8_t time_en; /**< DP7 定时总开关 */ + uint8_t fault_en; /**< DP17 */ + uint8_t alarm_en; /**< DP19 */ uint8_t rsv[2]; /**< 对齐到 10B(原 cond_en 位置作废) */ } __packed Cbr3StateVm_t; diff --git a/apps/usr_app/app_nvm.h b/apps/usr_app/app_nvm.h index 115e636..a5a97ac 100644 --- a/apps/usr_app/app_nvm.h +++ b/apps/usr_app/app_nvm.h @@ -75,7 +75,7 @@ void app_nvm_mark_dirty(void); /** * @brief 出厂重置:清全部业务 VM(保留 BLE 配对,规格书第 14 章) - * @note 由 jb_product DP27 调用;RAM 复位由调用方完成 + * @note 由 jb_product DP21 调用;RAM 复位由调用方完成 * @return 无 */ void app_nvm_reset(void); diff --git a/apps/usr_app/app_th.h b/apps/usr_app/app_th.h index b01d3df..7b57975 100644 --- a/apps/usr_app/app_th.h +++ b/apps/usr_app/app_th.h @@ -6,7 +6,7 @@ * @version V1.3.0,对外温湿度与显示/上报绑死(T>=0.5℃ / H>=2%) * * @note 规格书 8.4:联动、数码管、DP3/DP4 都用对外温湿度;采样失败保持 - * 上一对外值继续判,直到连续 3 次失败显示 "--"(DP24 + * 上一对外值继续判,直到连续 3 次失败显示 "--"(DP18 * fault_code=1)。对外值首次跟上,之后 * |ΔT|>=BOARD_TH_TEMP_PUB_DELTA_X10、|ΔH|>=BOARD_TH_HUMI_PUB_DELTA * 才改,避免小数抖动导致显示、APP、联动各跳。 diff --git a/apps/usr_app/app_timer_task.c b/apps/usr_app/app_timer_task.c index ab2506a..ac809e8 100644 --- a/apps/usr_app/app_timer_task.c +++ b/apps/usr_app/app_timer_task.c @@ -242,7 +242,7 @@ void app_timer_run(uint16_t dt) } /** - * @brief APP 写 DP13 定时总开关:存 gDevData + 触发 VM 持久化 + * @brief APP 写 DP7 定时总开关:存 gDevData + 触发 VM 持久化 * @param en 0=关,1=开 * @note 引擎关闭时仍保存(P1 验收);置 1 后下个 tick 补窗判断 * @return 无 @@ -254,7 +254,7 @@ void app_timer_set_en(uint8_t en) } /** - * @brief APP 写 DP14~20 定时配置:触发 VM 持久化(数据已在 gDevData) + * @brief APP 写 DP8~14 定时配置:触发 VM 持久化(数据已在 gDevData) * @param idx 1~7 * @note 引擎关闭时仍保存 * @return 无 diff --git a/apps/usr_app/app_timer_task.h b/apps/usr_app/app_timer_task.h index 6d7a564..542f491 100644 --- a/apps/usr_app/app_timer_task.h +++ b/apps/usr_app/app_timer_task.h @@ -31,14 +31,14 @@ void app_timer_init(void); void app_timer_run(uint16_t dt); /** - * @brief APP 写 DP13 定时总开关 + * @brief APP 写 DP7 定时总开关 * @param en 0=关,1=开 * @return 无 */ void app_timer_set_en(uint8_t en); /** - * @brief APP 写 DP14~20 定时配置(8 字节) + * @brief APP 写 DP8~14 定时配置(8 字节) * @param idx 1~7 * @return 无 */ diff --git a/apps/usr_jb_proto/Protocol/jb_product.c b/apps/usr_jb_proto/Protocol/jb_product.c index d79bf4e..59bd865 100644 --- a/apps/usr_jb_proto/Protocol/jb_product.c +++ b/apps/usr_jb_proto/Protocol/jb_product.c @@ -50,30 +50,30 @@ void userInit(void) gDevData.current_humi = 0; /* DP4 当前湿度 */ gDevData.linkage_delete = 0; /* DP5 联动删除(脉冲,写 1 触发后清回 0) */ memset(gDevData.linkage_config, 0, 20); /* DP6 联动配置(20B,10.2 布局) */ - gDevData.time_en = 0; /* DP13 定时使能 0=关 1=开 */ - memset(gDevData.time_config1, 0, 8); /* DP14 定时配置1 */ - memset(gDevData.time_config2, 0, 8); /* DP15 定时配置2 */ - memset(gDevData.time_config3, 0, 8); /* DP16 定时配置3 */ - memset(gDevData.time_config4, 0, 8); /* DP17 定时配置4 */ - memset(gDevData.time_config5, 0, 8); /* DP18 定时配置5 */ - memset(gDevData.time_config6, 0, 8); /* DP19 定时配置6 */ - memset(gDevData.time_config7, 0, 8); /* DP20 定时配置7 */ - memset(gDevData.run_record, 0, 124); /* DP21 运行记录(RO,由 app_runrec 填) */ - gDevData.heartbeat = 0; /* DP22 心跳(本版忽略) */ - gDevData.fault_en = 0; /* DP23 设备故障使能 */ - gDevData.fault_code = 0; /* DP24 设备故障 */ - gDevData.alarm_en = 0; /* DP25 设备告警使能 */ - gDevData.alarm_code = 0; /* DP26 设备告警(保持 0) */ - gDevData.factory_reset = 0; /* DP27 恢复出厂设置(WO,写 1 触发) */ - gDevData.reserva_dp1 = 0; /* DP28 预留DP1 */ - gDevData.reserva_dp2 = 0; /* DP29 预留DP2 */ - gDevData.reserva_dp3 = 0; /* DP30 预留DP3 */ + gDevData.time_en = 0; /* DP7 定时使能 0=关 1=开 */ + memset(gDevData.time_config1, 0, 8); /* DP8 定时配置1 */ + memset(gDevData.time_config2, 0, 8); /* DP9 定时配置2 */ + memset(gDevData.time_config3, 0, 8); /* DP10 定时配置3 */ + memset(gDevData.time_config4, 0, 8); /* DP11 定时配置4 */ + memset(gDevData.time_config5, 0, 8); /* DP12 定时配置5 */ + memset(gDevData.time_config6, 0, 8); /* DP13 定时配置6 */ + memset(gDevData.time_config7, 0, 8); /* DP14 定时配置7 */ + memset(gDevData.run_record, 0, 124); /* DP15 运行记录(RO,由 app_runrec 填) */ + gDevData.heartbeat = 0; /* DP16 心跳(本版忽略) */ + gDevData.fault_en = 0; /* DP17 设备故障使能 */ + gDevData.fault_code = 0; /* DP18 设备故障 */ + gDevData.alarm_en = 0; /* DP19 设备告警使能 */ + gDevData.alarm_code = 0; /* DP20 设备告警(保持 0) */ + gDevData.factory_reset = 0; /* DP21 恢复出厂设置(WO,写 1 触发) */ + gDevData.reserva_dp1 = 0; /* DP22 预留DP1 */ + gDevData.reserva_dp2 = 0; /* DP23 预留DP2 */ + gDevData.reserva_dp3 = 0; /* DP24 预留DP3 */ } /* ════════════════════════════════════════════════════════════════ * userHandle — 用户数据采集(500ms 由 usr_timer_loop 调用) * 只填温湿度上报 DP;档位/模式/fault 由 app_function_poll(20ms)同步; - * DP21 运行记录由 app_runrec 在任务上下文灌 + * DP15 运行记录由 app_runrec 在任务上下文灌 * ════════════════════════════════════════════════════════════════ */ void userHandle(void) { @@ -135,13 +135,13 @@ int8_t jbEventProcess(jb_event_info_t *info, jb_data_point_t *ctrl) app_linkage_set_config(); break; - /* ── DP13 定时使能 ── */ + /* ── DP7 定时使能 ── */ case DP_ID_TIME_EN: gDevData.time_en = ctrl->time_en ? 1 : 0; app_timer_set_en(gDevData.time_en); break; - /* ── DP14~20 定时配置(8 字节)── */ + /* ── DP8~14 定时配置(8 字节)── */ case DP_ID_TIME_CONFIG1: memcpy(gDevData.time_config1, ctrl->time_config1, 8); app_timer_set_config(1); @@ -171,16 +171,16 @@ int8_t jbEventProcess(jb_event_info_t *info, jb_data_point_t *ctrl) app_timer_set_config(7); break; - /* ── DP21 运行记录:RO,禁止 APP 写(规格书第 15 章)── */ + /* ── DP15 运行记录:RO,禁止 APP 写(规格书第 15 章)── */ case DP_ID_RUN_RECORD: break; - /* ── DP22 心跳:本版忽略(规格书 0 章第 11 条 / 15 章)。 + /* ── DP16 心跳:本版忽略(规格书 0 章第 11 条 / 15 章)。 * 写了也不停温湿度上报,不做 12s 停报 ── */ case DP_ID_HEARTBEAT: break; - /* ── DP23/25 使能:原样存,P0 不做位级过滤 ── */ + /* ── DP17/19 使能:原样存,P0 不做位级过滤 ── */ case DP_ID_FAULT_EN: gDevData.fault_en = ctrl->fault_en; break; @@ -188,7 +188,7 @@ int8_t jbEventProcess(jb_event_info_t *info, jb_data_point_t *ctrl) gDevData.alarm_en = ctrl->alarm_en; break; - /* ── DP27 恢复出厂设置(原 DP25):清业务 VM(留配对)+ RAM 复位, + /* ── DP21 恢复出厂设置:清业务 VM(留配对)+ RAM 复位, * 不断开不软复位(规格书第 14 章)── */ case DP_ID_FACTORY_RESET: gDevData.factory_reset = ctrl->factory_reset ? 1 : 0; @@ -197,7 +197,7 @@ int8_t jbEventProcess(jb_event_info_t *info, jb_data_point_t *ctrl) } break; - /* ── DP28~30 预留:存 RAM,可不实现动作 ── */ + /* ── DP22~24 预留:存 RAM,可不实现动作 ── */ case DP_ID_RESERVA_DP1: gDevData.reserva_dp1 = ctrl->reserva_dp1; break; diff --git a/apps/usr_jb_proto/Protocol/jb_protocol.c b/apps/usr_jb_proto/Protocol/jb_protocol.c index 808fc2c..ae7d0eb 100644 --- a/apps/usr_jb_proto/Protocol/jb_protocol.c +++ b/apps/usr_jb_proto/Protocol/jb_protocol.c @@ -201,107 +201,107 @@ static uint16_t jbPackDps(const jb_data_point_t *dp, memcpy(&out[valIdx], dp->linkage_config, 20); valIdx += 20; } - /* DP13 定时使能 (bool, 1B, RW) */ + /* DP7 定时使能 (bool, 1B, RW) */ if (mask[DP_ID_TIME_EN / 8] & (1 << (DP_ID_TIME_EN % 8))) { bitmap[DP_ID_TIME_EN / 8] |= (1 << (DP_ID_TIME_EN % 8)); out[valIdx++] = dp->time_en ? 1 : 0; } - /* DP14 定时配置1 (raw, 8B, RW) */ + /* DP8 定时配置1 (raw, 8B, RW) */ if (mask[DP_ID_TIME_CONFIG1 / 8] & (1 << (DP_ID_TIME_CONFIG1 % 8))) { bitmap[DP_ID_TIME_CONFIG1 / 8] |= (1 << (DP_ID_TIME_CONFIG1 % 8)); memcpy(&out[valIdx], dp->time_config1, 8); valIdx += 8; } - /* DP15 定时配置2 (raw, 8B, RW) */ + /* DP9 定时配置2 (raw, 8B, RW) */ if (mask[DP_ID_TIME_CONFIG2 / 8] & (1 << (DP_ID_TIME_CONFIG2 % 8))) { bitmap[DP_ID_TIME_CONFIG2 / 8] |= (1 << (DP_ID_TIME_CONFIG2 % 8)); memcpy(&out[valIdx], dp->time_config2, 8); valIdx += 8; } - /* DP16 定时配置3 (raw, 8B, RW) */ + /* DP10 定时配置3 (raw, 8B, RW) */ if (mask[DP_ID_TIME_CONFIG3 / 8] & (1 << (DP_ID_TIME_CONFIG3 % 8))) { bitmap[DP_ID_TIME_CONFIG3 / 8] |= (1 << (DP_ID_TIME_CONFIG3 % 8)); memcpy(&out[valIdx], dp->time_config3, 8); valIdx += 8; } - /* DP17 定时配置4 (raw, 8B, RW) */ + /* DP11 定时配置4 (raw, 8B, RW) */ if (mask[DP_ID_TIME_CONFIG4 / 8] & (1 << (DP_ID_TIME_CONFIG4 % 8))) { bitmap[DP_ID_TIME_CONFIG4 / 8] |= (1 << (DP_ID_TIME_CONFIG4 % 8)); memcpy(&out[valIdx], dp->time_config4, 8); valIdx += 8; } - /* DP18 定时配置5 (raw, 8B, RW) */ + /* DP12 定时配置5 (raw, 8B, RW) */ if (mask[DP_ID_TIME_CONFIG5 / 8] & (1 << (DP_ID_TIME_CONFIG5 % 8))) { bitmap[DP_ID_TIME_CONFIG5 / 8] |= (1 << (DP_ID_TIME_CONFIG5 % 8)); memcpy(&out[valIdx], dp->time_config5, 8); valIdx += 8; } - /* DP19 定时配置6 (raw, 8B, RW) */ + /* DP13 定时配置6 (raw, 8B, RW) */ if (mask[DP_ID_TIME_CONFIG6 / 8] & (1 << (DP_ID_TIME_CONFIG6 % 8))) { bitmap[DP_ID_TIME_CONFIG6 / 8] |= (1 << (DP_ID_TIME_CONFIG6 % 8)); memcpy(&out[valIdx], dp->time_config6, 8); valIdx += 8; } - /* DP20 定时配置7 (raw, 8B, RW) */ + /* DP14 定时配置7 (raw, 8B, RW) */ if (mask[DP_ID_TIME_CONFIG7 / 8] & (1 << (DP_ID_TIME_CONFIG7 % 8))) { bitmap[DP_ID_TIME_CONFIG7 / 8] |= (1 << (DP_ID_TIME_CONFIG7 % 8)); memcpy(&out[valIdx], dp->time_config7, 8); valIdx += 8; } - /* DP21 运行记录 (raw, 124B, RO) */ + /* DP15 运行记录 (raw, 124B, RO) */ if (mask[DP_ID_RUN_RECORD / 8] & (1 << (DP_ID_RUN_RECORD % 8))) { bitmap[DP_ID_RUN_RECORD / 8] |= (1 << (DP_ID_RUN_RECORD % 8)); memcpy(&out[valIdx], dp->run_record, 124); valIdx += 124; } - /* DP23 设备故障使能 (uint8, 1B, RW) */ + /* DP17 设备故障使能 (uint8, 1B, RW) */ if (mask[DP_ID_FAULT_EN / 8] & (1 << (DP_ID_FAULT_EN % 8))) { bitmap[DP_ID_FAULT_EN / 8] |= (1 << (DP_ID_FAULT_EN % 8)); out[valIdx++] = (uint8_t)dp->fault_en; } - /* DP24 设备故障 (uint8, 1B, RO) */ + /* DP18 设备故障 (uint8, 1B, RO) */ if (mask[DP_ID_FAULT_CODE / 8] & (1 << (DP_ID_FAULT_CODE % 8))) { bitmap[DP_ID_FAULT_CODE / 8] |= (1 << (DP_ID_FAULT_CODE % 8)); out[valIdx++] = (uint8_t)dp->fault_code; } - /* DP25 设备告警使能 (uint8, 1B, RW) */ + /* DP19 设备告警使能 (uint8, 1B, RW) */ if (mask[DP_ID_ALARM_EN / 8] & (1 << (DP_ID_ALARM_EN % 8))) { bitmap[DP_ID_ALARM_EN / 8] |= (1 << (DP_ID_ALARM_EN % 8)); out[valIdx++] = (uint8_t)dp->alarm_en; } - /* DP26 设备告警 (uint8, 1B, RO) */ + /* DP20 设备告警 (uint8, 1B, RO) */ if (mask[DP_ID_ALARM_CODE / 8] & (1 << (DP_ID_ALARM_CODE % 8))) { bitmap[DP_ID_ALARM_CODE / 8] |= (1 << (DP_ID_ALARM_CODE % 8)); out[valIdx++] = (uint8_t)dp->alarm_code; } - /* DP28 预留DP1 (uint32, 4B, RW) */ + /* DP22 预留DP1 (uint32, 4B, RW) */ if (mask[DP_ID_RESERVA_DP1 / 8] & (1 << (DP_ID_RESERVA_DP1 % 8))) { bitmap[DP_ID_RESERVA_DP1 / 8] |= (1 << (DP_ID_RESERVA_DP1 % 8)); jbWriteU32BE(&out[valIdx], (uint32_t)dp->reserva_dp1); valIdx += 4; } - /* DP29 预留DP2 (uint32, 4B, RW) */ + /* DP23 预留DP2 (uint32, 4B, RW) */ if (mask[DP_ID_RESERVA_DP2 / 8] & (1 << (DP_ID_RESERVA_DP2 % 8))) { bitmap[DP_ID_RESERVA_DP2 / 8] |= (1 << (DP_ID_RESERVA_DP2 % 8)); jbWriteU32BE(&out[valIdx], (uint32_t)dp->reserva_dp2); valIdx += 4; } - /* DP30 预留DP3 (uint32, 4B, RW) */ + /* DP24 预留DP3 (uint32, 4B, RW) */ if (mask[DP_ID_RESERVA_DP3 / 8] & (1 << (DP_ID_RESERVA_DP3 % 8))) { bitmap[DP_ID_RESERVA_DP3 / 8] |= (1 << (DP_ID_RESERVA_DP3 % 8)); @@ -387,7 +387,7 @@ static void jbUnpackDps(const uint8_t *bitmap, const uint8_t *values, info->dp_ids[info->count++] = DP_ID_LINKAGE_CONFIG; } } - /* DP13 定时使能 (bool, 1B, RW) */ + /* DP7 定时使能 (bool, 1B, RW) */ if (bitmap[DP_ID_TIME_EN / 8] & (1 << (DP_ID_TIME_EN % 8))) { if (valIdx < valLen) @@ -399,7 +399,7 @@ static void jbUnpackDps(const uint8_t *bitmap, const uint8_t *values, info->dp_ids[info->count++] = DP_ID_TIME_EN; } } - /* DP14 定时配置1 (raw, 8B, RW) */ + /* DP8 定时配置1 (raw, 8B, RW) */ if (bitmap[DP_ID_TIME_CONFIG1 / 8] & (1 << (DP_ID_TIME_CONFIG1 % 8))) { if (valIdx + 8 <= valLen) @@ -412,7 +412,7 @@ static void jbUnpackDps(const uint8_t *bitmap, const uint8_t *values, info->dp_ids[info->count++] = DP_ID_TIME_CONFIG1; } } - /* DP15 定时配置2 (raw, 8B, RW) */ + /* DP9 定时配置2 (raw, 8B, RW) */ if (bitmap[DP_ID_TIME_CONFIG2 / 8] & (1 << (DP_ID_TIME_CONFIG2 % 8))) { if (valIdx + 8 <= valLen) @@ -425,7 +425,7 @@ static void jbUnpackDps(const uint8_t *bitmap, const uint8_t *values, info->dp_ids[info->count++] = DP_ID_TIME_CONFIG2; } } - /* DP16 定时配置3 (raw, 8B, RW) */ + /* DP10 定时配置3 (raw, 8B, RW) */ if (bitmap[DP_ID_TIME_CONFIG3 / 8] & (1 << (DP_ID_TIME_CONFIG3 % 8))) { if (valIdx + 8 <= valLen) @@ -438,7 +438,7 @@ static void jbUnpackDps(const uint8_t *bitmap, const uint8_t *values, info->dp_ids[info->count++] = DP_ID_TIME_CONFIG3; } } - /* DP17 定时配置4 (raw, 8B, RW) */ + /* DP11 定时配置4 (raw, 8B, RW) */ if (bitmap[DP_ID_TIME_CONFIG4 / 8] & (1 << (DP_ID_TIME_CONFIG4 % 8))) { if (valIdx + 8 <= valLen) @@ -451,7 +451,7 @@ static void jbUnpackDps(const uint8_t *bitmap, const uint8_t *values, info->dp_ids[info->count++] = DP_ID_TIME_CONFIG4; } } - /* DP18 定时配置5 (raw, 8B, RW) */ + /* DP12 定时配置5 (raw, 8B, RW) */ if (bitmap[DP_ID_TIME_CONFIG5 / 8] & (1 << (DP_ID_TIME_CONFIG5 % 8))) { if (valIdx + 8 <= valLen) @@ -464,7 +464,7 @@ static void jbUnpackDps(const uint8_t *bitmap, const uint8_t *values, info->dp_ids[info->count++] = DP_ID_TIME_CONFIG5; } } - /* DP19 定时配置6 (raw, 8B, RW) */ + /* DP13 定时配置6 (raw, 8B, RW) */ if (bitmap[DP_ID_TIME_CONFIG6 / 8] & (1 << (DP_ID_TIME_CONFIG6 % 8))) { if (valIdx + 8 <= valLen) @@ -477,7 +477,7 @@ static void jbUnpackDps(const uint8_t *bitmap, const uint8_t *values, info->dp_ids[info->count++] = DP_ID_TIME_CONFIG6; } } - /* DP20 定时配置7 (raw, 8B, RW) */ + /* DP14 定时配置7 (raw, 8B, RW) */ if (bitmap[DP_ID_TIME_CONFIG7 / 8] & (1 << (DP_ID_TIME_CONFIG7 % 8))) { if (valIdx + 8 <= valLen) @@ -490,7 +490,7 @@ static void jbUnpackDps(const uint8_t *bitmap, const uint8_t *values, info->dp_ids[info->count++] = DP_ID_TIME_CONFIG7; } } - /* DP22 心跳 (bool, 1B, WO) */ + /* DP16 心跳 (bool, 1B, WO) */ if (bitmap[DP_ID_HEARTBEAT / 8] & (1 << (DP_ID_HEARTBEAT % 8))) { if (valIdx < valLen) @@ -502,7 +502,7 @@ static void jbUnpackDps(const uint8_t *bitmap, const uint8_t *values, info->dp_ids[info->count++] = DP_ID_HEARTBEAT; } } - /* DP23 设备故障使能 (uint8, 1B, RW) */ + /* DP17 设备故障使能 (uint8, 1B, RW) */ if (bitmap[DP_ID_FAULT_EN / 8] & (1 << (DP_ID_FAULT_EN % 8))) { if (valIdx < valLen) @@ -514,7 +514,7 @@ static void jbUnpackDps(const uint8_t *bitmap, const uint8_t *values, info->dp_ids[info->count++] = DP_ID_FAULT_EN; } } - /* DP25 设备告警使能 (uint8, 1B, RW) */ + /* DP19 设备告警使能 (uint8, 1B, RW) */ if (bitmap[DP_ID_ALARM_EN / 8] & (1 << (DP_ID_ALARM_EN % 8))) { if (valIdx < valLen) @@ -526,7 +526,7 @@ static void jbUnpackDps(const uint8_t *bitmap, const uint8_t *values, info->dp_ids[info->count++] = DP_ID_ALARM_EN; } } - /* DP27 恢复出厂设置 (bool, 1B, WO) */ + /* DP21 恢复出厂设置 (bool, 1B, WO) */ if (bitmap[DP_ID_FACTORY_RESET / 8] & (1 << (DP_ID_FACTORY_RESET % 8))) { if (valIdx < valLen) @@ -538,7 +538,7 @@ static void jbUnpackDps(const uint8_t *bitmap, const uint8_t *values, info->dp_ids[info->count++] = DP_ID_FACTORY_RESET; } } - /* DP28 预留DP1 (uint32, 4B, RW) */ + /* DP22 预留DP1 (uint32, 4B, RW) */ if (bitmap[DP_ID_RESERVA_DP1 / 8] & (1 << (DP_ID_RESERVA_DP1 % 8))) { if (valIdx + 4 <= valLen) @@ -551,7 +551,7 @@ static void jbUnpackDps(const uint8_t *bitmap, const uint8_t *values, info->dp_ids[info->count++] = DP_ID_RESERVA_DP1; } } - /* DP29 预留DP2 (uint32, 4B, RW) */ + /* DP23 预留DP2 (uint32, 4B, RW) */ if (bitmap[DP_ID_RESERVA_DP2 / 8] & (1 << (DP_ID_RESERVA_DP2 % 8))) { if (valIdx + 4 <= valLen) @@ -564,7 +564,7 @@ static void jbUnpackDps(const uint8_t *bitmap, const uint8_t *values, info->dp_ids[info->count++] = DP_ID_RESERVA_DP2; } } - /* DP30 预留DP3 (uint32, 4B, RW) */ + /* DP24 预留DP3 (uint32, 4B, RW) */ if (bitmap[DP_ID_RESERVA_DP3 / 8] & (1 << (DP_ID_RESERVA_DP3 % 8))) { if (valIdx + 4 <= valLen) @@ -632,93 +632,93 @@ static uint8_t jbBuildDiffMask(const jb_data_point_t *last, mask[DP_ID_LINKAGE_CONFIG / 8] |= (1 << (DP_ID_LINKAGE_CONFIG % 8)); hasChange = 1; } - /* DP13 定时使能 */ + /* DP7 定时使能 */ if (last->time_en != cur->time_en) { mask[DP_ID_TIME_EN / 8] |= (1 << (DP_ID_TIME_EN % 8)); hasChange = 1; } - /* DP14 定时配置1 */ + /* DP8 定时配置1 */ if (memcmp(last->time_config1, cur->time_config1, 8)) { mask[DP_ID_TIME_CONFIG1 / 8] |= (1 << (DP_ID_TIME_CONFIG1 % 8)); hasChange = 1; } - /* DP15 定时配置2 */ + /* DP9 定时配置2 */ if (memcmp(last->time_config2, cur->time_config2, 8)) { mask[DP_ID_TIME_CONFIG2 / 8] |= (1 << (DP_ID_TIME_CONFIG2 % 8)); hasChange = 1; } - /* DP16 定时配置3 */ + /* DP10 定时配置3 */ if (memcmp(last->time_config3, cur->time_config3, 8)) { mask[DP_ID_TIME_CONFIG3 / 8] |= (1 << (DP_ID_TIME_CONFIG3 % 8)); hasChange = 1; } - /* DP17 定时配置4 */ + /* DP11 定时配置4 */ if (memcmp(last->time_config4, cur->time_config4, 8)) { mask[DP_ID_TIME_CONFIG4 / 8] |= (1 << (DP_ID_TIME_CONFIG4 % 8)); hasChange = 1; } - /* DP18 定时配置5 */ + /* DP12 定时配置5 */ if (memcmp(last->time_config5, cur->time_config5, 8)) { mask[DP_ID_TIME_CONFIG5 / 8] |= (1 << (DP_ID_TIME_CONFIG5 % 8)); hasChange = 1; } - /* DP19 定时配置6 */ + /* DP13 定时配置6 */ if (memcmp(last->time_config6, cur->time_config6, 8)) { mask[DP_ID_TIME_CONFIG6 / 8] |= (1 << (DP_ID_TIME_CONFIG6 % 8)); hasChange = 1; } - /* DP20 定时配置7 */ + /* DP14 定时配置7 */ if (memcmp(last->time_config7, cur->time_config7, 8)) { mask[DP_ID_TIME_CONFIG7 / 8] |= (1 << (DP_ID_TIME_CONFIG7 % 8)); hasChange = 1; } - /* DP21 运行记录:每秒都在变,不参与差分上报(避免 2s 防抖推 124B)。 + /* DP15 运行记录:每秒都在变,不参与差分上报(避免 2s 防抖推 124B)。 * 读请求与 REPORT_PERIOD 全量仍带当前 gDevData.run_record。 */ - /* DP23 设备故障使能 */ + /* DP17 设备故障使能 */ if (last->fault_en != cur->fault_en) { mask[DP_ID_FAULT_EN / 8] |= (1 << (DP_ID_FAULT_EN % 8)); hasChange = 1; } - /* DP24 设备故障 */ + /* DP18 设备故障 */ if (last->fault_code != cur->fault_code) { mask[DP_ID_FAULT_CODE / 8] |= (1 << (DP_ID_FAULT_CODE % 8)); hasChange = 1; } - /* DP25 设备告警使能 */ + /* DP19 设备告警使能 */ if (last->alarm_en != cur->alarm_en) { mask[DP_ID_ALARM_EN / 8] |= (1 << (DP_ID_ALARM_EN % 8)); hasChange = 1; } - /* DP26 设备告警 */ + /* DP20 设备告警 */ if (last->alarm_code != cur->alarm_code) { mask[DP_ID_ALARM_CODE / 8] |= (1 << (DP_ID_ALARM_CODE % 8)); hasChange = 1; } - /* DP28 预留DP1 */ + /* DP22 预留DP1 */ if (last->reserva_dp1 != cur->reserva_dp1) { mask[DP_ID_RESERVA_DP1 / 8] |= (1 << (DP_ID_RESERVA_DP1 % 8)); hasChange = 1; } - /* DP29 预留DP2 */ + /* DP23 预留DP2 */ if (last->reserva_dp2 != cur->reserva_dp2) { mask[DP_ID_RESERVA_DP2 / 8] |= (1 << (DP_ID_RESERVA_DP2 % 8)); hasChange = 1; } - /* DP30 预留DP3 */ + /* DP24 预留DP3 */ if (last->reserva_dp3 != cur->reserva_dp3) { mask[DP_ID_RESERVA_DP3 / 8] |= (1 << (DP_ID_RESERVA_DP3 % 8)); diff --git a/apps/usr_jb_proto/Protocol/jb_protocol.h b/apps/usr_jb_proto/Protocol/jb_protocol.h index 4914f34..c3c70af 100644 --- a/apps/usr_jb_proto/Protocol/jb_protocol.h +++ b/apps/usr_jb_proto/Protocol/jb_protocol.h @@ -23,7 +23,7 @@ * ════════════════════════════════════════════════════════════════ */ #define PKT_HEAD_0 0x55 #define PKT_HEAD_1 0xAA -/* ⚠ 生成器给的是 128,必须改回 256:DP21 run_record 124B,加 bitmap(4B) 与 +/* ⚠ 生成器给的是 128,必须改回 256:DP15 run_record 124B,加 bitmap(4B) 与 * cmd/sn/cksum 开销后 128B 组不出完整帧(规格书第 0 章第 1 条 / 第 19 章)。 * 每次从生成器重新拷贝 jb_protocol.h 后都要重新确认本值。 */ #define MAX_PACKAGE_LEN 256 @@ -128,24 +128,24 @@ typedef enum DP_ID_CURRENT_HUMI = 4, /* 当前湿度 (uint8, RO) */ DP_ID_LINKAGE_DELETE = 5, /* 联动删除 (bool, RW) */ DP_ID_LINKAGE_CONFIG = 6, /* 联动配置 (raw, RW) */ - DP_ID_TIME_EN = 13, /* 定时使能 (bool, RW) */ - DP_ID_TIME_CONFIG1 = 14, /* 定时配置1 (raw, RW) */ - DP_ID_TIME_CONFIG2 = 15, /* 定时配置2 (raw, RW) */ - DP_ID_TIME_CONFIG3 = 16, /* 定时配置3 (raw, RW) */ - DP_ID_TIME_CONFIG4 = 17, /* 定时配置4 (raw, RW) */ - DP_ID_TIME_CONFIG5 = 18, /* 定时配置5 (raw, RW) */ - DP_ID_TIME_CONFIG6 = 19, /* 定时配置6 (raw, RW) */ - DP_ID_TIME_CONFIG7 = 20, /* 定时配置7 (raw, RW) */ - DP_ID_RUN_RECORD = 21, /* 运行记录 (raw, RO) */ - DP_ID_HEARTBEAT = 22, /* 心跳 (bool, WO) */ - DP_ID_FAULT_EN = 23, /* 设备故障使能 (uint8, RW) */ - DP_ID_FAULT_CODE = 24, /* 设备故障 (uint8, RO) */ - DP_ID_ALARM_EN = 25, /* 设备告警使能 (uint8, RW) */ - DP_ID_ALARM_CODE = 26, /* 设备告警 (uint8, RO) */ - DP_ID_FACTORY_RESET = 27, /* 恢复出厂设置 (bool, WO) */ - DP_ID_RESERVA_DP1 = 28, /* 预留DP1 (uint32, RW) */ - DP_ID_RESERVA_DP2 = 29, /* 预留DP2 (uint32, RW) */ - DP_ID_RESERVA_DP3 = 30, /* 预留DP3 (uint32, RW) */ + DP_ID_TIME_EN = 7, /* 定时使能 (bool, RW) */ + DP_ID_TIME_CONFIG1 = 8, /* 定时配置1 (raw, RW) */ + DP_ID_TIME_CONFIG2 = 9, /* 定时配置2 (raw, RW) */ + DP_ID_TIME_CONFIG3 = 10, /* 定时配置3 (raw, RW) */ + DP_ID_TIME_CONFIG4 = 11, /* 定时配置4 (raw, RW) */ + DP_ID_TIME_CONFIG5 = 12, /* 定时配置5 (raw, RW) */ + DP_ID_TIME_CONFIG6 = 13, /* 定时配置6 (raw, RW) */ + DP_ID_TIME_CONFIG7 = 14, /* 定时配置7 (raw, RW) */ + DP_ID_RUN_RECORD = 15, /* 运行记录 (raw, RO) */ + DP_ID_HEARTBEAT = 16, /* 心跳 (bool, WO) */ + DP_ID_FAULT_EN = 17, /* 设备故障使能 (uint8, RW) */ + DP_ID_FAULT_CODE = 18, /* 设备故障 (uint8, RO) */ + DP_ID_ALARM_EN = 19, /* 设备告警使能 (uint8, RW) */ + DP_ID_ALARM_CODE = 20, /* 设备告警 (uint8, RO) */ + DP_ID_FACTORY_RESET = 21, /* 恢复出厂设置 (bool, WO) */ + DP_ID_RESERVA_DP1 = 22, /* 预留DP1 (uint32, RW) */ + DP_ID_RESERVA_DP2 = 23, /* 预留DP2 (uint32, RW) */ + DP_ID_RESERVA_DP3 = 24, /* 预留DP3 (uint32, RW) */ DP_ID_MAX } dp_id_t; @@ -210,24 +210,24 @@ typedef struct uint8_t current_humi; /* DP4 当前湿度 */ uint8_t linkage_delete;/* DP5 联动删除 */ uint8_t linkage_config[20];/* DP6 联动配置 */ - uint8_t time_en; /* DP13 定时使能 */ - uint8_t time_config1[8];/* DP14 定时配置1 */ - uint8_t time_config2[8];/* DP15 定时配置2 */ - uint8_t time_config3[8];/* DP16 定时配置3 */ - uint8_t time_config4[8];/* DP17 定时配置4 */ - uint8_t time_config5[8];/* DP18 定时配置5 */ - uint8_t time_config6[8];/* DP19 定时配置6 */ - uint8_t time_config7[8];/* DP20 定时配置7 */ - uint8_t run_record[124];/* DP21 运行记录 */ - uint8_t heartbeat; /* DP22 心跳 */ - uint8_t fault_en; /* DP23 设备故障使能 */ - uint8_t fault_code; /* DP24 设备故障 */ - uint8_t alarm_en; /* DP25 设备告警使能 */ - uint8_t alarm_code; /* DP26 设备告警 */ - uint8_t factory_reset;/* DP27 恢复出厂设置 */ - uint32_t reserva_dp1; /* DP28 预留DP1 */ - uint32_t reserva_dp2; /* DP29 预留DP2 */ - uint32_t reserva_dp3; /* DP30 预留DP3 */ + uint8_t time_en; /* DP7 定时使能 */ + uint8_t time_config1[8];/* DP8 定时配置1 */ + uint8_t time_config2[8];/* DP9 定时配置2 */ + uint8_t time_config3[8];/* DP10 定时配置3 */ + uint8_t time_config4[8];/* DP11 定时配置4 */ + uint8_t time_config5[8];/* DP12 定时配置5 */ + uint8_t time_config6[8];/* DP13 定时配置6 */ + uint8_t time_config7[8];/* DP14 定时配置7 */ + uint8_t run_record[124];/* DP15 运行记录 */ + uint8_t heartbeat; /* DP16 心跳 */ + uint8_t fault_en; /* DP17 设备故障使能 */ + uint8_t fault_code; /* DP18 设备故障 */ + uint8_t alarm_en; /* DP19 设备告警使能 */ + uint8_t alarm_code; /* DP20 设备告警 */ + uint8_t factory_reset;/* DP21 恢复出厂设置 */ + uint32_t reserva_dp1; /* DP22 预留DP1 */ + uint32_t reserva_dp2; /* DP23 预留DP2 */ + uint32_t reserva_dp3; /* DP24 预留DP3 */ } jb_data_point_t; /* 控制事件信息 */ diff --git a/apps/usr_jb_proto/usr_jb_main.c b/apps/usr_jb_proto/usr_jb_main.c index 699f360..1fafe5c 100644 --- a/apps/usr_jb_proto/usr_jb_main.c +++ b/apps/usr_jb_proto/usr_jb_main.c @@ -4,7 +4,7 @@ * @author cyWu <1917507415@qq.com> * @date 2026.09.02 * @version V3.0.0,规格书 V3.0.0:条件引擎(app_cond)整模块删除,换 - * app_linkage(DP5/DP6,联动)+ app_runrec(DP21,31 天运行记录); + * app_linkage(DP5/DP6,联动)+ app_runrec(DP15,31 天运行记录); * 20ms 节拍加 app_runrec_tick,500ms 任务上下文加 * app_linkage_run / app_runrec_rotate_if_needed * @@ -185,6 +185,6 @@ void usr_timer_loop(void) jbProtocolHandle(&gDevData); app_timer_run(500); /* 定时引擎(RTC 门闩 + 窗判断;窗结束会调联动重判) */ app_linkage_run(500); /* 联动引擎(任务上下文;仲裁见 app_arbiter) */ - app_runrec_rotate_if_needed(); /* 收下 pending、每拍灌 DP21;满 10 分钟/跨天才写 VM */ + app_runrec_rotate_if_needed(); /* 收下 pending、每拍灌 DP15;满 10 分钟/跨天才写 VM */ app_function_loop(); /* 任务上下文:VM 防抖落盘 + 配对/OTA 动作落地 */ } diff --git a/dp_definition.json b/dp_definition.json index a9f8d82..e0bf0f2 100644 --- a/dp_definition.json +++ b/dp_definition.json @@ -106,7 +106,7 @@ "values": {} }, { - "id": 13, + "id": 7, "display_name": "定时使能", "key": "time_en", "kind": "normal", @@ -121,7 +121,7 @@ } }, { - "id": 14, + "id": 8, "display_name": "定时配置1", "key": "time_config1", "kind": "normal", @@ -133,7 +133,7 @@ "values": {} }, { - "id": 15, + "id": 9, "display_name": "定时配置2", "key": "time_config2", "kind": "normal", @@ -145,7 +145,7 @@ "values": {} }, { - "id": 16, + "id": 10, "display_name": "定时配置3", "key": "time_config3", "kind": "normal", @@ -157,7 +157,7 @@ "values": {} }, { - "id": 17, + "id": 11, "display_name": "定时配置4", "key": "time_config4", "kind": "normal", @@ -169,7 +169,7 @@ "values": {} }, { - "id": 18, + "id": 12, "display_name": "定时配置5", "key": "time_config5", "kind": "normal", @@ -181,7 +181,7 @@ "values": {} }, { - "id": 19, + "id": 13, "display_name": "定时配置6", "key": "time_config6", "kind": "normal", @@ -193,7 +193,7 @@ "values": {} }, { - "id": 20, + "id": 14, "display_name": "定时配置7", "key": "time_config7", "kind": "normal", @@ -205,7 +205,7 @@ "values": {} }, { - "id": 21, + "id": 15, "display_name": "运行记录", "key": "run_record", "kind": "normal", @@ -217,7 +217,7 @@ "values": {} }, { - "id": 22, + "id": 16, "display_name": "心跳", "key": "heartbeat", "kind": "normal", @@ -232,7 +232,7 @@ } }, { - "id": 23, + "id": 17, "display_name": "设备故障使能", "key": "fault_en", "kind": "normal", @@ -244,7 +244,7 @@ "values": {} }, { - "id": 24, + "id": 18, "display_name": "设备故障", "key": "fault_code", "kind": "fault", @@ -261,7 +261,7 @@ "level": 2 }, { - "id": 25, + "id": 19, "display_name": "设备告警使能", "key": "alarm_en", "kind": "normal", @@ -273,7 +273,7 @@ "values": {} }, { - "id": 26, + "id": 20, "display_name": "设备告警", "key": "alarm_code", "kind": "alarm", @@ -286,7 +286,7 @@ "level": 1 }, { - "id": 27, + "id": 21, "display_name": "恢复出厂设置", "key": "factory_reset", "kind": "normal", @@ -300,7 +300,7 @@ } }, { - "id": 28, + "id": 22, "display_name": "预留DP1", "key": "reserva_dp1", "kind": "normal", @@ -312,7 +312,7 @@ "values": {} }, { - "id": 29, + "id": 23, "display_name": "预留DP2", "key": "reserva_dp2", "kind": "normal", @@ -324,7 +324,7 @@ "values": {} }, { - "id": 30, + "id": 24, "display_name": "预留DP3", "key": "reserva_dp3", "kind": "normal",