Ошибка, полученная от периферийного устройства: didUpdateNotificationStateForCharacteristic

Я разработал периферийное приложение Bluetooth с низким энергопотреблением, которое успешно соединяется со вторым центральным приложением BLE. Однако я не могу заставить центральное приложение подписаться на уведомления об одной из характеристик услуги, предлагаемой периферийным устройством. В центральном приложении у меня есть следующее:

- (void)peripheral:(CBPeripheral *)peripheral didDiscoverCharacteristicsForService:(CBService *)service error:(NSError *)error
{
    if ([service.UUID isEqual:[CBUUID UUIDWithString:IMMEDIATE_ALERT_SERVICE_UUID]])  {
        for (CBCharacteristic *aChar in service.characteristics) {
            if ([aChar.UUID isEqual:[CBUUID UUIDWithString:ALERT_LEVEL_CHARACTERISTIC_UUID]]) {
                [peripheral setNotifyValue:YES forCharacteristic:aChar];

К сожалению, это не удается, и в периферийном методе делегата возникает ошибка:didUpdateNotificationStateForCharacteristic (тип ошибки «неизвестен»). Если я напечатаю объект характеристики в приведенном выше коде (aChar), я получу следующее:

<CBCharacteristic: 0x1464f560, UUID = 2A06, properties = 0x2, value = (null), notifying = NO>

Обратите внимание, что уведомление = НЕТ. Как настроить периферийное устройство, чтобы характеристика уведомляла?


person JeffB6688    schedule 24.01.2015    source источник


Ответы (1)


Хорошо, я понял это. На периферийной стороне необходимо установить свойства характеристики для включения уведомлений. Вы делаете это с помощью свойства CBCharacteristicPropertyNotify. Например, вот как можно создать характеристику:

CBMutableCharacteristic *alertLevelCharacteristic = 
[[CBMutableCharacteristic alloc] initWithType:alertLevelCharacteristicUUID
                                   properties:CBCharacteristicPropertyRead | CBCharacteristicPropertyNotify
                                        value: nil permissions:CBAttributePermissionsReadable];
person JeffB6688    schedule 24.01.2015