Периферийные устройства всегда сообщают о подключении и никогда не подключаются после обновления до IOS 11.

Я использую приложение CoreBluetooth для IOS, после обновления версии IOS центральный менеджер не может подключиться к периферийному устройству и не показывает никаких ошибок. Прежде чем начать процесс подключения, я получаю эти значения от устройства:

CBPeripheral: 0x1c0106e40, идентификатор = BE2B06BF-F385-82AC-95E6-65EA1CF8B11F, имя = icomon, состояние = отключено

и после того, как я пытаюсь подключиться к устройству, состояние меняется:

CBPeripheral: 0x1c411bea0, идентификатор = BE2B06BF-F385-82AC-95E6-65EA1CF8B11F, имя = icomon, состояние = подключение

и больше ничего, дальше ничего не происходит, я не получаю никаких данных от центрального менеджера и состояние устройства никогда не меняется.


person D.Pacheco    schedule 22.09.2017    source источник
comment
Пожалуйста, отредактируйте свой вопрос, чтобы отобразить соответствующий код.   -  person Paulw11    schedule 23.09.2017


Ответы (1)


Я боролся с проблемой, которая имеет точно такие же симптомы. Надеюсь, это та же проблема, и этот ответ будет полезен.

В моем случае проблема была вызвана PDU управления канальным уровнем, который мое устройство отправляло сразу после установления соединения. В частности, я использую Apache Mynewt (http://mynewt.apache.org/) и его NimBLE. контроллер инициирует процедуру обмена функциями сразу после установления соединения. Поскольку мое устройство является периферийным, а устройство iOS 11 — центральным, мое устройство отправляет LL_SLAVE_FEATURE_REQ PDU.

Я не знаю, связано ли это с синхронизацией или с самим PDU, но в любом случае устройство iOS никогда не отправляет данные прикладного уровня после обмена функциями. Когда я изменяю NimBLE, чтобы он не инициировал обмен функциями, опрос устройства происходит нормально, и вызывается обратный вызов, связанный с CoreBluetooth.

person Christopher Collins    schedule 17.10.2017