<!--
{
  "availability" : [
    "DriverKit: 19.0 -"
  ],
  "documentType" : "symbol",
  "framework" : "USBDriverKit",
  "identifier" : "/documentation/USBDriverKit/IOUSBHostPipe",
  "metadataVersion" : "0.1.0",
  "role" : "Class",
  "symbol" : {
    "kind" : "Class",
    "modules" : [
      "USBDriverKit"
    ],
    "preciseIdentifier" : "c:@S@IOUSBHostPipe"
  },
  "title" : "IOUSBHostPipe"
}
-->

# IOUSBHostPipe

An object you use to transfer data to or from a USB endpoint.

```
class IOUSBHostPipe;
```

## Overview

Use an [`IOUSBHostPipe`](/documentation/USBDriverKit/IOUSBHostPipe) object to manage data transfers to and from a device. A pipe represents a one-way data conduit between your driver and one of the device’s USB endpoints. You use pipes to perform synchronous, asynchronous, or isochronous data transfers between your code and the device.

Don’t create an [`IOUSBHostPipe`](/documentation/USBDriverKit/IOUSBHostPipe) object directly. To retrieve a pipe for a specific endpoint, call the [`CopyPipe`](/documentation/USBDriverKit/IOUSBHostInterface/CopyPipe) method of [`IOUSBHostInterface`](/documentation/USBDriverKit/IOUSBHostInterface). You can get the addresses for the device’s pipes from the endpoint descriptors associated with each device interface.

## Topics

### Interacting with Bulk and Interrupt Endpoints

[`virtual kern_return_t IO(IOMemoryDescriptor *dataBuffer, uint32_t dataBufferLength, uint32_t *bytesTransferred, uint32_t completionTimeoutMs);`](/documentation/USBDriverKit/IOUSBHostPipe/IO)

Performs a synchronous request on a bulk or interrupt endpoint.

[`virtual kern_return_t AsyncIO(IOMemoryDescriptor *dataBuffer, uint32_t dataBufferLength, OSAction *completion, uint32_t completionTimeoutMs);`](/documentation/USBDriverKit/IOUSBHostPipe/AsyncIO)

Enqueues an asynchronous request on a bulk or interrupt endpoint.

[`virtual void CompleteAsyncIO(OSAction *action, IOReturn status, uint32_t actualByteCount, uint64_t completionTimestamp);`](/documentation/USBDriverKit/IOUSBHostPipe/CompleteAsyncIO)

Handles the completion of an asynchronous I/O request.

### Interacting with Isochronous Endpoints

[`virtual kern_return_t IsochIO(IOMemoryDescriptor *dataBuffer, IOMemoryDescriptor *frameList, uint64_t firstFrameNumber, OSAction *completion);`](/documentation/USBDriverKit/IOUSBHostPipe/IsochIO)

Performs a synchronous or asynchronous request on an isochronous endpoint.

[`virtual void CompleteAsyncIsochIO(OSAction *action, IOReturn status);`](/documentation/USBDriverKit/IOUSBHostPipe/CompleteAsyncIsochIO)

Handles the completion of an asynchronous request.

[`struct IOUSBIsochronousFrame;`](/documentation/USBDriverKit/IOUSBIsochronousFrame)

A structure representing a single frame in an isochronous transfer.

### Interacting with Descriptor Rings

  <doc://com.apple.documentation/documentation/USBDriverKit/IOUSBHostPipe/CreateMemoryDescriptorRing>

  <doc://com.apple.documentation/documentation/USBDriverKit/IOUSBHostPipe/SetMemoryDescriptor>

[`virtual kern_return_t AsyncIOBundled(uint32_t ioTransferIndex, uint32_t ioTransferCount, uint32_t *ioTransferAcceptedCount, const uint32_t dataBufferLengthArray[16], int dataBufferLengthArrayCount, OSAction *completion, uint32_t completionTimeoutMs);`](/documentation/USBDriverKit/IOUSBHostPipe/AsyncIOBundled)

