BlueZ изменить LE CONNECT_REQ Timeout - PullRequest
2 голосов
/ 21 июня 2020

Я пытаюсь подключиться к устройству BTLE из Linux из C ++ с помощью BlueZ.

Подключение к большинству устройств работает нормально, но есть специальное устройство, которое выходит из строя с вероятностью 90%. Со стандартного Android смартфона соединение с этим конкретным устройством работает должным образом.

За совет @ Emil в моем другом вопросе (спасибо!) Я установил сниффер Link Layer для дальнейшего исследования.

В течение периода прослушивания я пытался подключиться к устройству (Назначение) с обоих устройства (Хорошо) и устройства (Плохо) .

  • Устройство (хорошо) работает нормально - подключено
  • Устройство (плохо) не работает - истекло время ожидания

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

Устройство (хорошо) Данные LL для CONNECT_REQ использует 500 для значения тайм-аута (которое составляет 625 мс), а Device (Bad) LL Data в CONNECT_REQ использует 42 (что составляет 52,5 мс).

Я думаю Устройство (место назначения) обычно (в основном) приходит ответ между этими двумя, ie через 52,5 мс и ниже 625 мс, но иногда он приходит менее чем за 52,5 мс, а затем BlueZ может наконец подключиться к нему.

Есть ли возможность изменить это свойство тайм-аута для CONNECT_REQ в BlueZ? Может быть, с setsockopt случайно?

Или это что-то жестко закодировано в ядре, даже для адаптеров bluetooth, подключенных к USB?

...