Bluetooth RFCOMM-updates in web-serieel

François Beaufort
François Beaufort

De Web Serial API ondersteunt communicatie met RFCOMM-services op gekoppelde Bluetooth Classic-apparaten vanuit Chrome 117 op desktop. Hierdoor kunnen draadloze oordopjes bijvoorbeeld RFCOMM gebruiken om audio-instellingen en firmware-updates te beheren. Bekijk Serieel via Bluetooth op internet voor meer informatie.

Vanaf Chrome 130 voor desktop zorgt een verbetering van de Web Serial API ervoor dat webapps kunnen detecteren wanneer een Bluetooth RFCOMM seriële poort beschikbaar is, zonder dat u de poort hoeft te openen. Dit voorkomt onnodige herverbindingen wanneer het draadloze apparaat opzettelijk werd losgekoppeld.

Wanneer een draadloos apparaat buiten het bereik van de host komt, wordt elke draadloze seriële poort die door een webapp wordt geopend automatisch gesloten. In dergelijke gevallen kan de web-app proberen de poort opnieuw te openen met de SerialPort open() -methode. Als het draadloze apparaat echter opzettelijk is losgekoppeld (bijvoorbeeld door de gebruiker via het bedieningspaneel van het besturingssysteem), mag de webapp de poort niet opnieuw openen om te voorkomen dat er opnieuw verbinding wordt gemaakt met het draadloze apparaat.

Door de logische verbindingsstatus van het draadloze apparaat dat de draadloze seriële poort host bloot te leggen via een nieuw boolean SerialPort connected attribuut, kunnen webapps deze gevallen nu onderscheiden en alleen opnieuw verbinding maken als de verbinding onbedoeld was.

Het kenmerk SerialPort connected geldt voor draadloze seriële poorten als het draadloze apparaat dat de poort host actieve verbindingen met het systeem heeft. Voor bekabelde seriële poorten geldt dit als de poort fysiek op het systeem is aangesloten.

In het volgende fragment ziet u hoe u kunt controleren welke apparaten beschikbaar zijn en er mogelijk automatisch verbinding mee kunnen maken.

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

Voorheen werden alleen bekabelde seriële poorten verbindings- en verbindingsgebeurtenissen verzonden. Seriële Bluetooth RFCOMM-poorten verzenden deze gebeurtenissen nu wanneer de poort logisch wordt aangesloten of losgekoppeld.

Demo

Seriële poort aangesloten demo.

Bronnen

Dankbetuigingen

Met dank aan Jack Hsieh en Reilly Grant voor hun recensies.