Atualizações de Bluetooth RFCOMM na Web Serial

François Beaufort
François Beaufort

A API Web Serial oferece suporte à comunicação com serviços RFCOMM em dispositivos Bluetooth Classic pareados no Chrome 117 para computador. Por exemplo, isso permite que fones de ouvido sem fio usem RFCOMM para gerenciar configurações de áudio e atualizações de firmware. Confira Serial over Bluetooth on the web (em inglês) para saber mais.

A partir do Chrome 130 para computador, uma melhoria na API Web Serial permite que apps da Web detectem quando uma porta serial Bluetooth RFCOMM está disponível, sem precisar abrir a porta. Isso evita reconexões desnecessárias quando o dispositivo sem fio foi desconectado intencionalmente.

Quando um dispositivo sem fio fica fora do alcance do host, qualquer porta serial sem fio aberta por um app da Web é fechada automaticamente. Nesses casos, o app da Web pode tentar reabrir a porta com o método SerialPort open(). No entanto, se o dispositivo sem fio foi desconectado intencionalmente (por exemplo, pelo usuário no painel de controle do sistema operacional), o app da Web não deve reabrir a porta para evitar a reconexão ao dispositivo sem fio.

Ao expor o estado de conexão lógica do dispositivo sem fio que hospeda a porta serial sem fio por um novo atributo booleano SerialPort connected, os apps da Web agora podem distinguir esses casos e só se reconectar se a desconexão não for intencional.

O atributo SerialPort connected é verdadeiro para portas seriais sem fio se o dispositivo sem fio que hospeda a porta tiver conexões ativas com o sistema. Para portas seriais com fio, ele é verdadeiro se a porta estiver fisicamente conectada ao sistema.

O snippet a seguir mostra como verificar quais dispositivos estão disponíveis e se conectar a eles automaticamente.

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

Antes, apenas portas seriais com fio enviavam eventos de conexão e desconexão. As portas seriais Bluetooth RFCOMM agora enviam esses eventos quando a porta fica conectada ou desconectada logicamente.

Demonstração

Demonstração de SerialPort conectado.

Recursos

Agradecimentos

Agradecemos a Jack Hsieh e Reilly Grant pelas avaliações.