| // Copyright © 2016-2017 winapi-rs developers |
| // Licensed under the Apache License, Version 2.0 |
| // <LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0> or the MIT license |
| // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your option. |
| // All files in the project carrying such notice may not be copied, modified, or distributed |
| // except according to those terms. |
| //! USB Spec Definitions. |
| use shared::basetsd::ULONG64; |
| use shared::guiddef::GUID; |
| use shared::minwindef::{UCHAR, ULONG, USHORT}; |
| use um::winnt::WCHAR; |
| ENUM!{enum USB_DEVICE_SPEED { |
| UsbLowSpeed = 0, |
| UsbFullSpeed, |
| UsbHighSpeed, |
| UsbSuperSpeed, |
| }} |
| ENUM!{enum USB_DEVICE_TYPE { |
| Usb11Device = 0, |
| Usb20Device, |
| }} |
| STRUCT!{#[repr(packed)] struct BM_REQUEST_TYPE { |
| B: UCHAR, |
| }} |
| BITFIELD!{BM_REQUEST_TYPE B: UCHAR [ |
| Recipient set_Recipient[0..2], |
| Reserved set_Reserved[2..5], |
| Type set_Type[5..7], |
| Dir set_Dir[7..8], |
| ]} |
| pub type PBM_REQUEST_TYPE = *mut BM_REQUEST_TYPE; |
| STRUCT!{#[repr(packed)] struct USB_DEFAULT_PIPE_SETUP_PACKET_wValue_s { |
| LowByte: UCHAR, |
| HiByte: UCHAR, |
| }} |
| UNION!{#[repr(packed)] union USB_DEFAULT_PIPE_SETUP_PACKET_wValue { |
| [u16; 1], |
| s s_mut: USB_DEFAULT_PIPE_SETUP_PACKET_wValue_s, |
| W W_mut: USHORT, |
| }} |
| STRUCT!{#[repr(packed)] struct USB_DEFAULT_PIPE_SETUP_PACKET_wIndex_s { |
| LowByte: UCHAR, |
| HiByte: UCHAR, |
| }} |
| UNION!{#[repr(packed)] union USB_DEFAULT_PIPE_SETUP_PACKET_wIndex { |
| [u16; 1], |
| s s_mut: USB_DEFAULT_PIPE_SETUP_PACKET_wIndex_s, |
| W W_mut: USHORT, |
| }} |
| STRUCT!{#[repr(packed)] struct USB_DEFAULT_PIPE_SETUP_PACKET { |
| bmRequestType: BM_REQUEST_TYPE, |
| bRequest: UCHAR, |
| wValue: USB_DEFAULT_PIPE_SETUP_PACKET_wValue, |
| wIndex: USB_DEFAULT_PIPE_SETUP_PACKET_wIndex, |
| wLength: USHORT, |
| }} |
| pub type PUSB_DEFAULT_PIPE_SETUP_PACKET = *mut USB_DEFAULT_PIPE_SETUP_PACKET; |
| pub const BMREQUEST_HOST_TO_DEVICE: UCHAR = 0; |
| pub const BMREQUEST_DEVICE_TO_HOST: UCHAR = 1; |
| pub const BMREQUEST_STANDARD: UCHAR = 0; |
| pub const BMREQUEST_CLASS: UCHAR = 1; |
| pub const BMREQUEST_VENDOR: UCHAR = 2; |
| pub const BMREQUEST_TO_DEVICE: UCHAR = 0; |
| pub const BMREQUEST_TO_INTERFACE: UCHAR = 1; |
| pub const BMREQUEST_TO_ENDPOINT: UCHAR = 2; |
| pub const BMREQUEST_TO_OTHER: UCHAR = 3; |
| #[inline] |
| pub fn USB_DESCRIPTOR_MAKE_TYPE_AND_INDEX(d: UCHAR, i: UCHAR) -> USHORT { |
| (d as USHORT) << 8 | (i as USHORT) |
| } |
| pub const USB_REQUEST_GET_STATUS: UCHAR = 0x00; |
| pub const USB_REQUEST_CLEAR_FEATURE: UCHAR = 0x01; |
| pub const USB_REQUEST_SET_FEATURE: UCHAR = 0x03; |
| pub const USB_REQUEST_SET_ADDRESS: UCHAR = 0x05; |
| pub const USB_REQUEST_GET_DESCRIPTOR: UCHAR = 0x06; |
| pub const USB_REQUEST_SET_DESCRIPTOR: UCHAR = 0x07; |
| pub const USB_REQUEST_GET_CONFIGURATION: UCHAR = 0x08; |
| pub const USB_REQUEST_SET_CONFIGURATION: UCHAR = 0x09; |
| pub const USB_REQUEST_GET_INTERFACE: UCHAR = 0x0A; |
| pub const USB_REQUEST_SET_INTERFACE: UCHAR = 0x0B; |
| pub const USB_REQUEST_SYNC_FRAME: UCHAR = 0x0C; |
| pub const USB_REQUEST_SET_SEL: UCHAR = 0x30; |
| pub const USB_REQUEST_ISOCH_DELAY: UCHAR = 0x31; |
| pub const USB_DEVICE_DESCRIPTOR_TYPE: UCHAR = 0x01; |
| pub const USB_CONFIGURATION_DESCRIPTOR_TYPE: UCHAR = 0x02; |
| pub const USB_STRING_DESCRIPTOR_TYPE: UCHAR = 0x03; |
| pub const USB_INTERFACE_DESCRIPTOR_TYPE: UCHAR = 0x04; |
| pub const USB_ENDPOINT_DESCRIPTOR_TYPE: UCHAR = 0x05; |
| pub const USB_DEVICE_QUALIFIER_DESCRIPTOR_TYPE: UCHAR = 0x06; |
| pub const USB_OTHER_SPEED_CONFIGURATION_DESCRIPTOR_TYPE: UCHAR = 0x07; |
| pub const USB_INTERFACE_POWER_DESCRIPTOR_TYPE: UCHAR = 0x08; |
| pub const USB_OTG_DESCRIPTOR_TYPE: UCHAR = 0x09; |
| pub const USB_DEBUG_DESCRIPTOR_TYPE: UCHAR = 0x0A; |
| pub const USB_INTERFACE_ASSOCIATION_DESCRIPTOR_TYPE: UCHAR = 0x0B; |
| pub const USB_BOS_DESCRIPTOR_TYPE: UCHAR = 0x0F; |
| pub const USB_DEVICE_CAPABILITY_DESCRIPTOR_TYPE: UCHAR = 0x10; |
| pub const USB_SUPERSPEED_ENDPOINT_COMPANION_DESCRIPTOR_TYPE: UCHAR = 0x30; |
| pub const USB_SUPERSPEEDPLUS_ISOCH_ENDPOINT_COMPANION_DESCRIPTOR_TYPE: UCHAR = 0x31; |
| pub const USB_RESERVED_DESCRIPTOR_TYPE: UCHAR = 0x06; |
| pub const USB_CONFIG_POWER_DESCRIPTOR_TYPE: UCHAR = 0x07; |
| pub const USB_FEATURE_ENDPOINT_STALL: UCHAR = 0x00; |
| pub const USB_FEATURE_REMOTE_WAKEUP: UCHAR = 0x01; |
| pub const USB_FEATURE_TEST_MODE: UCHAR = 0x02; |
| pub const USB_FEATURE_FUNCTION_SUSPEND: UCHAR = 0x00; |
| pub const USB_FEATURE_U1_ENABLE: UCHAR = 0x30; |
| pub const USB_FEATURE_U2_ENABLE: UCHAR = 0x31; |
| pub const USB_FEATURE_LTM_ENABLE: UCHAR = 0x32; |
| pub const USB_FEATURE_LDM_ENABLE: UCHAR = 0x35; |
| pub const USB_FEATURE_BATTERY_WAKE_MASK: UCHAR = 0x28; |
| pub const USB_FEATURE_OS_IS_PD_AWARE: UCHAR = 0x29; |
| pub const USB_FEATURE_POLICY_MODE: UCHAR = 0x2A; |
| pub const USB_FEATURE_CHARGING_POLICY: UCHAR = 0x36; |
| pub const USB_CHARGING_POLICY_DEFAULT: UCHAR = 0x00; |
| pub const USB_CHARGING_POLICY_ICCHPF: UCHAR = 0x01; |
| pub const USB_CHARGING_POLICY_ICCLPF: UCHAR = 0x02; |
| pub const USB_CHARGING_POLICY_NO_POWER: UCHAR = 0x03; |
| pub const USB_STATUS_PORT_STATUS: UCHAR = 0x00; |
| pub const USB_STATUS_PD_STATUS: UCHAR = 0x01; |
| pub const USB_STATUS_EXT_PORT_STATUS: UCHAR = 0x02; |
| pub const USB_GETSTATUS_SELF_POWERED: UCHAR = 0x01; |
| pub const USB_GETSTATUS_REMOTE_WAKEUP_ENABLED: UCHAR = 0x02; |
| pub const USB_GETSTATUS_U1_ENABLE: UCHAR = 0x04; |
| pub const USB_GETSTATUS_U2_ENABLE: UCHAR = 0x08; |
| pub const USB_GETSTATUS_LTM_ENABLE: UCHAR = 0x10; |
| STRUCT!{#[repr(packed)] struct USB_DEVICE_STATUS { |
| AsUshort16: USHORT, |
| }} |
| BITFIELD!{USB_DEVICE_STATUS AsUshort16: USHORT [ |
| SelfPowered set_SelfPowered[0..1], |
| RemoteWakeup set_RemoteWakeup[1..2], |
| U1Enable set_U1Enable[2..3], |
| U2Enable set_U2Enable[3..4], |
| LtmEnable set_LtmEnable[4..5], |
| Reserved set_Reserved[5..16], |
| ]} |
| pub type PUSB_DEVICE_STATUS = *mut USB_DEVICE_STATUS; |
| STRUCT!{#[repr(packed)] struct USB_INTERFACE_STATUS { |
| AsUshort16: USHORT, |
| }} |
| BITFIELD!{USB_INTERFACE_STATUS AsUshort16: USHORT [ |
| RemoteWakeupCapable set_RemoteWakeupCapable[0..1], |
| RemoteWakeupEnabled set_RemoteWakeupEnabled[1..2], |
| Reserved set_Reserved[2..16], |
| ]} |
| pub type PUSB_INTERFACE_STATUS = *mut USB_INTERFACE_STATUS; |
| STRUCT!{#[repr(packed)] struct USB_ENDPOINT_STATUS { |
| AsUshort16: USHORT, |
| }} |
| BITFIELD!{USB_ENDPOINT_STATUS AsUshort16: USHORT [ |
| Halt set_Halt[0..1], |
| Reserved set_Reserved[1..16], |
| ]} |
| pub type PUSB_ENDPOINT_STATUS = *mut USB_ENDPOINT_STATUS; |
| STRUCT!{#[repr(packed)] struct USB_COMMON_DESCRIPTOR { |
| bLength: UCHAR, |
| bDescriptorType: UCHAR, |
| }} |
| pub type PUSB_COMMON_DESCRIPTOR = *mut USB_COMMON_DESCRIPTOR; |
| STRUCT!{#[repr(packed)] struct USB_DEVICE_DESCRIPTOR { |
| bLength: UCHAR, |
| bDescriptorType: UCHAR, |
| bcdUSB: USHORT, |
| bDeviceClass: UCHAR, |
| bDeviceSubClass: UCHAR, |
| bDeviceProtocol: UCHAR, |
| bMaxPacketSize0: UCHAR, |
| idVendor: USHORT, |
| idProduct: USHORT, |
| bcdDevice: USHORT, |
| iManufacturer: UCHAR, |
| iProduct: UCHAR, |
| iSerialNumber: UCHAR, |
| bNumConfigurations: UCHAR, |
| }} |
| pub type PUSB_DEVICE_DESCRIPTOR = *mut USB_DEVICE_DESCRIPTOR; |
| pub const USB_DEVICE_CLASS_RESERVED: UCHAR = 0x00; |
| pub const USB_DEVICE_CLASS_AUDIO: UCHAR = 0x01; |
| pub const USB_DEVICE_CLASS_COMMUNICATIONS: UCHAR = 0x02; |
| pub const USB_DEVICE_CLASS_HUMAN_INTERFACE: UCHAR = 0x03; |
| pub const USB_DEVICE_CLASS_MONITOR: UCHAR = 0x04; |
| pub const USB_DEVICE_CLASS_PHYSICAL_INTERFACE: UCHAR = 0x05; |
| pub const USB_DEVICE_CLASS_POWER: UCHAR = 0x06; |
| pub const USB_DEVICE_CLASS_IMAGE: UCHAR = 0x06; |
| pub const USB_DEVICE_CLASS_PRINTER: UCHAR = 0x07; |
| pub const USB_DEVICE_CLASS_STORAGE: UCHAR = 0x08; |
| pub const USB_DEVICE_CLASS_HUB: UCHAR = 0x09; |
| pub const USB_DEVICE_CLASS_CDC_DATA: UCHAR = 0x0A; |
| pub const USB_DEVICE_CLASS_SMART_CARD: UCHAR = 0x0B; |
| pub const USB_DEVICE_CLASS_CONTENT_SECURITY: UCHAR = 0x0D; |
| pub const USB_DEVICE_CLASS_VIDEO: UCHAR = 0x0E; |
| pub const USB_DEVICE_CLASS_PERSONAL_HEALTHCARE: UCHAR = 0x0F; |
| pub const USB_DEVICE_CLASS_AUDIO_VIDEO: UCHAR = 0x10; |
| pub const USB_DEVICE_CLASS_BILLBOARD: UCHAR = 0x11; |
| pub const USB_DEVICE_CLASS_DIAGNOSTIC_DEVICE: UCHAR = 0xDC; |
| pub const USB_DEVICE_CLASS_WIRELESS_CONTROLLER: UCHAR = 0xE0; |
| pub const USB_DEVICE_CLASS_MISCELLANEOUS: UCHAR = 0xEF; |
| pub const USB_DEVICE_CLASS_APPLICATION_SPECIFIC: UCHAR = 0xFE; |
| pub const USB_DEVICE_CLASS_VENDOR_SPECIFIC: UCHAR = 0xFF; |
| STRUCT!{#[repr(packed)] struct USB_DEVICE_QUALIFIER_DESCRIPTOR { |
| bLength: UCHAR, |
| bDescriptorType: UCHAR, |
| bcdUSB: USHORT, |
| bDeviceClass: UCHAR, |
| bDeviceSubClass: UCHAR, |
| bDeviceProtocol: UCHAR, |
| bMaxPacketSize0: UCHAR, |
| bNumConfigurations: UCHAR, |
| bReserved: UCHAR, |
| }} |
| pub type PUSB_DEVICE_QUALIFIER_DESCRIPTOR = *mut USB_DEVICE_QUALIFIER_DESCRIPTOR; |
| STRUCT!{#[repr(packed)] struct USB_BOS_DESCRIPTOR { |
| bLength: UCHAR, |
| bDescriptorType: UCHAR, |
| wTotalLength: USHORT, |
| bNumDeviceCaps: UCHAR, |
| }} |
| pub type PUSB_BOS_DESCRIPTOR = *mut USB_BOS_DESCRIPTOR; |
| pub const USB_DEVICE_CAPABILITY_WIRELESS_USB: UCHAR = 0x01; |
| pub const USB_DEVICE_CAPABILITY_USB20_EXTENSION: UCHAR = 0x02; |
| pub const USB_DEVICE_CAPABILITY_SUPERSPEED_USB: UCHAR = 0x03; |
| pub const USB_DEVICE_CAPABILITY_CONTAINER_ID: UCHAR = 0x04; |
| pub const USB_DEVICE_CAPABILITY_PLATFORM: UCHAR = 0x05; |
| pub const USB_DEVICE_CAPABILITY_POWER_DELIVERY: UCHAR = 0x06; |
| pub const USB_DEVICE_CAPABILITY_BATTERY_INFO: UCHAR = 0x07; |
| pub const USB_DEVICE_CAPABILITY_PD_CONSUMER_PORT: UCHAR = 0x08; |
| pub const USB_DEVICE_CAPABILITY_PD_PROVIDER_PORT: UCHAR = 0x09; |
| pub const USB_DEVICE_CAPABILITY_SUPERSPEEDPLUS_USB: UCHAR = 0x0A; |
| pub const USB_DEVICE_CAPABILITY_PRECISION_TIME_MEASUREMENT: UCHAR = 0x0B; |
| pub const USB_DEVICE_CAPABILITY_BILLBOARD: UCHAR = 0x0D; |
| pub const USB_DEVICE_CAPABILITY_CONFIGURATION_SUMMARY: UCHAR = 0x10; |
| STRUCT!{#[repr(packed)] struct USB_DEVICE_CAPABILITY_USB20_EXTENSION_DESCRIPTOR_bmAttributes { |
| AsUlong: ULONG, |
| }} |
| BITFIELD!{USB_DEVICE_CAPABILITY_USB20_EXTENSION_DESCRIPTOR_bmAttributes AsUlong: ULONG [ |
| Reserved set_Reserved[0..1], |
| LPMCapable set_LPMCapable[1..2], |
| BESLAndAlternateHIRDSupported set_BESLAndAlternateHIRDSupported[2..3], |
| BaselineBESLValid set_BaselineBESLValid[3..4], |
| DeepBESLValid set_DeepBESLValid[4..5], |
| Reserved1 set_Reserved1[5..8], |
| BaselineBESL set_BaselineBESL[8..12], |
| DeepBESL set_DeepBESL[12..16], |
| Reserved2 set_Reserved2[16..32], |
| ]} |
| STRUCT!{#[repr(packed)] struct USB_DEVICE_CAPABILITY_USB20_EXTENSION_DESCRIPTOR { |
| bLength: UCHAR, |
| bDescriptorType: UCHAR, |
| bDevCapabilityType: UCHAR, |
| bmAttributes: USB_DEVICE_CAPABILITY_USB20_EXTENSION_DESCRIPTOR_bmAttributes, |
| }} |
| pub type PUSB_DEVICE_CAPABILITY_USB20_EXTENSION_DESCRIPTOR |
| = *mut USB_DEVICE_CAPABILITY_USB20_EXTENSION_DESCRIPTOR; |
| pub const USB_DEVICE_CAPABILITY_USB20_EXTENSION_BMATTRIBUTES_RESERVED_MASK: ULONG = 0xFFFF00E1; |
| STRUCT!{#[repr(packed)] struct USB_DEVICE_CAPABILITY_POWER_DELIVERY_DESCRIPTOR_bmAttributes { |
| AsUlong: ULONG, |
| }} |
| BITFIELD!{USB_DEVICE_CAPABILITY_POWER_DELIVERY_DESCRIPTOR_bmAttributes AsUlong: ULONG [ |
| Reserved set_Reserved[0..1], |
| BatteryCharging set_BatteryCharging[1..2], |
| USBPowerDelivery set_USBPowerDelivery[2..3], |
| Provider set_Provider[3..4], |
| Consumer set_Consumer[4..5], |
| ChargingPolicy set_ChargingPolicy[5..6], |
| TypeCCurrent set_TypeCCurrent[6..7], |
| Reserved2 set_Reserved2[7..8], |
| ACSupply set_ACSupply[8..9], |
| Battery set_Battery[9..10], |
| Other set_Other[10..11], |
| NumBatteries set_NumBatteries[11..14], |
| UsesVbus set_UsesVbus[14..15], |
| Reserved3 set_Reserved3[15..32], |
| ]} |
| STRUCT!{#[repr(packed)] struct USB_DEVICE_CAPABILITY_POWER_DELIVERY_DESCRIPTOR { |
| bLength: UCHAR, |
| bDescriptorType: UCHAR, |
| bDevCapabilityType: UCHAR, |
| bReserved: UCHAR, |
| bmAttributes: USB_DEVICE_CAPABILITY_POWER_DELIVERY_DESCRIPTOR_bmAttributes, |
| bmProviderPorts: USHORT, |
| bmConsumerPorts: USHORT, |
| bcdBCVersion: USHORT, |
| bcdPDVersion: USHORT, |
| bcdUSBTypeCVersion: USHORT, |
| }} |
| pub type PUSB_DEVICE_CAPABILITY_POWER_DELIVERY_DESCRIPTOR |
| = *mut USB_DEVICE_CAPABILITY_POWER_DELIVERY_DESCRIPTOR; |
| STRUCT!{#[repr(packed)] struct USB_DEVICE_CAPABILITY_PD_CONSUMER_PORT_DESCRIPTOR_bmCapabilities { |
| AsUshort: USHORT, |
| }} |
| BITFIELD!{USB_DEVICE_CAPABILITY_PD_CONSUMER_PORT_DESCRIPTOR_bmCapabilities AsUshort: USHORT [ |
| BatteryCharging set_BatteryCharging[0..1], |
| USBPowerDelivery set_USBPowerDelivery[1..2], |
| USBTypeCCurrent set_USBTypeCCurrent[2..3], |
| Reserved set_Reserved[3..16], |
| ]} |
| STRUCT!{#[repr(packed)] struct USB_DEVICE_CAPABILITY_PD_CONSUMER_PORT_DESCRIPTOR { |
| bLength: UCHAR, |
| bDescriptorType: UCHAR, |
| bDevCapabilityType: UCHAR, |
| bReserved: UCHAR, |
| bmCapabilities: USB_DEVICE_CAPABILITY_PD_CONSUMER_PORT_DESCRIPTOR_bmCapabilities, |
| wMinVoltage: USHORT, |
| wMaxVoltage: USHORT, |
| wReserved: USHORT, |
| dwMaxOperatingPower: ULONG, |
| dwMaxPeakPower: ULONG, |
| dwMaxPeakPowerTime: ULONG, |
| }} |
| pub type PUSB_DEVICE_CAPABILITY_PD_CONSUMER_PORT_DESCRIPTOR |
| = *mut USB_DEVICE_CAPABILITY_PD_CONSUMER_PORT_DESCRIPTOR; |
| STRUCT!{#[repr(packed)] struct USB_DEVICE_CAPABILITY_SUPERSPEED_USB_DESCRIPTOR { |
| bLength: UCHAR, |
| bDescriptorType: UCHAR, |
| bDevCapabilityType: UCHAR, |
| bmAttributes: UCHAR, |
| wSpeedsSupported: USHORT, |
| bFunctionalitySupport: UCHAR, |
| bU1DevExitLat: UCHAR, |
| wU2DevExitLat: USHORT, |
| }} |
| pub type PUSB_DEVICE_CAPABILITY_SUPERSPEED_USB_DESCRIPTOR |
| = *mut USB_DEVICE_CAPABILITY_SUPERSPEED_USB_DESCRIPTOR; |
| pub const USB_DEVICE_CAPABILITY_SUPERSPEED_BMATTRIBUTES_RESERVED_MASK: UCHAR = 0xFD; |
| pub const USB_DEVICE_CAPABILITY_SUPERSPEED_BMATTRIBUTES_LTM_CAPABLE: UCHAR = 0x02; |
| pub const USB_DEVICE_CAPABILITY_SUPERSPEED_SPEEDS_SUPPORTED_RESERVED_MASK: USHORT = 0xFFF0; |
| pub const USB_DEVICE_CAPABILITY_SUPERSPEED_SPEEDS_SUPPORTED_LOW: USHORT = 0x0001; |
| pub const USB_DEVICE_CAPABILITY_SUPERSPEED_SPEEDS_SUPPORTED_FULL: USHORT = 0x0002; |
| pub const USB_DEVICE_CAPABILITY_SUPERSPEED_SPEEDS_SUPPORTED_HIGH: USHORT = 0x0004; |
| pub const USB_DEVICE_CAPABILITY_SUPERSPEED_SPEEDS_SUPPORTED_SUPER: USHORT = 0x0008; |
| pub const USB_DEVICE_CAPABILITY_SUPERSPEED_U1_DEVICE_EXIT_MAX_VALUE: UCHAR = 0x0A; |
| pub const USB_DEVICE_CAPABILITY_SUPERSPEED_U2_DEVICE_EXIT_MAX_VALUE: USHORT = 0x07FF; |
| pub const USB_DEVICE_CAPABILITY_MAX_U1_LATENCY: UCHAR = 0x0A; |
| pub const USB_DEVICE_CAPABILITY_MAX_U2_LATENCY: USHORT = 0x07FF; |
| pub const USB_DEVICE_CAPABILITY_SUPERSPEEDPLUS_SPEED_LSE_BPS: ULONG = 0; |
| pub const USB_DEVICE_CAPABILITY_SUPERSPEEDPLUS_SPEED_LSE_KBPS: ULONG = 1; |
| pub const USB_DEVICE_CAPABILITY_SUPERSPEEDPLUS_SPEED_LSE_MBPS: ULONG = 2; |
| pub const USB_DEVICE_CAPABILITY_SUPERSPEEDPLUS_SPEED_LSE_GBPS: ULONG = 3; |
| pub const USB_DEVICE_CAPABILITY_SUPERSPEEDPLUS_SPEED_MODE_SYMMETRIC: ULONG = 0; |
| pub const USB_DEVICE_CAPABILITY_SUPERSPEEDPLUS_SPEED_MODE_ASYMMETRIC: ULONG = 1; |
| pub const USB_DEVICE_CAPABILITY_SUPERSPEEDPLUS_SPEED_DIR_RX: ULONG = 0; |
| pub const USB_DEVICE_CAPABILITY_SUPERSPEEDPLUS_SPEED_DIR_TX: ULONG = 1; |
| pub const USB_DEVICE_CAPABILITY_SUPERSPEEDPLUS_SPEED_PROTOCOL_SS: ULONG = 0; |
| pub const USB_DEVICE_CAPABILITY_SUPERSPEEDPLUS_SPEED_PROTOCOL_SSP: ULONG = 1; |
| STRUCT!{#[repr(packed)] struct USB_DEVICE_CAPABILITY_SUPERSPEEDPLUS_SPEED { |
| AsUlong32: ULONG, |
| }} |
| BITFIELD!{USB_DEVICE_CAPABILITY_SUPERSPEEDPLUS_SPEED AsUlong32: ULONG [ |
| SublinkSpeedAttrID set_SublinkSpeedAttrID[0..4], |
| LaneSpeedExponent set_LaneSpeedExponent[4..6], |
| SublinkTypeMode set_SublinkTypeMode[6..7], |
| SublinkTypeDir set_SublinkTypeDir[7..8], |
| Reserved set_Reserved[8..14], |
| LinkProtocol set_LinkProtocol[14..16], |
| LaneSpeedMantissa set_LaneSpeedMantissa[16..32], |
| ]} |
| STRUCT!{#[repr(packed)] struct USB_DEVICE_CAPABILITY_SUPERSPEEDPLUS_USB_DESCRIPTOR_bmAttributes { |
| AsUlong32: ULONG, |
| }} |
| BITFIELD!{USB_DEVICE_CAPABILITY_SUPERSPEEDPLUS_USB_DESCRIPTOR_bmAttributes AsUlong32: ULONG [ |
| SublinkSpeedAttrCount set_SublinkSpeedAttrCount[0..5], |
| SublinkSpeedIDCount set_SublinkSpeedIDCount[5..9], |
| Reserved set_Reserved[9..32], |
| ]} |
| STRUCT!{#[repr(packed)] |
| struct USB_DEVICE_CAPABILITY_SUPERSPEEDPLUS_USB_DESCRIPTOR_wFunctionalitySupport { |
| AsUshort: USHORT, |
| }} |
| BITFIELD!{ |
| USB_DEVICE_CAPABILITY_SUPERSPEEDPLUS_USB_DESCRIPTOR_wFunctionalitySupport AsUshort: USHORT [ |
| SublinkSpeedAttrID set_SublinkSpeedAttrID[0..4], |
| Reserved set_Reserved[4..8], |
| MinRxLaneCount set_MinRxLaneCount[8..12], |
| MinTxLaneCount set_MinTxLaneCount[12..16], |
| ]} |
| STRUCT!{#[repr(packed)] struct USB_DEVICE_CAPABILITY_SUPERSPEEDPLUS_USB_DESCRIPTOR { |
| bLength: UCHAR, |
| bDescriptorType: UCHAR, |
| bDevCapabilityType: UCHAR, |
| bReserved: UCHAR, |
| bmAttributes: USB_DEVICE_CAPABILITY_SUPERSPEEDPLUS_USB_DESCRIPTOR_bmAttributes, |
| wFunctionalitySupport: |
| USB_DEVICE_CAPABILITY_SUPERSPEEDPLUS_USB_DESCRIPTOR_wFunctionalitySupport, |
| wReserved: USHORT, |
| bmSublinkSpeedAttr: [USB_DEVICE_CAPABILITY_SUPERSPEEDPLUS_SPEED; 1], |
| }} |
| pub type PUSB_DEVICE_CAPABILITY_SUPERSPEEDPLUS_USB_DESCRIPTOR |
| = *mut USB_DEVICE_CAPABILITY_SUPERSPEEDPLUS_USB_DESCRIPTOR; |
| STRUCT!{#[repr(packed)] struct USB_DEVICE_CAPABILITY_CONTAINER_ID_DESCRIPTOR { |
| bLength: UCHAR, |
| bDescriptorType: UCHAR, |
| bDevCapabilityType: UCHAR, |
| bReserved: UCHAR, |
| ContainerID: [UCHAR; 16], |
| }} |
| pub type PUSB_DEVICE_CAPABILITY_CONTAINER_ID_DESCRIPTOR |
| = *mut USB_DEVICE_CAPABILITY_CONTAINER_ID_DESCRIPTOR; |
| STRUCT!{#[repr(packed)] struct USB_DEVICE_CAPABILITY_CONFIGURATION_SUMMARY_DESCRIPTOR_Function { |
| bClass: UCHAR, |
| bSubClass: UCHAR, |
| bProtocol: UCHAR, |
| }} |
| STRUCT!{#[repr(packed)] struct USB_DEVICE_CAPABILITY_CONFIGURATION_SUMMARY_DESCRIPTOR { |
| bLength: UCHAR, |
| bDescriptorType: UCHAR, |
| bDevCapabilityType: UCHAR, |
| bcdVersion: USHORT, |
| bConfigurationValue: UCHAR, |
| bMaxPower: UCHAR, |
| bNumFunctions: UCHAR, |
| Function: [USB_DEVICE_CAPABILITY_CONFIGURATION_SUMMARY_DESCRIPTOR_Function; 1], |
| }} |
| pub type PUSB_DEVICE_CAPABILITY_CONFIGURATION_SUMMARY_DESCRIPTOR |
| = *mut USB_DEVICE_CAPABILITY_CONFIGURATION_SUMMARY_DESCRIPTOR; |
| STRUCT!{#[repr(packed)] struct USB_DEVICE_CAPABILITY_PLATFORM_DESCRIPTOR { |
| bLength: UCHAR, |
| bDescriptorType: UCHAR, |
| bDevCapabilityType: UCHAR, |
| bReserved: UCHAR, |
| PlatformCapabilityUuid: GUID, |
| CapabililityData: [UCHAR; 1], |
| }} |
| pub type PUSB_DEVICE_CAPABILITY_PLATFORM_DESCRIPTOR |
| = *mut USB_DEVICE_CAPABILITY_PLATFORM_DESCRIPTOR; |
| STRUCT!{#[repr(packed)] struct USB_DEVICE_CAPABILITY_BILLBOARD_DESCRIPTOR_VconnPower { |
| AsUshort: USHORT, |
| }} |
| BITFIELD!{USB_DEVICE_CAPABILITY_BILLBOARD_DESCRIPTOR_VconnPower AsUshort: USHORT [ |
| VConnPowerNeededForFullFunctionality set_VConnPowerNeededForFullFunctionality[0..3], |
| Reserved set_Reserved[3..15], |
| NoVconnPowerRequired set_NoVconnPowerRequired[15..16], |
| ]} |
| STRUCT!{#[repr(packed)] struct USB_DEVICE_CAPABILITY_BILLBOARD_DESCRIPTOR_AlternateMode { |
| wSVID: USHORT, |
| bAlternateMode: UCHAR, |
| iAlternateModeSetting: UCHAR, |
| }} |
| STRUCT!{#[repr(packed)] struct USB_DEVICE_CAPABILITY_BILLBOARD_DESCRIPTOR { |
| bLength: UCHAR, |
| bDescriptorType: UCHAR, |
| bDevCapabilityType: UCHAR, |
| iAddtionalInfoURL: UCHAR, |
| bNumberOfAlternateModes: UCHAR, |
| bPreferredAlternateMode: UCHAR, |
| VconnPower: USB_DEVICE_CAPABILITY_BILLBOARD_DESCRIPTOR_VconnPower, |
| bmConfigured: [UCHAR; 32], |
| bReserved: ULONG, |
| AlternateMode: [USB_DEVICE_CAPABILITY_BILLBOARD_DESCRIPTOR_AlternateMode; 1], |
| }} |
| pub type PUSB_DEVICE_CAPABILITY_BILLBOARD_DESCRIPTOR |
| = *mut USB_DEVICE_CAPABILITY_BILLBOARD_DESCRIPTOR; |
| DEFINE_GUID!{GUID_USB_MSOS20_PLATFORM_CAPABILITY_ID, |
| 0xd8dd60df, 0x4589, 0x4cc7, 0x9c, 0xd2, 0x65, 0x9d, 0x9e, 0x64, 0x8a, 0x9f} |
| STRUCT!{#[repr(packed)] struct USB_DEVICE_CAPABILITY_DESCRIPTOR { |
| bLength: UCHAR, |
| bDescriptorType: UCHAR, |
| bDevCapabilityType: UCHAR, |
| }} |
| pub type PUSB_DEVICE_CAPABILITY_DESCRIPTOR = *mut USB_DEVICE_CAPABILITY_DESCRIPTOR; |
| STRUCT!{#[repr(packed)] struct USB_CONFIGURATION_DESCRIPTOR { |
| bLength: UCHAR, |
| bDescriptorType: UCHAR, |
| wTotalLength: USHORT, |
| bNumInterfaces: UCHAR, |
| bConfigurationValue: UCHAR, |
| iConfiguration: UCHAR, |
| bmAttributes: UCHAR, |
| MaxPower: UCHAR, |
| }} |
| pub type PUSB_CONFIGURATION_DESCRIPTOR = *mut USB_CONFIGURATION_DESCRIPTOR; |
| pub const USB_CONFIG_POWERED_MASK: UCHAR = 0xC0; |
| pub const USB_CONFIG_BUS_POWERED: UCHAR = 0x80; |
| pub const USB_CONFIG_SELF_POWERED: UCHAR = 0x40; |
| pub const USB_CONFIG_REMOTE_WAKEUP: UCHAR = 0x20; |
| pub const USB_CONFIG_RESERVED: UCHAR = 0x1F; |
| STRUCT!{#[repr(packed)] struct USB_INTERFACE_ASSOCIATION_DESCRIPTOR { |
| bLength: UCHAR, |
| bDescriptorType: UCHAR, |
| bFirstInterface: UCHAR, |
| bInterfaceCount: UCHAR, |
| bFunctionClass: UCHAR, |
| bFunctionSubClass: UCHAR, |
| bFunctionProtocol: UCHAR, |
| iFunction: UCHAR, |
| }} |
| pub type PUSB_INTERFACE_ASSOCIATION_DESCRIPTOR = *mut USB_INTERFACE_ASSOCIATION_DESCRIPTOR; |
| STRUCT!{#[repr(packed)] struct USB_INTERFACE_DESCRIPTOR { |
| bLength: UCHAR, |
| bDescriptorType: UCHAR, |
| bInterfaceNumber: UCHAR, |
| bAlternateSetting: UCHAR, |
| bNumEndpoints: UCHAR, |
| bInterfaceClass: UCHAR, |
| bInterfaceSubClass: UCHAR, |
| bInterfaceProtocol: UCHAR, |
| iInterface: UCHAR, |
| }} |
| pub type PUSB_INTERFACE_DESCRIPTOR = *mut USB_INTERFACE_DESCRIPTOR; |
| STRUCT!{#[repr(packed)] struct USB_ENDPOINT_DESCRIPTOR { |
| bLength: UCHAR, |
| bDescriptorType: UCHAR, |
| bEndpointAddress: UCHAR, |
| bmAttributes: UCHAR, |
| wMaxPacketSize: USHORT, |
| bInterval: UCHAR, |
| }} |
| pub type PUSB_ENDPOINT_DESCRIPTOR = *mut USB_ENDPOINT_DESCRIPTOR; |
| pub const USB_ENDPOINT_DIRECTION_MASK: UCHAR = 0x80; |
| #[inline] |
| pub fn USB_ENDPOINT_DIRECTION_OUT(addr: UCHAR) -> UCHAR { |
| !(addr & USB_ENDPOINT_DIRECTION_MASK) |
| } |
| #[inline] |
| pub fn USB_ENDPOINT_DIRECTION_IN(addr: UCHAR) -> UCHAR { |
| addr & USB_ENDPOINT_DIRECTION_MASK |
| } |
| pub const USB_ENDPOINT_ADDRESS_MASK: UCHAR = 0x0F; |
| pub const USB_ENDPOINT_TYPE_MASK: UCHAR = 0x03; |
| pub const USB_ENDPOINT_TYPE_CONTROL: UCHAR = 0x00; |
| pub const USB_ENDPOINT_TYPE_ISOCHRONOUS: UCHAR = 0x01; |
| pub const USB_ENDPOINT_TYPE_BULK: UCHAR = 0x02; |
| pub const USB_ENDPOINT_TYPE_INTERRUPT: UCHAR = 0x03; |
| pub const USB_ENDPOINT_TYPE_BULK_RESERVED_MASK: UCHAR = 0xFC; |
| pub const USB_ENDPOINT_TYPE_CONTROL_RESERVED_MASK: UCHAR = 0xFC; |
| pub const USB_20_ENDPOINT_TYPE_INTERRUPT_RESERVED_MASK: UCHAR = 0xFC; |
| pub const USB_30_ENDPOINT_TYPE_INTERRUPT_RESERVED_MASK: UCHAR = 0xCC; |
| pub const USB_ENDPOINT_TYPE_ISOCHRONOUS_RESERVED_MASK: UCHAR = 0xC0; |
| pub const USB_30_ENDPOINT_TYPE_INTERRUPT_USAGE_MASK: UCHAR = 0x30; |
| pub const USB_30_ENDPOINT_TYPE_INTERRUPT_USAGE_PERIODIC: UCHAR = 0x00; |
| pub const USB_30_ENDPOINT_TYPE_INTERRUPT_USAGE_NOTIFICATION: UCHAR = 0x10; |
| pub const USB_30_ENDPOINT_TYPE_INTERRUPT_USAGE_RESERVED10: UCHAR = 0x20; |
| pub const USB_30_ENDPOINT_TYPE_INTERRUPT_USAGE_RESERVED11: UCHAR = 0x30; |
| #[inline] |
| pub fn USB_30_ENDPOINT_TYPE_INTERRUPT_USAGE(bmAttr: UCHAR) -> UCHAR { |
| bmAttr & USB_30_ENDPOINT_TYPE_INTERRUPT_USAGE_MASK |
| } |
| pub const USB_ENDPOINT_TYPE_ISOCHRONOUS_SYNCHRONIZATION_MASK: UCHAR = 0x0C; |
| pub const USB_ENDPOINT_TYPE_ISOCHRONOUS_SYNCHRONIZATION_NO_SYNCHRONIZATION: UCHAR = 0x00; |
| pub const USB_ENDPOINT_TYPE_ISOCHRONOUS_SYNCHRONIZATION_ASYNCHRONOUS: UCHAR = 0x04; |
| pub const USB_ENDPOINT_TYPE_ISOCHRONOUS_SYNCHRONIZATION_ADAPTIVE: UCHAR = 0x08; |
| pub const USB_ENDPOINT_TYPE_ISOCHRONOUS_SYNCHRONIZATION_SYNCHRONOUS: UCHAR = 0x0C; |
| #[inline] |
| pub fn USB_ENDPOINT_TYPE_ISOCHRONOUS_SYNCHRONIZATION(bmAttr: UCHAR) -> UCHAR { |
| bmAttr & USB_ENDPOINT_TYPE_ISOCHRONOUS_SYNCHRONIZATION_MASK |
| } |
| pub const USB_ENDPOINT_TYPE_ISOCHRONOUS_USAGE_MASK: UCHAR = 0x30; |
| pub const USB_ENDPOINT_TYPE_ISOCHRONOUS_USAGE_DATA_ENDOINT: UCHAR = 0x00; |
| pub const USB_ENDPOINT_TYPE_ISOCHRONOUS_USAGE_FEEDBACK_ENDPOINT: UCHAR = 0x10; |
| pub const USB_ENDPOINT_TYPE_ISOCHRONOUS_USAGE_IMPLICIT_FEEDBACK_DATA_ENDPOINT: UCHAR = 0x20; |
| pub const USB_ENDPOINT_TYPE_ISOCHRONOUS_USAGE_RESERVED: UCHAR = 0x30; |
| #[inline] |
| pub fn USB_ENDPOINT_TYPE_ISOCHRONOUS_USAGE(bmAttr: UCHAR) -> UCHAR { |
| bmAttr & USB_ENDPOINT_TYPE_ISOCHRONOUS_USAGE_MASK |
| } |
| STRUCT!{#[repr(packed)] struct USB_HIGH_SPEED_MAXPACKET { |
| us: USHORT, |
| }} |
| BITFIELD!{USB_HIGH_SPEED_MAXPACKET us: USHORT [ |
| MaxPacket set_MaxPacket[0..11], |
| HSmux set_HSmux[11..13], |
| Reserved set_Reserved[13..16], |
| ]} |
| pub type PUSB_HIGH_SPEED_MAXPACKET = *mut USB_HIGH_SPEED_MAXPACKET; |
| pub const USB_ENDPOINT_SUPERSPEED_BULK_MAX_PACKET_SIZE: USHORT = 1024; |
| pub const USB_ENDPOINT_SUPERSPEED_CONTROL_MAX_PACKET_SIZE: USHORT = 512; |
| pub const USB_ENDPOINT_SUPERSPEED_ISO_MAX_PACKET_SIZE: USHORT = 1024; |
| pub const USB_ENDPOINT_SUPERSPEED_INTERRUPT_MAX_PACKET_SIZE: USHORT = 1024; |
| STRUCT!{#[repr(packed)] struct USB_STRING_DESCRIPTOR { |
| bLength: UCHAR, |
| bDescriptorType: UCHAR, |
| bString: [WCHAR; 1], |
| }} |
| pub type PUSB_STRING_DESCRIPTOR = *mut USB_STRING_DESCRIPTOR; |
| pub const MAXIMUM_USB_STRING_LENGTH: UCHAR = 255; |
| STRUCT!{#[repr(packed)] struct USB_SUPERSPEED_ENDPOINT_COMPANION_DESCRIPTOR_bmAttributes_Bulk { |
| BitField: UCHAR, |
| }} |
| BITFIELD!{USB_SUPERSPEED_ENDPOINT_COMPANION_DESCRIPTOR_bmAttributes_Bulk BitField: UCHAR [ |
| MaxStreams set_MaxStreams[0..5], |
| Reserved1 set_Reserved1[5..8], |
| ]} |
| STRUCT!{#[repr(packed)] |
| struct USB_SUPERSPEED_ENDPOINT_COMPANION_DESCRIPTOR_bmAttributes_Isochronous { |
| BitField: UCHAR, |
| }} |
| BITFIELD!{USB_SUPERSPEED_ENDPOINT_COMPANION_DESCRIPTOR_bmAttributes_Isochronous BitField: UCHAR [ |
| Mult set_Mult[0..2], |
| Reserved2 set_Reserved2[2..7], |
| SspCompanion set_SspCompanion[7..8], |
| ]} |
| UNION!{#[repr(packed)] union USB_SUPERSPEED_ENDPOINT_COMPANION_DESCRIPTOR_bmAttributes { |
| [u8; 1], |
| AsUchar AsUchar_mut: UCHAR, |
| Bulk Bulk_mut: USB_SUPERSPEED_ENDPOINT_COMPANION_DESCRIPTOR_bmAttributes_Bulk, |
| Isochronous Isochronous_mut: |
| USB_SUPERSPEED_ENDPOINT_COMPANION_DESCRIPTOR_bmAttributes_Isochronous, |
| }} |
| STRUCT!{#[repr(packed)] struct USB_SUPERSPEED_ENDPOINT_COMPANION_DESCRIPTOR { |
| bLength: UCHAR, |
| bDescriptorType: UCHAR, |
| bMaxBurst: UCHAR, |
| bmAttributes: USB_SUPERSPEED_ENDPOINT_COMPANION_DESCRIPTOR_bmAttributes, |
| wBytesPerInterval: USHORT, |
| }} |
| pub type PUSB_SUPERSPEED_ENDPOINT_COMPANION_DESCRIPTOR |
| = *mut USB_SUPERSPEED_ENDPOINT_COMPANION_DESCRIPTOR; |
| pub const USB_SUPERSPEED_ISOCHRONOUS_MAX_MULTIPLIER: UCHAR = 2; |
| STRUCT!{#[repr(packed)] struct USB_SUPERSPEEDPLUS_ISOCH_ENDPOINT_COMPANION_DESCRIPTOR { |
| bLength: UCHAR, |
| bDescriptorType: UCHAR, |
| wReserved: USHORT, |
| dwBytesPerInterval: ULONG, |
| }} |
| pub type PUSB_SUPERSPEEDPLUS_ISOCH_ENDPOINT_COMPANION_DESCRIPTOR |
| = *mut USB_SUPERSPEEDPLUS_ISOCH_ENDPOINT_COMPANION_DESCRIPTOR; |
| pub const USB_SUPERSPEEDPLUS_ISOCHRONOUS_MIN_BYTESPERINTERVAL: ULONG = 0xC001; |
| pub const USB_SUPERSPEEDPLUS_ISOCHRONOUS_MAX_BYTESPERINTERVAL: ULONG = 0xFFFFFF; |
| STRUCT!{#[repr(packed)] struct USB_HUB_DESCRIPTOR { |
| bDescriptorLength: UCHAR, |
| bDescriptorType: UCHAR, |
| bNumberOfPorts: UCHAR, |
| wHubCharacteristics: USHORT, |
| bPowerOnToPowerGood: UCHAR, |
| bHubControlCurrent: UCHAR, |
| bRemoveAndPowerMask: [UCHAR; 64], |
| }} |
| pub type PUSB_HUB_DESCRIPTOR = *mut USB_HUB_DESCRIPTOR; |
| pub const USB_20_HUB_DESCRIPTOR_TYPE: UCHAR = 0x29; |
| STRUCT!{#[repr(packed)] struct USB_30_HUB_DESCRIPTOR { |
| bLength: UCHAR, |
| bDescriptorType: UCHAR, |
| bNumberOfPorts: UCHAR, |
| wHubCharacteristics: USHORT, |
| bPowerOnToPowerGood: UCHAR, |
| bHubControlCurrent: UCHAR, |
| bHubHdrDecLat: UCHAR, |
| wHubDelay: USHORT, |
| DeviceRemovable: USHORT, |
| }} |
| pub type PUSB_30_HUB_DESCRIPTOR = *mut USB_30_HUB_DESCRIPTOR; |
| pub const USB_30_HUB_DESCRIPTOR_TYPE: UCHAR = 0x2A; |
| pub const USB_REQUEST_GET_STATE: UCHAR = 0x02; |
| pub const USB_REQUEST_CLEAR_TT_BUFFER: UCHAR = 0x08; |
| pub const USB_REQUEST_RESET_TT: UCHAR = 0x09; |
| pub const USB_REQUEST_GET_TT_STATE: UCHAR = 0x0A; |
| pub const USB_REQUEST_STOP_TT: UCHAR = 0x0B; |
| pub const USB_REQUEST_SET_HUB_DEPTH: UCHAR = 0x0C; |
| pub const USB_REQUEST_GET_PORT_ERR_COUNT: UCHAR = 0x0D; |
| STRUCT!{#[repr(packed)] struct USB_HUB_STATUS { |
| AsUshort16: USHORT, |
| }} |
| BITFIELD!{USB_HUB_STATUS AsUshort16: USHORT [ |
| LocalPowerLost set_LocalPowerLost[0..1], |
| OverCurrent set_OverCurrent[1..2], |
| Reserved set_Reserved[2..16], |
| ]} |
| pub type PUSB_HUB_STATUS = *mut USB_HUB_STATUS; |
| STRUCT!{#[repr(packed)] struct USB_HUB_CHANGE { |
| AsUshort16: USHORT, |
| }} |
| BITFIELD!{USB_HUB_CHANGE AsUshort16: USHORT [ |
| LocalPowerChange set_LocalPowerChange[0..1], |
| OverCurrentChange set_OverCurrentChange[1..2], |
| Reserved set_Reserved[2..16], |
| ]} |
| pub type PUSB_HUB_CHANGE = *mut USB_HUB_CHANGE; |
| STRUCT!{#[repr(packed)] struct USB_HUB_STATUS_AND_CHANGE_s { |
| HubStatus: USB_HUB_STATUS, |
| HubChange: USB_HUB_CHANGE, |
| }} |
| UNION!{#[repr(packed)] union USB_HUB_STATUS_AND_CHANGE { |
| [u32; 1], |
| AsUlong32 AsUlong32_mut: ULONG, |
| s s_mut: USB_HUB_STATUS_AND_CHANGE_s, |
| }} |
| pub type PUSB_HUB_STATUS_AND_CHANGE = *mut USB_HUB_STATUS_AND_CHANGE; |
| STRUCT!{#[repr(packed)] struct USB_20_PORT_STATUS { |
| AsUshort16: USHORT, |
| }} |
| BITFIELD!{USB_20_PORT_STATUS AsUshort16: USHORT [ |
| CurrentConnectStatus set_CurrentConnectStatus[0..1], |
| PortEnabledDisabled set_PortEnabledDisabled[1..2], |
| Suspend set_Suspend[2..3], |
| OverCurrent set_OverCurrent[3..4], |
| Reset set_Reset[4..5], |
| L1 set_L1[5..6], |
| Reserved0 set_Reserved0[6..8], |
| PortPower set_PortPower[8..9], |
| LowSpeedDeviceAttached set_LowSpeedDeviceAttached[9..10], |
| HighSpeedDeviceAttached set_HighSpeedDeviceAttached[10..11], |
| PortTestMode set_PortTestMode[11..12], |
| PortIndicatorControl set_PortIndicatorControl[12..13], |
| Reserved1 set_Reserved1[13..16], |
| ]} |
| pub type PUSB_20_PORT_STATUS = *mut USB_20_PORT_STATUS; |
| pub const USB_PORT_STATUS_CONNECT: USHORT = 0x0001; |
| pub const USB_PORT_STATUS_ENABLE: USHORT = 0x0002; |
| pub const USB_PORT_STATUS_SUSPEND: USHORT = 0x0004; |
| pub const USB_PORT_STATUS_OVER_CURRENT: USHORT = 0x0008; |
| pub const USB_PORT_STATUS_RESET: USHORT = 0x0010; |
| pub const USB_PORT_STATUS_POWER: USHORT = 0x0100; |
| pub const USB_PORT_STATUS_LOW_SPEED: USHORT = 0x0200; |
| pub const USB_PORT_STATUS_HIGH_SPEED: USHORT = 0x0400; |
| STRUCT!{#[repr(packed)] struct USB_20_PORT_CHANGE { |
| AsUshort16: USHORT, |
| }} |
| BITFIELD!{USB_20_PORT_CHANGE AsUshort16: USHORT [ |
| ConnectStatusChange set_ConnectStatusChange[0..1], |
| PortEnableDisableChange set_PortEnableDisableChange[1..2], |
| SuspendChange set_SuspendChange[2..3], |
| OverCurrentIndicatorChange set_OverCurrentIndicatorChange[3..4], |
| ResetChange set_ResetChange[4..5], |
| Reserved2 set_Reserved2[5..16], |
| ]} |
| pub type PUSB_20_PORT_CHANGE = *mut USB_20_PORT_CHANGE; |
| STRUCT!{#[repr(packed)] struct USB_30_PORT_STATUS { |
| AsUshort16: USHORT, |
| }} |
| BITFIELD!{USB_30_PORT_STATUS AsUshort16: USHORT [ |
| CurrentConnectStatus set_CurrentConnectStatus[0..1], |
| PortEnabledDisabled set_PortEnabledDisabled[1..2], |
| Reserved0 set_Reserved0[2..3], |
| OverCurrent set_OverCurrent[3..4], |
| Reset set_Reset[4..5], |
| PortLinkState set_PortLinkState[5..9], |
| PortPower set_PortPower[9..10], |
| NegotiatedDeviceSpeed set_NegotiatedDeviceSpeed[10..13], |
| Reserved1 set_Reserved1[13..16], |
| ]} |
| pub type PUSB_30_PORT_STATUS = *mut USB_30_PORT_STATUS; |
| pub const PORT_LINK_STATE_U0: USHORT = 0; |
| pub const PORT_LINK_STATE_U1: USHORT = 1; |
| pub const PORT_LINK_STATE_U2: USHORT = 2; |
| pub const PORT_LINK_STATE_U3: USHORT = 3; |
| pub const PORT_LINK_STATE_DISABLED: USHORT = 4; |
| pub const PORT_LINK_STATE_RX_DETECT: USHORT = 5; |
| pub const PORT_LINK_STATE_INACTIVE: USHORT = 6; |
| pub const PORT_LINK_STATE_POLLING: USHORT = 7; |
| pub const PORT_LINK_STATE_RECOVERY: USHORT = 8; |
| pub const PORT_LINK_STATE_HOT_RESET: USHORT = 9; |
| pub const PORT_LINK_STATE_COMPLIANCE_MODE: USHORT = 10; |
| pub const PORT_LINK_STATE_LOOPBACK: USHORT = 11; |
| pub const PORT_LINK_STATE_TEST_MODE: USHORT = 11; |
| STRUCT!{#[repr(packed)] struct USB_30_PORT_CHANGE { |
| AsUshort16: USHORT, |
| }} |
| BITFIELD!{USB_30_PORT_CHANGE AsUshort16: USHORT [ |
| ConnectStatusChange set_ConnectStatusChange[0..1], |
| Reserved2 set_Reserved2[1..3], |
| OverCurrentIndicatorChange set_OverCurrentIndicatorChange[3..4], |
| ResetChange set_ResetChange[4..5], |
| BHResetChange set_BHResetChange[5..6], |
| PortLinkStateChange set_PortLinkStateChange[6..7], |
| PortConfigErrorChange set_PortConfigErrorChange[7..8], |
| Reserved3 set_Reserved3[8..16], |
| ]} |
| pub type PUSB_30_PORT_CHANGE = *mut USB_30_PORT_CHANGE; |
| UNION!{#[repr(packed)] union USB_PORT_STATUS { |
| [u16; 1], |
| AsUshort16 AsUshort16_mut: USHORT, |
| Usb20PortStatus Usb20PortStatus_mut: USB_20_PORT_STATUS, |
| Usb30PortStatus Usb30PortStatus_mut: USB_30_PORT_STATUS, |
| }} |
| pub type PUSB_PORT_STATUS = *mut USB_PORT_STATUS; |
| UNION!{#[repr(packed)] union USB_PORT_CHANGE { |
| [u16; 1], |
| AsUshort16 AsUshort16_mut: USHORT, |
| Usb20PortChange Usb20PortChange_mut: USB_20_PORT_CHANGE, |
| Usb30PortChange Usb30PortChange_mut: USB_30_PORT_CHANGE, |
| }} |
| pub type PUSB_PORT_CHANGE = *mut USB_PORT_CHANGE; |
| STRUCT!{#[repr(packed)] struct USB_PORT_EXT_STATUS { |
| AsUlong32: ULONG, |
| }} |
| BITFIELD!{USB_PORT_EXT_STATUS AsUlong32: ULONG [ |
| RxSublinkSpeedID set_RxSublinkSpeedID[0..4], |
| TxSublinkSpeedID set_TxSublinkSpeedID[4..8], |
| RxLaneCount set_RxLaneCount[8..12], |
| TxLaneCount set_TxLaneCount[12..16], |
| Reserved set_Reserved[16..32], |
| ]} |
| pub type PUSB_PORT_EXT_STATUS = *mut USB_PORT_EXT_STATUS; |
| STRUCT!{#[repr(packed)] struct USB_PORT_STATUS_AND_CHANGE_s { |
| PortStatus: USB_PORT_STATUS, |
| PortChange: USB_PORT_CHANGE, |
| }} |
| UNION!{#[repr(packed)] union USB_PORT_STATUS_AND_CHANGE { |
| [u32; 1], |
| AsUlong32 AsUlong32_mut: ULONG, |
| s s_mut: USB_PORT_STATUS_AND_CHANGE_s, |
| }} |
| pub type PUSB_PORT_STATUS_AND_CHANGE = *mut USB_PORT_STATUS_AND_CHANGE; |
| STRUCT!{#[repr(packed)] struct USB_PORT_EXT_STATUS_AND_CHANGE_s { |
| PortStatusChange: USB_PORT_STATUS_AND_CHANGE, |
| PortExtStatus: USB_PORT_EXT_STATUS, |
| }} |
| UNION!{#[repr(packed)] union USB_PORT_EXT_STATUS_AND_CHANGE { |
| [u64; 1], |
| AsUlong64 AsUlong64_mut: ULONG64, |
| s s_mut: USB_PORT_EXT_STATUS_AND_CHANGE_s, |
| }} |
| pub type PUSB_PORT_EXT_STATUS_AND_CHANGE = *mut USB_PORT_EXT_STATUS_AND_CHANGE; |
| STRUCT!{#[repr(packed)] struct USB_HUB_30_PORT_REMOTE_WAKE_MASK { |
| AsUchar8: UCHAR, |
| }} |
| BITFIELD!{USB_HUB_30_PORT_REMOTE_WAKE_MASK AsUchar8: UCHAR [ |
| ConnectRemoteWakeEnable set_ConnectRemoteWakeEnable[0..1], |
| DisconnectRemoteWakeEnable set_DisconnectRemoteWakeEnable[1..2], |
| OverCurrentRemoteWakeEnable set_OverCurrentRemoteWakeEnable[2..3], |
| Reserved0 set_Reserved0[3..8], |
| ]} |
| pub type PUSB_HUB_30_PORT_REMOTE_WAKE_MASK = *mut USB_HUB_30_PORT_REMOTE_WAKE_MASK; |
| STRUCT!{#[repr(packed)] struct USB_FUNCTION_SUSPEND_OPTIONS { |
| AsUchar: UCHAR, |
| }} |
| BITFIELD!{USB_FUNCTION_SUSPEND_OPTIONS AsUchar: UCHAR [ |
| PowerState set_PowerState[0..1], |
| RemoteWakeEnabled set_RemoteWakeEnabled[1..2], |
| Reserved0 set_Reserved0[2..8], |
| ]} |
| pub type PUSB_FUNCTION_SUSPEND_OPTIONS = *mut USB_FUNCTION_SUSPEND_OPTIONS; |
| pub const USB_FEATURE_INTERFACE_POWER_D0: USHORT = 0x0002; |
| pub const USB_FEATURE_INTERFACE_POWER_D1: USHORT = 0x0003; |
| pub const USB_FEATURE_INTERFACE_POWER_D2: USHORT = 0x0004; |
| pub const USB_FEATURE_INTERFACE_POWER_D3: USHORT = 0x0005; |
| pub const USB_SUPPORT_D0_COMMAND: UCHAR = 0x01; |
| pub const USB_SUPPORT_D1_COMMAND: UCHAR = 0x02; |
| pub const USB_SUPPORT_D2_COMMAND: UCHAR = 0x04; |
| pub const USB_SUPPORT_D3_COMMAND: UCHAR = 0x08; |
| pub const USB_SUPPORT_D1_WAKEUP: UCHAR = 0x10; |
| pub const USB_SUPPORT_D2_WAKEUP: UCHAR = 0x20; |
| STRUCT!{#[repr(packed)] struct USB_CONFIGURATION_POWER_DESCRIPTOR { |
| bLength: UCHAR, |
| bDescriptorType: UCHAR, |
| SelfPowerConsumedD0: [UCHAR; 3], |
| bPowerSummaryId: UCHAR, |
| bBusPowerSavingD1: UCHAR, |
| bSelfPowerSavingD1: UCHAR, |
| bBusPowerSavingD2: UCHAR, |
| bSelfPowerSavingD2: UCHAR, |
| bBusPowerSavingD3: UCHAR, |
| bSelfPowerSavingD3: UCHAR, |
| TransitionTimeFromD1: USHORT, |
| TransitionTimeFromD2: USHORT, |
| TransitionTimeFromD3: USHORT, |
| }} |
| pub type PUSB_CONFIGURATION_POWER_DESCRIPTOR = *mut USB_CONFIGURATION_POWER_DESCRIPTOR; |
| STRUCT!{#[repr(packed)] struct USB_INTERFACE_POWER_DESCRIPTOR { |
| bLength: UCHAR, |
| bDescriptorType: UCHAR, |
| bmCapabilitiesFlags: UCHAR, |
| bBusPowerSavingD1: UCHAR, |
| bSelfPowerSavingD1: UCHAR, |
| bBusPowerSavingD2: UCHAR, |
| bSelfPowerSavingD2: UCHAR, |
| bBusPowerSavingD3: UCHAR, |
| bSelfPowerSavingD3: UCHAR, |
| TransitionTimeFromD1: USHORT, |
| TransitionTimeFromD2: USHORT, |
| TransitionTimeFromD3: USHORT, |
| }} |
| pub type PUSB_INTERFACE_POWER_DESCRIPTOR = *mut USB_INTERFACE_POWER_DESCRIPTOR; |