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 desktops. Hierdoor kunnen draadloze oordopjes bijvoorbeeld RFCOMM gebruiken om audio-instellingen te beheren en firmware-updates uit te voeren. Bekijk de documentatie over Serial over Bluetooth op het web voor meer informatie.

Vanaf Chrome 130 voor desktop is de Web Serial API verbeterd, waardoor webapps kunnen detecteren wanneer een Bluetooth RFCOMM seriële poort beschikbaar is, zonder de poort te hoeven openen. Dit voorkomt onnodige herverbindingen wanneer het draadloze apparaat opzettelijk is losgekoppeld.

Wanneer een draadloos apparaat buiten het bereik van de host komt, wordt elke draadloze seriële poort die door een webapplicatie is geopend, automatisch gesloten. In dergelijke gevallen kan de webapplicatie proberen de poort opnieuw te openen met de methode SerialPort open() . Als het draadloze apparaat echter opzettelijk is losgekoppeld (bijvoorbeeld door de gebruiker via het configuratiescherm van het besturingssysteem), moet de webapplicatie afzien van het opnieuw openen van de poort 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, weer te geven via een nieuw boolean-attribuut `SerialPort connected , kunnen webapplicaties nu onderscheid maken tussen deze gevallen en alleen opnieuw verbinding maken als de onderbreking onbedoeld was.

Het attribuut SerialPort connected is waar voor draadloze seriële poorten als het draadloze apparaat waarop de poort is aangesloten actieve verbindingen met het systeem heeft. Voor bekabelde seriële poorten is het waar als de poort fysiek op het systeem is aangesloten.

Het volgende codefragment laat zien hoe u kunt controleren welke apparaten beschikbaar zijn en er eventueel automatisch verbinding mee kunt 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 verstuurden alleen bekabelde seriële poorten verbindings- en ontkoppelingsgebeurtenissen . Bluetooth RFCOMM seriële poorten versturen deze gebeurtenissen nu wanneer de poort logisch verbonden of ontkoppeld raakt.

Demo

Demonstratie van een verbinding via seriële poort.

Bronnen

Dankbetuigingen

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