iOS: как наблюдать за результатом responseToRequest: withResult в CoreBluetooth

Я использую платформу CoreBlueTooth для связи между устройствами BTLE iOS. Что касается периферийной стороны, я получил запрос на запись от Central:

- (void)peripheralManager:(CBPeripheralManager *)peripheral didReceiveWriteRequests:(NSArray *)requests{
            ...
}

Согласно документу Apple по CoreBluetooth, я ответил:

[self.peripheralManager respondToRequest:request  withResult:CBATTErrorSuccess];

Однако этот метод не имеет возвращаемого значения или методов делегата для указания результата.

Я что-то упускаю?


person XuTao    schedule 12.03.2014    source источник


Ответы (2)


Ознакомьтесь с предоставленной Apple документацией о функции Bluetooth.

Bluetooth DOC от Apple

person Macrosoft-Dev    schedule 12.03.2014

respondToRequest:withResult: всегда считается успешным. Вы должны наблюдать это на центральной стороне на уровне HCI (возможно, используя команду hcidump или btmon, если вы используете Linux).

person Isa A    schedule 13.03.2014
comment
Определенно возможно, что ответ потерян из-за ограничения буфера в стеке Core Bluetooth или подобного. Недавний вопрос SO выявил эту проблему. Когда это происходит, соединение автоматически разрывается через 30 секунд. Индикатором такого события является то, что updateValue:ForCharacteristic возвращает false. - person allprog; 13.03.2014
comment
@allprog, а если проиграет, что будет дальше? - person gaussblurinc; 12.04.2016
comment
@gaussblurinc Я не уверен, что понял ваш вопрос. Я думаю, что описал случай, когда был потерян, в своем комментарии. Не могли бы вы немного уточнить? - person allprog; 12.04.2016
comment
@allprog конечно, вы сказали: ответ теряется из-за ограничения буфера в стеке CB или чего-то подобного. и updateValue: ForCharacteristic возвращает false. он возвращает false, только если периферийное устройство обновляет свое значение, а не центральную запись на периферийное устройство. может ли этот случай вызывать (иногда) nil CBAttrRequest в методах didReceive? - person gaussblurinc; 12.04.2016
comment
@gaussblurinc Я этого не видел, но если вы можете достоверно воспроизвести это событие, то, вероятно, вот что происходит. К сожалению, я не могу подтвердить или опровергнуть. Если вы думаете, что это ошибка, вам следует отправить RDAR, и было бы здорово, если бы вы также поделились им в списке рассылки bluetooth-dev. - person allprog; 12.04.2016