logo资料库

Joylink BLE协议文档.pdf

第1页 / 共23页
第2页 / 共23页
第3页 / 共23页
第4页 / 共23页
第5页 / 共23页
第6页 / 共23页
第7页 / 共23页
第8页 / 共23页
资料共23页,剩余部分请下载后查看
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协议帧头负载数据
分享到:
收藏