Class L
总览
Class L 为 Class C+ 协议的派生分支,对协议的语义进一步进行了规范和统一。
其MTU为 247 bytes
数据帧结构
byte |
|
|---|---|
0 |
流控信息 |
1 |
载荷长度 |
2~n |
载荷 |
字节序
鉴于目前常见的蓝牙MCU均使用 Little-Endian 小端字节序,
为避免在性能受限的MCU上产生额外的性能与储存开销,协议使用MCU的原生字节序,在这里即为 Little-Endian 小端字节序。
- 在
Little-Endian下 一个16位的数据,如
0x1234 = 4660传输时为0x34, 0x12一个24位的数据,如
0x123456 = 1193046传输时为0x56, 0x34, 0x12一个32位的数据,如
0x12345678 = 305419896传输时为0x78, 0x56, 0x34, 0x12一个Unix时间戳(32位),如
0x622B096C = 1646987628 = 2022-03-11 16:33:48传输时为0x6C, 0x09, 0x2B, 0x62
参考文档: 字节序
有符号数
在常规CPU中,有符号数以补码表示。在此为MCU原生的负整数表示方式。 在协议中,使用的有符号数均以此表示。
例如
一个8位的负数,
-1 = 0xFF,-128 = 0x80,-127 = 0x81一个16位的负数,
-1 = 0xFFFF,-2 = 0xFFFE一个32位的负数,
-1 = 0xFFFFFFFF,-2 = 0xFFFFFFFE
参考文档: 有符号数处理
数据包内容
数据包包含如下内容(括号中为长度):
- 流控信息
(1) 控制数据传输过程,提高传输可靠性,并完成差错控制
- 载荷长度
(1) 定义当前数据包中载荷的长度
- 载荷
(0~245) 数据载荷
向后兼容
在两个设备建立连接时,移动端读取设备端的相关信息与协议版本。由移动端兼容设备端。
序
约定
小技巧
简洁起见,描述中 flowcontrol(流控) 在以下文档中
使用未带 0x 前缀的 $FC 缩写表示。
小技巧
->MCU 和 APP-> 均表示移动端发送至MCU,MCU-> 和 ->APP 均表示MCU发送至移动端小技巧
在本文档中,形如
13的无前缀数字表示十进制数形如
0x13的以0x为前缀的数字表示十六进制数形如
0b11011011的以0b为前缀的数字表示二进制数
危险
在本文档中, 没有 使用 BCD 编码
为便于理解,在某些如时间日期等的协议描述中使用了十进制来表示,
注意,这里举例说明,如果有描述为 13 点 33 分的时间,
其对应十六进制描述应该为 0x0D 点 0x21 分
数据结构
一个完整协议帧的格式如下表所示:
byte |
内容 |
详情 |
|---|---|---|
0 |
流控 |
|
1 |
长度 |
|
2 |
载荷 |
索引 |
3 |
次级索引 |
|
4~n |
参数 |
流控
使用一个 byte ,为一个 0~255 的数值。
作为最近发送数据包的唯一标识。对于任何数据包的返回包都应具有相同的流控数值。
在同时乱序发送多个相似的数据包时,流控可以用来区分各个数据包的返回包。 一般建议采用递增的数值作为流控。也可以使用随机的数值作为流控。 具体处理见下方详细描述。
小技巧
在传输中,如果是读取操作,没有收到对应的流控头的反馈,应当进行重传。
例1
0x1F , $length= 3 , 0xAB , 调用 0xAB 接口0x02 , 0x01 执行 0x02 操作, 参数 0x010x20 , $length= 3 , 0xAB , 调用 0xAB 接口0x02 , 0x00 执行 0x02 操作, 参数 0x000x21 , $length= 4 , 0x01 , 调用 0x01 接口0x00 , 0x00 , 0xF0 , 执行 0x00 操作, 参数 0x00, 0xF00x1F , $length= 0 返回流控为 0x1F 的 ACK0x21 , $length= 0 返回流控为 0x21 的 ACK0x20 , $length= 3 , 0xAB , 调用 0xAB 接口0x20 , $length= 0 返回流控为 0x20 的 ACK小技巧
在传输中,如果是控制或写入操作,收到最近重复的流控头,应当忽略。
例2
16 条件下进行描述。16 表示若收到的流控位与最近收到的 16 个流控位中有出现相同,则视为重复。0x1F , $length= 3 , 0xAB ,0x02 , 0x01 调用 0xAB 接口, 执行 0x02 操作, 参数 0x010x20 , $length= 3 , 0xAB ,0x02 , 0x00 调用 0xAB 接口, 执行 0x02 操作, 参数 0x000x21 , $length= 4 , 0x01 ,0x00 , 0x00 , 0xF0 调用 0x01 接口, 执行 0x00 操作, 参数 0x00 , 0xF00x20 , $length= 3 , 0xAB ,0x02 , 0x01 调用 0xAB 接口, 执行 0x02 操作, 参数 0x010x1F , $length= 0 返回流控为 0x1F 的 ACK0x20 , $length= 0 返回流控为 0x20 的 ACK0x21 , $length= 0 返回流控为 0x21 的 ACK0x20 因为与之前重复,所以此处忽略。备注
对于 接收方 来说,总结如下:
在传输中,接收方如果收到最近重复的流控头,根据不同操作,建议处理如下:
如果是控制或写入操作,应当不执行操作,只返回ACK
如果是读取操作,应当按正常逻辑再次返回
对于 发送方 来说,总结如下:
在传输中,发送方如果没有收到对应流控头的反馈,根据不同情况,建议处理如下:
如果是有 副作用(side effect) 的控制、写入或读取操作,应当使用原流控头重传完全相同的内容
如果是没有 副作用(side effect) 的控制、写入或读取操作,除同上操作外,可以考虑使用新的流控头重传
长度
表示协议帧中载荷的长度,接收方按此处长度进行解析,超出此长度定义的内容忽略。
例
0x1F , $length= 4 ,0xAB , 0x02 , 0x01 , 0x01 , 0xFF , 0x004 ,所以解析的载荷部分为:0xAB , 0x02 , 0x01 , 0x01索引 、 次级索引 与 参数
索引 为协议功能的第一级分类。包含在协议内容的标题中。
次级索引 为协议功能的第二级分类。包含在协议内容的次级标题中。
参数 为协议功能的详细内容。包含在功能的详细描述中。
公共语义
为保证协议逻辑的一致性,对部分 参数 的语义进行统一如下:
参数 |
语义 |
|---|---|
0x00 |
获取(Get) |
0x01 |
设置(Set) |
0x0C |
控制 |
0x0D |
清除(Delete) |
内容
序号 |
内容 |
|---|---|
0 |
流控 |
1 |
载荷长度 |
2 |
接口索引 |
3 |
次级索引 |
4-n |
参数 |
为简洁起见,在以下协议的描述表格中将会 省略 流控 与 载荷长度 的表示。
应答 ACK
载荷长度 为 0 的数据包表示 ACK ,如下所示:
序号 |
内容 |
值 |
|---|---|---|
0 |
流控 |
返回帧与发送帧相同 |
1 |
载荷长度 |
0 |
简洁起见,在以下内容中均以 ACK 直接表示,而不再重复描述其结构。
错误 0xFF
0xFF 的接口索引表示返回了一个错误。
当长度为 3 时,表示返回了一个 16位 的通用错误代码。
Code |
含义 |
|---|---|
303 |
能源状态拒绝(如低电) |
401 |
设备未注册 |
404 |
接口不存在 |
405 |
无效的次级索引 |
406 |
无效的参数 |
410 |
方法未实现或已删除 |
例
3 , 0xAB ,0x02 , 0x01 调用 0xAB 接口3 , 0xFF ,0x94 , 0x01 返回错误 0x194 = 404 ,表示接口 0xAB 不存在实时授时 0x01
0x01.当前时间
备注
时间的设置与获取同时兼容 YYMMDDHHMMSSTT 与 Unix timestamp 两种格式。
使用 YYMMDDHHMMSSTT 格式时,传输的时间为 UTC 时间。
获取
发送:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x01 |
3 |
次级索引 |
0x01 |
4 |
获取 |
0x00 |
5 |
类型 |
|
返回 YYMMDDHHMMSSTT :
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x01 |
3 |
次级索引 |
0x01 |
4 |
获取 |
0x00 |
5 |
类型 |
0x00 |
6 |
年 |
0~99 |
7 |
月 |
1~12 |
8 |
日 |
1~31 |
9 |
时 |
0~23 |
10 |
分 |
0~59 |
11 |
秒 |
0~59 |
12 |
时区时 |
-12~+14 |
13 |
时区分 |
-59~+59 |
备注
返回的时间与日期均为
UTC时间,时区使用8位有符号数表示,MCU计算时区会使用时区时和时区分相加,请保证符号正确。-6,-30表示UTC-6:30,+6,+30表示UTC+6:30-6,+30会计算出UTC-5:30的结果,为保持代码的可读性,请勿如此使用
例
4 , 0x01 , 0x01 , 0x00 , 0x0012 , 0x01 , 0x01 , 0x00 , 0x00 ,0x16 , 0x0A , 0x0F , 0x16 = 2022 年, 0x0A = 10 月, 0x0F = 15 日0x0D , 0x02 , 0x03 , 0x0D = 13 点, 0x02 = 02 分, 0x03 = 03 秒0x08 , 0x1E UTC+0830返回 Unix timestamp :
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x01 |
3 |
次级索引 |
0x01 |
4 |
获取 |
0x00 |
5 |
类型 |
0x01 |
6~9 |
Unix时间戳 |
x |
10 |
时区时 |
-12~+14 |
11 |
时区分 |
-59~+59 |
例
2 , 0x01 , 0x01 , 0x00 , 0x0110 , 0x01 , 0x01 , 0x00 , 0x010x6C , 0x09 , 0x2B , 0x62 0x622B096C = 2022 - 03 - 11 16 : 33 : 480x08 , 0x1E UTC+0830设置
发送 YYMMDDHHMMSSTT :
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x01 |
3 |
次级索引 |
0x01 |
4 |
设置 |
0x01 |
5 |
类型 |
0x00 |
6 |
年 |
0~99 |
7 |
月 |
1~12 |
8 |
日 |
1~31 |
9 |
时 |
0~23 |
10 |
分 |
0~59 |
11 |
秒 |
0~59 |
12 |
时区时 |
-12~+14 |
13 |
时区分 |
-59~+59 |
返回:ACK
例
10 , 0x01 , 0x01 , 0x01 , 0x00 ,0x16 , 0x0A , 0x0F , 0x16 = 2022 年, 0x0A = 10 月, 0x0F = 15 日0x0D , 0x02 , 0x03 , 0x0D = 13 点, 0x02 = 02 分, 0x03 = 03 秒0x08 , 0x1E UTC+0830发送 Unix timestamp :
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x01 |
3 |
次级索引 |
0x01 |
4 |
设置 |
0x01 |
5 |
类型 |
0x01 |
6~9 |
Unix时间戳 |
x |
10 |
时区时 |
-12~+14 |
11 |
时区分 |
-59~+59 |
例
10 , 0x01 , 0x01 , 0x01 , 0x010x6C , 0x09 , 0x2B , 0x62 0x622B096C = 2022 - 03 - 11 16 : 33 : 488 , 30 UTC+0830指针控制 0x02
指针参数由 属性 和对应的 值 来确定。
属性列表如下:
属性(1 byte) |
值(n bytes) |
|---|---|
|
xxxx |
其中 物理位置 和 逻辑位置 的定义及指针驱动原理见 「行针控制」,
运行模式列表如下:
运行模式 |
Hex |
|---|---|
正常 |
0x00 |
停针 |
0x01 |
快速正转 |
0x02 |
快速反转 |
0x03 |
手动调整 |
0x04 |
0x01.齿轮箱参数
获取
备注
支持同时获取多个对象的多个属性值。
发送:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x02 |
3 |
次级索引 |
0x01 |
4 |
获取 |
0x00 |
5 |
对象1 |
x |
6 |
属性1 |
x |
7 |
对象2 |
x |
8 |
属性2 |
x |
… |
… |
… |
返回:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x02 |
3 |
次级索引 |
0x01 |
4 |
获取 |
0x00 |
5 |
对象1 |
x |
6 |
属性1 |
x |
7~n |
参数1 |
x |
n+1 |
对象2 |
x |
n+2 |
属性2 |
x |
n+3~n+m |
参数2 |
x |
… |
… |
… |
例1
4 , 0x02 , 0x01 , 0x00 ,0x01 编号 01 的机芯 , 0x01 物理位置6 , 0x02 , 0x01 , 0x00 ,0x01 编号 01 的机芯 , 0x01 物理位置 ,0x10 , 0x27 0x2710 = 10000例2
4 , 0x02 , 0x01 ,0x00 获取 ,0x01 编号 01 的机芯 , 0x01 物理位置 ,0x01 编号 01 的机芯 , 0x02 逻辑位置 ,0x02 编号 02 的机芯 , 0x01 物理位置6 , 0x02 , 0x01 ,0x00 获取 ,0x01 编号 01 的机芯 , 0x01 物理位置 ,0x10 , 0x27 0x2710 = 10000 ,0x01 编号 01 的机芯 , 0x02 逻辑位置 ,0x20 , 0x28 0x2820 = 102720x02 编号 02 的机芯 , 0x01 物理位置 ,0x20 , 0x00 0x0020 = 32设置
备注
支持同时设置多个对象的多个属性值。
发送:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x02 |
3 |
次级索引 |
0x01 |
4 |
设置 |
0x01 |
5 |
对象1 |
x |
6 |
属性1 |
x |
7~n |
参数1 |
x |
n+1 |
对象2 |
x |
n+2 |
属性2 |
x |
n+3~n+m |
参数2 |
x |
… |
… |
… |
返回:ACK
备注
当设置为非正常走时模式,设备会启动一个 30 秒的超时定时器,
超时后自动恢复正常模式。重发设置指令可以将超时重置为 30 秒。
当需要维持所设置状态时,建议间隔 10 秒左右重复发送此命令。
具体超时机制时长的设置由各项目自行定义。
例1
6 , 0x02 , 0x01 ,0x01 设置 ,0x01 编号 01 的机芯 , 0x01 物理位置 ,0x10 , 0x27 0x2710 = 10000例2
6 , 0x02 , 0x01 ,0x01 设置 ,0x01 编号 01 的机芯 , 0x01 物理位置 ,0x10 , 0x27 0x2710 = 10000 ,0x01 编号 01 的机芯 , 0x02 逻辑位置 ,0x20 , 0x28 0x2820 = 102720x02 编号 02 的机芯 , 0x01 物理位置 ,0x20 , 0x00 0x0020 = 32通知提醒 0x03
参数使用 byte 中的 bit 来分别表示提醒种类,下表仅为示例:
参数bit |
含义 |
|---|---|
7 |
\ |
6 |
\ |
5 |
\ |
4 |
\ |
3 |
\ |
2 |
来电 |
1 |
其他 |
0 |
\ |
具体提醒类别的定义与长度由项目文档所定义。 以下所用示例均参考上表的定义。
0x01.提醒更新
设置
发送:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x03 |
3 |
次级索引 |
0x01 |
4 |
设置 |
0x01 |
5~n |
参数bit |
x |
返回:ACK
例1
4 ,0x03 , 0x01 , 0x01 ,0x04 来电提醒例2
4 ,0x03 , 0x01 , 0x01 ,0x02 其他提醒清除
发送:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x03 |
3 |
次级索引 |
0x01 |
4 |
清除 |
0x0D |
5~n |
参数bit |
x |
返回:ACK
例
4 ,0x03 , 0x01 , 0x0D ,0x04 取消电话提醒0x02.提醒间隔
设置
发送:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x03 |
3 |
次级索引 |
0x02 |
4 |
设置 |
0x01 |
5~6 |
提醒间隔 |
2字节秒数 |
返回:ACK
例
5 ,0x03 , 0x02 , 0x01 ,0x02 , 0x01 提醒间隔设置为 0x0102 = 258 秒获取
发送:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x03 |
3 |
次级索引 |
0x02 |
4 |
获取 |
0x00 |
返回:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x03 |
3 |
次级索引 |
0x02 |
4 |
获取 |
0x00 |
5~6 |
提醒间隔 |
2字节秒数 |
例2
3 , 0x03 , 0x03 , 0x004 ,0x03 , 0x03 ,0x04 , 0x01 表示获取到提醒间隔为 0x0104 = 260 秒0x03.提醒开关
设置
发送:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x03 |
3 |
次级索引 |
0x03 |
4 |
设置 |
0x01 |
5 |
参数 |
x |
返回:ACK
例1
4 ,0x03 , 0x03 , 0x01 ,0x04 来电提醒开启,且其他提醒关闭例2
4 ,0x03 , 0x03 , 0x01 ,0x02 其他提醒开启,且来电提醒关闭例3
4 ,0x03 , 0x04 , 0x01 ,0x06 其他与来电提醒均开启获取
发送:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x03 |
3 |
次级索引 |
0x03 |
4 |
获取 |
0x00 |
返回:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x03 |
3 |
次级索引 |
0x03 |
4 |
获取 |
0x00 |
5~n |
参数 |
x |
例1
3 , 0x03 , 0x03 , 0x003 , 0x03 , 0x05 ,0x04 来电提醒开启,其他提醒关闭例2
3 , 0x03 , 0x03 , 0x003 , 0x03 , 0x05 ,0xff 所有提醒均开启0x11. 内容推送
控制
推送提醒内容至屏幕显示
发送:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x03 |
3 |
次级索引 |
0x11 |
4 |
控制 |
0x0C |
5~n |
参数 |
x |
返回:ACK
例1
这是一段测试文本, 用来测试显示推送内容的功能。 」3+67 索引和次级索引长度+字符串长度 ,0x03 , 0x11 , 0x0C ,0xe8 , 0xbf , 0x99 , 0xe6 ,0x98 , 0xaf , 0xe4 , 0xb8 , 0x80 , 0xe6 ,0xae , 0xb5 , 0xe6 , 0xb5 , 0x8b , 0xe8 ,0xaf , 0x95 , 0xe6 , 0x96 , 0x87 , 0xe6 ,0x9c , 0xac , 0x2c , 0xe7 , 0x94 , 0xa8 ,0xe6 , 0x9d , 0xa5 , 0xe6 , 0xb5 , 0x8b ,0xe8 , 0xaf , 0x95 , 0xe6 , 0x98 , 0xbe ,0xe7 , 0xa4 , 0xba , 0xe6 , 0x8e , 0xa8 ,0xe9 , 0x80 , 0x81 , 0xe5 , 0x86 , 0x85 ,0xe5 , 0xae , 0xb9 , 0xe7 , 0x9a , 0x84 ,0xe5 , 0x8a , 0x9f , 0xe8 , 0x83 , 0xbd ,0xe3 , 0x80 , 0x82闹钟设定 0x05
备注
下面示例使用最多 5 组闹钟的配置,具体项目配置跟随项目定义。
在闹钟设置中,使用1个 byte 的8个 bit 来表示重复设置的内容,如下表所示:
参数bit |
含义 |
|---|---|
7 |
是否重复 |
6 |
Sat |
5 |
Fri |
4 |
Thu |
3 |
Wed |
2 |
Tue |
1 |
Mon |
0 |
Sun |
0x01.闹钟配置
设置
发送:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x05 |
3 |
次级索引 |
0x01 |
4 |
设置 |
0x01 |
5 |
第一组闹钟时 |
x |
6 |
第一组闹钟分 |
x |
7 |
第一组重复设置 |
x |
8 |
第一组开关 |
0为关,1为开 |
9 |
第二组闹钟时 |
x |
10 |
第二组闹钟分 |
x |
11 |
第二组重复设置 |
x |
12 |
第二组开关 |
0为关,1为开 |
13 |
第三组闹钟时 |
x |
14 |
第三组闹钟分 |
x |
15 |
第三组重复设置 |
x |
16 |
第三组开关 |
0为关,1为开 |
… |
… |
… |
返回:ACK
备注
设置闹钟时,如果发送闹钟组数少于最大支持组数,则未设置的闹钟将被置为关闭
例1
7 , 0x05 , 0x01 , 0x01 ,8 , 14 , 0xBE , 1 设置第一组闹钟,时间: 8 : 14 重复: 周一 ~ 周五 开启 其他关闭例2
19 , 0x05 , 0x01 , 0x01 ,8 , 14 , 0xBE , 1 , 设置第一组闹钟,时间: 8 : 14 重复: 周一 ~ 周五 闹钟开启9 , 30 , 0x00 , 1 , 设置第二组闹钟,时间: 9 : 30 重复: 无 闹钟开启10 , 30 , 0xC1 , 1 , 设置第三组闹钟,时间: 10 : 30 重复: 周六 ~ 周日 闹钟开启8 , 00 , 0x92 , 1 , 设置第四组闹钟,时间: 8 : 00 重复: 周一 、 周四 闹钟开启获取
发送:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x05 |
3 |
次级索引 |
0x01 |
3 |
获取 |
0x00 |
返回:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x05 |
3 |
次级索引 |
0x01 |
4 |
获取 |
0x00 |
5 |
闹钟时 |
x |
6 |
闹钟分 |
x |
7 |
重复设置 |
x |
8 |
开关 |
x |
9~n |
… |
… |
例
3 , 0x05 , 0x01 , 0x0023 , 0x05 , 0x01 , 0x0010 , 25 , 0xC1 , 1 , 第一组闹钟,时间: 10 : 25 重复: 周六/周日 闹钟开启9 , 30 , 0x00 , 0 , 第二组闹钟,时间: 9 : 30 重复: 无 闹钟关闭10 , 30 , 0xC1 , 0 , 第三组闹钟,时间: 10 : 30 重复: 周六 ~ 周日 闹钟关闭8 , 00 , 0x92 , 1 , 第四组闹钟,时间: 8 : 00 重复: 周一 、 周四 闹钟开启8 , 14 , 0xBE , 0 , 第五组闹钟,时间: 8 : 14 重复: 周一 ~ 周五 闹钟关闭系统信息 0x06
0x21. 设备分类识别码
获取
发送:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x06 |
3 |
次级索引 |
0x21 |
4 |
获取 |
0x00 |
返回:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x06 |
3 |
次级索引 |
0x21 |
4 |
获取 |
0x00 |
5~n |
识别码 |
x |
例
3 , 0x06 , 0x21 , 0x000x06 , 0x21 , 0x000x01 识别码备注
设备分类识别码同时放置于广播包厂商信息的第 3 个字节处
备注
访问 「齿轮箱配置列表」 获取更多信息
0x22. 设备唯一识别码
获取
发送:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x06 |
3 |
次级索引 |
0x22 |
4 |
获取 |
0x00 |
返回:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x06 |
3 |
次级索引 |
0x22 |
4 |
获取 |
0x00 |
5~n |
识别码 |
x |
例
3 , 0x06 , 0x22 , 0x000x06 , 0x22 , 0x000xA1 , 0xB2 , 0xC3 , 0xD4 , 0xE5 , 0xF6 } 唯一识别码备注
返回的长度由具体设备决定,一般不少于 6 个字节
0x10.获取OTA名称
获取
发送:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x06 |
3 |
次级索引 |
0x10 |
4 |
获取 |
0x00 |
5 |
内容选择 |
|
返回:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x06 |
3 |
次级索引 |
0x10 |
4 |
获取 |
0x00 |
5~n |
字符串 |
string |
例1
3 , 0x06 , 0x10 ,0x00 , 0x00 获取项目名称0x06 , 0x10 ,0x00 , "CC4573"例2
3 , 0x06 , 0x10 ,0x00 , 0x01 获取分支名称0x06 , 0x10 ,0x00 , "TTP"0x11.固件版本
获取
发送:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x06 |
3 |
次级索引 |
0x11 |
4 |
获取 |
0x00 |
返回:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x06 |
3 |
次级索引 |
0x11 |
4 |
获取 |
0x00 |
5~n |
字符串 |
string |
例
3 , 0x06 , 0x11 ,0x000x06 , 0x11 ,0x00 , "v0.92.1a"0x12.编译时间戳
获取
发送:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x06 |
3 |
次级索引 |
0x12 |
4 |
获取 |
0x00 |
返回:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x06 |
3 |
次级索引 |
0x12 |
4 |
获取 |
0x00 |
5~8 |
unix时间戳 |
x |
例
3 , 0x06 , 0x12 ,0x000x06 , 0x12 ,0x00 , "622B096C"0x14.编译序列号
获取
发送:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x06 |
3 |
次级索引 |
0x14 |
4 |
获取 |
0x00 |
返回:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x06 |
3 |
次级索引 |
0x14 |
4 |
获取 |
0x00 |
5~n |
字符串 |
string |
例
3 , 0x06 , 0x14 ,0x000x06 , 0x14 ,0x00 , "B57483763"0x03.系统类型
系统 |
值 |
|---|---|
iOS |
0x00 |
Android |
0x01 |
Other |
0xFF |
获取
发送:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x06 |
3 |
次级索引 |
0x03 |
4 |
获取 |
0x00 |
返回:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x06 |
3 |
次级索引 |
0x03 |
4 |
获取 |
0x00 |
5 |
系统类型 |
x |
例
3 , 0x06 , 0x03 ,0x004 , 0x06 , 0x03 ,0x00 , 0x00 iOS设置
发送:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x06 |
3 |
次级索引 |
0x03 |
4 |
设置 |
0x01 |
5 |
系统类型 |
x |
返回:ACK
例
3 , 0x06 , 0x03 ,0x01 , 0x01 android0x04.广播名称
获取
发送:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x06 |
3 |
次级索引 |
0x04 |
4 |
获取 |
0x00 |
返回:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x06 |
3 |
次级索引 |
0x04 |
4 |
获取 |
0x00 |
5~n |
字符串 |
x |
例
3 , 0x06 , 0x04 ,0x0010 , 0x06 , 0x04 ,0x00 , "Comi-OK"设置
发送:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x06 |
3 |
次级索引 |
0x04 |
4 |
设置 |
0x01 |
5~n |
名称 |
string |
返回:ACK
例
7 , 0x06 , 0x04 ,0x01 , "TEST"备注
更改广播名称后,重启生效。可询问用户是否立即重启,然后发送重启命令。
备注
广播名称设置不能超过12字节。如果长度为 0 ,或者第一个字节为 0x00 ,将视为无效。
iOS可能由于缓存原因不会立即更新显示名称
0x05.MAC地址
获取
发送:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x06 |
3 |
次级索引 |
0x05 |
4 |
获取 |
0x00 |
返回:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x06 |
3 |
次级索引 |
0x05 |
4 |
获取 |
0x00 |
5~10 |
mac地址 |
x |
例
3 , 0x06 , 0x05 , 0x008 , 0x06 , 0x05 , 0x000xDE , 0xAD , 0xBF , 0xCC , 0xAA , 0xEE0x06. 绑定状态
获取
发送:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x06 |
3 |
次级索引 |
0x06 |
4 |
获取 |
0x00 |
返回:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x06 |
3 |
次级索引 |
0x06 |
4 |
获取 |
0x00 |
5 |
绑定状态 |
1/0 |
例
2 , 0x06 , 0x06 ,0x003 , 0x06 , 0x06 ,0x00 , 0x01 已绑定0x30. 使用率数据
备注
使用率数据的类别与数据格式由项目文档定义。此处仅以蓝牙使用率数据作为示例。
蓝牙使用率:
长度 |
内容 |
值 |
|---|---|---|
1 |
类别 |
0xBE |
4 |
蓝牙广播时长(s) |
x |
4 |
蓝牙连接时长(s) |
x |
4 |
蓝牙断开次数(次) |
x |
获取
发送:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x06 |
3 |
次级索引 |
0x30 |
4 |
获取 |
0x00 |
5~n |
类别 |
x |
返回:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x06 |
3 |
次级索引 |
0x30 |
4 |
获取 |
0x00 |
5~n |
数据内容 |
x |
例
4 , 0x06 , 0x30 ,0x00 , 0xBE 获取蓝牙使用率数据0x06 , 0x30 ,0x00 ,0x03 , 0x02 , 0x01 , 0x00 , 广播= 0x10203 = 66051 秒0x01 , 0x02 , 0x03 , 0x00 , 连接= 0x30201 = 197121 秒0x71 , 0x00 , 0x00 , 0x00 断开= 0x71 = 113 次清除
发送:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x06 |
3 |
次级索引 |
0x30 |
4 |
清除 |
0x0D |
5~n |
类别 |
x |
返回:ACK
系统操作 0x07
0xE0-0xE7.测试
备注
具体测试功能与流程由项目文档定义。以下仅以链路测试作为说明。
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x07 |
3 |
次级索引 |
0xE0~0xE7 |
例
2 , 0x07 , 0xE02 , 0x07 , 0xE12 , 0x07 , 0xE2接收到 0xE0 指令后,设备将返回 0xE1 指令。
接收到 0xE2 指令后,设备将在数秒后关闭蓝牙,并使其 LED 灯低频闪烁,表示测试通过,可分拣出。
0xFE.设备控制
备注
设备控制码的数据格式由项目文档定义。此处仅以关机作为示例。
关机控制码:
长度 |
内容 |
值 |
|---|---|---|
2 |
关机控制代码 |
0xDE, 0xAD |
发送:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x07 |
3 |
次级索引 |
0xFE |
4 |
控制 |
0x0C |
5~n |
控制码 |
x |
例
4 , 0x07 , 0xFE ,0x0C , 0xDE , 0xAD 发送关机指令数据交互 0x08
备注
在未同步过时间时,设备将不会产生与储存数据。
0x01.数据简报
获取(上行数据)
数据类型与格式由项目文档定义,此处仅以计步数据简报作为示例:
长度 |
内容 |
值 |
|---|---|---|
1 |
类型 |
0x5E |
1 |
数据当日 |
x |
14 |
7天计步总数 |
x |
发送:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x08 |
3 |
次级索引 |
0x01 |
4 |
获取 |
0x00 |
5~n |
类型&参数 |
x |
返回:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x08 |
3 |
次级索引 |
0x01 |
4 |
获取 |
0x00 |
5 |
类型 |
x |
6~n |
数据内容 |
x |
例
4 , 0x08 , 0x01 , 0x00 , 获取0x5E 计步简报0x08 , 0x01 , 0x00 ,0x5E , 计步简报0x10 , 数据当日 = 16日0x10 , 0x11 16日步数 0x1110=43680x10 , 0x21 15日步数 0x1110=84640x64 , 0x05 14日步数 0x0564=13800x00 , 0x33 13日步数 0x3300=130560x71 , 0x47 12日步数 0x4771=182890x62 , 0x24 11日步数 0x2462=93140x49 , 0x05 10日步数 0x0549=1353设置(下行数据)
此处仅以天气预报简报作为示例:
长度 |
内容 |
值 |
|---|---|---|
1 |
类型 |
0xEA |
1 |
数据当日 |
x |
6 |
3天天气预报 |
x |
发送:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x08 |
3 |
次级索引 |
0x01 |
4 |
设置 |
0x01 |
5 |
类型 |
x |
6~n |
参数&内容 |
x |
返回: ACK
例
0x08 , 0x01 , 0x01 ,0xEA , 天气预报简报0x05 , 数据当日 = 5日0x33 , 0x01 5日天气 0x0133=307 大雨0x64 , 0x00 6日天气 0x0064=100 晴0x67 , 0x00 7日天气 0x0067=103 晴间多云0x11.详细数据
本类别用于传输由传感器采集、用户输入或从网络获取的可用于视觉展示的数据。
数据格式详见项目文档定义。
获取(上行数据)
发送:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x08 |
3 |
次级索引 |
0x11 |
4 |
获取 |
0x00 |
5~n |
类型&参数 |
x |
返回:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x08 |
3 |
次级索引 |
0x11 |
4 |
获取 |
0x00 |
5~n |
类型&参数&内容 |
x |
设置(下行数据)
发送:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x08 |
3 |
次级索引 |
0x11 |
4 |
设置 |
0x01 |
5~n |
类型&参数&内容 |
x |
返回: ACK
应用功能 0x0A
本类别用于传输即时或延时与设备进行交互的命令与数据。具体内容由项目文档定义。
功能设置 0xE0
本类别用于传输会改变设备行为的设置与数据,一般不用于视觉展示。具体内容由项目文档定义。