feat(vd960DBN): TCP/MQTT log_* 命令支持快照流 stream=snapshot (2026-08-18)

- snapshot.c/h: 新增 snap_rec_to_json() — SnapRec 64B → JSON (channels 对齐 0xC0, variation 3B 符号扩展, misc_type 全枚举)
- tcp_json_srv.c: handle_log_stat/query/clear 加 stream 解析 + snapshot 分支
- iot_mqtt_srv.c: log_stat/query/clear 加 stream 解析 + snapshot 分支
- 事件流 count=0 按上限处理 (与 BLE 对齐); 快照 QUERY count≤2, CLEAR ~45ms
- 新增 gcc 隔离单测 tests/test_snap_to_json.c 34 断言全过
- devlog V4.1
This commit is contained in:
wangfq
2026-08-18 09:01:22 +08:00
parent e437dce556
commit f1c9358aad
6 changed files with 444 additions and 65 deletions
+37
View File
@@ -4,6 +4,42 @@
>
> 项目定位: DLD960 通信板 — BLE 配网、TCP JSON 协议服务、Loop MCU 串口桥接
## 2026-08-18 — TCP/MQTT 脱机日志快照流支持(协议 V1.03/V1.07 落地)
### 背景
协议文档先行(TCP JSON V1.03 + IoT MQTT V1.072026-08-18):`log_stat` / `log_query` / `log_clear` 通过 `data.stream` 区分 `event` / `snapshot` 流(BLE 0x28/0x29/0x2A 的网络通道对称语义)。固件侧此前只实现事件流(offlog_*),快照流缺失——本次补齐。
### 变更
| 文件 | 变更 |
|------|------|
| `snapshot.c/h` | 新增 `snap_rec_to_json()`SnapRec 64B 原始结构 → JSONchannels 对齐 0xC0 传感单元,variation 3B 符号扩展,misc_type 全枚举 time/cut_count/flow_count/relay_count |
| `tcp_json_srv.c` | `handle_log_stat/log_query/log_clear``stream` 解析 + snapshot 分支(snap_* API);事件流 count=0 按上限处理(与 BLE 对齐) |
| `iot_mqtt_srv.c` | `log_stat/log_query/log_clear``stream` 解析 + snapshot 分支;同上 |
### 关键决策
- **复用 log_* 命令 + stream 字段**(协议 V1.00 即预留"快照流预留"),不新增命令码;与 BLE 侧独立命令(SNAP_*)不同,JSON 协议命令面保持 18 条不变
- 快照 QUERY `count≤2``SNAP_MAX_QUERY_RECORDS=2`64B×2 记录),事件流仍 ≤4
- 快照 CLEAR 阻塞 ~45ms(逻辑清除+当前写扇区),事件流 ~2.8s 不变
- `capacity`/`count` JSON 类型 uint32W25Q256 事件流 130944 超 16bit,原文档 uint16 标注修正)
- `snap_rec_to_json` 放 snapshot.c 公共模块,TCP/MQTT 两路共用(避免重复序列化代码)
### 验证
- gcc 隔离单测 `tests/test_snap_to_json.c`:**34 断言全过**(高频/低频/方向判别/初始频率、负 variation -10 符号扩展、misc_type 全枚举、loop_ok/has_car 位解析、空记录 coil_count=0 边界)
- `check_c_balance.py` 5 文件 OKtcp_json_srv.c / iot_mqtt_srv.c / snapshot.c / snapshot.h ×2
- `simple_parse_json` 字符串提取语义确认:去引号取内容,`strcmp(stream,"snapshot")` 成立
- 待板级验证:MRS 真编译 + 真机 TCP/MQTT `log_query stream=snapshot`
### 注意
- 固件版本未升(仍 1.02.01),随下次发版统一
- 协议文档已先行(V1.03/V1.07),固件本次同步跟上(README/规格书/产品手册索引已同步)
---
## 2026-08-17 — 频繁"复位"根因闭环:.bss 挤占 RAM → 栈溢出 → PC 跑飞
### 背景
@@ -1271,6 +1307,7 @@ TCP 超时要等 ~2 分钟才触发 `SINT_STAT_TIM_OUT`,
| 版本 | 时间 | 说明 |
|------|------|------|
| V4.1 | 2026-08-18 | TCP/MQTT 脱机日志快照流: log_stat/log_query/log_clear 支持 stream=snapshot (协议 V1.03/V1.07), snap_rec_to_json 序列化, 事件流 count=0 按上限 |
| V4.0 | 2026-08-10 | BLE 脱机日志接口: OFFLOG_STAT/QUERY/CLEAR (0x25/0x26/0x27), 32B OfflogEvt 二进制直传, 缓冲扩容 132B, 隔离测试 7 例 + 协议文档 V1.00 |
| V3.9 | 2026-08-05 | offlog 协议导出命令分发: log_stat/log_query/log_clear 落地 MQTT V1.06 + TCP JSON V1.02 (seq_first/seq_last 计算、idx 映射、OFFLOG_MAX_QUERY_RECORDS=4、log_clear 阻塞~2.8s) |
| V3.8 | 2026-08-04 | offlog: TIME_ANCHOR 严格用平台下发 unix_ts (offlog_evt_ts), 单测 7 例 |