Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bluetooth 使用hcitool设置ad数据包_Bluetooth_Bluetooth Lowenergy_Ibeacon_Bluez_Hci - Fatal编程技术网

Bluetooth 使用hcitool设置ad数据包

Bluetooth 使用hcitool设置ad数据包,bluetooth,bluetooth-lowenergy,ibeacon,bluez,hci,Bluetooth,Bluetooth Lowenergy,Ibeacon,Bluez,Hci,有一篇关于如何将usb bluetooth 4加密狗设置为iBeacon的著名博客文章。它可以归结为一个神奇的命令: 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 这个例子的问题是它太不透明了,很难用任何更

有一篇关于如何将usb bluetooth 4加密狗设置为iBeacon的著名博客文章。它可以归结为一个神奇的命令:

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
向hci0设备发送hci命令

0x08 0x0008 
设置广告包只是一种魔术,其他stackoverflow命令都说“使用它,不要问

1e
以下整个数据包的长度(以字节为单位)

02 01 1a 1a
是设置ad数据包的标志(请提供详细信息)

是对iBeacon信息进行编码的“公司特定数据”

我试图用操作码替换“FF…”字节,以设置名称参数“04 09 41 42 43”(应将其设置为ABC),但这不起作用

我很惊讶hcitool没有给我们提供一些关于如何设置ad包的示例,因为这在设置各种其他参数(如TEMP或POWER)时非常有用。其他人是否有使用hcitool设置名称等内容的经验?

请查看类似问题。它基本上描述了如何下载巨人文档,并通读它提供给您的所有命令。如果您能找到正确的格式,您可以使用hcitool命令执行这些命令中的任何一个(并找出这些命令的实际作用!)

主要警告:我没有尝试自己设置名称,但是浏览一下规范,它看起来像是在规范第482页的“7.3.11编写本地名称命令”一节中描述的。根据这一点,该命令包括:

OCF: 0x0013
Name (up to 248 bytes)
所以我会尝试这样的命令:

hcitool-i hci0 cmd 0x08 0x0013 41 42 43

另一个提示:当您发出这样的命令时,请尝试运行
hcidump&
,以便在后台执行该命令。然后,您可以输入实验性
hcitool
命令(甚至
hciconfig
命令),并查看有关执行了哪些(人类可读)命令以及发生了哪些错误(如果有)的注释详细信息


使用上述技巧,您还可以在后台执行
hcidump&
时,尝试执行
hciconfig name abc
以使用该命令行工具设置本地名称。这应该会显示要使用的正确hcitool命令值。

稍后回复,但有人可能会发现这很有用。我在查看时发现了它当我使用hcitool时,我会自己寻找解决方案

如果您使用
hcitool cmd--help
它将告诉您类似于
cmd…
。查看有助于了解OGF和OCF的0x08和0x0008。具体来说,第2卷,E部分,7.8

对于LE控制器命令,OGF代码定义为0x08

对于0x0008的OCF

广告数据长度,广告数据

因此,基本上,对于0x08 0x0008,您说您正在设置(在LE控制器中)发送的数据的长度,您需要发送整个31个字节。因此,如果您只有ABC作为名称,则设置
04 09 41 42 43
是正确的,但这仅为5个字节。对于31,您需要添加
00
26次。注意不要添加太多或太少


另外,我并不认为BLE ad.数据包具有固定的31字节大小,但它们至少适用于hcitool。当您专门将传出大小设置为小于
1E

否时,它不起作用。这些答案都不正确且干净。

1) LE有一个单独的命令集。必须使用“LE设置广告数据”命令(见7.8.7第2卷E部分)。

2) LE Set广告数据比上面解释的要复杂得多。至少有2个1-octet长度字段,数据包长度必须为32字节,零填充,但第一个长度字节不得为0x1e(31),而是有效使用部分的长度,包含一个或多个头。每个头仍然包含一个长度,一个作为类型字节(0x09表示设置本地名称)和名称。

设置本地名称:

hciconfig hci0 down
hciconfig hci0 up
hcitool -i hci0 cmd 0x08 0x0008 0c 0b 09 6c 69 6e 6b 6d 6f 74 69 6f 6e 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
hciconfig hci0 leadv 0
0x0c:以下标题组的长度 0x0b:此标头的长度 0x09:完整名称的广告类型
rest 0x0a length是名称

看起来您需要使用两个命令而不是一个。iBeacon数据包含在“LE Set Advertising data”数据中,并在本文的其他地方提到过。要查看BLE友好名称,您可以使用另一个命令“LE Set Scan Response data”,这要求接收器扫描您的设备(而不是被动地阅读广告包)。因此,您可以结合Angelo的示例,将设备设置为iBeacon,并设置“友好名称”,即扫描响应数据

sudo hcitool -i hci0 cmd 0x08 0x0008 1E 02 01 1A 1A FF 4C 00 02 15 E2 0A 39 F4 73 F5 4B C4 A1 2F 17 D1 AD 07 A9 61 00 00 00 00 C8 00
sudo hcitool -i hci0 cmd 0x08 0x0009 0c 0b 09 6c 69 6e 6b 6d 6f 74 69 6f 6e 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

这对我来说是有效的,使用一个带有BLE加密狗的Ubuntu盒,然后使用这个扫描应用程序扫描信标

最终传输的广告包有效载荷以“02 01 1a”序列开始“因此,您试图更改的内容在有效负载内,因此更改不会导致不同的命令,而只会导致错误的传输。谢谢David,我尝试了一下,但我得到了回复“发送失败:不允许操作”。我的猜测是BT3和BT4命令之间存在差异。例如,它不能达到248字节,因为广告数据包只有28字节的可用空间,因此这里存在明显的断开连接。嗯,我认为本地名称不会在广告数据包中发送,因此其长度限制不应适用。响应“发送失败:不允许操作“可能表示用于执行命令的Linux用户没有写入BLE设备的权限。请尝试
sudo hcitool-i hci0 cmd 0x08 0x0013 41 42 43
这似乎位于当前4.0规范文件的站点828上。不过,据我所知,这不是LE名称,而是BD/EDR名称,也称为bluetooth
sudo hcitool -i hci0 cmd 0x08 0x0008 1E 02 01 1A 1A FF 4C 00 02 15 E2 0A 39 F4 73 F5 4B C4 A1 2F 17 D1 AD 07 A9 61 00 00 00 00 C8 00
sudo hcitool -i hci0 cmd 0x08 0x0009 0c 0b 09 6c 69 6e 6b 6d 6f 74 69 6f 6e 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00