2012-01-05 3 views
1

저는 임베디드 시스템에서 작업 중이며 사용자가 키보드 (예 : 바코드 스캐너)를 에뮬레이트하는 HID 장치를 연결했는지 또는 실제 건반.USB HID 장치가 키보드를 에뮬레이트하는 경우를 감지하는 신뢰할 수있는 방법

iManufacturer, iProduct, iSerialNumber 및 iInterface 문자열 설명자를 검사하여 단서를 얻을 수 있습니다. 예를 들어 바코드 리더를 연결하면 iProduct 문자열에 "reader"또는 "scanner"가 표시됩니다. 마찬가지로, "에뮬레이션"은 iInterface 문자열에서 볼 수 있습니다. 그러나 나는이 문자열에 전적으로 의존하기를 꺼립니다 (문자열 케이스는 취급하기가 쉽지만 핵심 단어/문구에 약어와 같은 것들을 처리하는 것은 번거롭습니다.)

나는 USB 1.10 및 1.11 스펙을 사용하여 보고서 설명자가 일부 단서를 제공함을 발견했습니다. 예를 들어 전역 사용 항목은 일반 데스크톱의 경우 0x0501과 같아야하며 로컬 사용 항목은 0x0906이어야합니다 (키보드). 차이점을 감지하는 데 도움이 될 수있는 보고서 설명자에 다른 것이 있습니까?

제한된 리소스를 사용하는 임베디드 시스템이므로 공급 업체 ID 및 제품 ID 목록에 의존하지 마십시오. 제안? 내가 놓친 것이 있습니까?

+0

당신은 리눅스가 이와 같은 것을 어떻게 다루는지를 보았습니까? –

+0

리눅스는 키보드와 키보드를 모호하게 할 필요가 있다고 생각하지 않습니다. – Throwback1986

답변

5

신뢰할 수있는 확실한 방법은 없습니다. 키보드가 무엇인지 아닌지에 대한 절대적인 정의가 없기 때문에 "키보드 에뮬레이션"과 "키보드가되는 것"의 차이점이 없기 때문에 불가능합니다. 이 경계는 보조 장치와 코드 키보드와 같은 요소를 중심으로 특히 흐릿 해지지 만, 키보드를 에뮬레이션하는 방법은 키보드가 통신하는 방식으로 USB 케이블을 통해 통신하는 근본적인 문제가 있습니다.

제안한 방법은 분명히 키보드가 아닌 것들을 식별하기위한 적절한 발견 방법이지만 (힌트를 찾는 휴리스틱 스가 가장 좋은 해결책입니다) 가능하다.

+0

전적으로 동의합니다. 제 질문은 더 강력한 솔루션을 찾기위한 마지막 시도였습니다. 감사! – Throwback1986

관련 문제