5.5 KiB
5.5 KiB
修改记录 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;sendCliCLI 命令透传串行执行(聚合 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 直调 Androidjava.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 扇区内加小窗口节流。