Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从串行端口进行通信->;Chrome应用程序->;网页。网页启动。_Javascript_Google Chrome_Serial Port_Google Chrome App - Fatal编程技术网

Javascript 从串行端口进行通信->;Chrome应用程序->;网页。网页启动。

Javascript 从串行端口进行通信->;Chrome应用程序->;网页。网页启动。,javascript,google-chrome,serial-port,google-chrome-app,Javascript,Google Chrome,Serial Port,Google Chrome App,正如问题所问,我正试图通过chrome应用程序,通过网页与串行设备通信。目标是通过网页上的按钮打开开关,并确保开关实际处于打开状态(串行响应)。 到目前为止,我已经能够很好地打开开关,但是我需要验证它实际上是启用的 我的chrome应用程序代码: chrome.runtime.onMessageExternal.addListener( function(request, sender, sendResponse) { if (request.request == 'in

正如问题所问,我正试图通过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;
    });

如果我向设备发送一个“status”查询,它将需要几毫秒的时间来响应串行缓冲区的“off”或“on”。你有什么想法吗?提前谢谢

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

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;
    });