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

下载本文档

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

文档简介

微信蓝牙外设协议

ProjectBlueShadow

Vl.0.3

TencentConfidential

文档变更日记

版本变更日期

0.1初稿2023/10/9

0.2针对常见问题,增长说明2023/10/18

0.3针对常见问题,增长说明。修改包头结构。2023/11/5

0.4第二期初稿2023/11/26

增长17条protobuf协议,废弃1条,修改1条

0.5暂时去掉二期的内容(17条protobuf),在一期的基础上增2023/2/12

长三条协议,并修改auth协议。加入加密解密部分说明。

0.6修改uuid的规定。补充协议字段和错误码。补充加密部分2023/2/27

细节。

0.7修改加密协议,增长例子。补充不加密的协议。补充错误码。2023/3/4

0.7.1修改proto里的Userid,Challeange字段。2023/3/7

0.7.2规定低功耗蓝牙广播包必须包含mac地址。InitResp增长2023/4/3

可选字段以支持自动同步模式,修改解码失败错误码。

0.7.3修改SendData,SendDataPush两条协议,增长type字2023/4/24

段,用来区分是发送给厂商服务器,还是发送给公众平台

服务器。

0.7.4修改ble蓝牙serviceuuid的值。2023/4/25

0.7.5公众平台协议手环修改:增长BaseResponse字段。2023/4/30

1.0.1提高版本号为1.0.1Beta2023/6/9

1.0.2增长ReadCharacteristics,以支持ios多app连接。2023/7/15

增长htmljsapi支持。

公众平台协议手环修改:增长rtc时间支持。

废弃一些字段,修改协议名字为SendData,RecvData等。

1.0.3增长蓝牙扫描绑定相关规范。2023/8/18

1概述......................................................

2命令列表.................................................

3错误码....................................................

4JSAPI................................................................................................

函数....................................................

事件....................................................

附录..............................

1ProtoBuf协议介绍........................................

2蓝牙硬件一些规定.........................................

3losBLE设备的截图........................................

4包的二进制例子...........................................

5包的数据流图.............................................

6包的时序图...............................................

7加解密字段...............................................

8Md5DeviceTypeAndDeviceId的例子.....................

9cBe例子.................................................

10CRC32例子.............................................

11微信蓝牙外设proto文献.................................

12微信公众平台prot。文献.................................

13JsApi例子...............................................

概要

该文档规范了蓝牙设备和手机上的微信的通信协议

协议支持经典蓝牙和4.0BLE蓝牙,目前支持ios和andriod两个系统,后续会扩展到其他

系统。

整体架构

微信会提供服务器的接口以对接厂商的服务器会提供手机的接口(如本文规定的蓝牙协议)

以对接厂商的外设。

重要功能

该协议打通了设备和厂商服务器之间的数据链路,也就是支持将设备上的数据发送到厂商的

服务器上,也支持将厂商的数据发送到设备。

厂商的数据对于微信来说,是黑盒,微信不对设备数据做分析。

该协议也打通了设备和微信服务器之间的数据链路。

设备和微信服务器之间的数据格式由微信规定,例如登录,新消息告知等。

蓝牙BLE模拟成流

微信支持蓝牙BLE。

微信规定了蓝牙BLE设备需要先模拟成流(即stream输入输出流)。经典蓝牙的RFCOMM,

就是一个流。流具有的特性有:

a.可以传输无限长度的数据

b.双工,读写可以并发,互不干扰.

显然,蓝牙BLE无法传输无限长度的数据,为了实现这个目的,需要定义一个规范。

蓝牙设备需暴露两个特性道(Characteristics):Write特性值,Indication特性值。蓝牙

设备从Write特性值接受数据,从Indication特性值发送数据。

Indication特性值类型是bytes。

