我正在尝试找到Bluetooth LE bug on OSX的任何变通办法。特别是,我想知道OSX在读取蓝牙LE GATT表时出错了。因此,我正在查看PacketLogger from Hardware IO Tools for XCode中的L2CAP数据包。
当我使用蓝牙资源管理器连接蓝牙LE设备时,我希望看到3.4.4.9 按组类型读取请求(uuid = 0x2800«主要服务»,startingHandle = 0x0001,endingHandle = 0xffff)发现主要服务(或按类型查找值请求(uuid = 0x2800,值:服务的uuid)),然后是3.4.4.1 按类型读取请求 (uuid = 0x2803«特征»)发现特征。这是我从iPhone(使用CC2540)嗅探数据包时看到的。
但是在OSX上,连接后我在PacketLogger(和CC2540)中看到的唯一L2CAP请求是:
这些要求不足以发现服务,但蓝牙资源管理器此时列出了所有服务UUID。这表明OSX已经知道该蓝牙LE设备上的服务在哪里。蓝色缓存设备服务并在启动时读取它们吗?如果是这样,我该如何清除缓存?
我尝试关闭蓝牙,杀死蓝色,然后重新启动OSX,但每次OSX都不会重新发现服务。
答案 0 :(得分:3)
是的,blued会缓存蓝牙LE GATT表。如果缓存不好,请执行以下操作将其删除,这要归功于“blued process is killing my CPU”:
根据蓝牙4.0第3卷第G部分第2.5.2节“属性缓存”,当中心与外围设备(不仅仅是配对)建立“绑定”时,允许缓存。我不确定如何验证中心确实与外围设备绑定,但我认为确实如此。