1 #pragma once
2 
3 #include <pshpack1.h>
4 
5 #define USB_UnConnected_Device_Address		0
6 #define USB_UNCONNECTED_ADDRESS(address)	(USB_UnConnected_Device_Address == (address))
7 #define USB_CONNECTED_ADDRESS(address)		(USB_UnConnected_Device_Address != (address))
8 
9 #define PID_OUT					1
10 #define PID_IN					9
11 #define PID_SOF					5
12 #define PID_SETUP				13
13 
14 #define PID_DATA0				3
15 #define PID_DATA1				11
16 #define PID_DATA2				7
17 #define PID_MDATA				15
18 
19 #define USB_ACK					2
20 #define USB_NAK					10
21 #define USB_STALL				14
22 #define USB_NYET				6
23 
24 #define USB_PRE					12
25 #define USB_ERR					12
26 #define USB_SPLIT				8
27 #define USB_PING				4
28 
29 #define USB_TIMEOUT				0
30 
31 #define USB_SPEC				0x0200
32 #define HID_SPEC				0x0101
33 
34 #define USB_20_SPEC				0x0200
35 #define USB_11_SPEC				0x0110
36 #define USB_10_SPEC				0x0100
37 
38 #define HID_MAX_PACKET_SIZE0			0x08
39 #define MICROSOFT_VENDOR_ID			0x045E
40 #define HID_DEVICE_RELEASE			0x0100
41 
42 #define HID_MAX_PACKET_SIZE			0x0008
43 #define HID_POLLING_INTERVAL			0x0A
44 #define MAX_POLLING_INTERVAL			0xFF
45 
46 #define USB_DEFAULT_KEYBOARD_PRODUCT_ID		0x000B
47 #define USB_DEFAULT_MOUSE_PRODUCT_ID		0x0040
48 
49 #define DEVICE_DESCRIPTOR			0x01
50 #define CONFIGURATION_DESCRIPTOR		0x02
51 #define STRING_DESCRIPTOR			0x03
52 #define INTERFACE_DESCRIPTOR			0x04
53 #define ENDPOINT_DESCRIPTOR			0x05
54 #define QUALIFIER_DESCRIPTOR			0x06
55 #define OTHER_SPEED_DESCRIPTOR			0x07
56 #define INTERFACE_POWER_DESCRIPTOR		0x08
57 
58 #define HID_DESCRIPTOR				0x21
59 #define REPORT_DESCRIPTOR			0x22
60 #define PHYSICAL_DESCRIPTOR			0x23
61 #define HUB_DESCRIPTOR				0x29
62 
63 #define USB_DESCRIPTOR_TYPE_STD			0
64 #define USB_DESCRIPTOR_TYPE_CLASS		1
65 #define USB_DESCRIPTOR_TYPE_VENDOR		2
66 #define USB_DESCRIPTOR_TYPE_RESERVED		3
67 
68 #define DIR_HOST_TO_DEVICE			0
69 #define DIR_DEVICE_TO_HOST			1
70 
71 #define TYPE_STANDARD				0
72 #define TYPE_CLASS				1
73 #define TYPE_VENDOR				2
74 #define TYPE_RESERVED				3
75 
76 #define RCPT_DEVICE				0
77 #define RCPT_INTERFACE				1
78 #define RCPT_ENDPOINT				2
79 #define RCPT_OTHER				3
80 #define RCPT_PORT				4
81 #define RCPT_RPIPE				5
82 
83 #if !defined(MIDL_PASS)
84 #define USB_MAKE_REQUEST_TYPE(direction, type, recipient)		\
85 		(BYTE)( ((BYTE)direction << 7) |			\
86 			((BYTE)type << 5) | ((BYTE)recipient & 0x07) )
87 #endif
88 
89 #define GET_STATUS				0
90 #define CLEAR_FEATURE				1
91 #define SET_FEATURE				3
92 #define SET_ADDRESS				5
93 #define GET_DESCRIPTOR				6
94 #define SET_DESCRIPTOR				7
95 #define GET_CONFIGURATION			8
96 #define SET_CONFIGURATION			9
97 #define GET_INTERFACE				10
98 #define SET_INTERFACE				11
99 #define SYNCH_FRAME				12
100 
101 #define USB_BULK_ONLY_MASS_STG_RESET		0xFF
102 #define USB_BULK_ONLY_MASS_STG_GET_MAX_LUN	0xFE
103 
104 #define GET_REPORT				0x01
105 #define GET_IDLE				0x02
106 #define GET_PROTOCOL				0x03
107 #define SET_REPORT				0x09
108 #define SET_IDLE				0x0A
109 #define SET_PROTOCOL				0x0B
110 
111 #define ADD_MMC_IE				20
112 #define REMOVE_MMC_IE				21
113 #define SET_NUM_DNTS				22
114 #define SET_CLUSTER_ID				23
115 #define SET_DEVICE_INFO				24
116 #define GET_TIME				25
117 #define SET_STREAM_INDEX			26
118 #define SET_WUSB_MAS				27
119 #define WUSB_CH_STOP				28
120 
121 #define EXEC_RC_CMD				40
122 
123 #define TIME_ADJ				0x01
124 #define TIME_BPST				0x02
125 #define TIME_WUSB				0x03
126 
127 #define HID_REPORT_TYPE_INPUT			0x01
128 #define HID_REPORT_TYPE_OUTPUT			0x02
129 #define HID_REPORT_TYPE_FEATURE			0x03
130 
131 #define HID_PROTOCOL_TYPE_BOOT			0x00
132 #define HID_PROTOCOL_TYPE_REPORT		0x01
133 
134 #define HUB_DEVICE_PROTOCOL_1X			0
135 #define HUB_DEVICE_PROTOCOL_SINGLE_TT		1
136 #define HUB_DEVICE_PROTOCOL_MULTI_TT		2
137 
138 #define HUB_INTERFACE_PROTOCOL_1X				0
139 #define HUB_INTERFACE_PROTOCOL_SINGLE_TT			0
140 #define HUB_INTERFACE_PROTOCOL_MULTI_TT_IN_SINGLE_TT_MODE	1
141 #define HUB_INTERFACE_PROTOCOL_MULTI_TT_IN_MULTI_TT_MODE	2
142 
143 #define CLEAR_TT_BUFFER				8
144 #define RESET_TT				9
145 #define GET_TT_STATE				10
146 #define STOP_TT					11
147 
148 #define C_HUB_LOCAL_POWER			0
149 #define C_HUB_OVER_CURRENT			1
150 #define PORT_CONNECTION				0
151 #define PORT_ENABLE				1
152 #define PORT_SUSPEND				2
153 #define PORT_OVER_CURRENT			3
154 #define PORT_RESET				4
155 #define PORT_POWER				8
156 #define PORT_LOW_SPEED				9
157 #define C_PORT_CONNECTION			16
158 #define C_PORT_ENABLE				17
159 #define C_PORT_SUSPEND				18
160 #define C_PORT_OVER_CURRENT			19
161 #define C_PORT_RESET				20
162 #define PORT_TEST				21
163 #define PORT_INDICATOR				22
164 
165 #define USBSETUPSIZE				8
166 #define USBINREQUEST				128
167 
168 #define BM_GET_DEVICE				128
169 #define BM_GET_INTERFACE			129
170 #define BM_GET_ENDPOINT				130
171 
172 #define BM_SET_DEVICE				0
173 #define BM_SET_INTERFACE			1
174 #define BM_SET_ENDPOINT				2
175 
176 #define HALT_ENDPOINT				0
177 #define REMOTE_WAKEUP				1
178 #define TEST_MODE				2
179 
180 #define DEVICE_DESCRIPTION_TYPE			0x100
181 #define QUALIFIER_DESCRIPTION_TYPE		0x600
182 #define OTHER_SPEED_DESCRIPTION_TYPE		0x700
183 #define CONFIG_DESCRIPTION_TYPE			0x200
184 #define STRING_DESCRIPTION_TYPE			0x300
185 #define MSOS_DESCRIPTION_TYPE			0x3EE
186 
187 #define CONFIG_BUS_POWERED			0x80
188 #define CONFIG_SELF_POWERED			0x40
189 #define CONFIG_REMOTE_WAKEUP			0x20
190 
191 #define USB_WA_MULTIFUNCTION			0x02
192 #define USB_WA_PROTOCOL				0x01
193 #define USB_RADIO_CONTROL			0x2
194 
195 #define USB_HID_CLASS_CODE			0x03
196 #define USB_MASS_STORAGE_CLASS_CODE		0x08
197 #define USB_HUB_CLASS_CODE			0x09
198 #define USB_MISCELLANEOUS			0xEF
199 #define USB_WIRELESS_WA				0xE0
200 
201 #define BOOT_INTERFACE_SUBCLASS			0x01
202 #define COMMON_CLASS				0x02
203 #define USB_RF_CONTROL				0x01
204 
205 #define PROTOCOL_NONE				0x00
206 #define PROTOCOL_KEYBOARD			0x01
207 #define PROTOCOL_MOUSE				0x02
208 
209 #define EP_OUT					0
210 #define EP_IN					1
211 
212 #define MAKE_ENDPOINT_ADDRESS(num, dir)				\
213 		( ((BYTE)(dir) << 7) | ((BYTE)(num) & 0x0F) )
214 
215 #define ENDPOINT_TYPE				0x03
216 #define CONTROL_ENDPOINT			0
217 #define ISOCHRONOUS_ENDPOINT			1
218 #define BULK_ENDPOINT				2
219 #define INTERRUPT_ENDPOINT			3
220 
221 typedef union _USBDESCRIPTORTYPE {
222   BYTE Byte;
223 #if !defined(MIDL_PASS)
224   struct Bits {
225     BYTE Descriptor:5;
226     BYTE Type:2;
227     BYTE Reserved:1;
228   } Bits;
229 #endif
230 } USBDESCRIPTORTYPE;
231 
232 typedef union _USBCONFIGATTRIBS {
233   BYTE Byte;
234 #if !defined(MIDL_PASS)
235   struct Bits {
236     BYTE bReserved0_4:5;
237     BYTE bRemoteWakeup:1;
238     BYTE bSelfPowered:1;
239     BYTE bReserved7:1;
240   } Bits;
241 #endif
242 } USBCONFIGATTRIBS;
243 
244 typedef union _USBREQUESTTYPE {
245   BYTE Byte;
246 #if !defined(MIDL_PASS)
247   struct Bits {
248     BYTE Recipient:5;
249     BYTE Type:2;
250     BYTE Direction:1;
251     } Bits;
252 #endif
253 } USBREQUESTTYPE;
254 
255 #if !defined(MIDL_PASS)
256 C_ASSERT((sizeof(USBREQUESTTYPE) == sizeof(BYTE)));
257 #endif
258 
259 typedef struct _USBSETUPREQUEST {
260   USBREQUESTTYPE bmRequestType;
261   BYTE bRequest;
262   SHORT sSetupValue;
263   SHORT sSetupIndex;
264   SHORT sSetupLength;
265 } USBSETUPREQUEST;
266 
267 #if !defined(MIDL_PASS)
268 
269 typedef struct _USBDEVICEDESC {
270   BYTE bLength;
271   BYTE bDescriptorType;
272   USHORT usUSB;
273   BYTE bDeviceClass;
274   BYTE bDeviceSubClass;
275   BYTE bProtocol;
276   BYTE bMaxPacket0;
277   USHORT usVendor;
278   USHORT usProduct;
279   USHORT usDeviceNumber;
280   BYTE bManufacturer;
281   BYTE bProductDesc;
282   BYTE bSerialNumber;
283   BYTE bNumConfigs;
284 } USBDEVICEDESC;
285 
286 typedef struct _USBCONFIGDESC {
287   BYTE bLength;
288   BYTE bDescriptorType;
289   USHORT usTotalLength;
290   BYTE bNumInterfaces;
291   BYTE bConfigValue;
292   BYTE bConfig;
293   BYTE bAttributes;
294   BYTE bMaxPower;
295 } USBCONFIGDESC;
296 
297 
298 typedef struct _USBINTERFACEDESC {
299   BYTE bLength;
300   BYTE bDescriptorType;
301   BYTE bInterfaceNumber;
302   BYTE bAlternateSetting;
303   BYTE bNumEndpoints;
304   BYTE bClass;
305   BYTE bSubClass;
306   BYTE bProtocol;
307   BYTE bDescription;
308 } USBINTERFACEDESC;
309 
310 #define ENDPOINT_DIRECTION_OUT			0
311 #define ENDPOINT_DIRECTION_IN			1
312 
313 typedef union _USBENDPOINTADDRESS {
314   BYTE Byte;
315   struct Bits {
316     BYTE Number:4;
317     BYTE Reserved:3;
318     BYTE Direction:1;
319   } Bits;
320 } USBENDPOINTADDRESS;
321 
322 C_ASSERT((sizeof(USBENDPOINTADDRESS) == sizeof(BYTE)));
323 
324 #define USB_TRANSFER_TYPE_CONTROL		0
325 #define USB_TRANSFER_TYPE_ISOCH			1
326 #define USB_TRANSFER_TYPE_BULK			2
327 #define USB_TRANSFER_TYPE_INTERRUPT		3
328 
329 #define USB_SYNC_TYPE_NONE			0
330 #define USB_SYNC_TYPE_ASYNC			1
331 #define USB_SYNC_TYPE_ADAPTIVE			2
332 #define USB_SYNC_TYPE_SYNC			3
333 
334 #define USB_USAGE_TYPE_DATA			0
335 #define USB_USAGE_TYPE_FEEDBACK			1
336 #define USB_USAGE_TYPE_IMPLICIT			2
337 #define USB_USAGE_TYPE_RESERVED			3
338 
339 typedef union _USBENDPOINTATTRIBS {
340   BYTE Byte;
341   struct Bits {
342     BYTE TransferType:2;
343     BYTE SyncType:2;
344     BYTE UsageType:2;
345     BYTE Reserved:2;
346   } Bits;
347 } USBENDPOINTATTRIBS;
348 
349 C_ASSERT((sizeof(USBENDPOINTATTRIBS) == sizeof(BYTE)));
350 
351 typedef union _USBMAXPACKET {
352   WORD Word;
353   struct Bits {
354     WORD Size:11;
355     WORD AdditionalXactions:2;
356     WORD Reserved:3;
357   } Bits;
358 } USBMAXPACKET;
359 
360 C_ASSERT((sizeof(USBMAXPACKET) == sizeof(WORD)));
361 
362 typedef struct _USBENDPOINTDESC {
363   BYTE bLength;
364   BYTE bDescriptorType;
365   USBENDPOINTADDRESS Address;
366   USBENDPOINTATTRIBS Attributes;
367   USBMAXPACKET MaxPacket;
368   BYTE bInterval;
369 } USBENDPOINTDESC;
370 
371 typedef struct _USBQUALIFIERDESC {
372   BYTE bLength;
373   BYTE bDescriptorType;
374   USHORT usUSB;
375   BYTE bDeviceClass;
376   BYTE bDeviceSubClass;
377   BYTE bProtocol;
378   BYTE bMaxPacket;
379   BYTE bNumConfigs;
380   BYTE bReserved;
381 } USBQUALIFIERDESC;
382 
383 typedef struct _USBSTRINGDESC {
384   BYTE bLength;
385   BYTE bDescriptorType;
386   WCHAR wchData[1];
387 } USBSTRINGDESC;
388 
389 typedef struct _USBSTRINGLANGIDS {
390   BYTE bLength;
391   BYTE bDescriptorType;
392   WORD wLANGIDs[1];
393 } USBSTRINGLANGIDS;
394 
395 typedef struct _USBHIDSTANDARDDESC {
396   BYTE bLength;
397   BYTE bDescriptorType;
398   USHORT bcdHID;
399   BYTE bCountryCode;
400   BYTE bNumDescriptors;
401 } USBHIDSTANDARDDESC;
402 
403 typedef struct _USBHIDOPTIONALDESC {
404   BYTE bClassDescriptorType;
405   USHORT usDescriptorLength;
406 } USBHIDOPTIONALDESC;
407 
408 typedef struct _USBPHYSICALDESCSET0 {
409   BYTE bNumber;
410   BYTE bLength;
411 } USBPHYSICALDESCSET0;
412 
413 typedef union _USBPHYSICALDESCSET {
414   BYTE bPhysicalInfo;
415   struct Bits {
416     BYTE bPreference:5;
417     BYTE bBias:3;
418     } Bits;
419 } USBPHYSICALDESCSET;
420 
421 typedef struct _USBPHYSICALDESCITEM {
422   BYTE bDesignator;
423   union Flags {
424     BYTE bFlags;
425     struct Bits {
426         BYTE bEffort:5;
427         BYTE bQualifier:3;
428     } Bits;
429   } Flags;
430 } USBPHYSICALDESCITEM;
431 
432 typedef union _USBHUBCHARACTERISTICS {
433   WORD wHubCharacteristics;
434   struct Bits {
435     BYTE bLogicalPowerSwitchingMode:2;
436     BYTE fCompoundDevice:1;
437     BYTE bOverCurrentMode:2;
438     BYTE bTTThinkTime:2;
439     BYTE fPortIndicatorSupport:1;
440     BYTE bReserved:8;
441   } Bits;
442 } USBHUBCHARACTERISTICS;
443 
444 #if !defined(MIDL_PASS)
445 C_ASSERT((sizeof(USBHUBCHARACTERISTICS) == sizeof(WORD)));
446 #endif
447 
448 typedef struct _USBHUBDESC {
449   BYTE bLength;
450   BYTE bDescriptorType;
451   BYTE bNumberOfPorts;
452   USBHUBCHARACTERISTICS Characteristics;
453   BYTE bPwrOn2PwrGood;
454   BYTE bHubContrCurrent;
455   BYTE bDeviceRemovable[32];
456   BYTE bPortPwrCtrlMask[32];
457 } USBHUBDESC;
458 
459 #if !defined(MIDL_PASS)
460 C_ASSERT((sizeof(USBHUBDESC) == 71));
461 #endif
462 
463 typedef union _USBHUBPORTSTATUS {
464   WORD wPortStatus;
465   struct Bits {
466     BYTE fCurrentConnectionStatus:1;
467     BYTE fEnabled:1;
468     BYTE fSuspend:1;
469     BYTE fOverCurrent:1;
470     BYTE fReset:1;
471     BYTE bReserved1:3;
472     BYTE fPortPower:1;
473     BYTE fLowSpeedDevice:1;
474     BYTE fHighSpeedDevice:1;
475     BYTE fTestMode:1;
476     BYTE fPortIndicatorControl:1;
477     BYTE bReserved2:3;
478   } Bits;
479 } USBHUBPORTSTATUS;
480 
481 #if !defined(MIDL_PASS)
482 C_ASSERT((sizeof(USBHUBPORTSTATUS) == sizeof(WORD)));
483 #endif
484 
485 typedef union _USBHUBPORTSTATUSCHANGE {
486   WORD wPortStatusChange;
487   struct Bits {
488     BYTE fConnectionStatusChange:1;
489     BYTE fEnabledChange:1;
490     BYTE fSuspendChange:1;
491     BYTE fOverCurrentChange:1;
492     BYTE fResetChange:1;
493     BYTE bReserved1:3;
494     BYTE bReserved2:8;
495   } Bits;
496 } USBHUBPORTSTATUSCHANGE;
497 
498 #if !defined(MIDL_PASS)
499 C_ASSERT((sizeof(USBHUBPORTSTATUSCHANGE) == sizeof(WORD)));
500 #endif
501 
502 typedef struct _USBHUBPORTDATA {
503   USBHUBPORTSTATUS PortStatus;
504   USBHUBPORTSTATUSCHANGE PortStatusChange;
505 } USBHUBPORTDATA;
506 
507 #define USB_MAKE_LANGID(lang, sublang)					\
508 		((((USHORT)(sublang)) << 10) | (USHORT)(lang))
509 
510 #define USB_LANG_RESERVED			0x00
511 #define USB_LANG_ARABIC				0x01
512 #define USB_LANG_BULGARIAN			0x02
513 #define USB_LANG_CATALAN			0x03
514 #define USB_LANG_CHINESE			0x04
515 #define USB_LANG_CZECH				0x05
516 #define USB_LANG_DANISH				0x06
517 #define USB_LANG_GERMAN				0x07
518 #define USB_LANG_GREEK				0x08
519 #define USB_LANG_ENGLISH			0x09
520 #define USB_LANG_SPANISH			0x0a
521 #define USB_LANG_FINNISH			0x0b
522 #define USB_LANG_FRENCH				0x0c
523 #define USB_LANG_HEBREW				0x0d
524 #define USB_LANG_HUNGARIAN			0x0e
525 #define USB_LANG_ICELANDIC			0x0f
526 #define USB_LANG_ITALIAN			0x10
527 #define USB_LANG_JAPANESE			0x11
528 #define USB_LANG_KOREAN				0x12
529 #define USB_LANG_DUTCH				0x13
530 #define USB_LANG_NORWEGIAN			0x14
531 #define USB_LANG_POLISH				0x15
532 #define USB_LANG_PORTUGUESE			0x16
533 #define USB_LANG_ROMANIAN			0x18
534 #define USB_LANG_RUSSIAN			0x19
535 #define USB_LANG_CROATIAN			0x1a
536 #define USB_LANG_SERBIAN			0x1a
537 #define USB_LANG_SLOVAK				0x1b
538 #define USB_LANG_ALBANIAN			0x1c
539 #define USB_LANG_SWEDISH			0x1d
540 #define USB_LANG_THAI				0x1e
541 #define USB_LANG_TURKISH			0x1f
542 #define USB_LANG_URDU				0x20
543 #define USB_LANG_INDONESIAN			0x21
544 #define USB_LANG_UKRANIAN			0x22
545 #define USB_LANG_BELARUSIAN			0x23
546 #define USB_LANG_SLOVENIAN			0x24
547 #define USB_LANG_ESTONIAN			0x25
548 #define USB_LANG_LATVIAN			0x26
549 #define USB_LANG_LITHUANIAN			0x27
550 #define USB_LANG_FARSI				0x29
551 #define USB_LANG_VIETNAMESE			0x2a
552 #define USB_LANG_ARMENIAN			0x2b
553 #define USB_LANG_AZERI				0x2c
554 #define USB_LANG_BASQUE				0x2d
555 #define USB_LANG_MACEDONIAN			0x2f
556 #define USB_LANG_AFRIKAANS			0x36
557 #define USB_LANG_GEORGIAN			0x37
558 #define USB_LANG_FAEROESE			0x38
559 #define USB_LANG_HINDI				0x39
560 #define USB_LANG_MALAY				0x3e
561 #define USB_LANG_KAZAK				0x3f
562 #define USB_LANG_SWAHILI			0x41
563 #define USB_LANG_UZBEK				0x43
564 #define USB_LANG_TATAR				0x44
565 #define USB_LANG_BENGALI			0x45
566 #define USB_LANG_PUNJABI			0x46
567 #define USB_LANG_GUJARATI			0x47
568 #define USB_LANG_ORIYA				0x48
569 #define USB_LANG_TAMIL				0x49
570 #define USB_LANG_TELUGU				0x4a
571 #define USB_LANG_KANNADA			0x4b
572 #define USB_LANG_MALAYALAM			0x4c
573 #define USB_LANG_ASSAMESE			0x4d
574 #define USB_LANG_MARATHI			0x4e
575 #define USB_LANG_SANSKRIT			0x4f
576 #define USB_LANG_KONKANI			0x57
577 #define USB_LANG_MANIPURI			0x58
578 #define USB_LANG_SINDHI				0x59
579 #define USB_LANG_KASHMIRI			0x60
580 #define USB_LANG_NEPALI				0x61
581 #define USB_LANG_HID				0xff
582 
583 #define USB_SUBLANG_ARABIC_SAUDI_ARABIA		0x01
584 #define USB_SUBLANG_ARABIC_SAUDI_ARABIA		0x01
585 #define USB_SUBLANG_ARABIC_IRAQ			0x02
586 #define USB_SUBLANG_ARABIC_EGYPT		0x03
587 #define USB_SUBLANG_ARABIC_LIBYA		0x04
588 #define USB_SUBLANG_ARABIC_ALGERIA		0x05
589 #define USB_SUBLANG_ARABIC_MOROCCO		0x06
590 #define USB_SUBLANG_ARABIC_TUNISIA		0x07
591 #define USB_SUBLANG_ARABIC_OMAN			0x08
592 #define USB_SUBLANG_ARABIC_YEMEN		0x09
593 #define USB_SUBLANG_ARABIC_SYRIA		0x10
594 #define USB_SUBLANG_ARABIC_JORDAN		0x11
595 #define USB_SUBLANG_ARABIC_LEBANON		0x12
596 #define USB_SUBLANG_ARABIC_KUWAIT		0x13
597 #define USB_SUBLANG_ARABIC_UAE			0x14
598 #define USB_SUBLANG_ARABIC_BAHRAIN		0x15
599 #define USB_SUBLANG_ARABIC_QATAR		0x16
600 #define USB_SUBLANG_AZERI_CYRILLIC		0x01
601 #define USB_SUBLANG_AZERI_LATIN			0x02
602 #define USB_SUBLANG_CHINESE_TRADITIONAL		0x01
603 #define USB_SUBLANG_CHINESE_SIMPLIFIED		0x02
604 #define USB_SUBLANG_CHINESE_HONGKONG		0x03
605 #define USB_SUBLANG_CHINESE_SINGAPORE		0x04
606 #define USB_SUBLANG_CHINESE_MACAU		0x05
607 #define USB_SUBLANG_DUTCH			0x01
608 #define USB_SUBLANG_DUTCH_BELGIAN		0x02
609 #define USB_SUBLANG_ENGLISH_US			0x01
610 #define USB_SUBLANG_ENGLISH_UK			0x02
611 #define USB_SUBLANG_ENGLISH_AUS			0x03
612 #define USB_SUBLANG_ENGLISH_CAN			0x04
613 #define USB_SUBLANG_ENGLISH_NZ			0x05
614 #define USB_SUBLANG_ENGLISH_EIRE		0x06
615 #define USB_SUBLANG_ENGLISH_SOUTH_AFRICA	0x07
616 #define USB_SUBLANG_ENGLISH_JAMAICA		0x08
617 #define USB_SUBLANG_ENGLISH_CARIBBEAN		0x09
618 #define USB_SUBLANG_ENGLISH_BELIZE		0x0a
619 #define USB_SUBLANG_ENGLISH_TRINIDAD		0x0b
620 #define USB_SUBLANG_ENGLISH_PHILIPPINES		0x0c
621 #define USB_SUBLANG_ENGLISH_ZIMBABWE		0x0d
622 #define USB_SUBLANG_FRENCH			0x01
623 #define USB_SUBLANG_FRENCH_BELGIAN		0x02
624 #define USB_SUBLANG_FRENCH_CANADIAN		0x03
625 #define USB_SUBLANG_FRENCH_SWISS		0x04
626 #define USB_SUBLANG_FRENCH_LUXEMBOURG		0x05
627 #define USB_SUBLANG_FRENCH_MONACO		0x06
628 #define USB_SUBLANG_GERMAN			0x01
629 #define USB_SUBLANG_GERMAN_SWISS		0x02
630 #define USB_SUBLANG_GERMAN_AUSTRIAN		0x03
631 #define USB_SUBLANG_GERMAN_LUXEMBOURG		0x04
632 #define USB_SUBLANG_GERMAN_LIECHTENSTEIN	0x05
633 #define USB_SUBLANG_ITALIAN			0x01
634 #define USB_SUBLANG_ITALIAN_SWISS		0x02
635 #define USB_SUBLANG_KASHMIRI_INDIA		0x02
636 #define USB_SUBLANG_KOREAN			0x01
637 #define USB_SUBLANG_LITHUANIAN			0x01
638 #define USB_SUBLANG_MALAY_MALAYSIA		0x01
639 #define USB_SUBLANG_MALAY_BRUNEI_DARUSSALAM	0x02
640 #define USB_SUBLANG_NEPALI_INDIA		0x02
641 #define USB_SUBLANG_NORWEGIAN_BOKMAL		0x01
642 #define USB_SUBLANG_NORWEGIAN_NYNORSK		0x02
643 #define USB_SUBLANG_PORTUGUESE			0x01
644 #define USB_SUBLANG_PORTUGUESE_BRAZILIAN	0x02
645 #define USB_SUBLANG_SERBIAN_LATIN		0x02
646 #define USB_SUBLANG_SERBIAN_CYRILLIC		0x03
647 #define USB_SUBLANG_SPANISH			0x01
648 #define USB_SUBLANG_SPANISH_MEXICAN		0x02
649 #define USB_SUBLANG_SPANISH_MODERN		0x03
650 #define USB_SUBLANG_SPANISH_GUATEMALA		0x04
651 #define USB_SUBLANG_SPANISH_COSTA_RICA		0x05
652 #define USB_SUBLANG_SPANISH_PANAMA		0x06
653 #define USB_SUBLANG_SPANISH_DOMINICAN_REPUBLIC	0x07
654 #define USB_SUBLANG_SPANISH_VENEZUELA		0x08
655 #define USB_SUBLANG_SPANISH_COLOMBIA		0x09
656 #define USB_SUBLANG_SPANISH_PERU		0x0a
657 #define USB_SUBLANG_SPANISH_ARGENTINA		0x0b
658 #define USB_SUBLANG_SPANISH_ECUADOR		0x0c
659 #define USB_SUBLANG_SPANISH_CHILE		0x0d
660 #define USB_SUBLANG_SPANISH_URUGUAY		0x0e
661 #define USB_SUBLANG_SPANISH_PARAGUAY		0x0f
662 #define USB_SUBLANG_SPANISH_BOLIVIA		0x10
663 #define USB_SUBLANG_SPANISH_EL_SALVADOR		0x11
664 #define USB_SUBLANG_SPANISH_HONDURAS		0x12
665 #define USB_SUBLANG_SPANISH_NICARAGUA		0x13
666 #define USB_SUBLANG_SPANISH_PUERTO_RICO		0x14
667 #define USB_SUBLANG_SWEDISH			0x01
668 #define USB_SUBLANG_SWEDISH_FINLAND		0x02
669 #define USB_SUBLANG_URDU_PAKISTAN		0x01
670 #define USB_SUBLANG_URDU_INDIA			0x02
671 #define USB_SUBLANG_UZBEK_LATIN			0x01
672 #define USB_SUBLANG_UZBEK_CYRILLIC		0x02
673 #define USB_SUBLANG_HID_USAGE_DATA_DESCRIPTOR	0x01
674 #define USB_SUBLANG_HID_VENDOR_DEFINED_1	0x3c
675 #define USB_SUBLANG_HID_VENDOR_DEFINED_2	0x3d
676 #define USB_SUBLANG_HID_VENDOR_DEFINED_3	0x3e
677 #define USB_SUBLANG_HID_VENDOR_DEFINED_4	0x3f
678 
679 #endif /* !defined(MIDL_PASS) */
680 
681 #include <poppack.h>
682 
683