KR101340892B1 - 62 키 이상의 엔키 롤오버가 가능한 유에스비 키보드 장치 및 n키 롤오버 기능 제공 방법 - Google Patents

62 키 이상의 엔키 롤오버가 가능한 유에스비 키보드 장치 및 n키 롤오버 기능 제공 방법 Download PDF

Info

Publication number
KR101340892B1
KR101340892B1 KR1020130006385A KR20130006385A KR101340892B1 KR 101340892 B1 KR101340892 B1 KR 101340892B1 KR 1020130006385 A KR1020130006385 A KR 1020130006385A KR 20130006385 A KR20130006385 A KR 20130006385A KR 101340892 B1 KR101340892 B1 KR 101340892B1
Authority
KR
South Korea
Prior art keywords
report
key
usb
keyboard
descriptor
Prior art date
Application number
KR1020130006385A
Other languages
English (en)
Inventor
배정식
조상래
Original Assignee
배정식
주식회사 스카이디지탈
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 배정식, 주식회사 스카이디지탈 filed Critical 배정식
Priority to KR1020130006385A priority Critical patent/KR101340892B1/ko
Application granted granted Critical
Publication of KR101340892B1 publication Critical patent/KR101340892B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/38Information transfer, e.g. on bus
    • G06F13/382Information transfer, e.g. on bus using universal interface adapter
    • G06F13/385Information transfer, e.g. on bus using universal interface adapter for adaptation of a particular data processing system to different peripheral devices
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/01Input arrangements or combined input and output arrangements for interaction between user and computer
    • G06F3/02Input arrangements using manually operated switches, e.g. using keyboards or dials
    • G06F3/023Arrangements for converting discrete items of information into a coded form, e.g. arrangements for interpreting keyboard generated codes as alphanumeric codes, operand codes or instruction codes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2213/00Indexing scheme relating to interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F2213/0042Universal serial bus [USB]

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Human Computer Interaction (AREA)
  • Input From Keyboards Or The Like (AREA)

Abstract

본 발명의 실시예들에 따른 N키 롤오버 USB 키보드 장치는, 제1 및 제2 키보드 어레이를 포함하는 키보드 스캔부, 디스크립터 저장부, USB 장치 컨트롤러 및 리포트 생성부를 포함할 수 있다. 디스크립터 저장부는 USB HID 규격에 근거한 유시지 테이블(usage table)과 범용 직렬 버스(USB) 휴먼 인터페이스 장치(HID) 규격에 따라 호스트 장치로 리포트할 아이템의 필드 크기인 리포트 사이즈(report size), 아이템의 필드들의 개수인 리포트 카운트(report count) k가 선언된 리포트 디스크립터를 포함할 수 있고, USB 장치 컨트롤러는 사용자의 키 눌림에 의한 키 코드들을 아이템으로서 포함하는 리포트를 호스트 장치로 출력할 수 있다. 리포트 생성부는 제1 및 제2 키보드 어레이에서 각각 n 개의 키 눌림 및 m 개의 키 눌림이 식별되면, 리포트 디스크립터에 사전에 선언된 소정의 리포트 카운트 k를 참조하여, 키 눌림 개수의 합 n+m 및 리포트 카운트 k를 비교한 결과에 따라, 리포트 ID, 특수 키 필드, 예비 필드 및 리포트 카운트 k 개의 키 코드 필드들을 포함하는 k+3 바이트 크기의 하나 이상의 리포트를 생성하는 제1 및 제2 리포트 생성 유닛들을 가지며, 생성된 리포트를 USB 장치 컨트롤러로 출력할 수 있다.

Description

62 키 이상의 엔키 롤오버가 가능한 유에스비 키보드 장치 및 N키 롤오버 기능 제공 방법{USB KEYBOARD APPARATUS AND METHOD CAPABLE OF SUPPORTING N-KEY ROLLOVER OVER 62 KEYS}
본 발명은 키보드 장치에 관한 것으로, 더욱 상세하게는, USB 키보드 장치에 관한 것이다.
USB(Universal Serial Bus) 기술은 개인용 컴퓨터(PC)와 같은 호스트 장치가 네 가닥의 케이블만을 이용하여 다양한 주변 장치들과 연결될 수 있게 하는 통신 아키텍처로서, USB는 실제로는 직렬 통신 링크에 불과하고, 호스트 장치의 시동 시에 또는 호스트 장치가 동작 중에 플러그인될 때에 USB 장치를 설정하고 구동하는 것은 USB 프로토콜이다.
USB 장치들은 몇 종류의 장치 클래스로 분류될 수 있다. 각각의 장치 클래스는 공통적인 동작 방식과 프로토콜이 정의되어 있다. USB 장치 클래스들은 예를 들어 디스플레이 클래스, 통신 클래스, 오디오 클래스, 대용량 스토리지 클래스 그리고 휴먼 인터페이스(Human Interface) 클래스 등이 있다.
휴먼 인터페이스 클래스 또는 HID(Human Interface Device) 클래스는 키보드, 마우스, 키패드, 조이스틱, 트랙볼, 게임용 컨트롤러 뿐 아니라, 바코드 리더, 온도계, 계측기 등의 USB 장치도 포함할 수 있다.
USB HID 키보드는 키보드에서 키의 눌림과 해제에 관하여 키 코드들을 하나의 페이로드에 적재한 데이터, 즉 "리포트(report)"를 USB 프로토콜을 이용하여 USB 호스트 장치, 즉 PC에 전달한다.
기존에는 키보드 전용의 PS/2 키보드 포트를 통해 키보드가 눌리거나 눌림 해제되는 키의 키 코드를 전달하였고 키보드 인터럽트로 처리하였기 때문에 호스트 장치는 키의 눌림 코드를 동시적으로 수신할 수 있었다. 따라서, 키보드 장치가 복수의 키 눌림 또는 해제를 정확히 인식할 수 있도록 설계되기만 한다면, 그리고 호스트 장치가 키보드 인터럽트를 충분히 신속하게 처리할 수 있다면, 아무리 많은 키가 동시에 눌려지더라도 호스트 장치가 인식할 수 있는 눌린 키들의 수에는 특별히 제한이 없었다.
눌린 키를 몇 개까지 처리할 수 있는지를 N키 롤오버(N-key rollover)라고 한다. PS/2 인터페이스 키보드가 사용되던 시절에는 N키 롤오버는 키보드 장치 내에서 키 눌림(make)과 해제(break)를 스캔하는 하드웨어 방식의 문제였다. 예를 들어, 매트릭스 방식에서는 특정 키 조합일 때에 인접한 키의 눌림이 인식되지 않은 키 블록킹 또는 고스트 현상이 쉽게 일어날 수 있고, N키 롤오버 문제는 이러한 키 블록킹이나 고스트 현상을 없애는 문제라고 볼 수 있었다.
그러나 USB 방식으로 개발된 USB HID 키보드는 USB 포트를 다른 USB 장치들과 공유하여야 하고, 키 눌림/해제 이벤트는 인터럽트가 아닌 메시지로 처리되기 때문에, 동시에 눌리는 키들의 키 코드를 무제한적으로 전달하는 데에 새로운 제약이 프로토콜 자체에 의해 생겼다.
USB HID 키보드는 ALT, CTRL, SHIFT, GUI 키라는 4 개의 특수 키 코드들과 6 개의 일반 키들의 눌림 이벤트에 관한 키 코드들을 하나의 리포트에 담아 전달하기 때문에 키 누름 이벤트들이 연속하여 6 회를 초과할 경우에는, 6 회 이후의 눌림 이벤트들에 상응하는 키 코드들은 누락 내지 무시된다. 예를 들어, 키보드 A 눌림, S 눌림, D 눌림, F 눌림, G 눌림, F 눌림 이후의 G 키 눌림 이벤트는, 이미 눌린 키들 중에서 해제 이벤트가 있기 전에는, 리포트에 포함되지 못한다.
통상 USB 키보드가 최대 6 개의 일반 키의 눌림/해제 키 코드들의 전달을 지원하는 것은, 점자(Braille) 키보드가 최대 6 개의 점 키를 동시에 눌러야 하기 때문이라는 설명도 있지만, 컴퓨터가 시동할 때 OS의 로딩 전에 구동되는 BIOS(Basic Input/Output System)가 HID 키보드에 대해 4 개의 특수 키와 6 개의 일반 키 코드로 된 8 바이트 리포트만 고정적으로 받아들이도록 설계되기 때문이라는 설명이 유력하다.
이러한 동시 키 제한은 통상적인 사용 환경에서는 큰 문제가 없으나, 복잡한 키 조합을 사용하는 일부 어플리케이션들, 예를 들어 그래픽 편집 툴, 캐드, 게임, 작곡 등에서는 상당한 불편을 초래하기도 하였다.
따라서 이러한 동시 키 제한을 뛰어넘기 위해, 한국특허출원 제2010-0019961호에서는, 키보드 장치 내부적으로 두 개의 논리적인 USB 키보드 장치를 구성하고 6 회 이하의 일반 키 눌림 이벤트 시에는 첫 번째 논리적 USB 키보드에서 리포트를 구성하여 USB 호스트로 전송하지만, 만약 6 회를 초과하는 일반 키의 눌림 이벤트가 있으면, 두 번째 USB 키보드에서 7 회 ~ 12 회까지의 일반 키 눌림 이벤트에 상응하는 키 코드들로 리포트를 구성하여 USB 호스트로 전송하는 방식이 제안되었다. 사용자는 여전히 하나의 물리적인 키보드를 이용하는 것처럼 느끼기 때문에 마치 일반 키 6 개 제약이 해결된 것처럼 보였다.
하지만 호스트 장치는 서로 다른 키보드 장치들에서 키 입력을 받는 것이기 때문에, 키 조합에 따라서는, 7 회 이후의 키 눌림 이벤트가 제대로 처리되지 않을 수 있다.
나아가, 이러한 방식은 13 회 이상의 동시 일반 키 눌림 이벤트들에는 대응할 수 없다.
본 발명이 해결하고자 하는 과제는 N키 롤오버 기능을 실현하면서 특수 키를 무리없이 지원하는 USB 키보드 장치 및 N키 롤오버 기능 제공 방법을 제공하는 데에 있다.
본 발명의 일 측면에 따른 USB 키보드 장치에서 N키 롤오버 기능 제공 방법은,
제1 및 제2 키보드 어레이, 유시지 테이블(usage table) 및 리포트 디스크립터(report descriptor)가 저장된 디스크립터 저장부, USB 장치 컨트롤러 및 제1 및 제2 리포트 생성 유닛들을 가지는 리포트 생성부를 포함하는 USB 키보드 장치에서 N키 롤오버 기능 제공 방법으로서,
상기 리포트 생성부가 상기 제1 및 제2 키보드 어레이에서 동시 입력된 n 개의 키 스캔 코드들 및 m 개의 키 스캔 코드들을 수신하는 단계;
상기 리포트 생성부가, 상기 디스크립터 저장부에 저장된 리포트 디스크립터에 사전에 선언된 소정의 리포트 카운트 k를 참조하여, 키 눌림 개수의 합 n+m 및 리포트 카운트 k를 비교하는 단계;
만약 키 눌림 개수의 합 n+m이 리포트 카운트 k와 같거나 더 작으면, 상기 제1 리포트 생성 유닛이 n 개의 키 스캔 코드들로부터 생성된 n 개의 키 코드들과 m 개의 키 스캔 코드들로부터 생성된 m 개의 키 코드들을 기초로 k+3 바이트로 구성된 하나의 제1 리포트를 생성하는 단계;
만약 키 눌림 개수의 합 n+m이 리포트 카운트 k보다 크면, 상기 제1 리포트 생성 유닛이 n 개의 키 코드들에 기초한 제1 리포트를 생성하고, 상기 제2 리포트 생성 유닛이 m 개의 키 코드들에 기초한 제2 리포트를 생성하는 단계; 및
상기 USB 장치 컨트롤러가 생성된 제1 리포트 또는 제2 리포트를 호스트 장치로 전송하는 단계를 포함하며,
상기 제1 및 제2 리포트 생성 유닛들은 상기 키 스캔 코드들로부터 상기 유시지 테이블을 참조하여 상기 키 코드들을 생성할 수 있다.
일 실시예에 따라, 상기 제1 리포트 또는 제2 리포트는,
리포트 ID, 특수 키 필드, 예비 필드 및 상기 제1 및 제2 키보드 어레이에서 각각 눌린 n+m 의 일반 키들을 위한 k 개의 키 코드 필드들을 포함하도록 생성될 수 있다.
일 실시예에 따라, 상기 제1 리포트 또는 제2 리포트는,
키 눌림 개수의 합 n+m이 리포트 카운트 k보다 클 경우에, 상기 제1 및 제2 키보드 어레이에 포함된 특수 키들의 눌림에 관한 특수 키 필드가 상기 제1 리포트 또는 제2 리포트 내에서 동일한 값을 갖도록 각각 생성될 수 있다.
일 실시예에 따라, 상기 k는 7 이상 61 이하일 수 있다.
본 발명의 다른 측면에 따른 USB 키보드 장치에서 N키 롤오버 기능 제공 방법은,
제1 및 제2 키보드 어레이, 유시지 테이블(usage table) 및 리포트 디스크립터(report descriptor)가 저장된 디스크립터 저장부, USB 장치 컨트롤러 및 제1 및 제2 리포트 생성 유닛들을 가지는 리포트 생성부를 포함하는 USB 키보드 장치에서 N키 롤오버 기능 제공 방법으로서,
상기 USB 장치 컨트롤러가, 호스트 장치 측에서 수신되는 리퀘스트가 Set_Protocol 리퀘스트인지 판단하는 단계;
만약 상기 리퀘스트가 Set_Protocol 리퀘스트이면, 상기 USB 장치 컨트롤러가, 상기 리포트 생성부를 부트 프로토콜 모드로 설정하는 단계;
상기 리포트 생성부의 제1 리포트 생성 유닛이, 상기 제1 사용자의 키 눌림에 따라 특수 키 필드와 예비 필드 및 6 개의 일반 키의 키 코드 필드들을 포함하는 8 바이트 길이의 리포트를 생성하는 단계;
만약 상기 리퀘스트가 Set_Protocol 리퀘스트가 아니면, 상기 USB 장치 컨트롤러가, 상기 호스트 장치 측에서 수신되는 리퀘스트가 Get_Descriptor 리퀘스트인지 판단하는 단계;
만약 상기 리퀘스트가 Get_Descriptor 리퀘스트이고, Get_Descriptor 리퀘스트 내에 포함된 wValue 파트가 가지는 클래스 디스크립터 타입이 Report이면, 상기 USB 장치 컨트롤러는 상기 리포트 생성부를 리포트 프로토콜 모드로 설정하는 단계;
상기 USB 장치 컨트롤러가 상기 호스트 장치의 Get_Descriptor 리퀘스트에 대하여 상기 디스크립터 저장부에 저장된 리포트 디스크립터를 상기 호스트 장치에 응신하는 단계;
상기 제1 및 제2 리포트 생성 유닛들이, 상기 제1 및 제2 키보드 어레이에서 각각 n 개의 키 눌림과 m 개의 키 눌림이 식별되면, 상기 리포트 디스크립터에 사전에 선언된 소정의 리포트 카운트 k를 참조하여, 키 눌림 개수의 합 n+m 및 리포트 카운트 k를 비교한 결과에 따라, 리포트 ID, 특수 키 필드, 예비 필드 및 리포트 카운트 k 개의 키 코드 필드들을 포함하는 k+3 바이트 크기의 하나 이상의 리포트를 생성하는 단계; 및
상기 USB 장치 컨트롤러가 생성된 제1 리포트 또는 제2 리포트를 호스트 장치로 전송하는 단계를 포함하며,
상기 제1 및 제2 리포트 생성 유닛들은 상기 키 스캔 코드들로부터 상기 유시지 테이블을 참조하여 키 코드들을 생성할 수 있다.
일 실시예에 따라, 상기 k+3 바이트 크기의 하나 이상의 리포트를 생성하는 단계는,
상기 리포트 생성부가 상기 제1 및 제2 키보드 어레이에서 동시 입력된 n 개의 키 스캔 코드들 및 m 개의 키 스캔 코드들을 수신하는 단계;
상기 리포트 생성부가, 상기 디스크립터 저장부에 저장된 리포트 디스크립터에 사전에 선언된 소정의 리포트 카운트 k를 참조하여, 키 눌림 개수의 합 n+m 및 리포트 카운트 k를 비교하는 단계;
만약 키 눌림 개수의 합 n+m이 리포트 카운트 k와 같거나 더 작으면, 상기 제1 리포트 생성 유닛이 n 개의 키 코드들과 m 개의 키 코드들을 기초로 k+3 바이트로 구성된 하나의 제1 리포트를 생성하는 단계;
만약 키 눌림 개수의 합 n+m이 리포트 카운트 k보다 크면, 상기 제1 리포트 생성 유닛이 n 개의 키 코드들에 기초한 제1 리포트를 생성하고, 상기 제2 리포트 생성 유닛이 m 개의 키 코드들에 기초한 제2 리포트를 생성하는 단계; 및
상기 USB 장치 컨트롤러가 생성된 제1 리포트 또는 제2 리포트를 호스트 장치로 전송하는 단계를 포함할 수 있다.
본 발명의 또 다른 측면에 따른 N키 롤오버 USB 키보드 장치는,
제1 및 제2 키보드 어레이를 포함하는 키보드 스캔부;
USB HID 규격에 근거한 유시지 테이블(usage table)과 범용 직렬 버스(USB) 휴먼 인터페이스 장치(HID) 규격에 따라 호스트 장치로 리포트할 아이템의 필드 크기인 리포트 사이즈(report size), 아이템의 필드들의 개수인 리포트 카운트(report count) k가 선언된 리포트 디스크립터를 포함하는 디스크립터 저장부;
사용자의 키 눌림에 의한 키 코드들을 아이템으로서 포함하는 리포트를 상기 호스트 장치로 출력하는 USB 장치 컨트롤러; 및
상기 제1 및 제2 키보드 어레이에서 각각 n 개의 키 눌림 및 m 개의 키 눌림이 식별되면, 상기 리포트 디스크립터에 사전에 선언된 소정의 리포트 카운트 k를 참조하여, 키 눌림 개수의 합 n+m 및 리포트 카운트 k를 비교한 결과에 따라, 리포트 ID, 특수 키 필드, 예비 필드 및 리포트 카운트 k 개의 키 코드 필드들을 포함하는 k+3 바이트 크기의 하나 이상의 리포트를 생성하는 제1 및 제2 리포트 생성 유닛들을 가지며, 상기 생성된 리포트를 상기 USB 장치 컨트롤러로 출력하는 리포트 생성부를 포함할 수 있다.
일 실시예에 따라, 상기 리포트 생성부는,
상기 제1 및 제2 키보드 어레이에서 동시 입력된 n 개의 키 스캔 코드들 및 m 개의 키 스캔 코드들을 수신하고, 상기 디스크립터 저장부에 저장된 리포트 디스크립터에 사전에 선언된 소정의 리포트 카운트 k를 참조하여, 키 눌림 개수의 합 n+m 및 리포트 카운트 k를 비교하도록 동작하고,
상기 제1 리포트 생성 유닛은,
만약 키 눌림 개수의 합 n+m이 리포트 카운트 k와 같거나 더 작으면 n 개의 키 코드들과 m 개의 키 코드들을 기초로 k+3 바이트로 구성된 제1 리포트를 생성하고, 만약 키 눌림 개수의 합 n+m이 리포트 카운트 k보다 크면 n 개의 키 코드들에 기초한 제1 리포트를 생성하며,
상기 제2 리포트 생성 유닛은,
만약 키 눌림 개수의 합 n+m이 리포트 카운트 k와 같거나 더 작으면 제2 리포트를 생성하지 않지만, 만약 키 눌림 개수의 합 n+m이 리포트 카운트 k보다 크면 m 개의 키 코드들에 기초한 제2 리포트를 생성하도록 동작할 수 있다.
일 실시예에 따라, 상기 k+3 바이트 크기의 리포트는,
리포트 ID, 특수 키 필드, 예비 필드 및 상기 제1 및 제2 키보드 어레이에서 각각 눌린 n+m 의 일반 키들을 위한 k 개의 키 코드 필드들을 포함하도록 생성될 수 있다.
일 실시예에 따라, 상기 k는 7 이상 61 이하일 수 있다.
일 실시예에 따라, 상기 제1 및 제2 리포트 생성 유닛은, 키 눌림 개수의 합 n+m이 리포트 카운트 k보다 클 경우에, 제1 리포트 또는 제2 리포트에서 상기 제1 및 제2 키보드 어레이에 포함된 특수 키들의 눌림에 관한 특수 키 필드가 동일한 값을 갖도록 제1 리포트 또는 제2 리포트를 각각 생성하도록 동작할 수 있다.
본 발명의 N키 롤오버가 가능한 USB 키보드 장치 및 N키 롤오버 기능 제공 방법에 따르면, 기존의 N키 롤오버 USB 키보드 장치들이 한 번에 연속하는 12 개의 일반 키 눌림을 지원하는 것에 그치는 반면에, 내부적으로 두 개의 논리적인 61키 롤오버 키보드 장치들을 가지고 있어서, 62 개 이상 내지 키보드 장치 내의 모든 키들의 동시 입력에 대응할 수 있다.
본 발명의 N키 롤오버가 가능한 USB 키보드 장치 및 N키 롤오버 기능 제공 방법에 따르면, 키 조합에 따라 특정 키들이 특정 조건에서 함께 눌리지 않는 것처럼 인식되는 오류를 방지할 수 있다.
도 1은 본 발명의 일 실시예에 따른 N키 롤오버 USB 키보드 장치를 예시한 블록도이다.
도 2는 본 발명의 일 실시예에 따른 N키 롤오버 USB 키보드 장치에서 N키 롤오버 기능 제공 방법을 예시한 순서도이다.
도 3은 본 발명의 일 실시예에 따른 N키 롤오버 USB 키보드 장치에서 N키 롤오버 기능 제공 방법 중의 리포트 생성 단계를 구체적으로 예시한 순서도이다.
본문에 개시되어 있는 본 발명의 실시예들에 대해서, 특정한 구조적 내지 기능적 설명들은 단지 본 발명의 실시예를 설명하기 위한 목적으로 예시된 것으로, 본 발명의 실시예들은 다양한 형태로 실시될 수 있으며 본문에 설명된 실시예들에 한정되는 것으로 해석되어서는 아니 된다.
이하, 첨부한 도면들을 참조하여, 본 발명의 바람직한 실시예를 보다 상세하게 설명하고자 한다. 도면상의 동일한 구성요소에 대해서는 동일한 참조부호를 사용하고 동일한 구성요소에 대해서 중복된 설명은 생략한다.
본 발명에서 키보드 장치는 명백히 달리 해석되는 경우를 제외하면 통상적으로 키보드 장치의 오른쪽에 배치되는, 숫자 키들과 연산 키들이 표기된 키패드도 포함하며, 또한 예를 들어 키보드 스캔 신호가 언급될 때에, 키보드 스캔 신호는 키패드 스캔 신호도 포괄한다고 이해되어야 한다.
본 발명의 명세서에서 "동시 입력"이란 시간적으로 동시적인 키 누름 뿐 아니라, 어느 키를 누른 후 아직 떼지 않은 상태에서 다른 키를 누르는 경우도 포함한다.
본 발명의 명세서에서, 용어 "N키 롤오버"의 "N"은 복수의 키를 의미하는 관용적인 명칭이고, 특정한 의미를 갖는 변수 N과 구별되어 이해되어야 한다.
도 1은 본 발명의 일 실시예에 따른 N키 롤오버 USB 키보드 장치를 예시한 블록도이다.
도 1을 참조하면, N키 롤오버 USB 키보드 장치(10)는 키보드 스캔부(11), 리포트 생성부(12), 디스크립터 저장부(13), USB 장치 컨트롤러(14) 및 USB 인터페이스(15)를 포함할 수 있다.
USB 장치는 통상적으로 호스트 장치와 통신하기 위해 컨트롤(control) 파이프, 인터럽트(interrupt) 파이프, 이소크로너스(isochronous) 파이프 및 벌크(bulk) 파이프와 같은 여러 수단을 이용하는데, USB HID 규격 1.11 버전에 따르면, USB HID 클래스 장치는 이러한 파이프들 중에서도 특히 컨트롤 파이프와 인터럽트 파이프만을 이용한다.
IN 및 OUT 컨트롤 파이프는 장치 리스트 수집(enumeration)에 필요하고, IN 인터럽트 파이프는 리포트 용도로 사용된다. OUT 인터럽트 파이프의 사용은 설계에 따라 선택적(optional)인 것으로 규정되어 있어서, USB 키보드 장치에서 OUT 인터럽트 파이프를 사용하는 것은 호환성 측면에서는 불리할 수 있다.
그런데, IN 인터럽트 파이프의 최대 페이로드(payload)가 64 바이트이기 때문에, 키 입력을 위한 리포트를 최대 크기인 64 바이트로 정한다고 하여도, 특수 키 8 키를 위한 1 바이트 및 예비된 1 바이트를 제외하면, 이론적으로 HID 클래스의 USB 키보드 장치에서 최대 일반 키 입력은 62 키로 제한된다고 할 수 있다.
본 발명의 N키 롤오버 USB 키보드 장치(10)는 이러한 이론상의 62 키 제한을 극복하고 현용하는 개인용 컴퓨터용 키보드 장치에 장착되는 101 키, 106 키 등의 키보드 배열 뿐 아니라, 최대 122 키까지의 키보드의 동시 입력을 목표로 한다.
이를 위해 먼저, 적어도 두 개로 분할된 키보드 어레이, 예를 들어 제1 및 제2 키보드 어레이(111, 112)를 가지는 키보드 스캔부(11)가 제공된다.
제1 및 제2 키보드 어레이(111, 112)는 전체 키보드 어레이를 각각 N 개 및 M 개의 일반 키들을 갖도록 분할한 두 개의 어레이 영역에서 각각 사용자의 키 누름을 인식한다.
이때, 특수 키들은 제1 및 제2 키보드 어레이(111, 112) 중 어느 한 키보드 어레이에 포함되도록 설계될 수도 있고, 또는 적절히 분배되도록, 예를 들어 왼쪽의 Ctrl 키, Alt 키, Shift 키 및 GUI 키는 제1 키보드 어레이(111)에 속하도록, 또한 오른쪽의 Ctrl 키, Alt키, Shift 키 및 Application 키는 제2 키보드 어레이(112)에 속하도록 설계될 수도 있다.
실시예에 따라서는, 특수 키들은 제1 및 제2 키보드 어레이(111, 112)에서 공유되어 함께 인식되도록 설계될 수도 있다.
각각의 키보드 어레이(111, 112)는 예를 들어 사용자가 키 캡을 누를 때 접점이 접촉하면서 활성화되는 전기 신호를 검출하여 어떤 키 캡이 눌렸는지(make) 식별하며 또는 반대로 사용자가 키 캡에서 손을 뗐을 때에는 접점이 탈락하면서 비활성화되는 전기 신호를 검출하여 어떤 키 캡이 눌림 해제되었는지(break) 식별할 수 있다.
각각의 키보드 어레이(111, 112)는, 고가인 키보드의 경우에는 모든 키들에 대해 개별적인 접점과 도체 라인을 이용하도록 설계되기도 하지만, 저렴하게 제작할 경우에는 매트릭스 형태로 접점들이 행 또는 열 별로 도체 라인들을 공유하도록 설계될 수도 있다.
제1 및 제2 키보드 어레이(111, 112)는 눌림 또는 눌림 해제가 식별될 때마다 키들의 키 스캔 코드들을 스캐닝하여 리포트 생성부(12)로 출력한다.
리포트 생성부(12)는 제1 및 제2 리포트 생성 유닛들(121, 122)을 포함하며,제1 및 제2 리포트 생성 유닛들(121, 122)이 키 코드들을 기초로, 나중에 설명될 리포트 디스크립터(132) 내에 선언되는 리포트 카운트 값 k에 따라 결정되는, k+3 바이트 크기의 하나 이상의 리포트를 각각 생성한다.
실시예에 따라, 리포트 생성부(12)의 제1 및 제2 리포트 생성 유닛들(121, 122)은 USB 장치 컨트롤러(14)가 부트 프로토콜(Boot protocol)인지 또는 리포트 프로토콜(Report protocol)에 따라 설정한 동작 모드에 따라, 부트 프로토콜 모드일 때에는 규격에서 지정된 크기의 리포트를 생성하고 리포트 프로토콜 모드일 때에는 선언된 크기의 리포트를 각각 생성할 수 있다.
특히, 리포트 생성부(12)가 부트 프로토콜 모드로 설정된 때에는, 제1 리포트 생성 유닛(121)이 키보드 스캔부(11)로부터 스캐닝된 키 스캔 코드들을 기초로 키 코드들을 생성하고, 8 개의 특수 키, 예비 필드 및 최대 6 개의 일반 키의 키 코드 필드들로 구성되는 8 바이트의 리포트를 생성할 수 있다. 이때, 6 개의 일반 키는 제1 및 제2 키보드 어레이(111, 112)에서 각각 눌린 키들을 종합한 것이기 때문에, 리포트 생성부(12)는, 제1 및 제2 키보드 어레이(111, 112)의 키 눌림의 합이 6 개를 초과할 경우 즉 ErrorRollover 시에는, 본래의 키 코드들이 아닌 팬텀 상태를 의미하는 아이템(01H)으로써 8 바이트 길이의 리포트를 구성한다.
또한 리포트 생성부(12)가 리포트 프로토콜 모드로 설정된 때에는, 제1 및 제2 리포트 생성 유닛들(121, 122)이 키보드 스캔부(11)로부터 스캐닝된 키 스캔 코드들을 기초로 키 코드들을 생성하고, 디스크립터 저장부(13) 내에 저장된 리포트 디스크립터(132)에서 선언된 규격에 따라 8 개의 특수 키, 예비 필드 및 7 개 이상의 일반 키의 키 코드 필드들로 구성되는 k+3 바이트의 하나 이상의 리포트를 생성한다.
이때, 리포트 생성부(12)의 제1 및 제2 리포트 생성 유닛들(121, 122)은 키 스캔 코드로부터 키 코드를 생성하기 위해 디스크립터 저장부(13)에 저장된 USB 유시지 테이블(usage table)(131)의 유시지 페이지(usage page) 0x07을 참조할 수 있다. 유시지 테이블은 USB HID 규격에 근거하여 구성될 수 있다.
예를 들어 스캔 코드 셋 2에서 q의 make 스캔 코드는 0xE015이고 break 스캔 코드는 0xE0F015이며, 유시지 페이지에서 q의 키 코드는 14(Hex)이다. 리포트 생성부(12)는 만약 스캔 코드 0xE015가 식별되면 "q"가 눌린 것으로 인식하고 리포트에 키 코드 14H를 포함시키며, 스캔 코드 0xE0F015가 식별되면 눌렸던 "q"가 해제된 것으로 인식하고 리포트에서 키 코드 14H를 제거한다. BIOS는 리포트에 키 코드 14H가 포함되면 "q"가 눌린 것으로 이해하고, 이전 리포트에 있던 키 코드 14H가 현재 리포트에서 사라지면 "q"가 더 이상 눌리지 않는다고 이해한다.
하나의 리포트는 리포트 ID용으로 1 바이트, 특수 키 용도로 1 바이트, 예비된 1 바이트 및 k 개의 일반 키를 위한 k 바이트로 구성될 수 있다. 이때, 하나의 리포트는 최대 64 바이트이므로, k는 7 이상 61 이하의 정수라고 할 수 있다. 통상적으로 USB 장치가 하나의 논리적 엔드포인트(endpoint)를 가지므로 리포트 ID가 별도로 필요하지 않지만, 본 발명에서는 하나의 USB 키보드 장치 내에 각자 리포트를 보낼 수 있는 적어도 두 개의 논리적 엔드포인트들, 즉 리포트 생성 유닛들이 존재하므로, 리포트 ID를 위한 1 바이트가 더 필요하다는 점에 유의한다.
구체적으로, 리포트 생성부(12)의 제1 및 제2 리포트 생성 유닛들(121, 122)은 제1 및 제2 키보드 어레이(111, 112)에서 각각 n 개의 키 눌림 및 m 개의 키 눌림을 동시적으로 식별하면, 스캐닝된 키 스캔 코드들을 기초로 키 코드들을 생성하고, 키 눌림 개수의 합 n+m 및 리포트 카운트 k를 비교한 결과에 따라, 키 코드들에 기초한 하나 또는 복수 개의 k+3 바이트 크기의 리포트를 생성한다.
더 구체적으로, 만약 제1 키보드 어레이(111)의 키 코드들의 수 n과 제2 키보드 어레이(112)의 키 코드들의 수 m의 합 n+m이 리포트 카운트 k와 같거나 또는 더 작으면, 리포트 생성부(12)의 제1 리포트 생성 유닛(121)은 제1 키보드 어레이(111)의 키 코드들과 제2 키보드 어레이(112)의 키 코드들을 기초로 k+3 바이트로 구성된 하나의 제1 리포트를 생성한다. 이때, n은 N과 같거나 더 작고, m은 M과 같거나 더 작을 수 있다.
구체적으로, k+3 바이트의 제1 리포트는 제1 키보드 어레이(111)의 리포트 ID를 위한 1 바이트와, 제1 및 제2 키보드 어레이(111, 112)의 특수 키들을 위한 1 바이트, 예비된 1 바이트 및 제1 및 제2 키보드 어레이(111, 112)에서 각각 눌린 n+m 개의 일반 키를 위한 k 바이트로 구성될 수 있다.
예를 들어, k = 61일 경우에, 제1 키보드 어레이(111)에서 40 개의 키가 동시에 눌려진 상태이고 제2 키보드 어레이(112)에서 20 개의 키가 동시에 눌려진 상태라면, 40+20 ≤ 61이므로, 제1 및 제2 키보드 어레이(111, 112)에서 동시에 눌린 총 60 개의 키에 대한 키 코드들을 포함하여 64 바이트 크기의 제1 리포트가 생성될 수 있다.
또한 만약 제1 키보드 어레이(111)의 키 코드들의 수 n과 제2 키보드 어레이(112)의 키 코드들의 수 m의 합 n+m이 리포트 카운트 k보다 크면, 리포트 생성부(12)의 제1 리포트 생성 유닛(121)은 제1 키보드 어레이(111)의 n 개의 키 코드들에 기초한 제1 리포트를 생성하고, 리포트 생성부(12)의 제2 리포트 생성 유닛(122)은 제2 키보드 어레이(112)의 m 개의 키 코드들에 기초한 제2 리포트를 생성할 수 있다.
구체적으로, k+3 바이트의 제1 리포트는 제1 키보드 어레이(111)의 리포트 ID를 위한 1 바이트와, 제1 및 제2 키보드 어레이(111, 112)의 특수 키들을 위한 1 바이트, 예비된 1 바이트 및 제1 키보드 어레이(111)에서 눌린 n 개의 일반 키를 위한 k 바이트로 구성될 수 있다.
또한, 구체적으로, k+3 바이트의 제2 리포트는 제2 키보드 어레이(112)의 리포트 ID를 위한 1 바이트와, 제1 및 제2 키보드 어레이(111, 112)의 특수 키들을 위한 1 바이트, 예비된 1 바이트 및 제2 키보드 어레이(112)에서 눌린 m 개의 일반 키를 위한 k 바이트로 구성될 수 있다.
예를 들어, k = 61일 경우에, 제1 키보드 어레이(111)에서 40 개의 키가 동시에 눌려진 상태이고 제2 키보드 어레이(112)에서 30 개의 키가 동시에 눌려진 상태라면, 40+30 > 61이므로, 제1 키보드 어레이(111)에서 눌린 40 개의 키에 대한 키 코드들을 포함하는 64 바이트 크기의 제1 리포트와, 제2 키보드 어레이(112)에서 눌린 30 개의 키에 대한 키 코드들을 포함하는 64 바이트 크기의 제2 리포트가 각각 생성될 수 있다.
이때, 특수 키들은, 제1 키보드 어레이(111)와 제2 키보드 어레이(112) 중 어디에 포함되더라도, 제1 및 제2 리포트 내에 동일하게 포함될 수 있다.
이렇게 하여, 본 발명의 N키 롤오버 USB 키보드 장치(10)는 k=61일 경우에 최대 122 개의 동시적인 일반 키 눌림과 8 개의 특수 키 눌림에 대응할 수 있다.
디스크립터 저장부(13)는 N키 롤오버 USB 키보드 장치(10)가 USB HID 장치로서 자신을 규정하는 디스크립터들, 예를 들어, 디바이스 디스크립터(device descriptor), 설정 디스크립터(configuration descriptor), 인터페이스 디스크립터(interface descriptor), 엔드포인트 디스클립터(endpoint descriptor), HID 디스크립터(HID descriptor), 리포트 디스크립터(report descriptor), 피지컬 디스크립터(physical descriptor) 및 스트링 디스크립터(string descriptor)들을 저장할 수 있다.
이러한 디스크립터들은 각종 설정 정보들이 선언되어 있는 일종의 문서로서, 특히 이러한 디스크립터들 중에 리포트 디스크립터(132)는, USB HID 장치가 USB 포트에 연결될 경우에 HID 클래스 드라이버에 전달되어, USB HID 장치가 어떻게 구성된 아이템들을 어떻게 전달하는지를 호스트 장치의 HID 클래스 드라이버에 알려주는 역할을 한다.
리포트 디스크립터(132)는 리포팅할 아이템을 참조할 유시지 페이지 번호와, 아이템의 필드 크기인 리포트 사이즈(report size), 아이템의 필드들의 개수인 리포트 카운트(report count) 등의 설정 정보들을 선언하며, USB 장치 컨트롤러(14)가 이 디스크립터 저장부(13)로부터 리포트 디스크립터(132)를 읽어 HID 클래스 드라이버에 전송한다.
만약 리포트 디스크립터(132)에서 선언된 리포트 사이즈(비트)가 8이고 리포트 카운트 k가 61이며, 유시지 페이지가 키 코드이면, 61 개 일반 키 코드를 아이템으로 가지고 1 아이템당 8 비트, 즉 1 바이트인, 총 64 바이트의 리포트(리포트 ID를 위한 1 바이트, 8 개의 특수 키를 위한 1 바이트 및 예비 필드를 위한 1 바이트 포함)를 생성하는 것이 가능하다.
리포트 카운트 k의 크기는 USB의 전체 대역폭 중 키보드 장치(10)가 차지할 수 있는 대역폭, 키보드 장치(10)의 컨트롤러 성능, 호스트 장치의 인터럽트 내지 메시지 처리 성능이나, 키보드 장치(10)의 전력 소모 내지 어플리케이션 호환성 등을 고려하여 결정될 수 있다.
한편, USB 장치 컨트롤러(14)는 USB 인터페이스(15)와 호스트 장치 사이에 전기적 연결을 수립하고, 호스트 장치로부터 수신되는 다양한 리퀘스트들에 대해 응답할 수 있으며, 나아가 프로토콜 설정부(141)에서 호스트 장치로부터 수신되는 프로토콜 리퀘스트의 종류 및 상태에 따라 리포트 생성부(12)를 부트 프로토콜 모드 또는 리포트 프로토콜 모드 중 하나의 동작 모드로 설정한다.
호스트 장치에서 BIOS 또는 OS가 구동되면, 통상적으로 BIOS나, OS의 HID 클래스 드라이버는 USB 키보드 장치(10)에 대해 Get_Descriptor 리퀘스트를 발송한다. USB 장치 컨트롤러(14)는 Get_Descriptor 리퀘스트가 수신되면, 디스크립터 저장부(13)에 저장된 디스크립터들을 호스트 장치에 전달한다.
또한, OS의 HID 클래스 드라이버는 USB 키보드 장치(10)에 대해 일부 디스크립터를 변경하고자 할 때에 Set_Descriptor 리퀘스트를 발송할 수도 있다. USB 장치 컨트롤러(14)는 Set_Descriptor 리퀘스트가 수신되면, 변경된 디스크립터를 디스크립터 저장부(13)에 저장할 수 있다.
그 외에도, OS의 HID 클래스 드라이버는 USB 키보드 장치(10)에 대해 특정 리포트를 컨트롤 파이프를 통해 송신하라고 지시하는 Get_Report 리퀘스트, 호스트 장치로부터 특정 리포트를 USB 키보드 장치(10)에 전달하는 Set_Report 리퀘스트, USB 키보드 장치(10)로부터 현재의 아이들 비율을 검출하라는 Get_Idle 리퀘스트 및 특정 이벤트나 시간이 지날 때까지 인터럽트 IN 파이프를 통한 특정 리포트를 억제하는 Set_Idle 리퀘스트 등을 발송할 수 있다.
그러나, 리퀘스트는 발송 주체가 OS인지 BIOS인지에 관한 직접적인 정보를 포함하는 것도 아니고, 또한 OS가 BIOS로부터 호스트 통제 권한을 넘겨 받는 과정을 USB 키보드 장치가 통보받는다거나 하지 않기 때문에, USB 키보드 장치(10)는 호스트 장치가 현재 BIOS에 의해 통제되는 중인지 OS에 의해 통제되는 중인지를 직접적으로 알 수 없다.
그럼에도 불구하고, 본 발명의 발명자는 USB 키보드 장치(10)는 리퀘스트들을 구성하는 파트들(parts)을 분석하여 호스트 장치가 BIOS 통제 하인지, OS 통제 하인지 강하게 추정할 수 있다는 점을 발견하였다.
통상적으로, BIOS가 시스템의 제어 권한을 가진 때에는 Set_Protocol 리퀘스트를 USB 키보드 장치(10)에 발송하고, 또한 Get_descriptor 리퀘스트를 발송하지만 리포트 포맷을 묻지 않는다는 점과, 반면에 OS가 시스템의 제어를 시작하면 Get_Descriptor 리퀘스트를 USB 키보드 장치(10)에 발송하면서 리포트 포맷을 질의하지만 Set_Protocol 리퀘스트는 사실상 발송하지 않는다는 점이 관찰되었다.
먼저 BIOS가 제어 권한을 가질 때에, BIOS는 PC와 같은 호스트 장치의 시동 시에 먼저 호스트 장치에 연결된 USB 장치들 중에서 부트 장치(boot devices)로 동작할 수 있다고 설정된 USB 장치들의 리스트를 작성(enumeration)한다.
BIOS는 부트 장치로 리스트된 USB 장치들에 대해, 현재 설정된 프로토콜의 종류를 응답하라는 Get_Protocol 리퀘스트, 프로토콜을 부트 프로토콜로 설정하라는 Set_Protocol 리퀘스트, 그리고 Get_Descriptor 리퀘스트를 보낼 수 있다.
만약 USB 키보드 장치(10)가 프로토콜을 부트 프로토콜로 설정하라는 Set_Protocol 리퀘스트를 수신하면, 명백히 이 리퀘스트는 BIOS에 의해 발송된 것이라고 판정할 수 있다.
또한 OS와 마찬가지로 BIOS도 Get_Descriptor 리퀘스트를 USB 키보드 장치(10)에 보내기는 하지만, BIOS는 부팅 시에 연결되는 부트 장치로서의 키보드 장치에 대해 부트 프로토콜에 따라 리포트할 것으로 간주하기 때문에 USB 키보드 장치(10)에 리포트 포맷을 묻지 않는다. 따라서, BIOS가 제어 권한을 가진 동안에, wValue 파트가 Report를 의미하는 0x22인 Get_Descriptor 리퀘스트가 수신될 가능성은 거의 없다.
반면에, 호스트 장치에서 OS가 구동되면, OS의 HID 클래스 드라이버가 USB 키보드 장치(10)에 대해 Get_Descriptor 리퀘스트를 발송할 수 있다. 이때, OS는 Get_Descriptor 리퀘스트를 통해 USB 키보드 장치(10)의 리포트 포맷을 알려고 하는 것인데, 이를 위해서는 Get_Descriptor 리퀘스트의 wValue 파트가 Report를 의미하는 0x22 값을 가져야 한다.
따라서, 만약 Get_Descriptor 리퀘스트의 wValue 파트가 Report를 의미하는 0x22라면, Get_Descriptor 리퀘스트는 OS에 의해 발송된 것이라고 판정할 수 있다.
따라서, 만약 호스트 장치가 Set_Protocol 리퀘스트를 수신하면, USB 장치 컨트롤러(14)의 프로토콜 설정부(141)는 호스트 장치가 현재 BIOS가 제어 권한을 가지는 부트 상태로 간주할 수 있다. 특히 Set_Protocol 리퀘스트 내에 설정된 wValue 파트가 "0", 즉 부트 프로토콜이면, USB 장치 컨트롤러(14)의 프로토콜 설정부(141)는 리포트 생성부(12)를 부트 프로토콜 모드로 설정할 수 있다. USB 키보드 장치(10)가 부트 프로토콜로 설정되면, 사용자에 의한 키 입력 시에는 특수 키 필드와 예비 필드 및 6 개의 일반 키의 키 코드 필드들을 포함하는 8 바이트 길이의 리포트가 생성될 것이다.
이때, 리포트 생성부(12)는, 제1 및 제2 키보드 어레이(111, 112)의 키 눌림의 합이 6 개를 초과할 경우, 즉 ErrorRollover 시에는, 본래의 키 코드들이 아닌 팬텀 상태를 의미하는 아이템(01H)으로써 8 바이트 길이의 리포트를 구성한다.
실시예에 따라서, 프로토콜 설정부(141)가 부트 상태인지 판단을 하는 조건으로서 전원이 새로 들어오거나 재부팅으로 USB 호스트 컨트롤러가 초기화되었으면서 다른 종류의 리퀘스트가 수신되지 않은 조건을 더 부가할 수도 있다.
만약 호스트 장치가 Get_Descriptor 리퀘스트를 수신하고, 또한 Get_Descriptor 리퀘스트 내에 wVaule 파트가 가지는 클래스 디스크립터 타입이 Report 즉 0x22이면, USB 장치 컨트롤러(14)의 프로토콜 설정부(141)는 호스트 장치가 현재 OS가 제어 권한을 가지는 통상 상태라고 간주할 수 있다.
이에 따라 USB 장치 컨트롤러(14)의 프로토콜 설정부(141)는 리포트 생성부(12)를 리포트 프로토콜 모드로 설정하고 리포트 디스크립터(132)에 선언된 리포트 카운트 k를 리포트 생성부(12)에 제공함으로써, 제1 및 제2 리포트 생성 유닛들(121, 122)이 리포트 ID, 특수 키 8개와 예비 필드 및 7 개 이상의 일반 키의 키 코드 필드들을 포함하는 하나 또는 복수 개의 k+3 바이트의 리포트를 각각 생성하도록 한다.
이어서, USB 장치 컨트롤러(14)는 생성된 리포트를 USB 인터페이스(15)를 통해 호스트 장치로 전송한다.
도 2는 본 발명의 일 실시예에 따른 N키 롤오버 USB 키보드 장치에서 N키 롤오버 기능 제공 방법을 예시한 순서도이다.
먼저, N키 롤오버 USB 키보드 장치(10)는 제1 및 제2 키보드 어레이(111, 112)를 포함하며, 제1 및 제2 키보드 어레이(111, 112)는 전체 키보드 어레이를 각각 N 개 및 M 개의 일반 키들을 갖도록 분할한 두 개의 영역에서 각각 사용자의 키 누름을 인식한다.
또한, 리포트 생성부(12)는 제1 및 제2 리포트 생성 유닛들(121, 122)이 키 코드들을 기초로, 나중에 설명될 리포트 디스크립터(132) 내에 선언되는 리포트 카운트 값 k에 따라 결정되는, k+3 바이트 크기의 하나 이상의 리포트를 각각 생성한다.
도 2를 참조하면, 단계(S21)에서, USB 장치 컨트롤러(14)는 호스트 장치 측에서 수신되는 리퀘스트가 Set_Protocol 리퀘스트인지 판단한다.
구체적으로, 만약 호스트 장치 측에서 수신된 리퀘스트가 Set_Protocol 리퀘스트이고, Set_Protocol 리퀘스트 내에 포함된 프로토콜 타입 wValue 파트가 "0"으로서 Boot Protocol를 가리키면, 단계(S22)에서 USB 장치 컨트롤러(14)는 리포트 생성부(12)를 부트 프로토콜 모드로 설정하고, 단계(S23)에서 리포트 생성부(12)의 제1 리포트 생성 유닛(121)은 특수 키 8개와 예비 필드 및 6 개의 일반 키의 키 코드 필드들을 포함하는 8 바이트 길이의 리포트를 생성한다. 이때, 6 개의 일반 키는 제1 및 제2 키보드 어레이(111, 112)에서 각각 눌린 키들을 종합한 것이기 때문에, 리포트 생성부(12)는, 제1 및 제2 키보드 어레이(111, 112)의 키 눌림의 합이 6 개를 초과할 경우 즉 ErrorRollover 시에는, 본래의 키 코드들이 아닌 팬텀 상태를 의미하는 아이템(01H)으로써 8 바이트 길이의 리포트를 구성한다.
만약 호스트 장치 측에서 수신된 리퀘스트가 Set_Protocol 리퀘스트가 아니면, 단계(S24)에서, USB 장치 컨트롤러(14)는 호스트 장치 측에서 수신되는 리퀘스트가 Get_Descriptor 리퀘스트인지 판단한다.
만약 단계(S24)에서 호스트 장치 측에서 수신되는 리퀘스트가 Get_Descriptor 리퀘스트이고 또한 Get_Descriptor 리퀘스트 내에 포함된 wValue 파트가 가지는 클래스 디스크립터 타입이 Report이면, 단계(S25)에서, USB 장치 컨트롤러(14)는 리포트 생성부(12)를 리포트 프로토콜 모드로 설정한다.
단계(S26)에서, USB 장치 컨트롤러(14)는 호스트 장치의 Get_Descriptor 리퀘스트에 대하여 소정의 리포트 카운트 k가 선언된 리포트 디스크립터(132)를 호스트 장치에 응신한다.
단계(S27)에서, 리포트 생성부(12)의 제1 및 제2 리포트 생성 유닛들(121, 122)은 제1 및 제2 키보드 어레이(111, 112)에서 각각 n 개의 키 눌림과 m 개의 키 눌림이 식별되면, 리포트 디스크립터(132)에 사전에 선언된 소정의 리포트 카운트 k를 참조하여, 키 눌림 개수의 합 n+m 및 리포트 카운트 k를 비교한 결과에 따라, 리포트 ID, 특수 키, 예비 필드 및 리포트 카운트 k 개의 키 코드 필드들을 포함하는 k+3 바이트 크기의 하나 이상의 리포트를 생성한다. 이때, 키 코드들은 스캐닝된 키 스캔 코드들을 기초로 유시지 테이블(171)을 참조하여 생성될 수 있다.
단계(S28)에서, USB 장치 컨트롤러(14)는 생성된 리포트를 USB 인터페이스(15)를 통해 호스트 장치로 전송한다.
이로써, N키 롤오버 USB 키보드 장치(10)는 호스트 장치의 제어 권한을 가지는 주체가 BIOS인지 OS인지인지 판단하고, BIOS가 제어 권한을 갖는 동안에는 8 바이트 크기의 리포트를 호스트 장치로 전송하지만, OS가 제어 권한을 갖는 동안에는 9 바이트 이상 최대 128 바이트 크기의 리포트, 다시 말해 7 개 이상 최대 122개의 일반 키의 눌림에 대응하는 리포트를 호스트 장치로 전송할 수 있다.
한편, 단계(S27)의 리포트 생성 단계를 좀더 구체적으로 예시하기 위해, 도 3을 참조하면, 단계(S271)에서, 리포트 생성부(12)가 제1 및 제2 키보드 어레이(111, 112)에서 동시 입력된 n 개의 키 스캔 코드들 및 m 개의 키 스캔 코드들을 수신한다.
이어서, 단계(S272)에서, 리포트 생성부(12)는 디스크립터 저장부(13)에 저장된 리포트 디스크립터(132)에 사전에 선언된 소정의 리포트 카운트 k를 참조하여, 제1 및 제2 키보드 어레이(111, 112)에서 각각 동시 입력되는 키 눌림 개수의 합 n+m 및 리포트 카운트 k를 비교한다.
만약 단계(S272)에서 키 눌림 개수의 합 n+m이 리포트 카운트 k와 같거나 더 작으면 단계(S273)로 진행하고, 그렇지 않으면 단계(S274)으로 진행한다.
단계(S273)에서, 리포트 생성부(12)의 제1 리포트 생성 유닛(121)은 n 개의 키 코드들과 m 개의 키 코드들을 기초로 k+3 바이트로 구성된 하나의 제1 리포트를 생성한다. 이때, 키 코드들은 스캐닝된 키 스캔 코드들을 기초로 유시지 테이블(171)을 참조하여 생성될 수 있다.
구체적으로 제1 리포트는 제1 키보드 어레이(111)의 리포트 ID를 위한 1 바이트와, 제1 및 제2 키보드 어레이(111, 112)의 특수 키들을 위한 1 바이트, 예비된 1 바이트 및 제1 및 제2 키보드 어레이(111, 112)에서 각각 눌린 n+m 개의 일반 키를 위한 k 바이트로 구성될 수 있다.
단계(S274)에서, 리포트 생성부(12)의 제1 리포트 생성 유닛(121)은 n 개의 키 코드들에 기초한 제1 리포트를 생성하고, 제2 리포트 생성 유닛(122)은 m 개의 키 코드들에 기초한 제2 리포트를 생성할 수 있다.
구체적으로, 제1 리포트는 제1 키보드 어레이(111)의 리포트 ID를 위한 1 바이트와, 제1 및 제2 키보드 어레이(111, 112)의 특수 키들을 위한 1 바이트, 예비된 1 바이트 및 제1 키보드 어레이(111)에서 눌린 n 개의 일반 키를 위한 k 바이트로 구성될 수 있다.
또한, 구체적으로, 제2 리포트는 제2 키보드 어레이(112)의 리포트 ID를 위한 1 바이트와, 제1 및 제2 키보드 어레이(111, 112)의 특수 키들을 위한 1 바이트, 예비된 1 바이트 및 제2 키보드 어레이(112)에서 눌린 m 개의 일반 키를 위한 k 바이트로 구성될 수 있다.
이로써, 종래에 두 개의 리포트를 생성하는 키보드에서는 동시 입력 가능한 일반 키 눌림이 최대 12 개로 제한되는 반면에, 본 발명의 N키 롤오버 USB 키보드 장치는 선언된 리포트 카운트 k의 크기에 따라, 7 개 이상 최대 122 개까지의 동시적인 일반 키 눌림에 대응할 수 있다.
또한 종래에 두 개 이상의 분할된 키보드 어레이를 이용하는 경우에 서로 다른 키보드 어레이에 위치한 일반 키와 특수 키의 특정 조합 시에 오류가 발생할 가능성이 있는 반면에, 본 발명의 N키 롤오버 USB 키보드 장치는 키보드 어레이가 두 개임에도 불구하고 서로 다른 키보드 어레이에 위치한 일반 키들을 누르더라도 특수 키와 일반 키의 조합 시에 오류가 발생하지 않는다.
이상과 같이 본 발명은 비록 한정된 실시예와 도면에 의해 설명되었으나, 본 발명이 상기의 실시예에 한정되는 것은 아니며, 이는 본 발명이 속하는 분야에서 통상의 지식을 가진 자라면 이러한 기재로부터 다양한 수정 및 변형이 가능하다. 따라서, 본 발명의 사상은 아래에 기재된 특허청구범위에 의해서만 파악되어야 하고, 이와 균등하거나 또는 등가적인 변형 모두는 본 발명 사상의 범주에 속한다 할 것이다.
10 N키 롤오버 USB 키보드 장치
11 키보드 스캔부 111 제1 키보드 어레이
112 제2 키보드 어레이 12 리포트 생성부
121 제1 리포트 생성 유닛 122 제2 리포트 생성 유닛
13 디스크립터 저장부 131 유시지 테이블
132 리포트 디스크립터 14 USB 장치 컨트롤러
141 프로토콜 설정부 15 USB 인터페이스

Claims (11)

  1. 제1 및 제2 키보드 어레이, 유시지 테이블(usage table) 및 리포트 디스크립터(report descriptor)가 저장된 디스크립터 저장부, USB 장치 컨트롤러 및 제1 및 제2 리포트 생성 유닛들을 가지는 리포트 생성부를 포함하는 USB 키보드 장치에서 N키 롤오버 기능 제공 방법으로서,
    상기 리포트 생성부가 상기 제1 및 제2 키보드 어레이에서 동시 입력된 n 개의 키 스캔 코드들 및 m 개의 키 스캔 코드들을 수신하는 단계;
    상기 리포트 생성부가, 상기 디스크립터 저장부에 저장된 리포트 디스크립터에 사전에 선언된 소정의 리포트 카운트 k를 참조하여, 키 눌림 개수의 합 n+m 및 리포트 카운트 k를 비교하는 단계;
    만약 키 눌림 개수의 합 n+m이 리포트 카운트 k와 같거나 더 작으면, 상기 제1 리포트 생성 유닛이 n 개의 키 스캔 코드들로부터 생성된 n 개의 키 코드들과 m 개의 키 스캔 코드들로부터 생성된 m 개의 키 코드들을 기초로 k+3 바이트로 구성된 하나의 제1 리포트를 생성하는 단계;
    만약 키 눌림 개수의 합 n+m이 리포트 카운트 k보다 크면, 상기 제1 리포트 생성 유닛이 n 개의 키 코드들에 기초한 제1 리포트를 생성하고, 상기 제2 리포트 생성 유닛이 m 개의 키 코드들에 기초한 제2 리포트를 생성하는 단계; 및
    상기 USB 장치 컨트롤러가 생성된 제1 리포트 또는 제2 리포트를 호스트 장치로 전송하는 단계를 포함하며,
    상기 제1 및 제2 리포트 생성 유닛들은 상기 키 스캔 코드들로부터 상기 유시지 테이블을 참조하여 상기 키 코드들을 생성하는 것을 특징으로 하는 USB 키보드 장치에서 N키 롤오버 기능 제공 방법.
  2. 청구항 1에 있어서, 상기 제1 리포트 또는 제2 리포트는,
    리포트 ID, 특수 키 필드, 예비 필드 및 상기 제1 및 제2 키보드 어레이에서 각각 눌린 n+m 의 일반 키들을 위한 k 개의 키 코드 필드들을 포함하도록 생성되는 것을 특징으로 하는 USB 키보드 장치에서 N키 롤오버 기능 제공 방법.
  3. 청구항 1에 있어서, 상기 제1 리포트 또는 제2 리포트는,
    키 눌림 개수의 합 n+m이 리포트 카운트 k보다 클 경우에, 상기 제1 및 제2 키보드 어레이에 포함된 특수 키들의 눌림에 관한 특수 키 필드가 상기 제1 리포트 또는 제2 리포트 내에서 동일한 값을 갖도록 각각 생성되는 것을 특징으로 하는 USB 키보드 장치에서 N키 롤오버 기능 제공 방법.
  4. 청구항 1 내지 3 중 어느 한 청구항에 있어서, 상기 k는 7 이상 61 이하인 것을 특징으로 하는 USB 키보드 장치에서 N키 롤오버 기능 제공 방법.
  5. 제1 및 제2 키보드 어레이, 유시지 테이블(usage table) 및 리포트 디스크립터(report descriptor)가 저장된 디스크립터 저장부, USB 장치 컨트롤러 및 제1 및 제2 리포트 생성 유닛들을 가지는 리포트 생성부를 포함하는 USB 키보드 장치에서 N키 롤오버 기능 제공 방법으로서,
    상기 USB 장치 컨트롤러가, 호스트 장치 측에서 수신되는 리퀘스트가 Set_Protocol 리퀘스트인지 판단하는 단계;
    만약 상기 리퀘스트가 Set_Protocol 리퀘스트이면, 상기 USB 장치 컨트롤러가, 상기 리포트 생성부를 부트 프로토콜 모드로 설정하는 단계;
    상기 리포트 생성부의 제1 리포트 생성 유닛이, 상기 제1 사용자의 키 눌림에 따라 특수 키 필드와 예비 필드 및 6 개의 일반 키의 키 코드 필드들을 포함하는 8 바이트 길이의 리포트를 생성하는 단계;
    만약 상기 리퀘스트가 Set_Protocol 리퀘스트가 아니면, 상기 USB 장치 컨트롤러가, 상기 호스트 장치 측에서 수신되는 리퀘스트가 Get_Descriptor 리퀘스트인지 판단하는 단계;
    만약 상기 리퀘스트가 Get_Descriptor 리퀘스트이고, Get_Descriptor 리퀘스트 내에 포함된 wValue 파트가 가지는 클래스 디스크립터 타입이 Report이면, 상기 USB 장치 컨트롤러는 상기 리포트 생성부를 리포트 프로토콜 모드로 설정하는 단계;
    상기 USB 장치 컨트롤러가 상기 호스트 장치의 Get_Descriptor 리퀘스트에 대하여 상기 디스크립터 저장부에 저장된 리포트 디스크립터를 상기 호스트 장치에 응신하는 단계;
    상기 제1 및 제2 리포트 생성 유닛들이, 상기 제1 및 제2 키보드 어레이에서 각각 n 개의 키 눌림과 m 개의 키 눌림이 식별되면, 상기 리포트 디스크립터에 사전에 선언된 소정의 리포트 카운트 k를 참조하여, 키 눌림 개수의 합 n+m 및 리포트 카운트 k를 비교한 결과에 따라, 리포트 ID, 특수 키 필드, 예비 필드 및 리포트 카운트 k 개의 키 코드 필드들을 포함하는 k+3 바이트 크기의 하나 이상의 리포트를 생성하는 단계; 및
    상기 USB 장치 컨트롤러가 생성된 제1 리포트 또는 제2 리포트를 호스트 장치로 전송하는 단계를 포함하며,
    상기 제1 및 제2 리포트 생성 유닛들은 상기 키 스캔 코드들로부터 상기 유시지 테이블을 참조하여 키 코드들을 생성하는 것을 특징으로 하는 USB 키보드 장치에서 N키 롤오버 기능 제공 방법.
  6. 청구항 5에 있어서, 상기 k+3 바이트 크기의 하나 이상의 리포트를 생성하는 단계는,
    상기 리포트 생성부가 상기 제1 및 제2 키보드 어레이에서 동시 입력된 n 개의 키 스캔 코드들 및 m 개의 키 스캔 코드들을 수신하는 단계;
    상기 리포트 생성부가, 상기 디스크립터 저장부에 저장된 리포트 디스크립터에 사전에 선언된 소정의 리포트 카운트 k를 참조하여, 키 눌림 개수의 합 n+m 및 리포트 카운트 k를 비교하는 단계;
    만약 키 눌림 개수의 합 n+m이 리포트 카운트 k와 같거나 더 작으면, 상기 제1 리포트 생성 유닛이 n 개의 키 코드들과 m 개의 키 코드들을 기초로 k+3 바이트로 구성된 하나의 제1 리포트를 생성하는 단계;
    만약 키 눌림 개수의 합 n+m이 리포트 카운트 k보다 크면, 상기 제1 리포트 생성 유닛이 n 개의 키 코드들에 기초한 제1 리포트를 생성하고, 상기 제2 리포트 생성 유닛이 m 개의 키 코드들에 기초한 제2 리포트를 생성하는 단계; 및
    상기 USB 장치 컨트롤러가 생성된 제1 리포트 또는 제2 리포트를 호스트 장치로 전송하는 단계를 포함하는 것을 특징으로 하는 USB 키보드 장치에서 N키 롤오버 기능 제공 방법.
  7. 제1 및 제2 키보드 어레이를 포함하는 키보드 스캔부;
    USB HID 규격에 근거한 유시지 테이블(usage table)과 범용 직렬 버스(USB) 휴먼 인터페이스 장치(HID) 규격에 따라 호스트 장치로 리포트할 아이템의 필드 크기인 리포트 사이즈(report size), 아이템의 필드들의 개수인 리포트 카운트(report count) k가 선언된 리포트 디스크립터를 포함하는 디스크립터 저장부;
    사용자의 키 눌림에 의한 키 코드들을 아이템으로서 포함하는 리포트를 상기 호스트 장치로 출력하는 USB 장치 컨트롤러; 및
    상기 제1 및 제2 키보드 어레이에서 각각 n 개의 키 눌림 및 m 개의 키 눌림이 식별되면, 상기 리포트 디스크립터에 사전에 선언된 소정의 리포트 카운트 k를 참조하여, 키 눌림 개수의 합 n+m 및 리포트 카운트 k를 비교한 결과에 따라, 리포트 ID, 특수 키 필드, 예비 필드 및 리포트 카운트 k 개의 키 코드 필드들을 포함하는 k+3 바이트 크기의 하나 이상의 리포트를 생성하는 제1 및 제2 리포트 생성 유닛들을 가지며, 상기 생성된 리포트를 상기 USB 장치 컨트롤러로 출력하는 리포트 생성부를 포함하는 N키 롤오버 USB 키보드 장치.
  8. 청구항 7에 있어서, 상기 리포트 생성부는,
    상기 제1 및 제2 키보드 어레이에서 동시 입력된 n 개의 키 스캔 코드들 및 m 개의 키 스캔 코드들을 수신하고, 상기 디스크립터 저장부에 저장된 리포트 디스크립터에 사전에 선언된 소정의 리포트 카운트 k를 참조하여, 키 눌림 개수의 합 n+m 및 리포트 카운트 k를 비교하도록 동작하고,
    상기 제1 리포트 생성 유닛은,
    만약 키 눌림 개수의 합 n+m이 리포트 카운트 k와 같거나 더 작으면 n 개의 키 코드들과 m 개의 키 코드들을 기초로 k+3 바이트로 구성된 제1 리포트를 생성하고, 만약 키 눌림 개수의 합 n+m이 리포트 카운트 k보다 크면 n 개의 키 코드들에 기초한 제1 리포트를 생성하며,
    상기 제2 리포트 생성 유닛은,
    만약 키 눌림 개수의 합 n+m이 리포트 카운트 k와 같거나 더 작으면 제2 리포트를 생성하지 않지만, 만약 키 눌림 개수의 합 n+m이 리포트 카운트 k보다 크면 m 개의 키 코드들에 기초한 제2 리포트를 생성하도록 동작하는 것을 특징으로 하는 N키 롤오버 USB 키보드 장치.
  9. 청구항 7에 있어서, 상기 k+3 바이트 크기의 리포트는,
    리포트 ID, 특수 키 필드, 예비 필드 및 상기 제1 및 제2 키보드 어레이에서 각각 눌린 n+m 의 일반 키들을 위한 k 개의 키 코드 필드들을 포함하도록 생성되는 것을 특징으로 하는 N키 롤오버 USB 키보드 장치.
  10. 청구항 7에 있어서, 상기 k는 7 이상 61 이하인 것을 특징으로 하는 N키 롤오버 USB 키보드 장치.
  11. 청구항 7에 있어서, 상기 제1 및 제2 리포트 생성 유닛은, 키 눌림 개수의 합 n+m이 리포트 카운트 k보다 클 경우에, 제1 리포트 또는 제2 리포트에서 상기 제1 및 제2 키보드 어레이에 포함된 특수 키들의 눌림에 관한 특수 키 필드가 동일한 값을 갖도록 제1 리포트 또는 제2 리포트를 각각 생성하도록 동작하는 것을 특징으로 하는 N키 롤오버 USB 키보드 장치.
KR1020130006385A 2013-01-21 2013-01-21 62 키 이상의 엔키 롤오버가 가능한 유에스비 키보드 장치 및 n키 롤오버 기능 제공 방법 KR101340892B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020130006385A KR101340892B1 (ko) 2013-01-21 2013-01-21 62 키 이상의 엔키 롤오버가 가능한 유에스비 키보드 장치 및 n키 롤오버 기능 제공 방법

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020130006385A KR101340892B1 (ko) 2013-01-21 2013-01-21 62 키 이상의 엔키 롤오버가 가능한 유에스비 키보드 장치 및 n키 롤오버 기능 제공 방법

Publications (1)

Publication Number Publication Date
KR101340892B1 true KR101340892B1 (ko) 2013-12-13

Family

ID=49988167

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020130006385A KR101340892B1 (ko) 2013-01-21 2013-01-21 62 키 이상의 엔키 롤오버가 가능한 유에스비 키보드 장치 및 n키 롤오버 기능 제공 방법

Country Status (1)

Country Link
KR (1) KR101340892B1 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112416144A (zh) * 2020-11-26 2021-02-26 珠海恒宇新科技有限公司 蓝牙键盘及其实现全键无冲突的方法

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2000163198A (ja) 1998-11-27 2000-06-16 Nec Shizuoka Ltd Nキーロールオーバー・キーボードシステム
KR100905238B1 (ko) 2001-07-27 2009-07-01 게이츠 유닛타 아시아 가부시키가이샤 자동텐션장치
KR20110100884A (ko) * 2010-03-05 2011-09-15 주식회사 포인칩스 동시에 다중 입력이 가능한 유에스비(usb) 키보드

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2000163198A (ja) 1998-11-27 2000-06-16 Nec Shizuoka Ltd Nキーロールオーバー・キーボードシステム
KR100905238B1 (ko) 2001-07-27 2009-07-01 게이츠 유닛타 아시아 가부시키가이샤 자동텐션장치
KR20110100884A (ko) * 2010-03-05 2011-09-15 주식회사 포인칩스 동시에 다중 입력이 가능한 유에스비(usb) 키보드

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112416144A (zh) * 2020-11-26 2021-02-26 珠海恒宇新科技有限公司 蓝牙键盘及其实现全键无冲突的方法

Similar Documents

Publication Publication Date Title
US8832329B2 (en) USB peripheral device comprising limited function USB host controller
US5835791A (en) Versatile connection of a first keyboard/mouse interface and a second keyboard/mouse interface to a host computer
US20050216620A1 (en) KVM and USB peripheral switch
US6216188B1 (en) Computer system having computer provided with universal-serial-bus and device conforming to universal-serial-bus standard
US20090210608A1 (en) KVM switch and operation method thereof
US6064554A (en) Overcurrent protection circuit and method for universal serial bus hub unit
US7873764B2 (en) Switch with enhanced human interface device support
JP3814535B2 (ja) 入力装置
US8260988B2 (en) PS/2 to USB keyboard adaptor supporting N-key rollover
US8589141B2 (en) Resource sharing apparatus which disconnects an input device when detecting a standby indication of a switching command
WO2008048035A1 (en) Apparatus and method for preservation of usb keyboard
CN102598625B (zh) 利用通用即插即用在输入系统改变输入类型的方法和装置
US9645960B2 (en) KVM switch
JP4827533B2 (ja) 切替器およびコンピュータシステム
US8346948B2 (en) Information processing apparatus, selector, remote operation system, scan code transmission method, and program product therefor
US20110246678A1 (en) method for automatic mapping and updating of computer switching devices
CN108399136B (zh) 一种串行接口的控制方法、装置及主机
US6973598B2 (en) Computer system with improved data capture system
KR101340892B1 (ko) 62 키 이상의 엔키 롤오버가 가능한 유에스비 키보드 장치 및 n키 롤오버 기능 제공 방법
JP2012113565A (ja) ネットワーク装置、ネットワークシステム、およびネットワーク装置の制御方法
WO2011041736A1 (en) System and method for a thin-client terminal system using a serial bus
KR101374801B1 (ko) 바이오스 호환성을 보장하면서 엔키 롤오버가 가능한 유에스비 키보드 장치 및 엔키 롤오버 기능 제공 방법
US20030065864A1 (en) System and method supporting remote data processing system management
US20190278724A1 (en) Keyboard-video-mouse switch, signal processing method, and non-transitory computer-readable storage medium
KR20070109829A (ko) Usb 키보드 및 이를 이용한 사용자 입력 장치

Legal Events

Date Code Title Description
A201 Request for examination
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20171127

Year of fee payment: 5

LAPS Lapse due to unpaid annual fee