微信蓝牙外设协议_第1页
微信蓝牙外设协议_第2页
微信蓝牙外设协议_第3页
微信蓝牙外设协议_第4页
微信蓝牙外设协议_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、.:.;微信蓝牙外设协议Project BlueShadow V.Tencent Confidential文档变卦日志版本变卦日期初稿/针对常见问题,添加阐明/针对常见问题,添加阐明。修正包头构造。/第二期初稿添加条protobuf协议,废弃条,修正条/暂时去掉二期的内容条protobuf,在一期的根底上添加三条协议,并修正auth协议。参与加密解密部分阐明。/修正uuid的规定。补充协议字段和错误码。补充加密部分细节。/修正加密协议,添加例子。补充不加密的协议。补充错误码。/ . 修正proto里的UserId,Challeange字段。/ . 规定低功耗蓝牙广播包必需包含mac地址。Ini

2、tResp添加可选字段以支持自动同步方式,修正解码失败错误码。/ . 修正SendData, SendDataPush两条协议,添加type字段,用来区分是发送给厂商效力器,还是发送给公众平台效力器。/ . . 修正ble蓝牙service uuid的值。/ . . 公众平台协议手环修正:添加BaseResponse字段。/ . . 提升版本号为. Beta/ . . 添加Read Characteristics,以支持ios多app衔接。添加html jsapi支持。公众平台协议手环修正:添加rtc时间支持。废弃一些字段,修正协议名字为SendData,RecvData等。/ . . 添加蓝

3、牙扫描绑定相关规范。/目录 TOC o - h z u HYPERLINK l _Toc 概要 PAGEREF _Toc h HYPERLINK l _Toc 整体架构 PAGEREF _Toc h HYPERLINK l _Toc 主要功能 PAGEREF _Toc h HYPERLINK l _Toc 蓝牙BLE模拟成流 PAGEREF _Toc h HYPERLINK l _Toc 协议 PAGEREF _Toc h HYPERLINK l _Toc 绑定 PAGEREF _Toc h HYPERLINK l _Toc 扫码绑定 PAGEREF _Toc h HYPERLINK l _T

4、oc 蓝牙扫描绑定 PAGEREF _Toc h HYPERLINK l _Toc 扫描和衔接 PAGEREF _Toc h HYPERLINK l _Toc 流 PAGEREF _Toc h HYPERLINK l _Toc 包 PAGEREF _Toc h HYPERLINK l _Toc 包构造 PAGEREF _Toc h HYPERLINK l _Toc 定长包头 PAGEREF _Toc h HYPERLINK l _Toc 变长包体 PAGEREF _Toc h HYPERLINK l _Toc 身份验证和加密 PAGEREF _Toc h HYPERLINK l _Toc 不加

5、密的方法 PAGEREF _Toc h HYPERLINK l _Toc 会话商定 PAGEREF _Toc h HYPERLINK l _Toc 时序 PAGEREF _Toc h HYPERLINK l _Toc Read Characteristics PAGEREF _Toc h HYPERLINK l _Toc 其他 PAGEREF _Toc h HYPERLINK l _Toc 微信的Protobuf协议 PAGEREF _Toc h HYPERLINK l _Toc 概述 PAGEREF _Toc h HYPERLINK l _Toc 命令列表 PAGEREF _Toc h HY

6、PERLINK l _Toc 错误码 PAGEREF _Toc h HYPERLINK l _Toc JSAPI PAGEREF _Toc h HYPERLINK l _Toc 函数 PAGEREF _Toc h HYPERLINK l _Toc 事件 PAGEREF _Toc h HYPERLINK l _Toc 附录 PAGEREF _Toc h HYPERLINK l _Toc ProtoBuf协议引见 PAGEREF _Toc h HYPERLINK l _Toc 蓝牙硬件一些规定 PAGEREF _Toc h HYPERLINK l _Toc Ios BLE设备的截图 PAGEREF

7、 _Toc h HYPERLINK l _Toc 包的二进制例子 PAGEREF _Toc h HYPERLINK l _Toc 包的数据流图 PAGEREF _Toc h HYPERLINK l _Toc 包的时序图 PAGEREF _Toc h HYPERLINK l _Toc 加解密字段 PAGEREF _Toc h HYPERLINK l _Toc MdDeviceTypeAndDeviceId的例子 PAGEREF _Toc h HYPERLINK l _Toc CBC例子 PAGEREF _Toc h HYPERLINK l _Toc CRC例子 PAGEREF _Toc h HY

