Arrow / Mbed OS DAPLink Reset
Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers usb_hid.h Source File

usb_hid.h

Go to the documentation of this file.
00001 /**
00002  * @file    usb_hid.h
00003  * @brief   USB hid driver header
00004  *
00005  * DAPLink Interface Firmware
00006  * Copyright (c) 2009-2016, ARM Limited, All Rights Reserved
00007  * SPDX-License-Identifier: Apache-2.0
00008  *
00009  * Licensed under the Apache License, Version 2.0 (the "License"); you may
00010  * not use this file except in compliance with the License.
00011  * You may obtain a copy of the License at
00012  *
00013  * http://www.apache.org/licenses/LICENSE-2.0
00014  *
00015  * Unless required by applicable law or agreed to in writing, software
00016  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
00017  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
00018  * See the License for the specific language governing permissions and
00019  * limitations under the License.
00020  */
00021 
00022 #ifndef __USB_HID_H__
00023 #define __USB_HID_H__
00024 
00025 
00026 /* HID Subclass Codes */
00027 #define HID_SUBCLASS_NONE               0x00
00028 #define HID_SUBCLASS_BOOT               0x01
00029 
00030 /* HID Protocol Codes */
00031 #define HID_PROTOCOL_NONE               0x00
00032 #define HID_PROTOCOL_BOOT               0x00
00033 #define HID_PROTOCOL_KEYBOARD           0x01
00034 #define HID_PROTOCOL_REPORT             0x01
00035 #define HID_PROTOCOL_MOUSE              0x02
00036 
00037 
00038 /* HID Descriptor Types */
00039 #define HID_HID_DESCRIPTOR_TYPE         0x21
00040 #define HID_REPORT_DESCRIPTOR_TYPE      0x22
00041 #define HID_PHYSICAL_DESCRIPTOR_TYPE    0x23
00042 
00043 
00044 /* HID Descriptor */
00045 typedef __packed struct _HID_DESCRIPTOR {
00046     U8  bLength;
00047     U8  bDescriptorType;
00048     U16 bcdHID;
00049     U8  bCountryCode;
00050     U8  bNumDescriptors;
00051     /* Array of one or more descriptors */
00052     __packed struct _HID_DESCRIPTOR_LIST {
00053         U8  bDescriptorType;
00054         U16 wDescriptorLength;
00055     } DescriptorList[1];
00056 } HID_DESCRIPTOR;
00057 
00058 
00059 /* HID Request Codes */
00060 #define HID_REQUEST_GET_REPORT          0x01
00061 #define HID_REQUEST_GET_IDLE            0x02
00062 #define HID_REQUEST_GET_PROTOCOL        0x03
00063 #define HID_REQUEST_SET_REPORT          0x09
00064 #define HID_REQUEST_SET_IDLE            0x0A
00065 #define HID_REQUEST_SET_PROTOCOL        0x0B
00066 
00067 /* HID Report Types */
00068 #define HID_REPORT_INPUT                0x01
00069 #define HID_REPORT_OUTPUT               0x02
00070 #define HID_REPORT_FEATURE              0x03
00071 
00072 
00073 /* Usage Pages */
00074 #define HID_USAGE_PAGE_UNDEFINED        0x00
00075 #define HID_USAGE_PAGE_GENERIC          0x01
00076 #define HID_USAGE_PAGE_SIMULATION       0x02
00077 #define HID_USAGE_PAGE_VR               0x03
00078 #define HID_USAGE_PAGE_SPORT            0x04
00079 #define HID_USAGE_PAGE_GAME             0x05
00080 #define HID_USAGE_PAGE_DEV_CONTROLS     0x06
00081 #define HID_USAGE_PAGE_KEYBOARD         0x07
00082 #define HID_USAGE_PAGE_LED              0x08
00083 #define HID_USAGE_PAGE_BUTTON           0x09
00084 #define HID_USAGE_PAGE_ORDINAL          0x0A
00085 #define HID_USAGE_PAGE_TELEPHONY        0x0B
00086 #define HID_USAGE_PAGE_CONSUMER         0x0C
00087 #define HID_USAGE_PAGE_DIGITIZER        0x0D
00088 #define HID_USAGE_PAGE_UNICODE          0x10
00089 #define HID_USAGE_PAGE_ALPHANUMERIC     0x14
00090 /* ... */
00091 
00092 
00093 /* Generic Desktop Page (0x01) */
00094 #define HID_USAGE_GENERIC_POINTER               0x01
00095 #define HID_USAGE_GENERIC_MOUSE                 0x02
00096 #define HID_USAGE_GENERIC_JOYSTICK              0x04
00097 #define HID_USAGE_GENERIC_GAMEPAD               0x05
00098 #define HID_USAGE_GENERIC_KEYBOARD              0x06
00099 #define HID_USAGE_GENERIC_KEYPAD                0x07
00100 #define HID_USAGE_GENERIC_X                     0x30
00101 #define HID_USAGE_GENERIC_Y                     0x31
00102 #define HID_USAGE_GENERIC_Z                     0x32
00103 #define HID_USAGE_GENERIC_RX                    0x33
00104 #define HID_USAGE_GENERIC_RY                    0x34
00105 #define HID_USAGE_GENERIC_RZ                    0x35
00106 #define HID_USAGE_GENERIC_SLIDER                0x36
00107 #define HID_USAGE_GENERIC_DIAL                  0x37
00108 #define HID_USAGE_GENERIC_WHEEL                 0x38
00109 #define HID_USAGE_GENERIC_HATSWITCH             0x39
00110 #define HID_USAGE_GENERIC_COUNTED_BUFFER        0x3A
00111 #define HID_USAGE_GENERIC_BYTE_COUNT            0x3B
00112 #define HID_USAGE_GENERIC_MOTION_WAKEUP         0x3C
00113 #define HID_USAGE_GENERIC_VX                    0x40
00114 #define HID_USAGE_GENERIC_VY                    0x41
00115 #define HID_USAGE_GENERIC_VZ                    0x42
00116 #define HID_USAGE_GENERIC_VBRX                  0x43
00117 #define HID_USAGE_GENERIC_VBRY                  0x44
00118 #define HID_USAGE_GENERIC_VBRZ                  0x45
00119 #define HID_USAGE_GENERIC_VNO                   0x46
00120 #define HID_USAGE_GENERIC_SYSTEM_CTL            0x80
00121 #define HID_USAGE_GENERIC_SYSCTL_POWER          0x81
00122 #define HID_USAGE_GENERIC_SYSCTL_SLEEP          0x82
00123 #define HID_USAGE_GENERIC_SYSCTL_WAKE           0x83
00124 #define HID_USAGE_GENERIC_SYSCTL_CONTEXT_MENU   0x84
00125 #define HID_USAGE_GENERIC_SYSCTL_MAIN_MENU      0x85
00126 #define HID_USAGE_GENERIC_SYSCTL_APP_MENU       0x86
00127 #define HID_USAGE_GENERIC_SYSCTL_HELP_MENU      0x87
00128 #define HID_USAGE_GENERIC_SYSCTL_MENU_EXIT      0x88
00129 #define HID_USAGE_GENERIC_SYSCTL_MENU_SELECT    0x89
00130 #define HID_USAGE_GENERIC_SYSCTL_MENU_RIGHT     0x8A
00131 #define HID_USAGE_GENERIC_SYSCTL_MENU_LEFT      0x8B
00132 #define HID_USAGE_GENERIC_SYSCTL_MENU_UP        0x8C
00133 #define HID_USAGE_GENERIC_SYSCTL_MENU_DOWN      0x8D
00134 /* ... */
00135 
00136 /* Simulation Controls Page (0x02) */
00137 /* ... */
00138 #define HID_USAGE_SIMULATION_RUDDER             0xBA
00139 #define HID_USAGE_SIMULATION_THROTTLE           0xBB
00140 /* ... */
00141 
00142 /* Virtual Reality Controls Page (0x03) */
00143 /* ... */
00144 
00145 /* Sport Controls Page (0x04) */
00146 /* ... */
00147 
00148 /* Game Controls Page (0x05) */
00149 /* ... */
00150 
00151 /* Generic Device Controls Page (0x06) */
00152 /* ... */
00153 
00154 /* Keyboard/Keypad Page (0x07) */
00155 
00156 /* Keyboard Usage Keys */
00157 extern const unsigned char HID_KEYBOARD_ID_TO_ASCII[256];
00158 extern const unsigned char HID_KEYBOARD_ALT_ID_TO_ASCII[57];
00159 
00160 /* Error "Keys" */
00161 #define HID_USAGE_KEYBOARD_NOEVENT              0x00
00162 #define HID_USAGE_KEYBOARD_ROLLOVER             0x01
00163 #define HID_USAGE_KEYBOARD_POSTFAIL             0x02
00164 #define HID_USAGE_KEYBOARD_UNDEFINED            0x03
00165 
00166 /* Letters */
00167 #define HID_USAGE_KEYBOARD_aA                   0x04
00168 #define HID_USAGE_KEYBOARD_zZ                   0x1D
00169 
00170 /* Numbers */
00171 #define HID_USAGE_KEYBOARD_ONE                  0x1E
00172 #define HID_USAGE_KEYBOARD_ZERO                 0x27
00173 
00174 #define HID_USAGE_KEYBOARD_RETURN               0x28
00175 #define HID_USAGE_KEYBOARD_ESCAPE               0x29
00176 #define HID_USAGE_KEYBOARD_DELETE               0x2A
00177 
00178 /* Funtion Keys */
00179 #define HID_USAGE_KEYBOARD_F1                   0x3A
00180 #define HID_USAGE_KEYBOARD_F12                  0x45
00181 
00182 #define HID_USAGE_KEYBOARD_PRINT_SCREEN         0x46
00183 
00184 /* Modifier Keys */
00185 #define HID_USAGE_KEYBOARD_LCTRL                0xE0
00186 #define HID_USAGE_KEYBOARD_LSHFT                0xE1
00187 #define HID_USAGE_KEYBOARD_LALT                 0xE2
00188 #define HID_USAGE_KEYBOARD_LGUI                 0xE3
00189 #define HID_USAGE_KEYBOARD_RCTRL                0xE4
00190 #define HID_USAGE_KEYBOARD_RSHFT                0xE5
00191 #define HID_USAGE_KEYBOARD_RALT                 0xE6
00192 #define HID_USAGE_KEYBOARD_RGUI                 0xE7
00193 #define HID_USAGE_KEYBOARD_SCROLL_LOCK          0x47
00194 #define HID_USAGE_KEYBOARD_NUM_LOCK             0x53
00195 #define HID_USAGE_KEYBOARD_CAPS_LOCK            0x39
00196 
00197 /* Modifier Keys (values) */
00198 #define HID_USAGE_KEYBOARD_MOD_LCTRL            0x01
00199 #define HID_USAGE_KEYBOARD_MOD_LSHIFT           0x02
00200 #define HID_USAGE_KEYBOARD_MOD_LALTL            0x04
00201 #define HID_USAGE_KEYBOARD_MOD_LGUI             0x08
00202 #define HID_USAGE_KEYBOARD_MOD_RCTRL            0x10
00203 #define HID_USAGE_KEYBOARD_MOD_RSHIFT           0x20
00204 #define HID_USAGE_KEYBOARD_MOD_RALTL            0x40
00205 #define HID_USAGE_KEYBOARD_MOD_RGUI             0x80
00206 
00207 /* ... */
00208 
00209 /* LED Page (0x08) */
00210 #define HID_USAGE_LED_NUM_LOCK                  0x01
00211 #define HID_USAGE_LED_CAPS_LOCK                 0x02
00212 #define HID_USAGE_LED_SCROLL_LOCK               0x03
00213 #define HID_USAGE_LED_COMPOSE                   0x04
00214 #define HID_USAGE_LED_KANA                      0x05
00215 #define HID_USAGE_LED_POWER                     0x06
00216 #define HID_USAGE_LED_SHIFT                     0x07
00217 #define HID_USAGE_LED_DO_NOT_DISTURB            0x08
00218 #define HID_USAGE_LED_MUTE                      0x09
00219 #define HID_USAGE_LED_TONE_ENABLE               0x0A
00220 #define HID_USAGE_LED_HIGH_CUT_FILTER           0x0B
00221 #define HID_USAGE_LED_LOW_CUT_FILTER            0x0C
00222 #define HID_USAGE_LED_EQUALIZER_ENABLE          0x0D
00223 #define HID_USAGE_LED_SOUND_FIELD_ON            0x0E
00224 #define HID_USAGE_LED_SURROUND_FIELD_ON         0x0F
00225 #define HID_USAGE_LED_REPEAT                    0x10
00226 #define HID_USAGE_LED_STEREO                    0x11
00227 #define HID_USAGE_LED_SAMPLING_RATE_DETECT      0x12
00228 #define HID_USAGE_LED_SPINNING                  0x13
00229 #define HID_USAGE_LED_CAV                       0x14
00230 #define HID_USAGE_LED_CLV                       0x15
00231 #define HID_USAGE_LED_RECORDING_FORMAT_DET      0x16
00232 #define HID_USAGE_LED_OFF_HOOK                  0x17
00233 #define HID_USAGE_LED_RING                      0x18
00234 #define HID_USAGE_LED_MESSAGE_WAITING           0x19
00235 #define HID_USAGE_LED_DATA_MODE                 0x1A
00236 #define HID_USAGE_LED_BATTERY_OPERATION         0x1B
00237 #define HID_USAGE_LED_BATTERY_OK                0x1C
00238 #define HID_USAGE_LED_BATTERY_LOW               0x1D
00239 #define HID_USAGE_LED_SPEAKER                   0x1E
00240 #define HID_USAGE_LED_HEAD_SET                  0x1F
00241 #define HID_USAGE_LED_HOLD                      0x20
00242 #define HID_USAGE_LED_MICROPHONE                0x21
00243 #define HID_USAGE_LED_COVERAGE                  0x22
00244 #define HID_USAGE_LED_NIGHT_MODE                0x23
00245 #define HID_USAGE_LED_SEND_CALLS                0x24
00246 #define HID_USAGE_LED_CALL_PICKUP               0x25
00247 #define HID_USAGE_LED_CONFERENCE                0x26
00248 #define HID_USAGE_LED_STAND_BY                  0x27
00249 #define HID_USAGE_LED_CAMERA_ON                 0x28
00250 #define HID_USAGE_LED_CAMERA_OFF                0x29
00251 #define HID_USAGE_LED_ON_LINE                   0x2A
00252 #define HID_USAGE_LED_OFF_LINE                  0x2B
00253 #define HID_USAGE_LED_BUSY                      0x2C
00254 #define HID_USAGE_LED_READY                     0x2D
00255 #define HID_USAGE_LED_PAPER_OUT                 0x2E
00256 #define HID_USAGE_LED_PAPER_JAM                 0x2F
00257 #define HID_USAGE_LED_REMOTE                    0x30
00258 #define HID_USAGE_LED_FORWARD                   0x31
00259 #define HID_USAGE_LED_REVERSE                   0x32
00260 #define HID_USAGE_LED_STOP                      0x33
00261 #define HID_USAGE_LED_REWIND                    0x34
00262 #define HID_USAGE_LED_FAST_FORWARD              0x35
00263 #define HID_USAGE_LED_PLAY                      0x36
00264 #define HID_USAGE_LED_PAUSE                     0x37
00265 #define HID_USAGE_LED_RECORD                    0x38
00266 #define HID_USAGE_LED_ERROR                     0x39
00267 #define HID_USAGE_LED_SELECTED_INDICATOR        0x3A
00268 #define HID_USAGE_LED_IN_USE_INDICATOR          0x3B
00269 #define HID_USAGE_LED_MULTI_MODE_INDICATOR      0x3C
00270 #define HID_USAGE_LED_INDICATOR_ON              0x3D
00271 #define HID_USAGE_LED_INDICATOR_FLASH           0x3E
00272 #define HID_USAGE_LED_INDICATOR_SLOW_BLINK      0x3F
00273 #define HID_USAGE_LED_INDICATOR_FAST_BLINK      0x40
00274 #define HID_USAGE_LED_INDICATOR_OFF             0x41
00275 #define HID_USAGE_LED_FLASH_ON_TIME             0x42
00276 #define HID_USAGE_LED_SLOW_BLINK_ON_TIME        0x43
00277 #define HID_USAGE_LED_SLOW_BLINK_OFF_TIME       0x44
00278 #define HID_USAGE_LED_FAST_BLINK_ON_TIME        0x45
00279 #define HID_USAGE_LED_FAST_BLINK_OFF_TIME       0x46
00280 #define HID_USAGE_LED_INDICATOR_COLOR           0x47
00281 #define HID_USAGE_LED_RED                       0x48
00282 #define HID_USAGE_LED_GREEN                     0x49
00283 #define HID_USAGE_LED_AMBER                     0x4A
00284 #define HID_USAGE_LED_GENERIC_INDICATOR         0x4B
00285 
00286 /* Button Page (0x09) */
00287 /*   There is no need to label these usages. */
00288 
00289 /* Ordinal Page (0x0A) */
00290 /*   There is no need to label these usages. */
00291 
00292 /* Telephony Device Page (0x0B) */
00293 #define HID_USAGE_TELEPHONY_PHONE               0x01
00294 #define HID_USAGE_TELEPHONY_ANSWERING_MACHINE   0x02
00295 #define HID_USAGE_TELEPHONY_MESSAGE_CONTROLS    0x03
00296 #define HID_USAGE_TELEPHONY_HANDSET             0x04
00297 #define HID_USAGE_TELEPHONY_HEADSET             0x05
00298 #define HID_USAGE_TELEPHONY_KEYPAD              0x06
00299 #define HID_USAGE_TELEPHONY_PROGRAMMABLE_BUTTON 0x07
00300 /* ... */
00301 
00302 /* Consumer Page (0x0C) */
00303 #define HID_USAGE_CONSUMER_CONTROL              0x01
00304 /* ... */
00305 
00306 /* and others ... */
00307 
00308 
00309 /* HID Report Item Macros */
00310 
00311 /* Main Items */
00312 #define HID_Input(x)           0x81,x
00313 #define HID_Output(x)          0x91,x
00314 #define HID_Feature(x)         0xB1,x
00315 #define HID_Collection(x)      0xA1,x
00316 #define HID_EndCollection      0xC0
00317 
00318 /* Data (Input, Output, Feature) */
00319 #define HID_Data               0<<0
00320 #define HID_Constant           1<<0
00321 #define HID_Array              0<<1
00322 #define HID_Variable           1<<1
00323 #define HID_Absolute           0<<2
00324 #define HID_Relative           1<<2
00325 #define HID_NoWrap             0<<3
00326 #define HID_Wrap               1<<3
00327 #define HID_Linear             0<<4
00328 #define HID_NonLinear          1<<4
00329 #define HID_PreferredState     0<<5
00330 #define HID_NoPreferred        1<<5
00331 #define HID_NoNullPosition     0<<6
00332 #define HID_NullState          1<<6
00333 #define HID_NonVolatile        0<<7
00334 #define HID_Volatile           1<<7
00335 
00336 /* Collection Data */
00337 #define HID_Physical           0x00
00338 #define HID_Application        0x01
00339 #define HID_Logical            0x02
00340 #define HID_Report             0x03
00341 #define HID_NamedArray         0x04
00342 #define HID_UsageSwitch        0x05
00343 #define HID_UsageModifier      0x06
00344 
00345 /* Global Items */
00346 #define HID_UsagePage(x)       0x05,x
00347 #define HID_UsagePageVendor(x) 0x06,x,0xFF
00348 #define HID_LogicalMin(x)      0x15,x
00349 #define HID_LogicalMinS(x)     0x16,(x&0xFF),((x>>8)&0xFF)
00350 #define HID_LogicalMinL(x)     0x17,(x&0xFF),((x>>8)&0xFF),((x>>16)&0xFF),((x>>24)&0xFF)
00351 #define HID_LogicalMax(x)      0x25,x
00352 #define HID_LogicalMaxS(x)     0x26,(x&0xFF),((x>>8)&0xFF)
00353 #define HID_LogicalMaxL(x)     0x27,(x&0xFF),((x>>8)&0xFF),((x>>16)&0xFF),((x>>24)&0xFF)
00354 #define HID_PhysicalMin(x)     0x35,x
00355 #define HID_PhysicalMinS(x)    0x36,(x&0xFF),((x>>8)&0xFF)
00356 #define HID_PhysicalMinL(x)    0x37,(x&0xFF),((x>>8)&0xFF),((x>>16)&0xFF),((x>>24)&0xFF)
00357 #define HID_PhysicalMax(x)     0x45,x
00358 #define HID_PhysicalMaxS(x)    0x46,(x&0xFF),((x>>8)&0xFF)
00359 #define HID_PhysicalMaxL(x)    0x47,(x&0xFF),((x>>8)&0xFF),((x>>16)&0xFF),((x>>24)&0xFF)
00360 #define HID_UnitExponent(x)    0x55,x
00361 #define HID_Unit(x)            0x65,x
00362 #define HID_UnitS(x)           0x66,(x&0xFF),((x>>8)&0xFF)
00363 #define HID_UnitL(x)           0x67,(x&0xFF),((x>>8)&0xFF),((x>>16)&0xFF),((x>>24)&0xFF)
00364 #define HID_ReportSize(x)      0x75,x
00365 #define HID_ReportSizeS(x)     0x76,(x&0xFF),((x>>8)&0xFF)
00366 #define HID_ReportSizeL(x)     0x77,(x&0xFF),((x>>8)&0xFF),((x>>16)&0xFF),((x>>24)&0xFF)
00367 #define HID_ReportID(x)        0x85,x
00368 #define HID_ReportCount(x)     0x95,x
00369 #define HID_ReportCountS(x)    0x96,(x&0xFF),((x>>8)&0xFF)
00370 #define HID_ReportCountL(x)    0x97,(x&0xFF),((x>>8)&0xFF),((x>>16)&0xFF),((x>>24)&0xFF)
00371 #define HID_Push               0xA4
00372 #define HID_Pop                0xB4
00373 
00374 /* Local Items */
00375 #define HID_Usage(x)           0x09,x
00376 #define HID_UsageMin(x)        0x19,x
00377 #define HID_UsageMax(x)        0x29,x
00378 
00379 
00380 #endif  /* __USB_HID_H__ */