|
|
||
|---|---|---|
| .vscode | ||
| @shuohigh__duooomi-keystore-backup | ||
| app | ||
| assets/images | ||
| ble | ||
| components | ||
| constants | ||
| hooks | ||
| scripts | ||
| .gitignore | ||
| README.md | ||
| app.json | ||
| bun.lock | ||
| eas.json | ||
| eslint.config.js | ||
| package.json | ||
| tsconfig.json | ||
README.md
项目初始化
安装 bun https://bun.com/docs/installation#windows
powershell -c "irm bun.sh/install.ps1|iex"
检查bun是否正确安装
& "$env:USERPROFILE\.bun\bin\bun" --version
添加bun到系统路径
[System.Environment]::SetEnvironmentVariable(
"Path",
[System.Environment]::GetEnvironmentVariable("Path", "User") + ";$env:USERPROFILE\.bun\bin",
[System.EnvironmentVariableTarget]::User
)
安装项目依赖
bun install
运行 dev项目
bun run start
协议三端通信说明
1. 数据格式
1.1 基本帧结构
所有数据包遵循以下格式(通常为大端序):
| 字段 (Field) | 长度 (Bytes) | 值 / 说明 |
|---|---|---|
| HEADER | 3 | FEDCBA |
| CMD | 2 | 命令字 (如 E100) |
| DATA | n | 数据内容 (0 ~ n 字节) |
| CHECKSUM | 1 | 校验和 |
| TAIL | 2 | 00EF |
1.2 错误反馈 (系统级)
当接收到的数据包格式错误时,设备会返回以下错误码:
| 错误类型 | CMD (上报) | 参数 (DATA) | 完整 HEX 示例 |
|---|---|---|---|
| HEADER 错误 | E0E0 |
C0 |
FEDCBA E0E0 C0 00EF |
| TAIL 错误 | E0E0 |
C1 |
FEDCBA E0E0 C1 00EF |
| CHECKSUM 错误 | E0E2 |
C0 |
FEDCBA E0E2 C0 00EF |
| CMD 不支持 | E0E3 |
[CMD] |
FEDCBA E0E3 [CMD] XX 00EF |
2. 蓝牙通道说明
- OTA 通道:
- Write:
ae01 - Notify:
ai02(或ae02)
- Write:
- APP 通信通道:
- Write:
ae10(MTU 建议设置为 517) - Notify:
ae02
- Write:
3. 命令详解
3.1 绑定 (0xE100)
方向: APP -> 设备
- 发送:
FEDCBA E100 E1 00EF - 返回:
| 状态 | CMD | 参数 | 完整 HEX 示例 |
|---|---|---|---|
| 成功 | E1A0 |
81 |
FEDCBA E1A0 81 00EF |
| 失败 | E1A1 |
82 |
FEDCBA E1A1 82 00EF |
| 异常 | E1A2 |
83 |
FEDCBA E1A2 83 00EF |
3.2 绑定失败上报 (0xE200)
方向: APP -> 设备 (通常用于APP端绑定失败后通知设备)
- 发送:
FEDCBA E200 XX 00EF - 返回:
| 状态 | CMD | 参数 | 完整 HEX 示例 |
|---|---|---|---|
| 成功 | E2A0 |
XX |
FEDCBA E2A0 XX 00EF |
| 失败 | E2A1 |
XX |
FEDCBA E2A1 XX 00EF |
| 异常 | E2A2 |
XX |
FEDCBA E2A2 XX 00EF |
3.3 写用户 ID (0xE300)
方向: APP -> 设备
- 发送:
FEDCBA E300 [UserID] XX 00EFUserID: 用户ID数据
- 返回:
| 状态 | CMD | 参数 | 完整 HEX 示例 |
|---|---|---|---|
| 成功 | E3A0 |
83 |
FEDCBA E3A0 83 00EF |
| 失败 | E3A1 |
84 |
FEDCBA E3A1 84 00EF |
| 异常(空) | E3A3 |
85 |
FEDCBA E3A3 85 00EF |
3.4 查询密锁 (0xE400)
方向: APP -> 设备
- 发送:
FEDCBA E400 E4 00EF - 返回:
FEDCBA E4A0 [TOKEN] XX 00EFTOKEN: 32位 (4字节) 密锁数据。
3.5 设置时间 (0xE500)
方向: APP -> 设备
- 发送:
FEDCBA E500 [Time] XX 00EFTime: 格式yyyymmddhhmmss(14字节 ASCII)
- 返回:
| 状态 | CMD | 参数 | 完整 HEX 示例 |
|---|---|---|---|
| 成功 | E5A0 |
85 |
FEDCBA E5A0 85 00EF |
| 失败 | E5A1 |
86 |
FEDCBA E5A1 86 00EF |
| 异常 | E5A2 |
87 |
FEDCBA E5A2 87 00EF |
3.6 查询固件版本号 (0xE600)
方向: APP -> 设备
- 发送:
FEDCBA E600 E6 00EF - 返回:
FEDCBA E6A0 [Version] XX 00EFVersion: 格式yyyymmddhh(10字节 ASCII)
3.7 查询资源版本号 (0xE700 / 0xD700)
方向: APP -> 设备
- 版本 < V4.0:
- 发送:
FEDCBA E700 E7 00EF - 返回:
FEDCBA E7A0 [ResVersion] XX 00EF
- 发送:
- 版本 >= V4.0:
- 发送:
FEDCBA D700 E7 00EF - 返回:
FEDCBA D7A0 [ResVersion] XX 00EF
- 发送:
3.8 设置资源版本号 (0xE800)
方向: APP -> 设备
- 发送:
FEDCBA E800 [TT] [ResVersion] XX 00EF - 返回:
| 状态 | CMD | 参数 | 完整 HEX 示例 |
|---|---|---|---|
| 成功 | E8A0 |
88 |
FEDCBA E8A0 88 00EF |
| 失败 | E8A1 |
89 |
FEDCBA E8A1 89 00EF |
| 异常 | E8A2 |
8A |
FEDCBA E8A2 8A 00EF |
3.9 解绑 (0xE900)
方向: APP -> 设备
- 发送:
FEDCBA E900 E0 00EF - 返回:
FEDCBA E9A0 F3 00EF(解绑成功)
3.10 下载文件 / OTA (0xEA00)
方向: APP -> 设备 此命令流程包含请求传输、数据传输、传输结束、取消传输等状态。
A. 启动传输请求
- 发送:
FEDCBA EA00 [Type] [NameLen] [Name] [MD5] [Size] XX 00EFType: 文件类型 (1字节)NameLen: 文件名长度 (1字节)Name: 文件名 (N字节)MD5: 文件校验 (8字节)Size: 文件大小 (4字节, 16进制)
- 返回:
| 状态 | CMD | 说明 | 附加数据 |
|---|---|---|---|
| 同意传输 | EAA0 |
准备接收 | 8A |
| 失败 | EAA1 |
拒绝/错误 | 8B |
| 异常 | EAA2 |
参数错误 | 8C |
| 文件相同 | EAA3 |
无需传输 | 8D |
| 断点续传 | EAA4 |
从Offset开始 | [Offset(4B)] |
| OTA回复 | EAA5 |
OTA 错误码 | [ErrCode] |
B. 文件数据传输 (Packet)
- 发送:
FEDCBA EA01 [Seq] [Len] [Data] XX 00EFSeq: 序列号 (2字节)Len: 数据长度 (2字节)Data: 数据内容
- 返回 (每包/批量确认):
FEDCBA EAA6 [ErrCode] [Seq] [TotalLen] XX 00EF
C. 传输完成
- 发送:
FEDCBA EA02 EC 00EF - 返回:
- 成功:
FEDCBA EAA7 91 00EF - 失败:
FEDCBA EAA8 [ErrCode] XX 00EF
- 成功:
D. 取消传输
- 发送:
FEDCBA EA03 ED 00EF - 返回:
FEDCBA EAA9 [ErrCode] 8D 00EF
3.11 查询设备 OTA 信息 (0xEB00)
方向: APP -> 设备
- 查询 OTA 信息:
- 发送:
FEDCBA EB00 E0 00EF - 返回:
FEDCBA EBA0 [Err] [Ver] XX 00EF
- 发送:
- 清除 OTA 状态:
- 发送:
FEDCBA EB01 EC 00EF - 返回:
FEDCBA EBA7 92 00EF
- 发送:
3.12 设备信息查询 (0xED00)
方向: APP -> 设备
- 发送:
FEDCBA ED00 [TypeMask] XX 00EFTypeMask: 2字节位掩码,每一位代表请求的信息类型。
- 返回:
- 成功:
FEDCBA EDA0 [Data] XX 00EF - 失败:
FEDCBA EDA1 ... - 异常:
FEDCBA EDA2 ...
- 成功:
支持的信息类型 (Bit定义):
| Bit | 信息内容 | 长度 (Bytes) | 说明 |
|---|---|---|---|
| 0 | 当前电量 | 1 | 0~100 |
| 1 | 当前音量 | 1 | 0~3 |
| 2 | SD卡挂载状态 | 1 | 0:未挂载, 1:挂载 |
| 3 | SD卡总容量 | 4 | 单位 KB |
| 4 | SD卡剩余容量 | 4 | 单位 KB |
| 5 | BLE MAC 地址 | 6 | Hex format |
4. JSON 协议 (V2)
新版协议在原有基础上增加了 JSON 数据传输模式,支持更丰富的信息交互。
4.1 帧结构 (Frame Structure)
V2 协议使用特定的帧头 0xC7 (App发) / 0xB0 (设备发) 包裹 JSON 数据。
| 字段 | 长度 (Bytes) | 说明 |
|---|---|---|
| HEAD | 1 | 0xC7 (App->Dev) / 0xB0 (Dev->App) |
| TYPE | 1 | 命令字 (如 0x0D) |
| Subpage Total | 2 | 分包总数 (大端) |
| Current Page | 2 | 当前包序号 (大端) |
| Data Len | 2 | 数据长度 (大端) |
| DATA | N | JSON 字符串 (UTF-8) |
| CHECKSUM | 1 | 校验和 (0 - Sum(0...End-1)) |
4.2 命令定义 (JSON Payload)
以下为 Data 字段中的 JSON 内容示例。
4.2.1 激活状态 (0x01)
- APP -> 设备: (查询)
- 设备 -> APP:
{ "type": 0x01, "state": 0x00 // 0:未激活, 1:已激活 }
4.2.2 协议版本 (0x07)
- 设备 -> APP:
{ "type": 0x07, "version": "2024.01" }
4.2.3 时间同步 (0x08)
- APP -> 设备:
{ "type": 0x08, "year": 2024, "mon": 1, "day": 1, "hour": 12, "min": 0, "mes": 0 }
4.2.4 设备信息上报 (0x0D)
- 设备 -> APP:
{ "type": 0x0d, "allspace": 1000, "freespace": 500, "devname": "Loom", "size": 0, // 0:圆屏, 1:方屏 "brand": 5 }
4.2.5 身份核对 (0x0E)
- APP -> 设备 (发送 12位码):
{ "type": 0x0e, "IdCheck": "xxxxxxxxxxxx" } - 设备 -> APP (返回结果):
{ "type": 0x0e, "Ret": 1 // 0:错误, 1:正确 }