Периферия BLE Android отключается с кодом состояния BLE_HCI_INSTANT_PASSED(0x28)
Мое приложение может успешно подключаться к периферийному устройству BLE (которое является устройством OBDII/J1939).
2018-01-24 14:58:38,413 INFO LogUtil - GATT Server Status = (0) : BLE_HCI_STATUS_CODE_SUCCESS(0x00)
2018-01-24 14:58:38,414 INFO LogUtil - GATT Server New State = (2) : STATE_CONNECTED
2018-01-24 14:58:38,414 INFO LogUtil - Connected to GATT server.
Приложение установило связь с устройством, но через некоторое время получило сообщение об отключении сервера GATT в onConnectionStateChange
в реализации обратного вызова BluetoothGattCallback
, Ниже приведены журналы из приложения:
2018-01-24 15:07:46,396 INFO LogUtil - GATT Server Status = (40) : BLE_HCI_INSTANT_PASSED(0x28)
2018-01-24 15:07:46,397 INFO LogUtil - GATT Server New State = (0) : STATE_DISCONNECTED
2018-01-24 15:07:46,398 INFO LogUtil - Disconnected from GATT server.
Не в состоянии найти причину позади BLE_HCI_INSTANT_PASSED
код состояния.
Любая помощь в этом будет полезна.
1 ответ
Когда данные передаются по BLE, передача данных может начаться только в моменты синхронизации, известные как "события соединения". На канальном уровне BLE можно сделать несколько специальных запросов относительно этих точек синхронизации. Они есть:
- LL_CHANNEL_MAP_REQ - Запрос на изменение каналов BLE, по которым передается. Микросхемы Bluetooth изменят карту каналов в зависимости от шума в окружающей среде, чтобы попытаться ограничить потерю пакетов.
- LL_CONNECTION_UPDATE_REQ - Запрос на изменение частоты "событий соединения" (известных как "интервал соединения"). Это сделано для достижения лучшей пропускной способности / задержки или экономии энергии.
Каждый из этих запросов на канальном уровне при отправке по радиоканалу содержит "Мгновенный" для изменения. "Мгновенное" является "событием соединения" в будущем, чтобы применить изменение.
На канальном уровне BLE надежен. Это означает, что каждый пакет канального уровня должен быть подтвержден другой стороной. В шумной РЧ-среде возможно, что пакет канального уровня может потребовать пару попыток для фактической отправки. Это означает, что пакет может прибыть много "событий соединения" после первоначально предназначенного.
Если один из упомянутых выше пакетов получен после "Мгновенного", изменения должны были быть применены, по определению чип BLE должен отключиться с причиной 0x28 (Instant Passed)
Дополнительную информацию по этой теме можно найти в спецификации ядра Bluetooth, доступной на веб-сайте Bluetooth SIG: