2015-08-14 80 views
3

我想用藍牙低功耗設備在Bluez上啓動配對。 雖然有一些關於如何使用GATT觸發SMP程序的文章,但如果您不想使用GATT,則沒有多少可用的內容。如何在BlueZ上啓動BLE配對

我的使用案例是我想使用一個加密的鏈接bluetooth-6lowpan通過L2CAP信用模式而不是ATT/GATT交換數據。

此外,我想使用OOB模式進行SMP配對。

指導我如何觸發SMP配對使用命令行或編寫一個C程序,讚賞。

謝謝!

+0

你的問題太廣泛了。更具體的問題會有所幫助。如果你想從命令行配對,你可以使用'bluetoothctl'工具。如果要以編程方式配對,請使用bluez [DBUS設備API](https://github.com/r10r/bluez/blob/master/doc/device-api.txt) – kaylum

+0

謝謝Alan!我根據你的建議編輯了我的問題! bluetoothctl實用程序似乎在我的平臺上不可用(Ubunut和R Pi)。我有藍牙代理來觸發配對,但我不知道如何設置像OOB數據這樣的配對參數。歡迎所有的投入! –

回答

5

我不認爲有可能不使用GATT命令(僅從命令行)執行BLE配對。原因是LE中的安全性是基於GATT行爲的。換句話說,特徵/服務許可決定你是否需要與設備配對(即讀取心率特徵,設備可能決定你需要先配對)。對此,操作如下所示:

gatttool --sec-level=high --device=00:11:22:33:44:55:66 --char-read --uuid=0x2A37 

該命令將在讀取特性前先建立配對。至於如何使用C程序來執行此操作,您可以下載BlueZ源代碼並查看通過此「sec-level」選項的功能。我迅速通過代碼瀏覽,發現這個在utils.c: -

  chan = bt_io_connect(connect_cb, NULL, NULL, &tmp_err, 
      BT_IO_OPT_SOURCE_BDADDR, &sba, 
      BT_IO_OPT_SOURCE_TYPE, BDADDR_LE_PUBLIC, 
      BT_IO_OPT_DEST_BDADDR, &dba, 
      BT_IO_OPT_DEST_TYPE, dest_type, 
      BT_IO_OPT_CID, ATT_CID, 
      BT_IO_OPT_SEC_LEVEL, sec, 
      BT_IO_OPT_INVALID); 

其中秒設置與秒= BT_IO_SEC_HIGH;

我希望這會有所幫助。