#ifndef _USBHUB_H
#define _USBHUB_H
#include <IOKit/usb/USB.h>
#include <IOKit/usb/USBSpec.h>
enum {
kUSBHubDescriptorType = 0x29
};
enum {
kUSBHubLocalPowerChangeFeature = 0,
kUSBHubOverCurrentChangeFeature = 1,
kUSBHubPortConnectionFeature = 0,
kUSBHubPortEnableFeature = 1,
kUSBHubPortSuspendFeature = 2,
kUSBHubPortOverCurrentFeature = 3,
kUSBHubPortResetFeature = 4,
kUSBHubPortPowerFeature = 8,
kUSBHubPortLowSpeedFeature = 9,
kUSBHubPortConnectionChangeFeature = 16,
kUSBHubPortEnableChangeFeature = 17,
kUSBHubPortSuspendChangeFeature = 18,
kUSBHubPortOverCurrentChangeFeature = 19,
kUSBHubPortResetChangeFeature = 20
};
enum {
kHubPortConnection = 1,
kHubPortEnabled = 2,
kHubPortSuspend = 4,
kHubPortOverCurrent = 8,
kHubPortBeingReset = 16,
kHubPortPower = 0x0100,
kHubPortLowSpeed = 0x0200,
kHubPortHighSpeed = 0x0400,
kHubPortTestMode = 0x0800,
kHubPortIndicator = 0x1000
};
enum {
kHubLocalPowerStatus = 1,
kHubOverCurrentIndicator = 2,
kHubLocalPowerStatusChange = 1,
kHubOverCurrentIndicatorChange = 2
};
enum {
kPerPortSwitchingBit = (1 << 0),
kNoPowerSwitchingBit = (1 << 1),
kCompoundDeviceBit = (1 << 2),
kPerPortOverCurrentBit = (1 << 3),
kNoOverCurrentBit = (1 << 4)
};
enum {
kClearHubFeature
= EncodeRequest(kUSBRqClearFeature, kUSBOut, kUSBClass, kUSBDevice),
kClearPortFeature
= EncodeRequest(kUSBRqClearFeature, kUSBOut, kUSBClass, kUSBOther),
kGetPortState
= EncodeRequest(kUSBRqGetState, kUSBIn, kUSBClass, kUSBOther),
kGetHubDescriptor
= EncodeRequest(kUSBRqGetDescriptor, kUSBIn, kUSBClass, kUSBDevice),
kGetHubStatus
= EncodeRequest(kUSBRqGetStatus, kUSBIn, kUSBClass, kUSBDevice),
kGetPortStatus
= EncodeRequest(kUSBRqGetStatus, kUSBIn, kUSBClass, kUSBOther),
kSetHubDescriptor
= EncodeRequest(kUSBRqGetDescriptor, kUSBOut, kUSBClass, kUSBDevice),
kSetHubFeature
= EncodeRequest(kUSBRqSetFeature, kUSBOut, kUSBClass, kUSBDevice),
kSetPortFeature
= EncodeRequest(kUSBRqSetFeature, kUSBOut, kUSBClass, kUSBOther)
};
struct IOUSBHubDescriptor {
UInt8 length;
UInt8 hubType;
UInt8 numPorts;
UInt16 characteristics __attribute__((packed));
UInt8 powerOnToGood;
UInt8 hubCurrent;
UInt8 removablePortFlags[8];
UInt8 pwrCtlPortFlags[8];
};
typedef struct IOUSBHubDescriptor IOUSBHubDescriptor;
struct IOUSBHubStatus {
UInt16 statusFlags;
UInt16 changeFlags;
};
typedef struct IOUSBHubStatus IOUSBHubStatus;
typedef IOUSBHubStatus * IOUSBHubStatusPtr;
typedef struct IOUSBHubStatus IOUSBHubPortStatus;
typedef struct IOUSBHubPortReEnumerateParam IOUSBHubPortReEnumerateParam;
struct IOUSBHubPortReEnumerateParam {
UInt32 portNumber;
UInt32 options;
};
#endif