NAME
usbhidctl —
manipulate USB HID
devices
SYNOPSIS
usbhidctl |
-f device
[-t table]
[-lv] -a |
usbhidctl |
-f device
[-t table]
[-v] -r |
usbhidctl |
-f device
[-t table]
[-lnv]
item [...] |
usbhidctl |
-f device
[-t table]
[-z] -w
item=value [...] |
DESCRIPTION
usbhidctl can be used to output or modify the state of a USB
HID (Human Interface Device). If a list of items is present on the command
line, then
usbhidctl prints the current value of those items
for the specified device. If the
-w flag is specified
usbhidctl attempts to set the specified items to the given
values.
The options are as follows:
-
-
- -a
- Show all items and their current values. This option fails
if the device does not support the
GET_REPORT
command.
-
-
- -f
device
- Specify a path name for the device to operate on. If
device is numeric, it is taken to be the USB HID
device number. If it is a relative path, it is taken to be the name of the
device under /dev. An absolute path is taken to be the
literal device pathname.
-
-
- -l
- Loop and dump the device data every time it changes. Only
'input' items are displayed in this mode.
-
-
- -n
- Suppress printing of the item name when querying specific
items. Only output the current value.
-
-
- -r
- Dump the USB HID report descriptor.
-
-
- -t
table
- Specify a path name for the HID usage table file.
-
-
- -v
- Be verbose. Repeating this option increases verbosity.
-
-
- -w
- Change item values. Only 'output' and 'feature' kinds can
be set with this option.
-
-
- -z
- Reset all feature and output flags to zero before
attempting to change them. May be required for changing item values (via
-w) on devices that don't implement
GET_REPORT
.
FILES
/usr/share/misc/usb_hid_usages The default HID usage table.
SYNTAX
usbhidctl parses the names of items specified on the command
line against the human interface items reported by the USB device. Each human
interface item is mapped from its native form to a human readable name, using
the HID usage table file. Command line items are compared with the generated
item names, and the USB HID device is operated on when a match is found.
Each human interface item is named by the “page” it appears in, the
“usage” within that page, and the list of
“collections” containing the item. Each collection in turn is also
identified by page, and the usage within that page.
On the
usbhidctl command line the page name is separated from
the usage name with the character ‘
:’. The
collections are separated by the character ‘
.’.
As an alternative notation in items on the command line, the native numeric
value for the page name or usage can be used instead of the full human
readable page name or usage name. Numeric values can be specified in decimal,
octal or hexadecimal.
Some devices give the same name to more than one item.
usbhidctl supports isolating each item by appending a
‘
#’. character and a decimal item instance
number, starting at zero.
EXAMPLES
On a standard USB mouse the item
Generic_Desktop:Mouse.Generic_Desktop:Pointer.Button:Button_2
reflects the current status of button 2. The “button 2” item is
encapsulated within two collections, the “Mouse” collection in the
“Generic Desktop” page, and the “Pointer” collection
in the “Generic Desktop” page. The item itself is the usage
“Button_2” in the “Button” page.
An item can generally be named by omitting one or more of the page names. For
example the “button 2” item would usually just be referred to on
the command line as:
usbhidctl -f /dev/mouse
Mouse.Pointer.Button_2
Items can also be named by referring to parts of the item name with the numeric
representation of the native HID usage identifiers. This is most useful when
items are missing from the HID usage table. The page identifier for the
“Generic Desktop” page is 1, and the usage identifier for the
usage “Button_2” is 2, so the following can be used to refer to
the “button 2” item:
usbhidctl -f /dev/mouse
1:Mouse.1:Pointer.Button:2
Devices with human interface outputs can be manipulated with the
-w option. For example, some USB mice have a Light Emitting
Diode under software control as usage 2 under page 0xffff, in the
“Mouse” collection. The following can be used to switch this LED
off:
usbhidctl -f /dev/mouse -w
Mouse.0xffff:2=0
The output below is from a device that uses the same name repeatedly.
% usbhidctl -f /dev/uhid0 -a
Consumer_Control.Volume_Up=0
Consumer_Control.Volume_Down=0
Consumer_Control.Mute=0
Consumer_Control.Unassigned=0
Consumer_Control.Unassigned=0
The “Consumer_Control.Unassigned” name is used twice. Each can be
individually accessed by providing an instance number. For example, to set the
value for the first item:
usbhidctl -f /dev/uhid0 -w
'Consumer_Control.Unassigned#0=1'
Another example is configuring multimedia keys on a keyboard. First you would
look in the
dmesg(8) output,
which
uhid(4) devices are attached
to the keyboard's
uhidev(4)
device and use
usbhidctl to see how the controls are
reported:
usbhidctl -f /dev/uhidX -lv -a
Then press the special keys; you should see something like
Consumer:Volume_Up
etc. Then create a configuration
file containing the actions, like:
Consumer:Volume_Up 1 /usr/pkg/bin/dcop amarok player volumeUp &
Consumer:Volume_Down 1 /usr/pkg/bin/dcop amarok player volumeDown &
Consumer:Mute 1 /usr/pkg/bin/dcop amarok player mute &
and use
usbhidaction -c /path/to/file -f
/dev/uhidX
once during your X startup.
SEE ALSO
usbhidaction(1),
usbhid(3),
uhid(4),
usb(4)
HISTORY
The
usbhidctl command first appeared in
NetBSD 1.4.
AUTHORS
David Sainty
<
David.Sainty@dtsp.co.nz>