如何从 chrome.usb 中的失速中恢复?

Posted

技术标签:

【中文标题】如何从 chrome.usb 中的失速中恢复?【英文标题】:How to recover from a stall in chrome.usb? 【发布时间】:2014-01-05 23:10:35 【问题描述】:

我正在发送一个批量传输,并将其停在设备中(我在电缆的两端编写代码)以中止操作。我正在向端点发送一个自制的控制传输 SET_FEATURE ENDPOINT_HALT,当中止完成时,我会跟进 CLEAR_FEATURE ENDPOINT_HALT 来恢复端点并再次使用它。在嵌入式调试器中,我可以确认它已在设备中清除。但在浏览器中,端点上的任何后续传输都会以非常无用的“传输失败”消息结束(代码 1)。

if (errorCode == 4) 
    var ENDPOINT_HALT = 0;
    var CLEAR_FEATURE = 0x01;
    controlTransfer(currentDevice, direction: 'out', recipient: 'endpoint', requestType: 'standard',
    request: CLEAR_FEATURE, value: ENDPOINT_HALT, index: 1, data: new ArrayBuffer(0), genericErrorFilter());

根据我在网上找到的,libusb 有一个特殊的功能,用于清除主机端的停顿,告诉内核端点已经恢复,它应该在其内部结构中反映这一点。这个函数在 chrome.usb 中没有暴露。

有没有办法从 Chrome 中的停顿中恢复?或者是否有其他可从设备恢复的方法来停止正在进行的批量传输?

我使用的是 Mac OS X 和 Chrome Canary。

【问题讨论】:

我想我通过执行 chrome.usb.resetDevice() 并在完全重新获取设备之后设法在停顿后继续。 编辑/回答的比例太高了,我很快就会有一个莎士比亚质量的未回答问题。 【参考方案1】:

您可以尝试对捕获的停顿消息进行中断传输

chrome.experimental.usb.interruptTransfer(integer device,
string direction,
integer endpoint,
string data,
function callback)

【讨论】:

以上是关于如何从 chrome.usb 中的失速中恢复?的主要内容,如果未能解决你的问题,请参考以下文章

IVI15.1.2 系统稳定性优化篇(LMKD Ⅱ)PSI 压力失速信息

如何重复一系列承诺中的步骤以及如何从失败的步骤中恢复?

如何从 HDFS 中的 BP 文件夹中恢复数据

如何从应用商店中的应用恢复应用标识符

如何从XPages / dojo中的“超时超时”中恢复

如何从crm中的插件注册中恢复我的插件数据?