2013-10-14 5 views
1

웹 앱에서 Chrome의 직렬 포트 API (http://developer.chrome.com/apps/serial.html)를 사용하고 있습니다.Chrome 앱에서 직렬 포트 연결 해제 감지

내가 가진 문제는 모든 직렬 포트가 이제 USB 장치를 통해 구현된다는 것입니다. 사용자가 USB 장치의 연결을 끊었거나 재설정 만하면 알 수있는 방법이 없습니다. 뿐만 아니라 앱이 Chrome에서 연결이 끊어지지 않았기 때문에 (알 수 없기 때문에) USB 장치가 다시 연결되면 나쁜 일이 일어납니다 (Linux에서는 이름이 달라 지지만 Windows에서는 그렇지 않습니다). 전혀 사용할 수 없음).

내가 관리 할 수있는 최선은 다음과 같습니다 더 좋은 방법이

var checkConnection = function() { 
    chrome.serial.getControlSignals(connectionInfo.connectionId, function (sigs) { 
     var connected = "cts" in sigs; 
     if (!connected) console.log("Disconnected"); 
    }); 
    } // called every second or so 

있습니까? 콜백이 이상적입니다!

+0

결국 더 좋은 방법이있을 수 있으므로 내 원래 답변이 수정되었습니다. –

+0

위의 예제를 Windows에서 작동하지 않는 것으로 추가하는 것입니다. –

답변

3

read 콜백을 0 바이트로하는 것이 EOF를 의미한다고 가정하는 것이 모든 플랫폼에서 안전해야하는 것처럼 보입니다. 이는 차례로 장치가 분리되었음을 나타내는 좋은 지표입니다.

chrome.serial.read(connectionId, function(readInfo) { 
    if (readInfo.bytesRead === 0) { 
     /// Safely assume the device is gone. Clean up. 
     chrome.serial.close(connectionId); 
     /// ... 
    } 
}); 

직렬 API는 다음 몇 주 동안 개선 될 것이다 (카나리아 적어도) 안정성 개선을 추가, 이벤트 기반이 API를 읽고, 더 명확처럼 (시간 제한 및 오류 조건을 감지 할 수있는 능력 연결이 끊긴 장치). 진행 상황을 http://crbug.com/307184에서 추적 할 수 있습니다.

+0

감사! 그 버그를 계속 주시하고 콜백 아이디어를 사용하는 방법에 대해 알아 봅니다. (Windows에서는 작동하지 않습니다.) –

관련 문제