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
221typedef 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
232typedef 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
244typedef 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)
256C_ASSERT((sizeof(USBREQUESTTYPE) == sizeof(BYTE)));
257#endif
258
259typedef 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
269typedef 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
286typedef 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
298typedef 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
313typedef 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
322C_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
339typedef 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
349C_ASSERT((sizeof(USBENDPOINTATTRIBS) == sizeof(BYTE)));
350
351typedef 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
360C_ASSERT((sizeof(USBMAXPACKET) == sizeof(WORD)));
361
362typedef struct _USBENDPOINTDESC {
363  BYTE bLength;
364  BYTE bDescriptorType;
365  USBENDPOINTADDRESS Address;
366  USBENDPOINTATTRIBS Attributes;
367  USBMAXPACKET MaxPacket;
368  BYTE bInterval;
369} USBENDPOINTDESC;
370
371typedef 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
383typedef struct _USBSTRINGDESC {
384  BYTE bLength;
385  BYTE bDescriptorType;
386  WCHAR wchData[1];
387} USBSTRINGDESC;
388
389typedef struct _USBSTRINGLANGIDS {
390  BYTE bLength;
391  BYTE bDescriptorType;
392  WORD wLANGIDs[1];
393} USBSTRINGLANGIDS;
394
395typedef struct _USBHIDSTANDARDDESC {
396  BYTE bLength;
397  BYTE bDescriptorType;
398  USHORT bcdHID;
399  BYTE bCountryCode;
400  BYTE bNumDescriptors;
401} USBHIDSTANDARDDESC;
402
403typedef struct _USBHIDOPTIONALDESC {
404  BYTE bClassDescriptorType;
405  USHORT usDescriptorLength;
406} USBHIDOPTIONALDESC;
407
408typedef struct _USBPHYSICALDESCSET0 {
409  BYTE bNumber;
410  BYTE bLength;
411} USBPHYSICALDESCSET0;
412
413typedef union _USBPHYSICALDESCSET {
414  BYTE bPhysicalInfo;
415  struct Bits {
416    BYTE bPreference:5;
417    BYTE bBias:3;
418    } Bits;
419} USBPHYSICALDESCSET;
420
421typedef 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
432typedef 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)
445C_ASSERT((sizeof(USBHUBCHARACTERISTICS) == sizeof(WORD)));
446#endif
447
448typedef 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)
460C_ASSERT((sizeof(USBHUBDESC) == 71));
461#endif
462
463typedef 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)
482C_ASSERT((sizeof(USBHUBPORTSTATUS) == sizeof(WORD)));
483#endif
484
485typedef 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)
499C_ASSERT((sizeof(USBHUBPORTSTATUSCHANGE) == sizeof(WORD)));
500#endif
501
502typedef 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