Aktualizacje Bluetooth RFCOMM w Web Serial

François Beaufort
François Beaufort

Interfejs Web Serial API obsługuje komunikację z usługami RFCOMM na sparowanych urządzeniach klasyczny Bluetooth w Chrome 117 na komputerze. Dzięki temu np. bezprzewodowe słuchawki douszne mogą używać RFCOMM do zarządzania ustawieniami dźwięku i aktualizacjami oprogramowania układowego. Więcej informacji znajdziesz w artykule Serial over Bluetooth on the web.

W Chrome 130 na komputerze ulepszenie interfejsu Web Serial API umożliwia aplikacjom internetowym wykrywanie, kiedy dostępny jest port szeregowy Bluetooth RFCOMM, bez konieczności otwierania portu. Zapobiega to niepotrzebnym ponownym połączeniom, gdy urządzenie bezprzewodowe zostało celowo odłączone.

Gdy urządzenie bezprzewodowe znajdzie się poza zasięgiem hosta, każdy port szeregowy bezprzewodowy otwarty przez aplikację internetową zostanie automatycznie zamknięty. W takich przypadkach aplikacja internetowa może próbować ponownie otworzyć port za pomocą metody SerialPort open(). Jeśli jednak urządzenie bezprzewodowe zostało celowo odłączone (np. przez użytkownika w panelu sterowania systemu operacyjnego), aplikacja internetowa nie powinna ponownie otwierać portu, aby zapobiec ponownemu połączeniu z urządzeniem bezprzewodowym.

Dzięki udostępnieniu logicznego stanu połączenia urządzenia bezprzewodowego, które hostuje port szeregowy bezprzewodowy, za pomocą nowego atrybutu logicznego SerialPort connected aplikacje internetowe mogą teraz odróżniać te przypadki i ponownie łączyć się tylko wtedy, gdy odłączenie było niezamierzone.

Atrybut SerialPort connected ma wartość true w przypadku portów szeregowych bezprzewodowych, jeśli urządzenie bezprzewodowe, które hostuje port, ma aktywne połączenia z systemem. W przypadku przewodowych portów szeregowych ma wartość true, jeśli port jest fizycznie podłączony do systemu.

Poniższy fragment kodu pokazuje, jak sprawdzić, które urządzenia są dostępne, i ewentualnie połączyć się z nimi automatycznie.

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.
  }
}

Wcześniej tylko przewodowe porty szeregowe wysyłały zdarzenia connect i disconnect. Porty szeregowe Bluetooth RFCOMM wysyłają teraz te zdarzenia, gdy port zostanie logicznie połączony lub odłączony.

Prezentacja

Prezentacja SerialPort connected.

Zasoby

Podziękowania

Dziękujemy Jackowi Hsieh i Reilly Grantowi za ich opinie.