<!--
{
  "documentType" : "article",
  "framework" : "IOUSBHost",
  "identifier" : "/documentation/IOUSBHost/parsing-usb-descriptors",
  "metadataVersion" : "0.1.0",
  "role" : "collectionGroup",
  "title" : "Parsing USB Descriptors"
}
-->

# Parsing USB Descriptors

Extract information from various USB descriptors using helper methods.

## Topics

### Configuration Descriptor Parsing

[`func IOUSBGetNextDescriptor(UnsafePointer<IOUSBConfigurationDescriptor>!, UnsafePointer<IOUSBDescriptorHeader>!) -> UnsafePointer<IOUSBDescriptorHeader>!`](/documentation/IOUSBHost/IOUSBGetNextDescriptor(_:_:))

Obtains the next descriptor in a configuration descriptor.

[`func IOUSBGetNextDescriptorWithType(UnsafePointer<IOUSBConfigurationDescriptor>!, UnsafePointer<IOUSBDescriptorHeader>!, UInt8) -> UnsafePointer<IOUSBDescriptorHeader>!`](/documentation/IOUSBHost/IOUSBGetNextDescriptorWithType(_:_:_:))

Obtains the next descriptor in a configuration descriptor that matches the type.

[`func IOUSBGetNextAssociatedDescriptor(UnsafePointer<IOUSBConfigurationDescriptor>!, UnsafePointer<IOUSBDescriptorHeader>!, UnsafePointer<IOUSBDescriptorHeader>!) -> UnsafePointer<IOUSBDescriptorHeader>!`](/documentation/IOUSBHost/IOUSBGetNextAssociatedDescriptor(_:_:_:))

Obtains the next associated descriptor in a configuration descriptor.

[`func IOUSBGetNextAssociatedDescriptorWithType(UnsafePointer<IOUSBConfigurationDescriptor>!, UnsafePointer<IOUSBDescriptorHeader>!, UnsafePointer<IOUSBDescriptorHeader>!, UInt8) -> UnsafePointer<IOUSBDescriptorHeader>!`](/documentation/IOUSBHost/IOUSBGetNextAssociatedDescriptorWithType(_:_:_:_:))

Obtains the next associated descriptor in a configuration descriptor and matches the type.

[`func IOUSBGetNextInterfaceAssociationDescriptor(UnsafePointer<IOUSBConfigurationDescriptor>!, UnsafePointer<IOUSBDescriptorHeader>!) -> UnsafePointer<IOUSBInterfaceAssociationDescriptor>!`](/documentation/IOUSBHost/IOUSBGetNextInterfaceAssociationDescriptor(_:_:))

Obtains the next interface association descriptor in a configuration descriptor.

[`func IOUSBGetNextInterfaceDescriptor(UnsafePointer<IOUSBConfigurationDescriptor>!, UnsafePointer<IOUSBDescriptorHeader>!) -> UnsafePointer<IOUSBInterfaceDescriptor>!`](/documentation/IOUSBHost/IOUSBGetNextInterfaceDescriptor(_:_:))

Obtains the next interface descriptor in a configuration descriptor.

[`func IOUSBGetConfigurationMaxPowerMilliAmps(UInt32, UnsafePointer<IOUSBConfigurationDescriptor>!) -> UInt32`](/documentation/IOUSBHost/IOUSBGetConfigurationMaxPowerMilliAmps(_:_:))

Obtains the maximum bus current that a configuration descriptor requires.

### BOS Descriptor Parsing

[`func IOUSBGetUSB20ExtensionDeviceCapabilityDescriptor(UnsafePointer<IOUSBBOSDescriptor>!) -> UnsafePointer<IOUSBDeviceCapabilityUSB2Extension>!`](/documentation/IOUSBHost/IOUSBGetUSB20ExtensionDeviceCapabilityDescriptor(_:))

Obtains the first USB 2.0 extension capability descriptor in a BOS descriptor.

[`func IOUSBGetNextCapabilityDescriptorWithType(UnsafePointer<IOUSBBOSDescriptor>!, UnsafePointer<IOUSBDeviceCapabilityDescriptorHeader>!, UInt8) -> UnsafePointer<IOUSBDeviceCapabilityDescriptorHeader>!`](/documentation/IOUSBHost/IOUSBGetNextCapabilityDescriptorWithType(_:_:_:))

Obtains the next descriptor matching a specific type within a BOS descriptor.

[`func IOUSBGetNextCapabilityDescriptor(UnsafePointer<IOUSBBOSDescriptor>!, UnsafePointer<IOUSBDeviceCapabilityDescriptorHeader>!) -> UnsafePointer<IOUSBDeviceCapabilityDescriptorHeader>!`](/documentation/IOUSBHost/IOUSBGetNextCapabilityDescriptor(_:_:))

Obtains the next device capability descriptor in a BOS descriptor.

