1*10465441SEvalZero /* 2*10465441SEvalZero * Copyright (c) 2006-2018, RT-Thread Development Team 3*10465441SEvalZero * 4*10465441SEvalZero * SPDX-License-Identifier: Apache-2.0 5*10465441SEvalZero * 6*10465441SEvalZero * Change Logs: 7*10465441SEvalZero * Date Author Notes 8*10465441SEvalZero * 2017-03-13 Urey the first version 9*10465441SEvalZero * 2017-11-16 ZYH Update to common hid 10*10465441SEvalZero */ 11*10465441SEvalZero #ifndef _USBDEVICE_CLASS_HID_H_ 12*10465441SEvalZero #define _USBDEVICE_CLASS_HID_H_ 13*10465441SEvalZero 14*10465441SEvalZero #ifdef __cplusplus 15*10465441SEvalZero extern "C" { 16*10465441SEvalZero #endif 17*10465441SEvalZero 18*10465441SEvalZero #define HID_DESCRIPTOR_TYPE 0x21 19*10465441SEvalZero #define HID_DESCRIPTOR_SIZE 0x09 20*10465441SEvalZero #define HID_OFF_HID_DESC 0x12 21*10465441SEvalZero 22*10465441SEvalZero #define USB_HID_SUBCLASS_BOOT 0x01 23*10465441SEvalZero #define USB_HID_SUBCLASS_NOBOOT 0x00 24*10465441SEvalZero 25*10465441SEvalZero #define USB_HID_PROTOCOL_NONE 0x00 26*10465441SEvalZero #define USB_HID_PROTOCOL_KEYBOARD 0x01 27*10465441SEvalZero #define USB_HID_PROTOCOL_MOUSE 0x02 28*10465441SEvalZero 29*10465441SEvalZero 30*10465441SEvalZero #define USB_HID_REQ_GET_REPORT 0x01 31*10465441SEvalZero #define USB_HID_REQ_GET_IDLE 0x02 32*10465441SEvalZero #define USB_HID_REQ_GET_PROTOCOL 0x03 33*10465441SEvalZero #define USB_HID_REQ_SET_REPORT 0x09 34*10465441SEvalZero #define USB_HID_REQ_SET_IDLE 0x0a 35*10465441SEvalZero #define USB_HID_REQ_SET_PROTOCOL 0x0b 36*10465441SEvalZero 37*10465441SEvalZero #define MAX_REPORT_SIZE 64 38*10465441SEvalZero #define HID_RX_BUFSIZE 64 39*10465441SEvalZero 40*10465441SEvalZero /* HID Report Types */ 41*10465441SEvalZero #define HID_REPORT_INPUT 0x01 42*10465441SEvalZero #define HID_REPORT_OUTPUT 0x02 43*10465441SEvalZero #define HID_REPORT_FEATURE 0x03 44*10465441SEvalZero 45*10465441SEvalZero /* Usage Pages */ 46*10465441SEvalZero #define USAGEPAGE_UNDEFINED 0x00 47*10465441SEvalZero #define USAGEPAGE_GENERIC 0x01 48*10465441SEvalZero #define USAGEPAGE_SIMULATION 0x02 49*10465441SEvalZero #define USAGEPAGE_VR 0x03 50*10465441SEvalZero #define USAGEPAGE_SPORT 0x04 51*10465441SEvalZero #define USAGEPAGE_GAME 0x05 52*10465441SEvalZero #define USAGEPAGE_DEV_CONTROLS 0x06 53*10465441SEvalZero #define USAGEPAGE_KEYBOARD 0x07 54*10465441SEvalZero #define USAGEPAGE_LED 0x08 55*10465441SEvalZero #define USAGEPAGE_BUTTON 0x09 56*10465441SEvalZero #define USAGEPAGE_ORDINAL 0x0A 57*10465441SEvalZero #define USAGEPAGE_TELEPHONY 0x0B 58*10465441SEvalZero #define USAGEPAGE_CONSUMER 0x0C 59*10465441SEvalZero #define USAGEPAGE_DIGITIZER 0x0D 60*10465441SEvalZero #define USAGEPAGE_PIDPAGE 0x0F 61*10465441SEvalZero #define USAGEPAGE_UNICODE 0x10 62*10465441SEvalZero #define USAGEPAGE_ALPHANUMERIC 0x14 63*10465441SEvalZero #define USAGEPAGE_BARCODESCANNER 0x8C 64*10465441SEvalZero 65*10465441SEvalZero /* Generic Desktop Page (0x01) */ 66*10465441SEvalZero #define USAGE_GENERIC_POINTER 0x01 67*10465441SEvalZero #define USAGE_GENERIC_MOUSE 0x02 68*10465441SEvalZero #define USAGE_GENERIC_JOYSTICK 0x04 69*10465441SEvalZero #define USAGE_GENERIC_GAMEPAD 0x05 70*10465441SEvalZero #define USAGE_GENERIC_KEYBOARD 0x06 71*10465441SEvalZero #define USAGE_GENERIC_KEYPAD 0x07 72*10465441SEvalZero #define USAGE_GENERIC_X 0x30 73*10465441SEvalZero #define USAGE_GENERIC_Y 0x31 74*10465441SEvalZero #define USAGE_GENERIC_Z 0x32 75*10465441SEvalZero #define USAGE_GENERIC_RX 0x33 76*10465441SEvalZero #define USAGE_GENERIC_RY 0x34 77*10465441SEvalZero #define USAGE_GENERIC_RZ 0x35 78*10465441SEvalZero #define USAGE_GENERIC_SLIDER 0x36 79*10465441SEvalZero #define USAGE_GENERIC_DIAL 0x37 80*10465441SEvalZero #define USAGE_GENERIC_WHEEL 0x38 81*10465441SEvalZero #define USAGE_GENERIC_HATSWITCH 0x39 82*10465441SEvalZero #define USAGE_GENERIC_COUNTED_BUFFER 0x3A 83*10465441SEvalZero #define USAGE_GENERIC_BYTE_COUNT 0x3B 84*10465441SEvalZero #define USAGE_GENERIC_MOTION_WAKEUP 0x3C 85*10465441SEvalZero #define USAGE_GENERIC_VX 0x40 86*10465441SEvalZero #define USAGE_GENERIC_VY 0x41 87*10465441SEvalZero #define USAGE_GENERIC_VZ 0x42 88*10465441SEvalZero #define USAGE_GENERIC_VBRX 0x43 89*10465441SEvalZero #define USAGE_GENERIC_VBRY 0x44 90*10465441SEvalZero #define USAGE_GENERIC_VBRZ 0x45 91*10465441SEvalZero #define USAGE_GENERIC_VNO 0x46 92*10465441SEvalZero #define USAGE_GENERIC_SYSTEM_CTL 0x80 93*10465441SEvalZero #define USAGE_GENERIC_SYSCTL_POWER 0x81 94*10465441SEvalZero #define USAGE_GENERIC_SYSCTL_SLEEP 0x82 95*10465441SEvalZero #define USAGE_GENERIC_SYSCTL_WAKE 0x83 96*10465441SEvalZero #define USAGE_GENERIC_SYSCTL_CONTEXT_MENU 0x84 97*10465441SEvalZero #define USAGE_GENERIC_SYSCTL_MAIN_MENU 0x85 98*10465441SEvalZero #define USAGE_GENERIC_SYSCTL_APP_MENU 0x86 99*10465441SEvalZero #define USAGE_GENERIC_SYSCTL_HELP_MENU 0x87 100*10465441SEvalZero #define USAGE_GENERIC_SYSCTL_MENU_EXIT 0x88 101*10465441SEvalZero #define USAGE_GENERIC_SYSCTL_MENU_SELECT 0x89 102*10465441SEvalZero #define USAGE_GENERIC_SYSCTL_MENU_RIGHT 0x8A 103*10465441SEvalZero #define USAGE_GENERIC_SYSCTL_MENU_LEFT 0x8B 104*10465441SEvalZero #define USAGE_GENERIC_SYSCTL_MENU_UP 0x8C 105*10465441SEvalZero #define USAGE_GENERIC_SYSCTL_MENU_DOWN 0x8D 106*10465441SEvalZero 107*10465441SEvalZero /* Simulation Controls Page(0x02) */ 108*10465441SEvalZero #define USAGE_SIMCTRL_THROTTLE 0xBB 109*10465441SEvalZero 110*10465441SEvalZero /* HID Report Items */ 111*10465441SEvalZero 112*10465441SEvalZero /* Main Items */ 113*10465441SEvalZero #define HID_Input(x) 0x81,x 114*10465441SEvalZero #define HID_Output(x) 0x91,x 115*10465441SEvalZero #define HID_Feature(x) 0xB1,x 116*10465441SEvalZero #define HID_Collection(x) 0xA1,x 117*10465441SEvalZero #define HID_EndCollection() 0xC0 118*10465441SEvalZero 119*10465441SEvalZero /* Local Items */ 120*10465441SEvalZero #define HID_Usage(x) 0x09,x 121*10465441SEvalZero #define HID_UsageMin(x) 0x19,x 122*10465441SEvalZero #define HID_UsageMax(x) 0x29,x 123*10465441SEvalZero 124*10465441SEvalZero /* Global Items */ 125*10465441SEvalZero #define HID_UsagePage(x) 0x05,x 126*10465441SEvalZero #define HID_UsagePageVendor(x) 0x06,x,0xFF 127*10465441SEvalZero #define HID_LogicalMin(x) 0x15,x 128*10465441SEvalZero #define HID_LogicalMinS(x) 0x16,(x&0xFF),((x>>8)&0xFF) 129*10465441SEvalZero #define HID_LogicalMinL(x) 0x17,(x&0xFF),((x>>8)&0xFF),((x>>16)&0xFF),((x>>24)&0xFF) 130*10465441SEvalZero #define HID_LogicalMax(x) 0x25,x 131*10465441SEvalZero #define HID_LogicalMaxS(x) 0x26,(x&0xFF),((x>>8)&0xFF) 132*10465441SEvalZero #define HID_LogicalMaxL(x) 0x27,(x&0xFF),((x>>8)&0xFF),((x>>16)&0xFF),((x>>24)&0xFF) 133*10465441SEvalZero #define HID_PhysicalMin(x) 0x35,x 134*10465441SEvalZero #define HID_PhysicalMinS(x) 0x36,(x&0xFF),((x>>8)&0xFF) 135*10465441SEvalZero #define HID_PhysicalMinL(x) 0x37,(x&0xFF),((x>>8)&0xFF),((x>>16)&0xFF),((x>>24)&0xFF) 136*10465441SEvalZero #define HID_PhysicalMax(x) 0x45,x 137*10465441SEvalZero #define HID_PhysicalMaxS(x) 0x46,(x&0xFF),((x>>8)&0xFF) 138*10465441SEvalZero #define HID_PhysicalMaxL(x) 0x47,(x&0xFF),((x>>8)&0xFF),((x>>16)&0xFF),((x>>24)&0xFF) 139*10465441SEvalZero #define HID_UnitExponent(x) 0x55,x 140*10465441SEvalZero #define HID_Unit(x) 0x65,x 141*10465441SEvalZero #define HID_UnitS(x) 0x66,(x&0xFF),((x>>8)&0xFF) 142*10465441SEvalZero #define HID_UnitL(x) 0x67,(x&0xFF),((x>>8)&0xFF),((x>>16)&0xFF),((x>>24)&0xFF) 143*10465441SEvalZero #define HID_ReportSize(x) 0x75,x 144*10465441SEvalZero #define HID_ReportSizeS(x) 0x76,(x&0xFF),((x>>8)&0xFF)) 145*10465441SEvalZero #define HID_ReportSizeL(x) 0x77,(x&0xFF),((x>>8)&0xFF),((x>>16)&0xFF),((x>>24)&0xFF) 146*10465441SEvalZero #define HID_ReportID(x) 0x85,x 147*10465441SEvalZero #define HID_ReportCount(x) 0x95,x 148*10465441SEvalZero #define HID_ReportCountS(x) 0x96,(x&0xFF),((x>>8)&0xFF) 149*10465441SEvalZero #define HID_ReportCountL(x) 0x97,(x&0xFF),((x>>8)&0xFF),((x>>16)&0xFF),((x>>24)&0xFF) 150*10465441SEvalZero #define HID_Push() 0xA4 151*10465441SEvalZero #define HID_Pop() 0xB4 152*10465441SEvalZero 153*10465441SEvalZero /* Input, Output, Feature Data */ 154*10465441SEvalZero #define HID_DATA (0<<0) 155*10465441SEvalZero #define HID_CONST (1<<0) 156*10465441SEvalZero #define HID_ARRAY (0<<1) 157*10465441SEvalZero #define HID_VAR (1<<1) 158*10465441SEvalZero #define HID_ABS (0<<2) 159*10465441SEvalZero #define HID_REL (1<<2) 160*10465441SEvalZero #define HID_NOWRAP (0<<3) 161*10465441SEvalZero #define HID_WRAP (1<<3) 162*10465441SEvalZero #define HID_LINEAR (0<<4) 163*10465441SEvalZero #define HID_NONLINEAR (1<<4) 164*10465441SEvalZero #define HID_PREFERREDSTATE (0<<5) 165*10465441SEvalZero #define HID_NOPREFERRED (1<<5) 166*10465441SEvalZero #define HID_NONULLPOSITION (0<<6) 167*10465441SEvalZero #define HID_NULLSTATE (1<<6) 168*10465441SEvalZero #define HID_NONVOLATILE (0<<7) 169*10465441SEvalZero #define HID_VOLATILE (1<<7) 170*10465441SEvalZero 171*10465441SEvalZero /* Collection Data */ 172*10465441SEvalZero #define HID_PHYSICAL 0x00 173*10465441SEvalZero #define HID_APPLICATION 0x01 174*10465441SEvalZero #define HID_LOGICAL 0x02 175*10465441SEvalZero #define HID_REPORT 0x03 176*10465441SEvalZero #define HID_NAMEDARRAY 0x04 177*10465441SEvalZero #define HID_USAGESWITCH 0x05 178*10465441SEvalZero #define HID_USAGEMODIFIER 0x06 179*10465441SEvalZero 180*10465441SEvalZero //HID_MBED_DEFINE 181*10465441SEvalZero #define HID_VERSION_1_11 (0x0111) 182*10465441SEvalZero 183*10465441SEvalZero /* HID Class */ 184*10465441SEvalZero #define HID_CLASS (3) 185*10465441SEvalZero #define HID_SUBCLASS_NONE (0) 186*10465441SEvalZero #define HID_SUBCLASS_BOOT (1) 187*10465441SEvalZero #define HID_PROTOCOL_NONE (0) 188*10465441SEvalZero #define HID_PROTOCOL_KEYBOARD (1) 189*10465441SEvalZero #define HID_PROTOCOL_MOUSE (2) 190*10465441SEvalZero 191*10465441SEvalZero /* Descriptors */ 192*10465441SEvalZero #define HID_DESCRIPTOR (33) 193*10465441SEvalZero #define HID_DESCRIPTOR_LENGTH (0x09) 194*10465441SEvalZero #define REPORT_DESCRIPTOR (34) 195*10465441SEvalZero 196*10465441SEvalZero /* Class requests */ 197*10465441SEvalZero #define GET_REPORT (0x1) 198*10465441SEvalZero #define GET_IDLE (0x2) 199*10465441SEvalZero #define SET_REPORT (0x9) 200*10465441SEvalZero #define SET_IDLE (0xa) 201*10465441SEvalZero 202*10465441SEvalZero /* HID Class Report Descriptor */ 203*10465441SEvalZero /* Short items: size is 0, 1, 2 or 3 specifying 0, 1, 2 or 4 (four) bytes */ 204*10465441SEvalZero /* of data as per HID Class standard */ 205*10465441SEvalZero 206*10465441SEvalZero /* Main items */ 207*10465441SEvalZero #define INPUT(size) (0x80 | size) 208*10465441SEvalZero #define OUTPUT(size) (0x90 | size) 209*10465441SEvalZero #define FEATURE(size) (0xb0 | size) 210*10465441SEvalZero #define COLLECTION(size) (0xa0 | size) 211*10465441SEvalZero #define END_COLLECTION(size) (0xc0 | size) 212*10465441SEvalZero 213*10465441SEvalZero /* Global items */ 214*10465441SEvalZero #define USAGE_PAGE(size) (0x04 | size) 215*10465441SEvalZero #define LOGICAL_MINIMUM(size) (0x14 | size) 216*10465441SEvalZero #define LOGICAL_MAXIMUM(size) (0x24 | size) 217*10465441SEvalZero #define PHYSICAL_MINIMUM(size) (0x34 | size) 218*10465441SEvalZero #define PHYSICAL_MAXIMUM(size) (0x44 | size) 219*10465441SEvalZero #define UNIT_EXPONENT(size) (0x54 | size) 220*10465441SEvalZero #define UNIT(size) (0x64 | size) 221*10465441SEvalZero #define REPORT_SIZE(size) (0x74 | size) 222*10465441SEvalZero #define REPORT_ID(size) (0x84 | size) 223*10465441SEvalZero #define REPORT_COUNT(size) (0x94 | size) 224*10465441SEvalZero #define PUSH(size) (0xa4 | size) 225*10465441SEvalZero #define POP(size) (0xb4 | size) 226*10465441SEvalZero 227*10465441SEvalZero /* Local items */ 228*10465441SEvalZero #define USAGE(size) (0x08 | size) 229*10465441SEvalZero #define USAGE_MINIMUM(size) (0x18 | size) 230*10465441SEvalZero #define USAGE_MAXIMUM(size) (0x28 | size) 231*10465441SEvalZero #define DESIGNATOR_INDEX(size) (0x38 | size) 232*10465441SEvalZero #define DESIGNATOR_MINIMUM(size) (0x48 | size) 233*10465441SEvalZero #define DESIGNATOR_MAXIMUM(size) (0x58 | size) 234*10465441SEvalZero #define STRING_INDEX(size) (0x78 | size) 235*10465441SEvalZero #define STRING_MINIMUM(size) (0x88 | size) 236*10465441SEvalZero #define STRING_MAXIMUM(size) (0x98 | size) 237*10465441SEvalZero #define DELIMITER(size) (0xa8 | size) 238*10465441SEvalZero 239*10465441SEvalZero #define LSB(n) ((n)&0xff) 240*10465441SEvalZero #define MSB(n) (((n)&0xff00)>>8) 241*10465441SEvalZero struct uhid_comm_descriptor 242*10465441SEvalZero { 243*10465441SEvalZero #ifdef RT_USB_DEVICE_COMPOSITE 244*10465441SEvalZero struct uiad_descriptor iad_desc; 245*10465441SEvalZero #endif 246*10465441SEvalZero struct uinterface_descriptor intf_desc; 247*10465441SEvalZero struct uhid_descriptor hid_desc; 248*10465441SEvalZero struct uendpoint_descriptor ep_in_desc; 249*10465441SEvalZero struct uendpoint_descriptor ep_out_desc; 250*10465441SEvalZero }; 251*10465441SEvalZero typedef struct uhid_comm_descriptor* uhid_comm_desc_t; 252*10465441SEvalZero 253*10465441SEvalZero 254*10465441SEvalZero #ifdef __cplusplus 255*10465441SEvalZero } 256*10465441SEvalZero #endif 257*10465441SEvalZero 258*10465441SEvalZero #endif /* _USBDEVICE_CLASS_HID_H_ */ 259