【发布时间】:2014-01-09 22:05:09
【问题描述】:
我正在尝试从蓝牙 LE 设备上的服务中读取特征。出于某种原因,对于某些特征,在调用-[CBPeripheralManager discoverCharacteristics:forService] 之后,peripheral:didDiscoverServices: 回调得到了 0 个特征。是否有任何变通方法可以让我了解此服务的特征?
在安装Hardware IO Tools for Xcode 并运行 PacketLogger 时,发现服务调用显然会导致 0x08 按类型读取请求(Bluetooth® 核心规范第 3 卷,第 F 部分,第 3.4.4.1 节),起始句柄=0x1a,结束句柄=0x1a,属性类型=0x2803。
此外,通过定义以下类扩展来读取受保护的字段,很明显,我感兴趣的服务 0x180a=设备信息也具有太接近舒适的 ATT 句柄:_startHandle=0x1a 和 _endHandle= 0x1a。
@implementation CBService(ProtectedProps)
- (NSNumber*) startHandle {
return self->_startHandle;
}
- (NSNumber*) endHandle {
return self->_endHandle;
}
@end
@implementation CBCharacteristic(ProtectedProps)
- (NSNumber*) descriptorHandle {
return self->_handle;
}
- (NSNumber*) valueHandle {
return self->_valueHandle;
}
@end
顺便说一句,当我在 iPhone 4S 上从 LightBlue 读取设备时,该服务运行良好,我可以读取该服务的 3 个特性。
我正在使用 Apple 蓝牙软件版本:4.2.0f6 12982 在 OSX 10.9 Mavericks 上对此进行测试。我正在测试的设备是 Livescribe 3。
这是一个实际 GATT 句柄、CBService 句柄和 UUID 的表格。在 128 位 UUID 弄乱了表格之后,它看起来像是有一个 16 位 UUID。蓝牙 4.0 第 3.1 节规定 16 位 UUID 服务“应该”为了性能而组合在一起,但我认为它们不是必须的。
- 0001–0004 0001–0004 uuid:1801
- 0005–0009 0005–0009 uuid:1800
- 0010–0019 0010–0019 uuid:128 位 UUID
- 001A–0020 001A–001A uuid:180a
- 0021–0023 缺失 uuid:180f
- 0024–002A 0021–0027 uuid:128 位 UUID
- 002E–0031 002B–002E uuid:128 位 UUID
【问题讨论】:
-
我想我在使用 OLS425 的 OS X 上遇到了类似的问题。你有没有解决这个问题?在我的情况下,我只看到 180A 特性的一个子集,其中一些在读取时给出了不正确的值。
-
@JamesSnyder 我还没有解决方案。顺便说一句,在我的设备上,16 位主服务 UUID 与 128 位主服务 UUID 混合在一起,尽管根据蓝牙 4.0 第 3.1 节,它们“应该”为了性能而组合在一起。你也一样吗?
-
我在任何地方都找不到 Livescribe SDK。有人有吗?如果需要,我可以支付。 vova@77xy.net
标签: macos bluetooth-lowenergy core-bluetooth iobluetooth