使用kura框架,如何在连接到BLE设备时将地址类型指定为“随机静态”

时间:2017-09-21 15:15:35

标签: java eclipse osgi bluetooth-lowenergy kura

我正在尝试创建一个安装在eurotech网关上的OSGi包(reliagate 10 05)。 该捆绑包基本上将网关连接到BLE设备。

为此,我使用了由eurotech提供的名为 Everyware™软件框架(ESF)的框架,在 kura v1.2.0 之上添加了一个额外的图层。框架。

问题是,BLE设备只接受随机静态地址类型。

我设法使用控制台中的以下命令手动将网关连接到BLE设备:

hcitool -i hci0 lecc --random <BD_ADDR>

然后

gatttool -i hci0 -b <BD_ADDR> --interactive

这很好用。困难的部分是我尝试使用 ESF / kura 框架在代码中执行相同的操作。

以下是我在page

上找到的我使用的示例摘录
public boolean connect(String adapterName) {
    this.bluetoothGatt = this.device.getBluetoothGatt();
    boolean connected = false;
    try {
          connected = this.bluetoothGatt.connect(adapterName);
    } catch (KuraException e) {
          logger.error(e.toString());
    }
    if (connected) {
        this.bluetoothGatt.setBluetoothLeNotificationListener(this);
        this.isConnected = true;
        return true;
    } else {
       // If connect command is not executed, close gatttool
        this.bluetoothGatt.disconnect();
        this.isConnected = false;
        return false;
    }
}

以下是示例用于扫描和建立连接的一些对象的列表:

org.eclipse.kura.bluetooth.BluetoothAdapter;
org.eclipse.kura.bluetooth.BluetoothDevice;
org.eclipse.kura.bluetooth.BluetoothGattSecurityLevel;
org.eclipse.kura.bluetooth.BluetoothGattService;
org.eclipse.kura.bluetooth.BluetoothLeScanListener;
org.eclipse.kura.bluetooth.BluetoothService;
org.eclipse.kura.bluetooth.BluetoothDevice;
org.eclipse.kura.bluetooth.BluetoothGatt;
org.eclipse.kura.bluetooth.BluetoothGattCharacteristic;
org.eclipse.kura.bluetooth.BluetoothLeNotificationListener;

所以我搜索了api doc,但没有找到任何内容。

尽管如此,有一个有趣的SO post提到要发送到设备的命令代码。

我在kura框架中找到了一个可能有用的方法。 这是签名:

void ExecuteCmd(java.lang.String ogf, java.lang.String ocf, java.lang.String parameter)

但我无法找出任何文档中与OpCode命令字段(ocf)相关的OpCode组字段(ogf)(我浏览了蓝牙4.0核心规范的~2300页)。如果有人知道在哪里搜索......:)

最后,问题是:有没有办法用kura框架将地址类型设置为随机(与hcitool命令一样)? 还是我完全被误导了? :/

无论如何,我对kura和ble生态系统都很陌生,所以很抱歉,如果它看起来像是一件显而易见的事情,但我觉得我已经没有灵感了,可以完全用手了!

PS:恭喜你,如果你到最后!

2 个答案:

答案 0 :(得分:1)

哈哈大声笑。 Kura似乎只是启动一个gatttool进程,在文本中发送命令,并将输出解析为其接口......

这里是陈述的地方,使用地址作为参数:https://github.com/eclipse/kura/blob/0339ac787f90debdfc270c1dee0c16de16ea6f7e/kura/org.eclipse.kura.linux.bluetooth/src/main/java/org/eclipse/kura/linux/bluetooth/util/BluetoothUtil.java#L319。不幸的是,库拉开发人员似乎错过了BLE标准中有一个叫做随机地址的东西,我不知道如何使用当前的API来解决这个问题。

答案 1 :(得分:0)

好的,对于那些发现自己在未来的位置的人,我刚收到了Eurotech支持团队的答复。

  

亲爱的卡内罗先生,

     

[...]

     

关于随机BD_ADDR,这是BLE设备的配置。   因此,您的BLE设备正在宣传一个随机类型的地址,而不是公共地址,您应该在连接字符串上指定地址类型,就像您已经做的那样。   不幸的是,目前的Kura蓝牙API并没有提供一种在连接字符串中指定地址类型的方法。我们正在为BLE开发一套新的API,可以在下一个Kura / ESF版本上预览,但Reliagate 10-05还不支持这些。