콘텐츠로 건너뛰기

Barcode Scanner Emulator

HID 키보드 웨지 설명

키보드 웨지는 압도적 다수의 바코드 스캐너에서 기본 동작 모드입니다. 이 가이드는 그것이 무엇인지, USB 수준에서 어떻게 동작하는지, 애플리케이션 테스트에 무엇을 의미하는지 설명합니다.

키보드 웨지란

이 용어는 키보드와 컴퓨터 포트 사이에 문자 그대로 "끼워져(wedged)" 키보드 신호를 가로채고 스캔한 문자를 집어넣던 오래된 시리얼 포트 스캐너에서 나왔습니다. 현대 스캐너는 물리적으로 끼울 필요가 없습니다. 이제는 연결 방식과 관계없이, 스캔한 데이터를 키보드에서 온 것처럼 내보내는 스캐너를 가리킵니다.

USB HID와 키보드 에뮬레이션

USB는 키보드, 마우스, 비슷한 입력 장치를 위해 Human Interface Device(HID) 클래스를 정의합니다. 스캐너가 USB에서 HID 키보드로 열거되면 OS는 범용의 기본 키보드 드라이버를 불러옵니다. 스캐너 전용 드라이버는 필요 없습니다. 스캐너 펌웨어는 디코딩된 각 문자를 물리 키보드가 보낼 HID 키코드로 바꾸고, 일반 USB 키보드와 같은 인터럽트 전송으로 리포트를 전달합니다.

애플리케이션이 보는 스캐너 입력

사람의 타이핑과 다른 빠른 키 입력: 스캐너는 데이터 전체를 keydown/keyup 쌍의 빠른 연속으로 보냅니다. 바코드 길이와 관계없이 보통 1초 안에 끝납니다.

마우스 이벤트는 없음: HID 키보드 모드의 스캐너는 포인터, 클릭, 포커스 이벤트를 만들지 않습니다. 스캔할 때 필드에 포커스가 없으면 입력은 사라지거나, 포커스를 가진 다른 요소로 들어갑니다.

붙여넣기 이벤트는 없음: 데이터는 클립보드 작업이 아니라 개별 키 입력으로 도착하므로 paste 이벤트 핸들러는 스캐너 입력을 보지 못합니다. paste만 듣는 입력 마스크는 이를 조용히 놓칩니다.

키보드 배열 문제

잘못된 문자가 나타나는 이유: 스캐너는 자체에 설정된 키보드 배열로 디코딩된 문자를 HID 키코드에 대응시킵니다. 그 배열이 OS 키보드 배열과 다르면 문자가 뒤바뀔 수 있습니다. 전형적인 증상은 QWERTY와 AZERTY 시스템에서 숫자나 문장 부호가 다른 문자로 스캔되는 것입니다.

로캘 불일치: 이것은 소프트웨어 버그가 아니라 스캐너 쪽 설정 문제입니다. 대부분의 스캐너는 설명서에 인쇄된 설정 바코드로 로캘을 바꿀 수 있으며, 고치려면 애플리케이션 코드를 바꾸는 것이 아니라 OS 로캘에 맞게 스캐너를 다시 프로그래밍해야 합니다.

접두사와 접미사

스캐너는 흔히 데이터 앞뒤에 설정 가능한 접두사와 접미사 시퀀스를 지원합니다. 가장 흔한 접미사는 ENTER(CR, 0x0D), TAB(0x09), 때로는 전체 CR+LF 쌍입니다. 접두사는 덜 흔하지만, 구형 터미널 애플리케이션에서 특정 필드로 스캔을 보내는 데 쓰이기도 합니다.

브라우저 테스트의 한계

브라우저는 원시 USB HID 패킷을 볼 수 없고, 연결된 HID 장치를 스캐너로 따로 열거할 수도 없습니다(대부분의 스캐너가 데이터를 노출하지 않는 WebHID API는 예외입니다). HID 키보드 모드 스캐너와 실제 키보드도 구분하지 못합니다. JavaScript에서 접근할 수 있는 것은 브라우저에 보이는 키보드 이벤트(keydown, keyup, keypress)뿐이며, 이 사이트의 도구가 검사하는 것도 바로 그것입니다.

관련

원시 키보드 이벤트를 검사하려면 키보드 이벤트 테스터를 사용하고, 접미사 설정 세부 사항은 ENTER와 TAB 접미사 가이드를 읽으세요.