JoyLink-Bluetooth 协议 V1.93
京东智能协议组
本文档可能包含公司技术机密以及其他需要保密的信息,本文档所包含的所有信息均为北京京
东智能集团公司版权所有。未经本公司书面许可,不得向授权许可方以外的任何第三方泄露本
文档内容,不得以任何形式擅自复制或传播本文档。若使用者违反本版权保护的约定,本公司
有权追究使用者由此产生的法律责任。
修订记录:
版本号
修订人
修订日期
修订描述
V 1.91
V 1.92
V 1.93
2017.5.19
2017.7.19
2017.7.21
增加 7.2 BLE+一键配置配网流程的说明
增加第 5 章,带安全芯片的设备认证部分,增加第 8 张
配网失败后提示用户重新配置的说明
删除了一个安全级别,只留下 plaintext;psk;ecdh
2.1.
2.2.
1.1.
1.2.
1 关键词定义及约定 ............................................................................................................................................. 4
关键词定义 ......................................................................................................................................... 4
约定 ..................................................................................................................................................... 4
2 协议说明 ............................................................................................................................................................. 4
关键词定义 ......................................................................................................................................... 4
Profile 规定 ...................................................................................................................................... 4
2.2.1 Profile 设计理念 ............................................................................................................................. 4
2.2.2 Profile 实现形式 ............................................................................................................................. 5
2.2.3 Profile 架构 ..................................................................................................................................... 6
通信过程描述 ..................................................................................................................................... 7
2.3.1 蓝牙设备发送数据 ........................................................................................................................... 7
2.3.2 蓝牙设备接收数据 ........................................................................................................................... 8
3 数据通信 ............................................................................................................................................................. 8
通信层面 ............................................................................................................................................. 8
3.1.
3.2 业务层面 ....................................................................................................................................................... 9
3.2.1 通信包 ................................................................................................................................................ 9
3.2.2 异常反馈包 ...................................................................................................................................... 10
3.3 补充规定 ..................................................................................................................................................... 11
3.3.1 写结果反馈编码 .............................................................................................................................. 11
3.3.2 特殊 property 定义 ....................................................................................................................... 12
4 设备发现连接 ................................................................................................................................................... 13
5.设备认证 ................................................................................................................................................................ 15
5.1 设备证书写入 ............................................................................................................................................. 15
5.2 设备认证 .................................................................................................................................................... 16
6 安全机制 ............................................................................................................................................................... 16
6.1 安全级别为 0 .............................................................................................................................................. 17
6.2 安全级别为 1 .............................................................................................................................................. 17
6.3 安全级别为 2 .............................................................................................................................................. 17
7 数据通信流程 ................................................................................................................................................... 18
7.1 控制终端读蓝牙设备数据 ......................................................................................................................... 18
7.2 控制终端写蓝牙设备 ................................................................................................................................. 18
7.2.1 不带结果反馈 .................................................................................................................................. 18
7.2.2 带结果反馈 ..................................................................................................................................... 19
7.3 设备主动向控制终端 indicate 数据 ....................................................................................................... 19
7.3.1 不带结果反馈 .................................................................................................................................. 20
7.3.2 带结果反馈 ...................................................................................................................................... 20
Wi-Fi 配网实现 ................................................................................................................................................ 21
8.1 BLE 配网流程 .............................................................................................................................................. 21
8.2 BLE+一键配置流程说明 .............................................................................................................................. 23
2.3.
8
1 关键词定义及约定
1.1. 关键词定义
AES 算法标准:AES128 CBC/PKCS#5 padding。
GUID:合法用户从云端申请并写入设备的唯一 ID 值,32 字节,是设备的唯一标识。
PUID:某类产品(同一品牌、同一批次、同一规格)的标识码,6 字节固定长数字和字母组合。是系统
生成的产品标识码。
BRAND:品牌编号。
CID:品类编号。
property:设备的每一项操作或能力,定义为一个属性(property),例如:开,关,温度提升 1 度。属性
对应的数值按能力不同,阈值也不同。对一个属性的一次操作会由 Operate + TLV 描述。
TLV:是一个结构体,Tag + Length +Value。
Tag: 给某个 property 遍的一个号码。
1.2. 约定
本协议只针对 BLE 设备的连接及数据传输,对传统蓝牙设备不适用。
2 协议说明
2.1. 关键词定义
JoyLink-Bluetooth 协议,按照角色可以把智能硬件分为以下三种:
蓝牙设备(Slave):支持 BLE 协议的设备。
控制终端(Master):与用户产生交互的控制端,指令的发起方,同时也是信息的查询窗口。可以是手机
或者是支持 BLE 的网关。
云端:提供后台服务、存储蓝牙设备信息的具有公网 IP 的服务器端。
本协议是描述蓝牙设备与主控、云端如何组成系统,之间如何通讯,如何管理的应用层协议。
2.2. Profile 规定
2.2.1 Profile 设计理念
系统总体架构如下图所示:
手机 APP 要能够通过这个 JoyLink Profile 和各种蓝牙设备交换信息,操控各种蓝牙设备。前提
图 2.1
是这个蓝牙设备和手机 APP 都有对本 profile 的支持。
本协议专注于通信和安全,其中安全从属于通信。
2.2.2 Profile 实现形式
Profile 具体实现形式是一个 libjoylink.a 库。第三方厂商在生产设备时链接入这个 libjoylink.a,
并实现这个 lib 库所要求的回调函数,并使用这个 lib 库实现自己的应用,那么它就可以被支
持本 profile 的手机 APP 识别和操控。设备 App 层也需要有对协议运行的一些支持。
设备端软件架构是:
JoyLink Profile血压计JoyLinkProfile手环JoyLinkProfile电子秤JoyLinkProfile脉搏计JoyLinkProfile防丢器。。。。。。。。JoyLinkProfile某设备APPBlueToothModule云
图 2.2
2.2.3 Profile 架构
本 profile 只有一个 service。该 service 由三个 characteristic 组成。
名称
值
作用
Profile Service UUID
BLE_UUID_JOYLINK_SERVICE 蓝牙设备的 service
Write Characteristic UUID
UUID_JOYLINK_WRITE
APP 向设备传输数据
Indicate Characteristic UUID
UUID_JOYLINK_INDICATE 设备向 APP 传输数据(有回执)
Read Characteristic UUID
UUID_JOYLINK_READ
设备不发广播时标识设备
#define BLE_UUID_JOYLINK_SERVICE
0x00, 0x00, 0xFE, 0x70, 0x00, 0x00, 0x10, 0x00, 0x80, 0x00, 0x00, 0x80, 0x5F, 0x9B, 0x34, 0xFB
#define UUID_JOYLINK_WRITE
0x00, 0x00, 0xFE, 0x71, 0x00, 0x00, 0x10, 0x00, 0x80, 0x00, 0x00, 0x80, 0x5F, 0x9B, 0x34, 0xFB
#define UUID_JOYLINK_INDICATE
0x00, 0x00, 0xFE, 0x72, 0x00, 0x00, 0x10, 0x00, 0x80, 0x00, 0x00, 0x80, 0x5F, 0x9B, 0x34, 0xFB
#define UUID_JOYLINK_READ
0x00, 0x00, 0xFE, 0x73, 0x00, 0x00, 0x10, 0x00, 0x80, 0x00, 0x00, 0x80, 0x5F, 0x9B, 0x34, 0xFB
BLE_UUID_JOYLINK_SERVICE 0000FE70-0000-1000-8000-00805F9B34FB
UUID_JOYLINK_WRITE
0000FE71-0000-1000-8000-00805F9B34FB
UUID_JOYLINK_INDICATE
0000FE72-0000-1000-8000-00805F9B34FB
UUID_JOYLINK_READ
0000FE73-0000-1000-8000-00805F9B34FB
128bit 的 UUID 和 16bit 的 UUID 等价,本协议也支持具体实现时使用 16bit UUID。
第三方AppJoyLink BLE SDK第三方 HAL第三方 HardwareSDK接口函数HAL接口函数
示意图:
图 2.3
2.3. 通信过程描述
这里我们约定,一个 Characteristic 一次传输的数据称为一帧(frame),一帧大小为 20 字节。
注意:应用层上的数据包(例如 1KB 大小),会分解成许多帧来传输。
数据通信过程都只支持合法的蓝牙通信。对于违反自动机运行规则的行为,SDK 都以错误码
的形式返回给 APP,并且在 SDK 内部毁掉本次通信已经取得的成果,清理内存,为下次通信
做好准备,并且会给对端发送一个失败信息。一个 Operate 就是一个自动机。
SDK 支持全双工操作。
2.3.1 蓝牙设备发送数据
分帧:假设设备有 1KB 数据,这 1KB 数据定义为 1 个包(Packet),要发送给 APP。由于一个
特征值长度有限(如 20 个字节),显然需要分多次才能传输完成。1KB 数据,要分成 1024B/20B
= 51 个帧。剩下的 4 个字节,不足一帧(20 个字节),需补齐为一帧并对剩下的 16 个字节赋
0 值。总共是 52 帧。
发送第一个帧:把第一个帧的内容放入 indication characteristic 里面。然后通知手机读取数据,
通知有两种方式, indication 和 notify,本 Profile 只支持 indication。当通知完成的时候,可以
认为手机已经读完数据,
这就完成了发送第一个帧。
按照发送第一帧的步骤,依次发送剩下的帧。
设备APP蓝牙通信模块Write Characterindication CharacterRead CharacterProfile
2.3.2 蓝牙设备接收数据
合帧:假设 APP 有 1KB 数据,这 1KB 数据定义为 1 个数据包,要发送给设备。由于一个特
征值长度有限(如 20 个字节),显然需要分多次才能传输完成。1KB 数据,要分成 1024B/20B
= 51 个帧。剩下的 4 个字节,不足一帧(20 个字节),需补齐为一帧并对剩下的 16 个字节赋
0 值。总共是 52 帧。
当蓝牙设备发现 write characteristic 收到数据的时候,就接收数据,直到一包数据的所有帧全
部收完之后,通过合帧还原出这包数据,然后把这包数据返回给设备应用层。
3 数据通信
数据格式分两层:通信层面,业务层面。通信层面是为 SDK 服务,业务层面是为 App 服务。
3.1. 通信层面
一个 characteristic 一次传输的数据定义为一帧,每帧数据长度 20 BYTES。
payload:这个帧运输的数据。在通信层面看来,palyload 就是 raw data,没有任何格式。payload
的格式和语义要由业务层面来解析。payload 统一为 16 字节,没有例外。如果不足 16 字节就
用 0x00 补齐。
加密方式:使用 128bit 的密钥,使用 AES 算法,对 payload 字段进行加密。
解密方式:使用 128bit 的密钥,使用 AES 算法,对 payload 字段进行解密。
typedef struct {
unsigned char count; //这次传输的数据包所含有的总帧数
unsigned char num; //帧序号,即当前是第几帧,从 0 开始编号
unsigned char keytype; //payload 部分加解密密钥类型:
//0 –明文,
//1– PSK(Pre Shared Key),
//2 – secretkey(ECDH algorithm),
unsigned char seq; //本帧所属数据包的序列号,序列号从 0 到 255 循环递增
}frame_hdr_t;
frame_hdr_tpayload协议帧头负载数据