1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
|
.\" $OpenBSD: usbhidctl.1,v 1.16 2022/03/31 17:27:28 naddy Exp $
.\" $NetBSD: usbhidctl.1,v 1.14 2001/12/28 17:49:32 augustss 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 <David.Sainty@dtsp.co.nz>
.\"
.\" 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 $Mdocdate: March 31 2022 $
.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 alv
.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 name ...
.Nm
.Fl f Ar device
.Op Fl t Ar table
.Fl w Ar name Ns = Ns Ar value ...
.Nm
.Fl f Ar device
.Fl R
.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 GET_REPORT command.
This is the default, if no parameters other than
.Fl f
are given to
.Nm .
.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 raw USB HID report descriptor data as hexadecimal bytes.
.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.
.El
.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.
.Sh FILES
.Bl -tag -width "/usr/share/misc/usb_hid_usages"
.It Pa /usr/share/misc/usb_hid_usages
The default HID usage table.
.El
.Sh EXAMPLES
On a standard USB mouse the item
.Pp
.Dl Generic_Desktop:Mouse.Generic_Desktop:Pointer.Button:Button_2
.Pp
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:
.Pp
.Dl $ usbhidctl -f /dev/wsmouse0 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:
.Pp
.Dl $ usbhidctl -f /dev/wsmouse0 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:
.Pp
.Dl $ usbhidctl -f /dev/wsmouse0 -w Mouse.0xffff:2=0
.Sh SEE ALSO
.Xr usbhidaction 1 ,
.Xr usbhid 3 ,
.Xr uhid 4 ,
.Xr usb 4
.Sh HISTORY
The
.Nm
command first appeared in
.Ox 3.0 .
.Sh AUTHORS
.An David Sainty Aq Mt David.Sainty@dtsp.co.nz
.Sh BUGS
Some USB HID devices report multiple items with exactly the same usage
identifiers.
The current naming scheme does not provide the means to specify
which of a set of identically named items you are referring to.
|