home *** CD-ROM | disk | FTP | other *** search
/ Beginning C++ Through Gam…rogramming (2nd Edition) / BCGP2E.ISO / bloodshed / devcpp-4.9.9.2_setup.exe / usbuser.h < prev    next >
C/C++ Source or Header  |  2005-01-29  |  10KB  |  329 lines

  1. /*
  2.  * usbuser.h
  3.  *
  4.  * USB user mode IOCTL interface
  5.  *
  6.  * This file is part of the w32api package.
  7.  *
  8.  * Contributors:
  9.  *   Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
  10.  *
  11.  * THIS SOFTWARE IS NOT COPYRIGHTED
  12.  *
  13.  * This source code is offered for use in the public domain. You may
  14.  * use, modify or distribute it freely.
  15.  *
  16.  * This code is distributed in the hope that it will be useful but
  17.  * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
  18.  * DISCLAIMED. This includes but is not limited to warranties of
  19.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  20.  *
  21.  */
  22.  
  23. #ifndef __USBUSER_H
  24. #define __USBUSER_H
  25.  
  26. #if __GNUC__ >=3
  27. #pragma GCC system_header
  28. #endif
  29.  
  30. #ifdef __cplusplus
  31. extern "C" {
  32. #endif
  33.  
  34. #include "ntddk.h"
  35. #include "usb.h"
  36. #include "usbiodef.h"
  37.  
  38. #include <pshpack1.h>
  39.  
  40. #define USBUSER_VERSION                   0x0004
  41.  
  42. #define IOCTL_USB_USER_REQUEST            USB_CTL(HCD_USER_REQUEST)
  43.  
  44. #ifndef IOCTL_USB_DIAGNOSTIC_MODE_ON
  45. #define IOCTL_USB_DIAGNOSTIC_MODE_ON      USB_CTL(HCD_DIAGNOSTIC_MODE_ON) 
  46. #endif
  47. #ifndef IOCTL_USB_DIAGNOSTIC_MODE_OFF
  48. #define IOCTL_USB_DIAGNOSTIC_MODE_OFF     USB_CTL(HCD_DIAGNOSTIC_MODE_OFF) 
  49. #endif
  50.  
  51. #ifndef IOCTL_USB_GET_ROOT_HUB_NAME
  52. #define IOCTL_USB_GET_ROOT_HUB_NAME       USB_CTL(HCD_GET_ROOT_HUB_NAME) 
  53. #endif
  54. #ifndef IOCTL_GET_HCD_DRIVERKEY_NAME
  55. #define IOCTL_GET_HCD_DRIVERKEY_NAME      USB_CTL(HCD_GET_DRIVERKEY_NAME) 
  56. #endif
  57.  
  58. typedef enum _USB_USER_ERROR_CODE {
  59.     UsbUserSuccess = 0,
  60.     UsbUserNotSupported,
  61.     UsbUserInvalidRequestCode,
  62.     UsbUserFeatureDisabled,
  63.     UsbUserInvalidHeaderParameter,
  64.     UsbUserInvalidParameter,
  65.     UsbUserMiniportError,
  66.     UsbUserBufferTooSmall,
  67.     UsbUserErrorNotMapped,
  68.     UsbUserDeviceNotStarted,
  69.     UsbUserNoDeviceConnected
  70. } USB_USER_ERROR_CODE;
  71.  
  72. #define USBUSER_GET_CONTROLLER_INFO_0     0x00000001
  73. #define USBUSER_GET_CONTROLLER_DRIVER_KEY 0x00000002
  74. #define USBUSER_PASS_THRU                 0x00000003
  75. #define USBUSER_GET_POWER_STATE_MAP       0x00000004
  76. #define USBUSER_GET_BANDWIDTH_INFORMATION 0x00000005
  77. #define USBUSER_GET_BUS_STATISTICS_0      0x00000006
  78. #define USBUSER_GET_ROOTHUB_SYMBOLIC_NAME 0x00000007
  79. #define USBUSER_GET_USB_DRIVER_VERSION    0x00000008
  80. #define USBUSER_GET_USB2_HW_VERSION       0x00000009
  81. #define USBUSER_OP_SEND_ONE_PACKET        0x10000001
  82. #define USBUSER_OP_RAW_RESET_PORT         0x20000001
  83. #define USBUSER_OP_OPEN_RAW_DEVICE        0x20000002
  84. #define USBUSER_OP_CLOSE_RAW_DEVICE       0x20000003
  85. #define USBUSER_OP_SEND_RAW_COMMAND       0x20000004
  86. #define USBUSER_INVALID_REQUEST           0xFFFFFFF0
  87. #define USBUSER_OP_MASK_DEVONLY_API       0x10000000
  88. #define USBUSER_OP_MASK_HCTEST_API        0x20000000
  89.  
  90. #define USB_PACKETFLAG_LOW_SPEED          0x00000001
  91. #define USB_PACKETFLAG_FULL_SPEED         0x00000002
  92. #define USB_PACKETFLAG_HIGH_SPEED         0x00000004
  93. #define USB_PACKETFLAG_ASYNC_IN           0x00000008
  94. #define USB_PACKETFLAG_ASYNC_OUT          0x00000010
  95. #define USB_PACKETFLAG_ISO_IN             0x00000020
  96. #define USB_PACKETFLAG_ISO_OUT            0x00000040
  97. #define USB_PACKETFLAG_SETUP              0x00000080
  98. #define USB_PACKETFLAG_TOGGLE0            0x00000100
  99. #define USB_PACKETFLAG_TOGGLE1            0x00000200
  100.  
  101. typedef struct _PACKET_PARAMETERS {
  102.     UCHAR  DeviceAddress;
  103.     UCHAR  EndpointAddress;
  104.     USHORT  MaximumPacketSize;
  105.     ULONG  Timeout;
  106.     ULONG  Flags;
  107.     ULONG  DataLength;
  108.     USHORT  HubDeviceAddress;
  109.     USHORT  PortTTNumber;
  110.     UCHAR  ErrorCount;
  111.     UCHAR  Pad[3];
  112.     USBD_STATUS  UsbdStatusCode;
  113.     UCHAR  Data[4];
  114. } PACKET_PARAMETERS, *PPACKET_PARAMETERS;
  115.  
  116. typedef struct _RAW_RESET_PORT_PARAMETERS {
  117.     USHORT  PortNumber;
  118.     USHORT  PortStatus;
  119. } RAW_RESET_PORT_PARAMETERS, *PRAW_RESET_PORT_PARAMETERS;
  120.  
  121. typedef struct _USB_BANDWIDTH_INFO {
  122.     ULONG  DeviceCount;
  123.     ULONG  TotalBusBandwidth;
  124.     ULONG  Total32secBandwidth;
  125.     ULONG  AllocedBulkAndControl;
  126.     ULONG  AllocedIso;
  127.     ULONG  AllocedInterrupt_1ms;
  128.     ULONG  AllocedInterrupt_2ms;
  129.     ULONG  AllocedInterrupt_4ms;
  130.     ULONG  AllocedInterrupt_8ms;
  131.     ULONG  AllocedInterrupt_16ms;
  132.     ULONG  AllocedInterrupt_32ms;
  133. } USB_BANDWIDTH_INFO, *PUSB_BANDWIDTH_INFO;
  134.  
  135. typedef struct _USBUSER_REQUEST_HEADER {
  136.     ULONG  UsbUserRequest;
  137.     USB_USER_ERROR_CODE  UsbUserStatusCode;
  138.     ULONG  RequestBufferLength;
  139.     ULONG  ActualBufferLength;
  140. } USBUSER_REQUEST_HEADER, *PUSBUSER_REQUEST_HEADER;
  141.  
  142. typedef struct _USBUSER_BANDWIDTH_INFO_REQUEST {
  143.     USBUSER_REQUEST_HEADER  Header;
  144.     USB_BANDWIDTH_INFO  BandwidthInformation;
  145. } USBUSER_BANDWIDTH_INFO_REQUEST, *PUSBUSER_BANDWIDTH_INFO_REQUEST;
  146.  
  147. typedef struct _USB_BUS_STATISTICS_0 {
  148.     ULONG  DeviceCount;
  149.     LARGE_INTEGER  CurrentSystemTime;
  150.     ULONG  CurrentUsbFrame;
  151.     ULONG  BulkBytes;
  152.     ULONG  IsoBytes;
  153.     ULONG  InterruptBytes;
  154.     ULONG  ControlDataBytes;
  155.     ULONG  PciInterruptCount;
  156.     ULONG  HardResetCount;
  157.     ULONG  WorkerSignalCount;
  158.     ULONG  CommonBufferBytes;
  159.     ULONG  WorkerIdleTimeMs;
  160.     BOOLEAN  RootHubEnabled;
  161.     UCHAR  RootHubDevicePowerState;
  162.     UCHAR  Unused;
  163.     UCHAR  NameIndex;
  164. } USB_BUS_STATISTICS_0, *PUSB_BUS_STATISTICS_0;
  165.  
  166. typedef struct _USBUSER_BUS_STATISTICS_0_REQUEST {
  167.     USBUSER_REQUEST_HEADER  Header;
  168.     USB_BUS_STATISTICS_0  BusStatistics0;
  169. } USBUSER_BUS_STATISTICS_0_REQUEST, *PUSBUSER_BUS_STATISTICS_0_REQUEST;
  170.  
  171. /* USB_CONTROLLER_INFO_0.HcFeatureFlags constants */
  172. #define USB_HC_FEATURE_FLAG_PORT_POWER_SWITCHING  0x00000001
  173. #define USB_HC_FEATURE_FLAG_SEL_SUSPEND           0x00000002
  174. #define USB_HC_FEATURE_LEGACY_BIOS                0x00000004
  175.  
  176. typedef struct _USB_CLOSE_RAW_DEVICE_PARAMETERS {
  177.   ULONG  xxx;
  178. } USB_CLOSE_RAW_DEVICE_PARAMETERS , *PUSB_CLOSE_RAW_DEVICE_PARAMETERS;
  179.  
  180. typedef struct _USBUSER_CLOSE_RAW_DEVICE {
  181.     USBUSER_REQUEST_HEADER  Header;
  182.     USB_CLOSE_RAW_DEVICE_PARAMETERS  Parameters;
  183. } USBUSER_CLOSE_RAW_DEVICE, *PUSBUSER_CLOSE_RAW_DEVICE;
  184.  
  185. typedef struct _USB_CONTROLLER_INFO_0 {
  186.   ULONG  PciVendorId;
  187.   ULONG  PciDeviceId;
  188.   ULONG  PciRevision;
  189.   ULONG  NumberOfRootPorts;
  190.   USB_CONTROLLER_FLAVOR  ControllerFlavor;
  191.   ULONG  HcFeatureFlags;
  192. } USB_CONTROLLER_INFO_0 , *PUSB_CONTROLLER_INFO_0;
  193.  
  194. typedef struct _USBUSER_CONTROLLER_INFO_0 {
  195.   USBUSER_REQUEST_HEADER  Header;
  196.   USB_CONTROLLER_INFO_0  Info0;    
  197. } USBUSER_CONTROLLER_INFO_0, *PUSBUSER_CONTROLLER_INFO_0;
  198.  
  199. typedef struct _USB_DRIVER_VERSION_PARAMETERS {
  200.     ULONG  DriverTrackingCode;
  201.     ULONG  USBDI_Version;
  202.     ULONG  USBUSER_Version;
  203.     BOOLEAN  CheckedPortDriver;
  204.     BOOLEAN  CheckedMiniportDriver;
  205.     USHORT  USB_Version;
  206. } USB_DRIVER_VERSION_PARAMETERS , *PUSB_DRIVER_VERSION_PARAMETERS;
  207.  
  208. typedef struct _USBUSER_GET_DRIVER_VERSION {
  209.     USBUSER_REQUEST_HEADER  Header;
  210.     USB_DRIVER_VERSION_PARAMETERS  Parameters;    
  211. } USBUSER_GET_DRIVER_VERSION, *PUSBUSER_GET_DRIVER_VERSION;
  212.  
  213. typedef struct _USB_OPEN_RAW_DEVICE_PARAMETERS {
  214.     USHORT  PortStatus;
  215.     USHORT  MaxPacketEp0;
  216. } USB_OPEN_RAW_DEVICE_PARAMETERS , *PUSB_OPEN_RAW_DEVICE_PARAMETERS;
  217.  
  218. typedef struct _USBUSER_OPEN_RAW_DEVICE {
  219.     USBUSER_REQUEST_HEADER  Header;
  220.     USB_OPEN_RAW_DEVICE_PARAMETERS  Parameters;    
  221. } USBUSER_OPEN_RAW_DEVICE, *PUSBUSER_OPEN_RAW_DEVICE;
  222.  
  223. typedef enum _WDMUSB_POWER_STATE {
  224.     WdmUsbPowerNotMapped = 0,
  225.     WdmUsbPowerSystemUnspecified = 100,
  226.     WdmUsbPowerSystemWorking,
  227.     WdmUsbPowerSystemSleeping1,
  228.     WdmUsbPowerSystemSleeping2,
  229.     WdmUsbPowerSystemSleeping3,
  230.     WdmUsbPowerSystemHibernate,
  231.     WdmUsbPowerSystemShutdown,
  232.     WdmUsbPowerDeviceUnspecified = 200,
  233.     WdmUsbPowerDeviceD0,
  234.     WdmUsbPowerDeviceD1,
  235.     WdmUsbPowerDeviceD2,
  236.     WdmUsbPowerDeviceD3
  237. } WDMUSB_POWER_STATE;
  238.  
  239. typedef struct _USB_POWER_INFO {
  240.     WDMUSB_POWER_STATE  SystemState;
  241.     WDMUSB_POWER_STATE  HcDevicePowerState;
  242.     WDMUSB_POWER_STATE  HcDeviceWake;
  243.     WDMUSB_POWER_STATE  HcSystemWake; 
  244.     WDMUSB_POWER_STATE  RhDevicePowerState;
  245.     WDMUSB_POWER_STATE  RhDeviceWake;
  246.     WDMUSB_POWER_STATE  RhSystemWake; 
  247.     WDMUSB_POWER_STATE  LastSystemSleepState; 
  248.     BOOLEAN  CanWakeup;
  249.     BOOLEAN  IsPowered;
  250. } USB_POWER_INFO, *PUSB_POWER_INFO;
  251.  
  252. typedef struct _USBUSER_POWER_INFO_REQUEST {
  253.     USBUSER_REQUEST_HEADER  Header;
  254.     USB_POWER_INFO  PowerInformation;
  255. } USBUSER_POWER_INFO_REQUEST, *PUSBUSER_POWER_INFO_REQUEST;
  256.  
  257. typedef struct _USB_UNICODE_NAME {
  258.     ULONG  Length;
  259.     WCHAR  String[1];
  260. } USB_UNICODE_NAME, *PUSB_UNICODE_NAME;
  261.  
  262. typedef struct _USBUSER_CONTROLLER_UNICODE_NAME {
  263.     USBUSER_REQUEST_HEADER  Header;
  264.   USB_UNICODE_NAME  UnicodeName;
  265. } USBUSER_CONTROLLER_UNICODE_NAME, *PUSBUSER_CONTROLLER_UNICODE_NAME;
  266.  
  267. typedef struct _USB_PASS_THRU_PARAMETERS {
  268.     GUID  FunctionGUID;
  269.     ULONG  ParameterLength;
  270.     UCHAR  Parameters[4];
  271. } USB_PASS_THRU_PARAMETERS, *PUSB_PASS_THRU_PARAMETERS;
  272.  
  273. typedef struct _USBUSER_PASS_THRU_REQUEST {
  274.     USBUSER_REQUEST_HEADER  Header;
  275.     USB_PASS_THRU_PARAMETERS  PassThru;
  276. } USBUSER_PASS_THRU_REQUEST, *PUSBUSER_PASS_THRU_REQUEST;
  277.  
  278. typedef struct _USBUSER_RAW_RESET_ROOT_PORT {
  279.     USBUSER_REQUEST_HEADER  Header;
  280.     RAW_RESET_PORT_PARAMETERS  Parameters;
  281. } USBUSER_RAW_RESET_ROOT_PORT, *PUSBUSER_RAW_RESET_ROOT_PORT;
  282.  
  283. typedef struct _USBUSER_SEND_ONE_PACKET {
  284.     USBUSER_REQUEST_HEADER  Header;
  285.     PACKET_PARAMETERS  PacketParameters;
  286. } USBUSER_SEND_ONE_PACKET, *PUSBUSER_SEND_ONE_PACKET;
  287.  
  288. typedef struct _USB_SEND_RAW_COMMAND_PARAMETERS {
  289.     UCHAR  Usb_bmRequest;
  290.     UCHAR  Usb_bRequest;
  291.     USHORT  Usb_wVlaue;
  292.     USHORT  Usb_wIndex;
  293.     USHORT  Usb_wLength;
  294.     USHORT  DeviceAddress;
  295.     USHORT  MaximumPacketSize;
  296.     ULONG  Timeout;
  297.     ULONG  DataLength;
  298.     USBD_STATUS  UsbdStatusCode;
  299.     UCHAR  Data[4];
  300. } USB_SEND_RAW_COMMAND_PARAMETERS, *PUSB_SEND_RAW_COMMAND_PARAMETERS;
  301.  
  302. typedef struct _USBUSER_SEND_RAW_COMMAND {
  303.     USBUSER_REQUEST_HEADER  Header;
  304.     USB_SEND_RAW_COMMAND_PARAMETERS  Parameters;
  305. } USBUSER_SEND_RAW_COMMAND, *PUSBUSER_SEND_RAW_COMMAND;
  306.  
  307. /* USB_USB2HW_VERSION_PARAMETERS.Usb2HwRevision constants */
  308. #define USB2HW_UNKNOWN                    0x00
  309. #define USB2HW_A0                         0xA0
  310. #define USB2HW_A1                         0xA1
  311. #define USB2HW_B0                         0xB0
  312.  
  313. typedef struct _USB_USB2HW_VERSION_PARAMETERS {
  314.   UCHAR  Usb2HwRevision;
  315. } USB_USB2HW_VERSION_PARAMETERS, *PUSB_USB2HW_VERSION_PARAMETERS;
  316.  
  317. typedef struct _USBUSER_GET_USB2HW_VERSION {
  318.     USBUSER_REQUEST_HEADER  Header;
  319.     USB_USB2HW_VERSION_PARAMETERS  Parameters;
  320. } USBUSER_GET_USB2HW_VERSION, *PUSBUSER_GET_USB2HW_VERSION;
  321.  
  322. #include <poppack.h>
  323.  
  324. #ifdef __cplusplus
  325. }
  326. #endif
  327.  
  328. #endif /* __USBUSER_H */
  329.