蓝色缓存ATT值,以及如何清除缓存?

时间:2014-02-26 00:08:09

标签: macos bluetooth-lowenergy core-bluetooth iobluetooth

我正在尝试找到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请求是:

  1. 读取类型请求(attributeType = 0x2803,startingHandle = 0x001a,endingHandle = 0x001a)
  2. 读取类型请求(attributeType = 0x2802«包含»,startingHandle = 0x0001,endingHandle = 0x0004)
  3. 读取类型请求(attributeType = 0x2802,startingHandle = 0x0005,endingHandle = 0x0009)
  4. 读取类型请求(attributeType = 0x2802,startingHandle = 0x0010,endingHandle = 0x0019)
  5. 读取类型请求(attributeType = 0x2802,startingHandle = 0x001a,endingHandle = 0x001a)
  6. 读取类型请求(attributeType = 0x2803,startingHandle = 0x001a,endingHandle = 0x001a)
  7. 读取类型请求(attributeType = 0x2802,startingHandle = 0x0021,endingHandle = 0x0027)
  8. 读取类型请求(attributeType = 0x2802,startingHandle = 0x002b,endingHandle = 0x002e)
  9. 这些要求不足以发现服务,但蓝牙资源管理器此时列出了所有服务UUID。这表明OSX已经知道该蓝牙LE设备上的服务在哪里。蓝色缓存设备服务并在启动时读取它们吗?如果是这样,我该如何清除缓存?

    我尝试关闭蓝牙,杀死蓝色,然后重新启动OSX,但每次OSX都不会重新发现服务。

1 个答案:

答案 0 :(得分:3)

是的,blued会缓存蓝牙LE GATT表。如果缓存不好,请执行以下操作将其删除,这要归功于“blued process is killing my CPU”

  1. 删除/Library/Preferences/com.apple.Bluetooth.plist。这将删除所有已绑定的蓝牙和蓝牙LE设备的知识。
  2. 杀/ usr / sbin / blued。它将由launchd重新启动。
  3. 再次运行蓝牙LE程序。 PacketLogger现在将显示 Read By Group Type 请求以重新发现主要服务。
  4. 根据蓝牙4.0第3卷第G部分第2.5.2节“属性缓存”,当中心与外围设备(不仅仅是配对)建立“绑定”时,允许缓存。我不确定如何验证中心确实与外围设备绑定,但我认为确实如此。