Serial port 检测Chrome应用程序中的串行端口断开

Serial port 检测Chrome应用程序中的串行端口断开,serial-port,google-chrome-app,Serial Port,Google Chrome App,我正在网络应用程序中使用Chrome的串口API() 我的问题是,现在几乎所有串行端口都是通过USB设备实现的。如果用户断开(或只是重置)USB设备,我无法知道。不仅如此,因为应用程序没有在Chrome中断开连接(因为它不知道),如果USB设备重新插入,坏事情就会发生(在Linux上它只是得到了一个不同的名称,但在Windows中它根本不可用) 我能做的最好的事情是: var checkConnection = function() { chrome.serial.getContro

我正在网络应用程序中使用Chrome的串口API()

我的问题是,现在几乎所有串行端口都是通过USB设备实现的。如果用户断开(或只是重置)USB设备,我无法知道。不仅如此,因为应用程序没有在Chrome中断开连接(因为它不知道),如果USB设备重新插入,坏事情就会发生(在Linux上它只是得到了一个不同的名称,但在Windows中它根本不可用)

我能做的最好的事情是:

  var checkConnection = function() {
    chrome.serial.getControlSignals(connectionInfo.connectionId, function (sigs) { 
      var connected = "cts" in sigs;
      if (!connected) console.log("Disconnected");
   });
  } // called every second or so

有更好的办法吗?回拨将是理想的

看来,在所有平台上都应该安全地假设,获得一个0字节的
读取
回调意味着EOF,这反过来又是设备已断开连接的良好指示

chrome.serial.read(connectionId, function(readInfo) {
    if (readInfo.bytesRead === 0) {
        /// Safely assume the device is gone. Clean up.
        chrome.serial.close(connectionId);
        /// ...
    }
});

串行API将在未来几周内(至少在金丝雀中)进行改进,以增加稳定性改进、基于事件的读取API以及更清晰地检测超时和错误条件(如断开连接的设备)的能力。您可以在处跟踪该进度。

在所有平台上,假设获得0字节的
读取
回调意味着EOF,这反过来又是设备已断开连接的良好指示,这应该是安全的

chrome.serial.read(connectionId, function(readInfo) {
    if (readInfo.bytesRead === 0) {
        /// Safely assume the device is gone. Clean up.
        chrome.serial.close(connectionId);
        /// ...
    }
});

串行API将在未来几周内(至少在金丝雀中)进行改进,以增加稳定性改进、基于事件的读取API以及更清晰地检测超时和错误条件(如断开连接的设备)的能力。您可以在处跟踪进度。

修改了我的原始答案,因为可能有更好的方法。只需添加我上面的示例在Windows中似乎不起作用。修改了我的原始答案,因为可能有更好的方法。只需添加我上面的示例在Windows中似乎不起作用。谢谢!我会密切关注这个bug,并且会考虑使用你的回调方法(我的方法似乎不适用于Windows)。谢谢!我将密切关注这个bug,并将考虑使用您的回调方法(我的方法似乎不适用于Windows)。