我试图从蓝牙设备上的服务中读取特征。出于某种原因,由于某些特性,在调用-[CBPeripheralManager discoverCharacteristics:forService]之后,peripheral:didDiscoverServices:回调将获得0的特征。有什么解决办法可以让我读到这个服务的特点吗?
在安装Xcode硬件IO工具和运行PacketLogger时,很明显,discoverServices调用导致了由Type=0x2803 (蓝牙核心规范第3卷,F部分,3.4.4.1节)读取的0x08,启动Handle=0x1a,结束Handle=0x1a,属性Type=0x2803。
另外,通过定义下面的类扩展来读取受保护的字段,很明显,我感兴趣的服务0x180a=Device Information的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顺便说一句,当我在LightBlue 4S上从iPhone读取设备时,该服务工作正常,我可以读取该服务的三个特性。
我正在OSX10.9小牛上测试苹果蓝牙软件版本: 4.2.0f6 12982。我正在测试的设备是Livescribe 3。
下面是关贸总协定实际句柄、CBService句柄和UUID的表。看起来在128位UUID搞乱了表之后,有一个16位的UUID。蓝牙4.0第3.1节指出,16位UUID服务“应该”组合在一起以提高性能,但我不认为它们必须这样做。
发布于 2014-03-03 21:48:07
读取与128位UUID交织的16位UUID的错误可能在OSX10.9.1中修复。但是,坏值仍然被缓存,因为计算机仍然与外围设备绑定。因此,如果您以前连接到外围设备,那么无论您重新连接或重新启动多少次,由于GATT值的错误缓存,bug仍然会出现。
我不得不删除键合缓存/Library/Preferences/com.apple.Bluetooth.plist和杀死蓝。有关更多细节,请参见我的另一个问题蓝色缓存ATT值,以及如何清除缓存?。
https://stackoverflow.com/questions/20713863
复制相似问题