xref: /reactos/sdk/include/ddk/usbprotocoldefs.h (revision 886670e9)
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