我正在尝试创建要安装在eurotech网关(关联10 05)上的OSGi捆绑包。
该捆绑包实际上会将网关连接到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 Command Field(ocf)相关的OpCode组字段(ogf)(我略过了Bluetooth 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解决该问题。
关于java - 使用kura框架,连接到BLE设备时如何将地址类型指定为“随机静态”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46347573/