Chrome.serial如何读取到达的数据?

Chrome.serial how to read the data arrived?

经过一番努力(超过一周 ),我发现在 OSX 10.11 Chrome.serial 上不起作用,因为 OSX 拒绝 Chrome.serial 如果它不使用本机 OSX 连接请求方式。

然后我使用以下代码及其工作转移到 Windows OS。但是我无法读取可读格式的数据,有人可以帮忙吗?

var serial_port = "COM3";
var connectionId =  -1;
var csv = null;
var serial = chrome.serial;

// 1 - Device Query
serial.getDevices(function(ports) {
  for (var i=0; i<ports.length; i++) {      
    console.log('OK: DEVICES', ports[i].path);
    csv  = csv + ports[i].path;
  }
});

// 2 - Connect and listen
serial.connect(serial_port, {bitrate: 9600}, function(connectionInfo) {
  console.log('OK: CONNECTED', connectionInfo.connectionId);
  connectionId = connectionInfo.connectionId;

  serial.onReceive.addListener(function(receiveInfo) {
    if (receiveInfo.connectionId !== connectionId) {
      console.log("FAIL: connectionId mismatch");
      return;
    }
    console.log(receiveInfo.data);
  });
});

// 3 - Sync - WebPage
chrome.runtime.onMessageExternal.addListener(function(request, sender, sendResponse) {
  console.log('OK: WEB-PAGE ARRIVED');
});

输出:

如何获取可读格式的值而不是 ArrayBuffer {}?

这样可以吗? (如果可以,请改进代码)

var serial_port = "COM3";
var connectionId =  -1;
var csv = null;
var serial = chrome.serial;
var lineBuffer = "";

var ab2str = function(buf) {
  var bufView = new Uint8Array(buf);
  var encodedString = String.fromCharCode.apply(null, bufView);
  return decodeURIComponent(escape(encodedString));
};

// 1 - Device Query
serial.getDevices(function(ports) {
  for (var i=0; i<ports.length; i++) {      
    console.log('OK: DEVICES', ports[i].path);
    csv  = csv + ports[i].path;
  }
});

// 2 - Connect and listen
serial.connect(serial_port, {bitrate: 9600}, function(connectionInfo) {
  console.log('OK: CONNECTED', connectionInfo.connectionId);
  connectionId = connectionInfo.connectionId;

  serial.onReceive.addListener(function(receiveInfo) {
    if (receiveInfo.connectionId !== connectionId) {
      console.log("FAIL: connectionId mismatch");
      return;
    }
    lineBuffer += ab2str(receiveInfo.data);
    console.log(lineBuffer);

  });
});

// 3 - Sync - WebPage
chrome.runtime.onMessageExternal.addListener(function(request, sender, sendResponse) {
  console.log('OK: WEB-PAGE ARRIVED');
});