为什么chrome.usb.openDevice失败了?

时间:2014-03-17 04:14:53

标签: google-chrome-extension google-chrome-app

我正尝试使用chrome.usb API通过Chrome应用与USB设备通信。虽然我可以使用chrome.usb.getDevices找到设备,但我无法使用chrome.usb.openDevice(回调获取未定义的ConnectionHandle)或chrome.usb.findDevices(回调获取ConnectionHandle的空列表)连接到它。

有没有办法找出错误发生的原因? USB caveats部分声明如果现有驱动程序已声明设备,则无法打开设备,但我不认为这是这种情况。有没有办法进一步调试? USB指南还说chrome.extension.lastError设置为传输错误,但chrome.extension未定义,因此没什么帮助。

我不认为现有的驱动程序声称该设备。我在OSX上运行Chrome,该设备是一支包含Obex通信接口的笔。

目前,我的代码基本上是USB hello世界的摘录:

的manifest.json:

{
  "manifest_version": 2,
  "name": "USB Hello world",
  "version": "0.1",
  "minimum_chrome_version": "26",
  "app": {
    "background": {
      "scripts": ["background.js"]
    }
  },
  "permissions": [
    "usb",
    {"usbDevices": [
      {
        "vendorId": 7419,
        "productId": 4112
      }
    ]}
  ]
}

background.js:

var deviceId = {"vendorId": 7419, "productId": 4112},  // 0x1cfb, 0x1010 Livescribe Pulse(TM) Smartpen
chrome.usb.getDevices(deviceId, onDeviceFound);

function onDeviceFound(devices) {
  console.log("onDeviceFound", devices);
  if (0 !== devices.length) {
    var device = devices[0];
    window.device = device;
    chrome.usb.openDevice(device, onOpenDevice);
  }
}
function onOpenDevice(connectionHandle) {
  if (connectionHandle) {
    console.log("Device opened.");
  } else {
    console.log("Device failed to open.");
  }
}

,控制台日志就是

onDeviceFound [{"device":6,"productId":4112,"vendorId":7419}]
Device failed to open. 

编辑:顺便说一句,设备在Linux上打开时没有错误。

1 个答案:

答案 0 :(得分:1)

尝试注销chrome.runtime.lastError()

在OS X上测试USB访问时,我们发现在本机客户端应用程序(使用hidapi)运行并识别设备之前,Chrome无法访问USB设备。

在Chromebook上,我发现除非从用户操作调用chrome.usb.findDevices(),否则我无法真正访问设备。尝试添加一个指向调用方法的页面的链接,看看是否会获得更好的结果。