У меня есть приложение 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
Вот изображение журнала HCI:
Кадр 37885 являетсяотключенное событие.Сообщение является Тайм-аут соединения.Кадр 37883 является событием GATT_READ_NOT_PERMIT.Таким образом, кажется, что связь прекращается после события GATT_READ_NOT_PERMIT.
Вот изображение правильного потока, когда все работает нормально.Разница в том, что кадр с идентификатором id = 3 (Service Changed) отсутствует.Поэтому, я думаю, это может быть связано с этим событием - Служба изменена. Я не уверен, когда это срабатывает и запрашивается ли это центральным устройством, но это всегда после первого чтения характеристик.
Это журнал с сообщением об отключении: