<!--
{
  "availability" : [
    "DriverKit: 19.0 -"
  ],
  "documentType" : "symbol",
  "framework" : "USBDriverKit",
  "identifier" : "/documentation/USBDriverKit/IOUSBHostDevice/AsyncDeviceRequest",
  "metadataVersion" : "0.1.0",
  "role" : "Instance Method",
  "symbol" : {
    "kind" : "Instance Method",
    "modules" : [
      "USBDriverKit"
    ],
    "preciseIdentifier" : "c:@S@IOUSBHostDevice@F@AsyncDeviceRequest#*$@S@IOService#c#c#s#s#s#*$@S@IOMemoryDescriptor#*$@S@OSAction#i#"
  },
  "title" : "AsyncDeviceRequest"
}
-->

# AsyncDeviceRequest

Enqueues a request on the default control endpoint of the device.

```
virtual kern_return_t AsyncDeviceRequest(IOService *forClient, uint8_t bmRequestType, uint8_t bRequest, uint16_t wValue, uint16_t wIndex, uint16_t wLength, IOMemoryDescriptor *dataBuffer, OSAction *completion, uint32_t completionTimeoutMs);
```

## Parameters

`bmRequestType`

The characteristics of the device request. See the <doc://com.apple.documentation/documentation/iokit/usbmakebmrequesttype> macro for information about how to construct this request.

`bRequest`

The request you want to make.

`wValue`

Request-specific data.

`wIndex`

Request-specific data.

`wLength`

The number of bytes to transfer, if there’s a data stage.

`dataBuffer`

The memory descriptor to use for the request’s data phase, if any.

`completion`

An <doc://com.apple.documentation/documentation/DriverKit/OSAction> object that contains the method to call when the request finishes.

`completionTimeoutMs`

The timeout duration in milliseconds. If you specify `0`, the request never times out.

## Return Value

<doc://com.apple.documentation/documentation/DriverKit/kIOReturnSuccess> if the request was enqueued successfully, or another value if an error occurs. See <doc://com.apple.documentation/documentation/DriverKit/error-codes>.

## Discussion

This method performs a USB device request (USB 2.0, section 9.3) asynchronously on the default control endpoint. After enqueueing the request, this method returns immediately. If the request was enqueued successfully, the system executes the action in the `completion` parameter after the request finishes.

---

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)