我不認爲有可能不使用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;
我希望這會有所幫助。
你的問題太廣泛了。更具體的問題會有所幫助。如果你想從命令行配對,你可以使用'bluetoothctl'工具。如果要以編程方式配對,請使用bluez [DBUS設備API](https://github.com/r10r/bluez/blob/master/doc/device-api.txt) – kaylum
謝謝Alan!我根據你的建議編輯了我的問題! bluetoothctl實用程序似乎在我的平臺上不可用(Ubunut和R Pi)。我有藍牙代理來觸發配對,但我不知道如何設置像OOB數據這樣的配對參數。歡迎所有的投入! –