---
name: "uhid"
section: "4freebsd"
platform: "linux"
package: "freebsd-manpages"
version: "12.2-2"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/uhid/4freebsd"
---

# uhid(4freebsd)

USB generic HID support

## NAME

**uhid** – USB generic HID support

## SYNOPSIS

To compile this driver into the kernel, place the following line in your kernel configuration file:

**device uhid**

Alternatively, to load the driver as a module at boot time, place the following line in [loader.conf(5)](/loader.conf/5.md):

```
uhid_load="YES"
```

## 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\_gen\_descriptor*)

  Get the HID report descriptor. Copies a maximum of *ugd\_maxlen* bytes of the report descriptor data into the memory specified by *ugd\_data*. Upon return *ugd\_actlen* is set to the number of bytes copied. 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_gen_descriptor {
  	void   *ugd_data;
  	uint16_t ugd_maxlen;
  	uint16_t ugd_actlen;
  	uint8_t	ugd_report_type;
  	...
  };
  ```

- 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\_gen\_descriptor*)

  Get a report from the device without waiting for data on the interrupt pipe. Copies a maximum of *ugd\_maxlen* bytes of the report data into the memory specified by *ugd\_data*. Upon return *ugd\_actlen* is set to the number of bytes copied. The *ugd\_report\_type* 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.

- USB\_SET\_REPORT (*struct usb\_gen\_descriptor*)

  Set a report in the device. The *ugd\_report\_type* field indicates which report is to be set. It should be UHID\_INPUT\_REPORT, UHID\_OUTPUT\_REPORT, or UHID\_FEATURE\_REPORT. The value of the report is specified by the *ugd\_data* and the *ugd\_maxlen* fields. 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.

## SYSCTL VARIABLES

The following variables are available as both [sysctl(8)](/sysctl/8.md) variables and [loader(8)](/loader/8.md) tunables:

- *hw.usb.uhid.debug*

  Debug output level, where 0 is debugging disabled and larger values increase debug message verbosity. Default is 0.

## FILES

- */dev/uhid?*

  ## SEE ALSO

[usbhidctl(1)](/usbhidctl/1.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.
