Я попытался выполнить шаги, предоставленные davidgyoung в этом вопросе. Вот команды, которые я использую:
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
Что я пропустил, чтобы заставить его работать?
Update:
Следуя совету Дэвида, я изменил значения cmd на
hcitool -i hci0 cmd 0x08 0x0008 10 02 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, который работает для Дэвида.
Здесь фрагмент вывода 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
Как вы видите, полезная нагрузка почти завершена, но последний char отсутствует. Изменяя атрибут length на 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
.