Ошибка GATT_READ_NOT_PERMIT при попытке использовать устройство Android в качестве сервера GATT - PullRequest
0 голосов
/ 18 марта 2019

У меня есть приложение 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: enter image description here

Кадр 37885 являетсяотключенное событие.Сообщение является Тайм-аут соединения.Кадр 37883 является событием GATT_READ_NOT_PERMIT.Таким образом, кажется, что связь прекращается после события GATT_READ_NOT_PERMIT.

Вот изображение правильного потока, когда все работает нормально.Разница в том, что кадр с идентификатором id = 3 (Service Changed) отсутствует.Поэтому, я думаю, это может быть связано с этим событием - Служба изменена. Я не уверен, когда это срабатывает и запрашивается ли это центральным устройством, но это всегда после первого чтения характеристик.

enter image description here

Это журнал с сообщением об отключении:

enter image description here

...