问题描述
我正在为Google Chrome开发一个应用,该应用通过COM(USB)端口从设备中获取一些字节。
简单的代码:
// connects the device
function connect(port_name) {
chrome.serial.connect(port_name,{
bitrate: 937500,dataBits: "eight",stopBits: "one",parityBit: "no"
},function(connectionInfo) {
if (typeof (connectionInfo) !== 'undefined') {
if (typeof (connectionInfo.connectionId) !== 'undefined' && connectionInfo.connectionId < 1) {
console.log('Connection error #1');
} else {
sessionStorage.setItem('connection',connectionInfo.connectionId);
}
}
})
}
// sends bytes to device
function send_bytes(bytes) {
var bytes_to_send = new Uint8Array(bytes);
var connection = Number(sessionStorage.getItem('connection'));
chrome.serial.send(connection,(bytes_to_send).buffer,function(sent_data) {});
}
// recieves the data
chrome.serial.onReceive.addListener(function(data_recieved) {
var arr = new Uint8Array(data_recieved.data);
var final_hex = [];
for (byte in arr) {
final_hex.push(arr[byte].toString(16));
}
console.log('====== HEX ======');
console.log(final_hex);
});
connect('COM5',15000); // we connected!
send_bytes([0x05,0xAD,0x1E,0x00,0xB6]); // bytes away! ( runs N times)
通常,我会收到10个十六进制的正确十六进制序列,分为以下不同事件:
["FF","FF"] ["0","8B","0"] ["1","38","0","FF"]
["FF"] ["FF"] ["0","8B"] ["0","1","0"] ["FF"]
但是有时发送相同的命令,我只会得到部分响应,例如9 HEX:
["FF"] ["FF"] ["0","0"]
然后,当我发送相同的命令时,我也会收到缺少的部分,例如11 HEX:
["FF","FF","FF"]
在此程序之外测试行为,硬件始终会按预期运行,每次返回10个值。
使用API看起来并不总是触发chrome.serial.onReceive.addListener,并且某些HEX值仍保留在缓冲区中。我相信我应该始终从API接收10个值。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)