안경잡이개발자

728x90
반응형

  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");
}

 

728x90
반응형