Aggiornamenti RFCOMM Bluetooth in Web Serial

François Beaufort
François Beaufort

L'API Web Serial supporta la comunicazione con i servizi RFCOMM sui dispositivi Bluetooth Classic associati da Chrome 117 su computer. Ad esempio, ciò consente agli auricolari wireless di utilizzare RFCOMM per gestire le impostazioni audio e gli aggiornamenti del firmware. Per saperne di più, consulta la pagina Serial over Bluetooth on the web.

A partire da Chrome 130 per computer, un miglioramento dell'API Web Serial consente alle app web di rilevare quando è disponibile una porta seriale Bluetooth RFCOMM, senza doverla aprire. In questo modo si evitano riconnessioni non necessarie quando il dispositivo wireless è stato intenzionalmente disconnesso.

Quando un dispositivo wireless esce dalla portata dell'host, qualsiasi porta seriale wireless aperta da un'app web viene chiusa automaticamente. In questi casi, l'app web può tentare di riaprire la porta con il metodo SerialPort open(). Tuttavia, se il dispositivo wireless è stato intenzionalmente disconnesso (ad esempio, dall'utente dal pannello di controllo del sistema operativo), l'app web non deve riaprire la porta per evitare di riconnettersi al dispositivo wireless.

Grazie all'esposizione dello stato di connessione logica del dispositivo wireless che ospita la porta seriale wireless tramite un nuovo attributo booleano SerialPort connected, le app web possono ora distinguere questi casi e riconnettersi solo se la disconnessione non è stata intenzionale.

L'attributo SerialPort connected è true per le porte seriali wireless se il dispositivo wireless che ospita la porta ha connessioni attive al sistema. Per le porte seriali cablate, è true se la porta è collegata fisicamente al sistema.

Il seguente snippet mostra come verificare quali dispositivi sono disponibili e come connetterti automaticamente a questi dispositivi.

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

In precedenza, solo le porte seriali cablate inviavano eventi di connessione e disconnessione. Le porte seriali Bluetooth RFCOMM ora inviano questi eventi quando la porta viene connessa o disconnessa logicamente.

Demo

Demo di SerialPort connected.

Risorse

Riconoscimenti

Grazie a Jack Hsieh e Reilly Grant per le loro recensioni.