2015-02-01 2 views
5

Я попытался выполнить шаги, предоставленные davidgyoung в this question. Вот команды, которые я использую:Неправильная полезная нагрузка при использовании блока 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 выход advertisier:

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 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 
... 

Update 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-ключи?

Update 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 

Имя хоста изменилось (проверено на третьей машине до сих пор), поэтому выход немного отличается, но я до сих пор не вижу «привет мир» в любом месте.

В этот момент любые идеи более чем приветствуются!

Update 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.

ответ

4

два вопроса:

Во-первых, для того, чтобы получить Bluez рекламировать, последовательность байтов вы поставляете должны включать правильный заголовок BLE рекламы, который является не менее 8 байт. Таким образом, чтобы рекламировать "HelloWorld" Вы на самом деле нужно отправить:

SUDO hcitool -i hci0 CMD 0x08 0x0008 10 02 01 1a 0с Ф.Ф. 18 01 48 45 4c 4c 4f 57 4f 52 4с 44

Первые 8 байт являются заголовком, а следующие 10 байтов - это строка «helloworld», закодированная как 8-разрядная ASCII.

Первые 8 байт можно разбить так:

10 # Total length of the advertising packet 
02 # Number of bytes that follow in first AD structure 
01 # Flags AD type 
1A # Flags value 0x1A = 000011010 
    bit 0 (OFF) LE Limited Discoverable Mode 
    bit 1 (ON) LE General Discoverable Mode 
    bit 2 (OFF) BR/EDR Not Supported 
    bit 3 (ON) Simultaneous LE and BR/EDR to Same Device Capable (controller) 
    bit 4 (ON) Simultaneous LE and BR/EDR to Same Device Capable (Host) 
0C# Number of bytes that follow in second (and last) AD structure 
FF # Manufacturer specific data AD type 
18 01 # Company identifier code (0x0118 == Radius Networks) 

Обратите внимание, что этот заголовок содержит два различных поля длины, которые необходимо скорректировать, если изменить длину «HelloWorld» полезной нагрузки. Кроме того, для экспериментов вы можете использовать любые два байта для требуемого идентификатора компании.

Во-вторых, вы не можете видеть необработанные байты обнаруженного объявления командой hcitool lescan. Чтобы просмотреть необработанные байты, вы должны использовать эту команду в сочетании с командой hcidump. См. Здесь для деталей: https://stackoverflow.com/a/21790504/1461050

+0

спасибо, имеет смысл, но все еще не получает то, что я хочу отправить (см. Обновленный вопрос). – marce

+0

См. Мой обновленный ответ с инструкциями о том, как видеть необработанные байты при сканировании. – davidgyoung

+0

Я уже использую 'hcidump -raw' (просто лишенный информации о не-полезной нагрузке в обновлении OP, должен был уточнить, что лучше). Я проверил связанный с вами вопрос, но кроме фильтрации, которую я считаю вторым шагом, когда я могу получить полезную нагрузку в любом месте, я не вижу другого шага, который я пропустил? – marce

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