我不认为有可能不使用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数据这样的配对参数。欢迎所有的投入! –