Class C+
总览
Class C+ 为 Class C 协议的增强版本
主要是将MTU升级至 247 bytes ,并增加了一些功能
最近修订历史
日期 |
备注 |
2022-02-07 |
[v3.0.0](docs/classC/changelog.md) |
2020-01-20 |
[v2.0.0](docs/classC/changelog.md) |
2019-05-07 |
[v1.0.4](docs/classC/changelog.md) |
2018-11-28 |
[v1.0.3](docs/classC/changelog.md) |
2018-06-10 |
[v1.0.1](docs/classC/changelog.md) |
2017-10-29 |
[v0.2.2](docs/classC/changelog.md) |
2017-05-24 |
[v0.2.1](docs/classC/changelog.md) |
2016-05-29 |
[v0.2](docs/classC/changelog.md) |
数据帧结构
byte |
0 |
1 |
2~n |
内容 |
流控 |
载荷长度 |
载荷 |
数据包内容
数据包包含如下内容(括号中为长度):
- 流控信息
(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的数值。 作为最近发送数据包的唯一标识。对于任何数据包的返回包都应具有相同的流控数值。 在同时乱序发送多个数据包时,流控可以用来区分各个数据包的返回包。 为达到区分的目的,请勿连续使用相同的流控数值。一般建议采用递增的数值作为流控。- 长度
表示协议帧中载荷的长度,接收方按此处长度进行解析,超出此长度定义的内容将被忽略。
- 索引
协议功能的第一级分类。包含在协议内容的标题中。
- 操作数
协议功能的第二级分类。包含在协议内容的次级标题中。
- 参数
具体协议相关的详细参数内容等。
内容
序号 |
内容 |
|---|---|
0 |
流控 |
1 |
载荷长度 |
2 |
接口索引 |
3 |
操作数 |
4-n |
参数 |
为简洁起见,在以下协议的描述表格中将会省略 流控 与 载荷长度 的表示。
应答 ACK
长度为 0 的数据包表示 ACK ,如下所示:
序号 |
内容 |
值 |
|---|---|---|
0 |
流控 |
同发送 |
1 |
长度 |
0 |
简洁起见,在以下内容中均以 ACK0 直接表示,而不再重复描述其结构。
返回错误 0xFF
0xFF 的接口索引表示返回了一个错误。
当长度为 3 时,表示返回了一个 16位 的通用错误代码。
Code |
含义 |
|---|---|
401 |
设备未注册 |
404 |
接口不存在 |
405 |
无效的操作数 |
406 |
无效的参数 |
410 |
方法未实现或已删除 |
例:
->MCU: fc , length=3 , 0xAB ,
0x02 , 0x01 (调用 0xAB 接口)
MCU->: fc , length=3 , 0xFF ,
0x94 , 0x01 (返回错误 0x194=404 ,表示接口 0xAB 不存在)
时间日期 0x01
0x01.获取当前时间日期
发送:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x01 |
3 |
操作数 |
0x01 |
4 |
参数 |
/ |
返回:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x01 |
3 |
操作数 |
0x01 |
4 |
年 |
0~99 |
5 |
月 |
1~12 |
6 |
日 |
1~31 |
7 |
时 |
0~23 |
8 |
分 |
0~59 |
9 |
秒 |
0~59 |
10 |
时区时 |
-12~+14 |
11 |
时区分 |
-59~+59 |
备注
返回的时间与日期均为
UTC时间,时区使用8位有符号数表示,MCU计算时区会使用时区时和时区分相加,请保证符号正确。-6,-30表示UTC-6:30,+6,+30表示UTC+6:30-6,+30会计算出UTC-5:30的结果,为保持代码的可读性,请勿如此使用
例:
->MCU: fc , length=2 , 0x01 , 0x01 MCU->: fc , length=10 , 0x01 , 0x01 , 0x14 (2020年), 0x0A (10月) , 0x0F (15日) , hour , minute , sec , timezone-hr , timezone-min
0x02.设置当前时间与日期
发送:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x01 |
3 |
操作数 |
0x02 |
4 |
年 |
0~99 |
5 |
月 |
1~12 |
6 |
日 |
1~31 |
7 |
时 |
0~23 |
8 |
分 |
0~59 |
9 |
秒 |
0~59 |
10 |
时区时 |
-12~+14 |
11 |
时区分 |
-59~+59 |
返回:ACK0
备注
当未包含时区信息(长度为8)时,视参数时间为
本地时间,否则为UTC时间
例1:
->MCU: fc , length=8 , 0x01 , 0x02 , year(0-99) , month , day , hour , minute , sec MCU->: ACK
例2:
->MCU: fc , length=10 , 0x01 , 0x02 , year(0-99) , month , day , hour , minute , sec , timezone-hr , timezone-min MCU->: ACK
指针控制 0x02
指针参数由 属性 和对应的 值 来确定。
属性列表如下:
属性(1 byte) |
值(n bytes) |
|---|---|
|
xxxx |
其中 物理位置 和 逻辑位置 的定义及指针驱动原理见 「行针控制」,
运行模式列表如下:
运行模式 |
Hex |
|---|---|
正常 |
0x00 |
停针 |
0x01 |
快速正转 |
0x02 |
快速反转 |
0x03 |
手动调整( |
0x04 |
0x01.获取
发送:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x02 |
3 |
操作数 |
0x01 |
4 |
对象 |
x |
5 |
属性 |
x |
返回:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x02 |
3 |
操作数 |
0x01 |
4 |
对象 |
x |
5 |
属性 |
x |
6~n |
参数 |
x |
例:
->MCU: fc , length=4 , 0x02 , 0x01 ,
0x01(attr1:编号01的机芯) , 0x01(attr2:物理位置)
MCU->: fc , length=6 , 0x02 , 0x01 ,
0x01(attr1:编号01的机芯) , 0x01(attr2:物理位置) ,
0x10 , 0x27(0x2710=10000)
0x02.设置
发送:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x02 |
3 |
操作数 |
0x02 |
4 |
对象 |
x |
5 |
属性 |
x |
6~n |
参数 |
x |
返回:ACK0
备注
当设置为非正常走时模式,设备会启动一个 30 秒的超时定时器,
超时后自动恢复正常模式。重发设置指令可以将超时重置为 30 秒。
当需要维持所设置状态时,建议间隔 10 秒左右重复发送此命令。
例:
->MCU: fc , length=6 , 0x02 , 0x02 ,
0x01(attr1:编号01的机芯) , 0x01(attr2:物理位置) ,
0x10 , 0x27(0x2710=10000)
MCU->: ACK
通知提醒 0x03
参数使用1个 byte 中的8个 bit 来分别表示提醒种类,如下表所示:
参数bit |
含义 |
|---|---|
7 |
\ |
6 |
\ |
5 |
\ |
4 |
\ |
3 |
|
2 |
来电 |
1 |
其他 |
0 |
\ |
备注
app提醒包含在其他类别中
0x01.更新
发送:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x03 |
3 |
操作数 |
0x01 |
4 |
参数bit |
x |
返回:ACK0
例1:
->MCU: fc , length=3 ,
0x03 , 0x01 , 0x04 (来电)
MCU->: ACK
例2:
->MCU: fc , length=3 ,
0x03 , 0x01 , 0x02 (其他)
MCU->: ACK
0x02.取消
发送:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x03 |
3 |
操作数 |
0x02 |
4 |
参数bit |
x |
返回:ACK0
例:
->MCU: fc , length=3 ,
0x03 , 0x02 , 0x04 (取消电话)
MCU->: ack
0x03.设置/获取间隔
备注
设置提醒间隔。
发送:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x03 |
3 |
操作数 |
0x03 |
4 |
设置 |
0x01 |
5~6 |
提醒间隔 |
2字节秒数 |
返回:ACK0
备注
获取提醒间隔
发送:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x03 |
3 |
操作数 |
0x03 |
4 |
获取 |
0x00 |
返回:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x03 |
3 |
操作数 |
0x03 |
4~5 |
提醒间隔 |
2字节秒数 |
例1:
->MCU: fc , length=5 ,
0x03 , 0x03 , 0x01 , 0x02 , 0x01 (表示提醒间隔设置为0x0102=258秒)
MCU->: ack
例2:
->MCU: fc , length=3 , 0x03 , 0x03 , 0x00
MCU->: fc , length=4 ,
0x03 , 0x03 , 0x04 , 0x01 (表示获取到提醒间隔为0x0104=260秒)
0x04.设置提醒开关
发送:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x03 |
3 |
操作数 |
0x04 |
4 |
设置 |
0x01 |
5 |
参数 |
x |
返回:ACK0
备注
使用 0xFF 参数可简单的开启所有提醒。
使用 0x00 参数可简单的关闭所有提醒。
例1:
->MCU: fc , length=4 ,
0x03 , 0x04 , 0x01 , 0x04 (来电提醒开启,且其他提醒关闭)
MCU->: ACK
例2:
->MCU: fc , length=4 ,
0x03 , 0x04 , 0x01 , 0x02 (其他提醒开启,且来电提醒关闭)
MCU->: ACK
例3:
->MCU: fc , length=4 ,
0x03 , 0x04 , 0x01 , 0x06 (其他与来电提醒均开启)
MCU->: ACK
0x05.获取提醒开关
发送:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x03 |
3 |
操作数 |
0x05 |
4 |
获取 |
0x02 |
返回:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x03 |
3 |
操作数 |
0x05 |
4 |
参数 |
x |
例1:
->MCU: fc , length=3 , 0x03 , 0x05 , 0x02
MCU->: fc , length=3 ,
0x03 , 0x05 , 0x04 (来电提醒开启,其他提醒关闭)
例2:
->MCU: fc , length=3 , 0x03 , 0x05 , 0x02
MCU->: fc , length=3 ,
0x03 , 0x05 , 0xff (所有提醒均开启)
0x11. 内容推送
推送提醒内容至屏幕显示
发送:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x03 |
3 |
操作数 |
0x11 |
4~n |
参数 |
x |
返回:ACK0
备注
当超过单帧数据长度时,使用 总览 中描述的延续包传输方式。
- 例1:
这个示例发送了如下一段文本: 「
这是一段测试文本, 用来测试显示推送内容的功能。」:->MCU: fc , 2(索引和操作数长度)+67(字符串长度) , 0x03 , 0x11 , 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 MCU->: ack
系统设置 0x04
0x01.设置节电时间
发送:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x04 |
3 |
操作数 |
0x01 |
4 |
起始时 |
x |
5 |
起始分 |
x |
6 |
结束分 |
x |
7 |
结束分 |
x |
8 |
开关 |
1/0 |
返回:ACK0
例:
->MCU: fc , length=7 , 0x04 , 0x01 ,
23 , 30 , 7 , 20 , 0x01 (节电时间设置为: 23:30 - 7:20 )
MCU->: ack
备注
当设备在节电时间段内,会自动断开蓝牙连接,关闭蓝牙。 对设备的操作,比如按下按键,会暂时取消节电状态, 直到5-10分钟内没有操作,重新进入节电状态
0x02.获取节电时间
发送:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x04 |
3 |
操作数 |
0x02 |
返回:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x04 |
3 |
操作数 |
0x02 |
4 |
起始时 |
x |
5 |
起始分 |
x |
6 |
结束分 |
x |
7 |
结束分 |
x |
8 |
开关 |
1/0 |
例:
->MCU: fc , length=2 , 0x04 , 0x02
MCU->: fc , length=7 , 0x04 , 0x02 ,
23 , 30 , 7 , 20, 0x01
0x11.设置开关功能位
开关功能位定义:
参数bit |
含义 |
|---|---|
7 |
\ |
6 |
\ |
5 |
\ |
4 |
\ |
3 |
\ |
2 |
\ |
1 |
抬手亮屏 |
0 |
\ |
发送:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x04 |
3 |
操作数 |
0x11 |
4 |
参数 |
x |
返回:ACK0
例1:
->MCU: fc , length=3 , 0x04 ,
0x11 , 0x02 (打开抬手亮屏)
MCU->: ACK
例2:
->MCU: fc , length=3 , 0x04 ,
0x11 , 0x00 (关闭抬手亮屏)
MCU->: ACK
0x12.获取开关功能位
发送:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x04 |
3 |
操作数 |
0x12 |
返回:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x04 |
3 |
操作数 |
0x12 |
4 |
参数 |
x |
例:
->MCU: fc , length=2 , 0x04 , 0x12
MCU->: fc , length=3 , 0x04 , 0x12 ,
0x02 (抬手亮屏已打开)
闹钟设定 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 |
第一组闹钟时 |
x |
5 |
第一组闹钟分 |
x |
6 |
第一组重复设置 |
x |
7 |
第一组开关 |
0为关,1为开 |
8 |
第二组闹钟时 |
x |
9 |
第二组闹钟分 |
x |
10 |
第二组重复设置 |
x |
11 |
第二组开关 |
0为关,1为开 |
12 |
第三组闹钟时 |
x |
13 |
第三组闹钟分 |
x |
14 |
第三组重复设置 |
x |
15 |
第三组开关 |
0为关,1为开 |
… |
… |
… |
返回:ACK0
备注
设置闹钟时,如果发送闹钟组数少于最大支持组数,则未设置的闹钟将被置为关闭
例1:
->MCU: fc , length , 0x05 , 0x01 ,
8 , 14 , 0xBE , 1
(设置第一组闹钟,时间: 8:14 重复: 周一 - 周五 开启 其他关闭)
MCU->: ack
例2:
->MCU: fc , length , 0x05 , 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 重复: 周一 、 周四 闹钟开启)
(其他未设置闹钟关闭)
MCU->: ack
0x02.获取闹钟
发送:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x05 |
3 |
操作数 |
0x02 |
返回:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x05 |
3 |
操作数 |
0x02 |
4 |
闹钟时 |
x |
5 |
闹钟分 |
x |
6 |
重复设置 |
x |
7 |
开关 |
x |
8~n |
… |
… |
例:
->MCU:fc , length=2 , 0x05 , 0x02 ,
MCU->:fc , length=22 , 0x05 , 0x02 ,
10 , 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 重复: 周一 - 周五 闹钟关闭)
0x81.设置闹钟(兼容)
发送:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x05 |
3 |
操作数 |
0x81 |
4 |
闹钟序号 |
x |
5 |
闹钟时 |
x |
6 |
闹钟分 |
x |
7 |
重复设置 |
x |
8 |
开关 |
0为关,1为开 |
闹钟序号最小为 1,发送 0 时,视为 1
返回:ACK0
例1:
->MCU: fc , length=7 , 0x05 , 0x81 ,
1 ,
8 , 14 , 0xBE , 1
(设置第一组闹钟,时间: 8:14 重复: 周一 - 周五 开启 其他关闭)
MCU->: ack
系统信息 0x06
0x21. 获取设备分类识别码
发送:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x06 |
3 |
操作数 |
0x21 |
返回:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x06 |
3 |
操作数 |
0x21 |
4 |
识别码 |
x |
例:
APP->: fc , length=2 , 0x06 , 0x21
->APP: fc , length , 0x06 , 0x21 ,
0x01(识别码)
备注
设备分类识别码同时放置于广播包厂商信息的第 3 个字节处
备注
访问 「齿轮箱配置列表」 获取更多信息
0x22. 获取设备唯一识别码
发送:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x06 |
3 |
操作数 |
0x22 |
返回:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x06 |
3 |
操作数 |
0x22 |
4~n |
识别码 |
x |
例:
APP->: fc , length=2 , 0x06 , 0x22
->APP: fc , length , 0x06 , 0x22 ,
{0xA1,0xB2,0xC3,0xD4,0xE5,0xF6}(唯一识别码)
备注
返回的长度由具体设备决定,一般不少于 6 个字节
0x10.获取OTA名称
发送:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x06 |
3 |
操作数 |
0x10 |
3 |
内容选择 |
|
返回:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x06 |
3 |
操作数 |
0x10 |
4~n |
字符串 |
string |
例1:
APP->: fc , length=3 , 0x06 ,
0x10 , 0x00
->APP: fc , length , 0x06 ,
0x10 , "CSW-V1-30"
例2:
APP->: fc , length=3 , 0x06 , 0x10 , 0x01
->APP: fc , length , 0x06 , 0x10 , "LSK"
0x11.获取固件版本
发送:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x06 |
3 |
操作数 |
0x11 |
返回:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x06 |
3 |
操作数 |
0x11 |
4~n |
字符串 |
string |
例:
APP->: fc , length=2 , 0x06 , 0x11
->APP: fc , length=XX , 0x06 , 0x11 ,
'v' , '1' , '.' , '0' , '.' , '0'
0x12.获取编译日期
发送:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x06 |
3 |
操作数 |
0x12 |
返回:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x06 |
3 |
操作数 |
0x12 |
4~n |
字符串 |
string |
例:
APP->: fc , length=2 , 0x06 , 0x12
->APP: fc , length , 0x06 , 0x12 ,
{日期字符串}
0x13.获取编译时间
发送:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x06 |
3 |
操作数 |
0x13 |
返回:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x06 |
3 |
操作数 |
0x13 |
4~n |
字符串 |
string |
例:
APP->: fc , length=2 , 0x06 , 0x13
->APP: fc , length , 0x06 , 0x13 ,
{时间字符串}
0x14.获取编译序列号
发送:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x06 |
3 |
操作数 |
0x14 |
返回:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x06 |
3 |
操作数 |
0x14 |
4~n |
字符串 |
string |
例:
APP->: fc , length=2 , 0x06 , 0x14
->APP: fc , length , 0x06 , 0x14 ,
{序列号字符串}
0x03.系统类型
系统 |
值 |
|---|---|
iOS |
0x00 |
Android |
0x01 |
Other |
0xFF |
备注
本条指令根据长度区分是获取还是设置,长度为 2 则为获取,为 3 则为设置
获取:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x06 |
3 |
操作数 |
0x03 |
返回:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x06 |
3 |
操作数 |
0x03 |
4 |
系统类型 |
x |
例:
APP->: fc , length=2 , 0x06 , 0x03
->APP: fc , length=3 , 0x06 , 0x03 ,
0x00(ios)
设置:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x06 |
3 |
操作数 |
0x03 |
4 |
系统类型 |
x |
返回:ACK0
例:
APP->: fc , length=3 , 0x06 , 0x03 ,
0x01(android)
->APP: ack
0x04.广播名称
获取:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x06 |
3 |
操作数 |
0x04 |
4 |
获取 |
0x00 |
返回:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x06 |
3 |
操作数 |
0x04 |
4 |
字符串 |
x |
例:
->MCU: fc , length=3 , 0x06 , 0x04 , 0x00
MCU->: fc , length=8 , 0x06 , 0x04 ,
'C' , 'O' , 'R' , 'U' , 'M' , 'I'
设置:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x06 |
3 |
操作数 |
0x04 |
4 |
设置 |
0x01 |
5~n |
名称 |
string |
返回:ACK0
例:
->MCU: fc , length=7 , 0x06 , 0x04 , 0x01 ,
'T' , 'E' , 'S' , 'T'
MCU->: ACK
备注
更改广播名称后,重启生效。可询问用户是否立即重启,然后发送重启命令。
备注
广播名称设置不能超过12字节。如果长度为 0 ,或者第一个字节为 0x00 ,将视为无效。
iOS可能由于缓存原因不会立即更新显示名称
0x05.获取MAC地址
获取:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x06 |
3 |
操作数 |
0x05 |
4 |
获取 |
0x00 |
返回:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x06 |
3 |
操作数 |
0x05 |
4~9 |
mac地址 |
x |
例:
->MCU: fc , length=3 , 0x06 , 0x05 , 0x00
MCU->: fc , length=8 , 0x06 , 0x05 ,
0xDE , 0xAD , 0xBF , 0xCC , 0xAA , 0xEE
0x06. 获取绑定状态
获取:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x06 |
3 |
操作数 |
0x06 |
返回:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x06 |
3 |
操作数 |
0x06 |
4 |
绑定状态 |
x |
例:
->MCU: fc , length=2 , 0x06 , 0x06
MCU->: fc , length=3 , 0x06 , 0x06 ,
0x01(已绑定)
0x30. 获取马达使用率数据
获取:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x06 |
3 |
操作数 |
0x30 |
4 |
获取 |
0x01 |
返回:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x06 |
3 |
操作数 |
0x30 |
4~7 |
总震动时长(ms) |
x |
8~11 |
提醒震动次数(次) |
x |
12~15 |
提醒震动时长(ms) |
x |
例:
->MCU : fc , length=3 , 0x06 , 0x30 , 0x01
MCU-> : fc , length=14 , 0x06 , 0x30 ,
0x34 , 0x02 , 0x01 , 0x00 , (总震动时长=0x10234=66.100秒)
0x28 , 0x00 , 0x00 , 0x00 , (提醒震动=0x28=40次)
0x40 , 0x9c , 0x00 , 0x00 (提醒震动时长=0x9c40=40.000秒)
清除:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x06 |
3 |
操作数 |
0x30 |
4 |
清除 |
0x04 |
返回:ACK0
0x31. 获取屏幕使用率数据
获取:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x06 |
3 |
操作数 |
0x31 |
4 |
获取 |
0x01 |
返回:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x06 |
3 |
操作数 |
0x31 |
4~7 |
总亮屏时长(ms) |
x |
8~11 |
抬腕亮屏次数(次) |
x |
12~15 |
抬腕亮屏时长(ms) |
x |
例:
->MCU : fc , length=3 , 0x06 , 0x31 , 0x01
MCU-> : fc , length=14 , 0x06 , 0x31 ,
0x10 , 0x0e , 0x00 , 0x00 , (总亮屏时长=0xe10=3600秒)
0x20 , 0x03 , 0x00 , 0x00 , (抬腕亮屏次数=0x320=800次)
0x57 , 0x04 , 0x00 , 0x00 (抬腕亮屏时长=0x457=1111秒)
清除:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x06 |
3 |
操作数 |
0x31 |
4 |
清除 |
0x04 |
返回:ACK0
0x32. 获取心率使用率数据
获取:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x06 |
3 |
操作数 |
0x32 |
4 |
获取 |
0x01 |
返回:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x06 |
3 |
操作数 |
0x32 |
4~7 |
心率测量时长(s) |
x |
8~11 |
心率测量次数(次) |
x |
例:
->MCU : fc , length=3 , 0x06 , 0x32 , 0x01
MCU-> : fc , length=10 , 0x06 , 0x32 ,
0x83 , 0x04 , 0x00 , 0x00 , (心率测量=0x483=1155秒)
0x19 , 0x00 , 0x00 , 0x00 , (心率测量次数=0x19=25次)
清除:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x06 |
3 |
操作数 |
0x32 |
4 |
清除 |
0x04 |
返回:ACK0
0x33. 获取蓝牙使用率数据
获取:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x06 |
3 |
操作数 |
0x33 |
4 |
获取 |
0x01 |
返回:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x06 |
3 |
操作数 |
0x33 |
4~7 |
蓝牙广播时长(s) |
x |
8~11 |
蓝牙连接时长(s) |
x |
例:
->MCU : fc , length=3 , 0x06 , 0x33 , 0x01
MCU-> : fc , length=14 , 0x06 , 0x33 ,
0x03 , 0x02 , 0x01 , 0x00 , (广播=0x10203=66051秒)
0x01 , 0x02 , 0x03 , 0x00 , (连接=0x30201=197121秒)
0x71 , 0x00 , 0x00 , 0x00 (断开=0x71=113次)
清除:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x06 |
3 |
操作数 |
0x33 |
4 |
清除 |
0x04 |
返回:ACK0
系统操作 0x07
0xE0-0xE2.链路测试
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x07 |
3 |
操作数 |
0xE0/0xE2 |
例:
APP->: fc , length=2 , 0x07 , 0xE0
->APP: fc , length=2 , 0x07 , 0xE1
APP->: fc , length=2 , 0x07 , 0xE2
接收到 0xE0 指令后,设备将返回 0xE1 指令。
接收到 0xE2 指令后,设备将在数秒后关闭蓝牙,并使其 LED 灯低频闪烁,表示测试通过,可分拣出。
0xFE.设备重启
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x07 |
3 |
操作数 |
0xFE |
例:
APP->: fc , length=2 , 0x07 , 0xFE
备注
移动端可通过判断与设备之间蓝牙连接断开即为成功重启
0xFF.设备关机
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x07 |
3 |
操作数 |
0xFF |
例:
APP->: fc , length=2 , 0x07 , 0xFF
备注
移动端可通过判断与设备之间蓝牙连接断开即为成功关机
数据交互 0x08
备注
在未同步过时间时,设备将不会储存计步数据。
0x01.获取最近7天计步简报
数据格式如下:
序号 |
内容 |
值 |
|---|---|---|
0 |
当天步数低位 |
0xLL |
1 |
当天步数高位 |
0xHH |
2 |
昨天步数低位 |
X |
3 |
昨天步数高位 |
X |
4 |
前天步数低位 |
X |
5 |
前天步数高位 |
X |
n |
依次类推 |
X |
如上表所示,当天数据的值即为 0xHHLL
获取数据:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x08 |
3 |
操作数 |
0x01 |
4 |
参数 |
0x01(获取) |
返回数据:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x08 |
3 |
操作数 |
0x01 |
4~n |
计步数据 |
X |
例:
APP->: fc , length=3 , 0x08 , 0x01 , 0x01(获取)
->APP: fc , length=17 , 0x08 , 0x01 ,
18(当月号数) , 0x34(当天数据低位) , 0x12(当天数据高位) ,
0xZZ(前一天数据低位) , 0xYY(前一天数据高位)......
以上返回数据表示,数据读取时为当月18号,当天数据为0x1234=4660步,一条命令发送7天数据
0x02.每日计步目标
获取计步目标:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x08 |
3 |
操作数 |
0x02 |
4 |
参数 |
0x01 |
返回计步目标:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x08 |
3 |
操作数 |
0x02 |
4 |
目标低位 |
0xLL |
5 |
目标高位 |
0xHH |
例:
->MCU: fc , length=3 , 0x08 , 0x02 , 0x01
MCU->: fc , length=4 , 0x08 , 0x02 ,
0xE8 , 0x03 (获取计步目标为0x3E8=1000步)
设定计步目标:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x08 |
3 |
操作数 |
0x02 |
4 |
参数 |
0x02 |
4 |
目标低位 |
0xLL |
5 |
目标高位 |
0xHH |
返回:ACK0
例:
->MCU: fc , length=5 , 0x08 , 0x02 ,
0x02 , 0xE8 , 0x03 (设置计步目标为0x3E8=1000步)
MCU->: ack
0x03.获取最后心率测量结果
获取心率测量结果:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x08 |
3 |
操作数 |
0x03 |
返回心率测量结果:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x08 |
3 |
操作数 |
0x03 |
4~7 |
unix时间戳 |
X |
8 |
心率值 |
Y |
例:
APP->: fc , length=3 , 0x08 , 0x03
->APP: fc , length=7 , 0x08 , 0x03 ,
{0x06,0xF2,0x3D,0x5B}时间戳 , 0x59(心率=89)
以上返回数据表示,数据读取时 ``unix`` 时间戳为 ``0x5B3DF206`` ,心率为 ``0x59=89``
备注
当返回心率为 0xFF=255 时,表示没有数据
0x10.请求获取详细数据
请求获取详细数据:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x08 |
3 |
操作数 |
0x10 |
4 |
参数 |
0x01 |
5 |
数据类型 |
X |
返回详细数据概况:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x08 |
3 |
操作数 |
0x10 |
4 |
数据类型 |
X |
5 |
数据包数量低位 |
X |
6 |
数据包数量高位 |
X |
备注
请求获取详细数据,在获取数据包前必须请求。此请求会返回数据包的总数, 并且会临时锁定所有对应数据类型的数据包,防止新产生的数据包造成干扰。 当一分钟内没有获取详细数据时,会自动解除数据包锁定。
例1:
->MCU: fc , length=4 , 0x08 , 0x10 ,
0x01(请求) , 0x01(计步数据)
MCU->: fc , length=5 , 0x08 , 0x10 ,
0x01(计步数据) , 0xE8 , 0x03 (返回数据包数为 0x3E8=1000 个数据包)
例2:
->MCU: fc , length=4 , 0x08 , 0x10 ,
0x01(请求) , 0x02(心率数据)
MCU->: fc , length=5 , 0x08 , 0x10 ,
0x02(心率数据) , 0x10 , 0x01 (返回数据包数为 0x110=272 个数据包)
0x11.获取详细数据
获取详细数据:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x08 |
3 |
操作数 |
0x11 |
4 |
参数 |
0x01 |
5 |
数据类型 |
X |
6 |
索引低位 |
X |
7 |
索引高位 |
X |
8 |
配置 |
Flag |
返回详细数据:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x08 |
3 |
操作数 |
0x11 |
4~n |
数据包 |
X |
获取数据包的内容。
计步数据包格式为 unix时间戳(4)-数据类型(1)-扩展(1)-数据值(2) ,
其中,计步数据类型为 0x01 ,时间戳与数据值表示在这个时间戳与上个时间戳之间产生的步数。
心率数据包格式为 unix时间戳(4)-数据类型(1)-数据值(1) ,
其中,心率数据类型为 0x02 ,时间戳与数据值表示在这个时间戳测量的心率。
睡眠数据包格式为 unix时间戳(4)-数据类型(1)-数据值(1) ,
其中,睡眠数据类型为 0x03 ,时间戳与数据值表示在这个时间戳之后的睡眠状态。在数据值中 0 表示清醒, 1 表示浅睡, 2 表示深睡。
当 配置Flag=0x01 时,表示启用 burst 模式,将一次返回尽可能多的数据包,为从请求的索引开始递增的数据包。否则,返回一个数据包。
当返回的数据帧超过数据范围时,超出的数据包将不会返回。
例1:
->MCU: fc , length=6 , 0x08 , 0x11 ,
0x01 , 0x01 , 0x05 , 0x00 (普通模式获取第5个计步数据包)
MCU->: fc , length=10 , 0x08 , 0x11 ,
{0x06,0xF2,0x3D,0x5B}时间戳(0x5B3DF206) ,
{0x01}(计步数据) , {0xFF} , {0xE8,0x03}(1000步)
例2:
->MCU: fc , length=7 , 0x08 , 0x11 ,
0x01 , 0x01 , 0x78 , 0x00 , 0x01 (burst模式从第120个数据包开始获取)
MCU->: fc , length=xx , 0x08 , 0x11 , (由返回长度可以计算返回的数据包数量)
{0x06,0xF2,0x3D,0x5B}时间戳1(0x5B3DF206) ,
{0x01}(计步数据) , {0xFF} , {0xE8,0x03}(1000步) ,
{0xB0,0xF2,0x3D,0x5B}时间戳2(0x5B3DF2B0) ,
{0x01}(计步数据) , {0xFF} , {0xE7,0x03}(999步)
{0xB0,0xF2,0x3D,0x5B}时间戳3(0x5B3DF2B0) ,
{0x01}(计步数据) , {0xFF} , {0xE7,0x03}(999步)
{0xB0,0xF2,0x3D,0x5B}时间戳4(0x5B3DF2B0) ,
{0x01}(计步数据) , {0xFF} , {0xE7,0x03}(999步)
{0xB0,0xF2,0x3D,0x5B}时间戳5(0x5B3DF2B0) ,
{0x01}(计步数据) , {0xFF} , {0xE7,0x03}(999步)
......
例3:
->MCU: fc , length=6 , 0x08 , 0x11 ,
0x01 , 0x02(心率数据) , 0x02 , 0x00 (普通模式获取第2个心率数据包)
MCU->: fc , length=10 , 0x08 , 0x11 ,
{0x06,0xF2,0x3D,0x5B}时间戳(0x5B3DF206) ,
{0x02}(心率数据) , {0x51}(心率81)
例4:
->MCU: fc , length=7 , 0x08 , 0x11 ,
0x01 , 0x02 , 0x04 , 0x00 , 0x01 burst模式获取从第4个开始获取心率数据包
MCU->: fc , length=14 , 0x08 , 0x11 ,
{0x06,0xF2,0x3D,0x5B}时间戳1(0x5B3DF206) ,
{0x02}(心率数据) , {0x51}(心率81) ,
{0xB0,0xF2,0x3D,0x5B}时间戳2(0x5B3DF2B0) ,
{0x02}(心率数据) , {0x53}(心率83)
当使用 burst 模式获取到超出范围的数据包时,数据类型会填充为 0xFF
备注
第 1 个数据包为最新的数据包。
一种建议的同步数据方式是,从第 1 包开始往后同步,直到遇到重复(同步过)的 时间戳 或者同步完了所有数据包为止。当遇到重复的 时间戳 后,再检查最后一个数据包的时间戳是否已经重复(同步过),如果没有,则从最后一个数据包往前同步,直到遇到重复(同步过)为止。
当需要计算有多少数据包没有同步时,可以使用二分法读取,由于数据包一般不会储存超过 2k 个,所以至多 11 次读取便可以确定最后同步的数据包的位置。
0x70.走动提醒
当用户在设定时间段内超过一定时间没有走动则震动提醒
备注
在设定的时间段内,每隔一定时间计算这段时间内的步数, 如果这段时间内低于45步,则当时间段结束时,会产生震动提醒
备注
当提醒间隔小于10分钟时会被设置为10分钟,大于240分钟时会被设置为240分钟 设定提醒间隔会刷新提醒时间,重新从0开始计算
设定走动提醒:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x08 |
3 |
操作数 |
0x70 |
4 |
参数 |
0x01 |
5 |
开关 |
1/0 |
6 |
间隔(分钟) |
X |
7 |
起始时 |
X |
8 |
起始分 |
X |
9 |
结束时 |
X |
10 |
结束分 |
X |
返回:ACK0
例:
->MCU: fc , length=8 , 0x08 , 0x70 , 0x01 ,
1 , (启用)
30 , (提醒间隔 30 分钟)
11 , 30 , 19 , 20 (提醒时间段 11:30 - 19:20 )
MCU->: ack
获取走动提醒:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x08 |
3 |
操作数 |
0x70 |
4 |
参数 |
0x02 |
返回时间段:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x08 |
3 |
操作数 |
0x70 |
4 |
参数 |
0x02 |
5 |
开关 |
1/0 |
6 |
间隔 |
X |
7 |
起始时 |
X |
8 |
起始分 |
X |
9 |
结束时 |
X |
10 |
结束分 |
X |
例:
->MCU: fc , length=3 , 0x08 , 0x70 , 0x02
MCU->: fc , length=8 , 0x08 , 0x70 , 0x02 ,
1 , 30 , 11 , 30 , 19 , 20
0x80.APP拍照模式 <非HID模式>
备注
进入拍照模式后60秒内没有按键拍照则自动退出拍照模式,每次按键拍照会将超时时间重置为60秒(翻腕拍照则不会重置)
进入拍照模式(重置计时):
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x08 |
3 |
操作数 |
0x80 |
4 |
参数 |
0x01 |
返回:ACK0
例:
->MCU: fc , length=3 , 0x08 , 0x80 , 0x01
MCU->: ack
退出拍照模式(重置计时):
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x08 |
3 |
操作数 |
0x80 |
4 |
参数 |
0x00 |
返回:ACK0
例:
->MCU: fc , length=3 , 0x08 , 0x80 , 0x00
MCU->: ack
拍摄:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x08 |
3 |
操作数 |
0x80 |
4 |
参数 |
0x08 |
返回:ACK0
例:
MCU->: fc , length=3 , 0x08 , 0x80 , 0x08
->MCU: ack
0x81.拍照模式控制 <HID模式>
进入拍照模式(重置计时):
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x08 |
3 |
操作数 |
0x81 |
4 |
参数 |
0x01 |
返回:ACK0
例:
->MCU: fc , length=3 , 0x08 , 0x81 , 0x01
MCU->: ack
退出拍照模式(重置计时):
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x08 |
3 |
操作数 |
0x81 |
4 |
参数 |
0x00 |
返回:ACK0
例:
->MCU: fc , length=3 , 0x08 , 0x81 , 0x00
MCU->: ack
应用定制 0x0D
0x01.倒计时
设置
发送:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x0D |
3 |
操作数 |
0x01 |
4 |
设置 |
0x01 |
5 |
状态 |
1/0 |
6~7 |
剩余秒数 |
x |
返回:ACK0
备注
状态为1表示正在运行,状态为0表示没有运行
例1:
->MCU: fc , length , 0x0D , 0x01 ,
0x01 , (设置)
0x01 , (运行)
0x58 , 0x02 (0x258 = 600s)
MCU->: ack
例2:
->MCU: fc , length , 0x0D , 0x01 ,
0x01 , (设置)
0x00 , (关闭)
0x11 , 0x01 (0x111 = 273s 关闭时,设置的时间没有意义)
MCU->: ack
获取
发送:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x0D |
3 |
操作数 |
0x01 |
4 |
获取 |
0x00 |
返回:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x0D |
3 |
操作数 |
0x01 |
4 |
获取 |
0x00 |
5 |
状态 |
1/0 |
6~7 |
剩余秒数 |
x |
例1:
->MCU: fc , length=3 , 0x0D , 0x01 ,
0x00 , (获取)
MCU->: fc , length , 0x0D , 0x01 ,
0x00 , (获取)
0x01 , (运行)
0x57 , 0x02 (0x257 = 599s)
例2:
->MCU: fc , length=3 , 0x0D , 0x01 ,
0x00 , (获取)
MCU->: fc , length , 0x0D , 0x01 ,
0x00 , (获取)
0x00 , (未运行)
0x00 , 0x00 (0s)
0x02.日程
设置
发送:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x0D |
3 |
操作数 |
0x02 |
4 |
设置 |
0x01 |
5 |
当前小时 |
0-23 |
6~8 |
日程bit |
x |
返回:ACK0
备注
日程由 当前小时 与24个bit来描述由 当前小时 开始的连续24小时内的日程计划。
连续24个bit分别表示由 当前小时 开始的每个小时,其中最高位表示第一个小时。
例1:
->MCU: fc , length , 0x0D , 0x02 ,
0x01 , (设置)
8 , (8点)
0x80 , 0x00 , 0x00 (8-9点有日程)
MCU->: ack
例2:
->MCU: fc , length , 0x0D , 0x02 ,
0x01 , (设置)
0 , (0点)
0x00 , 0x80 , 0x00 (8-9点有日程)
MCU->: ack
例3:
->MCU: fc , length , 0x0D , 0x02 ,
0x01 , (设置)
12 , (12点)
0x44 , 0x20 , 0x20 (13-14点,17-18点,22-23点,次日7-8点有日程)
MCU->: ack
获取
发送:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x0D |
3 |
操作数 |
0x02 |
4 |
获取 |
0x00 |
返回:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x0D |
3 |
操作数 |
0x02 |
4 |
获取 |
0x00 |
5 |
设置时的小时 |
0-23 |
6~8 |
日程bit |
x |
例:
->MCU: fc , length=3 , 0x0D , 0x02 ,
0x00 , (获取)
MCU->: fc , length , 0x0D , 0x02 ,
0x00 , (设置)
12 , (12点)
0x44 , 0x20 , 0x20 (13-14点,17-18点,22-23点,次日7-8点有日程)
备注
如果获取的 设置时的小时 大于当前小时,则为前一日的时间。
0x03.屏显设置
设置
发送:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x0D |
3 |
操作数 |
0x03 |
4 |
设置 |
0x01 |
5 |
颜色 |
|
6 |
默认界面 |
|
7 |
圆环功能 |
|
返回:ACK0
获取
发送:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x0D |
3 |
操作数 |
0x03 |
4 |
获取 |
0x00 |
返回:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x0D |
3 |
操作数 |
0x03 |
4 |
获取 |
0x00 |
5 |
颜色 |
|
6 |
默认界面 |
|
7 |
圆环功能 |
0x04.睡眠监测控制
发送:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x0D |
3 |
操作数 |
0x04 |
4 |
控制 |
0x00 |
5 |
指令 |
|
返回:ACK0
0x05.天气
备注
天气代码列表见 「共用信息」
发送:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x0D |
3 |
操作数 |
0x05 |
4 |
设置 |
0x01 |
5~6 |
当日天气 |
x |
7~8 |
次日天气 |
x |
9~n |
… |
x |
返回:ACK0
例:
->MCU: fc , length , 0x0D , 0x05 ,
0x01 , (设置)
0xF3 , 0x01 , (今日 0x01F3=499 雪)
0x93 , 0x01 , (明日 0x0193=403 暴雪)
0x65 , 0x00 , (后日 0x0065=101 多云)
MCU->: ack
0x06.显示同步
单次获取
发送:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x0D |
3 |
操作数 |
0x06 |
4 |
获取 |
0x00 |
返回:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x0D |
3 |
操作数 |
0x06 |
4 |
获取 |
0x00 |
5~n |
显存上传 |
x |
自动上传
发送:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x0D |
3 |
操作数 |
0x06 |
4 |
控制 |
0x0C |
5 |
自动上传 |
|
返回:ACK0
备注
使能自动上传后,在显示发生变化时即会自动上传显存。
自动上传具有超时机制,超过 5s 没有重新使能则会超时关闭自动上传。
需要延续自动上传时,建议间隔 2s 发送使能命令。
自动上传:
序号 |
内容 |
值 |
|---|---|---|
2 |
接口索引 |
0x0D |
3 |
操作数 |
0x06 |
4 |
自动上传 |
0x0A |
5~n |
显存上传 |
x |