如何在BlueZ上启动BLE配对

3
我想在Bluez上与蓝牙低功耗设备进行配对。 虽然有一些帖子介绍如何使用GATT触发SMP过程,但如果您不想使用GATT,则可用性不高。
我的用例是我想为通过L2CAP基于信用的模式交换数据的蓝牙6lowpan使用加密链接,而不是ATT / GATT。
此外,我想使用OOB模式进行SMP配对。
非常感谢提供如何使用命令行或编写C程序触发SMP配对的指针。
谢谢!

你的问题太过笼统,更具体的问题会更有帮助。如果你想从命令行进行配对,可以使用 bluetoothctl 实用程序。如果你想以编程方式进行配对,则使用 bluez DBUS 设备 API - kaylum
谢谢Alan!我已根据您的建议编辑了我的问题!在我的平台(Ubunut和R Pi)上似乎无法使用bluetoothctl实用程序。我使用bluetooth-agent触发配对,但我无法弄清楚如何设置配对参数,例如OOB数据。欢迎提供任何输入! - Krishna Shingala
1个回答

7

我认为在不使用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);

其中sec是用sec = BT_IO_SEC_HIGH;设置的。

希望这可以帮到您。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接