使用BlueZ堆栈作为外设时错误的负载

我试图在这个问题上遵循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 

请注意,我不能使用build议的命令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 

我错过了什么让它工作?

更新:
遵循David的build议,我将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:
接下来的build议,我试着给有效载荷添加一些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 

所以还是没有喜乐。
尝试一个不同的(也许更老的)蓝色版本会有道理吗? 还是可以硬件相关,我应该尝试获得不同的蓝牙适配器?

更新3:
试图与大卫的蓝色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 

主机名已经改变(迄今在第三台机器上testing过),所以输出有点不同,但我仍然没有看到任何地方的“你好世界”。

在这一点上,任何想法都是值得欢迎的!

更新4:
试了一个不同的硬件encryption狗( 大卫build议的IOGEAR GBU521W6 ),现在看起来很有希望!

当使用这个广告configuration时:

 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

Solutions Collecting From Web of "使用BlueZ堆栈作为外设时错误的负载"

两个问题:

首先,为了让BlueZ做广告,你提供的字节序列必须包含一个有效的BLE广播头 ,最少8个字节。 所以要宣传“helloworld”,你实际上需要发送:

sudo hcitool -i hci0 cmd 0x08 0x0008 10 02 01 1a 0c ff 18 01 48 45 4c 4c 4f 57 4f 52 4c 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