8、PERLINK l _Toc 微信蓝牙外设proto文件 PAGEREF _Toc h HYPERLINK l _Toc 微信公众平台proto文件 PAGEREF _Toc h HYPERLINK l _Toc JsApi例子 PAGEREF _Toc h 概要该文档规范了蓝牙设备和手机上的微信的通讯协议协议支持经典蓝牙和. BLE蓝牙,目前支持ios和andriod两个系统,后续会扩展到其他系统。整体架构厂商效力器和外设,由厂商开发完成。微信会提供效力器的接口以对接厂商的效力器,会提供手机的接口如本文规定的蓝牙协议以对接厂商的外设。主要功能该协议打通了设备和厂商效力器之间的数据链路,也就是

9、支持将设备上的数据发送到厂商的效力器上,也支持将厂商的数据发送到设备。厂商的数据对于微信来说,是黑盒,微信不对设备数据做分析。该协议也打通了设备和微信效力器之间的数据链路。设备和微信效力器之间的数据格式由微信规定,例如登录,新音讯通知等。蓝牙BLE模拟成流微信支持蓝牙BLE。微信规定了蓝牙BLE设备需求先模拟成流(即stream,输入输出流)。经典蓝牙的RFCOMM,就是一个流。流具有的特性有:可以传输无限长度的数据 双工,读写可以并发,互不干扰。显然,蓝牙BLE无法传输无限长度的数据,为了实现这个目的,需求定义一个规范。蓝牙设备需暴露两个特征值Characteristics:Write特征值

10、,Indication特征值。蓝牙设备从Write特征值接受数据,从Indication特征值发送数据。Indication特征值类型是bytes。这里他们商定,把一个特征值一次传输的数据,称为一帧不同类型的特征值一次传输的数据长度是不一样的。留意:运用层上的数据包例如k大小,会分散成许多帧来传输。蓝牙设备写过程:分帧:假设蓝牙手环上有k数据,要发给手机微信。由于一个特征值长度有限如个字节,显然需求分多次才干传输完成。k数据,要分成字节/ 字节= 个帧。剩下的个字节,缺乏一帧个字节,需补齐为一帧并对剩下的个字节赋。总共是帧。发送第一个帧:把第一个帧的内容放入特征值里面。然后通知手机读取数据,通

11、知有两种方式,Indication 和notify,这里运用Indication方式,即带呼应的通知。当通知完成的时候,可以以为手机曾经读完数据。这就完成了发送第一个帧。按照的步骤,依次发送剩下的帧。蓝牙设备读过程:当蓝牙设备发现读特征值收到数据的时候,就接纳数据,并追加到设备的buf里。留意:蓝牙设备必需等微信app订阅了Characteristics之后,才干indicate数据,否者会呵斥设备发送数据丧失的问题。协议 绑定用户绑定设备有两种方式:扫码和蓝牙扫描。这两种方式都需求先向微信公众平台注册授权设备详细api参见公众平台文档。扫码绑定用户经过扫描设备二维码绑定设备获取二维码的方法见

12、公众平台文档。用户场景:用户翻开扫一扫界面,扫码设备二维码,出现公众号页面。用户点击关注,进展绑定设备。扫码绑定并不需求设备在身边。蓝牙扫描绑定用户经过扫描周边的蓝牙设备进展绑定。用户场景可确认设备:用户先关注公众号,点击绑定设备,进入绑定阐明页。同时,微信开场扫描设备。用户操作设备确认如点击设备上的按钮,或者双击设备,设备广播特殊的包称为确认包,微信监听到包之后,开场关注并绑定。蓝牙扫描绑定需求设备在身边。蓝牙扫描绑定的设备分为两种:可确认如有按钮,或者可以双击的设备。大部分设备属于可确认设备。无法确认的设备无法确认的设备,出于平安性的思索,可用扫码绑定可确认的设备,当用户进展设备确认时如双

