2

我在 Web 应用程序中使用 Chrome 的串行端口 API ( http://developer.chrome.com/apps/serial.html )。

我遇到的问题是,现在几乎所有的串行端口都是通过 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

有没有更好的办法?回调将是理想的!

4

1 回答 1

4

看起来在所有平台上都应该安全地假设获取read0 字节的回调意味着 EOF,这反过来很好地表明设备已断开连接。

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

串行 API 将在接下来的几周内(至少在 Canary 中)进行改进,以增加稳定性改进、基于事件的读取 API,以及更清晰地检测超时和错误情况(如断开连接的设备)的能力。您可以在http://crbug.com/307184跟踪该进度。

于 2013-10-14T20:40:49.237 回答