Используя фреймворк kura, как я могу указать тип адреса "случайный статический" при подключении к устройству BLE

Я пытаюсь создать пакет OSGi, который будет установлен на шлюз eurotech (reliagate 10 05). Этот пакет по существу соединит шлюз с устройством 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.

Вот фрагмент из примера, который я использую, который я нашел на этой странице

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;

Поэтому я искал через документацию, но ничего не нашел.

Тем не менее, один интересный пост SO упоминает код команды для отправки на устройство.

Я нашел метод в рамках Кура, который может помочь. Вот подпись:

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

но я не смог выяснить поле группы OpCode (ogf), связанное с полем команды OpCode (ocf), в какой-либо документации (я просмотрел ~2300 страниц спецификации ядра Bluetooth 4.0). Если кто знает, где искать...:)

В конце концов, возникает вопрос: есть ли способ установить тип адреса случайным (как с помощью команды hcitool) с помощью фреймворка kura? Или я полностью введен в заблуждение?:/

В любом случае, я действительно новичок в kura и ble экосистемах, так что, извините, если это кажется очевидным, но я чувствую, что у меня заканчивается вдохновение и я могу полностью использовать руку!

PS: Поздравляю, если вы сделали это до конца!

2 ответа

Решение

Хорошо, так что для тех, кто в будущем окажется на моем месте, я только что получил ответ от службы поддержки Eurotech.

Уважаемый г-н Карнейру,

[...]

Что касается случайного BD_ADDR, это конфигурация устройства BLE. Итак, ваше устройство BLE объявляет адрес произвольного типа, а не общедоступный, и вы должны указать тип адреса в строке подключения, как вы уже сделали. К сожалению, текущий API-интерфейс Bluetooth Kura не позволяет указать тип адреса в строке подключения. Мы разрабатываем новый набор API для BLE, который будет доступен для предварительного просмотра в следующем выпуске Kura/ESF, но Reliagate 10-05 пока не будет их поддерживать.

Хаха лол. Кажется, что 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.

Другие вопросы по тегам