2

我正在尝试为OSX 上的蓝牙 LE 错误找到任何解决方法。特别是,我想知道 OSX 在读取蓝牙 LE GATT 表时哪里出错了。因此,我正在从 Hardware IO Tools for XCode 查看 PacketLogger中的 L2CAP 数据包。

当我使用蓝牙资源管理器连接到蓝牙 LE 设备时,我希望看到 3.4.4.9 Read By Group Type Request (uuid=0x2800 «Primary Service», startingHandle=0x0001, endingHandle=0xffff) 以发现主要服务(或查找By Type Value Request (uuid=0x2800, value:uuid of service)),后跟 3.4.4.1 Read By Type Request (uuid=0x2803 «Characteristic») 以发现特征。这是我从 iPhone 嗅探数据包时看到的(使用 CC2540)。

但在 OSX 上,连接后我在 PacketLogger(和 CC2540)中看到的唯一 L2CAP 请求是:

  1. 按类型读取请求(attributeType=0x2803,startingHandle=0x001a,endingHandle=0x001a)
  2. 按类型读取请求(attributeType=0x2802 «Include»,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)

这些请求不足以发现服务,但蓝牙资源管理器此时会列出所有服务 UUID。这表明 OSX 已经知道服务在这个蓝牙 LE 设备上的位置。blued 是否缓存设备服务并在启动时读取它们?如果是这样,我该如何清除缓存?

我曾尝试关闭蓝牙、杀死 blued 并重新启动 OSX,但每次 OSX 都不会重新发现这些服务。

4

1 回答 1

3
于 2014-03-03T21:41:15.470 回答