[`func IOUSBGetSuperSpeedDeviceCapabilityDescriptor(UnsafePointer<IOUSBBOSDescriptor>!) -> UnsafePointer<IOUSBDeviceCapabilitySuperSpeedUSB>!`](/documentation/IOUSBHost/IOUSBGetSuperSpeedDeviceCapabilityDescriptor(_:))

Obtains the first SuperSpeed capability descriptor in a BOS descriptor.

[`func IOUSBGetContainerIDDescriptor(UnsafePointer<IOUSBBOSDescriptor>!) -> UnsafePointer<IOUSBDeviceCapabilityContainerID>!`](/documentation/IOUSBHost/IOUSBGetContainerIDDescriptor(_:))

Obtains the first container ID capability descriptor in a BOS descriptor.

[`func IOUSBGetBillboardDescriptor(UnsafePointer<IOUSBBOSDescriptor>!) -> UnsafePointer<IOUSBDeviceCapabilityBillboard>!`](/documentation/IOUSBHost/IOUSBGetBillboardDescriptor(_:))

Obtains the first billboard capability descriptor in a BOS descriptor.

### Endpoint Descriptor Parsing

[`func IOUSBGetNextEndpointDescriptor(UnsafePointer<IOUSBConfigurationDescriptor>!, UnsafePointer<IOUSBInterfaceDescriptor>!, UnsafePointer<IOUSBDescriptorHeader>!) -> UnsafePointer<IOUSBEndpointDescriptor>!`](/documentation/IOUSBHost/IOUSBGetNextEndpointDescriptor(_:_:_:))

Obtains the next endpoint descriptor for an interface descriptor.

[`func IOUSBGetEndpointDirection(UnsafePointer<IOUSBEndpointDescriptor>!) -> UInt8`](/documentation/IOUSBHost/IOUSBGetEndpointDirection(_:))

Obtains the direction of an endpoint from an endpoint descriptor.

[`func IOUSBGetEndpointAddress(UnsafePointer<IOUSBEndpointDescriptor>!) -> UInt8`](/documentation/IOUSBHost/IOUSBGetEndpointAddress(_:))

Obtains the direction and number of an endpoint from an endpoint descriptor.

[`func IOUSBGetEndpointNumber(UnsafePointer<IOUSBEndpointDescriptor>!) -> UInt8`](/documentation/IOUSBHost/IOUSBGetEndpointNumber(_:))

Obtains the number of an endpoint from an endpoint descriptor.

[`func IOUSBGetEndpointType(UnsafePointer<IOUSBEndpointDescriptor>!) -> UInt8`](/documentation/IOUSBHost/IOUSBGetEndpointType(_:))

Obtains the type of an endpoint from an endpoint descriptor.

[`func IOUSBGetEndpointMaxPacketSize(UInt32, UnsafePointer<IOUSBEndpointDescriptor>!) -> UInt16`](/documentation/IOUSBHost/IOUSBGetEndpointMaxPacketSize(_:_:))

Obtains the maximum packet size from an endpoint descriptor.

[`func IOUSBGetEndpointIntervalEncodedMicroframes(UInt32, UnsafePointer<IOUSBEndpointDescriptor>!) -> UInt32`](/documentation/IOUSBHost/IOUSBGetEndpointIntervalEncodedMicroframes(_:_:))

Obtains the interval of an endpoint descriptor.

[`func IOUSBGetEndpointIntervalMicroframes(UInt32, UnsafePointer<IOUSBEndpointDescriptor>!) -> UInt32`](/documentation/IOUSBHost/IOUSBGetEndpointIntervalMicroframes(_:_:))

Obtains the interval of an endpoint descriptor.

[`func IOUSBGetEndpointIntervalFrames(UInt32, UnsafePointer<IOUSBEndpointDescriptor>!) -> UInt32`](/documentation/IOUSBHost/IOUSBGetEndpointIntervalFrames(_:_:))

Obtains the interval of an endpoint descriptor.

[`func IOUSBGetEndpointMaxStreamsEncoded(UInt32, UnsafePointer<IOUSBEndpointDescriptor>!, UnsafePointer<IOUSBSuperSpeedEndpointCompanionDescriptor>!) -> UInt32`](/documentation/IOUSBHost/IOUSBGetEndpointMaxStreamsEncoded(_:_:_:))

Obtains the number of streams that an endpoint supports.

[`func IOUSBGetEndpointMaxStreams(UInt32, UnsafePointer<IOUSBEndpointDescriptor>!, UnsafePointer<IOUSBSuperSpeedEndpointCompanionDescriptor>!) -> UInt32`](/documentation/IOUSBHost/IOUSBGetEndpointMaxStreams(_:_:_:))

Obtains the number of supported streams.



---

Copyright &copy; 2026 Apple Inc. All rights reserved. | [Terms of Use](https://www.apple.com/legal/internet-services/terms/site.html) | [Privacy Policy](https://www.apple.com/privacy/privacy-policy)