하나의 아두이노 USB 장치(Device)가 여러 기능(Interface)를 제공하는 방법
USB 장치(Device)는 기본적으로 동시에 여러 개의 인터페이스(Interface)를 제공할 수 있다. 여기에서 인터페이스라는 것은 하나의 기능을 의미한다. 예를 들어 하나의 USB 기기가 동시에 마우스이면서 키보드가 되도록 할 수 있다. 실제로 USB 장치를 꽂기만 하면 마우스(Mouse)가 마음대로 동작하고, 그와 동시에 키보드(Keyboard)로 무작위로 아무 내용이나 입력이 되도록 할 수도 있다.
아두이노(Arduino) IDE를 따르는 Teensy Board를 기준으로 설명하겠다. Teensy Board는 아두이노 IDE에서 [USB Type]을 설정할 수 있다. [USB Type]으로 [Keyboard]를 설정하는 경우, Teensy Board가 "Keyboard" 인터페이스를 가지는 USB 기기가 되는 것이다. 이를 선택하면 자동으로 USB Descriptor에 Keyboard 인터페이스 정보가 담기게 된다.
예를 들어 다음과 같이 [USB Type]으로 [All of the Above]를 설정하는 경우, 동시에 10개가 넘는 인터페이스를 제공할 수 있다. 호스트(Host) PC는 Teensy Board의 각 인터페이스와 통신하면서 Teensy Board가 의도했던 기능이 수행되는 것이다.
그렇다면, 이러한 인터페이스 정보는 어디에 기록되어 있는 것을까? Teensy Board의 경우 아두이노 IDE 위에서 동작하기 때문에, 기본적인 설정 정보는 다 아두이노(Arduino)가 설치된 폴더에 존재한다.
구체적으로 인터페이스 환경설정 내용은 usb_desc.h에 기록되어 있는데, 이것은 다음의 경로에 존재한다.
C:\Program Files (x86)\Arduino\hardware\teensy\avr\cores\teensy3
실제로 usb_desc.h 파일을 열어 보면, "USB_EVERYTHING"으로 정의된 매크로를 확인할 수 있다. 실제로 Teensy Board의 [USB Type]을 "All of the Above"로 설정하면 "USB_EVERYTHING" 매크로가 활성화된다.
이 경우 Keyboard, Serial, Mouse 등 다양한 라이브러리를 사용할 수 있다. 바로 다음과 같이 코드를 작성해도 정상 동작하는데, 말 그대로 마우스/키보드/시리얼 등이 동시에 동작하는 하나의 USB 장치를 만들 수 있는 것이다.
void setup() {
}
void loop() {
int i;
for (i = 0; i < 40; i++) {
Mouse.move(2, -1);
delay(100);
}
delay(1000);
Serial.println("Hello");
Keyboard.print("Hello World");
}
'기타' 카테고리의 다른 글
대학원생/유튜버/강사를 위한 종합소득세 납부 방법 (전체 과정 사진 첨부) (2) | 2020.05.22 |
---|---|
국세청 홈택스 종합소득세 신고를 잘못한 경우 신고서 수정 방법 (0) | 2020.05.22 |
MTP(Media Transfer Protocol) 라이브러리를 이용하여 Teensy를 USB Storage처럼 사용해보자! (0) | 2020.05.12 |
USB(Universal Serial Bus) 프로토콜의 기초 지식 (0) | 2020.05.11 |
USB 프로토콜의 전송 형태(Transfer Type)에 대해서 알아보자! (0) | 2020.05.11 |