SmartAssiter-Discard/docs/修改记录_2026-09-02_母乳杯蓝牙改造.md
2026-09-02 16:10:57 +08:00

78 lines
5.5 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-02:母乳杯(CAIIC-MCM)蓝牙改造
将原充电桩 App 改造为母乳杯设备 App:通过蓝牙显示设备参数(温度、风扇转速)、
查询设备系统运行状态、本地固件文件经 BLE OTA 升级设备。
设备协议依据 `D:\caic-workspace\mothercup\mcm-ddc-04\docs\ble_protocol.md`(CAIIC BLE 通信协议 V1.0)。
## 协议要点(设备侧已实现)
- GATT:Service `0000CA10-CA11-4B11-8000-CA11CA11CA11`,下行写特征 `...CA11...`
(**仅 Write Without Response**),上行 notify `...CA12...`;广播名 `CAIIC-MCM`;建议 MTU=247。
- 二进制帧(小端):`[0xCA, TYPE, SEQ, LEN(u16), PAYLOAD, CRC16-CCITT(0x1021/初值0xFFFF)]`,
开销 7 字节,payload ≤480;一帧可跨多次 BLE 写入,设备按字节流重组。
- 帧类型:0x01 CLI_REQ / 0x02 CLI_RSP / 0x03 CLI_RSP_END;0x10 OTA_BEGIN /
0x11 OTA_DATA / 0x12 OTA_END / 0x1F OTA_RSP。
- OTA:双 bank 直写,设备 4KB 扇区缓冲,满扇区回 OTA_RSP(0x11) 作流控;status=2 按应答
offset 重发重同步;OTA_END 整镜像 CRC32(zlib/IEEE)校验通过后设备 200ms 自动复位切 bank。
## 新增文件
- `src/mcm/Crc.uts` — CRC16-CCITT 与 CRC32-IEEE(zlib)实现。注意 uts number 位运算按
32 位有符号处理,CRC32 中间值保持在 Int 范围、无符号右移用 `(x>>1)&0x7FFFFFFF`,
多项式用补码字面量 `-306674912`(0xEDB88320)。
- `src/mcm/FrameCodec.uts` — 帧常量、`encodeFrame` 组帧、`FrameDecoder` 字节流重组
(找 SOF → 头 → payload+CRC,错帧静默丢弃重找)、`pushU32LE/readU32LE`(纯算术实现,
避免大数值位运算符号问题)。
- `src/mcm/McmChannel.uts` — 连接级单例通道:`attach()` 挂全局 `bleData/bleState` 事件;
`sendFrame` 写队列串行化、整帧按 (att_mtu-3) 切片、写类型 WRITE_NO_RESPONSE;
`sendCli` CLI 命令透传串行执行(聚合 CLI_RSP 至 CLI_RSP_END,超时/断开兜底);
OTA_RSP 转发给 OtaManager。所有 Promise 只 resolve 不 reject。
- `src/mcm/McmCommands.uts` — 业务命令:version/sysinfo/bankinfo/temp/fan,
命令名集中在顶部常量。**温度/风扇命令(默认 temp/fan)固件尚未实现,解析失败页面显示 `--`**。
- `src/mcm/OtaManager.uts` — OTA 状态机:BEGIN→按 4KB 扇区发 DATA 等 ack(流控/重同步)→END;
断连或 `abort()` 协作式中止;进度/状态回调。
- `pages/tabbar/sysStatus.uvue` — 系统状态页:version/bankinfo 概要 + sysinfo 原文控制台
(运行时间/任务数/heap/任务表),下拉刷新。
- `pages/tabbar/ota.uvue` — 固件升级页:手动输入本地 bin 路径(默认
`/sdcard/Download/embeddedSrc.bin`),UTS 直调 Android `java.io.File/FileInputStream`
读文件(`#ifdef APP-ANDROID`);显示大小与 CRC32;输入目标版本号(如 1.00.02→0x010002);
进度条 + 日志;升级期间禁止断连/退出,离开页面自动中止。
## 修改文件
- `src/BluetoothManager.uts` — 新增 `sendDataBytes(data, writeType, cb)`(显式写类型,
设备下行特征必须 writeType=1)与 `selectService(uuidPrefix)`(按服务 UUID 前缀
`0000CA10` 选择 service+notify+write 组合,规避自动识别选错)。
- `App.uvue` — `ConnectBle()` 在 scanServices 后先 `selectService("0000CA10")` 再订阅 notify;
`onLaunch` 调 `McmChannel.attach()`。
- `pages/tabbar/home.uvue` — 重写为设备主页:扫描(过滤 CAIIC-MCM)/连接/断开;
连接后温度、风扇转速每 2s 轮询显示,固件版本与运行 Bank 展示;notify 订阅成功
(bleData type=1000)后协商 MTU=247。
- `pages/tabbar/my.uvue` — 删除充电/离线行为入口(原已注释),启用"CLI 调试终端"入口。
- `pages/bleTest/bluetoothOperation.uvue` — 重写为 CLI 调试终端:inline 命令输入 +
应答文本流展示,复用全局 ConnectBle 连接流程。
- `pages.json` — tabbar 改为 设备/状态/升级/my 四 tab(图标复用 static/tabbar 现有资源);
移除 charge/order 及全部充电页面注册。
- `manifest.json` — 应用名改为"母乳杯助手";iOS 蓝牙用途文案改为母乳杯描述。
- `api/requestApi.uts` — 仅保留用户类接口(登录/注册/pinCode/修改资料),删除全部
OCPP 充电与蓝牙绑定分享接口。
- `api/responseData.uts` — 仅保留用户类响应类型。
## 删除
- 目录:`pages/startCharge/`、`pages/stopCharge/`、`pages/orderDetails/`、
`pages/offlineBehavior/`、`pages/tabbar/charge.uvue`、`pages/tabbar/order.uvue`、
`src/espBlufi/`(充电桩 JSON 分片协议,与 CAIIC 二进制帧协议不兼容)。
## 遗留事项
- **固件需新增温度/风扇 CLI 命令**(设备仓库 `D:\caic-workspace\mothercup`,
在 `cli_core.c` 命令表注册;当前 APP 侧默认命令名 `temp`/`fan`,定名不同改
`McmCommands.uts` 顶部常量即可)。
- **云端固件接口未接入**:本期为本地 bin 文件升级;`api/httpInstance.uts`($http/token/
服务器切换)保留,后续按约定接口(查询最新版本 + 下载 URL)接入 ota 页。
- uni-app x 无 CLI 构建手段,需在 HBuilderX 编译并真机(Android)验证:
version/sysinfo/bankinfo 显示、temp/fan(待固件)、本地 bin OTA 后 bankinfo 确认切 bank。
- OTA 大数据量发送走 Write Without Response + 扇区级 ack 流控,若实测丢包导致
status=2 重同步频繁,可在 OtaManager 扇区内加小窗口节流。