无网消息
无网消息使用 family 02、command 04、subcommand 01。消息 ID 为 4 字节 uint32-be,发送者字段为 16 字节 UTF-8,右侧补空格。
类型
| type | 内容 | 帧 |
|---|---|---|
01 | 文本 | 起始帧 |
02 | 文本 | 数据帧 |
03 | 语音 | 起始帧 |
04 | 语音 | 数据帧 |
05 | 图片 | 起始帧 |
06 | 图片 | 数据帧 |
每个业务帧的确认 payload 为 00 82 04 01 00。
短文本
UTF-8 文本不超过 180 字节时使用单帧。
| 字段 | 长度 | 编码 |
|---|---|---|
| 固定头 | 5 | 00 02 04 01 01 |
| 消息 ID | 4 | uint32-be |
| 保留 | 1 | 00 |
| 发送者 | 16 | UTF-8,右侧补 20 |
| 文本长度 | 2 | uint16-le |
| 分片数与序号 | 2 | 01 00 |
| 文本 | N | UTF-8 |
分片文本
文本按 131 字节分片。起始帧不携带文本,数据帧按序发送。
| 帧 | payload |
|---|---|
| 起始帧 | 00 02 04 01 01 [msgId be32] 00 [sender 16] [streamLength le16] [partCount] 00 |
| 数据帧 | 00 02 04 01 02 [msgId be32] [seq be16] 00 [最多 131-byte text] |
streamLength 为所有分片长度与每片 1 字节附加长度之和。
语音消息
语音编码为 AMR-NB MR475。每帧 20 ms,BLE 数据保留 12 字节 MR475 payload。语音数据按 132 字节分片。
| 帧 | payload |
|---|---|
| 起始帧 | 00 02 04 01 03 [msgId be32] 00 [sender 16] [dataLength le16] [partCount le16] [durationSeconds le16] |
| 数据帧 | 00 02 04 01 04 [msgId be32] [seq be16] 00 [最多 132-byte voice] |
图片消息
图片为 JPEG,长边 300 px,编码质量 75。图片数据按 132 字节分片。
| 帧 | payload |
|---|---|
| 起始帧 | 00 02 04 01 05 [msgId be32] 00 [sender 16] [dataLength le16] [partCount] 00 [width le16] [height le16] |
| 数据帧 | 00 02 04 01 06 [msgId be32] [seq be16] 00 [最多 132-byte jpeg] |
会话控制
| 操作 | payload |
|---|---|
| 开启无网会话 | 00 02 04 07 01 |
| 关闭无网会话 | 00 02 04 07 00 |