Changes in uspace/lib/usbhid/include/usb/hid/hid_report_items.h [74b1e40:160b75e] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/usbhid/include/usb/hid/hid_report_items.h
r74b1e40 r160b75e 27 27 */ 28 28 29 /** @addtogroup libusb 29 /** @addtogroup libusbhid 30 30 * @{ 31 31 */ 32 32 /** @file 33 * @brief USB HID Report descriptor item tags.33 * @brief USB HID parser. 34 34 */ 35 #ifndef LIBUSB _HID_REPORT_ITEMS_H_36 #define LIBUSB _HID_REPORT_ITEMS_H_35 #ifndef LIBUSBHID_HID_REPORT_ITEMS_H_ 36 #define LIBUSBHID_HID_REPORT_ITEMS_H_ 37 37 38 38 #include <stdint.h> 39 39 40 /*---------------------------------------------------------------------------*/ 41 /* 40 /** 42 41 * Item prefix 43 42 */ 44 45 /** Returns size of item data in bytes */46 43 #define USB_HID_ITEM_SIZE(data) ((uint8_t)(data & 0x3)) 47 48 /** Returns item tag */49 44 #define USB_HID_ITEM_TAG(data) ((uint8_t)((data & 0xF0) >> 4)) 50 51 /** Returns class of item tag */52 45 #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 not55 * supported. */56 46 #define USB_HID_ITEM_IS_LONG(data) (data == 0xFE) 57 47 58 /*---------------------------------------------------------------------------*/59 /*60 * Extended usage macros61 */62 48 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 /* 49 /** 74 50 * Input/Output/Feature Item flags 75 51 */ 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 */ 52 /** Constant (1) / Variable (0) */ 82 53 #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 */ 54 /** Variable (1) / Array (0) */ 88 55 #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 */ 56 /** Absolute / Relative*/ 96 57 #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 */ 58 /** Wrap / No Wrap */ 105 59 #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 some109 * way, and no longer represents a linear relationship between what is110 * measured and the data that is reported.111 */112 60 #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 return116 * when the user is not physically interacting with the control. Push buttons117 * (as opposed to toggle buttons) and self- centering joysticks are examples.118 */119 61 #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 sending123 * meaningful data. One possible use of the null state is for controls that124 * require the user to physically interact with the control in order for it to125 * report useful data.126 */127 62 #define USB_HID_ITEM_FLAG_POSITION(flags) ((flags & 0x40) == 0x40) 128 129 /**130 * Indicates whether the Feature or Output control's value should be changed131 * by the host or not. Volatile output can change with or without host132 * interaction. To avoid synchronization problems, volatile controls should be133 * relative whenever possible.134 */135 63 #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 contents139 * of the data field are determined by the application. The contents of the140 * buffer are not interpreted as a single numeric quantity. Report data141 * defined by a Buffered Bytes item must be aligned on an 8-bit boundary.142 */143 64 #define USB_HID_ITEM_FLAG_BUFFERED(flags) ((flags & 0x100) == 0x100) 144 65 145 /*---------------------------------------------------------------------------*/146 147 66 /* 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 */ 67 #define USB_HID_TAG_CLASS_MAIN 0x0 68 #define USB_HID_REPORT_TAG_INPUT 0x8 69 #define USB_HID_REPORT_TAG_OUTPUT 0x9 70 #define USB_HID_REPORT_TAG_FEATURE 0xB 180 71 #define USB_HID_REPORT_TAG_COLLECTION 0xA 181 182 /**183 * While the Collection item opens a collection of data, the End Collection184 * item closes a collection.185 */186 72 #define USB_HID_REPORT_TAG_END_COLLECTION 0xC 187 73 188 /*---------------------------------------------------------------------------*/ 74 /* GLOBAL ITEMS */ 75 #define USB_HID_TAG_CLASS_GLOBAL 0x1 76 #define USB_HID_REPORT_TAG_USAGE_PAGE 0x0 77 #define USB_HID_REPORT_TAG_LOGICAL_MINIMUM 0x1 78 #define USB_HID_REPORT_TAG_LOGICAL_MAXIMUM 0x2 79 #define USB_HID_REPORT_TAG_PHYSICAL_MINIMUM 0x3 80 #define USB_HID_REPORT_TAG_PHYSICAL_MAXIMUM 0x4 81 #define USB_HID_REPORT_TAG_UNIT_EXPONENT 0x5 82 #define USB_HID_REPORT_TAG_UNIT 0x6 83 #define USB_HID_REPORT_TAG_REPORT_SIZE 0x7 84 #define USB_HID_REPORT_TAG_REPORT_ID 0x8 85 #define USB_HID_REPORT_TAG_REPORT_COUNT 0x9 86 #define USB_HID_REPORT_TAG_PUSH 0xA 87 #define USB_HID_REPORT_TAG_POP 0xB 189 88 190 /* GLOBAL ITEMS */191 192 /**193 * Global items describe rather than define data from a control.194 */195 #define USB_HID_TAG_CLASS_GLOBAL 0x1196 197 /**198 * Unsigned integer specifying the current Usage Page. Since a usage are 32199 * bit values, Usage Page items can be used to conserve space in a report200 * descriptor by setting the high order 16 bits of a subsequent usages. Any201 * usage that follows which is defines 16 bits or less is interpreted as a202 * Usage ID and concatenated with the Usage Page to form a 32 bit Usage.203 */204 #define USB_HID_REPORT_TAG_USAGE_PAGE 0x0205 206 /**207 * Extent value in logical units. This is the minimum value that a variable208 * or array item will report. For example, a mouse reporting x position values209 * from 0 to 128 would have a Logical Minimum of 0 and a Logical Maximum of210 * 128.211 */212 #define USB_HID_REPORT_TAG_LOGICAL_MINIMUM 0x1213 214 /**215 * Extent value in logical units. This is the maximum value that a variable216 * or array item will report.217 */218 #define USB_HID_REPORT_TAG_LOGICAL_MAXIMUM 0x2219 220 /**221 * Minimum value for the physical extent of a variable item. This represents222 * the Logical Minimum with units applied to it.223 */224 #define USB_HID_REPORT_TAG_PHYSICAL_MINIMUM 0x3225 226 /**227 * Maximum value for the physical extent of a variable item.228 */229 #define USB_HID_REPORT_TAG_PHYSICAL_MAXIMUM 0x4230 231 /**232 * Value of the unit exponent in base 10. See the table later in this section233 * for more information.234 */235 #define USB_HID_REPORT_TAG_UNIT_EXPONENT 0x5236 237 /**238 * Unit values.239 */240 #define USB_HID_REPORT_TAG_UNIT 0x6241 242 /**243 * Unsigned integer specifying the size of the report fields in bits. This244 * allows the parser to build an item map for the report handler to use.245 */246 #define USB_HID_REPORT_TAG_REPORT_SIZE 0x7247 248 /**249 * Unsigned value that specifies the Report ID. If a Report ID tag is used250 * anywhere in Report descriptor, all data reports for the device are preceded251 * by a single byte ID field. All items succeeding the first Report ID tag but252 * preceding a second Report ID tag are included in a report prefixed by a253 * 1-byte ID. All items succeeding the second but preceding a third Report ID254 * tag are included in a second report prefixed by a second ID, and so on.255 */256 #define USB_HID_REPORT_TAG_REPORT_ID 0x8257 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 particular261 * item (and consequently how many bits are added to the report).262 */263 #define USB_HID_REPORT_TAG_REPORT_COUNT 0x9264 265 /**266 * Places a copy of the global item state table on the stack.267 */268 #define USB_HID_REPORT_TAG_PUSH 0xA269 270 /**271 * Replaces the item state table with the top structure from the stack.272 */273 #define USB_HID_REPORT_TAG_POP 0xB274 275 /*---------------------------------------------------------------------------*/276 89 277 90 /* 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 */ 91 #define USB_HID_TAG_CLASS_LOCAL 0x2 92 #define USB_HID_REPORT_TAG_USAGE 0x0 93 #define USB_HID_REPORT_TAG_USAGE_MINIMUM 0x1 94 #define USB_HID_REPORT_TAG_USAGE_MAXIMUM 0x2 95 #define USB_HID_REPORT_TAG_DESIGNATOR_INDEX 0x3 315 96 #define USB_HID_REPORT_TAG_DESIGNATOR_MINIMUM 0x4 316 317 /**318 * Defines the index of the ending designator associated with an array or319 * bitmap.320 */321 97 #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 /*---------------------------------------------------------------------------*/ 98 #define USB_HID_REPORT_TAG_STRING_INDEX 0x7 99 #define USB_HID_REPORT_TAG_STRING_MINIMUM 0x8 100 #define USB_HID_REPORT_TAG_STRING_MAXIMUM 0x9 101 #define USB_HID_REPORT_TAG_DELIMITER 0xA 351 102 352 103 #endif
Note:
See TracChangeset
for help on using the changeset viewer.