更新DP编号以确保连续性,调整定时相关DP的ID,从DP13-21改为DP7-15,修正文档和代码中的相关引用,确保与最新协议一致。

This commit is contained in:
2026-09-04 12:33:00 +08:00
parent 408c25bd5c
commit 51dfc3c3ce
13 changed files with 167 additions and 165 deletions
+25 -23
View File
@@ -7,14 +7,16 @@
| 工程 | `温湿度风扇_soc_JieLi-JL7016` |
| 产品码 | ProdtCode=`CBR3`productCode=`PRCBR3` |
| 协议 | 见宝 SOC 55AAV1.0.02026-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。712 不再空置。以 `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`RO124B
### 13.1 运行记录(DP15 `run_record`RO124B
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 号 712 空置,不要填回条件配置。
身份:`CBR3` / `PRCBR3`。帧格式见已生成 `jb_protocol.h`(以 `_新协议` 拷贝后、`MAX_PACKAGE_LEN=256` 的头文件为准)。DP 号 024 连续,不要填回条件配置。
| 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` 可关。