Тайм-аут сопряжения Bluetoothctl на Raspberry Pi 3

У меня есть Raspberry Pi 3B (со встроенным Bluetooth). При использовании bluetoothctl я могу сканировать устройства и легко находить нужное устройство. Однако при попытке выполнить сопряжение с ним я постоянно получаю сообщение «Не удалось выполнить сопряжение: org.bluez.ErrorEautenticationFailed». Кто-то сказал мне, что это может быть связано с тем, что устройство, к которому я пытаюсь подключиться, имеет рекламный интервал 10,2 секунды, в то время как Bluez дает тайм-аут через 2 секунды. Верно ли, что время ожидания Bluez по умолчанию истекает через 2 секунды, и если да, то как мне это изменить?

С уважением


person Peter Friis Østergaard    schedule 12.10.2017    source источник
comment
С помощью bluetoothctl я обнаружил, что с некоторыми устройствами это работает, только если я начал сопряжение с другого устройства.   -  person Alexx Roche    schedule 12.10.2017
comment
К сожалению, это не сработает для меня. Устройство, с которым я пытаюсь выполнить сопряжение (датчик давления TE U5600), не имеет кнопок для запуска сопряжения. Все, что он делает, это посылает рекламный сигнал примерно каждые 10 секунд. Я могу легко соединить устройство с моим телефоном или в Windows, поэтому я предполагаю, что устройство работает как надо, и что оно находится в Bluez/bluetoothctl, я должен искать свою проблему.   -  person Peter Friis Østergaard    schedule 16.10.2017


Ответы (2)


Я нашел решение, которое работает. Судя по всему, проблема в ядре. Здесь таймаут автоподключения установлен на 2 секунды, меньше, чем необходимо для некоторых устройств. -Решение состоит в том, чтобы добавить небольшой патч в ядро, собрать его и использовать. Это можно сделать, следуя инструкциям здесь: https://www.raspberrypi.org/documentation/linux/kernel/building.md После клонирования ядра из git модифицируем файл include/net/bluetooth/hci.h строчка которую нужно изменить выглядит так

определить HCI_LE_AUTOCONN_TIMEOUT msecs_to_jiffies(2000) /* 2 секунды */

измените значение 2000 на 20000 (сделав тайм-аут 20 секунд, а не 2 секунды). Соберите ядро ​​в соответствии с приведенными выше инструкциями, и все работает нормально. Если у кого-то есть лучшее решение, которое не требует сборки нового ядра, я хотел бы услышать его, так как этот процесс немного сложен.

person Peter Friis Østergaard    schedule 18.10.2017

Вы можете просмотреть Bluetooth IdleTimeout с помощью

grep meout /etc/bluetooth/input.conf

и отключить тайм-аут с

sudo sed -i 's/^#IdleTimeout=.*/IdleTimeout=0/' /etc/bluetooth/input.conf

и отменить

sudo sed -i 's/^IdleTimeout=.*/#IdleTimeout=30/' /etc/bluetooth/input.conf

Я не знаю независимого тайм-аута для блюза

person Alexx Roche    schedule 16.10.2017