40 lines
2.4 KiB
Markdown
40 lines
2.4 KiB
Markdown
# 修改记录 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 流程不受影响。
|