2014-01-14 3 views
16

У меня есть линукс компьютер транслирует BLE рекламу, используя следующие команды:Есть ли способ увеличить частоту рекламы BLE в BlueZ?

sudo hciconfig hci0 up 
sudo hcitool -i hci0 cmd 0x08 0x0008 1e 02 01 1a 1a ff 4c 00 02 15 e2 c5 6d b5 df fb 48 d2 b0 60 d0 f5 a7 10 96 e0 00 00 00 00 c5 00 00 00 00 00 00 00 00 00 00 00 00 00 
sudo hciconfig hci0 leadv 3 

Это хорошо работает, но компьютер транслирует только его поддержкой BLUETOOTH рекламу один раз в секунду. Я хотел бы увеличить эту частоту до 10 раз в секунду и более. Есть ли способ увеличить частоту рекламы в BlueZ? Или один раз в секунду стандартный и неизменяемый? Я рад сделать это с помощью API-интерфейсов C, если это невозможно с помощью средств командной строки.

ответ

37

Думаю, что я понял.

Вместо:

sudo hciconfig hci0 up 
sudo hcitool -i hci0 cmd 0x08 0x0008 1e 02 01 1a 1a ff 4c 00 02 15 e2 c5 6d b5 df fb 48 d2 b0 60 d0 f5 a7 10 96 e0 00 00 00 00 c5 00 00 00 00 00 00 00 00 00 00 00 00 00 
sudo hciconfig hci0 leadv 3 

ли это:

sudo hciconfig hci0 up 
sudo hcitool -i hci0 cmd 0x08 0x0008 1e 02 01 1a 1a ff 4c 00 02 15 e2 c5 6d b5 df fb 48 d2 b0 60 d0 f5 a7 10 96 e0 00 00 00 00 c5 00 00 00 00 00 00 00 00 00 00 00 00 00 
sudo hcitool -i hci0 cmd 0x08 0x0006 A0 00 A0 00 03 00 00 00 00 00 00 00 00 07 00 
sudo hcitool -i hci0 cmd 0x08 0x000a 01 

Вторая команда hcitool (0x08 0x0006) является "LE Set Реклама Параметры Первые два байта A0 00 являются." Мин интервал «Два вторых байта A0 00 - это« максимальный интервал ». В этом примере он устанавливает время между рекламными объявлениями до 100 мс. Гранулярность этого параметра составляет 0,625 мс, поэтому установка интервала до 01 00 устанавливает рекламу на каждый 0,625 мс. Установка его на A0 00 устанавливает рекламу для перехода каждые 0xA0 * 0,62 5 мс = 100 мс. Установив его на 40 06, задайте рекламу каждый раз 0x0640 * 0,625 мс = 1000 мс. Пятый байт, 03, устанавливает режим рекламы не подключаемым. С рекламой, недоступной для подключения, самая быстрая реклама, которую вы можете рекламировать, составляет 100 мс, с возможностью подключения рекламы (0x00) вы можете рекламировать гораздо быстрее.

Третьей командой hcitool (0x08 0x000a) является «LE Set Advertising Enable». Необходимо выполнить эту команду с помощью hcitool вместо hciconfig, потому что «hciconfig hci0 leadv 3» автоматически установит скорость рекламы на более медленное значение по умолчанию 1280 мс.

Я понял это, запустив hcidump одновременно с запуском исходных команд, которые вы отправили в вопросе. Это показывает вам набор сырых команд hcitool (красиво аннотированных для того, что они делают), которые выполняются bluez. Я только что заметил из вывода hcidump, что «hciconfig hci0 leadv 3» выпускает свою команду с медленным набором рекламных интервалов.

Обратите внимание, что все это основано на IOGear GBU521, поэтому это может не работать с другими чипсетами Bluetooth LE.

+0

Это было невероятно полезно. У вас есть ссылка на документы, которые вы нашли? – schodge

+0

Как определяются шестнадцатеричные команды? Не могли бы вы указать нам документацию? Благодарю. – neowulf33

+0

Я определил шестнадцатеричные команды ", запустив hcidump одновременно с запуском исходных команд ..., размещенных в вопросе. Это показывает вам набор сырых команд hcitool (красиво аннотированных для того, что они делают)" – davidgyoung

Смежные вопросы