CC254x(cc2540/cc2541)的微信AirSync调试笔记
2015-08-18 22:47
591 查看
一、前言
本尊自诩为IOT小能手,一直没涉足蓝牙实在说不过去。刚好上个月底的时候计划做个BLE设备,这阵子利用业余时间自学了BLE协议栈,了解了GATT,磕磕绊绊完成CC254x(cc2540/cc2541)的微信AirSync。就在今晚,听着Coldplay的“Be my mirror, my sword and shield”雄心万丈,大千世界和AirSync都被我征服,终于完成了最后一步的测试。转载请注明:http://blog.csdn.net/sadshen
二、常见问题及措施
我把自己遇到的几个问题及解决方案都记录在这边,应该会让一些朋友少走一些弯路。1. 广播包中没有 manufacture specific data 字段,或不以MAC地址结尾。
![](http://7xkqvo.com1.z0.glb.clouddn.com/err_no_md_data.jpg)
措施:广播包中必须带上0xFF的厂商自定义字段,09+ FF + 厂商ID(2 Bytes) + MAC(6 Bytes)。
2. Mac address 校验失败!
这是我之前调试的错误提示:***** onTestIsValidAuthReqPack ***** result = false, is an invalid auth request pack: AuthRequestPack: FE 01 00 32 27 11 00 01 0A 00 18 84 80 04 20 01 28 02 3A 06 57 65 43 68 61 74 62 16 57 65 43 68 61 74 42 6C 75 65 74 6F 6F 74 68 44 65 76 69 63 65 00 has BaseRequest no Md5DeviceTypeAndDeviceId field! has MacAddress field, Mac Address = 57 65 43 68 61 74 MacAddress BitLength = 48bit Mac Address from broadcast record = 90:59:AF:0E:62:88 Mac address 校验失败! has ProtoVersion field, ProtoVersion = 65540 has AuthProto field, AuthProto = 1 has AuthMethod field, AuthMethod = EAM_macNoEncrypt no AesSign field! has DeviceName field, DeviceName = WeChatBluetoothDevice
措施:在AUTH REQ中也有Mac字段,需要保证MAC地址和广播包中的一样。
3. Read Characteristic is not read able!
4. Can not Start Indicate permision:Can not get configure descriptor
![](http://7xkqvo.com1.z0.glb.clouddn.com/err_read_is_not_read_able.jpg)
措施:这两个处理,要保证Read Characteristic有可读权限,然后Read Char的值必须为MAC地址。
5. async write data error
![](http://7xkqvo.com1.z0.glb.clouddn.com/err_async_write_data_error.jpg)
措施:这个问题很多,但是解决思路都固定,就是在https://developer.android.com/reference/android/bluetooth/BluetoothGatt.html#GATT_FAILURE
找错误码。
我的错误码是03,说是手机没有写权限。
public static final int GATT_WRITE_NOT_PERMITTED Added in API level 18 GATT write operation is not permitted Constant Value: 3 (0x00000003)
后来一查,果然我的Write CHAR没有write权限。
三、AirSync的完整日志
这边把完整的LOG日志提供出来,希望对其他调试AirSync的朋友有所帮助。2015年8月18日星期二 中国标准时间下午9:42:07 *****************BLE: TwoWinter****************** ***** onTestBroadcastRecord ***** result = true, Has 0xfee7 or standard service in broadcast record 广播包:02 01 06 03 02 E7 FE 09 FF 0D 00 90 59 AF 0E 62 88 0A 09 54 77 6F 57 69 6E 74 65 72 05 12 50 00 20 03 02 0A 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ***** onTestManufatureData ***** resut= true, 广播包中 manufacture specific data 字段中MAC地址校验成功. ***** onDiscoverService ***** result = true, DiscoverService success Discovered Services ServiceUUID: 00001800-0000-1000-8000-00805f9b34fb ServiceUUID: 00001801-0000-1000-8000-00805f9b34fb ServiceUUID: 0000180a-0000-1000-8000-00805f9b34fb ServiceUUID: 0000fee7-0000-1000-8000-00805f9b34fb ***** onTestHasWeChatService ***** result = true, has WeChatService or standard service ***** onTestHasIndicateCharacteristic ***** result = true, has WeChat Indicate Characteristic ***** onTestHasWriteCharacteristic ***** result = true, has Wechat Write Characteristic ***** onTestHasReadCharacteristic ***** result = true, Has WeChat read characteristic ***** onTestWriteCharacteristicPermisson ***** result = true, has Write permission ***** onTestIndicateCharacteristicPermisson ***** result = true, has Indication permission ***** onTestReadCharacteristicPermisson ***** result = true, Read Characteristic is read able ***** onTestStartIndicating ***** result = true, can Start Indicate ***** onConnected ***** result = true, connected ------onDataReceived------ data length = 20 data dump = FE 01 00 24 27 11 00 01 0A 00 18 84 80 04 20 01 28 02 3A 06 data receive seq = 0 ------onDataReceived------ data length = 16 data dump = 90 59 AF 0E 62 88 62 08 6D 79 64 65 76 69 63 65 data receive seq = 1 ***** onTestRecvAuthReqtWhenStartedIndicating ***** result = true, received auth request pack ***** onTestIsValidAuthReqPack ***** result = true, is a valid auth request pack AuthRequestPack: FE 01 00 24 27 11 00 01 0A 00 18 84 80 04 20 01 28 02 3A 06 90 59 AF 0E 62 88 62 08 6D 79 64 65 76 69 63 65 has BaseRequest no Md5DeviceTypeAndDeviceId field! has MacAddress field, Mac Address = 90 59 AF 0E 62 88 MacAddress BitLength = 48bit Mac Address from broadcast record = 90:59:AF:0E:62:88 Mac address checkout success has ProtoVersion field, ProtoVersion = 65540 has AuthProto field, AuthProto = 1 has AuthMethod field, AuthMethod = EAM_macNoEncrypt no AesSign field! has DeviceName field, DeviceName = mydevice **** send auth response **** data len = 14 data dump = FE 01 00 0E 4E 21 00 01 0A 02 08 00 12 00 ------onDataReceived------ data length = 16 data dump = FE 01 00 10 27 13 00 02 0A 00 1A 04 11 22 33 44 data receive seq = 2 ***** onTestRecvInitReqPack ***** result = true, received init request pack ***** onTestIsValidInitReqPack ***** result = true, valid init request pack: has BaseRequest has Challenge field, Challenge = 11 22 33 44 **** send init request response **** data len = 25 data dump = FE 01 00 19 4E 23 00 02 0A 02 08 00 10 B4 24 18 F8 AC 01 20 D1 BB CA BF 07 ------onDataReceived------ data length = 20 data dump = FE 01 00 18 27 12 00 03 0A 00 12 0C FE CF 00 01 00 12 00 01 data receive seq = 3 ------onDataReceived------ data length = 4 data dump = 00 03 00 00 data receive seq = 4 *** receive SendDataRequest **** date type = manufactureSvr data data len = 16 data dump = 0A 00 12 0C FE CF 00 01 00 12 00 01 00 03 00 00 **** send SendData Response(echo request) **** data len = 30 data dump = FE 01 00 1E 4E 22 00 03 0A 02 08 00 12 10 0A 00 12 0C FE CF 00 01 00 12 00 01 00 03 00 00 ***** onTestIsValidSendDataRequest ***** result = true, is a valid SendDataRequest pack: has BaseRequest field has Data field, data = FE CF 00 01 00 12 00 01 00 03 00 00 no Type field, use default manufactureSvr data type **** send ManufactureSvr Push **** data len = 22 data dump = FE 01 00 16 75 31 00 00 0A 00 12 08 31 32 33 34 35 36 37 38 18 00 **** send Html Push **** data len = 23 data dump = FE 01 00 17 75 31 00 00 0A 00 12 08 31 32 33 34 35 36 37 38 18 91 4E **** send wxWristBand Push **** data len = 14 data dump = FE 01 00 0E 75 31 00 00 0A 00 12 00 18 01 **** send EnterDeviceChatView Push **** data len = 14 data dump = FE 01 00 0E 75 32 00 00 0A 00 10 01 18 01 **** send Exit ChatView Push **** data len = 14 data dump = FE 01 00 0E 75 32 00 00 0A 00 10 02 18 01 **** send Enter HtmlChatView Push **** data len = 14 data dump = FE 01 00 0E 75 32 00 00 0A 00 10 01 18 02 **** send Exit HtmlChatView Push **** data len = 14 data dump = FE 01 00 0E 75 32 00 00 0A 00 10 02 18 02 **** send enterBackground Push **** data len = 12 data dump = FE 01 00 0C 75 33 00 00 0A 00 10 01 **** send enterForground Push **** data len = 12 data dump = FE 01 00 0C 75 33 00 00 0A 00 10 02 **** send enterSleep Push **** data len = 12 data dump = FE 01 00 0C 75 33 00 00 0A 00 10 03 *****Disconnected Device*****
相关文章推荐
- 社交巨头三国杀:微信、WhatsApp、Line到底有啥区别?
- 微信悄悄升级群聊功能:个人微信营销号的福音
- 我是运营,我没有假期
- 如何做到日消息量100万的微信公众号?
- 论微信取消推送功能的可能性(原创)
- 微信的成功,靠的是QQ导流吗?
- 微信服务号推送模板消息接口
- PHP限制页面只能在微信自带浏览器访问的代码
- HTML5实现微信拍摄上传照片功能
- 微信小程序去哪里找 小程序到底如何使用(附小程序名单)
- 使用jQuery.wechat构建微信WEB应用
- nw.js实现类似微信的聊天软件
- JS版微信6.0分享接口用法分析
- android通过蓝牙接收文件打开时无法自动选择合适的应用程序
- js如何判断用户是否是用微信浏览器
- java制作仿微信录制小视频控件