Web Seri'de Bluetooth RFCOMM güncellemeleri

François Beaufort
François Beaufort

Web Serial API, masaüstünde Chrome 117'den itibaren eşlenmiş Bluetooth Classic cihazlardaki RFCOMM hizmetleriyle iletişimi destekler. Örneğin, bu sayede kablosuz kulaklıklar, ses ayarlarını ve donanım yazılımı güncellemelerini yönetmek için RFCOMM'u kullanabilir. Daha fazla bilgi edinmek için Web'de Bluetooth üzerinden Seri başlıklı makaleyi inceleyin.

Masaüstü için Chrome 130'dan itibaren, Web Serial API'de yapılan bir iyileştirme sayesinde web uygulamaları, bağlantı noktasını açmak zorunda kalmadan Bluetooth RFCOMM seri bağlantı noktasının ne zaman kullanılabilir olduğunu algılayabilir. Bu sayede, kablosuz cihazın bağlantısı kasıtlı olarak kesildiğinde gereksiz yeniden bağlantılar önlenir.

Kablosuz bir cihaz, ana makinenin kapsama alanı dışına çıktığında bir web uygulaması tarafından açılan tüm kablosuz seri bağlantı noktaları otomatik olarak kapanır. Bu gibi durumlarda, web uygulaması SerialPort open() yöntemiyle bağlantı noktasını yeniden açmaya çalışabilir. Ancak kablosuz cihazın bağlantısı kasıtlı olarak kesildiyse (örneğin, kullanıcı tarafından işletim sistemi kontrol panelinden) web uygulaması, kablosuz cihaza yeniden bağlanmayı önlemek için bağlantı noktasını yeniden açmaktan kaçınmalıdır.

Kablosuz seri bağlantı noktasını barındıran kablosuz cihazın mantıksal bağlantı durumunu yeni bir Boole değeri olan SerialPort connected özelliği aracılığıyla kullanıma sunarak web uygulamalarının bu durumları ayırt etmesini ve yalnızca bağlantı kesilmesi kasıtsızsa yeniden bağlanmasını sağlıyoruz.

Bağlantı noktasını barındıran kablosuz cihazın sisteme etkin bağlantıları varsa kablosuz seri bağlantı noktaları için SerialPort connected özelliği doğrudur. Kablolu seri bağlantı noktaları için, bağlantı noktası sisteme fiziksel olarak bağlıysa bu değer doğrudur.

Aşağıdaki snippet'te hangi cihazların kullanılabildiğini nasıl kontrol edeceğiniz ve bu cihazlara otomatik olarak nasıl bağlanabileceğiniz gösterilmektedir.

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

Daha önce yalnızca kablolu seri bağlantı noktaları bağlanma ve bağlantıyı kesme etkinliklerini gönderiyordu. Bluetooth RFCOMM seri bağlantı noktaları, bağlantı noktası mantıksal olarak bağlandığında veya bağlantısı kesildiğinde artık bu etkinlikleri gönderir.

Demo

SerialPort connected demo.
(Seri bağlantı noktası bağlandı demosu)

Kaynaklar

Teşekkür

Yorumları için Jack Hsieh ve Reilly Grant'e teşekkür ederiz.