KR101374801B1 - Usb keyboard apparatus and method capable of supporting n-key rollover with bios compatibility - Google Patents
Usb keyboard apparatus and method capable of supporting n-key rollover with bios compatibility Download PDFInfo
- Publication number
- KR101374801B1 KR101374801B1 KR1020130006384A KR20130006384A KR101374801B1 KR 101374801 B1 KR101374801 B1 KR 101374801B1 KR 1020130006384 A KR1020130006384 A KR 1020130006384A KR 20130006384 A KR20130006384 A KR 20130006384A KR 101374801 B1 KR101374801 B1 KR 101374801B1
- Authority
- KR
- South Korea
- Prior art keywords
- report
- request
- protocol
- descriptor
- usb
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/38—Information transfer, e.g. on bus
- G06F13/382—Information transfer, e.g. on bus using universal interface adapter
- G06F13/385—Information transfer, e.g. on bus using universal interface adapter for adaptation of a particular data processing system to different peripheral devices
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/01—Input arrangements or combined input and output arrangements for interaction between user and computer
- G06F3/02—Input arrangements using manually operated switches, e.g. using keyboards or dials
- G06F3/023—Arrangements 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2213/00—Indexing scheme relating to interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F2213/0042—Universal 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)
- Information Transfer Systems (AREA)
Abstract
Description
본 발명은 키보드 장치에 관한 것으로, 더욱 상세하게는, USB 키보드 장치에 관한 것이다.The present invention relates to a keyboard device, and more particularly, to a USB keyboard device.
USB(Universal Serial Bus) 기술은 개인용 컴퓨터(PC)와 같은 호스트 장치가 네 가닥의 케이블만을 이용하여 다양한 주변 장치들과 연결될 수 있게 하는 통신 아키텍처로서, USB는 실제로는 직렬 통신 링크에 불과하고, 호스트 장치의 시동 시에 또는 호스트 장치가 동작 중에 플러그인될 때에 USB 장치를 설정하고 구동하는 것은 USB 프로토콜이다.Universal Serial Bus (USB) technology is a communications architecture that allows a host device, such as a personal computer (PC), to connect to a variety of peripherals using only four cables.USB is really just a serial communication link. It is the USB protocol to set up and run a USB device at startup of the device or when the host device is plugged in during operation.
USB 장치들은 몇 종류의 장치 클래스로 분류될 수 있다. 각각의 장치 클래스는 공통적인 동작 방식과 프로토콜이 정의되어 있다. USB 장치 클래스들은 예를 들어 디스플레이 클래스, 통신 클래스, 오디오 클래스, 대용량 스토리지 클래스 그리고 휴먼 인터페이스(Human Interface) 클래스 등이 있다.USB devices can be classified into several classes of devices. Each device class defines a common operating method and protocol. USB device classes include, for example, display classes, communication classes, audio classes, mass storage classes, and human interface classes.
휴먼 인터페이스 클래스 또는 HID(Human Interface Device) 클래스는 키보드, 마우스, 키패드, 조이스틱, 트랙볼, 게임용 컨트롤러 뿐 아니라, 바코드 리더, 온도계, 계측기 등의 USB 장치도 포함할 수 있다.The human interface class or human interface device (HID) class may include not only keyboards, mice, keypads, joysticks, trackballs, gaming controllers, but also USB devices such as bar code readers, thermometers, and measuring instruments.
USB HID 키보드는 키보드에서 키의 눌림과 해제에 관하여 키 코드들을 하나의 페이로드에 적재한 데이터, 즉 "리포트(report)"를 USB 프로토콜을 이용하여 USB 호스트 장치, 즉 PC에 전달한다.The USB HID keyboard delivers the data loaded with key codes in one payload, ie, "reports", to the USB host device, or PC, using the USB protocol with respect to key presses and releases on the keyboard.
기존에는 키보드 전용의 PS/2 키보드 포트를 통해 키보드가 눌리거나 눌림 해제되는 키의 키 코드를 전달하였고 키보드 인터럽트로 처리하였기 때문에 호스트 장치는 키의 눌림 코드를 동시적으로 수신할 수 있었다. 따라서, 키보드 장치가 복수의 키 눌림 또는 해제를 정확히 인식할 수 있도록 설계되기만 한다면, 그리고 호스트 장치가 키보드 인터럽트를 충분히 신속하게 처리할 수 있다면, 아무리 많은 키가 동시에 눌려지더라도 호스트 장치가 인식할 수 있는 눌린 키들의 수에는 특별히 제한이 없었다.In the past, a keyboard dedicated PS / 2 keyboard port delivered a key code of a key pressed or released, and the host device was able to receive a key pressed code simultaneously because it was treated as a keyboard interrupt. Thus, as long as the keyboard device is designed to correctly recognize multiple key presses or releases, and if the host device can handle keyboard interrupts quickly enough, no matter how many keys are pressed simultaneously, the host device will not be able to recognize them. There was no particular limitation on the number of pressed keys present.
눌린 키를 몇 개까지 처리할 수 있는지를 N키 롤오버(N-key rollover)라고 한다. PS/2 인터페이스 키보드가 사용되던 시절에는 N키 롤오버는 키보드 장치 내에서 키 눌림(make)과 해제(break)를 스캔하는 하드웨어 방식의 문제였다. 예를 들어, 매트릭스 방식에서는 특정 키 조합일 때에 인접한 키의 눌림이 인식되지 않은 키 블록킹 또는 고스트 현상이 쉽게 일어날 수 있고, N키 롤오버 문제는 이러한 키 블록킹이나 고스트 현상을 없애는 문제라고 볼 수 있었다.The number of keys that can be processed is called N-key rollover. In the days when PS / 2 interface keyboards were used, N-key rollover was a hardware problem that scans for key presses and breaks within the keyboard device. For example, in the matrix method, key blocking or ghosting, which is not recognized when the adjacent key is pressed in a specific key combination, may easily occur, and the N-key rollover problem may be considered to eliminate such key blocking or ghosting.
그러나 USB 방식으로 개발된 USB HID 키보드는 USB 포트를 다른 USB 장치들과 공유하여야 하고, 키 눌림/해제 이벤트는 인터럽트가 아닌 메시지로 처리되기 때문에, 동시에 눌리는 키들의 키 코드를 무제한적으로 전달하는 데에 새로운 제약이 프로토콜 자체에 의해 생겼다.However, the USB HID keyboard developed by the USB method must share the USB port with other USB devices, and the key press / release event is handled as a message rather than an interrupt, so it can be used to deliver unlimited key codes of keys pressed simultaneously. New constraints were created by the protocol itself.
USB HID 키보드는 ALT, CTRL, SHIFT, GUI 키라는 4 개의 특수 키 코드들과 6 개의 일반 키들의 눌림 이벤트에 관한 키 코드들을 하나의 리포트에 담아 전달하기 때문에 키 누름 이벤트들이 연속하여 6 회를 초과할 경우에는, 6 회 이후의 눌림 이벤트들에 상응하는 키 코드들은 누락 내지 무시된다. 예를 들어, 키보드 A 눌림, S 눌림, D 눌림, F 눌림, G 눌림, F 눌림 이후의 G 키 눌림 이벤트는, 이미 눌린 키들 중에서 해제 이벤트가 있기 전에는, 리포트에 포함되지 못한다.The USB HID keyboard delivers four special key codes, ALT, CTRL, SHIFT, and GUI keys, and key codes for the press events of six common keys in a single report, so that key press events exceed six consecutive times. If so, key codes corresponding to six or more pressed events are missing or ignored. For example, the G key press event after keyboard A press, S press, D press, F press, G press, and F press is not included in the report until there is a release event among the already pressed keys.
통상 USB 키보드가 최대 6 개의 일반 키의 눌림/해제 키 코드들의 전달을 지원하는 것은, 점자(Braille) 키보드가 최대 6 개의 점 키를 동시에 눌러야 하기 때문이라는 설명도 있지만, 컴퓨터가 시동할 때 OS의 로딩 전에 구동되는 BIOS(Basic Input/Output System)가 HID 키보드에 대해 4 개의 특수 키와 6 개의 일반 키 코드로 된 8 바이트 리포트만 고정적으로 받아들이도록 설계되기 때문이라는 설명이 유력하다.While USB keyboards typically support the delivery of up to six common key press / release key codes, some say that Braille keyboards must press up to six dot keys at the same time. This is because the Basic Input / Output System (BIOS) that runs before loading is designed to statically accept only 8-byte reports with four special keys and six common key codes for HID keyboards.
이러한 동시 키 제한은 통상적인 사용 환경에서는 큰 문제가 없으나, 복잡한 키 조합을 사용하는 일부 어플리케이션들, 예를 들어 그래픽 편집 툴, 캐드, 게임, 작곡 등에서는 상당한 불편을 초래하기도 하였다.This simultaneous key restriction is not a major problem in a typical usage environment, but has caused considerable inconvenience in some applications using complex key combinations, such as graphic editing tools, CAD, games, and compositions.
따라서 이러한 동시 키 제한을 뛰어넘기 위해, 한국특허출원 제2010-0019961호에서는, 키보드 장치 내부적으로 두 개의 논리적인 USB 키보드 장치를 구성하고 6 회 이하의 일반 키 눌림 이벤트 시에는 첫 번째 논리적 USB 키보드에서 리포트를 구성하여 USB 호스트로 전송하지만, 만약 6 회를 초과하는 일반 키의 눌림 이벤트가 있으면, 두 번째 논리적 USB 키보드에서 7 회 ~ 12 회까지의 일반 키 눌림 이벤트에 상응하는 키 코드들로 리포트를 구성하여 USB 호스트로 전송하는 방식이 제안되었다. 사용자는 여전히 하나의 물리적인 키보드를 이용하는 것처럼 느끼기 때문에 마치 일반 키 6 개 제약이 해결된 것처럼 보였다. Therefore, in order to overcome this simultaneous key limitation, Korean Patent Application No. 2010-0019961 discloses that two logical USB keyboard devices are configured internally in the keyboard device, and the first logical USB keyboard event is performed after six or less general key press events. If you configure a report and send it to a USB host, but there are more than six general key press events, the report is sent with key codes that correspond to seven to twelve general key press events on the second logical USB keyboard. It is proposed to configure and transfer to USB host. The user still felt like using a single physical keyboard, so it seemed as if the six-key limitation was solved.
하지만 호스트 장치는 서로 다른 키보드 장치들에서 키 입력을 받는 것이기 때문에, 키 조합에 따라서는, 7 회 이후의 키 눌림 이벤트가 제대로 처리되지 않을 수 있다.However, since the host device receives key input from different keyboard devices, the key press event after 7 times may not be properly processed depending on the key combination.
또한, 현재 시중에 판매 중인 N키 롤오버 기능을 제공하는 많은 고가의 USB 키보드들 중 일부에서는, BIOS 단계에서 인식에 문제를 일으키며 BIOS 설정 키보드 명령을 호스트 장치에 입력하지 못하여, BIOS 설정 화면에 진입하지 못하거나 심지어 호스트 장치를 멈추게 만드는 등의 오동작이 일어난다는 사례들이 보고되고 있다.In addition, some of the many expensive USB keyboards that provide N-key rollover on the market, some of them may cause recognition problems at the BIOS level and fail to enter BIOS setup keyboard commands on the host device, thus preventing them from entering the BIOS setup screen. There have been reports of malfunctions, such as failing or even stopping the host device.
본 발명이 해결하고자 하는 과제는 부팅 시에 바이오스 호환성에 문제가 없이 N키 롤오버가 가능한 USB 키보드 장치 및 N키 롤오버 기능 제공 방법을 제공하는 데에 있다.SUMMARY OF THE INVENTION An object of the present invention is to provide a USB keyboard device capable of N-key rollover and a method of providing an N-key rollover function without problems in BIOS compatibility at boot time.
본 발명의 일 측면에 따른 N키 롤오버 기능 제공 방법은, 디스크립터 저장부, USB 장치 컨트롤러 및 리포트 생성부를 포함하는 USB 키보드 장치에서 N키 롤오버 기능 제공 방법으로서,A method for providing an N-key rollover function according to an aspect of the present invention is a method for providing an N-key rollover function in a USB keyboard device including a descriptor storage unit, a USB device controller, and a report generation unit.
상기 USB 장치 컨트롤러가, 호스트 장치 측에서 수신되는 리퀘스트가 Set_Protocol 리퀘스트인지 판단하는 단계;Determining, by the USB device controller, whether a request received from a host device is a Set_Protocol request;
만약 상기 리퀘스트가 Set_Protocol 리퀘스트이면, 상기 USB 장치 컨트롤러가, 상기 리포트 생성부를 부트 프로토콜 모드로 설정하는 단계;If the request is a Set_Protocol request, setting, by the USB device controller, the report generator to a boot protocol mode;
상기 리포트 생성부가 사용자의 키 눌림에 따라 특수 키 필드와 예비 필드 및 6 개의 일반 키의 키 코드 필드들을 포함하는 8 바이트 길이의 리포트를 생성하는 단계;Generating, by the report generator, an 8-byte long report including a special key field, a spare field, and key code fields of six general keys according to a user's key press;
만약 상기 리퀘스트가 Set_Protocol 리퀘스트가 아니면, 상기 USB 장치 컨트롤러가, 상기 호스트 장치 측에서 수신되는 리퀘스트가 Get_Descriptor 리퀘스트인지 판단하는 단계;If the request is not a Set_Protocol request, determining, by the USB device controller, whether the request received from the host device is a Get_Descriptor request;
만약 상기 리퀘스트가 Get_Descriptor 리퀘스트이고, Get_Descriptor 리퀘스트 내에 포함된 wValue 파트가 가지는 클래스 디스크립터 타입이 Report이면, 상기 USB 장치 컨트롤러가 상기 리포트 생성부를 리포트 프로토콜 모드로 설정하는 단계;If the request is a Get_Descriptor request and the class descriptor type of the wValue part included in the Get_Descriptor request is Report, setting, by the USB device controller, the report generator in report protocol mode;
상기 리포트 생성부가 상기 디스크립터 저장부에 저장된 리포트 디스크립터에 선언된 소정의 리포트 카운트를 참조하여, 특수 키 필드와 예비 필드 및 상기 리포트 카운트에 해당하는 개수의 일반 키의 키 코드 필드들을 포함하는 9 바이트 이상 크기의 리포트를 생성하는 단계; 및9 or more bytes including a special key field, a spare field, and key code fields of the number of general keys corresponding to the report count, with reference to a predetermined report count declared in a report descriptor stored in the descriptor storage unit. Generating a report of size; And
상기 USB 장치 컨트롤러가 생성된 리포트를 호스트 장치로 전송하는 단계를 포함할 수 있다.The USB device controller may include transmitting the generated report to a host device.
일 실시예에 따라, 만약 상기 리퀘스트가 Set_Protocol 리퀘스트이면, 상기 USB 장치 컨트롤러가, 상기 리포트 생성부를 부트 프로토콜 모드로 설정하는 단계는,According to an embodiment, if the request is a Set_Protocol request, the step of setting, by the USB device controller, the report generator to a boot protocol mode,
만약 상기 리퀘스트가 Set_Protocol 리퀘스트이고, Set_Protocol 리퀘스트 내에 포함된 프로토콜 타입 wValue 파트가 Boot Protocol를 의미하면, 상기 USB 장치 컨트롤러가, 상기 리포트 생성부를 부트 프로토콜 모드로 설정하는 단계일 수 있다.If the request is a Set_Protocol request and the protocol type wValue part included in the Set_Protocol request means Boot Protocol, the USB device controller may set the report generator to boot protocol mode.
일 실시예에 따라, 상기 리포트 디스크립터에 선언된 소정의 리포트 카운트는 7 이상일 수 있다.According to one embodiment, the predetermined report count declared in the report descriptor may be seven or more.
본 발명의 다른 측면에 따른 N키 롤오버 기능 제공 방법은, 디스크립터 저장부, USB 장치 컨트롤러 및 리포트 생성부를 포함하는 USB 키보드 장치에서 N키 롤오버 기능 제공 방법으로서,According to another aspect of the present invention, there is provided a method for providing an N-key rollover function in a USB keyboard device including a descriptor storage unit, a USB device controller, and a report generation unit.
상기 USB 장치 컨트롤러가, 호스트 장치 측에서 수신되는 리퀘스트를 분석하는 단계;Analyzing, by the USB device controller, a request received at a host device side;
상기 USB 장치 컨트롤러가, 리퀘스트 분석 결과에 따라 상기 리포트 생성부를 부트 프로토콜 모드 또는 리포트 프로토콜 모드 중 하나로 설정하는 단계;Setting, by the USB device controller, the report generator to one of a boot protocol mode and a report protocol mode according to a request analysis result;
상기 리포트 생성부가 부트 프로토콜 모드로 설정되면 사용자의 키 눌림에 따라 특수 키 필드와 예비 필드 및 6 개의 일반 키의 키 코드 필드들을 포함하는 8 바이트 길이의 리포트를 생성하는 단계;If the report generator is set to a boot protocol mode, generating a 8-byte long report including a special key field, a spare field, and key code fields of six general keys according to a user's key press;
상기 리포트 생성부가 리포트 프로토콜 모드로 설정되면 상기 디스크립터 저장부에 저장된 리포트 디스크립터에 선언된 소정의 리포트 카운트를 참조하여, 특수 키 필드와 예비 필드 및 상기 리포트 카운트에 해당하는 개수의 일반 키의 키 코드 필드들을 포함하는 9 바이트 이상 크기의 리포트를 생성하는 단계; 및When the report generating unit is set to the report protocol mode, a special key field and a spare field and key code fields of the number of general keys corresponding to the report count are referred to by referring to a predetermined report count declared in the report descriptor stored in the descriptor storage unit. Generating a report having a size of at least 9 bytes including the data; And
상기 USB 장치 컨트롤러가 생성된 리포트를 호스트 장치로 전송하는 단계를 포함할 수 있다.The USB device controller may include transmitting the generated report to a host device.
일 실시예에 따라, 상기 USB 장치 컨트롤러가, 호스트 장치 측에서 수신되는 리퀘스트를 분석하는 단계는,According to one embodiment, the USB device controller, the step of analyzing the request received from the host device side,
상기 USB 장치 컨트롤러가, 상기 리퀘스트가 Set_Protocol 리퀘스트이고 또한 Set_Protocol 리퀘스트 내에 포함된 프로토콜 타입 wValue 파트가 Boot Protocol를 의미하는지 판단하는 단계; 및Determining, by the USB device controller, whether the request is a Set_Protocol request and a protocol type wValue part included in the Set_Protocol request means Boot Protocol; And
상기 USB 장치 컨트롤러가, 상기 리퀘스트가 Get_Descriptor 리퀘스트이고 또한 Get_Descriptor 리퀘스트 내에 포함된 wValue 파트가 가지는 클래스 디스크립터 타입이 Report인지 판단하는 단계를 포함할 수 있다.The USB device controller may include determining whether the request is a Get_Descriptor request and whether the class descriptor type of the wValue part included in the Get_Descriptor request is a report.
일 실시예에 따라, 상기 USB 장치 컨트롤러가, 리퀘스트 분석 결과에 따라 상기 리포트 생성부를 부트 프로토콜 모드 또는 리포트 프로토콜 모드 중 하나로 설정하는 단계는,According to an embodiment of the present disclosure, the step of setting the report generator to one of a boot protocol mode and a report protocol mode according to a request analysis result may include:
상기 USB 장치 컨트롤러가, 리퀘스트의 분석 결과로서, 만약 상기 리퀘스트가 Set_Protocol 리퀘스트이고 또한 Set_Protocol 리퀘스트 내에 포함된 프로토콜 타입 wValue 파트가 Boot Protocol를 의미하면, 상기 리포트 생성부를 부트 프로토콜 모드로 설정하는 단계; 및Setting, by the USB device controller, the report generator as a boot protocol mode if the request is a Set_Protocol request and the protocol type wValue part included in the Set_Protocol request means Boot Protocol as a result of analyzing the request; And
상기 USB 장치 컨트롤러가, 리퀘스트의 분석 결과로서, 만약 상기 리퀘스트가 Get_Descriptor 리퀘스트이고 또한 Get_Descriptor 리퀘스트 내에 포함된 wValue 파트가 가지는 클래스 디스크립터 타입이 Report이면, 상기 리포트 생성부를 리포트 프로토콜 모드로 설정하는 단계를 포함할 수 있다.If the request is a Get_Descriptor request and the class descriptor type of the wValue part included in the Get_Descriptor request is Report, the USB device controller sets the report generator to report protocol mode. Can be.
본 발명의 또 다른 측면에 따른 N키 롤오버 USB 키보드 장치는,N-key rollover USB keyboard device according to another aspect of the present invention,
범용 직렬 버스(USB) 휴먼 인터페이스 장치(HID) 규격에 따라 호스트 장치로 리포트할 아이템의 필드 크기인 리포트 사이즈(report size), 아이템의 필드들의 개수인 리포트 카운트(report count)가 선언된 리포트 디스크립터를 포함하는 디스크립터 저장부;According to the Universal Serial Bus (USB) Human Interface Device (HID) specification, the report descriptor declares the report size, which is the field size of the item to report to the host device, and the report count, which is the number of fields of the item. Descriptor storage including;
상기 호스트 장치에서 수신되는 리퀘스트를 분석하여 부트 프로토콜 모드 또는 리포트 프로토콜 모드 중 하나의 프로토콜 모드를 설정하고, 사용자의 키 눌림에 의한 키 코드들을 아이템으로서 포함하는 리포트를 상기 호스트 장치로 전송하는 USB 장치 컨트롤러; 및A USB device controller for analyzing a request received from the host device to set a protocol mode of one of a boot protocol mode and a report protocol mode, and to transmit a report to the host device, the report including key codes by a user's key press as an item. ; And
설정된 프로토콜 모드가 부트 프로토콜 모드이면 부트 프로토콜에 따라 6 개의 일반 키 코드들을 포함하는 리포트를 생성하고, 설정된 프로토콜 모드가 리포트 프로토콜 모드이면 상기 디스크립터 저장부에 선언된 리포트 카운트에 상응하는 개수의 일반 키들의 키 코드들을 포함하는 리포트를 생성하며, 상기 생성된 리포트를 상기 USB 장치 컨트롤러로 출력하는 리포트 생성부를 포함할 수 있다.If the set protocol mode is the boot protocol mode, a report including 6 general key codes is generated according to the boot protocol. If the set protocol mode is the report protocol mode, the number of general keys corresponding to the report count declared in the descriptor storage is generated. A report generation unit may generate a report including key codes, and output the generated report to the USB device controller.
일 실시예에 따라, 상기 USB 장치 컨트롤러는,According to one embodiment, the USB device controller,
만약 상기 호스트 장치 측에서 수신되는 리퀘스트가 Set_Protocol 리퀘스트이면, 상기 리포트 생성부를 부트 프로토콜 모드로 설정하도록 동작할 수 있다.If the request received from the host device is a Set_Protocol request, the report generator may be set to a boot protocol mode.
일 실시예에 따라, 상기 USB 장치 컨트롤러는,According to one embodiment, the USB device controller,
만약 상기 리퀘스트가 Get_Descriptor 리퀘스트이고 또한 Get_Descriptor 리퀘스트 내에 포함된 wValue 파트가 가지는 클래스 디스크립터 타입이 Report이면, 상기 리포트 생성부를 리포트 프로토콜 모드로 설정하도록 동작할 수 있다.If the request is a Get_Descriptor request and the class descriptor type of the wValue part included in the Get_Descriptor request is Report, the report generator may be set to report protocol mode.
일 실시예에 따라, 상기 리포트 디스크립터에 선언된 소정의 리포트 카운트는 7 이상일 수 있다.According to one embodiment, the predetermined report count declared in the report descriptor may be seven or more.
본 발명의 N키 롤오버가 가능한 USB 키보드 장치 및 N키 롤오버 기능 제공 방법에 따르면, 한 번에 연속하는 7 회 이상의 일반 키 이벤트들을 포함한 9 바이트 또는 그보다 큰 리포트를 호스트 장치에 전송할 수 있다.According to the USB keyboard device capable of N-key rollover and the method for providing the N-key rollover function of the present invention, a report of 9 bytes or larger including seven or more general key events in succession can be transmitted to the host device.
본 발명의 N키 롤오버가 가능한 USB 키보드 장치 및 N키 롤오버 기능 제공 방법에 따르면, BIOS 구동 시에는 부트 프로토콜에 따라 8 개의 특수 키 이벤트와 6 회의 일반 키 이벤트들을 8 바이트 리포트를 호스트 장치에 전송하지만, OS 로딩 후에는 리포트 프로토콜에 따라 8 개의 특수 키 이벤트와 7 회 이상의 일반 키 이벤트들을 9 바이트 또는 그 보다 큰 리포트를 호스트 장치에 전송할 수 있다.According to the USB keyboard device capable of N-key rollover and the method of providing N-key rollover function of the present invention, 8 special key events and 6 general key events are transmitted to the host device according to the boot protocol when the BIOS is driven. After the OS has loaded, it can send a report to the host device with 9 bytes or larger reports of 8 special key events and 7 or more general key events, depending on the report protocol.
본 발명의 N키 롤오버가 가능한 USB 키보드 장치 및 N키 롤오버 기능 제공 방법에 따르면, 부트 프로토콜 모드와 리포트 프로토콜 모드를 달리하여 리포트를 생성하므로 부트 절차에서 오류를 일으키지 않는다.According to the USB keyboard device and the N-key rollover function providing method according to the present invention, since the report is generated by different boot protocol mode and report protocol mode, the boot procedure does not cause an error.
도 1은 본 발명의 일 실시예에 따른 N키 롤오버 USB 키보드 장치를 예시한 블록도이다.
도 2는 본 발명의 일 실시예에 따른 N키 롤오버 USB 키보드 장치에서 N키 롤오버 기능 제공 방법을 예시한 순서도이다.1 is a block diagram illustrating an N-key rollover USB keyboard device according to an embodiment of the present invention.
2 is a flowchart illustrating a method for providing an N-key rollover function in an N-key rollover USB keyboard device according to an embodiment of the present invention.
본문에 개시되어 있는 본 발명의 실시예들에 대해서, 특정한 구조적 내지 기능적 설명들은 단지 본 발명의 실시예를 설명하기 위한 목적으로 예시된 것으로, 본 발명의 실시예들은 다양한 형태로 실시될 수 있으며 본문에 설명된 실시예들에 한정되는 것으로 해석되어서는 아니 된다. For the embodiments of the invention disclosed herein, specific structural and functional descriptions are set forth for the purpose of describing an embodiment of the invention only, and it is to be understood that the embodiments of the invention may be practiced in various forms, The present invention should not be construed as limited to the embodiments described in Figs.
이하, 첨부한 도면들을 참조하여, 본 발명의 바람직한 실시예를 보다 상세하게 설명하고자 한다. 도면상의 동일한 구성요소에 대해서는 동일한 참조부호를 사용하고 동일한 구성요소에 대해서 중복된 설명은 생략한다.Hereinafter, preferred embodiments of the present invention will be described in detail with reference to the accompanying drawings. The same reference numerals are used for the same constituent elements in the drawings and redundant explanations for the same constituent elements are omitted.
본 발명에서 키보드 장치는 명백히 달리 해석되는 경우를 제외하면 통상적으로 키보드 장치의 오른쪽에 배치되는, 숫자 키들과 연산 키들이 표기된 키패드도 포함하며, 또한 예를 들어 키보드 스캔 신호가 언급될 때에, 키보드 스캔 신호는 키패드 스캔 신호도 포괄한다고 이해되어야 한다.The keyboard device in the present invention includes a numeric keys and a keypad marked with operation keys, which are disposed on the right side of the keyboard device, unless otherwise explicitly interpreted. Also, for example, when a keyboard scan signal is mentioned, It should be understood that the signal also encompasses the keypad scan signal.
본 발명의 명세서에서 "동시 입력"이란 시간적으로 동시적인 키 누름 뿐 아니라, 어느 키를 누른 후 아직 떼지 않은 상태에서 다른 키를 누르는 경우도 포함한다.In the specification of the present invention, "simultaneous input" includes not only simultaneous key presses in time, but also a case where a key is pressed while another key is not yet released.
도 1은 본 발명의 일 실시예에 따른 N키 롤오버 USB 키보드 장치를 예시한 블록도이다.1 is a block diagram illustrating an N-key rollover USB keyboard device according to an embodiment of the present invention.
도 1을 참조하면, N키 롤오버 USB 키보드 장치(10)는 키보드 스캔부(11), 리포트 생성부(12), 디스크립터 저장부(13), USB 장치 컨트롤러(14) 및 USB 인터페이스(15)를 포함할 수 있다.Referring to FIG. 1, the N-key rollover USB keyboard device 10 includes a
키보드 스캔부(11)는 예를 들어 사용자가 키 캡을 누를 때 접점이 접촉하면서 활성화되는 전기 신호를 검출하여 어떤 키 캡이 눌렸는지(make) 식별하며 또는 반대로 사용자가 키 캡에서 손을 뗐을 때에는 접점이 탈락하면서 비활성화되는 전기 신호를 검출하여 어떤 키 캡이 눌림 해제되었는지(break) 식별할 수 있다.The
키보드 스캔부(11)는 고가인 키보드의 경우에는 모든 키들에 대해 개별적인 접점과 도체 라인을 이용하도록 설계되기도 하지만, 저렴하게 제작할 경우에는 매트릭스 형태로 접점들이 행 또는 열 별로 도체 라인들을 공유하도록 설계될 수도 있다.The
키보드 스캔부(11)는 눌림 또는 눌림 해제가 식별될 때마다 키들의 키 스캔 코드들을 스캐닝하여 리포트 생성부(12)로 출력한다.The
리포트 생성부(12)는 USB 장치 컨트롤러(14)가 부트 프로토콜(Boot protocol)인지 또는 리포트 프로토콜(Report protocol)에 따라 설정한 동작 모드에 따라, 부트 프로토콜 모드일 때에는 규격에서 지정된 크기의 리포트를 생성하고 리포트 프로토콜 모드일 때에는 선언된 크기의 리포트를 생성할 수 있다.The report generation unit 12 generates a report having a size specified by the standard when the USB device controller 14 is in the boot protocol mode according to the operation mode set according to whether the boot protocol or the boot protocol is set. In report protocol mode, you can create a report of the declared size.
구체적으로, 리포트 생성부(12)는 부트 프로토콜 모드로 설정된 때에는, 키보드 스캔부(11)로부터 스캐닝된 키 스캔 코드들을 기초로 키 코드들을 생성하고, 8 개의 특수 키, 예비 필드 및 최대 6 개의 일반 키의 키 코드들로 구성되는 8 바이트 리포트를 생성한다.Specifically, when the report generation unit 12 is set to the boot protocol mode, the report generation unit 12 generates key codes based on the key scan codes scanned from the
또한 리포트 생성부(12)는 리포트 프로토콜 모드로 설정된 때에는, 키보드 스캔부(11)로부터 스캐닝된 키 스캔 코드들을 기초로 키 코드들을 생성하고, 디스크립터 저장부(13) 내에 저장된 리포트 디스크립터(132)에서 선언하는 규격에 따라 8 개의 특수 키, 예비 필드 및 7 개 이상의 일반 키의 키 코드들로 구성되는 9 바이트 또는 그보다 큰 리포트를 생성한다.In addition, when the report generation unit 12 is set to the report protocol mode, the report generation unit 12 generates key codes based on the key scan codes scanned from the
이때, 리포트 생성부(12)는 키 스캔 코드로부터 키 코드를 생성하기 위해 디스크립터 저장부(13)에 저장된 USB 유시지 테이블(usage table)(131)의 유시지 페이지(usage page) 0x07을 참조할 수 있다. At this time, the report generation unit 12 may refer to the usage page 0x07 of the USB usage table 131 stored in the descriptor storage unit 13 to generate a key code from the key scan code. Can be.
예를 들어 스캔 코드 셋 2에서 q의 make 스캔 코드는 0xE015이고 break 스캔 코드는 0xE0F015이며, 유시지 페이지에서 q의 키 코드는 14(Hex)이다. 리포트 생성부(12)는 만약 스캔 코드 0xE015가 식별되면 "q"가 눌린 것으로 인식하고 리포트에 키 코드 14H를 포함시키며, 스캔 코드 0xE0F015가 식별되면 눌렸던 "q"가 해제된 것으로 인식하고 리포트에서 키 코드 14H를 제거한다. BIOS는 리포트에 키 코드 14H가 포함되면 "q"가 눌린 것으로 이해하고, 이전 리포트에 있던 키 코드 14H가 현재 리포트에서 사라지면 "q"가 더 이상 눌리지 않는다고 이해한다.For example, in scan code set 2, the make scan code for q is 0xE015, the break scan code is 0xE0F015, and the key code for q in the landing page is 14 (Hex). The report generation unit 12 recognizes that "q" is pressed if scan code 0xE015 is identified and includes the key code 14H in the report. Remove code 14H. The BIOS understands that "q" was pressed when the report included the key code 14H, and that "q" was no longer pressed when the key code 14H from the previous report disappeared from the current report.
디스크립터 저장부(13)는 N키 롤오버 USB 키보드 장치(10)가 USB HID 장치로서 자신을 규정하는 디스크립터들, 예를 들어, 디바이스 디스크립터(device descriptor), 설정 디스크립터(configuration descriptor), 인터페이스 디스크립터(interface descriptor), 엔드포인트 디스클립터(endpoint descriptor), HID 디스크립터(HID descriptor), 리포트 디스크립터(report descriptor), 피지컬 디스크립터(physical descriptor) 및 스트링 디스크립터(string descriptor)들을 저장할 수 있다.The descriptor storage unit 13 includes descriptors for which the N-key rollover USB keyboard device 10 defines itself as a USB HID device, for example, a device descriptor, a configuration descriptor, and an interface descriptor. A descriptor, an endpoint descriptor, an HID descriptor, a report descriptor, a physical descriptor, and a string descriptor may be stored.
이러한 디스크립터들은 각종 설정 정보들이 선언되어 있는 일종의 문서로서, 특히 이러한 디스크립터들 중에 리포트 디스크립터(132)는, USB HID 장치가 USB 포트에 연결될 경우에 HID 클래스 드라이버에 전달되어, USB HID 장치가 어떻게 구성된 아이템들을 어떻게 전달하는지를 호스트 장치의 HID 클래스 드라이버에 알려주는 역할을 한다.These descriptors are a kind of document in which various configuration information is declared. In particular, among these descriptors, the
리포트 디스크립터(132)는 리포팅할 아이템을 참조할 유시지 페이지 번호와, 아이템의 필드 크기인 리포트 사이즈(report size), 아이템의 필드들의 개수인 리포트 카운트(report count) 등의 설정 정보들이 선언되어 있으며, USB 장치 컨트롤러(14)가 이 디스크립터 저장부(13)로부터 리포트 디스크립터(132)를 읽어 HID 클래스 드라이버에 전송한다.The
만약 리포트 디스크립터(132)에서 선언된 리포트 사이즈가 8이고 리포트 카운트가 62이며, 유시지 페이지가 키 코드이면, 1 개당 1 바이트인 62 개의 일반 키 코드를 아이템으로 가지는 총 64 바이트 리포트(8 개의 특수 키 및 예비 필드 포함)를 생성하는 것이 가능하다.If the report size declared in the
리포트 카운트의 크기는 USB의 전체 대역폭 중 키보드 장치(10)가 차지할 수 있는 대역폭, 키보드 장치(10)의 컨트롤러 성능, 호스트 장치의 메시지 처리 성능 내지 키보드 장치(10)의 전력 소모 내지 어플리케이션 호환성을 고려하여 결정될 수 있다.The size of the report count takes into account the bandwidth that the keyboard device 10 may occupy among the entire bandwidth of the USB, the controller performance of the keyboard device 10, the message processing performance of the host device, the power consumption of the keyboard device 10, or the application compatibility. Can be determined.
한편, USB 장치 컨트롤러(14)는 USB 인터페이스(15)와 호스트 장치 사이에 전기적 연결을 수립하고, 호스트 장치로부터 수신되는 다양한 리퀘스트들에 대해 응답할 수 있으며, 나아가 프로토콜 설정부(141)에서 호스트 장치로부터 수신되는 프로토콜 리퀘스트의 종류 및 상태에 따라 리포트 생성부(12)를 부트 프로토콜 모드 또는 리포트 프로토콜 모드 중 하나의 동작 모드로 설정한다.Meanwhile, the USB device controller 14 may establish an electrical connection between the USB interface 15 and the host device, respond to various requests received from the host device, and further, the protocol setting unit 141 may host the host device. The report generating unit 12 is set to an operation mode of either the boot protocol mode or the report protocol mode according to the type and state of the protocol request received from the protocol request.
호스트 장치에서 BIOS 또는 OS가 구동되면, 통상적으로 BIOS나, OS의 HID 클래스 드라이버는 USB 키보드 장치(10)에 대해 Get_Descriptor 리퀘스트를 발송한다. USB 장치 컨트롤러(14)는 Get_Descriptor 리퀘스트가 수신되면, 디스크립터 저장부(13)에 저장된 디스크립터들을 호스트 장치에 전달한다.When the BIOS or OS is run on the host device, the BIOS or HID class driver of the OS typically sends a Get_Descriptor request to the USB keyboard device 10. When the Get_Descriptor request is received, the USB device controller 14 transmits descriptors stored in the descriptor storage unit 13 to the host device.
또한, OS의 HID 클래스 드라이버는 USB 키보드 장치(10)에 대해 일부 디스크립터를 변경하고자 할 때에 Set_Descriptor 리퀘스트를 발송할 수도 있다. USB 장치 컨트롤러(14)는 Set_Descriptor 리퀘스트가 수신되면, 변경된 디스크립터를 디스크립터 저장부(13)에 저장할 수 있다.In addition, the HID class driver of the OS may send a Set_Descriptor request to the USB keyboard device 10 to change some descriptors. When the Set_Descriptor request is received, the USB device controller 14 may store the changed descriptor in the descriptor storage unit 13.
그 외에도, OS의 HID 클래스 드라이버는 USB 키보드 장치(10)에 대해 특정 리포트를 컨트롤 파이프를 통해 송신하라고 지시하는 Get_Report 리퀘스트, 호스트 장치로부터 특정 리포트를 USB 키보드 장치(10)에 전달하는 Set_Report 리퀘스트, USB 키보드 장치(10)로부터 현재의 아이들 비율을 검출하라는 Get_Idle 리퀘스트 및 특정 이벤트나 시간이 지날 때까지 인터럽트 IN 파이프를 통한 특정 리포트를 억제하는 Set_Idle 리퀘스트 등을 발송할 수 있다.In addition, the HID class driver in the OS provides a Get_Report request that instructs the USB keyboard device 10 to send a specific report through the control pipe, a Set_Report request that forwards a specific report from the host device to the USB keyboard device 10, USB The Get_Idle request for detecting the current idle rate from the keyboard device 10 and the Set_Idle request for suppressing a specific report through the interrupt IN pipe until a specific event or time passes may be sent.
그러나, 리퀘스트는 발송 주체가 OS인지 BIOS인지에 관한 직접적인 정보를 포함하는 것도 아니고, 또한 OS가 BIOS로부터 호스트 통제 권한을 넘겨 받는 과정을 USB 키보드 장치가 통보받는다거나 하지 않기 때문에, USB 키보드 장치(10)는 호스트 장치가 현재 BIOS에 의해 통제되는 중인지 OS에 의해 통제되는 중인지를 직접적으로 알 수 없다.However, the request does not include direct information as to whether the sender is an OS or a BIOS, and since the USB keyboard device is not informed that the OS is transferring host control from the BIOS, the USB keyboard device 10 ) Does not directly know whether the host device is currently being controlled by the BIOS or the OS.
그럼에도 불구하고, 본 발명의 발명자는 USB 키보드 장치(10)는 리퀘스트들을 구성하는 파트들(parts)을 분석하여 호스트 장치가 BIOS 통제 하인지, OS 통제 하인지 강하게 추정할 수 있다는 점을 발견하였다.Nevertheless, the inventor of the present invention has found that the USB keyboard device 10 can strongly estimate whether the host device is under BIOS control or OS control by analyzing the parts constituting the requests.
통상적으로, BIOS가 시스템의 제어 권한을 가진 때에는 Set_Protocol 리퀘스트를 USB 키보드 장치(10)에 발송하고, 또한 Get_descriptor 리퀘스트를 발송하지만 리포트 포맷을 묻지 않는다는 점과, 반면에 OS가 시스템의 제어를 시작하면 Get_Descriptor 리퀘스트를 USB 키보드 장치(10)에 발송하면서 리포트 포맷을 질의하지만 Set_Protocol 리퀘스트는 사실상 발송하지 않는다는 점이 관찰되었다.Typically, when the BIOS has control of the system, it sends a Set_Protocol request to the USB keyboard device 10, and also sends a Get_descriptor request but does not ask for the report format, while the OS starts to control the system, while Get_Descriptor It has been observed that the report format is queried while sending the request to the USB keyboard device 10, but the Set_Protocol request is not actually sent.
먼저 BIOS가 제어 권한을 가질 때에, BIOS는 PC와 같은 호스트 장치의 시동 시에 먼저 호스트 장치에 연결된 USB 장치들 중에서 부트 장치(boot devices)로 동작할 수 있다고 설정된 USB 장치들의 리스트를 작성(enumeration)한다.First, when the BIOS has control, the BIOS enumerates a list of USB devices that are set to be able to act as boot devices among the USB devices connected to the host device first when the host device, such as a PC, starts up. do.
BIOS는 부트 장치로 리스트된 USB 장치들에 대해, 현재 설정된 프로토콜의 종류를 응답하라는 Get_Protocol 리퀘스트, 프로토콜을 부트 프로토콜로 설정하라는 Set_Protocol 리퀘스트, 그리고 Get_Descriptor 리퀘스트를 보낼 수 있다.The BIOS may send a Get_Protocol request to answer the type of protocol currently set, a Set_Protocol request to set the protocol as the boot protocol, and a Get_Descriptor request to the USB devices listed as the boot device.
만약 USB 키보드 장치(10)가 프로토콜을 부트 프로토콜로 설정하라는 Set_Protocol 리퀘스트를 수신하면, 명백히 이 리퀘스트는 BIOS에 의해 발송된 것이라고 판정할 수 있다.If the USB keyboard device 10 receives a Set_Protocol request to set the protocol as the boot protocol, then it can be determined that this request is obviously sent by the BIOS.
또한 OS와 마찬가지로 BIOS도 Get_Descriptor 리퀘스트를 USB 키보드 장치(10)에 보내기는 하지만, BIOS는 부팅 시에 연결되는 부트 장치로서의 키보드 장치에 대해 부트 프로토콜에 따라 리포트할 것으로 간주하기 때문에 USB 키보드 장치(10)에 리포트 포맷을 묻지 않는다. 따라서, BIOS가 제어 권한을 가진 동안에, wValue 파트가 Report를 의미하는 0x22인 Get_Descriptor 리퀘스트가 수신될 가능성은 거의 없다.Also, like the OS, the BIOS sends a Get_Descriptor request to the USB keyboard device 10, but since the BIOS assumes that it will report according to the boot protocol for the keyboard device as a boot device connected at boot time, the USB keyboard device 10 Do not ask for a report format. Thus, while the BIOS has control, it is unlikely that a Get_Descriptor request with a wValue part of 0x22 meaning Report is received.
반면에, 호스트 장치에서 OS가 구동되면, OS의 HID 클래스 드라이버가 USB 키보드 장치(10)에 대해 Get_Descriptor 리퀘스트를 발송할 수 있다. 이때, OS는 Get_Descriptor 리퀘스트를 통해 USB 키보드 장치(10)의 리포트 포맷을 알려고 하는 것인데, 이를 위해서는 Get_Descriptor 리퀘스트의 wValue 파트가 Report를 의미하는 0x22 값을 가져야 한다. On the other hand, when the OS is running on the host device, the HID class driver of the OS may send a Get_Descriptor request to the USB keyboard device 10. At this time, the OS attempts to know the report format of the USB keyboard device 10 through the Get_Descriptor request. For this purpose, the wValue part of the Get_Descriptor request must have a value of 0x22 indicating a report.
따라서, 만약 Get_Descriptor 리퀘스트의 wValue 파트가 Report를 의미하는 0x22라면, Get_Descriptor 리퀘스트는 OS에 의해 발송된 것이라고 판정할 수 있다.Thus, if the wValue part of the Get_Descriptor request is 0x22, meaning Report, the Get_Descriptor request can be determined to have been sent by the OS.
따라서, 만약 호스트 장치가 Set_Protocol 리퀘스트를 수신하면, USB 장치 컨트롤러(14)의 프로토콜 설정부(141)는 호스트 장치가 현재 BIOS가 제어 권한을 가지는 부트 상태로 간주할 수 있다. 특히 Set_Protocol 리퀘스트 내에 설정된 wValue 파트가 "0", 즉 부트 프로토콜이면, USB 장치 컨트롤러(14)의 프로토콜 설정부(141)는 리포트 생성부(12)를 부트 프로토콜 모드로 설정할 수 있다. USB 키보드 장치(10)가 부트 프로토콜로 설정되면, 사용자에 의한 키 입력 시에는 특수 키 필드와 예비 필드 및 6 개의 일반 키의 키 코드 필드들을 포함하는 8 바이트 길이의 리포트가 생성될 것이다.Therefore, if the host device receives the Set_Protocol request, the protocol setting unit 141 of the USB device controller 14 may regard the host device as a boot state in which the BIOS currently has control authority. In particular, if the wValue part set in the Set_Protocol request is "0", that is, a boot protocol, the protocol setting unit 141 of the USB device controller 14 may set the report generation unit 12 to the boot protocol mode. If the USB keyboard device 10 is set as a boot protocol, an 8-byte long report will be generated that includes special key fields and spare fields and key code fields of six general keys upon key input by the user.
실시예에 따라서, 프로토콜 설정부(141)가 부트 상태인지 판단을 하는 조건으로서 전원이 새로 들어오거나 재부팅으로 USB 호스트 컨트롤러가 초기화되었으면서 다른 종류의 리퀘스트가 수신되지 않은 조건을 더 부가할 수도 있다.According to an exemplary embodiment, a condition for determining whether the protocol setting unit 141 is in a boot state may further include a condition in which a request of another type is not received while the power is newly supplied or the USB host controller is initialized by rebooting.
만약 호스트 장치가 Get_Descriptor 리퀘스트를 수신하고, 또한 Get_Descriptor 리퀘스트 내에 wVaule 파트가 가지는 클래스 디스크립터 타입이 Report 즉 0x22이면, USB 장치 컨트롤러(14)의 프로토콜 설정부(141)는 호스트 장치가 현재 OS가 제어 권한을 가지는 통상 상태라고 간주할 수 있다.If the host device receives the Get_Descriptor request and the class descriptor type of the wVaule part in the Get_Descriptor request is Report, that is, 0x22, the protocol setting unit 141 of the USB device controller 14 indicates that the host device has the current OS control right. Eggplant can be considered a normal state.
이에 따라 USB 장치 컨트롤러(14)의 프로토콜 설정부(141)는 리포트 생성부(12)를 리포트 프로토콜 모드로 설정하고, 리포트 디스크립터(132)에 선언된 리포트 카운트를 리포트 생성부(12)에 제공함으로써, 특수 키 필드와 예비 필드 및 7 개 이상의 일반 키의 키 코드 필드들을 포함하는 9 바이트 또는 그보다 큰 리포트를 생성하도록 한다.Accordingly, the protocol setting unit 141 of the USB device controller 14 sets the report generation unit 12 to the report protocol mode, and provides the report generation unit 12 with the report count declared in the
이어서, USB 장치 컨트롤러(14)는 생성된 리포트를 USB 인터페이스(15)를 통해 호스트 장치로 전송한다.The USB device controller 14 then sends the generated report to the host device via the USB interface 15.
도 2는 본 발명의 일 실시예에 따른 N키 롤오버 USB 키보드 장치에서 N키 롤오버 기능 제공 방법을 예시한 순서도이다.2 is a flowchart illustrating a method for providing an N-key rollover function in an N-key rollover USB keyboard device according to an embodiment of the present invention.
도 2를 참조하면, 단계(S21)에서, USB 장치 컨트롤러(14)는 호스트 장치 측에서 수신되는 리퀘스트가 Set_Protocol 리퀘스트인지 판단한다.Referring to FIG. 2, in step S21, the USB device controller 14 determines whether a request received from the host device is a Set_Protocol request.
구체적으로, 만약 호스트 장치 측에서 수신된 리퀘스트가 Set_Protocol 리퀘스트이고, Set_Protocol 리퀘스트 내에 포함된 프로토콜 타입 wValue 파트가 "0"으로서 Boot Protocol를 가리키면, 단계(S22)에서 USB 장치 컨트롤러(14)는 리포트 생성부(12)를 부트 프로토콜 모드로 설정하고, 단계(S23)에서 리포트 생성부(12)는 키 입력에 따라 특수 키 필드와 예비 필드 및 6 개의 일반 키의 키 코드 필드들을 포함하는 8 바이트 길이의 리포트를 생성한다.Specifically, if the request received from the host device side is a Set_Protocol request, and the protocol type wValue part included in the Set_Protocol request indicates a Boot Protocol as "0", the USB device controller 14 may generate a report in step S22. (12) is set to the boot protocol mode, and in step S23, the report generator 12 reports an 8-byte long report including a special key field and a spare field and key code fields of six general keys according to a key input. Create
만약 호스트 장치 측에서 수신된 리퀘스트가 Set_Protocol 리퀘스트가 아니면, 단계(S24)에서, USB 장치 컨트롤러(14)는 호스트 장치 측에서 수신되는 리퀘스트가 Get_Descriptor 리퀘스트인지 판단한다.If the request received at the host device side is not a Set_Protocol request, at step S24, the USB device controller 14 determines whether the request received at the host device side is a Get_Descriptor request.
만약 단계(S24)에서 호스트 장치 측에서 수신되는 리퀘스트가 Get_Descriptor 리퀘스트이고 또한 Get_Descriptor 리퀘스트 내에 포함된 wValue 파트가 가지는 클래스 디스크립터 타입이 Report이면, 단계(S25)에서, USB 장치 컨트롤러(14)는 리포트 생성부(12)를 리포트 프로토콜 모드로 설정한다.If the request received from the host device side in step S24 is a Get_Descriptor request and the class descriptor type of the wValue part included in the Get_Descriptor request is Report, in step S25, the USB device controller 14 reports the generation unit. Set (12) to Report Protocol Mode.
단계(S26)에서, USB 장치 컨트롤러(14)는 호스트 장치의 Get_Descriptor 리퀘스트에 대하여 소정의 리포트 카운트가 선언된 리포트 디스크립터(132)로써 호스트 장치에 응신한다. In step S26, the USB device controller 14 responds to the host device with the
단계(S27)에서, 리포트 생성부(12)는 리포트 디스크립터(132)에 사전에 선언된 소정의 리포트 카운트를 참조하여, 특수 키 필드와 예비 필드 및 리포트 카운트에 해당하는 개수의 일반 키의 키 코드 필드들을 포함하는 9 바이트 이상 크기의 리포트를 생성한다.In step S27, the report generation unit 12 refers to the predetermined report count previously declared in the
단계(S28)에서, USB 장치 컨트롤러(14)는 생성된 리포트를 USB 인터페이스(15)를 통해 호스트 장치로 전송한다.In step S28, the USB device controller 14 transmits the generated report to the host device via the USB interface 15.
이로써, N키 롤오버 USB 키보드 장치(10)는 호스트 장치의 제어 권한을 가지는 주체가 BIOS인지 OS인지인지 판단하고, BIOS가 제어 권한을 갖는 동안에는 8 바이트 크기의 리포트를 호스트 장치로 전송하지만, OS가 제어 권한을 갖는 동안에는 9 바이트 이상 크기의 리포트를 호스트 장치로 전송할 수 있다. As a result, the N-key rollover USB keyboard device 10 determines whether the host having the control right of the host device is the BIOS or the OS, and transmits an 8-byte report to the host device while the OS has the control right. While you have control, you can send a report of more than 9 bytes to the host device.
이러한 리포트 크기의 변동은 예를 들어 리포트 크기 선택 스위치의 구동과 같은 사용자의 개입이나 인지 없이도 자동으로 이루어질 수 있고, 따라서 호환성이나 불편함에 대한 염려 없이 USB 키보드에서 N키 롤오버 기능을 이용할 수 있다.This change in report size can be made automatically without user intervention or awareness, such as, for example, by running a report size selection switch, so that the N-key rollover function can be used on a USB keyboard without concern for compatibility or inconvenience.
이상과 같이 본 발명은 비록 한정된 실시예와 도면에 의해 설명되었으나, 본 발명이 상기의 실시예에 한정되는 것은 아니며, 이는 본 발명이 속하는 분야에서 통상의 지식을 가진 자라면 이러한 기재로부터 다양한 수정 및 변형이 가능하다. 따라서, 본 발명의 사상은 아래에 기재된 특허청구범위에 의해서만 파악되어야 하고, 이와 균등하거나 또는 등가적인 변형 모두는 본 발명 사상의 범주에 속한다 할 것이다.While the present invention has been particularly shown and described with reference to exemplary embodiments thereof, it is to be understood that the invention is not limited to the disclosed exemplary embodiments, but, on the contrary, Modification is possible. Accordingly, the spirit of the present invention should be understood only in accordance with the following claims, and all of the equivalent or equivalent variations will fall within the scope of the present invention.
10 N키 롤오버 USB 키보드 장치
11 키보드 스캔부 12 리포트 생성부
13 디스크립터 저장부 131 유시지 테이블
132 리포트 디스크립터
14 USB 장치 컨트롤러 141 프로토콜 설정부
15 USB 인터페이스10 N-key rollover USB keyboard device
11 Keyboard Scanning Section 12 Report Generation Section
13 Descriptor storage 131 Usage table
132 Report Descriptor
14 USB Device Controller 141 Protocol Settings
15 USB interface
Claims (10)
상기 USB 장치 컨트롤러가, 호스트 장치 측에서 수신되는 리퀘스트가 Set_Protocol 리퀘스트인지 판단하는 단계;
만약 상기 리퀘스트가 Set_Protocol 리퀘스트이면, 상기 USB 장치 컨트롤러가, 상기 리포트 생성부를 부트 프로토콜 모드로 설정하는 단계;
상기 리포트 생성부가 사용자의 키 눌림에 따라 특수 키 필드와 예비 필드 및 6 개의 일반 키의 키 코드 필드들을 포함하는 8 바이트 길이의 리포트를 생성하는 단계;
만약 상기 리퀘스트가 Set_Protocol 리퀘스트가 아니면, 상기 USB 장치 컨트롤러가, 상기 호스트 장치 측에서 수신되는 리퀘스트가 Get_Descriptor 리퀘스트인지 판단하는 단계;
만약 상기 리퀘스트가 Get_Descriptor 리퀘스트이고, Get_Descriptor 리퀘스트 내에 포함된 wValue 파트가 가지는 클래스 디스크립터 타입이 Report이면, 상기 USB 장치 컨트롤러가 상기 리포트 생성부를 리포트 프로토콜 모드로 설정하는 단계;
상기 리포트 생성부가 상기 디스크립터 저장부에 저장된 리포트 디스크립터에 선언된 소정의 리포트 카운트를 참조하여, 특수 키 필드와 예비 필드 및 상기 리포트 카운트에 해당하는 개수의 일반 키의 키 코드 필드들을 포함하는 9 바이트 이상 크기의 리포트를 생성하는 단계; 및
상기 USB 장치 컨트롤러가 생성된 리포트를 호스트 장치로 전송하는 단계를 포함하는 USB 키보드 장치에서 N키 롤오버 기능 제공 방법.A method for providing an N-key rollover function in a USB keyboard device including a descriptor storage unit, a USB device controller, and a report generator,
Determining, by the USB device controller, whether a request received from a host device is a Set_Protocol request;
If the request is a Set_Protocol request, setting, by the USB device controller, the report generator to a boot protocol mode;
Generating, by the report generator, an 8-byte long report including a special key field, a spare field, and key code fields of six general keys according to a user's key press;
If the request is not a Set_Protocol request, determining, by the USB device controller, whether the request received from the host device is a Get_Descriptor request;
If the request is a Get_Descriptor request and the class descriptor type of the wValue part included in the Get_Descriptor request is Report, setting, by the USB device controller, the report generator in report protocol mode;
9 or more bytes including a special key field, a spare field, and key code fields of the number of general keys corresponding to the report count, with reference to a predetermined report count declared in a report descriptor stored in the descriptor storage unit. Generating a report of size; And
And transmitting, by the USB device controller, the generated report to a host device.
만약 상기 리퀘스트가 Set_Protocol 리퀘스트이고, Set_Protocol 리퀘스트 내에 포함된 프로토콜 타입 wValue 파트가 Boot Protocol를 의미하면, 상기 USB 장치 컨트롤러가, 상기 리포트 생성부를 부트 프로토콜 모드로 설정하는 단계인 것을 특징으로 하는 USB 키보드 장치에서 N키 롤오버 기능 제공 방법.The method of claim 1, wherein if the request is a Set_Protocol request, the step of setting, by the USB device controller, the report generator to a boot protocol mode,
If the request is a Set_Protocol request and the protocol type wValue part included in the Set_Protocol request means Boot Protocol, the USB device controller is to set the report generator to boot protocol mode. How to provide N-key rollover function.
상기 USB 장치 컨트롤러가, 호스트 장치 측에서 수신되는 리퀘스트를 분석하는 단계;
상기 USB 장치 컨트롤러가, 리퀘스트 분석 결과에 따라 상기 리포트 생성부를 부트 프로토콜 모드 또는 리포트 프로토콜 모드 중 하나로 설정하는 단계;
상기 리포트 생성부가 부트 프로토콜 모드로 설정되면 사용자의 키 눌림에 따라 특수 키 필드와 예비 필드 및 6 개의 일반 키의 키 코드 필드들을 포함하는 8 바이트 길이의 리포트를 생성하는 단계;
상기 리포트 생성부가 리포트 프로토콜 모드로 설정되면 상기 디스크립터 저장부에 저장된 리포트 디스크립터에 선언된 소정의 리포트 카운트를 참조하여, 특수 키 필드와 예비 필드 및 상기 리포트 카운트에 해당하는 개수의 일반 키의 키 코드 필드들을 포함하는 9 바이트 이상 크기의 리포트를 생성하는 단계; 및
상기 USB 장치 컨트롤러가 생성된 리포트를 호스트 장치로 전송하는 단계를 포함하는 USB 키보드 장치에서 N키 롤오버 기능 제공 방법.A method for providing an N-key rollover function in a USB keyboard device including a descriptor storage unit, a USB device controller, and a report generator,
Analyzing, by the USB device controller, a request received at a host device side;
Setting, by the USB device controller, the report generator to one of a boot protocol mode and a report protocol mode according to a request analysis result;
If the report generator is set to a boot protocol mode, generating a 8-byte long report including a special key field, a spare field, and key code fields of six general keys according to a user's key press;
When the report generating unit is set to the report protocol mode, a special key field and a spare field and key code fields of the number of general keys corresponding to the report count are referred to by referring to a predetermined report count declared in the report descriptor stored in the descriptor storage unit. Generating a report having a size of at least 9 bytes including the data; And
And transmitting, by the USB device controller, the generated report to a host device.
상기 USB 장치 컨트롤러가, 상기 리퀘스트가 Set_Protocol 리퀘스트이고 또한 Set_Protocol 리퀘스트 내에 포함된 프로토콜 타입 wValue 파트가 Boot Protocol를 의미하는지 판단하는 단계; 및
상기 USB 장치 컨트롤러가, 상기 리퀘스트가 Get_Descriptor 리퀘스트이고 또한 Get_Descriptor 리퀘스트 내에 포함된 wValue 파트가 가지는 클래스 디스크립터 타입이 Report인지 판단하는 단계를 포함하는 것을 특징으로 하는 USB 키보드 장치에서 N키 롤오버 기능 제공 방법.The method of claim 4, wherein the analyzing of the request received from the host device side by the USB device controller comprises:
Determining, by the USB device controller, whether the request is a Set_Protocol request and a protocol type wValue part included in the Set_Protocol request means Boot Protocol; And
And determining, by the USB device controller, that the request is a Get_Descriptor request and that the class descriptor type of the wValue part included in the Get_Descriptor request is a Report.
상기 USB 장치 컨트롤러가, 리퀘스트의 분석 결과로서, 만약 상기 리퀘스트가 Set_Protocol 리퀘스트이고 또한 Set_Protocol 리퀘스트 내에 포함된 프로토콜 타입 wValue 파트가 Boot Protocol를 의미하면, 상기 리포트 생성부를 부트 프로토콜 모드로 설정하는 단계; 및
상기 USB 장치 컨트롤러가, 리퀘스트의 분석 결과로서, 만약 상기 리퀘스트가 Get_Descriptor 리퀘스트이고 또한 Get_Descriptor 리퀘스트 내에 포함된 wValue 파트가 가지는 클래스 디스크립터 타입이 Report이면, 상기 리포트 생성부를 리포트 프로토콜 모드로 설정하는 단계를 포함하는 것을 특징으로 하는 USB 키보드 장치에서 N키 롤오버 기능 제공 방법.The method of claim 5, wherein the setting of the report generator to one of a boot protocol mode and a report protocol mode according to a request analysis result comprises:
Setting, by the USB device controller, the report generator as a boot protocol mode if the request is a Set_Protocol request and the protocol type wValue part included in the Set_Protocol request means Boot Protocol as a result of analyzing the request; And
Setting, by the USB device controller, the report generation unit to report protocol mode if the request is a Get_Descriptor request and the class descriptor type of the wValue part included in the Get_Descriptor request is Report as a result of analyzing the request; And providing an N-key rollover function in a USB keyboard device.
상기 호스트 장치에서 수신되는 리퀘스트를 분석하여 부트 프로토콜 모드 또는 리포트 프로토콜 모드 중 하나의 프로토콜 모드를 설정하고, 사용자의 키 눌림에 의한 키 코드들을 아이템으로서 포함하는 리포트를 상기 호스트 장치로 전송하는 USB 장치 컨트롤러; 및
설정된 프로토콜 모드가 부트 프로토콜 모드이면 부트 프로토콜에 따라 6 개의 일반 키 코드들을 포함하는 리포트를 생성하고, 설정된 프로토콜 모드가 리포트 프로토콜 모드이면 상기 디스크립터 저장부에 선언된 리포트 카운트에 상응하는 개수의 일반 키들의 키 코드들을 포함하는 리포트를 생성하며, 상기 생성된 리포트를 상기 USB 장치 컨트롤러로 출력하는 리포트 생성부를 포함하는 N키 롤오버 USB 키보드 장치.According to the Universal Serial Bus (USB) Human Interface Device (HID) specification, the report descriptor declares the report size, which is the field size of the item to report to the host device, and the report count, which is the number of fields of the item. Descriptor storage including;
A USB device controller for analyzing a request received from the host device to set a protocol mode of one of a boot protocol mode and a report protocol mode, and to transmit a report to the host device, the report including key codes by a user's key press as an item. ; And
If the set protocol mode is the boot protocol mode, a report including 6 general key codes is generated according to the boot protocol. If the set protocol mode is the report protocol mode, the number of general keys corresponding to the report count declared in the descriptor storage is generated. And a report generator for generating a report including key codes and outputting the generated report to the USB device controller.
만약 상기 호스트 장치 측에서 수신되는 리퀘스트가 Set_Protocol 리퀘스트이면, 상기 리포트 생성부를 부트 프로토콜 모드로 설정하도록 동작하는 것을 특징으로 하는 N키 롤오버 USB 키보드 장치.The method of claim 7, wherein the USB device controller,
And if the request received from the host device is a Set_Protocol request, setting the report generator to a boot protocol mode.
만약 상기 리퀘스트가 Get_Descriptor 리퀘스트이고 또한 Get_Descriptor 리퀘스트 내에 포함된 wValue 파트가 가지는 클래스 디스크립터 타입이 Report이면, 상기 리포트 생성부를 리포트 프로토콜 모드로 설정하도록 동작하는 것을 특징으로 하는 N키 롤오버 USB 키보드 장치.The method of claim 7, wherein the USB device controller,
And if the request is a Get_Descriptor request and the class descriptor type of the wValue part included in the Get_Descriptor request is Report, setting the report generator to report protocol mode.
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020130006384A KR101374801B1 (en) | 2013-01-21 | 2013-01-21 | Usb keyboard apparatus and method capable of supporting n-key rollover with bios compatibility |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020130006384A KR101374801B1 (en) | 2013-01-21 | 2013-01-21 | Usb keyboard apparatus and method capable of supporting n-key rollover with bios compatibility |
Publications (1)
Publication Number | Publication Date |
---|---|
KR101374801B1 true KR101374801B1 (en) | 2014-03-13 |
Family
ID=50648827
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020130006384A KR101374801B1 (en) | 2013-01-21 | 2013-01-21 | Usb keyboard apparatus and method capable of supporting n-key rollover with bios compatibility |
Country Status (1)
Country | Link |
---|---|
KR (1) | KR101374801B1 (en) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108388372A (en) * | 2018-02-24 | 2018-08-10 | 广州视源电子科技股份有限公司 | Method, device and equipment for self-adapting touch data and storage medium |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2000163198A (en) | 1998-11-27 | 2000-06-16 | Nec Shizuoka Ltd | N key rollover keyboard system |
KR100905238B1 (en) | 2001-07-27 | 2009-07-01 | 게이츠 유닛타 아시아 가부시키가이샤 | Autotensioner |
KR20110100884A (en) * | 2010-03-05 | 2011-09-15 | 주식회사 포인칩스 | Multiple inputs at the same time as the usb keyboard |
-
2013
- 2013-01-21 KR KR1020130006384A patent/KR101374801B1/en not_active IP Right Cessation
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2000163198A (en) | 1998-11-27 | 2000-06-16 | Nec Shizuoka Ltd | N key rollover keyboard system |
KR100905238B1 (en) | 2001-07-27 | 2009-07-01 | 게이츠 유닛타 아시아 가부시키가이샤 | Autotensioner |
KR20110100884A (en) * | 2010-03-05 | 2011-09-15 | 주식회사 포인칩스 | Multiple inputs at the same time as the usb keyboard |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108388372A (en) * | 2018-02-24 | 2018-08-10 | 广州视源电子科技股份有限公司 | Method, device and equipment for self-adapting touch data and storage medium |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7047331B2 (en) | Interfacing devices | |
US20090210608A1 (en) | KVM switch and operation method thereof | |
US5835791A (en) | Versatile connection of a first keyboard/mouse interface and a second keyboard/mouse interface to a host computer | |
US6044428A (en) | Configurable universal serial bus node | |
JP3814535B2 (en) | Input device | |
US20050216620A1 (en) | KVM and USB peripheral switch | |
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 | |
US9645960B2 (en) | KVM switch | |
CN109918320B (en) | Control method and device of USB equipment and KVM control system | |
US20110270961A1 (en) | Information processing apparatus, selector, remote operation system, scan code transmission method, and program product therefor | |
US20080151127A1 (en) | Display apparatus having network communicating function and control method thereof | |
WO2010077813A2 (en) | Composite device emulation | |
KR101374801B1 (en) | Usb keyboard apparatus and method capable of supporting n-key rollover with bios compatibility | |
JPH06214762A (en) | Hot-plug support for computer input device | |
EP3477440A1 (en) | Serial communication method and sensor controller | |
KR101340892B1 (en) | Usb keyboard apparatus and method capable of supporting n-key rollover over 62 keys | |
TWI416368B (en) | Keyboard mouse switch and switching method thereof | |
KR101376603B1 (en) | Computer keyboard device capable of activating application on a computer and method for activating application | |
KR20070109829A (en) | Usb keyboard and human input device using the same | |
TWI510925B (en) | Remote management device for detecting status of controlled computers | |
US20080284727A1 (en) | Input apparatus and information processing apparatus | |
JP2012213859A (en) | Printer, program, and printer system | |
WO2015035609A1 (en) | Method and device for simultaneously uploading keyboard key codes | |
CN100476698C (en) | A signal shifter |
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: 20170207 Year of fee payment: 4 |
|
FPAY | Annual fee payment |
Payment date: 20171226 Year of fee payment: 5 |
|
LAPS | Lapse due to unpaid annual fee |