2016-03-08 203 views
3

我正在尝试在我的Linux计算机上创建蓝牙低功耗外设(目标是通过蓝牙从iPhone发送数据)。我目前使用工具hciconfig,hcitoolhcidump使用HCITool广告蓝牙LE服务

我目前的实验是用一个特定的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
  • ×0008:设定命令HCI_LE_Set_Advertising_Data

  • 为0x15 :设置th中重要字节的长度e报头至21(3字节的标志分组,18字节用于服务结构)
  • 0×02:的标志结构的长度设置为2字节
  • 0×01:设置结构类别以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设置莱恩服务结构的GTH到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编写)

回答

3

HCI_LE_Set_Advertising_Data有效负载的长度应该恰好为32个字节。尝试零填充命令,达到32个字节:

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

你可以得到使用hcidump --raw. 比较原始命令的输出更深入的了解:

$hcidump --raw 
HCI sniffer - Bluetooth packet analyzer ver 5.30 
device: hci0 snap_len: 1500 filter: 0xffffffffffffffff 
< 01 08 20 16 15 02 01 1A 11 07 41 42 43 44 45 46 47 48 49 4A 
    4B 4C 4D 4E 4F 50 
> 04 0E 04 01 08 2 

与零填充一个:

HCI sniffer - Bluetooth packet analyzer ver 5.30 
device: hci0 snap_len: 1500 filter: 0xffffffffffffffff 
< 01 08 20 20 15 02 01 1A 11 07 41 42 43 44 45 46 47 48 49 4A 
    4B 4C 4D 4E 4F 50 00 00 00 00 00 00 00 00 00 00 
> 04 0E 04 01 08 20 00 

获得更多见解的另一种方法是运行hciconfig hci0 leadv并使用hcidump --raw来检查SET的有效负载通过hciconfig发送_ADVERTISING_PARAMETERS命令。

顺便说一下,我注意到有时候非零填充命令也可以使用,它可能取决于您使用的bluez版本。

+0

我向你的专业技能屈服。我曾尝试零填充,但我猜想当时还有其他错误。 – Joakim

+0

对于hcidump --raw部分,我使用的是-X,它以ascii和hex打印......会不会有使用raw的优势? – Joakim

+0

-X更好,我猜:) –