我认为在不使用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;设置的。
希望这可以帮到您。
bluetoothctl
实用程序。如果你想以编程方式进行配对,则使用 bluez DBUS 设备 API。 - kaylum