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