2016-03-08 227 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更好,我猜:) –