Actualizaciones de Bluetooth RFCOMM en Web Serial

François Beaufort
François Beaufort

La API de Web Serial admite la comunicación con los servicios de RFCOMM en dispositivos Bluetooth Classic vinculados a partir de Chrome 117 en computadoras de escritorio. Por ejemplo, esto permite que los auriculares inalámbricos usen RFCOMM para administrar la configuración de audio y las actualizaciones de firmware. Consulta Serial por Bluetooth en la Web para obtener más información.

A partir de Chrome 130 para computadoras, una mejora en la API de Web Serial permite que las apps web detecten cuando hay un puerto serie RFCOMM Bluetooth disponible, sin tener que abrirlo. Esto evita que se vuelvan a establecer conexiones innecesarias cuando el dispositivo inalámbrico se desconectó de forma intencional.

Cuando un dispositivo inalámbrico sale del alcance del host, se cierra automáticamente cualquier puerto serie inalámbrico que haya abierto una app web. En esos casos, la app web puede intentar volver a abrir el puerto con el método SerialPort open(). Sin embargo, si el dispositivo inalámbrico se desconectó de forma intencional (por ejemplo, si el usuario lo hizo desde el panel de control del sistema operativo), la app web no debe volver a abrir el puerto para evitar volver a conectarse al dispositivo inalámbrico.

Cuando se expone el estado de conexión lógico del dispositivo inalámbrico que aloja el puerto serie inalámbrico a través de un nuevo atributo booleano connected de SerialPort, las apps web ahora pueden distinguir estos casos y solo volver a conectarse si la desconexión no fue intencional.

El atributo SerialPort connected es verdadero para los puertos en serie inalámbricos si el dispositivo inalámbrico que aloja el puerto tiene alguna conexión activa con el sistema. En el caso de los puertos en serie con cable, es verdadero si el puerto está conectado físicamente al sistema.

En el siguiente fragmento, se muestra cómo comprobar qué dispositivos están disponibles y, potencialmente, conectarse a ellos automáticamente.

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

Anteriormente, solo los puertos serie con cable enviaban eventos de conexión y desconexión. Los puertos en serie RFCOMM de Bluetooth ahora envían estos eventos cuando el puerto se conecta o desconecta de forma lógica.

Demostración

Demostración de SerialPort conectado.

Recursos

Agradecimientos

Gracias a Jack Hsieh y Reilly Grant por sus comentarios.