2015-08-14 57 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;

我希望这会有所帮助。