15

关于如何将 USB 蓝牙 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

是设置广告包的标志(详情请咨询)

ff 4c 00 ...

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

我尝试做的是将“FF ...”字节替换为用于设置 NAME 参数“04 09 41 42 43”(应该将其设置为 ABC)的操作码,但这不起作用。

我很惊讶 hcitool 没有给我们一些关于如何设置广告包的示例,因为这在设置各种其他参数(如 TEMP 或 POWER)时非常有用。有没有其他人有过使用 hcitool 来设置 NAME 之类的东西的经验?

4

4 回答 4

7

迟到的回复,但有人可能会觉得这很有用。我在使用 hcitool 时自己四处寻找解决方案时发现了它。

如果你使用hcitool cmd --help它会告诉你这样的事情cmd <ogf> <ocf> ...。查看蓝牙核心规范有助于了解 OGF 和 OCF 的 0x08 和 0x0008 是什么。特别卷。2,E 部分,7.8

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

对于 0x0008 的 OCF

Advertising_Data_Length, Advertising_Data

所以基本上,用 0x08 0x0008 你说你正在设置(在 LE 控制器中)发送的数据的长度。至于名字,由于BLE广播包的长度是31字节(1E),所以需要发送整个31字节。所以如果你只有ABC作为名字,设置04 09 41 42 43是正确的,但只有五个字节。对于 31,您需要添加0026 次。请注意不要添加太多或太少。

另外,我对 BLE 广告没有印象。数据包的大小固定为 31 字节,但至少适用于 hcitool。当您将传出大小专门设置为小于1E.

于 2014-12-17T20:13:31.863 回答
5

不,这些答案都不是正确和干净的。

1) BLE 有一个单独的命令集。必须使用“LE Set Advertising Data”命令(参见 7.8.7 vol 2 part E)。

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

设置 LE 本地名称:

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:完整名称的 AD 类型其余 0x0a 长度是名称

于 2015-05-05T12:36:03.057 回答
4

查看类似问题的答案。它基本上描述了如何下载巨大的蓝牙核心规范文档,并阅读它为您提供的所有命令。如果您能找出正确的格式(并弄清楚这些命令的实际作用!),您可以使用 hcitool 命令执行这些命令中的任何一个

主要警告:我没有尝试自己设置名称,但看了一眼规范,看起来这在规范的第 482 页“7.3.11 写入本地名称命令”部分中有所描述。据此,命令包括:

OCF: 0x0013
Name (up to 248 bytes)

所以我会尝试这样的命令:

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

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

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

于 2014-05-06T00:55:07.717 回答
2

看来您需要使用两个命令而不是一个。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 盒子,然后使用这个android BLE扫描应用程序扫描信标

于 2016-03-11T19:08:29.210 回答