使用 kura 框架,如何在连接到 BLE 设备时将地址类型指定为 "random static"

Using kura framework, how can I specify the address type to "random static" when connecting to a BLE device

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

为此,我使用了由 eurotech 提供的名为 Everyware™ Software Framework (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:恭喜你坚持到了最后!

哈哈哈哈哈。 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。不幸的是,Kura 开发人员似乎没有注意到 BLE 标准中有一个叫做随机地址的东西,我不知道如何使用当前的 API.

解决这个问题

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

Dear Mr. Carneiro,

[...]

Regarding the random BD_ADDR, this is a configuration of the BLE device. So, your BLE device is advertising an address of type random, not public, and you should specify the address type on the connection string, as you already did. Unfortunately, current Kura Bluetooth API doesn't provide a way to specify the type of address into the connection string. We are developing a new set of APIs for BLE that will be available on preview on the next Kura/ESF release, but the Reliagate 10-05 will not support these yet.