---
name: "usb_interrupt_msg"
section: "9"
platform: "linux"
package: "linux-manual-4.9"
version: "4.9.228-1"
release: "Debian 9 (Stretch)"
platforms: ["linux"]
url: "https://new.carta.tech/usb_interrupt_msg"
---

# usb\_interrupt\_msg(9)

Builds an interrupt urb, sends it off and waits for completion

## NAME

usb\_interrupt\_msg - Builds an interrupt urb, sends it off and waits for completion

## SYNOPSIS

**int usb\_interrupt\_msg(struct usb\_device \*** *usb\_dev***, unsigned int** *pipe***, void \*** *data***, int** *len***, int \*** *actual\_length***, int** *timeout***);**

## ARGUMENTS

*usb\_dev*

pointer to the usb device to send the message to

*pipe*

endpoint “pipe” to send the message to

*data*

pointer to the data to send

*len*

length in bytes of the data to send

*actual\_length*

pointer to a location to put the actual length transferred in bytes

*timeout*

time in msecs to wait for the message to complete before timing out (if 0 the wait is forever)

## CONTEXT

!in\_interrupt ()

## DESCRIPTION

This function sends a simple interrupt message to a specified endpoint and waits for the message to complete, or timeout.

Don't use this function from within an interrupt context, like a bottom half handler. If you need an asynchronous message, or need to send a message from within interrupt context, use **usb\_submit\_urb** If a thread in your driver uses this call, make sure your **disconnect** method can wait for it to complete. Since you don't have a handle on the URB used, you can't cancel the request.

## RETURN

If successful, 0. Otherwise a negative error number. The number of actual bytes transferred will be stored in the *actual\_length* parameter.

## COPYRIGHT