这里我们约定,把一个特性值一次传输的数据,称为一帧(不同类型的特性值一次传输的数

据长度是不同样的\

注意;应用层上的数据包(例如1k大小),会分散成许多蟆来传输。

蓝牙设备写过程:

1.分帧:假设蓝牙手环上有1k数据,要发给手机微信。由于一个特性值长度有限(如

20个字节),显然需要分多次才干传输完毕。1k数据,要提成1024字节/20字节

=51个帧。剩下的4个字节,局限性一帧(20个字节),需补齐为一帧并对剩下的

16个字节赋0。总共是52帧。

2.发送第一个帧:把第一个帧的内容放入特性值里面。然后告知手机读取数据,告知

有两种方式,Indication和notify,这里使用Indication方式,即带响应的告知。

当告知完毕的时候,可以认为手机已经读完数据。这就完毕了发送第一个帧。

3.按照2的环节,依次发送剩下的帧。

蓝牙设备读过程:

当蓝牙设备发现读特性值收到数据的时候,就接受数据,并追加到设备的buf里。

注意:蓝牙设备必须等微信叩p订阅了Characteristics之后,才干indicate数据,否者会

导致设备发送数据丢失的问题。

协议

1绑定

用户绑定设备有两种方式:扫码和蓝牙扫描。

这两种方式都需要先向微信公众平台注册授权设备(具体api参见公众平台文档:1

扫码绑定

用户通过扫描设备二维码绑定设笛(获取二维码的方法见公众平台文档\

用户场景:用户打开扫一扫界面,扫码设备二维码,出现公众号页面。用户点击关注,

进行绑定设备。

扫码绑定并不需要设备在身边。

蓝牙扫描绑定

用户通过扫描周边的蓝牙设备进行绑定。

用户场景(可确认设备):用户先关注公众号,点击绑定设备,进入绑定说明页。同时,

微信开始扫描设备。用户操作设备确认(如点击设备上的按钮,或者双击设备),设备

广播特殊的包(称为猫认包),微信监听到包之后,开始关注并绑定。

蓝牙扫描绑定需要设备在身边。

蓝牙扫描绑定的设备分为两种:

可确认(如有按钮,或者可以双击)的设备。大部分设备属于可确认设备。

无法确认的设备(无法确认的设备,出于安全性的考虑,可用扫码绑定)

可确认的设备,当用户进行设备确认时(如双击手环,或者按按钮),需要广播特殊的

包(称为确认包,具体格式见附录1

2扫描和连接

进入特定界面后,微信会开始扫描设备。

彳氐功耗蓝牙设备需要在广播包里广播:

a.微信规定的serviceuuid(具体见附录\

b.厂商自定义字段里,包含mac地址(具体见附录工

并且需要包含指定的Characteristics(具体见附录工

Andriod经典蓝牙设备需要暴露一个指定uuid的rfcomm服务(具体见附录工

los经典蓝牙需要通过mfi认证,并且SerialNumber需为mac地址(字符串形式\

扫描到设备后,微信会连接设备(los经典蓝牙需要用户手动在设立界面里面连接上设

备I

3流

经典蓝牙使用RFCOMM通信(是个流),蓝牙BLE也模拟成流。

4包

流之上运载的是一个紧接着一个的业务逻辑的数据包。

数据包的发送方和接受方:设备〈。厂商服务器,或者设备<->微信服务器。

把设备。厂商服务器/微信服务器的请求称为回包称为一个请求,相应

Req,Respo

着一个回包。

把厂商服务器/微信服务器->设备的请求称为PushReq,没有回包(即没有PushResp

这样的包工

4包结构

由定长包头和变长包体组成。

包的二进制例子见附录。

5定长包头

字段类型说明

bMagicNumberunsignedchar填OxFE

bVerunsignedchar包格式版本号,填1

nLengthunsigned为包头+包体的长度

short

nCmdldunsigned命令号,如ECI_req_auth,

shortECI_resp_sendDataToManufacturerSvr9

nSequnsigned递增。

short一个Req相应一个Resp,并且它们的nSeq相

同,并且永不为0。

Push的nSeq永远为0;

6变长包体

为(的介绍见附录)打包的结构。例如

ProtobufprotobufAuthReq0

一个包体里面只有一个或者一个或者一个

Req,Resp,PushReqo

每个Req/Resp/PushReq都有相应的EmCmdld,例如AuthReq的命令号为

ECI_req_autho

具体的定义见附录。

7身份验证和加密

为保证数据安全,所有命令都需要加密。

加密算法选用aes128位,并使用cbc模式,pkcs7填充。初始向量为密钥。

具体验证和加密的环节如下:

a.设备需要烧一个Key(128位)到硬件上,微信服务器也要记录下这个Key.一个

设备(deiveld+deviceType唯一拟定一个设备),相应一个Key。

key要保护好(类似用户密码,银行卡账号密码),千万不要印刷出来或者打印出来。

b.对于设备来说,手机和服务器可当作一个黑盒。设备和手机服务器之间,通过Auth

命令,使用key,最终,把sessionKey下发给到设备。

Auth的环节为:

设备发送AuthReq里面的字段有MD5(deviceType+deviceIdX假如设备算md5

很麻烦的话建议先算好直接烧进设备里面)尻一个字段为AES加密的一段buffer

(具体字段细节在附录描叙I

微信发送回包AuthResp,里面的字段有用AES加密的具有sessionkey的一段

(具体字段细节在附录描叙上设备解密这段可得到

bufferbufferSessionKeyo

c.设备和手机之间,就通过sessionKey来加解密包。

AuthReq,AuthResp之后的所有命令,例如InitReq,InitResponse,

SendDataToManufaturSvrReq,SendDataToManufacturerSvrResponse,

ManufacturerSvrSendDataPush等都需要加解密。

d.加密只针对变长包体,不需要加密定长包头。

e.为了提高安全性,设备可再进一步的验证手机是否可信。

设备在InitReq里填入Challeange(一个4字节的随机数random4),手机将在

InitResp里面返回ChalleangeAnswer(一个4字节的数,值为crc32(random4)\

设备验证ChalleangeAnswer是否对的。假如是,说明手机是可信的。

身份验证和加解密大体的流程图为:

田缶电信1户辨眼务器

AuthReq:MD5(deviccT>'pe&de\i(xld)

AuthRcq:dcviccld.cieviccTypc

II--------------------------------------------------------------------------

IIAuthResp:AES(sessiunKev).»s&ionKey|

IK-------------------------------—――:----------------:-------------1

IAuthResp:AES(sessionKe),)I

----------------------------------------------------------------------1

।II

।II

।।I

।।I

III

;使用sessionkey加南变K包体,发送各种酒求。.

I----------------------------------------------------------------------

III

I।I

I

此外有一些细节:

a.当SeSSionKey过期,手机对设备的所有请求都返回错误码EEC_sessionTimcout,规

定设备重做一次auth.

b.当发现解密设备的包失败时,返回EEC_decode.这种情况下,通常是sessionkey过

期,或者是设备程序有问题。

8不加密的方法

为了减少设备厂商的接入难度,加快产品进程,微信客户端同时支持不加密的方式。

但是,这个只是在测试阶段可用,正式的设备发布出去的时候,都规定加密。

环节如下:

将里的字段付空。发送

AuthReqAesSignAuthReqo

收到AuthResp之后,忽略掉AesSessionKey字段。

将InitReq里的Challeange字段随便付一个值。发送InitReq.

收至!JlnitResp,忽略掉ChalleangeAnswer字段。

随后的包都不需要加解密。

9会话约定

a.设备连上微信之后,需要发送AuthReq,等收到成功的回包之后,接着还要发送

InitReq,并收到成功的回包之后,才干正常发送数据。假如设备没有auth,手机

对设备的所有请求都返回错误码EECneedAuth.

b.当出现解包异常的时候,直接断开连接。

c.Push类的包seq永远为0。Req类和Resp类的包的seq永不为0。

d.服务器可随时发送Push包。

e.厂商服务器发送的Push包(注意Push包是没有回包的,即没有PushResp),假

如需要设备的回包,需要由厂商自己实现。

具体方法如:厂商发送ManufacturerSvrSendDataPush给设备,设备收到push

后,向厂商服务器发送一个这时厂商服务器可

SendDataToManufatureSvrReqo

知道设备收到了push,并且可以从Req里取得设备的回应数据。

10时序

时序图请见附录。

11ReadCharacteristics

设备需要再微信的service下面,暴露一个readcharacter,内容为6字节的mac地

址。当ios上的其他叩p连接上设备时,设备不会再广播,微信会读取该特性值,以拟

定是否要连接该设备。

12其他

目前规定了一些基础的协议,更多的协议等待补充。

微信的Protobuf协议

1概述

变长包体部分,使用的是Protobuf定义的协议。Protobuf文献见附录。

里面规定了设备和微信客户端之间的命令。

2命令列表

名称描叙

Auth登录

Init初始化

SendData设备发送数据给厂商或微信公众平台或微信客户端。

当type为空或者等于0时,表达发送给厂商服务器。

当type为10001时,表达发送给微信客户端html5设备会话

界面。

当type为其他时,表达发送给公众平台服务器。具体的定义

请看附录:微信公众平台prot。文献。举个例子,type等于

1时,表达手环数据。

RecvDataPush厂商或微信客户端或微信公众平台发送数据给设备

当type为空或者等于0时,表达厂商发送设备。

当type为10001时,表达收到微信客户端html5设备会话界

面的数据。

当type为其他时,表达公众平台发送给设备。具体的定义请

看附录:微信公众平台proto文献。举个例子,type等于1

时,表达手环数据。

SwitchViewPush微信客户端进入退出界面的告知

SwitchBackgroudP微信客户端进入退出后台的告知

ush

3错误码

Proto里的错误码

EEC_system微信客户端一般的错误

EEC_needAuth设备未登录。需要登录。

EEC_sessionTimeosessionKey超时。需要重新登录。

ut

EEC_decode微信客户端解proto失败。也许是设备端打包代码有bug。

EEC_deviceIsBlock微信客户端一段时间之内严禁设备的请求。通常是设备某些异

常行为引起,如短时间多次登录,大量发送数据等。

EEC_servicellnAvalios处在后台模式,无法正常服务

iblelnBackground

EEC_deviceProtoVe设备的proto版本过老,需要更新

rsionNeedllpdate

EEC_phoneProtoVe微信客户端的proto版本过老,需要更新

rsionNeedllpdate

EEC_maxReqInQue设备发送了多个请求,并且没有收到回包。微信客户端请求队

ue列拥塞。

EEC_userExitWxAc用户退出微信帐号。

count

为正数时具体见微信公众平台。

固定包头里的错误码:

固定包头里的错误码放在cmdid字段里。当设备收到这样的错误码后,可以通过seq杳出

是那个命令失败。

目前只有一个错误码。

ECI_err_decode微信客户端解密包体失败。

通常是由于sessionKey过时,需要重新做一次auth,也也许

是设备加密代码有bug。

4JSAPI

微信提供javascriptapi,允许从Html页面直接获取设备状态,并收发设备的数据,而不

需要通过服务器。实时性规定高的蓝牙设备(例如遥控汽车)可采用这种方式。

当SendData的type为EDDT_wxDeviceHtmlChatView时,表达设备发送数据给Html

页面。

当RecvDataPush的type为EDDT_wxDeviceHtmlChatView设备收到html发过来的数

据。

Jsapi涉及函数和事件两部分。具体如下:

函数

函数名hdlnit

描叙初始化设备库

参数无

返回值err_msg:hdlnit:ok成功,hdlnit:fail失败

minVersion:当前微信客户端支持的最小jsapi版本

maxVersion:当前微信客户端支持的最大jsapi版本

函数名hdRelease

描叙关闭设备库

参数无

返回值err_msg:hdRelease:ok成功,hdRelease:fail失败。

函数名hdGetDevicelnfos

描叙获取设备信息

参数无

返回值err_msg:hdGetDeviceInfos:ok舟泣],hdGetDeviceInfos:fail失

败。

deviceinfos:{deviceinfos:[{"deviceId':"myDevicel",

nstate":"connected"},{"deviceId":'myDevice2",

"state":"connected"}]}deviceinfos包含多个deviceinfo,每个

deviceinfo:{"deviceId":"myDevicel",Bstate':"connected"h

函数名hdSendDataToDevice

描叙发送数据给设备

参数deviceld(必填):设备id

data(必填):数据,通过base64编码后的字符串。

返回值err_msg:hdSendDataToDevice:ok,

hdSendDataToDevice:fail失败。

事件

事件名hdOnReceveDataFromDevice

描叙接受到设备数据

参数deviceld:设备id

data:数据,通过base64编码后的字符串。

事件名hdOnDeviceStateChanged

描叙接受到设备数据

参数deviceld:设备id

state:connecting连接中,connected连接上,disconnected连

接断开。

使用例子见附录.

附录

1ProtoBuf协议介绍

ProtoBuf是google提供的一套开源的软件协议。它重要作用是把c/c++的struct打包成

为二进制数据,或者把二进制数据解包成C/C++的struct.

具体使用过程为:

1.定义proto文献

2.通过工具把.proto文献编译成.h,工文献(里面包含struct和函数)

3调用上文献里的封包解包函数

官方网站为:

其他相关例子和工具见附件。

2蓝牙硬件一些规定

名称值

ServiceUUID0xFEE7(该uuid经蓝牙官方授权)

WriteCharacteristicsUUID0xFEC7

IndicateCharacteristicsUUID0xFEC8

ReadCharacteristicsUUID0xFEC9

AndriodRFCOMMUUIDe5bl52ed-6b46-09e9-4678-665e9a972cbc

iOS经典蓝牙的iap层的SerialNumber必须赋值,且等于mac地址(字符串形式)e

低功耗蓝牙的广播包的manufaturespecificdata里必须包含mac地址(6字节),并且

以mac地址结尾。并且manufaturespecificdata长度需大于等于8字节(最前两个字节

为companyid,没有的话随便填1

可确认设备的确认包的manufaturespecificdata需以下面格式结尾:

Oxfe0x010x01+mactfeilt(6字节)

3losBLE设备的截图

LightBlue是一个Iphone上的叩p。这是设备的截屏。请下载App并检查:1.serviceld

是否对的2.characteristics是否对的(涉及uuid和属性)3.是否在manufaturedata

最尾部带上了mac地址.

12:05④◎X53%—

中国移动,11:55®。»49%-D中国移动不

Peripherals

AboutLightBlueServices

Peripheral:v--

ScanningforPeripherals...

ClonePeripheral

UUIDServicesFound

FE91E28A-1A5A-2272-775C-524B42A21BDA

LocalName:____________0xFEE7

Service:UnknowA

UID:FEE7

ServiceBattery'--------------

ManufactufwData<113132470a33323736370047DeviceInformation

ble的广番包里—带上mac地址UUID:160A

BatteryService

UUID:180F

Centralmodeletsyouconnect:operipheralsaroundy...

t

CentralCentralPeripheralProfilesLost

中国移动令12:05辱。*54%-

servicesCharacteristics

Peripheral:

Service:0xFEE7

CharacteristicsFound

0xFEC8

UUID:FEC8Properties:Indicate

0xFEC7

UUID:FEC7Properties:Wnte

If>—MM

-■*-•:=

CentralPeriphf』ProHesLogs

4包的二进制例子

Req接受两种格式:20字节对齐补零格式,不对齐格式。以AuthReq为例子(不加密):

1.20字节对齐补零(ble特性值有些芯片只能发送固定20个字节,20字节剩下的部分

补零)

fe(MagicNumber)01(版本号、003b(总长度、2711(命令号)0001(Seq)

(变长包体:0a001210b43f12042a02eOlc2bdd7d02906213a31880

8004200128013210000000000000000000000000000000006203

414d33)(补齐:00)

注意:这里的包长度为003b(即59字节),由于2Q字节对齐,导致总长为60字节。

2.不对齐(经典蓝牙没有对齐问题,某些ble芯片也没有对齐问题)

fe(MagicNumber)01(版本号)003b(总长度)2711(命令号)0001(Seq)

(变长包体:0a001210b43f12042a02eOlc2bdd7d02906213a31880

8004200128013210000000000000000000000000000000006203

414d33)

LUAuthResp为例子:

fe(MagicNumber)01(版本号、OOOe(总侬)4e21(命令号)0001(Seq)

(包体:0a0208001200)

5包的数据流图

微信服务器的PushReq

6包的时序图

最简朴的时序图:

手机公信能信融务器

AuthR«|<sa|-l)

AuthRcq(scq=l)

AuthRr%n

AuthRorX^Q1)

ScndMaTcMaE而ErcrSvrRcquE(scq=2)

LSendDataroMamjf3CturerSvrRcso(scq=2)

DnUCNin^eNodf>PushRcq(sci|-0)

DiitaChanurNotilvPwshReq(seq-0)

M;H)ut;icturefSvfSe!MJDataPushRcq(seq-O)

Push包插入的时序图

手机纸信「锚肥务器

ScndDutNToMiimifiicnircrSwRcqucMCsoq-2)

a

DataChangcNotifyPushRcqCscq=O)

VL―

IhanccNotitvRcq<5cq-<>)LKhnutactiircrSvScndOiUilhixhRcqCscq-O)

'UinufiictuirrSvrSrndDataPushRcq(seq=0)

广L

Sciidnwt>ToMiimit:KturerSxTRcqi>c\t(scq-2)

SendDataToManuhctvrerSvrRcscMscq=2)

ScikIDdtdTuMmMi(actureYSvrRe»p(MXf-a2)

k-

多Req包并且有push包插入的时序图:

注意:多个Req包时,到达厂商服务器的先后顺序不能啜证。同样多Resp包的情况下,到

达外设的顺序也不能保证。

手机很信

SeTxlDataToManufactuTefSvrReqoesXseq-2)

Scndl>itMToN<aimt,iu^urcTSvTRcqueb8(seq^2)

SendDataToManufacturerSvrReqoes^seq-3)

ScndlXitMToKlaimtiicturcrSvrRcqucMtseq-l)

SendDtmToManufacwwSvrRequesNseq-3)

ScndDutaToMa!MifiKturerS\rRck|uot<!>cq-2)

DutaChxngrN<)tityPushRcq(Mcq?O)

DataChangcNotityPushKcq(scq=O)(Manu的cuirCTS'TScndLXitaRushRpscquO)

\LimHhcnHTrSvTSmdPushReq(scqT)

\linutauuirrTSvTSeDdDauPushRrq(seq=O)七SendQita【oManuLicligerSvrReso<seq=3)

ScndDataToManu&ctvrerSvrRcMMscq=2)

--------------------------------------------------------------

(SendDa“roMamHac[ureTS、rRgMMMxrJ)

(SendDatar9ManufacturerSvrReMMseq=3>

,SenJDdUToiMamifaclureTS'rRcbpibCcr-D

(SCTxiDatarcMaEiGcturerS、TRcMKq=2)

7加解密字段

AuthReq里的AesSign字段=AES(Ran|Seq|CRC32(Deviceld|Ran|Seq))

a)设备生产一个随机数Ran(4字节),注意:随机数应尽量随机

b)若设备有能力获得当前的时间戳,则使用时间戳作为Seq(4字节),否则,

使用一个从0开始递增的序列号,保证每次auth的Seq递增

c)将Ran和Seq拼接到Deviceld(不含DeviceType)后得到二进制串1(变

长)

d)计算二进制串1的CRC32(4字节)

e)将Ran、Seq.CRC值按顺序拼接得到12字节的二进制串2,使用设备key

对二进制传2进行AES加密,得到16字节的AesSign

AuthResp里的AesSessionKey字段=AES(SessionKey)

设备auth成功后将取得一个32字节的AesSessionKey字段,使用设备key

做AES解密后可得到16字节的明文内容该内容为sessionKey.

InitReq里的Challeange字段为随机数(4字节,记为Random3)

里的字段为()

InitRespChalleangeAnswerCRC32^andom3o

上述身份认证和加密的方式为0x1版本,相应AuthReq里面的AuthMethod字段。

该版木未来也许升级。

8Md5DeviceTypeAndDeviceld的例子

Md5DeviceTypeAndDeviceId为16字节二进制数据。

假设deviceType为:gh_d53f87f298e5,deviceld为:test_device0将

deviceType+deviceld拼起来,不算\0:

md5(gh_d53f87f298e5test_device,32)=0x26cdd942b8ee68b022cc53bbal6c7039

9CBC例子

Key为字符串"39793"

Iv和Key相同。

数据:

<len:15><data:0x6c656e6774685f6f665f31355f625f>

CBC(pkcs7)结果:

<len:16><data:0x3154f6e6c796d521398e060a5blfblb9>

数据:

<len:16><data:0x6c656e6774685f6f665f31365f625f5f>

CBC(pkcs7)结果:

<len:32><data:0x4b6b8fl257e8d62f0ddfaea0122af4124414f4ff8fc86fd346fl>

数据:

<len:32><data:0x6c656e6774685f6f665f33325f625f5f>

CBC(pkcs7)结果:

<len:48><data:0x817692fdba867c913f7c717b2da336acc6dad854b2f9ff5ac849291d86ba86dcc7

7f586770ad2c7298f00f2a881393bb>

10CRC32例子

多项式为:0xedb88320L

字符串的为

"test_device_ios"crc32:0x02e312f3o

11微信蓝牙外设proto文献

//protoversion:1.0,2

packageMmBp;

cnumEmCmdld

ECI_none=0;

//req:蓝牙设备->微信/厂商服务器

ECl_req_auth=10001;//登录

ECIreqsendData=10002;//蓝牙设备发送数据给微信或厂商

ECI_req_init=10003://初始化

//resp:微信/厂商服务器->蓝牙设备

ECIrespauth=20231;

ECI_rcsp_scndData=20232;

ECI_resp_init=20233;

//push:微信/厂商服务器->蓝牙设备

EC1_push_recvData=30001://微信或厂商发送数据给蓝牙设备

ECI_push_switchView=30002;//进入/退出界面

ECl_push_switchBackgroud=30003;//切换后台

ECI_err_decodc=2999

温馨提示

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

评论

0/150

提交评论