저는 현재 AVR을 사용하여 PS/2 키보드를 시뮬레이션하여 PC를 제어하려는 프로젝트를 진행하고 있습니다. 그래서 저는 현재 필요한 모든 하드웨어와 다음과 같은 일부 소프트웨어 라이브러리를 보유하고 있습니다.https://github.com/ndusart/ps2-keyboardAVR 및http://python-evdev.readthedocs.io/en/latest/index.htmlPC 부분의 경우.
PS/2 프로토콜에 대해서도 읽었습니다.http://www.pcbheaven.com/wikipages/The_PS2_protocol/,http://www.computer-engineering.org/ps2protocol/그리고http://retired.beyondlogic.org/keyboard/keybrd.htm
그런 다음 명령을 실행 sudo cat /dev/input/by-path/platform-i8042-serio-0-event-kbd > ./kbrd.hex
하고 키보드를 연결한 다음 백스페이스 키를 눌렀다 놓습니다.
나는 그런 것을 제외할 것입니다 AA 66 F0 66
. 아마도 FA
중간에 있는 일부(ACK)가 있을 것입니다. 그러나 내가 얻는 것은 다음과 같습니다.매우다른:
그래서 내 질문은:
이것이 /dev/input/ 작동 방식에 대한 나의 오해 때문입니까, 아니면 내 설정의 다른 곳에 문제가 있습니까? 나는 /dev/input/에 있는 버퍼로부터 원시 입력을 받기를 기대하고 있지만 그것은 원시 입력이 되어야 한다고 생각하는 것이 아닙니다.
답변1
프로세스를 설명하는 방식은 출력 캡처를 시작하고, 키보드를 연결하고, 키를 누른 다음 캡처를 중지하는 것입니다. 이런 경우에는 키보드를 연결하고 캡처를 시작한 다음 키를 누르고 캡처를 중지하는 것이 좋습니다.
편집하다:추가 정보 추가
지금까지 제가 직접 조사한 결과 귀하의 덤프와 정확히 일치하는 결과는 나오지 않았지만 다음과 같습니다.
모든kernel.org 문서그리고소스 코드, /dev/input 인터페이스의 출력 형식은 다음과 같습니다.
struct input_event {
struct timeval time;
unsigned short type;
unsigned short code;
unsigned int value;
};
이는 다음과 같습니다.
- timeval: 16바이트(초는 8바이트, 마이크로초는 8바이트)
- 유형: 2바이트
01
EV_KEY
(키) 에 대해 . 바라보다이벤트 코드를 입력하세요.h
- 코드: 2바이트
0E
을 위한KEY_BACKSPACE
. 바라보다이벤트 코드를 입력하세요.h
- 값:
01
키 누르기,00
떼기,02
자동 반복을 위한 4바이트