13、击手环,或者按按钮,需求广播特殊的包称为确认包,详细格式见附录。 扫描和衔接进入特定界面后,微信会开场扫描设备。低功耗蓝牙设备需求在广播包里广播:微信规定的service uuid详细见附录。厂商自定义字段里,包含mac地址详细见附录。并且需求包含指定的Characteristics详细见附录。Andriod经典蓝牙设备需求暴露一个指定uuid的rfcomm效力详细见附录。Ios经典蓝牙需求经过mfi认证,并且SerialNumber需为mac地址字符串方式。扫描到设备后,微信会衔接设备Ios经典蓝牙需求用户手动在设置界面里面衔接上设备。 流经典蓝牙运用RFCOMM通讯是个流,蓝牙BLE也模拟

14、成流。 包流之上运载的是一个紧接着一个的业务逻辑的数据包。数据包的发送方和接受方:设备厂商效力器,或者设备微信效力器。把设备-厂商效力器/微信效力器的恳求称为Req,回包称为Resp。一个恳求,对应着一个回包。把厂商效力器/微信效力器-设备的恳求称为PushReq,没有回包即没有PushResp这样的包。 包构造由定长包头和变长包体组成。变长包体Protoalbuf打包的二进制数据定长包头struct BpFixHeadunsigned char bMagicNumber;unsigned char bVer;unsigned short nLength;unsigned short nCmd

15、Id;unsigned short nSeq;包包的二进制例子见附录。 定长包头字段类型阐明bMagicNumberunsigned char填xFEbVerunsigned char包格式版本号,填nLengthunsigned short为包头+包体的长度nCmdIdunsigned short命令号,如ECI_req_auth,ECI_resp_sendDataToManufacturerSvr等nSequnsigned short递增。一个Req对应一个Resp,并且它们的nSeq一样,并且永不为。Push的nSeq永远为; 变长包体为Protobufprotobuf的引见见附录打包的

16、构造。例如AuthReq。一个包体里面只需一个Req,或者一个Resp,或者一个PushReq。每个Req/Resp/PushReq都有对应的EmCmdId,例如AuthReq的命令号为ECI_req_auth。详细的定义见附录。 身份验证和加密为保证数据平安,一切命令都需求加密。加密算法选用aes 位,并运用cbc方式,pkcs填充。初始向量为密钥。详细验证和加密的步骤如下:设备需求烧一个Key位到硬件上,微信效力器也要记录下这个Key。一个设备deiveId+deviceType独一确定一个设备,对应一个Key。key要维护好类似用户密码,银行卡账号密码,千万不要印刷出来或者打印出来。对于

17、设备来说,手机和效力器可看成一个黑盒。设备和手机效力器之间,经过Auth命令,运用key,最终,把sessionKey下发给到设备。Auth的步骤为:设备发送AuthReq,里面的字段有MD(deviceType+deviceId)假设设备算md很费事的话,建议先算好,直接烧进设备里面,另一个字段为AES加密的一段buffer详细字段细节在附录描叙。微信发送回包AuthResp,里面的字段有用AES加密的含有sessionkey的一段buffer详细字段细节在附录描叙。设备解密这段buffer可得到SessionKey。设备和手机之间,就经过sessionKey来加解密包。AuthReq, A

18、uthResp之后的一切命令,例如InitReq, InitResponse,SendDataToManufaturSvrReq,SendDataToManufacturerSvrResponse,ManufacturerSvrSendDataPush等都需求加解密。加密只针对变长包体,不需求加密定长包头。为了提高平安性,设备可再进一步的验证手机能否可信。设备在InitReq里填入Challeange一个字节的随机数random,手机将在InitResp里面前往ChalleangeAnswer一个字节的数,值为crc(random)。设备验证ChalleangeAnswer能否正确。假设是,阐

19、明手机是可信的。身份验证和加解密大体的流程图为:另外有一些细节:当sessionKey过期,手机对设备的一切恳求都前往错误码 EEC_sessionTimeout,要求设备重做一次auth。当发现解密设备的包失败时,前往 EEC_decode。这种情况下,通常是sessionkey过期,或者是设备程序有问题。 不加密的方法为了降低设备厂商的接入难度,加快产品进程,微信客户端同时支持不加密的方式。但是,这个只是在测试阶段可用,正式的设备发布出去的时候,都要求加密。步骤如下:将AuthReq里的AesSign字段付空。发送AuthReq。收到AuthResp之后,忽略掉AesSessionKey字

