在OS X上使用updateValue:forCharacteristic:onSubscribedCentrals时,蓝牙崩溃

黑狼

我编写了一个iOS应用程序,其中iOS设备既是BTLE中央设备又是BTLE外围设备,并且多个设备可以交换数据。我试图将应用程序的外围部分带到OSX。问题是,一旦我尝试通过OS X上的updateValue:forCharacteristic:onSubscribedCentralsBTLE将数据从OS X外围设备传输到iOS中心,OS X上的BTLE就会完全崩溃。

这意味着:

1)OS X计算机不再被任何iOS设备接收

2)外围设备管理器不再执行任何操作-不调用回调,什么也没有

3)当我在OS X上重新启动应用程序时,外围设备管理器永远不会将其状态更改为PoweredOn或任何其他状态

4)重新启动或使用后,使BTLE在OS X上再次运行的唯一方法 sudo killall blued

完全相同的代码在iOS上可以正常工作,我不知道发生了什么。基本上,我正在这样做:

- (instancetype)init {
    self = [super init];
    dispatch_queue_t peripheralQueue = dispatch_queue_create("connichiwaperipheralqueue", DISPATCH_QUEUE_SERIAL);
    self.peripheralManager = [[CBPeripheralManager alloc] initWithDelegate:self queue:peripheralQueue];
    return self;
}

- (void)peripheralManagerDidUpdateState:(CBPeripheralManager *)peripheralManager {
    if (peripheralManager.state == CBCentralManagerStatePoweredOn) {
        [self.peripheralManager addService:self.advertisedService];
        [self.peripheralManager startAdvertising:@{ CBAdvertisementDataServiceUUIDsKey : @[[CBUUID UUIDWithString:BLUETOOTH_SERVICE_UUID]] }];
    }
}

- (void)peripheralManager:(CBPeripheralManager *)peripheral central:(CBCentral *)central didSubscribeToCharacteristic:(CBCharacteristic *)characteristic {
    if (characteristic == self.advertisedInitialCharacteristic) {
        [self _sendInitialToCentral:central];
    }
}

- (void)_sendInitialToCentral:(CBCentral *)central {   
    NSDictionary *sendDictionary = @{ /* some dictionary, but i've also tried with a short, simple string */ };
    NSData *initialData = [NSJSONSerialization dataWithJSONObject:sendDictionary options:NSJSONWritingPrettyPrinted error:nil];
    BOOL didSend = [self.peripheralManager updateValue:initialData forCharacteristic:self.advertisedInitialCharacteristic onSubscribedCentrals:@[central]];
}

,而self.advertisedService是一个包含服务self.advertisedInitialCharacteristicBLUETOOTH_SERVICE_UUID是一个UUID的iOS设备所期待的。

执行此操作时,iOS设备会拿起OS X机器,发现服务,发现特征,然后OS X机器执行_sendInitialToCentral:在这里,didSend变为,true但之后BTLE基本上停止了在计算机上执行任何操作,并且新值永远不会到达iOS设备。

有任何想法吗?难道我做错了什么?我在这里看不到问题。运行OS X 10.9.3

更新资料

只是想补充一点,我刚刚在另一台机器上进行了测试,并且发生了相同的事情。

更新2

发现原因:这个问题的原因是我将CBCentral交给了updateValue:forCharacteristic:onSubscribedCentrals:如果我将最后一个参数更改为要nil发送的数据。问题是我需要将数据发送到特定的中央,我不想广播它们。任何人都知道这里发生了什么以及如何解决此问题?

黑狼

只是为了回答这个问题:看来这是Mavericks中的错误。这个问题(以及许多其他有关BTLE的问题)已在优胜美地完全解决。

在Mavericks上,仅传递nil到最后一个参数updateValue:forCharacteristic:onSubscribedCentrals似乎可以使BTLE正常工作。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在OS X / Mac上使用Windows蓝牙API?

来自分类Dev

在OS X / Mac上使用Windows蓝牙API?

来自分类Dev

在OS X上使用imshow时出错

来自分类Dev

Xcode 5.0.1在OS X Mavericks上崩溃

来自分类Dev

MATLab在启动OS X Yosemite时崩溃

来自分类Dev

使用OS X上的Spotify获取蓝牙耳机上的媒体按钮

来自分类Dev

OS X上的Unity崩溃:UnityGfxDeviceWorker线程崩溃

来自分类Dev

Matlab崩溃时,Mac OS上的X11连接断开

来自分类Dev

Matlab崩溃时,Mac OS上的X11连接断开

来自分类Dev

在OS X上使用Python安装OpenCV时出错

来自分类Dev

在Mac OS X上使用Conda安装pyzbar时出错

来自分类Dev

OS X上的CATiledLayers

来自分类Dev

在OS X上安装Numba时出错

来自分类Dev

CGContextDrawPDFPage在OS X 10.8上使用EXC_BAD_ACCESS随机崩溃

来自分类Dev

OS X上的Mono日志记录运行时崩溃

来自分类Dev

信号量在OS X上不断崩溃

来自分类Dev

Import.io在OS X El Capitan上崩溃

来自分类Dev

Mac OS X上的JNI复制库加载崩溃

来自分类Dev

信号量在OS X上不断崩溃

来自分类Dev

在OS X上使用brew升级R

来自分类Dev

在OS X上使用C#入门

来自分类Dev

在OS X Mavericks上使用扭曲

来自分类Dev

在OS X上使用“ ssh -Y”

来自分类Dev

在OS X Mavericks上使用扭曲

来自分类Dev

在OS X上使用lldb捕获segfault

来自分类Dev

在OS X上使用brew升级R

来自分类Dev

Linux OS随机崩溃

来自分类Dev

在OS X上使用Postgres.app时,如何将psql放在路径上?

来自分类Dev

在OS X上设置g ++