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