20、段。将InitReq里的Challeange字段随意付一个值。发送InitReq。收到InitResp,忽略掉ChalleangeAnswer字段。随后的包都不需求加解密。 会话商定设备连上微信之后,需求发送AuthReq,等收到胜利的回包之后,接着还要发送InitReq,并收到胜利的回包之后,才干正常发送数据。假设设备没有auth,手机对设备的一切恳求都前往错误码 EEC_needAuth。当出现解包异常的时候,直接断开衔接。Push类的包seq永远为。Req类和Resp类的包的seq永不为。效力器可随时发送Push包。厂商效力器发送的Push包留意Push包是没有回包的,即没有PushRe

21、sp,假设需求设备的回包,需求由厂商本人实现。详细方法如:厂商发送ManufacturerSvrSendDataPush给设备,设备收到push后,向厂商效力器发送一个SendDataToManufatureSvrReq。这时厂商效力器可知道设备收到了push,并且可以从Req里获得设备的回应数据。 时序时序图请见附录。 Read Characteristics设备需求再微信的service下面,暴露一个read character,内容为字节的mac地址。当ios上的其他app衔接上设备时,设备不会再广播,微信会读取该特征值,以确定能否要衔接该设备。 其他目前规定了一些根底的协议,更多的协议

22、等待补充。微信的Protobuf协议 概述变长包体部分,运用的是Protobuf定义的协议。Protobuf文件见附录。里面规定了设备和微信客户端之间的命令。 命令列表称号描叙Auth登录Init初始化SendData设备发送数据给厂商或微信公众平台或微信客户端。当type为空或者等于时,表示发送给厂商效力器。当type为时,表示发送给微信客户端html设备会话界面。当type为其他时,表示发送给公众平台效力器。详细的定义请看 附录:微信公众平台proto文件。举个例子,type等于时,表示手环数据。RecvDataPush厂商或微信客户端或微信公众平台发送数据给设备当type为空或者等于时,

23、表示厂商发送设备。当type为时,表示收到微信客户端html设备会话界面的数据。当type为其他时,表示公众平台发送给设备。详细的定义请看 附录:微信公众平台proto文件。举个例子,type等于时,表示手环数据。SwitchViewPush微信客户端进入退出界面的通知SwitchBackgroudPush微信客户端进入退出后台的通知 错误码Proto里的错误码EEC_system微信客户端普通的错误EEC_needAuth设备未登录。需求登录。EEC_sessionTimeoutsessionKey超时。需求重新登录。EEC_decode微信客户端解proto失败。能够是设备端打包代码有bu

24、g。EEC_deviceIsBlock微信客户端一段时间之内制止设备的恳求。通常是设备某些异常行为引起,如短时间多次登录,大量发送数据等。EEC_serviceUnAvalibleInBackgroundios处于后台方式,无法正常效力EEC_deviceProtoVersionNeedUpdate设备的proto版本过老,需求更新EEC_phoneProtoVersionNeedUpdate微信客户端的proto版本过老,需求更新EEC_maxReqInQueue设备发送了多个恳求,并且没有收到回包。微信客户端恳求队列拥塞。EEC_userExitWxAccount用户退出微信帐号。为正数时

25、详细见微信公众平台。固定包头里的错误码:固定包头里的错误码放在cmdid字段里。当设备收到这样的错误码后,可以经过seq查出是那个命令失败。目前只需一个错误码。ECI_err_decode微信客户端解密包体失败。通常是由于sessionKey过时,需求重新做一次auth,也能够是设备加密代码有bug。 JSAPI微信提供javascript api,允许从Html页面直接获取设备形状,并收发设备的数据,而不需求经过效力器。实时性要求高的蓝牙设备例如遥控汽车可采用这种方式。当SendData的type为EDDT_wxDeviceHtmlChatView时,表示设备发送数据给Html页面。当Rec

26、vDataPush的type为EDDT_wxDeviceHtmlChatView设备收到html发过来的数据。Jsapi包括函数和事件两部分。详细如下:函数函数名hdInit描叙初始化设备库参数无前往值err_msg: hdInit:ok 胜利, hdInit:fail 失败minVersion:当前微信客户端支持的最小jsapi版本maxVersion:当前微信客户端支持的最大jsapi版本函数名hdRelease描叙封锁设备库参数无前往值err_msg:hdRelease:ok 胜利, hdRelease:fail 失败。函数名hdGetDeviceInfos描叙获取设备信息参数无前往值e

