CC254x(cc2540/cc2541)的微信AirSync调试笔记
一、前言
本尊自诩为IOT小能手,一直没涉足蓝牙实在说不过去。刚好上个月底的时候计划做个BLE设备,这阵子利用业余时间自学了BLE协议栈,了解了GATT,磕磕绊绊完成CC254x(cc2540/cc2541)的微信AirSync。就在今晚,听着Coldplay的“Be my mirror, my sword and shield”雄心万丈,大千世界和AirSync都被我征服,终于完成了最后一步的测试。
二、常见问题及措施
我把自己遇到的几个问题及解决方案都记录在这边,应该会让一些朋友少走一些弯路。
1. 广播包中没有 manufacture specific data 字段,或不以MAC地址结尾。
措施:广播包中必须带上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

措施:这两个处理,要保证Read Characteristic有可读权限,然后Read Char的值必须为MAC地址。
5. async write data error

措施:这个问题很多,但是解决思路都固定,就是在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的朋友有所帮助。
*****************BLE: TwoWinter****************** ***** onTestBroadcastRecord ***** result = true, Has 0xfee7 or standard service in broadcast record 广播包: E7 FE FF 0D AF 0E 0A 6F 6E 0A ***** onTestManufatureData ***** resut= true, 广播包中 manufacture specific data 字段中MAC地址校验成功. ***** onDiscoverService ***** result = true, DiscoverService success Discovered Services ServiceUUID: ----00805f9b34fb ServiceUUID: ----00805f9b34fb ServiceUUID: 0000180a----00805f9b34fb ServiceUUID: 0000fee7----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 = data dump = FE 0A 3A data receive seq = ------onDataReceived------ data length = data dump = AF 0E 6D data receive seq = ***** onTestRecvAuthReqtWhenStartedIndicating ***** result = true, received auth request pack ***** onTestIsValidAuthReqPack ***** result = true, is a valid auth request pack AuthRequestPack: FE 0A 3A AF 0E 6D has BaseRequest no Md5DeviceTypeAndDeviceId field! has MacAddress field, Mac Address = AF 0E MacAddress BitLength = 48bit Mac Address ::AF:0E:: Mac address checkout success has ProtoVersion field, ProtoVersion = has AuthProto field, AuthProto = has AuthMethod field, AuthMethod = EAM_macNoEncrypt no AesSign field! has DeviceName field, DeviceName = mydevice **** send auth response **** data len = data dump = FE 0E 4E 0A ------onDataReceived------ data length = data dump = FE 0A 1A data receive seq = ***** onTestRecvInitReqPack ***** result = true, received init request pack ***** onTestIsValidInitReqPack ***** result = true, valid init request pack: has BaseRequest has Challenge field, Challenge = **** send init request response **** data len = data dump = FE 4E 0A B4 F8 AC D1 BB CA BF ------onDataReceived------ data length = data dump = FE 0A 0C FE CF data receive seq = ------onDataReceived------ data length = data dump = data receive seq = *** receive SendDataRequest **** date type = manufactureSvr data data len = data dump = 0A 0C FE CF **** send SendData Response(echo request) **** data len = data dump = FE 1E 4E 0A 0A 0C FE CF ***** onTestIsValidSendDataRequest ***** result = true, is a valid SendDataRequest pack: has BaseRequest field has Data field, data = FE CF no Type field, use default manufactureSvr data type **** send ManufactureSvr Push **** data len = data dump = FE 0A **** send Html Push **** data len = data dump = FE 0A 4E **** send wxWristBand Push **** data len = data dump = FE 0E 0A **** send EnterDeviceChatView Push **** data len = data dump = FE 0E 0A **** send Exit ChatView Push **** data len = data dump = FE 0E 0A **** send Enter HtmlChatView Push **** data len = data dump = FE 0E 0A **** send Exit HtmlChatView Push **** data len = data dump = FE 0E 0A **** send enterBackground Push **** data len = data dump = FE 0C 0A **** send enterForground Push **** data len = data dump = FE 0C 0A **** send enterSleep Push **** data len = data dump = FE 0C 0A *****Disconnected Device*****
CC254x(cc2540/cc2541)的微信AirSync调试笔记的更多相关文章
- CC254x/CC2540/CC2541库函数速查(转)
hci.h 转自:http://blog.csdn.net/xiaoleiacmer/article/details/44036607#t1 //分配内存,应用程序不应该调用这个函数. void *H ...
- 以蓝牙开发的视觉解读微信Airsync协议
微信硬件平台使用蓝牙作为近场控制的连接件,并拟定了<微信蓝牙外设协议>.这份协议更像一个标准,用于规范微信和蓝牙外设之间的数据交互场景和接口.但从开发者来看,要完全读懂这份协议,恐怕需要熟 ...
- cc2540 cc2541 开发板资料更新日志
经过多次PCB打样和全面调试.已经完毕了cc2540 cc2541的开发板的批量贴片.硬件告一段落, 接下来是全面完好软件方面的工作.眼下已经针对没有开发经验的用户编写完毕0基础基础实验代码和教程.接 ...
- Tomcat调试笔记
调试笔记 在使用Tomcat过程中经常碰到问题,导致tomcat启动失败.如下↓ 由于报错太过笼统,我根本无法找出错误.后来我切换到Console视图下,看到了如下错误信息. 根据报错信息,错误原因是 ...
- JavaScript特效(调试笔记)
JavaScript特效 一.在网页上显示当前的时间日期,例如:“2016年3月26日 星期六”. js源代码: function getTime() { var today = new Date() ...
- USB wifi调试笔记
本文以realtek 8192CU WiFi模块为例,介绍USB wifi在Jelly Bean 4.1的调试笔记. 1.WIFI打不开现象概述 WiFi打不开是指您在UI的settings下选中Wi ...
- 蓝牙4.0BLE cc2540 cc2541 ios OAD课程(空中固件升级)[原版的,多图]
蓝牙4.0BLE cc2540 cc2541 ios OAD课程(件) 为阿莫单片机论坛 www.AmoMcu.com 原创.仅仅公布于csdn博客, 如需转载,请注明出处,谢谢! ...
- 蓝牙4.0BLE 手机控制 cc2540 CC2541 的串口透传功能已实现
蓝牙4.0BLE 手机控制 cc2540 CC2541 的串口透传功能已实现 尽管蓝牙4.0 BLE芯片CC2540 是单芯片(即用户能够对它进行芯片级代码编写), 是80 ...
- ida动态调试笔记
ida动态调试笔记 目标文件:阿里安全挑战赛的第二题 点击打开链接 使用环境:ida6.8点击打开链接,adt bundle点击打开链接 首先打开avd安卓模拟器,界面如下: 在dos下运行adb命令 ...
随机推荐
- css 样式 图片平铺整个界面
比如一个容器(body,div,span)中设定一个背景.这个背景的长宽值在css2.1之前是不能被修改的. 所以实际的结果是只能重复显示,所以出现了repeat,repeat-x,repeat-y, ...
- 吃豆子(Packman)
ZLYD团队总结--吃豆子(Packman) 一.设计主要内容 玩家可以通过键盘或鼠标控制游戏区.游戏采取分数和血量制,当血量用尽时游戏结束,游戏以最终玩家获得的分数来判断玩家水平的高低.使用IEDA ...
- 贪心 BestCoder Round #39 1001 Delete
题目传送门 /* 贪心水题:找出出现次数>1的次数和res,如果要减去的比res小,那么总的不同的数字tot不会少: 否则再在tot里减去多余的即为答案 用set容器也可以做,思路一样 */ # ...
- win7中资源管理器不能显示图片预览的解决方法
在用xp的时候,在资源管理器里面预览图片文件是在普通不过的事情了.换到win7之后,图片文件一直不能预览,只是显示图标还挺烦的.肯定是哪里设置的不对,下午闲来无事,找到是哪里的问题了. 如果你也遇到相 ...
- 【Linux程序设计】之Linux库函数的使用,多文件程序开发,静态与共享函数
这个系列的博客贴的都是我大二的时候学习Linux系统高级编程时的一些实验程序,都挺简单的.贴出来纯粹是聊胜于无. 实验题目:Linux基础程序设计综合实验 实验目的:熟悉并掌握Linux库函数的使用, ...
- 使用CSS 3创建不规则图形 文字围绕
前言 CSS 创建复杂图形的技术即将会被广泛支持,并且应用到实际项目中.本篇文章的目的是为大家开启它的冰山一角.我希望这篇文章能让你对不规则图形有一个初步的了解. 现在,我们已经可以使用CSS 3 常 ...
- [leetCode][013] Two Sum 2
题目: Given an array of integers that is already sorted in ascending order, find two numbers such that ...
- xfce4桌面自动整理脚本
转自http://blog.chinaunix.net/uid-22101074-id-91073.html (有修改) xfce4桌面没有自动排列的功能,如果文件多了,超出了桌面的范围,就不好找了, ...
- SecureCrt脚本(三)二级对象之Screen详解
Crt自动化 测试 SecureCrt脚本 JS脚本 1.引言 2.Screen属性和方法 2.1.属性 2.1.1.CurrentColumn 2.1.2.CurrentRow 2.1.3.Co ...
- iOS开发之UITextField的使用详解
UITextField的使用详解 UITextField控件是开发中,使用频率比较高的控件了,那么有必要总结一下. 一.UITextField手动编写控件 UITextField *txtAccou ...