Chrome.serial.onReceive事件看起来好像没有引发

问题描述

我正在为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 (将#修改为@)