我正在尝试为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 请求是:
- 按类型读取请求(attributeType=0x2803,startingHandle=0x001a,endingHandle=0x001a)
- 按类型读取请求(attributeType=0x2802 «Include»,startingHandle=0x0001,endingHandle=0x0004)
- 按类型读取请求(attributeType=0x2802,startingHandle=0x0005,endingHandle=0x0009)
- 按类型读取请求(attributeType=0x2802,startingHandle=0x0010,endingHandle=0x0019)
- 按类型读取请求(attributeType=0x2802,startingHandle=0x001a,endingHandle=0x001a)
- 按类型读取请求(attributeType=0x2803,startingHandle=0x001a,endingHandle=0x001a)
- 按类型读取请求(attributeType=0x2802,startingHandle=0x0021,endingHandle=0x0027)
- 按类型读取请求(attributeType=0x2802,startingHandle=0x002b,endingHandle=0x002e)
这些请求不足以发现服务,但蓝牙资源管理器此时会列出所有服务 UUID。这表明 OSX 已经知道服务在这个蓝牙 LE 设备上的位置。blued 是否缓存设备服务并在启动时读取它们?如果是这样,我该如何清除缓存?
我曾尝试关闭蓝牙、杀死 blued 并重新启动 OSX,但每次 OSX 都不会重新发现这些服务。