27、rr_msg:hdGetDeviceInfos:ok 胜利, hdGetDeviceInfos:fail 失败。deviceInfos:deviceInfos : deviceId:myDevice, state:connected, deviceId:myDevice, state:connected deviceInfos包含多个deviceInfo,每个deviceInfo形如:deviceId:myDevice, state:connected。函数名hdSendDataToDevice描叙发送数据给设备参数deviceId必填:设备iddata必填:数据,经过base编码后的字符串。

28、前往值err_msg:hdSendDataToDevice:ok 胜利, hdSendDataToDevice:fail 失败。事件 事件名hdOnReceveDataFromDevice描叙接纳到设备数据参数deviceId:设备iddata:数据,经过base编码后的字符串。事件名hdOnDeviceStateChanged描叙接纳到设备数据参数deviceId:设备idstate:connecting 衔接中, connected 衔接上,disconnected 衔接断开。运用例子见附录。附录 ProtoBuf协议引见ProtoBuf是google提供的一套开源的软件协议。它主要作用是

29、把c/c+的struct打包成为二进制数据,或者把二进制数据解包成c/c+的struct。详细运用过程为:. 定义proto文件. 经过工具把.proto文件编译成.h, .c文件里面包含struct和函数 调用.h文件里的封包解包函数官方网站为: HYPERLINK sdevelopers.google/protocol-buffers/docs/overview sdevelopers.google/protocol-buffers/docs/overview HYPERLINK code.google/p/protobuf/ code.google/p/protobuf/ HYPERLI

30、NK code.google/p/protobuf-c/ code.google/p/protobuf-c/其他相关例子和工具见附件。 蓝牙硬件一些规定称号值ServiceUUIDxFEE该uuid经蓝牙官方授权Write Characteristics UUIDxFECIndicate Characteristics UUIDxFECRead Characteristics UUIDxFECAndriod RFCOMM UUIDebed-b-e-eacbcIos经典蓝牙的iap层的SerialNumber必需赋值,且等于mac地址字符串方式。低功耗蓝牙的广播包的manufature spec

31、ific data里必需包含mac地址字节,并且以mac地址结尾。并且manufature specific data长度需大于等于字节最前两个字节为company id,没有的话随意填。可确认设备确实认包的manufature specific data需以下面格式结尾:xfe x x + mac地址字节 Ios BLE设备的截图LightBlue是一个Iphone上的app。这是设备的截屏。请下载App并检查: . serviceId能否正确 . characteristics能否正确包括uuid和属性 . 能否在manufature data最尾部带上了mac地址。 包的二进制例子Req

32、接受两种格式:字节对齐补零格式,不对齐格式。以AuthReq为例子不加密:字节对齐补零ble特征值有些芯片只能发送固定个字节,字节剩下的部分补零feMagicNumber版本号 b总长度 命令号Seq变长包体:a b f a e c b dd d a d 补齐:留意:这里的包长度为b(即字节),由于字节对齐,导致总长为字节。不对齐经典蓝牙没有对齐问题,某些ble芯片也没有对齐问题feMagicNumber版本号 b总长度 命令号 Seq 变长包体:a b f a e c b dd d a d 以AuthResp为例子:feMagicNumber版本号e总长度 e命令号Seq 包体:a 包的数据

33、流图 包的时序图最简单的时序图:Push包插入的时序图多Req包并且有push包插入的时序图:留意:多个Req包时,到达厂商效力器的先后顺序不能保证。同样多Resp包的情况下,到达外设的顺序也不能保证。 加解密字段AuthReq里的AesSign字段 = AESRan | Seq | CRC ( DeviceId | Ran | Seq )设备消费一个随机数Ran ( 字节 ),留意:随机数应尽量随机假设设备有才干获得当前的时间戳,那么运用时间戳作为Seq ( 字节 ),否那么,运用一个从开场递增的序列号,保证每次auth的Seq递增将Ran和Seq拼接到DeviceId不含DeviceTyp