Enqueues a contiguous group of requests from the descriptor ring.

[`virtual void CompleteAsyncIOBundled(OSAction *action, uint32_t ioCompletionIndex, uint32_t ioCompletionCount, const uint32_t actualByteCountArray[16], int actualByteCountArrayCount, const kern_return_t statusArray[16], int statusArrayCount);`](/documentation/USBDriverKit/IOUSBHostPipe/CompleteAsyncIOBundled)

Handles the completion of an asynchronous bundled transfer.

[Bundling Constants](/documentation/USBDriverKit/bundling_constants-enum)

Constants associated with bulk I/O transfers.

### Aborting I/O Requests

[`virtual kern_return_t Abort(IOOptionBits options, kern_return_t withError, IOService *forClient);`](/documentation/USBDriverKit/IOUSBHostPipe/Abort)

Aborts all of the pipe’s pending I/O requests.

[`enum IOUSBAbortOptions : unsigned int;`](/documentation/USBDriverKit/IOUSBAbortOptions)

Options to use when aborting an I/O request.

### Adjusting the Pipe’s Status

[`virtual kern_return_t AdjustPipe(const IOUSBStandardEndpointDescriptors *descriptors);`](/documentation/USBDriverKit/IOUSBHostPipe/AdjustPipe)

Adjusts the behavior of periodic endpoints to consume a different amount of bus bandwidth.

[`virtual kern_return_t ClearStall(bool withRequest);`](/documentation/USBDriverKit/IOUSBHostPipe/ClearStall)

Clears the halt condition of the pipe.

### Getting the Endpoint Descriptors

[`virtual kern_return_t GetDescriptors(IOUSBStandardEndpointDescriptors *descriptors, IOUSBGetEndpointDescriptorOptions type);`](/documentation/USBDriverKit/IOUSBHostPipe/GetDescriptors)

Retrieves the endpoint descriptors associated with this pipe.

[`struct IOUSBStandardEndpointDescriptors;`](/documentation/USBDriverKit/IOUSBStandardEndpointDescriptors)

Encapsulates the descriptors for a single endpoint.

[`enum IOUSBGetEndpointDescriptorOptions : unsigned int;`](/documentation/USBDriverKit/IOUSBGetEndpointDescriptorOptions)

Options for fetching the endpoint descriptors of a pipe.

### Managing the Pipe’s Idle Policy

[`virtual kern_return_t GetIdlePolicy(uint32_t *idleTimeoutMS);`](/documentation/USBDriverKit/IOUSBHostPipe/GetIdlePolicy)

Retrieves the pipe’s current idle timeout.

[`virtual kern_return_t SetIdlePolicy(uint32_t idleTimeoutMs);`](/documentation/USBDriverKit/IOUSBHostPipe/SetIdlePolicy)

Sets the pipe’s desired idle timeout.

### Getting the Device Attributes

[`virtual kern_return_t GetSpeed(uint8_t *speed) const;`](/documentation/USBDriverKit/IOUSBHostPipe/GetSpeed)

Retrieves the device’s operational speed.

[`virtual kern_return_t GetDeviceAddress(uint8_t *address) const;`](/documentation/USBDriverKit/IOUSBHostPipe/GetDeviceAddress)

Retrieves the address of the device.

[`enum tIOUSBHostConnectionSpeed : unsigned int;`](/documentation/USBDriverKit/tIOUSBHostConnectionSpeed)

Constants indicating the connection speed of the device.

### Instance Methods

[`virtual kern_return_t CreateMemoryDescriptorRing(uint32_t size);`](/documentation/USBDriverKit/IOUSBHostPipe/CreateMemoryDescriptorRing)

[`virtual kern_return_t SetMemoryDescriptor(IOMemoryDescriptor *memoryDescriptor, uint32_t index);`](/documentation/USBDriverKit/IOUSBHostPipe/SetMemoryDescriptor)

## Relationships

### Inherits From

[`OSObject`](/documentation/DriverKit/OSObject)

---

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)