Обновления Bluetooth RFCOMM в веб-последовательном интерфейсе

Франсуа Бофор
François Beaufort

API Web Serial поддерживает взаимодействие со службами RFCOMM на сопряженных устройствах Bluetooth Classic из Chrome 117 на настольных компьютерах. Например, это позволяет беспроводным наушникам использовать RFCOMM для управления настройками звука и обновлениями прошивки. Подробнее можно узнать в статье «Serial over Bluetooth» в веб-браузере .

Начиная с версии Chrome 130 для настольных компьютеров, улучшенный Web Serial API позволяет веб-приложениям определять доступность последовательного порта Bluetooth RFCOMM без необходимости его открытия. Это предотвращает ненужные переподключения в случае преднамеренного отключения беспроводного устройства.

Когда беспроводное устройство выходит из зоны действия хоста, любой беспроводной последовательный порт, открытый веб-приложением, автоматически закрывается. В таких случаях веб-приложение может попытаться повторно открыть порт с помощью метода SerialPort open() . Однако, если беспроводное устройство было преднамеренно отключено (например, пользователем через панель управления операционной системы), веб-приложение должно воздержаться от повторного открытия порта, чтобы предотвратить повторное подключение к беспроводному устройству.

Благодаря отображению логического состояния подключения беспроводного устройства, использующего беспроводной последовательный порт, с помощью нового логического атрибута SerialPort connected , веб-приложения теперь могут различать эти случаи и переподключаться только в том случае, если разрыв соединения был непреднамеренным.

Атрибут SerialPort connected имеет значение true для беспроводных последовательных портов, если беспроводное устройство, использующее этот порт, имеет какие-либо активные соединения с системой. Для проводных последовательных портов он имеет значение true, если порт физически подключен к системе.

Следующий фрагмент кода показывает, как проверить, какие устройства доступны, и, возможно, подключиться к ним автоматически.

const ports = await navigator.serial.getPorts();
for (const port of ports) {
  if (port.connected) {
    // Automatically try to connect to the Bluetooth device.
    await port.open({ baudRate: 9600 });
  } else {
    // Otherwise, when the port is not logically connected:
    // 1. Prompt the user to make sure the Bluetooth device is available.
    // 2. Show a "connect" button to try opening the port.
  }
}

Ранее события подключения и отключения передавались только проводными последовательными портами. Теперь же последовательные порты Bluetooth RFCOMM передают эти события, когда порт логически подключается или отключается.

Демо

Демонстрация подключения через последовательный порт.

Ресурсы

Благодарности

Благодарим Джека Ше и Рейли Гранта за их отзывы.