# HID - Human Interface Device

# HID Report Descriptors

## Items

Main Items
- Input
- Output
- Feature
- Collection
- End Collection

Global Items (Säilyvät main itemeitten jälkeen)
- Usage Page
- Logical Minimum / Logical Maximum (protokollassa olevat arvot)
- Physical Minimum / Physical Maximum (reaalimaailman arvot)
- Report Size
- Report Count
- Report ID
- Unit
- Unit Exponent
- Push / Pop

Local Items (Määriteltävä aina main itemin käytön jälkeen)
- Usage, Usage Minimun / Usage Maximum
- Designator Index, Designator Minimum / Designator Maximum
- String Index, String Minimum / String Maximum
- Delimiter
- Reserved

## Esimerkkejä

### Joystick

Minimalistic joystick
- Joystick must have atleast 2 axis. 2 buttons.

char ReportDescriptor[46] = {
    0x05, 0x01,                    // USAGE_PAGE (Generic Desktop)
    0x09, 0x04,                    // USAGE (Joystick)
    0xa1, 0x01,                    // COLLECTION (Application)
    0x09, 0x01,                    //   USAGE (Pointer)
    0xa1, 0x00,                    //   COLLECTION (Physical)
    0x15, 0x81,                    //     LOGICAL_MINIMUM (-127)
    0x25, 0x7f,                    //     LOGICAL_MAXIMUM (127)
    0x09, 0x30,                    //     USAGE (X)
    0x09, 0x31,                    //     USAGE (Y)
    0x95, 0x02,                    //     REPORT_COUNT (2)
    0x75, 0x08,                    //   REPORT_SIZE (8)
    0x81, 0x02,                    //     INPUT (Data,Var,Abs)
    0xc0,                          //   END_COLLECTION
    0x05, 0x09,                    //   USAGE_PAGE (Button)
    0x19, 0x01,                    //   USAGE_MINIMUM (Button 1)
    0x29, 0x02,                    //   USAGE_MAXIMUM (Button 2)
    0x15, 0x00,                    //   LOGICAL_MINIMUM (0)
    0x25, 0x01,                    //   LOGICAL_MAXIMUM (1)
    0x75, 0x01,                    //   REPORT_SIZE (1)
    0x95, 0x02,                    //   REPORT_COUNT (2)
    0x81, 0x02,                    //   INPUT (Data,Var,Abs)
    0x75, 0x06,                    //   REPORT_SIZE (6)
    0x81, 0x01,                    //   INPUT (Cnst,Ary,Abs)
    0xc0                           // END_COLLECTION
};



### Mouse
### Keyboard

## Arduino

- Kannattaa käyttää esim: Arduino Uno r3 tai Arduino 2560 r3, koska niissä toimii dfu-lataus hyvin ja helposti.
- LUFA-100807
- arduino-1.0