我正在尝试在我的 Linux 计算机上创建一个低功耗蓝牙外围设备(目标是通过蓝牙从 iPhone 发送数据)。我目前正在使用工具hciconfig
,hcitool
和hcidump
。
我目前的实验是宣传具有特定 UUID 的服务,iOS CoreBluetooth 库将获取该服务。(注意:我不是要创建 iBeacon)。
现在,它实际上就像困扰我的一个单一命令一样简单。
hcitool -i hci0 cmd 0x08 0x0008 15 02 01 1a 11 07 41 42 43 44 45 46 47 48 49 4a 4b 4c 4d 4e 4f 50
我认为它应该做的是:
- 0x08:将组设置为 BLE
- 0x0008:将命令设置为 HCI_LE_Set_Advertising_Data
- 0x15:将Header中的有效字节长度设置为21。(标志包为3字节,服务结构为18字节)
- 0x02:将标志结构的长度设置为 2 字节
- 0x01:将结构类型设置为 AD 标志
0x1a:标志值:
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)
(标志结束)
- 0x11 设置服务结构长度为17字节
- 0x07 设置结构类型为128位完整服务UUID列表
- 0x41 ... 0x50 将测试服务的 UUID 设置为 ABCDEFGHIJKLMNOP
据我所见hcidump
,它执行正确并且看起来像我想要的那样。但它被错误拒绝:
LE Set Advertising Data (0x08|0x0008) ncmd 1
status 0x12
Error: Invalid HCI Command Parameters
我花了一整天的时间试图让它正确。有技术的人看到我做错了吗?这是宣传服务的正确方式吗?
(感兴趣的读者的上下文:我已经成功地完成了我想要使用 NodeJs 中的 Bleno 库做的事情。但是,这不适合我们系统的大局。直接使用 HCITool 进行广告只是为了实验,将编写稍后在 Python 中)