Web Bluetooth API Подключение нескольких устройств на одной веб-странице с одинаковым приоритетом событий

Я бы подключил несколько аппаратных устройств с BLE к одной веб-странице HTML / javascript. Я использовал Web Bluetooth API. Все работает нормально. Я могу подключить все устройства и прочитать характеристики каждого из них. Моя проблема в том, что у меня будет одинаковый приоритет для каждого устройства. Похоже, что последнее подключенное устройство получило более высокий приоритет, чем предыдущие с точки зрения опроса событий. Есть ли способ присвоить всем устройствам одинаковый приоритет?

Вот мой код для одного устройства. Все устройства предлагают одинаковые услуги и одинаковые характеристики.

 //for device 1
    function connect_device_1(){
       navigator.bluetooth.requestDevice({
       filters: [
       {services: myService},
       {name: myDeviceName},    
       ]       
    })
    .then(function(device) {
       return device.gatt.connect();
    })
    .then(function(server) {
       return server.getPrimaryService(myService);  
    })
    .then(function(service) {
       return service.getCharacteristics();
    })
    .then(function(characteristics) {
       sNots(characteristics);
    })
    .catch(function(error) {    
    console.error('Connection failed!', error);
    });  
    }

    async function sNots(characteristics) {
        try {
          characteristics[0].addEventListener('characteristicvaluechanged', handleData1);
          await  characteristics[0].startNotifications(); 
        } catch (e) {
          console.log("Characteristic error!");
        }
     }

     function handleData1(event) {
             //only one read out for cycle
     }

     //same as above for device 2
     //....
     function handleData2(event) {

     }
     //same as above for device 3
     //....
     function handleData3(event) {

     }
     //same as above for device 4
     //....
     function handleData4(event) {
          //For instance, if the device 4 is connected as the last one, this event is called more 
          //than all the others, while I would like to have same priority with all the others.
     }

person Enrico Alessi    schedule 02.06.2020    source источник
comment
У меня такая же проблема, вы когда-нибудь находили решение своей проблемы?   -  person Eddie Cheng    schedule 23.12.2020


Ответы (1)


Если ваши устройства передают много уведомлений, то это ожидаемое поведение, как планирование подключений BLE обычно реализуется внутри контроллера Bluetooth, когда у вас одинаковый интервал подключения для всех подключений.

См. пропускную способность Bluetooth 5 и BLE при нескольких подключениях и https://infocenter.nordicsemi.com/topic/sds_s132/SDS/s1xx/multilink_scheduling/central_connection_timing.html.

Вы мало что можете с этим поделать. Вы можете попробовать с периферийной стороны выбрать другие параметры подключения, чтобы избежать этой ситуации. Обычно вы можете намекнуть контроллеру, сколько времени требуется для событий соединения, когда вы инициируете соединение через HCI. Но ни Web Bluetooth, ни базовые стеки Bluetooth, используемые Web Bluetooth, не раскрывают этот параметр, оставляя его равным 0 (не указано).

person Emil    schedule 02.06.2020
comment
Спасибо за действительно быстрый ответ. Не могли бы вы сказать мне, буферизированы ли данные и, таким образом, задерживаются для отображения, или потеряны из-за конфликта временных интервалов радио? или оба? - person Enrico Alessi; 02.06.2020
comment
Канальный уровень Bluetooth Low Energy надежен. Это означает, что пакеты ставятся в очередь, и следующий пакет отправляется только после подтверждения предыдущего. Пакет будет отправлен повторно, если он не будет подтвержден. Два устройства обмениваются данными только при определенных событиях подключения, которые происходят один раз за каждый интервал подключения. Пакеты обмениваются назад и вперед при каждом событии соединения, пока планировщику не потребуется сделать что-то еще (например, запустить событие соединения для другого соединения или следующее событие соединения для текущего соединения). Вы можете прочитать спецификацию Link Layer, если вам нужна дополнительная информация. - person Emil; 02.06.2020