首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IOBluetooth不返回某些服务的任何特性。

IOBluetooth不返回某些服务的任何特性。
EN

Stack Overflow用户
提问于 2013-12-21 00:05:41
回答 1查看 1K关注 0票数 1

我试图从蓝牙设备上的服务中读取特征。出于某种原因,由于某些特性,在调用-[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。

代码语言:javascript
复制
@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服务“应该”组合在一起以提高性能,但我不认为它们必须这样做。

  1. 0001-0004 0001-0004 uuid:1801
  2. 0005-0009 0005-0009 uuid:1800
  3. 0010-0019 0010-0019 uuid:128位UUID
  4. 001A-0020001A-001Auuid:180 a
  5. 0021-0023失踪uuid:180 F
  6. 0024-002A0021-0027 uuid:128位UUID
  7. 002E-0031002B-002E uuid:128位UUID
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-03 21:48:07

读取与128位UUID交织的16位UUID的错误可能在OSX10.9.1中修复。但是,坏值仍然被缓存,因为计算机仍然与外围设备绑定。因此,如果您以前连接到外围设备,那么无论您重新连接或重新启动多少次,由于GATT值的错误缓存,bug仍然会出现。

我不得不删除键合缓存/Library/Preferences/com.apple.Bluetooth.plist和杀死蓝。有关更多细节,请参见我的另一个问题蓝色缓存ATT值,以及如何清除缓存?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20713863

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档