#ifndef _USBSPEC_H
#define _USBSPEC_H
#ifdef __cplusplus
extern "C" {
#endif
enum {
kUSBControl = 0,
kUSBIsoc = 1,
kUSBBulk = 2,
kUSBInterrupt = 3,
kUSBAnyType = 0xFF
};
enum {
kUSBOut = 0,
kUSBIn = 1,
kUSBNone = 2,
kUSBAnyDirn = 3
};
enum {
kUSBStandard = 0,
kUSBClass = 1,
kUSBVendor = 2
};
enum {
kUSBDevice = 0,
kUSBInterface = 1,
kUSBEndpoint = 2,
kUSBOther = 3
};
enum {
kUSBRqGetStatus = 0,
kUSBRqClearFeature = 1,
kUSBRqGetState = 2,
kUSBRqSetFeature = 3,
kUSBRqReserved2 = 4,
kUSBRqSetAddress = 5,
kUSBRqGetDescriptor = 6,
kUSBRqSetDescriptor = 7,
kUSBRqGetConfig = 8,
kUSBRqSetConfig = 9,
kUSBRqGetInterface = 10,
kUSBRqSetInterface = 11,
kUSBRqSyncFrame = 12
};
enum {
kUSBAnyDesc = 0, kUSBDeviceDesc = 1,
kUSBConfDesc = 2,
kUSBStringDesc = 3,
kUSBInterfaceDesc = 4,
kUSBEndpointDesc = 5,
kUSBDeviceQualifierDesc = 6,
kUSBOtherSpeedConfDesc = 7,
kUSBInterfacePowerDesc = 8,
kUSBOnTheGoDesc = 9,
kUSDebugDesc = 10,
kUSBInterfaceAssociationDesc = 11,
kUSBHIDDesc = 0x21,
kUSBReportDesc = 0x22,
kUSBPhysicalDesc = 0x23,
kUSBHUBDesc = 0x29
};
enum {
kUSBFeatureEndpointStall = 0,
kUSBFeatureDeviceRemoteWakeup = 1
};
enum {
kUSB100mAAvailable = 50,
kUSB500mAAvailable = 250,
kUSB100mA = 50,
kUSBAtrBusPowered = 0x80,
kUSBAtrSelfPowered = 0x40,
kUSBAtrRemoteWakeup = 0x20
};
enum {
kUSBRel10 = 0x0100,
kUSBRel11 = 0x0110,
kUSBRel20 = 0x0200
};
enum {
kHIDRqGetReport = 1,
kHIDRqGetIdle = 2,
kHIDRqGetProtocol = 3,
kHIDRqSetReport = 9,
kHIDRqSetIdle = 10,
kHIDRqSetProtocol = 11
};
enum {
kHIDRtInputReport = 1,
kHIDRtOutputReport = 2,
kHIDRtFeatureReport = 3
};
enum {
kHIDBootProtocolValue = 0,
kHIDReportProtocolValue = 1
};
enum {
kUSBCapsLockKey = 0x39,
kUSBNumLockKey = 0x53,
kUSBScrollLockKey = 0x47
};
enum {
kUSBCompositeClass = 0,
kUSBCommClass = 2, kUSBCommunicationClass = 2,
kUSBHubClass = 9,
kUSBDataClass = 10,
kUSBDiagnosticClass = 220,
kUSBWirelessControllerClass = 224,
kUSBMiscellaneousClass = 239,
kUSBApplicationSpecificClass = 254,
kUSBVendorSpecificClass = 255
};
enum {
kUSBAudioClass = 1, kUSBAudioInterfaceClass = 1,
kUSBCommunicationControlInterfaceClass = 2,
kUSBCommunicationDataInterfaceClass = 10,
kUSBHIDClass = 3,
kUSBHIDInterfaceClass = 3,
kUSBPhysicalInterfaceClass = 5,
kUSBImageInterfaceClass = 6,
kUSBPrintingClass = 7, kUSBPrintingInterfaceClass = 7,
kUSBMassStorageClass = 8, kUSBMassStorageInterfaceClass = 8,
kUSBChipSmartCardInterfaceClass = 11,
kUSBContentSecurityInterfaceClass = 12,
kUSBVideoInterfaceClass = 14,
kUSBDiagnosticDeviceInterfaceClass = 220,
kUSBWirelessControllerInterfaceClass = 224,
kUSBApplicationSpecificInterfaceClass = 254,
kUSBVendorSpecificInterfaceClass = 255
};
enum {
kUSBDisplayClass = 4, };
enum {
kUSBCompositeSubClass = 0,
kUSBHubSubClass = 0,
kUSBAudioControlSubClass = 0x01,
kUSBAudioStreamingSubClass = 0x02,
kUSBMIDIStreamingSubClass = 0x03,
kUSBDFUSubClass = 0x01,
kUSBIrDABridgeSubClass = 0x02,
kUSBTestMeasurementSubClass = 0x03,
kUSBMassStorageRBCSubClass = 0x01,
kUSBMassStorageATAPISubClass = 0x02,
kUSBMassStorageQIC157SubClass = 0x03,
kUSBMassStorageUFISubClass = 0x04,
kUSBMassStorageSFF8070iSubClass = 0x05,
kUSBMassStorageSCSISubClass = 0x06,
kUSBHIDBootInterfaceSubClass = 0x01,
kUSBCommDirectLineSubClass = 0x01,
kUSBCommAbstractSubClass = 0x02,
kUSBCommTelephoneSubClass = 0x03,
kUSBCommMultiChannelSubClass = 0x04,
kUSBCommCAPISubClass = 0x05,
kUSBCommEthernetNetworkingSubClass = 0x06,
kUSBATMNetworkingSubClass = 0x07,
kUSBReprogrammableDiagnosticSubClass = 0x01,
kUSBRFControllerSubClass = 0x01,
kUSBCommonClassSubClass = 0x02,
kUSBVideoControlSubClass = 0x01,
kUSBVideoStreamingSubClass = 0x02,
kUSBVideoInterfaceCollectionSubClass = 0x03
};
enum {
kHIDNoInterfaceProtocol = 0,
kHIDKeyboardInterfaceProtocol = 1,
kHIDMouseInterfaceProtocol = 2,
kUSBVendorSpecificProtocol = 0xff,
kUSB2ComplianceDeviceProtocol = 0x01,
kUSBBluetoothProgrammingInterfaceProtocol = 0x01,
KUSBInterfaceAssociationDescriptorProtocol = 0x01
};
enum {
kUSBDFUAttributesMask = 0x07,
kUSBDFUCanDownloadBit = 0,
kUSBDFUCanUploadBit = 1,
kUSBDFUManifestationTolerantBit = 2
};
enum {
kUSBbEndpointAddressMask = 0x0f,
kUSBbEndpointDirectionBit = 7,
kUSBbEndpointDirectionMask = ( 1 << kUSBbEndpointDirectionBit ),
kUSBEndpointDirectionOut = 0x00,
kUSBEndpointDirectionIn = 0x80,
kUSBEndpointbmAttributesTransferTypeMask = 0x03,
kUSBEndpointbmAttributesSynchronizationTypeMask = 0x0c,
kUSBEndpointbmAttributesSynchronizationTypeShift = 2,
kUSBEndpointbmAttributesUsageTypeMask = 0x30,
kUSBEndpointbmAttributesUsageTypeShift = 4
};
#define kUSBDeviceClass "bDeviceClass"
#define kUSBDeviceSubClass "bDeviceSubClass"
#define kUSBDeviceProtocol "bDeviceProtocol"
#define kUSBDeviceMaxPacketSize "bMaxPacketSize0"
#define kUSBVendorID "idVendor" // good name
#define kUSBVendorName kUSBVendorID // bad name - keep for backward compatibility
#define kUSBProductID "idProduct" // good name
#define kUSBProductName kUSBProductID // bad name - keep for backward compatibility
#define kUSBDeviceReleaseNumber "bcdDevice"
#define kUSBManufacturerStringIndex "iManufacturer"
#define kUSBProductStringIndex "iProduct"
#define kUSBSerialNumberStringIndex "iSerialNumber"
#define kUSBDeviceNumConfigs "bNumConfigurations"
#define kUSBInterfaceNumber "bInterfaceNumber"
#define kUSBAlternateSetting "bAlternateSetting"
#define kUSBNumEndpoints "bNumEndpoints"
#define kUSBInterfaceClass "bInterfaceClass"
#define kUSBInterfaceSubClass "bInterfaceSubClass"
#define kUSBInterfaceProtocol "bInterfaceProtocol"
#define kUSBInterfaceStringIndex "iInterface"
#define kUSBConfigurationValue "bConfigurationValue"
#ifdef __cplusplus
}
#endif
#endif