BLE BluetoothGattDescriptor setValue проблема - PullRequest
0 голосов
/ 17 сентября 2018

У меня очень странное поведение, когда я пытаюсь установитьValue () для дескриптора.

Я пытаюсь установить значение типа int.

private void setDescriptor(int id) {
      BluetoothGattDescriptor descriptor = characteristic.getDescriptors().get(0);
            descriptor.setValue(BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE);
            byte[] data = new byte[1];
            data[0] = (byte) (id);
            descriptor.setValue(data);
            mBluetoothGatt.writeDescriptor(descriptor);
}

Если id = 8, onCharacteristicChanged() никогда не вызывается.

Если id = 9, все в порядке.

Я не могу придумать рационального объяснения такого поведения.

1 Ответ

0 голосов
/ 17 сентября 2018

Я думаю, это можно объяснить, если взглянуть на двоичное представление 8 и 9:

  • 8 = 0000 1000b
  • 9 = 0000 1001b

Чтобы включить уведомления, вы устанавливаете значение 0000 0001b в качестве 1-го байта и 0000 0000b в качестве 2-го байта.

На вашем периферийном устройстве BLE реализация может выглядеть следующим образом:

void isNotificationRequested(byte value) : boolean {
     return value & 0x01 > 0
}

Это верно, если вы передаете 9, но неправильно для 8.

Это может быть логичной причиной для вашего наблюдения, но я не уверен, так как не знаю периферийной реализации.

Тем не менее, если вы хотите включить уведомления BLE, просто используйте константы, определенные в BluetoothGattDescriptor классе:

private void setDescriptor() {
   BluetoothGattDescriptor descriptor = characteristic.getDescriptors().get(0);
   descriptor.setValue(BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE);       
   mBluetoothGatt.writeDescriptor(descriptor);
}

Я не уверен, какова цель переменной id?Ваш вопрос не предоставляет никакой дополнительной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...