1 /*********************************************************************** 2 * $Id: mw_usbd_hid.h.rca 1.2 Tue Nov 1 11:45:07 2011 nlv09221 Experimental $ 3 * 4 * Project: USB device ROM Stack 5 * 6 * Description: 7 * HID Definitions. 8 * 9 *********************************************************************** 10 * Copyright(C) 2011, NXP Semiconductor 11 * All rights reserved. 12 * 13 * Software that is described herein is for illustrative purposes only 14 * which provides customers with programming information regarding the 15 * products. This software is supplied "AS IS" without any warranties. 16 * NXP Semiconductors assumes no responsibility or liability for the 17 * use of the software, conveys no license or title under any patent, 18 * copyright, or mask work right to the product. NXP Semiconductors 19 * reserves the right to make changes in the software without 20 * notification. NXP Semiconductors also make no representation or 21 * warranty that such application will be suitable for the specified 22 * use without further testing or modification. 23 **********************************************************************/ 24 #ifndef __HID_H__ 25 #define __HID_H__ 26 27 #include "usbd.h" 28 29 /** \file 30 * \brief Common definitions and declarations for the library USB HID Class driver. 31 * 32 * Common definitions and declarations for the library USB HID Class driver. 33 * \addtogroup USBD_HID 34 * @{ 35 */ 36 37 38 /** HID Subclass Codes 39 * @{ 40 */ 41 /** Descriptor Subclass value indicating that the device or interface does not implement a HID boot protocol. */ 42 #define HID_SUBCLASS_NONE 0x00 43 /** Descriptor Subclass value indicating that the device or interface implements a HID boot protocol. */ 44 #define HID_SUBCLASS_BOOT 0x01 45 /** @} */ 46 47 /** HID Protocol Codes 48 * @{ 49 */ 50 /** Descriptor Protocol value indicating that the device or interface does not belong to a HID boot protocol. */ 51 #define HID_PROTOCOL_NONE 0x00 52 /** Descriptor Protocol value indicating that the device or interface belongs to the Keyboard HID boot protocol. */ 53 #define HID_PROTOCOL_KEYBOARD 0x01 54 /** Descriptor Protocol value indicating that the device or interface belongs to the Mouse HID boot protocol. */ 55 #define HID_PROTOCOL_MOUSE 0x02 56 /** @} */ 57 58 59 60 /** Descriptor Types 61 * @{ 62 */ 63 /** Descriptor header type value, to indicate a HID class HID descriptor. */ 64 #define HID_HID_DESCRIPTOR_TYPE 0x21 65 /** Descriptor header type value, to indicate a HID class HID report descriptor. */ 66 #define HID_REPORT_DESCRIPTOR_TYPE 0x22 67 /** Descriptor header type value, to indicate a HID class HID Physical descriptor. */ 68 #define HID_PHYSICAL_DESCRIPTOR_TYPE 0x23 69 /** @} */ 70 71 72 /** \brief HID class-specific HID Descriptor. 73 * 74 * Type define for the HID class-specific HID descriptor, to describe the HID device's specifications. Refer to the HID 75 * specification for details on the structure elements. 76 * 77 */ 78 PRE_PACK struct POST_PACK _HID_DESCRIPTOR { 79 uint8_t bLength; /**< Size of the descriptor, in bytes. */ 80 uint8_t bDescriptorType; /**< Type of HID descriptor. */ 81 uint16_t bcdHID; /**< BCD encoded version that the HID descriptor and device complies to. */ 82 uint8_t bCountryCode; /**< Country code of the localized device, or zero if universal. */ 83 uint8_t bNumDescriptors; /**< Total number of HID report descriptors for the interface. */ 84 85 PRE_PACK struct POST_PACK _HID_DESCRIPTOR_LIST { 86 uint8_t bDescriptorType; /**< Type of HID report. */ 87 uint16_t wDescriptorLength; /**< Length of the associated HID report descriptor, in bytes. */ 88 } DescriptorList[1]; /**< Array of one or more descriptors */ 89 } ; 90 /** HID class-specific HID Descriptor. */ 91 typedef struct _HID_DESCRIPTOR HID_DESCRIPTOR; 92 93 #define HID_DESC_SIZE sizeof(HID_DESCRIPTOR) 94 95 /** HID Request Codes 96 * @{ 97 */ 98 #define HID_REQUEST_GET_REPORT 0x01 99 #define HID_REQUEST_GET_IDLE 0x02 100 #define HID_REQUEST_GET_PROTOCOL 0x03 101 #define HID_REQUEST_SET_REPORT 0x09 102 #define HID_REQUEST_SET_IDLE 0x0A 103 #define HID_REQUEST_SET_PROTOCOL 0x0B 104 /** @} */ 105 106 /** HID Report Types 107 * @{ 108 */ 109 #define HID_REPORT_INPUT 0x01 110 #define HID_REPORT_OUTPUT 0x02 111 #define HID_REPORT_FEATURE 0x03 112 /** @} */ 113 114 115 /** Usage Pages 116 * @{ 117 */ 118 #define HID_USAGE_PAGE_UNDEFINED 0x00 119 #define HID_USAGE_PAGE_GENERIC 0x01 120 #define HID_USAGE_PAGE_SIMULATION 0x02 121 #define HID_USAGE_PAGE_VR 0x03 122 #define HID_USAGE_PAGE_SPORT 0x04 123 #define HID_USAGE_PAGE_GAME 0x05 124 #define HID_USAGE_PAGE_DEV_CONTROLS 0x06 125 #define HID_USAGE_PAGE_KEYBOARD 0x07 126 #define HID_USAGE_PAGE_LED 0x08 127 #define HID_USAGE_PAGE_BUTTON 0x09 128 #define HID_USAGE_PAGE_ORDINAL 0x0A 129 #define HID_USAGE_PAGE_TELEPHONY 0x0B 130 #define HID_USAGE_PAGE_CONSUMER 0x0C 131 #define HID_USAGE_PAGE_DIGITIZER 0x0D 132 #define HID_USAGE_PAGE_UNICODE 0x10 133 #define HID_USAGE_PAGE_ALPHANUMERIC 0x14 134 /** @} */ 135 136 137 /** Generic Desktop Page (0x01) 138 * @{ 139 */ 140 #define HID_USAGE_GENERIC_POINTER 0x01 141 #define HID_USAGE_GENERIC_MOUSE 0x02 142 #define HID_USAGE_GENERIC_JOYSTICK 0x04 143 #define HID_USAGE_GENERIC_GAMEPAD 0x05 144 #define HID_USAGE_GENERIC_KEYBOARD 0x06 145 #define HID_USAGE_GENERIC_KEYPAD 0x07 146 #define HID_USAGE_GENERIC_X 0x30 147 #define HID_USAGE_GENERIC_Y 0x31 148 #define HID_USAGE_GENERIC_Z 0x32 149 #define HID_USAGE_GENERIC_RX 0x33 150 #define HID_USAGE_GENERIC_RY 0x34 151 #define HID_USAGE_GENERIC_RZ 0x35 152 #define HID_USAGE_GENERIC_SLIDER 0x36 153 #define HID_USAGE_GENERIC_DIAL 0x37 154 #define HID_USAGE_GENERIC_WHEEL 0x38 155 #define HID_USAGE_GENERIC_HATSWITCH 0x39 156 #define HID_USAGE_GENERIC_COUNTED_BUFFER 0x3A 157 #define HID_USAGE_GENERIC_BYTE_COUNT 0x3B 158 #define HID_USAGE_GENERIC_MOTION_WAKEUP 0x3C 159 #define HID_USAGE_GENERIC_VX 0x40 160 #define HID_USAGE_GENERIC_VY 0x41 161 #define HID_USAGE_GENERIC_VZ 0x42 162 #define HID_USAGE_GENERIC_VBRX 0x43 163 #define HID_USAGE_GENERIC_VBRY 0x44 164 #define HID_USAGE_GENERIC_VBRZ 0x45 165 #define HID_USAGE_GENERIC_VNO 0x46 166 #define HID_USAGE_GENERIC_SYSTEM_CTL 0x80 167 #define HID_USAGE_GENERIC_SYSCTL_POWER 0x81 168 #define HID_USAGE_GENERIC_SYSCTL_SLEEP 0x82 169 #define HID_USAGE_GENERIC_SYSCTL_WAKE 0x83 170 #define HID_USAGE_GENERIC_SYSCTL_CONTEXT_MENU 0x84 171 #define HID_USAGE_GENERIC_SYSCTL_MAIN_MENU 0x85 172 #define HID_USAGE_GENERIC_SYSCTL_APP_MENU 0x86 173 #define HID_USAGE_GENERIC_SYSCTL_HELP_MENU 0x87 174 #define HID_USAGE_GENERIC_SYSCTL_MENU_EXIT 0x88 175 #define HID_USAGE_GENERIC_SYSCTL_MENU_SELECT 0x89 176 #define HID_USAGE_GENERIC_SYSCTL_MENU_RIGHT 0x8A 177 #define HID_USAGE_GENERIC_SYSCTL_MENU_LEFT 0x8B 178 #define HID_USAGE_GENERIC_SYSCTL_MENU_UP 0x8C 179 #define HID_USAGE_GENERIC_SYSCTL_MENU_DOWN 0x8D 180 /** @} */ 181 182 /** Simulation Controls Page (0x02) 183 * @{ 184 */ 185 #define HID_USAGE_SIMULATION_RUDDER 0xBA 186 #define HID_USAGE_SIMULATION_THROTTLE 0xBB 187 /** @} */ 188 189 /* Virtual Reality Controls Page (0x03) */ 190 /* ... */ 191 192 /* Sport Controls Page (0x04) */ 193 /* ... */ 194 195 /* Game Controls Page (0x05) */ 196 /* ... */ 197 198 /* Generic Device Controls Page (0x06) */ 199 /* ... */ 200 201 /** Keyboard/Keypad Page (0x07) 202 * @{ 203 */ 204 /** Error "keys" */ 205 #define HID_USAGE_KEYBOARD_NOEVENT 0x00 206 #define HID_USAGE_KEYBOARD_ROLLOVER 0x01 207 #define HID_USAGE_KEYBOARD_POSTFAIL 0x02 208 #define HID_USAGE_KEYBOARD_UNDEFINED 0x03 209 210 /** Letters */ 211 #define HID_USAGE_KEYBOARD_aA 0x04 212 #define HID_USAGE_KEYBOARD_zZ 0x1D 213 214 /** Numbers */ 215 #define HID_USAGE_KEYBOARD_ONE 0x1E 216 #define HID_USAGE_KEYBOARD_ZERO 0x27 217 218 #define HID_USAGE_KEYBOARD_RETURN 0x28 219 #define HID_USAGE_KEYBOARD_ESCAPE 0x29 220 #define HID_USAGE_KEYBOARD_DELETE 0x2A 221 222 /** Funtion keys */ 223 #define HID_USAGE_KEYBOARD_F1 0x3A 224 #define HID_USAGE_KEYBOARD_F12 0x45 225 226 #define HID_USAGE_KEYBOARD_PRINT_SCREEN 0x46 227 228 /** Modifier Keys */ 229 #define HID_USAGE_KEYBOARD_LCTRL 0xE0 230 #define HID_USAGE_KEYBOARD_LSHFT 0xE1 231 #define HID_USAGE_KEYBOARD_LALT 0xE2 232 #define HID_USAGE_KEYBOARD_LGUI 0xE3 233 #define HID_USAGE_KEYBOARD_RCTRL 0xE4 234 #define HID_USAGE_KEYBOARD_RSHFT 0xE5 235 #define HID_USAGE_KEYBOARD_RALT 0xE6 236 #define HID_USAGE_KEYBOARD_RGUI 0xE7 237 #define HID_USAGE_KEYBOARD_SCROLL_LOCK 0x47 238 #define HID_USAGE_KEYBOARD_NUM_LOCK 0x53 239 #define HID_USAGE_KEYBOARD_CAPS_LOCK 0x39 240 /** @} */ 241 242 /* ... */ 243 244 /** LED Page (0x08) 245 * @{ 246 */ 247 #define HID_USAGE_LED_NUM_LOCK 0x01 248 #define HID_USAGE_LED_CAPS_LOCK 0x02 249 #define HID_USAGE_LED_SCROLL_LOCK 0x03 250 #define HID_USAGE_LED_COMPOSE 0x04 251 #define HID_USAGE_LED_KANA 0x05 252 #define HID_USAGE_LED_POWER 0x06 253 #define HID_USAGE_LED_SHIFT 0x07 254 #define HID_USAGE_LED_DO_NOT_DISTURB 0x08 255 #define HID_USAGE_LED_MUTE 0x09 256 #define HID_USAGE_LED_TONE_ENABLE 0x0A 257 #define HID_USAGE_LED_HIGH_CUT_FILTER 0x0B 258 #define HID_USAGE_LED_LOW_CUT_FILTER 0x0C 259 #define HID_USAGE_LED_EQUALIZER_ENABLE 0x0D 260 #define HID_USAGE_LED_SOUND_FIELD_ON 0x0E 261 #define HID_USAGE_LED_SURROUND_FIELD_ON 0x0F 262 #define HID_USAGE_LED_REPEAT 0x10 263 #define HID_USAGE_LED_STEREO 0x11 264 #define HID_USAGE_LED_SAMPLING_RATE_DETECT 0x12 265 #define HID_USAGE_LED_SPINNING 0x13 266 #define HID_USAGE_LED_CAV 0x14 267 #define HID_USAGE_LED_CLV 0x15 268 #define HID_USAGE_LED_RECORDING_FORMAT_DET 0x16 269 #define HID_USAGE_LED_OFF_HOOK 0x17 270 #define HID_USAGE_LED_RING 0x18 271 #define HID_USAGE_LED_MESSAGE_WAITING 0x19 272 #define HID_USAGE_LED_DATA_MODE 0x1A 273 #define HID_USAGE_LED_BATTERY_OPERATION 0x1B 274 #define HID_USAGE_LED_BATTERY_OK 0x1C 275 #define HID_USAGE_LED_BATTERY_LOW 0x1D 276 #define HID_USAGE_LED_SPEAKER 0x1E 277 #define HID_USAGE_LED_HEAD_SET 0x1F 278 #define HID_USAGE_LED_HOLD 0x20 279 #define HID_USAGE_LED_MICROPHONE 0x21 280 #define HID_USAGE_LED_COVERAGE 0x22 281 #define HID_USAGE_LED_NIGHT_MODE 0x23 282 #define HID_USAGE_LED_SEND_CALLS 0x24 283 #define HID_USAGE_LED_CALL_PICKUP 0x25 284 #define HID_USAGE_LED_CONFERENCE 0x26 285 #define HID_USAGE_LED_STAND_BY 0x27 286 #define HID_USAGE_LED_CAMERA_ON 0x28 287 #define HID_USAGE_LED_CAMERA_OFF 0x29 288 #define HID_USAGE_LED_ON_LINE 0x2A 289 #define HID_USAGE_LED_OFF_LINE 0x2B 290 #define HID_USAGE_LED_BUSY 0x2C 291 #define HID_USAGE_LED_READY 0x2D 292 #define HID_USAGE_LED_PAPER_OUT 0x2E 293 #define HID_USAGE_LED_PAPER_JAM 0x2F 294 #define HID_USAGE_LED_REMOTE 0x30 295 #define HID_USAGE_LED_FORWARD 0x31 296 #define HID_USAGE_LED_REVERSE 0x32 297 #define HID_USAGE_LED_STOP 0x33 298 #define HID_USAGE_LED_REWIND 0x34 299 #define HID_USAGE_LED_FAST_FORWARD 0x35 300 #define HID_USAGE_LED_PLAY 0x36 301 #define HID_USAGE_LED_PAUSE 0x37 302 #define HID_USAGE_LED_RECORD 0x38 303 #define HID_USAGE_LED_ERROR 0x39 304 #define HID_USAGE_LED_SELECTED_INDICATOR 0x3A 305 #define HID_USAGE_LED_IN_USE_INDICATOR 0x3B 306 #define HID_USAGE_LED_MULTI_MODE_INDICATOR 0x3C 307 #define HID_USAGE_LED_INDICATOR_ON 0x3D 308 #define HID_USAGE_LED_INDICATOR_FLASH 0x3E 309 #define HID_USAGE_LED_INDICATOR_SLOW_BLINK 0x3F 310 #define HID_USAGE_LED_INDICATOR_FAST_BLINK 0x40 311 #define HID_USAGE_LED_INDICATOR_OFF 0x41 312 #define HID_USAGE_LED_FLASH_ON_TIME 0x42 313 #define HID_USAGE_LED_SLOW_BLINK_ON_TIME 0x43 314 #define HID_USAGE_LED_SLOW_BLINK_OFF_TIME 0x44 315 #define HID_USAGE_LED_FAST_BLINK_ON_TIME 0x45 316 #define HID_USAGE_LED_FAST_BLINK_OFF_TIME 0x46 317 #define HID_USAGE_LED_INDICATOR_COLOR 0x47 318 #define HID_USAGE_LED_RED 0x48 319 #define HID_USAGE_LED_GREEN 0x49 320 #define HID_USAGE_LED_AMBER 0x4A 321 #define HID_USAGE_LED_GENERIC_INDICATOR 0x4B 322 /** @} */ 323 324 /* Button Page (0x09) 325 */ 326 /* There is no need to label these usages. */ 327 328 /* Ordinal Page (0x0A) 329 */ 330 /* There is no need to label these usages. */ 331 332 /** Telephony Device Page (0x0B) 333 * @{ 334 */ 335 #define HID_USAGE_TELEPHONY_PHONE 0x01 336 #define HID_USAGE_TELEPHONY_ANSWERING_MACHINE 0x02 337 #define HID_USAGE_TELEPHONY_MESSAGE_CONTROLS 0x03 338 #define HID_USAGE_TELEPHONY_HANDSET 0x04 339 #define HID_USAGE_TELEPHONY_HEADSET 0x05 340 #define HID_USAGE_TELEPHONY_KEYPAD 0x06 341 #define HID_USAGE_TELEPHONY_PROGRAMMABLE_BUTTON 0x07 342 /** @} */ 343 /* ... */ 344 345 /** Consumer Page (0x0C) 346 * @{ 347 */ 348 #define HID_USAGE_CONSUMER_CONTROL 0x01 349 #define HID_USAGE_CONSUMER_FAST_FORWARD 0xB3 350 #define HID_USAGE_CONSUMER_REWIND 0xB4 351 #define HID_USAGE_CONSUMER_PLAY_PAUSE 0xCD 352 #define HID_USAGE_CONSUMER_VOLUME_INCREMENT 0xE9 353 #define HID_USAGE_CONSUMER_VOLUME_DECREMENT 0xEA 354 /** @} */ 355 /* ... */ 356 357 /* and others ... */ 358 359 360 /** HID Report Item Macros 361 * @{ 362 */ 363 /** Main Items */ 364 #define HID_Input(x) 0x81,x 365 #define HID_Output(x) 0x91,x 366 #define HID_Feature(x) 0xB1,x 367 #define HID_Collection(x) 0xA1,x 368 #define HID_EndCollection 0xC0 369 370 /** Data (Input, Output, Feature) */ 371 #define HID_Data 0<<0 372 #define HID_Constant 1<<0 373 #define HID_Array 0<<1 374 #define HID_Variable 1<<1 375 #define HID_Absolute 0<<2 376 #define HID_Relative 1<<2 377 #define HID_NoWrap 0<<3 378 #define HID_Wrap 1<<3 379 #define HID_Linear 0<<4 380 #define HID_NonLinear 1<<4 381 #define HID_PreferredState 0<<5 382 #define HID_NoPreferred 1<<5 383 #define HID_NoNullPosition 0<<6 384 #define HID_NullState 1<<6 385 #define HID_NonVolatile 0<<7 386 #define HID_Volatile 1<<7 387 388 /** Collection Data */ 389 #define HID_Physical 0x00 390 #define HID_Application 0x01 391 #define HID_Logical 0x02 392 #define HID_Report 0x03 393 #define HID_NamedArray 0x04 394 #define HID_UsageSwitch 0x05 395 #define HID_UsageModifier 0x06 396 397 /** Global Items */ 398 #define HID_UsagePage(x) 0x05,x 399 #define HID_UsagePageVendor(x) 0x06,x,0xFF 400 #define HID_LogicalMin(x) 0x15,x 401 #define HID_LogicalMinS(x) 0x16,(x&0xFF),((x>>8)&0xFF) 402 #define HID_LogicalMinL(x) 0x17,(x&0xFF),((x>>8)&0xFF),((x>>16)&0xFF),((x>>24)&0xFF) 403 #define HID_LogicalMax(x) 0x25,x 404 #define HID_LogicalMaxS(x) 0x26,(x&0xFF),((x>>8)&0xFF) 405 #define HID_LogicalMaxL(x) 0x27,(x&0xFF),((x>>8)&0xFF),((x>>16)&0xFF),((x>>24)&0xFF) 406 #define HID_PhysicalMin(x) 0x35,x 407 #define HID_PhysicalMinS(x) 0x36,(x&0xFF),((x>>8)&0xFF) 408 #define HID_PhysicalMinL(x) 0x37,(x&0xFF),((x>>8)&0xFF),((x>>16)&0xFF),((x>>24)&0xFF) 409 #define HID_PhysicalMax(x) 0x45,x 410 #define HID_PhysicalMaxS(x) 0x46,(x&0xFF),((x>>8)&0xFF) 411 #define HID_PhysicalMaxL(x) 0x47,(x&0xFF),((x>>8)&0xFF),((x>>16)&0xFF),((x>>24)&0xFF) 412 #define HID_UnitExponent(x) 0x55,x 413 #define HID_Unit(x) 0x65,x 414 #define HID_UnitS(x) 0x66,(x&0xFF),((x>>8)&0xFF) 415 #define HID_UnitL(x) 0x67,(x&0xFF),((x>>8)&0xFF),((x>>16)&0xFF),((x>>24)&0xFF) 416 #define HID_ReportSize(x) 0x75,x 417 #define HID_ReportID(x) 0x85,x 418 #define HID_ReportCount(x) 0x95,x 419 #define HID_Push 0xA0 420 #define HID_Pop 0xB0 421 422 /** Local Items */ 423 #define HID_Usage(x) 0x09,x 424 #define HID_UsageMin(x) 0x19,x 425 #define HID_UsageMax(x) 0x29,x 426 /** @} */ 427 428 /** @} */ 429 430 #endif /* __HID_H__ */ 431