【问题标题】:Communicate from Serial port -> Chrome app -> webpage. Webpage initiates.从串口 -> Chrome 应用程序 -> 网页进行通信。网页启动。
【发布时间】:2016-08-06 21:32:01
【问题描述】:

就像问题所问的那样,我正在尝试通过 chrome 应用程序通过网页与串行设备进行通信。目标是用网页上的按钮打开开关,并确保开关确实打开(串行响应)。
到目前为止,我已经能够很好地打开开关,但是我需要验证它实际上是否已启用。

我的 chrome 应用代码:

chrome.runtime.onMessageExternal.addListener(
    function(request, sender, sendResponse) {
        if (request.request == 'info') {
            sendResponse(DEVICE_INFO);
        } else if (request.request == 'turn_off') {
            device_array.forEach(function(device){
                if (device.id == request.device_id){
                    device.send('f');
                }
            });

//INSTEAD OF "OK" I NEED IT TO ASK THE DEVICE TO CONFIRM OFF/ON STATUS
            sendResponse('OK'); 

        } else if (request.request == 'turn_on') {
            device_array.forEach(function(device){
                if (device.id == request.device_id){
                    device.send('n');
                }
            });
            sendResponse('OK');
        }
        return true;
    });

如果我向设备发送“状态”查询,它需要几毫秒才能响应“关闭”或“开启”到串行缓冲区。关于如何解决这个问题的任何想法?提前致谢。

【问题讨论】:

    标签: javascript google-chrome serial-port google-chrome-app


    【解决方案1】:

    最终,我通过在侦听器代码块中请求设备状态来使其工作。以下是修改,粗略,但它完成了工作。 DEVICE_STATUS 正在由串行连接上的 onReceive 侦听器更新。

    chrome.runtime.onMessageExternal.addListener(
        function(request, sender, sendResponse) {
            if (request.request == 'info') {
                sendResponse(DEVICE_INFO);
            } else if (request.request == 'turn_off') {
                device_array.forEach(function(device){
                    if (device.id == request.device_id){
                        device.send('f');
                    }
                });             
                var time_loop = 0;
                connection.send('s'); // s is for STATUS
                var timer = setInterval(device_is_off, 200);
    
                function device_is_off(){
                    if (time_loop > 5){ //Serial Communication Timeout at 1sec 
                        sendResponse('ERROR ' + DEVICE_STATUS);
                        clearInterval(timer);
                        return;
                    }
                    if (DEVICE_STATUS == 0){
                        sendResponse('OK');
                        clearInterval(timer);
                        return
                    }
                    else time_loop++;
                }
    
            } else if (request.request == 'turn_on') {
                device_array.forEach(function(device){
                    if (device.id == request.device_id){
                        device.send('n');
                    }
                });             
                var time_loop = 0;
                connection.send('s'); // s is for STATUS
                var timer = setInterval(device_is_on, 200);
    
                function device_is_on(){
                    if (time_loop > 5){
                        sendResponse('ERROR ' + DEVICE_STATUS);
                        clearInterval(timer);
                        return;
                    }
                    if (DEVICE_STATUS == 1){
                        sendResponse('OK');
                        clearInterval(timer);
                        return
                    }
                    else time_loop++;
                }
            }
            return true;
        });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-30
      • 1970-01-01
      • 2010-09-14
      • 2016-11-25
      • 1970-01-01
      • 2011-07-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多