我正尝试使用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上打开时没有错误。
答案 0 :(得分:1)
尝试注销chrome.runtime.lastError()
。
在OS X上测试USB访问时,我们发现在本机客户端应用程序(使用hidapi)运行并识别设备之前,Chrome无法访问USB设备。
在Chromebook上,我发现除非从用户操作调用chrome.usb.findDevices()
,否则我无法真正访问设备。尝试添加一个指向调用方法的页面的链接,看看是否会获得更好的结果。