34、e后得到二进制串变长计算二进制串的CRC ( 字节 )将Ran、Seq、CRC值按顺序拼接得到字节的二进制串,运用设备key对二进制传进展AES加密,得到字节的AesSignAuthResp里的AesSessionKey字段 = AES (SessionKey )设备auth胜利后将获得一个字节的AesSessionKey字段,运用设备key做AES解密后可得到字节的明文内容.该内容为sessionKey。InitReq里的Challeange字段为随机数(字节,记为Random)InitResp里的ChalleangeAnswer字段为CRC(Random)。上述身份认证和加密的方式为x版本

35、,对应AuthReq里面的AuthMethod字段。该版本未来能够晋级。 MdDeviceTypeAndDeviceId的例子MdDeviceTypeAndDeviceId为字节二进制数据。假设deviceType为:gh_dffe,deviceId为:test_device。将deviceType+deviceId拼起来,不算:md(gh_dffetest_device,) = xcddbeebccbbac CBC例子Key 为字符串 “Iv和Key一样。数据 : CBCpkcs结果 : 数据: CBCpkcs结果 : 数据: CBCpkcs 结果: CRC例子多项式为:xedbL字符串te

36、st_device_ios的crc为:xef。 微信蓝牙外设proto文件/ proto version: .package MmBp;enum EmCmdId ECI_none = ; / req: 蓝牙设备 - 微信/厂商效力器 ECI_req_auth = ; / 登录 ECI_req_sendData = ; / 蓝牙设备发送数据给微信或厂商 ECI_req_init = ; / 初始化 / resp:微信/厂商效力器 - 蓝牙设备 ECI_resp_auth = ; ECI_resp_sendData = ; ECI_resp_init = ; / push:微信/厂商效力器 - 蓝

37、牙设备 ECI_push_recvData = ; / 微信或厂商发送数据给蓝牙设备 ECI_push_switchView = ; / 进入/退出界面 ECI_push_switchBackgroud = ; / 切换后台 ECI_err_decode = ; / 解密失败的错误码。留意:这不是cmdid。为节省固定包头大小,这种特殊的错误码放在包头的cmdid字段。enum EmErrorCode EEC_system = -; / 通用的错误 EEC_needAuth = -; / 设备未登录 EEC_sessionTimeout = -; / session超时,需求重新登录 EEC_

38、decode = -; / proto解码失败 EEC_deviceIsBlock = -; / 设备出现异常,导致被微信暂时性制止登录 EEC_serviceUnAvalibleInBackground = -; / ios处于后台方式,无法正常效力 EEC_deviceProtoVersionNeedUpdate = -; / 设备的proto版本过老,需求更新 EEC_phoneProtoVersionNeedUpdate = -; / 微信客户端的proto版本过老,需求更新 EEC_maxReqInQueue = -; / 设备发送了多个恳求,并且没有收到回包。微信客户端恳求队列拥塞

39、。 EEC_userExitWxAccount = -; / 用户退出微信帐号。message BaseRequest message BaseResponse required int ErrCode = ; optional string ErrMsg = ;message BasePush / req, resp =/ 登录 message AuthRequest required BaseRequest BaseRequest = ; required bytes MdDeviceTypeAndDeviceId = ; / deviceType加deviceId的md,字节的二进制数据

40、 required int ProtoVersion = ; / 设备支持的本proto文件的版本号,第一个字节表示最小版本,第二个字节表示小版本,第三字节表示大版本。版本号为.的话,应该填:x;.的话,填成x。 required int AuthProto = ; / 填 required int AuthMethod = ; / 验证和加密的版本号,当前填 required bytes AesSign = ; / 详细生成方法见文档 optional string TimeZone = ; / 废弃 optional string Language = ; / 废弃 optional st

41、ring DeviceName = ; / 废弃message AuthResponse required BaseResponse BaseResponse = ; required bytes AesSessionKey = ;/ 初始化 enum EmInitRespFieldFilter EIRFF_userNickName = x; EIRFF_platformType = x; EIRFF_model = x; EIRFF_os = x; EIRFF_time = x; EIRFF_timeZone = x; EIRFF_timeString = x;/ 微信衔接上设备时,处于什么

