\" $NetBSD: usbhidctl.1,v 1.26 2019/09/22 07:34:33 dsainty Exp $
\"
\" Copyright (c) 2001 The NetBSD Foundation, Inc.
\" All rights reserved.
\"
\" This code is derived from software contributed to The NetBSD Foundation
\" by David Sainty <[email protected]>
\"
\" Redistribution and use in source and binary forms, with or without
\" modification, are permitted provided that the following conditions
\" are met:
\" 1. Redistributions of source code must retain the above copyright
\"    notice, this list of conditions and the following disclaimer.
\" 2. Redistributions in binary form must reproduce the above copyright
\"    notice, this list of conditions and the following disclaimer in the
\"    documentation and/or other materials provided with the distribution.
\"
\" THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
\" ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
\" TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
\" PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
\" BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
\" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
\" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
\" CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
\" POSSIBILITY OF SUCH DAMAGE.
\"
Dd March 30, 2011
Dt USBHIDCTL 1
Os
Sh NAME
Nm usbhidctl
Nd manipulate USB HID devices
Sh SYNOPSIS
Nm
Fl f Ar device
Op Fl t Ar table
Op Fl lv
Fl a
Nm
Fl f Ar device
Op Fl t Ar table
Op Fl v
Fl r
Nm
Fl f Ar device
Op Fl t Ar table
Op Fl lnv
Ar item Op ...
Nm
Fl f Ar device
Op Fl t Ar table
Op Fl z
Fl w
Ar item=value Op ...
Sh DESCRIPTION
Nm
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
Nm
prints the current value of those items for the specified device.
If the
Fl w
flag is specified
Nm
attempts to set the specified items to the given values.
Pp
The options are as follows:
Bl -tag -width Ds
It Fl a
Show all items and their current values.
This option fails if the device does not support the
Dv GET_REPORT
command.
It Fl f Ar device
Specify a path name for the device to operate on.
If
Ar 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
Pa /dev .
An absolute path is taken to be the literal device pathname.
It Fl l
Loop and dump the device data every time it changes.
Only 'input' items are displayed in this mode.
It Fl n
Suppress printing of the item name when querying specific items.
Only output the current value.
It Fl r
Dump the USB HID report descriptor.
It Fl t Ar table
Specify a path name for the HID usage table file.
It Fl v
Be verbose.
Repeating this option increases verbosity.
It Fl w
Change item values.
Only 'output' and 'feature' kinds can be set with this
option.
It Fl z
Reset all feature and output flags to zero before attempting to change them.
May be required for changing item values (via
Fl w )
on devices that don't implement
Dv GET_REPORT .
El
Sh FILES
Pa /usr/share/misc/usb_hid_usages
The default HID usage table.
Sh SYNTAX
Nm
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.
Pp
Each human interface item is named by the
Qq page
it appears in, the
Qq usage
within that page, and the list of
Qq collections
containing the item.
Each collection in turn is also identified by page, and
the usage within that page.
Pp
On the
Nm
command line the page name is separated from the usage name with the character
Sq Cm \&: .
The collections are separated by the character
Sq Cm \&. .
Pp
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.
Pp
Some devices give the same name to more than one item.
Nm
supports isolating each item by appending a
Sq Cm \&# .
character and a decimal item instance number, starting at zero.
Sh EXAMPLES
On a standard USB mouse the item
Dl Generic_Desktop:Mouse.Generic_Desktop:Pointer.Button:Button_2
reflects the current status of button 2.
The
Qq button 2
item is encapsulated within two collections, the
Qq Mouse
collection in the
Qq Generic Desktop
page, and the
Qq Pointer
collection in the
Qq Generic Desktop
page.
The item itself is the usage
Qq Button_2
in the
Qq Button
page.
Pp
An item can generally be named by omitting one or more of the page names.
For example the
Qq button 2
item would usually just be referred to on the command line as:
Dl usbhidctl -f /dev/mouse Mouse.Pointer.Button_2
Pp
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
Qq Generic Desktop
page is 1, and the usage identifier for the usage
Qq Button_2
is 2, so the following can be used to refer to the
Qq button 2
item:
Dl usbhidctl -f /dev/mouse 1:Mouse.1:Pointer.Button:2
Pp
Devices with human interface outputs can be manipulated with the
Fl w
option.
For example, some USB mice have a Light Emitting Diode under software
control as usage 2 under page 0xffff, in the
Qq Mouse
collection.
The following can be used to switch this LED off:
Dl usbhidctl -f /dev/mouse -w Mouse.0xffff:2=0
Pp
The output below is from a device that uses the same name repeatedly.
Bd -literal -offset indent
% 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
Ed
Pp
The
Qq 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:
Dl usbhidctl -f /dev/uhid0 -w 'Consumer_Control.Unassigned#0=1'
Pp
Another example is configuring multimedia keys on a keyboard.
First you would look in the
Xr dmesg 8
output, which
Xr uhid 4
devices are attached to the keyboard's
Xr uhidev 4
device and use
Nm
to see how the controls are reported:
Dl usbhidctl -f /dev/uhidX -lv -a
Then press the special keys; you should see something like
Dv Consumer:Volume_Up
etc.
Then create a configuration file containing the actions, like:
Bd -literal -offset indent
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 &
Ed
and use
Dl usbhidaction -c /path/to/file -f /dev/uhidX
once during your X startup.
Sh SEE ALSO
Xr usbhidaction 1 ,
Xr usbhid 3 ,
Xr uhid 4 ,
Xr usb 4
Sh HISTORY
The
Nm
command first appeared in
Nx 1.4 .
Sh AUTHORS
An David Sainty Aq Mt [email protected]