Naveen Neel / shedskin
Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers usb100.h Source File

usb100.h

00001 /*
00002  * usb100.h
00003  *
00004  * USB 1.0 support
00005  *
00006  * This file is part of the w32api package.
00007  *
00008  * Contributors:
00009  *   Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
00010  *
00011  * THIS SOFTWARE IS NOT COPYRIGHTED
00012  *
00013  * This source code is offered for use in the public domain. You may
00014  * use, modify or distribute it freely.
00015  *
00016  * This code is distributed in the hope that it will be useful but
00017  * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
00018  * DISCLAIMED. This includes but is not limited to warranties of
00019  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
00020  *
00021  */
00022 
00023 #ifndef __USB100_H
00024 #define __USB100_H
00025 
00026 #if __GNUC__ >=3
00027 #pragma GCC system_header
00028 #endif
00029 
00030 #ifdef __cplusplus
00031 extern "C" {
00032 #endif
00033 
00034 #include "ntddk.h"
00035 
00036 #define MAXIMUM_USB_STRING_LENGTH         255
00037 
00038 #define USB_DEVICE_CLASS_RESERVED           0x00
00039 #define USB_DEVICE_CLASS_AUDIO              0x01
00040 #define USB_DEVICE_CLASS_COMMUNICATIONS     0x02
00041 #define USB_DEVICE_CLASS_HUMAN_INTERFACE    0x03
00042 #define USB_DEVICE_CLASS_MONITOR            0x04
00043 #define USB_DEVICE_CLASS_PHYSICAL_INTERFACE 0x05
00044 #define USB_DEVICE_CLASS_POWER              0x06
00045 #define USB_DEVICE_CLASS_PRINTER            0x07
00046 #define USB_DEVICE_CLASS_STORAGE            0x08
00047 #define USB_DEVICE_CLASS_HUB                0x09
00048 #define USB_DEVICE_CLASS_VENDOR_SPECIFIC    0xFF
00049 
00050 #define USB_RESERVED_DESCRIPTOR_TYPE        0x06
00051 #define USB_CONFIG_POWER_DESCRIPTOR_TYPE    0x07
00052 #define USB_INTERFACE_POWER_DESCRIPTOR_TYPE 0x08
00053 
00054 #define USB_REQUEST_GET_STATUS            0x00
00055 #define USB_REQUEST_CLEAR_FEATURE         0x01
00056 #define USB_REQUEST_SET_FEATURE           0x03
00057 #define USB_REQUEST_SET_ADDRESS           0x05
00058 #define USB_REQUEST_GET_DESCRIPTOR        0x06
00059 #define USB_REQUEST_SET_DESCRIPTOR        0x07
00060 #define USB_REQUEST_GET_CONFIGURATION     0x08
00061 #define USB_REQUEST_SET_CONFIGURATION     0x09
00062 #define USB_REQUEST_GET_INTERFACE         0x0A
00063 #define USB_REQUEST_SET_INTERFACE         0x0B
00064 #define USB_REQUEST_SYNC_FRAME            0x0C
00065 
00066 #define USB_GETSTATUS_SELF_POWERED            0x01
00067 #define USB_GETSTATUS_REMOTE_WAKEUP_ENABLED   0x02
00068 
00069 #define BMREQUEST_HOST_TO_DEVICE          0
00070 #define BMREQUEST_DEVICE_TO_HOST          1
00071 
00072 #define BMREQUEST_STANDARD                0
00073 #define BMREQUEST_CLASS                   1
00074 #define BMREQUEST_VENDOR                  2
00075 
00076 #define BMREQUEST_TO_DEVICE               0
00077 #define BMREQUEST_TO_INTERFACE            1
00078 #define BMREQUEST_TO_ENDPOINT             2
00079 #define BMREQUEST_TO_OTHER                3
00080 
00081 /* USB_COMMON_DESCRIPTOR.bDescriptorType constants */
00082 #define USB_DEVICE_DESCRIPTOR_TYPE        0x01
00083 #define USB_CONFIGURATION_DESCRIPTOR_TYPE 0x02
00084 #define USB_STRING_DESCRIPTOR_TYPE        0x03
00085 #define USB_INTERFACE_DESCRIPTOR_TYPE     0x04
00086 #define USB_ENDPOINT_DESCRIPTOR_TYPE      0x05
00087 
00088 typedef struct _USB_COMMON_DESCRIPTOR {
00089     UCHAR  bLength;
00090     UCHAR  bDescriptorType;
00091 } USB_COMMON_DESCRIPTOR, *PUSB_COMMON_DESCRIPTOR;
00092 
00093 #define USB_DESCRIPTOR_MAKE_TYPE_AND_INDEX(d, i) ((USHORT)((USHORT)d << 8 | i))
00094 
00095 /* USB_CONFIGURATION_DESCRIPTOR.bmAttributes constants */
00096 #define USB_CONFIG_POWERED_MASK           0xc0
00097 #define USB_CONFIG_BUS_POWERED            0x80
00098 #define USB_CONFIG_SELF_POWERED           0x40
00099 #define USB_CONFIG_REMOTE_WAKEUP          0x20
00100 
00101 #include <pshpack1.h>
00102 typedef struct _USB_CONFIGURATION_DESCRIPTOR { 
00103   UCHAR  bLength;
00104   UCHAR  bDescriptorType;
00105   USHORT  wTotalLength;
00106   UCHAR  bNumInterfaces;
00107   UCHAR  bConfigurationValue;
00108   UCHAR  iConfiguration;
00109   UCHAR  bmAttributes;
00110   UCHAR  MaxPower;
00111 } USB_CONFIGURATION_DESCRIPTOR, *PUSB_CONFIGURATION_DESCRIPTOR;
00112 #include <poppack.h>
00113 
00114 typedef struct _USB_DEVICE_DESCRIPTOR { 
00115   UCHAR  bLength;
00116   UCHAR  bDescriptorType;
00117   USHORT  bcdUSB;
00118   UCHAR  bDeviceClass;
00119   UCHAR  bDeviceSubClass;
00120   UCHAR  bDeviceProtocol;
00121   UCHAR  bMaxPacketSize0;
00122   USHORT  idVendor;
00123   USHORT  idProduct;
00124   USHORT  bcdDevice;
00125   UCHAR  iManufacturer;
00126   UCHAR  iProduct;
00127   UCHAR  iSerialNumber;
00128   UCHAR  bNumConfigurations;
00129 } USB_DEVICE_DESCRIPTOR, *PUSB_DEVICE_DESCRIPTOR;
00130 
00131 #define USB_ENDPOINT_DIRECTION_MASK       0x80
00132 
00133 #define USB_ENDPOINT_DIRECTION_OUT(x) (!((x) & USB_ENDPOINT_DIRECTION_MASK))
00134 #define USB_ENDPOINT_DIRECTION_IN(x) ((x) & USB_ENDPOINT_DIRECTION_MASK)
00135 
00136 /* USB_ENDPOINT_DESCRIPTOR.bmAttributes constants */
00137 #define USB_ENDPOINT_TYPE_MASK            0x03
00138 #define USB_ENDPOINT_TYPE_CONTROL         0x00
00139 #define USB_ENDPOINT_TYPE_ISOCHRONOUS     0x01
00140 #define USB_ENDPOINT_TYPE_BULK            0x02
00141 #define USB_ENDPOINT_TYPE_INTERRUPT       0x03
00142 
00143 #include <pshpack1.h>
00144 typedef struct _USB_ENDPOINT_DESCRIPTOR { 
00145   UCHAR  bLength;
00146   UCHAR  bDescriptorType;
00147   UCHAR  bEndpointAddress;
00148   UCHAR  bmAttributes;
00149   USHORT  wMaxPacketSize;
00150   UCHAR  bInterval;
00151 } USB_ENDPOINT_DESCRIPTOR, *PUSB_ENDPOINT_DESCRIPTOR;
00152 #include <poppack.h>
00153 
00154 #define USB_FEATURE_ENDPOINT_STALL        0x0000
00155 #define USB_FEATURE_REMOTE_WAKEUP         0x0001
00156 
00157 typedef struct _USB_INTERFACE_DESCRIPTOR { 
00158   UCHAR  bLength;
00159   UCHAR  bDescriptorType;
00160   UCHAR  bInterfaceNumber;
00161   UCHAR  bAlternateSetting;
00162   UCHAR  bNumEndpoints;
00163   UCHAR  bInterfaceClass;
00164   UCHAR  bInterfaceSubClass;
00165   UCHAR  bInterfaceProtocol;
00166   UCHAR  iInterface;
00167 } USB_INTERFACE_DESCRIPTOR, *PUSB_INTERFACE_DESCRIPTOR;
00168 
00169 typedef struct _USB_STRING_DESCRIPTOR {
00170   UCHAR  bLength;
00171   UCHAR  bDescriptorType;
00172   WCHAR  bString[1];
00173 } USB_STRING_DESCRIPTOR, *PUSB_STRING_DESCRIPTOR;
00174 
00175 #include <pshpack1.h>
00176 typedef struct _USB_HUB_DESCRIPTOR {
00177     UCHAR  bDescriptorLength;
00178     UCHAR  bDescriptorType;
00179     UCHAR  bNumberOfPorts;
00180     USHORT  wHubCharacteristics;
00181     UCHAR  bPowerOnToPowerGood;
00182     UCHAR  bHubControlCurrent;
00183     UCHAR  bRemoveAndPowerMask[64];
00184 } USB_HUB_DESCRIPTOR, *PUSB_HUB_DESCRIPTOR;
00185 #include <poppack.h>
00186 
00187 #define USB_SUPPORT_D0_COMMAND            0x01
00188 #define USB_SUPPORT_D1_COMMAND            0x02
00189 #define USB_SUPPORT_D2_COMMAND            0x04
00190 #define USB_SUPPORT_D3_COMMAND            0x08
00191 
00192 #define USB_SUPPORT_D1_WAKEUP             0x10
00193 #define USB_SUPPORT_D2_WAKEUP             0x20
00194 
00195 typedef struct _USB_CONFIGURATION_POWER_DESCRIPTOR {
00196     UCHAR  bLength;
00197     UCHAR  bDescriptorType;
00198     UCHAR  SelfPowerConsumedD0[3];
00199     UCHAR  bPowerSummaryId;
00200     UCHAR  bBusPowerSavingD1;
00201     UCHAR  bSelfPowerSavingD1;
00202     UCHAR  bBusPowerSavingD2;
00203     UCHAR  bSelfPowerSavingD2; 
00204     UCHAR  bBusPowerSavingD3;
00205     UCHAR  bSelfPowerSavingD3; 
00206     USHORT  TransitionTimeFromD1;
00207     USHORT  TransitionTimeFromD2;
00208     USHORT  TransitionTimeFromD3;
00209 } USB_CONFIGURATION_POWER_DESCRIPTOR, *PUSB_CONFIGURATION_POWER_DESCRIPTOR;
00210 
00211 #define USB_FEATURE_INTERFACE_POWER_D0    0x0002
00212 #define USB_FEATURE_INTERFACE_POWER_D1    0x0003
00213 #define USB_FEATURE_INTERFACE_POWER_D2    0x0004
00214 #define USB_FEATURE_INTERFACE_POWER_D3    0x0005
00215 
00216 #include <pshpack1.h>
00217 typedef struct _USB_INTERFACE_POWER_DESCRIPTOR {
00218     UCHAR  bLength;
00219     UCHAR  bDescriptorType;
00220     UCHAR  bmCapabilitiesFlags;
00221     UCHAR  bBusPowerSavingD1;
00222     UCHAR  bSelfPowerSavingD1;
00223     UCHAR  bBusPowerSavingD2;
00224     UCHAR  bSelfPowerSavingD2; 
00225     UCHAR  bBusPowerSavingD3;
00226     UCHAR  bSelfPowerSavingD3; 
00227     USHORT  TransitionTimeFromD1;
00228     USHORT  TransitionTimeFromD2;
00229     USHORT  TransitionTimeFromD3;
00230 } USB_INTERFACE_POWER_DESCRIPTOR, *PUSB_INTERFACE_POWER_DESCRIPTOR;
00231 #include <poppack.h>
00232 
00233 #ifdef __cplusplus
00234 }
00235 #endif
00236 
00237 #endif /* __USB100_H */