Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
usbioctl.h
00001 /* 00002 * usbioctl.h 00003 * 00004 * USB IOCTL interface. 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 __USBIOCTL_H 00024 #define __USBIOCTL_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 #include "usb100.h" 00036 #include "usbiodef.h" 00037 00038 #define USBD_PORT_ENABLED 1 00039 #define USBD_PORT_CONNECTED 2 00040 00041 #define IOCTL_INTERNAL_USB_CYCLE_PORT \ 00042 CTL_CODE(FILE_DEVICE_USB, USB_CYCLE_PORT, METHOD_NEITHER, FILE_ANY_ACCESS) 00043 00044 #define IOCTL_INTERNAL_USB_ENABLE_PORT \ 00045 CTL_CODE(FILE_DEVICE_USB, USB_ENABLE_PORT, METHOD_NEITHER, FILE_ANY_ACCESS) 00046 00047 #define IOCTL_INTERNAL_USB_GET_BUS_INFO \ 00048 CTL_CODE(FILE_DEVICE_USB, USB_GET_BUS_INFO, METHOD_BUFFERED, FILE_ANY_ACCESS) 00049 00050 #define IOCTL_INTERNAL_USB_GET_BUSGUID_INFO \ 00051 CTL_CODE(FILE_DEVICE_USB, USB_GET_BUSGUID_INFO, METHOD_BUFFERED, FILE_ANY_ACCESS) 00052 00053 #define IOCTL_INTERNAL_USB_GET_CONTROLLER_NAME \ 00054 CTL_CODE(FILE_DEVICE_USB, USB_GET_CONTROLLER_NAME, METHOD_BUFFERED, FILE_ANY_ACCESS) 00055 00056 #define IOCTL_INTERNAL_USB_GET_DEVICE_HANDLE \ 00057 CTL_CODE(FILE_DEVICE_USB, USB_GET_DEVICE_HANDLE, METHOD_NEITHER, FILE_ANY_ACCESS) 00058 00059 #define IOCTL_INTERNAL_USB_GET_HUB_COUNT \ 00060 CTL_CODE(FILE_DEVICE_USB, USB_GET_HUB_COUNT, METHOD_NEITHER, FILE_ANY_ACCESS) 00061 00062 #define IOCTL_INTERNAL_USB_GET_HUB_NAME \ 00063 CTL_CODE(FILE_DEVICE_USB, USB_GET_HUB_NAME, METHOD_BUFFERED, FILE_ANY_ACCESS) 00064 00065 #define IOCTL_INTERNAL_USB_GET_PARENT_HUB_INFO \ 00066 CTL_CODE(FILE_DEVICE_USB, USB_GET_PARENT_HUB_INFO, METHOD_BUFFERED, FILE_ANY_ACCESS) 00067 00068 #define IOCTL_INTERNAL_USB_GET_PORT_STATUS \ 00069 CTL_CODE(FILE_DEVICE_USB, USB_GET_PORT_STATUS, METHOD_NEITHER, FILE_ANY_ACCESS) 00070 00071 #define IOCTL_INTERNAL_USB_RESET_PORT \ 00072 CTL_CODE(FILE_DEVICE_USB, USB_RESET_PORT, METHOD_NEITHER, FILE_ANY_ACCESS) 00073 00074 #define IOCTL_INTERNAL_USB_GET_ROOTHUB_PDO \ 00075 CTL_CODE(FILE_DEVICE_USB, USB_GET_ROOTHUB_PDO, METHOD_NEITHER, FILE_ANY_ACCESS) 00076 00077 #define IOCTL_INTERNAL_USB_SUBMIT_IDLE_NOTIFICATION \ 00078 CTL_CODE(FILE_DEVICE_USB, USB_IDLE_NOTIFICATION, METHOD_NEITHER, FILE_ANY_ACCESS) 00079 00080 #define IOCTL_INTERNAL_USB_SUBMIT_URB \ 00081 CTL_CODE(FILE_DEVICE_USB, USB_SUBMIT_URB, METHOD_NEITHER, FILE_ANY_ACCESS) 00082 00083 00084 #define IOCTL_USB_DIAG_IGNORE_HUBS_ON \ 00085 CTL_CODE(FILE_DEVICE_USB, USB_DIAG_IGNORE_HUBS_ON, METHOD_BUFFERED, FILE_ANY_ACCESS) 00086 00087 #define IOCTL_USB_DIAG_IGNORE_HUBS_OFF \ 00088 CTL_CODE(FILE_DEVICE_USB, USB_DIAG_IGNORE_HUBS_OFF, METHOD_BUFFERED, FILE_ANY_ACCESS) 00089 00090 #define IOCTL_USB_DIAGNOSTIC_MODE_OFF \ 00091 CTL_CODE(FILE_DEVICE_USB, HCD_DIAGNOSTIC_MODE_OFF, METHOD_BUFFERED, FILE_ANY_ACCESS) 00092 00093 #define IOCTL_USB_DIAGNOSTIC_MODE_ON \ 00094 CTL_CODE(FILE_DEVICE_USB, HCD_DIAGNOSTIC_MODE_ON, METHOD_BUFFERED, FILE_ANY_ACCESS) 00095 00096 #define IOCTL_USB_GET_DESCRIPTOR_FROM_NODE_CONNECTION \ 00097 CTL_CODE(FILE_DEVICE_USB, USB_GET_DESCRIPTOR_FROM_NODE_CONNECTION, METHOD_BUFFERED, FILE_ANY_ACCESS) 00098 00099 #define IOCTL_USB_GET_HUB_CAPABILITIES \ 00100 CTL_CODE(FILE_DEVICE_USB, USB_GET_HUB_CAPABILITIES, METHOD_BUFFERED, FILE_ANY_ACCESS) 00101 00102 #define IOCTL_USB_GET_ROOT_HUB_NAME \ 00103 CTL_CODE(FILE_DEVICE_USB, HCD_GET_ROOT_HUB_NAME, METHOD_BUFFERED, FILE_ANY_ACCESS) 00104 00105 #define IOCTL_GET_HCD_DRIVERKEY_NAME \ 00106 CTL_CODE(FILE_DEVICE_USB, HCD_GET_DRIVERKEY_NAME, METHOD_BUFFERED, FILE_ANY_ACCESS) 00107 00108 #define IOCTL_USB_GET_NODE_INFORMATION \ 00109 CTL_CODE(FILE_DEVICE_USB, USB_GET_NODE_INFORMATION, METHOD_BUFFERED, FILE_ANY_ACCESS) 00110 00111 #define IOCTL_USB_GET_NODE_CONNECTION_INFORMATION \ 00112 CTL_CODE(FILE_DEVICE_USB, USB_GET_NODE_CONNECTION_INFORMATION, METHOD_BUFFERED, FILE_ANY_ACCESS) 00113 00114 #define IOCTL_USB_GET_NODE_CONNECTION_ATTRIBUTES \ 00115 CTL_CODE(FILE_DEVICE_USB, USB_GET_NODE_CONNECTION_ATTRIBUTES, METHOD_BUFFERED, FILE_ANY_ACCESS) 00116 00117 #define IOCTL_USB_GET_NODE_CONNECTION_NAME \ 00118 CTL_CODE(FILE_DEVICE_USB, USB_GET_NODE_CONNECTION_NAME, METHOD_BUFFERED, FILE_ANY_ACCESS) 00119 00120 #define IOCTL_USB_GET_NODE_CONNECTION_DRIVERKEY_NAME \ 00121 CTL_CODE(FILE_DEVICE_USB, USB_GET_NODE_CONNECTION_DRIVERKEY_NAME, METHOD_BUFFERED, FILE_ANY_ACCESS) 00122 00123 #define IOCTL_USB_HCD_DISABLE_PORT \ 00124 CTL_CODE(FILE_DEVICE_USB, HCD_DISABLE_PORT, METHOD_BUFFERED, FILE_ANY_ACCESS) 00125 00126 #define IOCTL_USB_HCD_ENABLE_PORT \ 00127 CTL_CODE(FILE_DEVICE_USB, HCD_ENABLE_PORT, METHOD_BUFFERED, FILE_ANY_ACCESS) 00128 00129 #define IOCTL_USB_HCD_GET_STATS_1 \ 00130 CTL_CODE(FILE_DEVICE_USB, HCD_GET_STATS_1, METHOD_BUFFERED, FILE_ANY_ACCESS) 00131 00132 #define IOCTL_USB_HCD_GET_STATS_2 \ 00133 CTL_CODE(FILE_DEVICE_USB, HCD_GET_STATS_2, METHOD_BUFFERED, FILE_ANY_ACCESS) 00134 00135 00136 typedef struct _USB_HUB_CAPABILITIES { 00137 ULONG HubIs2xCapable : 1; 00138 } USB_HUB_CAPABILITIES, *PUSB_HUB_CAPABILITIES; 00139 00140 typedef enum _USB_CONNECTION_STATUS { 00141 NoDeviceConnected, 00142 DeviceConnected, 00143 DeviceFailedEnumeration, 00144 DeviceGeneralFailure, 00145 DeviceCausedOvercurrent, 00146 DeviceNotEnoughPower, 00147 DeviceNotEnoughBandwidth, 00148 DeviceHubNestedTooDeeply, 00149 DeviceInLegacyHub 00150 } USB_CONNECTION_STATUS, *PUSB_CONNECTION_STATUS; 00151 00152 #include <pshpack1.h> 00153 00154 typedef struct _USB_DESCRIPTOR_REQUEST { 00155 ULONG ConnectionIndex; 00156 struct { 00157 UCHAR bmRequest; 00158 UCHAR bRequest; 00159 USHORT wValue; 00160 USHORT wIndex; 00161 USHORT wLength; 00162 } SetupPacket; 00163 UCHAR Data[0]; 00164 } USB_DESCRIPTOR_REQUEST, *PUSB_DESCRIPTOR_REQUEST; 00165 00166 typedef struct _USB_HCD_DRIVERKEY_NAME { 00167 ULONG ActualLength; 00168 WCHAR DriverKeyName[1]; 00169 } USB_HCD_DRIVERKEY_NAME, *PUSB_HCD_DRIVERKEY_NAME; 00170 00171 typedef struct _HCD_ISO_STAT_COUNTERS { 00172 USHORT LateUrbs; 00173 USHORT DoubleBufferedPackets; 00174 USHORT TransfersCF_5ms; 00175 USHORT TransfersCF_2ms; 00176 USHORT TransfersCF_1ms; 00177 USHORT MaxInterruptLatency; 00178 USHORT BadStartFrame; 00179 USHORT StaleUrbs; 00180 USHORT IsoPacketNotAccesed; 00181 USHORT IsoPacketHWError; 00182 USHORT SmallestUrbPacketCount; 00183 USHORT LargestUrbPacketCount; 00184 USHORT IsoCRC_Error; 00185 USHORT IsoOVERRUN_Error; 00186 USHORT IsoINTERNAL_Error; 00187 USHORT IsoUNKNOWN_Error; 00188 ULONG IsoBytesTransferred; 00189 USHORT LateMissedCount; 00190 USHORT HWIsoMissedCount; 00191 ULONG Reserved7[8]; 00192 } HCD_ISO_STAT_COUNTERS, *PHCD_ISO_STAT_COUNTERS; 00193 00194 typedef struct _HCD_STAT_COUNTERS { 00195 ULONG BytesTransferred; 00196 USHORT IsoMissedCount; 00197 USHORT DataOverrunErrorCount; 00198 USHORT CrcErrorCount; 00199 USHORT ScheduleOverrunCount; 00200 USHORT TimeoutErrorCount; 00201 USHORT InternalHcErrorCount; 00202 USHORT BufferOverrunErrorCount; 00203 USHORT SWErrorCount; 00204 USHORT StallPidCount; 00205 USHORT PortDisableCount; 00206 } HCD_STAT_COUNTERS, *PHCD_STAT_COUNTERS; 00207 00208 typedef struct _HCD_STAT_INFORMATION_1 { 00209 ULONG Reserved1; 00210 ULONG Reserved2; 00211 ULONG ResetCounters; 00212 LARGE_INTEGER TimeRead; 00213 HCD_STAT_COUNTERS Counters; 00214 } HCD_STAT_INFORMATION_1, *PHCD_STAT_INFORMATION_1; 00215 00216 typedef struct _HCD_STAT_INFORMATION_2 { 00217 ULONG Reserved1; 00218 ULONG Reserved2; 00219 ULONG ResetCounters; 00220 LARGE_INTEGER TimeRead; 00221 LONG LockedMemoryUsed; 00222 HCD_STAT_COUNTERS Counters; 00223 HCD_ISO_STAT_COUNTERS IsoCounters; 00224 } HCD_STAT_INFORMATION_2, *PHCD_STAT_INFORMATION_2; 00225 00226 typedef struct _USB_HUB_INFORMATION { 00227 USB_HUB_DESCRIPTOR HubDescriptor; 00228 BOOLEAN HubIsBusPowered; 00229 } USB_HUB_INFORMATION, *PUSB_HUB_INFORMATION; 00230 00231 typedef struct _USB_HUB_NAME { 00232 ULONG ActualLength; 00233 WCHAR HubName[1]; 00234 } USB_HUB_NAME, *PUSB_HUB_NAME; 00235 00236 typedef enum _USB_HUB_NODE { 00237 UsbHub, 00238 UsbMIParent 00239 } USB_HUB_NODE; 00240 00241 typedef VOID STDCALL 00242 (*USB_IDLE_CALLBACK)( 00243 PVOID Context); 00244 00245 typedef struct _USB_IDLE_CALLBACK_INFO { 00246 USB_IDLE_CALLBACK IdleCallback; 00247 PVOID IdleContext; 00248 } USB_IDLE_CALLBACK_INFO, *PUSB_IDLE_CALLBACK_INFO; 00249 00250 typedef struct _USB_NODE_CONNECTION_ATTRIBUTES { 00251 ULONG ConnectionIndex; 00252 USB_CONNECTION_STATUS ConnectionStatus; 00253 ULONG PortAttributes; 00254 } USB_NODE_CONNECTION_ATTRIBUTES, *PUSB_NODE_CONNECTION_ATTRIBUTES; 00255 00256 typedef struct _USB_NODE_CONNECTION_DRIVERKEY_NAME { 00257 ULONG ConnectionIndex; 00258 ULONG ActualLength; 00259 WCHAR DriverKeyName[1]; 00260 } USB_NODE_CONNECTION_DRIVERKEY_NAME, *PUSB_NODE_CONNECTION_DRIVERKEY_NAME; 00261 00262 typedef struct _USB_PIPE_INFO { 00263 USB_ENDPOINT_DESCRIPTOR EndpointDescriptor; 00264 ULONG ScheduleOffset; 00265 } USB_PIPE_INFO, *PUSB_PIPE_INFO; 00266 00267 typedef struct _USB_NODE_CONNECTION_INFORMATION { 00268 ULONG ConnectionIndex; 00269 USB_DEVICE_DESCRIPTOR DeviceDescriptor; 00270 UCHAR CurrentConfigurationValue; 00271 BOOLEAN LowSpeed; 00272 BOOLEAN DeviceIsHub; 00273 USHORT DeviceAddress; 00274 ULONG NumberOfOpenPipes; 00275 USB_CONNECTION_STATUS ConnectionStatus; 00276 USB_PIPE_INFO PipeList[0]; 00277 } USB_NODE_CONNECTION_INFORMATION, *PUSB_NODE_CONNECTION_INFORMATION; 00278 00279 typedef struct _USB_NODE_CONNECTION_NAME { 00280 ULONG ConnectionIndex; 00281 ULONG ActualLength; 00282 WCHAR NodeName[1]; 00283 } USB_NODE_CONNECTION_NAME, *PUSB_NODE_CONNECTION_NAME; 00284 00285 typedef struct _USB_MI_PARENT_INFORMATION { 00286 ULONG NumberOfInterfaces; 00287 } USB_MI_PARENT_INFORMATION, *PUSB_MI_PARENT_INFORMATION; 00288 00289 typedef struct _USB_NODE_INFORMATION { 00290 USB_HUB_NODE NodeType; 00291 union { 00292 USB_HUB_INFORMATION HubInformation; 00293 USB_MI_PARENT_INFORMATION MiParentInformation; 00294 } u; 00295 } USB_NODE_INFORMATION, *PUSB_NODE_INFORMATION; 00296 00297 #define WMI_USB_DRIVER_INFORMATION 0 00298 #define WMI_USB_DRIVER_NOTIFICATION 1 00299 #define WMI_USB_POWER_DEVICE_ENABLE 2 00300 00301 typedef enum _USB_NOTIFICATION_TYPE { 00302 EnumerationFailure = 0, 00303 InsufficentBandwidth, 00304 InsufficentPower, 00305 OverCurrent, 00306 ResetOvercurrent, 00307 AcquireBusInfo, 00308 AcquireHubName, 00309 AcquireControllerName, 00310 HubOvercurrent, 00311 HubPowerChange, 00312 HubNestedTooDeeply, 00313 ModernDeviceInLegacyHub 00314 } USB_NOTIFICATION_TYPE; 00315 00316 typedef struct _USB_ACQUIRE_INFO { 00317 USB_NOTIFICATION_TYPE NotificationType; 00318 ULONG TotalSize; 00319 WCHAR Buffer[1]; 00320 } USB_ACQUIRE_INFO, *PUSB_ACQUIRE_INFO; 00321 00322 typedef struct _USB_NOTIFICATION { 00323 USB_NOTIFICATION_TYPE NotificationType; 00324 } USB_NOTIFICATION, *PUSB_NOTIFICATION; 00325 00326 typedef struct _USB_BUS_NOTIFICATION { 00327 USB_NOTIFICATION_TYPE NotificationType; 00328 ULONG TotalBandwidth; 00329 ULONG ConsumedBandwidth; 00330 ULONG ControllerNameLength; 00331 } USB_BUS_NOTIFICATION, *PUSB_BUS_NOTIFICATION; 00332 00333 typedef struct _USB_CONNECTION_NOTIFICATION { 00334 USB_NOTIFICATION_TYPE NotificationType; 00335 ULONG ConnectionNumber; 00336 ULONG RequestedBandwidth; 00337 ULONG EnumerationFailReason; 00338 ULONG PowerRequested; 00339 ULONG HubNameLength; 00340 } USB_CONNECTION_NOTIFICATION, *PUSB_CONNECTION_NOTIFICATION; 00341 00342 typedef struct _USB_ROOT_HUB_NAME { 00343 ULONG ActualLength; 00344 WCHAR RootHubName[1]; 00345 } USB_ROOT_HUB_NAME, *PUSB_ROOT_HUB_NAME; 00346 00347 #include <poppack.h> 00348 00349 #ifdef __cplusplus 00350 } 00351 #endif 00352 00353 #endif /* __USBIOCTL_H */
Generated on Tue Jul 12 2022 19:59:55 by
1.7.2