Я пытаюсь подключиться к устройству 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?