mothercup/SmartAssiter/docs/修改记录_2026-09-04_设备参数只读特征.md
2026-09-04 08:56:15 +08:00

40 lines
2.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 修改记录 2026-09-04:设备参数改为只读特征 + App 定时读
设备参数查看(温度/风扇/电压/版本/uptime/heap)从「INFO_QUERY 帧 + notify 应答」
改为「只读特征 + App 定时 read」,不再依赖 notify 上行通道。
## GATT 变更(固件 mcm-ddc-ble V1.00.04)
- 新增只读特征 `00002760-08c2-11e1-9073-0e8ac72e0004`(`MCM_INFO_UUID`):
读出内容为全部信息项的 TLV 序列 `{id u8, len u8, value…}×n`(数值小端),
与 INFO_RSP(all) 帧 payload 完全一致。信息项 id 不变:
0x01 FW_VERSION(u32)、0x02 CHIP_TEMP(i16, 0.1℃, 0x7FFF=失败)、
0x03 FAN_RPM(u16, 0xFFFF=无硬件)、0x04 VDD_MV(u16, 0=失败)、
0x05 UPTIME_S(u32)、0x06 FREE_HEAP(u32)。
- 既有特征不变:`...e0001`(帧协议下行,无响应写)、`...e0002`(notify 上行)、
`...e0003`(CLI 读写特征:写原始命令行、读输出文本,V1.00.02 新增)。
- 固件侧实现:`app_info.c` 抽出 `app_info_tlv_snapshot()`(INFO_QUERY 帧应答与其
共用同一组包逻辑);`app_rdtss.c` 读请求按 `att_idx` 分发(CLI_VAL → 命令输出,
INFO_VAL → TLV 快照,其余保持原 "NSING" 行为)。
- 附带修复(V1.00.03):芯片温度采样前先给 TS 5ms 稳定时间并丢弃第一次转换,
修复 `devinfo`/INFO_QUERY 温度显示 287.6°C 的问题(传感器未稳定即采样)。
## App 侧修改
- `src/BluetoothManager.ts`:新增 `MCM_INFO_UUID` 常量与 `readInfoChar(cb)`;
`onBLECharacteristicValueChange` 监听重构为 `ensureValueChangeListener()`,
notify 数据与 read 结果按特征 UUID 分发(uni 的读结果经此回调返回);
读操作带 3s 超时。
- `src/mcm/McmInfo.ts`:新增 `readDeviceInfo()`,读参数特征并复用 `parseTlv` 解析;
原 `queryDeviceInfo()`(帧协议 INFO_QUERY)保留。
- `pages/tabbar/home.vue`:参数轮询 `pollParams()` 从 `queryDeviceInfo` 切到
`readDeviceInfo`,一次读出全部项取温度+风扇。
## 验证
- 固件 `UV4 -r` 全量重建 0 Error / 0 Warning;`tools/out/caiic_ble_full.hex` 出包,
OTA 清单 version=0x00010004。
- PC 侧验证(烧录后):`tools\ble_cli.bat param` 读参数特征并解析 TLV;
`tools\ble_cli.bat -rw help` 验证 CLI 读写特征。
- 真机回归:主页温度/风扇显示(轮询走 read),CLI 终端、OTA 流程不受影响。