PS/2 마우스 인터페이스
출처: http://www.Computer-Engineering.org
저자: Adam Chapweske
마지막 업데이트:
한글화 및 재편집: chhan,
저작권 정보:
본문의 모든 내용은 아무 명시적, 묵시적 제한없이 있는 그대로 제공한다. 덧붙여, 상업적인 목적의 사용에도 제한을 두지 않는다. 또한 본 문서는 저작권법에 의해 보호되며, 본 문서의 복사 및 배포 시에는 반드시 출처, 저자, 날짜 및 저작권 정보를 포함하여야 한다.
개요
본 문서는 PS/2 마우스 인터페이스에 대하여 물리적, 전기적 인터페이스를 포함하여 로우-레벨 프로토콜, 운용 방법, 명령, 확장성 등 모든 면에 걸쳐 기술하였다.
일반적인 설명
포인팅 디바이스 장치들은 마우스, 트랙볼, 터치패드, 전자 화이트보드 등 매우 많은 종류가 있다. 이러한 디바이스의 대부분은 두 가지 인터페이스 중 한가지–Universal Serial Bus (USB) 또는 PS/2 마우스 인터페이스-를 사용한다. 또한 구형의 포인팅 디바이스에는 Apple Desktop Bus(ADB), RS-232 시리얼 포트, 그리고 bus mouse interface 등의 인터페이스가 사용되었다.이는 매우 오래되고 거의 사용하지 않는 인터페이스로 이 문서에서는 다루지 않을 것이다.
PS/2 마우스 인터페이스는 80년대 후반 IBM의 “Personal System/2” 컴퓨터 인터페이스로 등장하였고, 널리 지원되는 인터페이스로 남아있다. 그러나, 지난 몇 년간 USB가 빠르게 성장하고 있으며, 결국 전적으로 PS/2 인터페이스를 대체하게 될 것이다.
PS/2 마우스 인터페이스는 양방향 시리얼 프로토콜로서 포인팅 디바이스의 이동위치 정보나 키 상태 데이터(키보드)의 전송에 활용된다. PS/2 컨트롤러는 마우스 설정, 해상도, 마우스의 리셋, 마우스 비활성화 등 의 명령을 전송할 수 있다. 한편 호스트는 마우스에게 5V, 100mA의 전원을 공급한다.
전기적 인터페이스 / 프로토콜
PS/2 마우스는 PS/2 키보드와 같은 인터페이스를 사용한다. 자세한 내용은 The PS2 Mouse_Keyboard Protocol 문서를 참조하라.
입력, 해상도, 스케일링
표준 PS/2 마우스 인터페이스는 다음의 입력을 지원한다:
X 축 (왼쪽/오른쪽) 움직임, Y 축 (위/아래) 움직임, 왼쪽 버튼, 가운데 버튼, 오른쪽 버튼.
마우스는 주기적으로 이들 입력을 읽고, 버튼 정보와 위치 정보에 따라 플래그와 카운터 변수를 업데이트한다. 또한 많은 PS/2 포인팅 디바이스들이 추가적인 입력을 가지고 있으며, 다른 추가적인 내용을 리포트(전송) 할 것이다. 이 문서에서 다루게 될 인기 있는 확장기능 중 하나는 마이크로소프트 Intellimouse이며, 이것은 표준 입력을 모두 포함하고, 추가적으로 스크롤 휠과 두 개의 추가적인 버튼을 가진다.
표준 마우스는 두 개의 카운터(Movement counters)-X축 무브먼트 카운터와 Y축 무브먼트 카운터-를 가진다. 이 카운터들은 오버플로우 플래그를 포함하는 2의 보수로 구성된 9비트 변수이다. 해당 내용은, 세가지 버튼의 상태 정보와 함께 3바이트로 구성된 무브먼트 데이터 패킷으로 묶여 호스트로 전송된다.
무브먼트 카운터는 마우스의 위치(이전 발생된 무브먼트 데이터 패킷의 위치 또는 마지막으로 호스트에 전송 성공한 명령이 “Resend”(0xFE)명령이 아닐 때의 위치)에 대한 상대적인 옵셋 정보로 나타낸다.
마우스가 이들 입력을 읽을 때, 버튼들의 현재 상태와, 지난 입력 샘플 이후에 발생한 이동량의 결과에 따라 증가/감소 되는 무브먼트 카운터가 새로 기록된다. 만일 각 무브먼트 카운터가 오버플로우 되면 해당 오버플로우 플래그가 셋트되며, 카운터가 리셋될 때까지 카운터의 수정은 디제이블된다(패킷이 전송되기 때문에).
무브먼트 카운터의 증가 량과 감소 량을 결정하는 매개변수는 해상도(Resolution)이다. 해상도의 기본값은 4 counts/mm이며, 호스트는 “Set Resolution”(0xE8) 명령으로 이 값을 변경할 수 있다.
어떤 매개변수는 무브먼트 카운터에는 영향을 주지 않지만, 그 카운터의 전송될 변수 (Reported Movement)에는 영향을 준다. 이 매개변수는 스케일링(Scaling)이다. 기본값으로 마우스는
Movement Counter |
Reported Movement |
0 |
0 |
1 |
1 |
2 |
1 |
3 |
3 |
4 |
6 |
5 |
9 |
N > 5 |
2 * N |
(이후부터 Reported Movement를 리포트 데이터라고 적는다 - chhan).
무브먼트 데이터 패킷
표준 PS/2 마우스는 다음의 3바이트 패킷으로 움직임/버튼 정보를 호스트에 전송한다:
|
비트7 |
비트 6 |
비트 5 |
비트 4 |
비트 3 |
비트 2 |
비트 1 |
비트 0 |
1바이트 |
Y 축 오버플로우 |
X 축 오버플로우 |
Y축 sign비트 |
X축 sign비트 |
항상 1 |
중앙 키 |
오른쪽 키 |
왼쪽 키 |
2바이트 |
X 축 무브먼트 | |||||||
3바이트 |
Y 축 무브먼트 |
무브먼트 값은 9비트의 2의 보수 정수이며, 최상위 9번 비트는 무브먼트 데이터 패킷의 첫 번째 바이트의 “sign”비트로 표시된다.
이들은 마우스의 위치에 대한 상대적(이전에 전송된 패킷의 상태 및 위치에 대한)인 옵셋 값으로 표시되며, 현재 설정된 해상도에 의해 최소단위가 결정된다. 무브먼트 변수의 범위는 -255에서 +255 이며, 이 값이 초과되면 해당 오버플로우 비트가 셋트된다.
운용 모드
데이터의 리포팅 과정은 다음과 같이 4가지의 운용 모드에 따라 처리된다:
l Reset – 초기 모드, 마우스 초기화 수행과 자기 진단(self-diagnostics) 모드.
l Stream – 기본 동작 모드, 마우스 움직임이 발생하거나 버튼 상태가 변화했을 때 무브먼트 데이터 패킷을 발생시킨다.
l Remote – 이 모드에서 호스트는 무브먼트 데이터 패킷을 폴링 방식으로만 전송 받을 수 있다.
l Wrap – 마우스로 매 수신된 패킷을 호스트로 재전송해주는 단순한 검진 모드.
Reset Mode
마우스는 전원이 들어왔을 때 또는 “Reset”(0xFF) 명령을 받았을 때-호스트에게 확인 응답을 보낸 후-리셋 모드로 진입한다. 이 모드로 진입 즉시, 마우스는 진단 셀프 테스트 BAT(Basic Assurance Test)를 호출하여 수행하고, 다음의 기본 값들을 셋팅한다:
l 샘플 레이트(Sample Rate) = 100 samples/sec
l 해상도 = 4 counts/mm
l 스케일링 =
l 데이터 리포팅 = disabled
이후 마우스는 BAT 완료 코드-0xAA(BAT 성공) 또는 0xFC(에러)-를 전송한다. 덧붙여0xAA 이외의 완료 코드에 대한 호스트의 응답은 정의되지 않았다.
BAT 완료코드(0xAA 또는 0xFC) 전송 후에, 마우스는 0x00 의 디바이스 ID를 전송한다. 이것은 키보드나 비 표준 마우스로부터 구별된다. 나는 디바이스 ID가 수신되기 전까지 호스트는 데이터를 전송하지 않는다는 문서를 참조하였으나, 일부 BIOS는 전원이 들어오고 0xAA 가 수신된 다음, 즉시 “Reset”(0xFF) 명령을 전송하는 것도 있었다.
마우스는 디바이스 ID를 호스트로 전송한 후 스트림 모드로 진입한다.
Stream Mode
스트림 모드에서 마우스는, 움직임을 감지하거나 하나 이상의 마우스 버튼의 변화를 감지했을 때, 무브먼트 데이터 패킷을 전송한다.
이 데이터들이 리포트 되는 최대 속도(maximum rate)는 샘플 레이트(Sample Rate) 매개변수에 의해 결정된다. 이 매개변수의 범위는 10 ~ 200 samples/sec이며, 기본값은 100 samples/sec 이다. 호스트는 "Set Sample Rate" (0xF3) 명령을 사용하여 설정할 수 있다.
또한 데이터 리포팅 기능이(리셋 모드에서) 기본적으로 비활성화 되어있다는 것을 주의하라.
따라서 마우스는 "Enable Data Reporting" (0xF4)명령을 수신할 때까지 무브먼트 데이터 패킷을 발생시키지 않을 것이다.
스트림 모드는 기본적인 동작 모드이며, "Set Stream Mode" (0xEA) 명령을 사용하여 스트림 모드로 진입할 수도 있다.
Remote Mode
리모트 모드에서 마우스는, 현재 설정된 샘플 레이트에 맞추어 입력들을 읽고 카운터들과 플래그들을 업데이트한다. 그러나 움직임이나 버튼의 변화가 발생해도 무브먼트 데이터 패킷들을 자동으로 리포트하지는 않을 것이다. 대신, 호스트는 마우스에게 "Read Data" (0xEB) 명령을 통해서 마우스 패킷 데이터를 폴링한다. 이 명령을 수신 시, 마우스는 한 개의 무브먼트 데이터 패킷을 발생시키고, 무브먼트 카운터를 리셋할 것이다.
마우스는 "Set Remote Mode" (0xF0)명령 수신 시 리모트 모드로 진입하며, 이러한 리모트 모드는 드물게 사용된다.
Wrap Mode
이것은 마우스로 매 수신된 바이트를 호스트로 재전송해주는 “echoing” 모드이다.
유효한(오류 없는) 명령 패킷까지도, 마우스는 그 명령에 응답하지 않고, 오로지 수신 받은 바이트를 호스트로 재전송할 것이다. 단 이것은 두 가지 예외가 있다:
"Reset" (0xFF) 명령과 "Reset Wrap Mode" (0xEC) 명령이 그것인데, 마우스는 이 명령을 유효한 명령으로 취급하며, 호스트로 재전송하지 않는다.
마찬가지로 Wrap 모드는 드물게 사용된다.
인텔리마우스 확장 기능
인기 있는 표준 PS/2 마우스 확장 기능 중 하나는 마이크로소프트 Intellimouse이다.
이것은 총 5개의 키와 3개의 무브먼트 축(왼쪽-오른쪽, 위-아래, 스크롤 휠)을 지원한다.
이러한 추가 기능은 표준의 3바이트 대신 4바이트의 무브먼트 데이터 패킷을 요구한다.
표준 PS/2 마우스 드라이버들은 이 패킷 포맷을 인식하지 못하기 때문에, 인텔리마우스는 확장된 패킷 포맷을 드라이버가 지원하는지 알지 못하는 한, 정확히 PS/2 표준 마우스처럼 동작하는 것이 필요하다.
따라서, 인텔리마우스가 PS/2 마우스 표준을 지원하는 컴퓨터에서 사용되는 경우, 스크롤 휠과4번째, 5번째 버튼은 비활성화되어야 하고, 이것을 제외한 나머지 기능은 계속 동작 해야 한다.
전원이 들어온 후 또는 리셋 후에 마이크로소프트 인텔리마우스는 표준 PS/2 마우스처럼 동작한다 (즉, 디바이스 ID를 0x00으로 리포트(응답)하고 3바이트의 무브먼트 데이터 패킷을 사용하여 표준 PS/2마우스와 같은 방식으로 모든 명령에 응답한다).
스크롤 휠을 인에이블 하기 위해, 호스트는 다음의 명령 시퀸스를 전송한다:
l 샘플 레이트를 200으로 설정
l 샘플 레이트를 100으로 설정
l 샘플 레이트를 80으로 설정
이후 호스트는 "Get device ID" (0xF2) 명령을 발신한 후 응답을 기다린다. 만일, 표준 PS/2마우스(인텔리마우스 종류가 아닌 것)가 장착되었다면, 0x00의 디바이스 ID로 응답할 것이다.
이 경우, 실제로는 마우스가 스크롤 휠을 가지고 있어도 호스트는 표준 PS/2 마우스로 취급하게 될 것이다. 그러나, 만일 마이크로소프트 인텔리마우스(또는 호환 마우스)가 장착되었다면, 0x03의 디바이스 ID로 응답할 것이다.
이것은 호스트에게 장착된 포인팅 디바이스가 스크롤 휠을 가지고 있다고 알려주는 것이며, 이후 호스트는 마우스가 다음과 같은 4바이트의 무브먼트 데이터 패킷을 받을 준비를 할 것이다:
|
비트7 |
비트 6 |
비트 5 |
비트 4 |
비트 3 |
비트 2 |
비트 1 |
비트 0 |
1바이트 |
Y 축 오버플로우 |
X 축 오버플로우 |
Y축 sign비트 |
X축 sign비트 |
항상 1 |
중앙 키 |
오른쪽 키 |
왼쪽 키 |
2바이트 |
X 축 무브먼트 | |||||||
3바이트 |
Y 축 무브먼트 | |||||||
4바이트 |
Z 축 무브먼트 |
Z축 무브먼트는 2의 보수 변수이며, 다른 무브먼트 변수들과 마찬가지로 스크롤 휠의-이전 위치에 대한 상대적인-움직임을 표현한다.
또한 이 변수의 유효한 값의 범위는 -8 에서 +7이다. 이것은 실제 표현에 필요한 비트는 하위4비트만 있으면 되고, 상위 4비트는 다른 부호 비트로 확장시킬 수 있다는 것을 의미한다.
스크롤 휠과 4번째, 5번째 버튼을 인에이블 하기 위해서는, 호스트는 다음의 명령 시퀸스를 전송해야 한다:
l 샘플 레이트를 200으로 설정
l 샘플 레이트를 200으로 설정
l 샘플 레이트를 80으로 설정
이후 호스트는 "Get device ID" (0xF2) 명령을 발신한 후, 응답을 기다린다. 마이크로소프트 인텔리마우스는 0x04의 디바이스 ID로 응답하고, 다음의 4바이트 무브먼트 데이터 패킷을 사용할 것이다:
|
비트7 |
비트 6 |
비트 5 |
비트 4 |
비트 3 |
비트 2 |
비트 1 |
비트 0 | |||
1바이트 |
Y 축 오버플로우 |
X 축 오버플로우 |
Y축 sign비트 |
X축 sign비트 |
항상 1 |
중앙 키 |
오른쪽 키 |
왼쪽 키 | |||
2바이트 |
X 축 무브먼트 | ||||||||||
3바이트 |
Y 축 무브먼트 | ||||||||||
4바이트 |
항상 0 |
항상 0 |
5번째 키 |
4번째 키 |
Z 축 무브먼트 | ||||||
“4번째 키” 및 “5번째 키” 비트 = 버튼이 눌렸을 때 1이다.
Z축 무브먼트 변수는 위에서 기술한 바와 같이 4개의 비트만 사용된다.
한편 수직, 수평 두 개의 스크롤 휠을 가진 마우스도 있는데, 이 마우스는 위에서 설명한 마이크로소프트 인텔리마우스 데이터 패킷 포맷을 사용한다.
수직 휠이 위로 스크롤된다면, Z카운터는 하나씩 증가하고, 휠이 아래로 스크롤되면, Z카운터는 하나씩 감소된다. 여기까지는 스크롤 휠을 위한 기본적인 동작이다.
이때 수평 휠이 오른쪽으로 스크롤되면 Z-카운터는 2씩 증가되고, 왼쪽으로 스크롤되면 Z-카운터는 2씩 감소한다.
명령 셋
다음은 표준 PS/2 마우스에 사용되는 명령 셋이다. 만일 마우스가 스트림 모드라면, 호스트는 다른 명령을 전송하기 전에 disable data reporting (0xF5) 명령을 내려야 한다.
l 0xFF (리셋, reset) – 마우스는 이 명령에 대해 "acknowledge" (0xFA)를 응답한 후,리셋 모드로 진입한다.
l 0xFE (재전송, resend) - 호스트는 마우스로부터 잘못된 데이터를 받을 때 이 명령을 전송한다. 마우스는 호스트에 보낸 마지막 패킷을 재전송하여 응답한다. 이때 만일 마우스가 다른 잘못된 패킷으로 “Resend” 명령에 응답한다면, 호스트는 또다시 “Resend”명령을 보내거나, “Error”(0xFC) 명령을 보내거나, 마우스의 전원을 차단시켜 마우스를 리셋시키거나, 또는 통신을 차단할 것이다(클럭라인을 로우로 떨어뜨려서). 이 명령은 버퍼되지 않는다(not buffered). 이것은 명령에 대한 응답은 필요 없다는 것을 의미한다(0xFA 같은 응답이 필요 없다는 뜻인 것 같다. - chhan).
l 0xF6 (기본값으로 설정, Set Defaults) - 마우스는 "acknowledge" (0xFA)로 응답한 후, 다음의 값들로 로딩한다: 샘플 레이트 = 100, 해상도 = 4 counts/mm, 스케일 =
l 0xF5 (데이터 리포트 비활성화, Disable Data Reporting) - 마우스는 "acknowledge" (0xFA)로 응답한 후, 데이터 리포트를 비활성화하고, 무브먼트 카운터들을 리셋시킨다. 이 명령은 오직 스트림 모드의 데이터 리포트 동작에만 영향을 준다. 즉, 내부적인 샘플링 동작은 계속된다. 마치 이 명령은 리모트 모드와 같이 스트림 모드에서 리포트를 비활성화한다.
l 0xF4 (데이터 리포트 활성화, Enable Data Reporting) - 마우스는 "acknowledge" (0xFA)로 응답한 후, 데이터 리포트를 활성화하고, 무브먼트 카운터들을 리셋시킨다.이 명령은 마우스가 리모트 모드일 때도 내릴 수 있다. 그러나 이 명령은 오직 스트림 모드의 데이터 리포트 기능에만 영향을 줄 것이다.
l 0xF3 (샘플 레이트 설정, Set Sample Rate) - 마우스는 "acknowledge" (0xFA)로 응답한 후, 호스트로부터 바이트 하나를 더 받는다. 그리고 이 바이트를 새로운 샘플 레이트로 저장한다. 샘플 레이트를 수신한 후에, 마우스는 다시 "acknowledge" (0xFA)를 전송하고, 무브먼트 카운터를 리셋시킨다. 유효한 샘플 레이트의 값은 10, 20, 40, 60, 80, 100, 그리고 200 samples/sec 이다.
l 0xF2 (디바이스 ID 얻기, Get Device ID) – 마우스는 “acknowledge”(0xFA) 응답한 후, 디바이스 ID(표준 PS/2 마우스는 0x00)를 연속으로 응답한다. 또한 무브먼트 카운터를 리셋시킨다.
l 0xF0 (리모트 모드 진입, Set Remote Mode) – 마우스는 “acknowledge”(0xFA)를 응답한 후, 무브먼트 카운터를 리셋시키고, 리모트 모드로 진입한다.
l 0xEE (Wrap 모드 진입, Set Wrap Mode) - 마우스는 “acknowledge”(0xFA)를 응답한 후, 무브먼트 카운터를 리셋시키고, Wrap 모드로 진입한다.
l 0xEC (리셋 Wrap 모드, Reset Wrap Mode) - 마우스는 “acknowledge”(0xFA)를 응답한 후, 무브먼트 카운터를 리셋시키고, wrap 모드 이전의 모드로 돌아간다 (스트림 모드 또는 리모트 모드).
l 0xEB (데이터 읽기, Read Data) - 마우스는 “acknowledge”(0xFA)를 응답한 후, 무브먼트 데이터 패킷을 전송한다. 이 명령은 오직 리모트 모드에서만 리포트 데이터를 읽는 방법이다. 데이터 패킷이 성공적으로 전송된 후, 마우스는 무브먼트 카운터들을 리셋시킨다.
l 0xEA (스트림 모드 진입, Set Stream Mode) - 마우스는 “acknowledge”(0xFA)를 응답한 후, 무브먼트 카운터를 리셋시키고, 스트림 모드로 진입한다.
l 0xE9 (상태 요구, Status Request) - 마우스는 “acknowledge”(0xFA)를 응답한 후, 다음의 3 바이트의 상태 패킷을 전송한다(이후 무브먼트 카운터들을 리셋시킨다):
|
비트7 |
비트 6 |
비트 5 |
비트 4 |
비트 3 |
비트 2 |
비트 1 |
비트 0 |
1바이트 |
항상 0 |
모드 |
Enable |
스케일 |
항상0 |
왼쪽 키 |
중앙 키 |
오른쪽키 |
2바이트 |
해상도 | |||||||
3바이트 |
샘플 레이트 |
오른쪽, 중앙, 왼쪽 키 = 눌려지면 1, 안 눌려지면 0.
스케일 = 2:1스케일이면 1, 1:1스케일이면 0 (0xE7, 0xE6 명령 참조).
Enable = 데이터 리포트 활성화는 1, 비활성화는 0 (0xF5, 0xF4 명령 참조).
모드 = 리모트 모드가 활성화되면 1, 스트림 모드가 활성화되면 0 (0xF0, 0xEA 명령 참조).
l 0xE8 (해상도 설정, Set Resolution) - 마우스는 “acknowledge”(0xFA)를 응답한 후,호스트로부터 한 바이트를 더 읽는다. 바이트를 수신 완료한 후 “acknowledge” (0xFA)를 한번 더 보내고 무브먼트 카운터를 리셋시킨다. 호스트로부터 읽은 바이트로 다음의 해상도로 설정시킨다:
호스트로부터 읽은 바이트 값 |
해상도 |
00 |
1 count/mm |
01 |
2 count/mm |
02 |
4 count/mm |
03 |
8 count/mm |
l 0xE7 (
l 0xE6 (
호스트로 보낼 수 있는 표준 PS/2 마우스의 명령은 오직 “Resend”(0xFE)와 “Error”(0xFC) 이다.
초기화
PS/2 마우스는 일반적으로 컴퓨터가 부팅될 때 감지되고 초기화한다. 즉, 마우스는 hot-plugging 하지 않는 것이 좋으며, PS/2마우스를 추가하거나 제거할 때 컴퓨터를 재 시작해야 한다. 컴퓨터가 동작할 때 PS/2 마우스를 추가/제거하면 마더보드가 물리적 손상을 입을 수 있다.
다음은 컴퓨터(Win98 SE)와 표준 PS/2 마우스의 부팅 과정으로, 전형적인 PS/2마우스의 초기화를 보여준다. 만일 당신이 PS/2 마우스를 에뮬레이션 하고자 한다면, 반드시 다음의 명령 시퀀스를 지원하도록 해야 할 것이다.
파워 온 리셋:
ü 마우스: AA (셀프 테스트 통과)
ü 마우스: 00 (마우스 ID)
ü 호스트: FF (리셋 명령)
ü 마우스: FA (Ack)
ü 마우스: AA (셀프 테스트 통과)
ü 마우스: 00 (마우스 ID)
ü 호스트: FF (리셋 명령)
ü 마우스: FA (Ack)
ü 마우스: AA (셀프 테스트 통과)
ü 마우스: 00 (마우스 ID)
ü 호스트: FF (리셋 명령)
ü 마우스: FA (Ack)
ü 마우스: AA (셀프 테스트 통과)
ü 마우스: 00 (마우스 ID)
ü 호스트: F3 (샘플 레이트 설정): 마이크로소프트 인텔리마우스 진입 시도
ü 마우스: FA (Ack): 휠 스크롤 마우스 모드
ü 호스트: C8 (십진수로 200)
ü 마우스: FA (Ack)
ü 호스트: F3 (샘플 레이트 설정)
ü 마우스: FA (Ack)
ü 호스트: 64 (십진수로 100)
ü 마우스: FA (Ack)
ü 호스트: F3 (샘플 레이트 설정)
ü 마우스: FA (Ack)
ü 호스트: 50 (십진수로 80)
ü 마우스: FA (Ack)
ü 호스트: F2 (디바이스 ID 얻기)
ü 마우스: FA (Ack)
ü 마우스: 00 (마우스 ID): 03응답은 마이크로소프트 스크롤 휠 마우스
ü 호스트: F3 (샘플 레이트 설정)
ü 마우스: FA (Ack)
ü 호스트: 0A (십진수로 10)
ü 마우스: FA (Ack)
ü 호스트: F2 (디바이스 ID 얻기)
ü 마우스: FA (Ack)
ü 마우스: 00 (마우스 ID)
ü 호스트: E8 (해상도 설정)
ü 마우스: FA (Ack)
ü 호스트: 03 (8 counts/mm)
ü 마우스: FA (Ack)
ü 호스트: E6 (
ü 마우스: FA (Ack)
ü 호스트: F3 (샘플 레이트 설정)
ü 마우스: FA (Ack)
ü 호스트: 28 (십진수로 40)
ü 마우스: FA (Ack)
ü 호스트: F4 (데이터 리포트 인에이블)
ü 마우스: FA (Ack)
초기화 완료.
왼쪽 키를 눌렀을 때:
ü 마우스: 09 (0000 1001; bit0 = 왼쪽 키, bit3 = 항상 1)
ü 마우스: 00 (X축 움직임 없음)
ü 마우스: 00 (Y축 움직임 없음)
왼쪽 키에서 떼었을 때:
ü 마우스: 08 (0000 1000; bit0 = 왼쪽 키, bit3 = 항상 1)
ü 마우스: 00 (X축 움직임 없음)
ü 마우스: 00 (Y축 움직임 없음)
다음은 컴퓨터(Win98 SE)와 인텔리마우스간 부팅 시 통신이다.
파워 온 리셋:
ü 마우스: AA (셀프 테스트 통과)
ü 마우스: 00 (마우스 ID)
ü 호스트: FF (리셋 명령)
ü 마우스: FA (Ack)
ü 마우스: AA (셀프 테스트 통과)
ü 마우스: 00 (마우스 ID)
ü 호스트: FF (리셋 명령)
ü 마우스: FA (Ack)
ü 마우스: AA (셀프 테스트 통과)
ü 마우스: 00 (마우스 ID)
ü 호스트: FF (리셋 명령)
ü 마우스: FA (Ack)
ü 마우스: AA (셀프 테스트 통과)
ü 마우스: 00 (마우스 ID)
ü 호스트: F3 (샘플 레이트 설정): 마이크로소프트 인텔리마우스 진입 시도
ü 마우스: FA (Ack): 휠 스크롤 마우스 모드
ü 호스트: C8 (십진수로 200)
ü 마우스: FA (Ack)
ü 호스트: F3 (샘플 레이트 설정)
ü 마우스: FA (Ack)
ü 호스트: 64 (십진수로 100)
ü 마우스: FA (Ack)
ü 호스트: F3 (샘플 레이트 설정)
ü 마우스: FA (Ack)
ü 호스트: 50 (십진수로 80)
ü 마우스: FA (Ack)
ü 호스트: F2 (디바이스 ID 얻기)
ü 마우스: FA (Ack)
ü 마우스: 03 (마우스 ID): 03응답은 마이크로소프트 스크롤 휠 마우스
ü 호스트: E8 (해상도 설정)
ü 마우스: FA (Ack)
ü 호스트: 03 (8 counts/mm)
ü 마우스: FA (Ack)
ü 호스트: E6 (
ü 마우스: FA (Ack)
ü 호스트: F3 (샘플 레이트 설정)
ü 마우스: FA (Ack)
ü 호스트: 28 (십진수로 40)
ü 마우스: FA (Ack)
ü 호스트: F4 (데이터 리포트 인에이블)
ü 마우스: FA (Ack)
초기화 완료.
왼쪽 키를 눌렀을 때:
ü 마우스: 09 (0000 1001; bit0 = 왼쪽 키, bit3 = 항상 1)
ü 마우스: 00 (X축 움직임 없음)
ü 마우스: 00 (Y축 움직임 없음)
ü 마우스: 00 (Z축 움직임 없음)
왼쪽 키에서 떼었을 때:
ü 마우스: 08 (0000 1000; bit0 = 왼쪽 키, bit3 = 항상 1)
ü 마우스: 00 (X축 움직임 없음)
ü 마우스: 00 (Y축 움직임 없음)
ü 마우스: 00 (Z축 움직임 없음)
4번째, 5번째 키를 지원하는 마이크로소프트 인텔리마우스 드라이버를 다운로드하고 설치한 후, 실행해보니 다음과 같은 시퀀스로 동작하였다:
이전과 같은 초기화 과정 생략.
ü 호스트: F3 (샘플 레이트 설정): 마이크로소프트 인텔리마우스 진입 시도
ü 마우스: FA (Ack): 휠 스크롤 마우스 모드
ü 호스트: C8 (십진수로 200)
ü 마우스: FA (Ack)
ü 호스트: F3 (샘플 레이트 설정)
ü 마우스: FA (Ack)
ü 호스트: 64 (십진수로 100)
ü 마우스: FA (Ack)
ü 호스트: F3 (샘플 레이트 설정)
ü 마우스: FA (Ack)
ü 호스트: 50 (십진수로 80)
ü 마우스: FA (Ack)
ü 호스트: F2 (디바이스 ID 얻기)
ü 마우스: FA (Ack)
ü 마우스: 03 (마우스 ID): 03응답은 마이크로소프트 스크롤 휠 마우스
ü 호스트: F3 (샘플 레이트 설정): 마이크로소프트 5키 지원 진입 시도
ü 마우스: FA (Ack)
ü 호스트: C8 (십진수로 200)
ü 마우스: FA (Ack)
ü 호스트: F3 (샘플 레이트 설정)
ü 마우스: FA (Ack)
ü 호스트: C8 (십진수로 200)
ü 마우스: FA (Ack)
ü 호스트: F3 (샘플 레이트 설정)
ü 마우스: FA (Ack)
ü 호스트: 50 (십진수로 80)
ü 마우스: FA (Ack)
ü 호스트: F2 (디바이스 ID 얻기)
ü 마우스: FA (Ack)
ü 마우스: 04 (마우스 ID): 04응답은 5-키의 스크롤 휠 마우스
초기화 부분의 나머지는 이전과 동일.
'Old category > 비밀의방' 카테고리의 다른 글
ps2 키보드 스캔 (0) | 2011.10.16 |
---|---|
PS/2 마우스 키보드 프로토콜 (0) | 2011.10.15 |
PS/2 키보드 (0) | 2011.10.15 |
시리얼통신 (synchronous) (0) | 2011.10.15 |
시리얼통신 (unsynchronous) (0) | 2011.10.15 |