+/* For USB1.1 or USB3 Hub Descriptors */
+typedef union _USBPORT_HUB_11_CHARACTERISTICS {
+ struct {
+ USHORT PowerControlMode :1;
+ USHORT NoPowerSwitching :1; // Reserved. Used only on 1.0 compliant hubs that implement no power switching.
+ USHORT PartOfCompoundDevice :1;
+ USHORT OverCurrentProtectionMode :1;
+ USHORT NoOverCurrentProtection :1;
+ USHORT Reserved1 :11;
+ };
+ USHORT AsUSHORT;
+} USBPORT_HUB_11_CHARACTERISTICS;
+
+C_ASSERT(sizeof(USBPORT_HUB_11_CHARACTERISTICS) == sizeof(USHORT));
+
+/* For USB2.0 Hub Descriptors */
+typedef union _USBPORT_HUB_20_CHARACTERISTICS {
+ struct {
+ USHORT PowerControlMode :1;
+ USHORT NoPowerSwitching :1; // Reserved. Used only on 1.0 compliant hubs that implement no power switching.
+ USHORT PartOfCompoundDevice :1;
+ USHORT OverCurrentProtectionMode :1;
+ USHORT NoOverCurrentProtection :1;
+ USHORT TtThinkTime :2;
+ USHORT PortIndicatorsSupported :1;
+ USHORT Reserved1 :8;
+ };
+ USHORT AsUSHORT;
+} USBPORT_HUB_20_CHARACTERISTICS;
+
+C_ASSERT(sizeof(USBPORT_HUB_20_CHARACTERISTICS) == sizeof(USHORT));
+
+typedef USBPORT_HUB_11_CHARACTERISTICS USBPORT_HUB_30_CHARACTERISTICS;
+
+typedef union _USBPORT_HUB_CHARACTERISTICS {
+ USHORT AsUSHORT;
+ USBPORT_HUB_11_CHARACTERISTICS Usb11HubCharacteristics;
+ USBPORT_HUB_20_CHARACTERISTICS Usb20HubCharacteristics;
+ USBPORT_HUB_30_CHARACTERISTICS Usb30HubCharacteristics;
+} USBPORT_HUB_CHARACTERISTICS;
+
+C_ASSERT(sizeof(USBPORT_HUB_CHARACTERISTICS) == sizeof(USHORT));
+