---
name: "uhid"
section: "4"
platform: "linux"
package: "freebsd-manpages"
version: "6.0-5"
release: "Debian 4.0 (Etch)"
platforms: ["linux", "freebsd", "openbsd"]
url: "https://new.carta.tech/uhid"
---

# uhid(4)

USB generic HID support

## NAME

**uhid** – USB generic HID support

## SYNOPSIS

**device uhid**

## DESCRIPTION

The **uhid** driver provides support for all HID (Human Interface Device) interfaces in USB devices that do not have a special driver.

The device handles the following [ioctl(2)](/ioctl/2.md) calls:

- USB\_GET\_REPORT\_ID (*int*)

  Get the report identifier used by this HID report.

- USB\_GET\_REPORT\_DESC (*struct usb\_ctl\_report\_desc*)

  Get the HID report descriptor. Using this descriptor the exact layout and meaning of data to/from the device can be found. The report descriptor is delivered without any processing.

  ```
  struct usb_ctl_report_desc {
      int     size;
      u_char  data[1024];	/* filled data size will vary */
  };
  ```

- USB\_SET\_IMMED (*int*)

  Sets the device in a mode where each [read(2)](/read/2.md) will return the current value of the input report. Normally a [read(2)](/read/2.md) will only return the data that the device reports on its interrupt pipe. This call may fail if the device does not support this feature.

- USB\_GET\_REPORT (*struct usb\_ctl\_report*)

  Get a report from the device without waiting for data on the interrupt pipe. The *report* field indicates which report is requested. It should be UHID\_INPUT\_REPORT, UHID\_OUTPUT\_REPORT, or UHID\_FEATURE\_REPORT. This call may fail if the device does not support this feature.

  ```
  struct usb_ctl_report {
  	int report;
  	u_char	data[1024];	/* used data size will vary */
  };
  ```

- USB\_SET\_REPORT (*struct usb\_ctl\_report*)

  Set a report in the device. The *report* field indicates which report is to be set. It should be UHID\_INPUT\_REPORT, UHID\_OUTPUT\_REPORT, or UHID\_FEATURE\_REPORT. This call may fail if the device does not support this feature.

Use [read(2)](/read/2.md) to get data from the device. Data should be read in chunks of the size prescribed by the report descriptor.

Use [write(2)](/write/2.md) to send data to the device. Data should be written in chunks of the size prescribed by the report descriptor.

## FILES

- */dev/uhid?*

  ## SEE ALSO

[usbhidctl(1)](/usbhidctl/1.md), [uhidev(4)](/uhidev/4.md), [usb(4)](/usb/4.md)

## HISTORY

The **uhid** driver appeared in NetBSD 1.4. This manual page was adopted from NetBSD by Tom Rhodes ⟨trhodes@FreeBSD.org⟩ in April 2002.
