Неправильная полезная нагрузка при использовании стека BlueZ в качестве периферийного устройства
Я пытался следовать инструкциям Давидгёнга вэтот вопрос, Вот команды, которые я использую:
hciconfig hci0 up
hciconfig hci0 noleadv
hcitool -i hci0 cmd 0x08 0x0008 48 45 4c 4c 4f 57 4f 52 4c 44
hciconfig hci0 leadv
Что дает мне такой вывод:
LE set advertise enable on hci0 returned status 12
< HCI Command: ogf 0x08, ocf 0x0008, plen 10
48 45 4C 4C 4F 57 4F 52 4C 44
> HCI Event: 0x0e plen 4
01 08 20 12
Обратите внимание, что я не могу использовать рекомендованную командуhciconfig hci0 leadv 0
потому что это выдаст ошибкуWarning: unknown command - "0"
.
Тем не менее, когда я пытаюсь прочитать (например, сhcidump --raw
) полезная нагрузка в рекламируемом пакете с другого устройства, я получаю вывод, подобный этому:
hcitool lescan -- duplicates
выходной фрагмент (обе записи повторяются снова и снова, глядя на MAC, хотя это должно быть одно и то же устройство):
00:1A:7D:DA:71:14 mint17-0
00:1A:7D:DA:71:14 (unknown)
согласованиеhcidump --raw
выходной фрагмент:
> 04 3E 16 02 01 04 00 14 71 DA 7D 1A 00 0A 09 09 6D 69 6E 74 31 37 2D 30 BE
> 04 3E 12 02 01 00 00 14 71 DA 7D 1A 00 06 02 01 02 02 0A 08 AD
Я использую ключи Bluez 5.26 и CSR4.0.
Этоhciconfig
Вывод рекламодателя:
hci0: Type: BR/EDR Bus: USB
BD Address: 00:1A:7D:DA:71:14 ACL MTU: 310:10 SCO MTU: 64:8
UP RUNNING PSCAN ISCAN
RX bytes:1242 acl:0 sco:0 events:77 errors:0
TX bytes:2079 acl:0 sco:0 commands:77 errors:0
И этоhciconfig
вывод из «сканера»:
hci0: Type: BR/EDR Bus: USB
BD Address: 00:1A:7D:DA:71:13 ACL MTU: 310:10 SCO MTU: 64:8
UP RUNNING PSCAN ISCAN
RX bytes:11753 acl:0 sco:0 events:552 errors:0
TX bytes:1842 acl:0 sco:0 commands:75 errors:0
Что я упустил, чтобы заставить его работать?
Обновить:
Следуя совету Дэвида, я изменил значения cmd на
hcitool -i hci0 cmd 0x08 0x0008 10 0,2 01 1a 0c ff 18 01 48 45 4c 4c 4f 57 4f 52 4c 44
получать этот вывод
< HCI Command: ogf 0x08, ocf 0x0008, plen 18
10 02 01 1A 0C FF 18 01 48 45 4C 4C 4F 57 4F 52 4C 44
> HCI Event: 0x0e plen 4
01 08 20 12
но все еще бредовые полезные нагрузки (часть полезной нагрузкиhcidump --raw
выход)
af:08:0a:02:02:01:02
b7:08:0a:02:02:01:02
be:08:0a:02:02:01:02
...
Обновление 2:
Следуя следующему совету, я попытался добавить 00 к полезной нагрузке:
< HCI Command: ogf 0x08, ocf 0x0008, plen 42
10 02 01 1A 0C FF 18 01 48 45 4C 4C 4F 57 4F 52 4C 44 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00
> HCI Event: 0x0e plen 4
01 08 20 12
И здесьhcidump --raw output
> 04 3E 16 02 01 04 00 14 71 DA 7D 1A 00 0A 09 09 6D 69 6E 74
31 37 2D 30 BF
> 04 3E 12 02 01 00 00 14 71 DA 7D 1A 00 06 02 01 02 02 0A 08
AC
> 04 3E 12 02 01 00 00 14 71 DA 7D 1A 00 06 02 01 02 02 0A 08
BF
> 04 3E 16 02 01 04 00 14 71 DA 7D 1A 00 0A 09 09 6D 69 6E 74
31 37 2D 30 BF
> 04 3E 12 02 01 00 00 14 71 DA 7D 1A 00 06 02 01 02 02 0A 08
AD
Так что до сих пор нет радости.
Имеет ли смысл попробовать другую (возможно, более старую) версию bluez? Или это может быть связано с аппаратным обеспечением, и я должен попытаться получить различные ключи Bluetooth?
Обновление 3:
Пробовал то же самое с bluez 5.21, который работает для David.
Вот фрагментhcidump --raw
выход
> 04 3E 0C 02 01 04 00 14 71 DA 7D 1A 00 00 D7
> 04 3E 22 02 01 00 00 14 71 DA 7D 1A 00 16 02 01 0A 02 0A 08
0F 09 72 73 73 6D 74 2D 63 6C 69 65 6E 74 2D 30 D4
> 04 3E 0C 02 01 04 00 14 71 DA 7D 1A 00 00 D4
> 04 3E 22 02 01 00 00 14 71 DA 7D 1A 00 16 02 01 0A 02 0A 08
0F 09 72 73 73 6D 74 2D 63 6C 69 65 6E 74 2D 30 D2
Имя хоста изменилось (до сих пор тестировалось на третьей машине), поэтому вывод немного отличается, но я до сих пор нигде не вижу «Hello World».
На данный момент любые идеи приветствуются!
Обновление 4:
Пробовал другой аппаратный ключ (IOGEAR GBU521W6 в соответствии с предложением Дэвида) и это выглядит очень многообещающе сейчас!
При использовании этого рекламного конфига:
hcitool -i hci0 cmd 0x08 0x0008 10 02 01 1a 0c ff 18 01 48 45 4c 4c 4f 57 4f 52 4c 44
Я понялhcidump --raw
выход:
> 04 3E 1C 02 01 00 00 BA D0 63 70 F3 5C 10 02 01 1A 0C FF 18 01 48 45 4C 4C 4F 57 4F 52 4C B5
Как видите, полезная нагрузка почти завершена, но последний символ отсутствует. Изменяя атрибут длины на 11, я получаю полную полезную нагрузку:
hcitool -i hci0 cmd 0x08 0x0008 11 02 01 1a 0c ff 18 01 48 45 4c 4c 4f 57 4f 52 4c 44
----
> 04 3E 1D 02 01 00 00 BA D0 63 70 F3 5C 11 02 01 1A 0C FF 18 01 48 45 4C 4C 4F 57 4F 52 4C 44 AB
Так что для будущего (и других полезных нагрузок): требуемая длина представляется байтами полезной нагрузки (без атрибута длины) - 17 в данном случае.
Важный: Не работает сbluez 5.26
для меня я используюbluez 5.21
сейчас.