客户端配置特征描述符(CCCD)。

UUID-“ 00002902-0000-1000-8000-00805f9b34fb” /“ gatt.client_characteristic_configuration”。

在Android的Java代码中设置CCCD
我们的确是:

public static final byte[] ENABLE_NOTIFICATION_VALUE = {0x01, 0x00};

BluetoothGattDescriptor descriptor =    characteristic.getDescriptor("00002902-0000-1000-8000-00805f9b34fb");
descriptor.setValue(BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE);
mBluetoothGatt.writeDescriptor(descriptor);


使用Web Bluetooth API时,如何在JavaScript代码中执行类似的配置?

我的JavaScript版本:

.then(descriptors => {
let queue = Promise.resolve();
 descriptors.forEach(descriptor => {
        switch (descriptor.uuid) {
          case BluetoothUUID.getDescriptor('gatt.client_characteristic_configuration'):
           queue = queue.then(_ => descriptor.readValue()).then(value => {
              descriptorCache = descriptor;
            });
   ...

    var data = new Uint8Array([0x01, 0x00]);
    descriptorCache.writeValue(data);
    //descriptorCache.writeValue(new TextEncoder().encode(data));


失败并显示安全错误:-(

未捕获(承诺)的DOMException:在标记为排除写入的被列入黑名单的对象上调用writeValue()。
https://webbluetoothcg.github.io/web-bluetooth/#attacks-on-devices

我了解安全性的需求。
但是毕竟,许多设备都需要对CCCD进行预设。

最佳答案

调用characteristic.StartNotifications()为您设置CCCD。

09-25 21:34