source: mainline/uspace/lib/usbhid/include/usb/hid/hid_report_items.h@ 74b1e40

lfn serial ticket/834-toolchain-update topic/fix-logger-deadlock topic/msim-upgrade topic/simplify-dev-export
Last change on this file since 74b1e40 was 74b1e40, checked in by Matej Klonfar <maklf@…>, 15 years ago

hid parser header's doxygen doc

  • Property mode set to 100644
File size: 11.7 KB
Line 
1/*
2 * Copyright (c) 2011 Matej Klonfar
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 *
9 * - Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * - Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 * - The name of the author may not be used to endorse or promote products
15 * derived from this software without specific prior written permission.
16 *
17 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
18 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
21 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 */
28
29/** @addtogroup libusb
30 * @{
31 */
32/** @file
33 * @brief USB HID Report descriptor item tags.
34 */
35#ifndef LIBUSB_HID_REPORT_ITEMS_H_
36#define LIBUSB_HID_REPORT_ITEMS_H_
37
38#include <stdint.h>
39
40/*---------------------------------------------------------------------------*/
41/*
42 * Item prefix
43 */
44
45/** Returns size of item data in bytes */
46#define USB_HID_ITEM_SIZE(data) ((uint8_t)(data & 0x3))
47
48/** Returns item tag */
49#define USB_HID_ITEM_TAG(data) ((uint8_t)((data & 0xF0) >> 4))
50
51/** Returns class of item tag */
52#define USB_HID_ITEM_TAG_CLASS(data) ((uint8_t)((data & 0xC) >> 2))
53
54/** Returns if the item is the short item or long item. Long items are not
55 * supported. */
56#define USB_HID_ITEM_IS_LONG(data) (data == 0xFE)
57
58/*---------------------------------------------------------------------------*/
59/*
60 * Extended usage macros
61 */
62
63/** Recognizes if the given usage is extended (contains also usage page). */
64#define USB_HID_IS_EXTENDED_USAGE(usage) ((usage & 0xFFFF0000) != 0)
65
66/** Cuts usage page of the extended usage. */
67#define USB_HID_EXTENDED_USAGE_PAGE(usage) ((usage & 0xFFFF0000) >> 16)
68
69/** Cuts usage of the extended usage */
70#define USB_HID_EXTENDED_USAGE(usage) (usage & 0xFFFF)
71
72/*---------------------------------------------------------------------------*/
73/*
74 * Input/Output/Feature Item flags
75 */
76/**
77 * Indicates whether the item is data (0) or a constant (1) value. Data
78 * indicates the item is defining report fields that contain modifiable device
79 * data. Constant indicates the item is a static read-only field in a report
80 * and cannot be modified (written) by the host.
81 */
82#define USB_HID_ITEM_FLAG_CONSTANT(flags) ((flags & 0x1) == 0x1)
83
84/**
85 * Indicates whether the item creates variable (1) or array (0) data fields in
86 * reports.
87 */
88#define USB_HID_ITEM_FLAG_VARIABLE(flags) ((flags & 0x2) == 0x2)
89
90/**
91 * Indicates whether the data is absolute (0) (based on a fixed origin) or
92 * relative (1) (indicating the change in value from the last report). Mouse
93 * devices usually provide relative data, while tablets usually provide
94 * absolute data.
95 */
96#define USB_HID_ITEM_FLAG_RELATIVE(flags) ((flags & 0x4) == 0x4)
97
98/**
99 * Indicates whether the data “rolls over” when reaching either the extreme
100 * high or low value. For example, a dial that can spin freely 360 degrees
101 * might output values from 0 to 10. If Wrap is indicated, the next value
102 * reported after passing the 10 position in the increasing direction would be
103 * 0.
104 */
105#define USB_HID_ITEM_FLAG_WRAP(flags) ((flags & 0x8) == 0x8)
106
107/**
108 * Indicates whether the raw data from the device has been processed in some
109 * way, and no longer represents a linear relationship between what is
110 * measured and the data that is reported.
111 */
112#define USB_HID_ITEM_FLAG_LINEAR(flags) ((flags & 0x10) == 0x10)
113
114/**
115 * Indicates whether the control has a preferred state to which it will return
116 * when the user is not physically interacting with the control. Push buttons
117 * (as opposed to toggle buttons) and self- centering joysticks are examples.
118 */
119#define USB_HID_ITEM_FLAG_PREFERRED(flags) ((flags & 0x20) == 0x20)
120
121/**
122 * Indicates whether the control has a state in which it is not sending
123 * meaningful data. One possible use of the null state is for controls that
124 * require the user to physically interact with the control in order for it to
125 * report useful data.
126 */
127#define USB_HID_ITEM_FLAG_POSITION(flags) ((flags & 0x40) == 0x40)
128
129/**
130 * Indicates whether the Feature or Output control's value should be changed
131 * by the host or not. Volatile output can change with or without host
132 * interaction. To avoid synchronization problems, volatile controls should be
133 * relative whenever possible.
134 */
135#define USB_HID_ITEM_FLAG_VOLATILE(flags) ((flags & 0x80) == 0x80)
136
137/**
138 * Indicates that the control emits a fixed-size stream of bytes. The contents
139 * of the data field are determined by the application. The contents of the
140 * buffer are not interpreted as a single numeric quantity. Report data
141 * defined by a Buffered Bytes item must be aligned on an 8-bit boundary.
142 */
143#define USB_HID_ITEM_FLAG_BUFFERED(flags) ((flags & 0x100) == 0x100)
144
145/*---------------------------------------------------------------------------*/
146
147/* MAIN ITEMS */
148
149/**
150 * Main items are used to either define or group certain types of data fields
151 * within a Report descriptor.
152 */
153#define USB_HID_TAG_CLASS_MAIN 0x0
154
155/**
156 * An Input item describes information about the data provided by one or more
157 * physical controls. An application can use this information to interpret the
158 * data provided by the device. All data fields defined in a single item share
159 * an identical data format.
160 */
161#define USB_HID_REPORT_TAG_INPUT 0x8
162
163/**
164 * The Output item is used to define an output data field in a report. This
165 * item is similar to an Input item except it describes data sent to the
166 * device—for example, LED states.
167 */
168#define USB_HID_REPORT_TAG_OUTPUT 0x9
169
170/**
171 * Feature items describe device configuration information that can be sent to
172 * the device.
173 */
174#define USB_HID_REPORT_TAG_FEATURE 0xB
175
176/**
177 * A Collection item identifies a relationship between two or more data
178 * (Input, Output, or Feature.)
179 */
180#define USB_HID_REPORT_TAG_COLLECTION 0xA
181
182/**
183 * While the Collection item opens a collection of data, the End Collection
184 * item closes a collection.
185 */
186#define USB_HID_REPORT_TAG_END_COLLECTION 0xC
187
188/*---------------------------------------------------------------------------*/
189
190/* GLOBAL ITEMS */
191
192/**
193 * Global items describe rather than define data from a control.
194 */
195#define USB_HID_TAG_CLASS_GLOBAL 0x1
196
197/**
198 * Unsigned integer specifying the current Usage Page. Since a usage are 32
199 * bit values, Usage Page items can be used to conserve space in a report
200 * descriptor by setting the high order 16 bits of a subsequent usages. Any
201 * usage that follows which is defines 16 bits or less is interpreted as a
202 * Usage ID and concatenated with the Usage Page to form a 32 bit Usage.
203 */
204#define USB_HID_REPORT_TAG_USAGE_PAGE 0x0
205
206/**
207 * Extent value in logical units. This is the minimum value that a variable
208 * or array item will report. For example, a mouse reporting x position values
209 * from 0 to 128 would have a Logical Minimum of 0 and a Logical Maximum of
210 * 128.
211 */
212#define USB_HID_REPORT_TAG_LOGICAL_MINIMUM 0x1
213
214/**
215 * Extent value in logical units. This is the maximum value that a variable
216 * or array item will report.
217 */
218#define USB_HID_REPORT_TAG_LOGICAL_MAXIMUM 0x2
219
220/**
221 * Minimum value for the physical extent of a variable item. This represents
222 * the Logical Minimum with units applied to it.
223 */
224#define USB_HID_REPORT_TAG_PHYSICAL_MINIMUM 0x3
225
226/**
227 * Maximum value for the physical extent of a variable item.
228 */
229#define USB_HID_REPORT_TAG_PHYSICAL_MAXIMUM 0x4
230
231/**
232 * Value of the unit exponent in base 10. See the table later in this section
233 * for more information.
234 */
235#define USB_HID_REPORT_TAG_UNIT_EXPONENT 0x5
236
237/**
238 * Unit values.
239 */
240#define USB_HID_REPORT_TAG_UNIT 0x6
241
242/**
243 * Unsigned integer specifying the size of the report fields in bits. This
244 * allows the parser to build an item map for the report handler to use.
245 */
246#define USB_HID_REPORT_TAG_REPORT_SIZE 0x7
247
248/**
249 * Unsigned value that specifies the Report ID. If a Report ID tag is used
250 * anywhere in Report descriptor, all data reports for the device are preceded
251 * by a single byte ID field. All items succeeding the first Report ID tag but
252 * preceding a second Report ID tag are included in a report prefixed by a
253 * 1-byte ID. All items succeeding the second but preceding a third Report ID
254 * tag are included in a second report prefixed by a second ID, and so on.
255 */
256#define USB_HID_REPORT_TAG_REPORT_ID 0x8
257
258/**
259 * Unsigned integer specifying the number of data fields for the item;
260 * determines how many fields are included in the report for this particular
261 * item (and consequently how many bits are added to the report).
262 */
263#define USB_HID_REPORT_TAG_REPORT_COUNT 0x9
264
265/**
266 * Places a copy of the global item state table on the stack.
267 */
268#define USB_HID_REPORT_TAG_PUSH 0xA
269
270/**
271 * Replaces the item state table with the top structure from the stack.
272 */
273#define USB_HID_REPORT_TAG_POP 0xB
274
275/*---------------------------------------------------------------------------*/
276
277/* LOCAL ITEMS */
278
279/**
280 * Local item tags define characteristics of controls. These items do not
281 * carry over to the next Main item. If a Main item defines more than one
282 * control, it may be preceded by several similar Local item tags. For
283 * example, an Input item may have several Usage tags associated with it, one
284 * for each control.
285 */
286#define USB_HID_TAG_CLASS_LOCAL 0x2
287
288/**
289 * Usage index for an item usage; represents a suggested usage for the item or
290 * collection. In the case where an item represents multiple controls, a Usage
291 * tag may suggest a usage for every variable or element in an array.
292 */
293#define USB_HID_REPORT_TAG_USAGE 0x0
294
295/**
296 * Defines the starting usage associated with an array or bitmap.
297 */
298#define USB_HID_REPORT_TAG_USAGE_MINIMUM 0x1
299
300/**
301 * Defines the ending usage associated with an array or bitmap.
302 */
303#define USB_HID_REPORT_TAG_USAGE_MAXIMUM 0x2
304
305/**
306 * Determines the body part used for a control. Index points to a designator
307 * in the Physical descriptor.
308 */
309#define USB_HID_REPORT_TAG_DESIGNATOR_INDEX 0x3
310
311/**
312 * Defines the index of the starting designator associated with an array or
313 * bitmap.
314 */
315#define USB_HID_REPORT_TAG_DESIGNATOR_MINIMUM 0x4
316
317/**
318 * Defines the index of the ending designator associated with an array or
319 * bitmap.
320 */
321#define USB_HID_REPORT_TAG_DESIGNATOR_MAXIMUM 0x5
322
323/**
324 * String index for a String descriptor; allows a string to be associated with
325 * a particular item or control.
326 */
327#define USB_HID_REPORT_TAG_STRING_INDEX 0x7
328
329/**
330 * Specifies the first string index when assigning a group of sequential
331 * strings to controls in an array or bitmap.
332 */
333#define USB_HID_REPORT_TAG_STRING_MINIMUM 0x8
334
335/**
336 * Specifies the last string index when assigning a group of sequential
337 * strings to controls in an array or bitmap.
338 */
339#define USB_HID_REPORT_TAG_STRING_MAXIMUM 0x9
340
341/**
342 * Defines the beginning or end of a set of local items (1 = open set, 0 =
343 * close set).
344 *
345 * Usages other than the first (most preferred) usage defined are not
346 * accessible by system software.
347 */
348#define USB_HID_REPORT_TAG_DELIMITER 0xA
349
350/*---------------------------------------------------------------------------*/
351
352#endif
353/**
354 * @}
355 */
Note: See TracBrowser for help on using the repository browser.