#android #bluetooth-lowenergy #gatt #android-ble #bluetooth-gatt
#Android #bluetooth-низкое энергопотребление #gatt #android-ble #bluetooth-gatt
Вопрос:
У меня есть приложение для Android, в котором запущен сервер BLE GATT, поэтому телефон Android будет периферийным устройством, и к нему могут подключаться другие устройства.
Иногда соединения работают нормально, но очень часто, когда я пытаюсь выполнить сопряжение внешнего устройства с телефоном, я получаю эти ошибки:
aclStateChangeCallback: device is NULL, address=81:6C:0F:1A:6C:37, newState=0
bt_btm: btm_ble_read_remote_features_complete: failed for handle: 0x0010, status 0x1a
bt_stack: [ERROR:gatt_db.cc(93)] gatts_check_attr_readability: GATT_READ_NOT_PERMIT
После сопряжения я подключаюсь к устройству, записывается 1 характеристика, и непосредственно перед считыванием 2-й характеристики устройство отключается. Всегда время до отключения составляет 9 секунд после установления соединения.
Абсолютно одно и то же устройство и приложение иногда сопряжены и работают корректно, иногда нет.. У вас есть какие-либо идеи, что может быть причиной проблемы?
Вот еще немного информации из logcat:
2019-03-18 18:48:29.132 20305-20329/? E/BluetoothRemoteDevices: aclStateChangeCallback: device is NULL, address=81:6C:0F:1A:6C:37, newState=0
2019-03-18 18:48:29.134 21813-21831/com.test I/GattServerCallback: BluetoothDevice CONNECTED: 81:6C:0F:1A:6C:37, state: 0, newState: 2
2019-03-18 18:48:29.167 20305-20357/? E/bt_btm: btm_ble_read_remote_features_complete: failed for handle: 0x0010, status 0x1a
2019-03-18 18:48:32.629 21813-21813/com.test D/TestApp: getCharacteristicValue characteristic: 3291dcea-0189-3A9c-b193-26ec13029190
2019-03-18 18:48:32.667 20305-20357/? E/bt_stack: [ERROR:gatt_db.cc(93)] gatts_check_attr_readability: GATT_READ_NOT_PERMIT
2019-03-18 18:48:38.867 20305-20357/? I/bt_btm_sec: btm_sec_disconnected clearing pending flag handle:10 reason:8
2019-03-18 18:48:38.870 20305-20329/? W/bt_btif: btif_av_move_idle: ACL Disconnected state 0 bd_addr=81:6C:0F:1A:6C:37 peer_bda=00:00:00:00:00:00
2019-03-18 18:48:38.871 21813-21831/com.test D/BluetoothGattServer: onServerConnectionState() - status=0 serverIf=7 device=81:6C:0F:1A:6C:37
2019-03-18 18:48:38.871 21813-21831/com.test D/GattServerCallback: onDeviceDisconnect
2019-03-18 18:48:38.871 20305-20329/? E/BluetoothRemoteDevices: aclStateChangeCallback: device is NULL, address=81:6C:0F:1A:6C:37, newState=1
2019-03-18 18:48:38.883 21813-21831/com.test I/GattServerCallback: BluetoothDevice DISCONNECTED: 81:6C:0F:1A:6C:37, state: 0, newState: 0
Кадр 37885 — событие отключения. Сообщение о тайм-ауте соединения. Кадр 37883 является событием GATT_READ_NOT_PERMIT. Таким образом, кажется, что связь прекращается после события GATT_READ_NOT_PERMIT.
Вот изображение правильного потока, когда все работает нормально. Разница в том, что фрейм с идентификатором дескриптора = 3 (служба изменена) отсутствует. Итак, я предполагаю, что это может быть связано с изменением службы этого события.. Я не уверен, когда это срабатывает и запрашивается ли это центральным устройством, но это всегда происходит после первого считывания характеристик.
Это журнал с сообщением об отключении:
Комментарии:
1. Можете ли вы проверить причину / код ошибки в событии отключения в журнале отслеживания hci?
2. @Emil Я добавил снимок экрана журнала HCI. Что я вижу, так это то, что есть запрос на чтение с дескриптором 3 и изменен UUID -Service, но я не могу понять, что это значит.. Я отключаюсь после этого ответа об ошибке.
3. И где находится событие отключения в вашем журнале? Какой код ошибки для этого? Я не уверен, что чтение GATT связано.
4. @Emil Я обновил вопрос. Ошибка связана с таймаутом соединения, и я уверен, что это связано с GATT_READ_NOT_PERMIT, потому что связь прекращается после этой ошибки.
5. Время ожидания соединения не имеет ничего общего с операциями высокого уровня, такими как GATT. Это просто означает, что радиостанциям не удалось установить связь друг с другом. Либо один из радиоприемников неисправен, либо один из тактовых сигналов смещается больше, чем следовало бы, что приводит к проблемам с синхронизацией. Вы могли бы попробовать другие параметры подключения, даже если это не устраняет основную причину.