42、情景enum EmInitScence EIS_deviceChat = ; / 聊天 EIS_autoSync = ; / 自动同步message InitRequest required BaseRequest BaseRequest = ; optional bytes RespFieldFilter = ; / 当一个bit被设置就表示要resp的某个字段:见EmInitRespFieldFilter。 optional bytes Challenge = ; / 设备用来验证手机能否平安。为设备随机生成的四个字节。enum EmPlatformType EPT_ios = ; EPT

43、_andriod = ; EPT_wp = ; EPT_sv = ; EPT_sv = ; EPT_s = ; EPT_bb = ;message InitResponse required BaseResponse BaseResponse = ; required uint UserIdHigh = ; / 微信誉户Id高位 required uint UserIdLow = ; / 微信誉户Id低位 optional uint ChalleangeAnswer = ; / 手机回复设备的挑战。为设备生成的字节的crc。 optional EmInitScence InitScence =

44、 ; / 微信衔接上设备时,处于什么情景。假设该字段为空,表示处于EIS_deviceChat下。 optional uint AutoSyncMaxDurationSecond = ; / 自动同步最多继续多长,微信就会封锁衔接。xffffffff表示无限长。 optional string UserNickName = ; / 微信誉户昵称 optional EmPlatformType PlatformType = ; / 手机平台 optional string Model = ; / 手机硬件型号 optional string Os = ; / 手机os版本 optional in

45、t Time = ; / 手机当前时间 optional int TimeZone = ; / 手机当前时区 optional string TimeString = ; / 手机当前时间,格式如,详细字段意义为年月号点分钟秒星期五。星期一为,星期天为。/ 设备发送数据给微信或厂商 / 设备数据类型enum EmDeviceDataType EDDT_manufatureSvr = ; / 厂商自定义数据 EDDT_wxWristBand = ; / 微信公众平台手环数据 EDDT_wxDeviceHtmlChatView = ; / 微信客户端设备html会话界面数据message Send

46、DataRequest required BaseRequest BaseRequest = ; required bytes Data = ; optional EmDeviceDataType Type = ; / 数据类型(如厂商自定义数据,或公众平台规定的手环数据,或微信客户端设备html会话界面数据等。不填,或者等于的时候,表示设备发送厂商自定义数据到厂商效力器。message SendDataResponse required BaseResponse BaseResponse = ; optional bytes Data = ;/ push =/ 微信或厂商发送数据给蓝牙设备

47、message RecvDataPush required BasePush BasePush = ; required bytes Data = ; optional EmDeviceDataType Type = ; / 数据类型(如厂商自定义数据,或公众平台规定的手环数据,或微信客户端设备html会话界面数据等。不填,或者等于的时候,表示设备收到厂商自定义数据。/ 微信客户端进入退出界面的通知 enum EmSwitchViewOp ESVO_enter = ; ESVO_exit = ;enum EmViewId EVI_deviceChatView = ; / 微信客户端设备号会话界

48、面 EVI_deviceChatHtmlView = ; / 微信客户端设备号Html会话界面。留意:只需当H界面自动和设备衔接上之后,才会发送push。message SwitchViewPush required BasePush BasePush = ; required EmSwitchViewOp SwitchViewOp = ; / 进入或者退出View required EmViewId ViewId = ; / view的idenum EmSwitchBackgroundOp ESBO_enterBackground = ; / 进入后台 ESBO_enterForground

49、 = ; / 进入前台 ESBO_sleep = ; / 后台休眠/ 微信客户端进入退出后台的通知 message SwitchBackgroudPush required BasePush BasePush = ; required EmSwitchBackgroundOp SwitchBackgroundOp = ; 微信公众平台proto文件/ type=,手环类package mmbp_open;message BaseResponseoptional int errcode = ;optional string errmsg = ;message WristbandRequest m

50、essage StepDataItemoptional uint Step = ;optional uint Timestamp = ;optional uint TimeStampRtcYear = ;optional uint TimeStampRtcMonth = ;optional uint TimeStampRtcDay = ;optional uint TimeStampRtcHour = ;optional uint TimeStampRtcMinute = ;optional uint TimeStampRtcSecond = ;repeated StepDataItem StepData = ;optional bytes ExtData = ;message WristBandResponseoptional BaseResponse BaseResp = ;message WristBandPush JsApi例子 harl test ABC 硬件初始化 硬件封锁 获得设备列表 发数据给设备 var g_deviceId; va

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论