Mises à jour Bluetooth RFCOMM dans WebSerial

François Beaufort
François Beaufort

L'API Web Serial permet de communiquer avec les services RFCOMM sur les appareils Bluetooth Classic associés à partir de Chrome 117 sur ordinateur. Par exemple, cela permet aux écouteurs sans fil d'utiliser RFCOMM pour gérer les paramètres audio et les mises à jour du micrologiciel. Pour en savoir plus, consultez Serial over Bluetooth on the web (Communication série sur Bluetooth sur le Web).

À partir de Chrome 130 pour ordinateur, une amélioration de l'API Web Serial permet aux applications Web de détecter quand un port série RFCOMM Bluetooth est disponible, sans avoir à l'ouvrir. Cela évite les reconnexions inutiles lorsque l'appareil sans fil a été déconnecté intentionnellement.

Lorsqu'un appareil sans fil sort de portée de l'hôte, tout port série sans fil ouvert par une application Web se ferme automatiquement. Dans ce cas, l'application Web peut tenter de rouvrir le port avec la méthode SerialPort open(). Toutefois, si l'appareil sans fil a été déconnecté intentionnellement (par exemple, par l'utilisateur depuis le panneau de configuration du système d'exploitation), l'application Web doit s'abstenir de rouvrir le port pour éviter de se reconnecter à l'appareil sans fil.

En exposant l'état de connexion logique de l'appareil sans fil hébergeant le port série sans fil via un nouvel attribut booléen SerialPort connected, les applications Web peuvent désormais distinguer ces cas et ne se reconnecter que si la déconnexion était involontaire.

L'attribut SerialPort connected est défini sur "true" pour les ports série sans fil si l'appareil sans fil qui héberge le port dispose de connexions actives au système. Pour les ports série filaires, cette valeur est "true" si le port est physiquement connecté au système.

L'extrait de code suivant montre comment vérifier les appareils disponibles et éventuellement s'y connecter automatiquement.

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

Auparavant, seuls les ports série filaires distribuaient les événements connect (connexion) et disconnect (déconnexion). Les ports série RFCOMM Bluetooth distribuent désormais ces événements lorsque le port est connecté ou déconnecté de manière logique.

Démo

Démonstration de la connexion SerialPort.

Ressources

Remerciements

Merci à Jack Hsieh et Reilly Grant pour leurs avis.