Changes in uspace/lib/usbhid/include/usb/hid/hidtypes.h [160b75e:74b1e40] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/usbhid/include/usb/hid/hidtypes.h
r160b75e r74b1e40 27 27 */ 28 28 29 /** @addtogroup libusb hid29 /** @addtogroup libusb 30 30 * @{ 31 31 */ 32 32 /** @file 33 * USB HID report descriptor and report data parser34 */ 35 #ifndef LIBUSB HID_HIDTYPES_H_36 #define LIBUSB HID_HIDTYPES_H_33 * Basic data structures for USB HID Report descriptor and report parser. 34 */ 35 #ifndef LIBUSB_HIDTYPES_H_ 36 #define LIBUSB_HIDTYPES_H_ 37 37 38 38 #include <stdint.h> 39 39 #include <adt/list.h> 40 40 41 #define USB_HID_MAX_USAGES 20 42 43 #define USB_HID_UINT32_TO_INT32(x, size) ((((x) & (1 << ((size) - 1))) != 0) ? -(~(x - 1) & ((1 << size) - 1)) : (x)) //(-(~((x) - 1))) 44 #define USB_HID_INT32_TO_UINT32(x, size) (((x) < 0 ) ? ((1 << (size)) + (x)) : (x)) 45 46 41 /*---------------------------------------------------------------------------*/ 42 43 /** 44 * Maximum amount of specified usages for one report item 45 */ 46 #define USB_HID_MAX_USAGES 0xffff 47 48 /** 49 * Converts integer from unsigned two's complement format format to signed 50 * one. 51 * 52 * @param x Number to convert 53 * @param size Length of the unsigned number in bites 54 * @return signed int 55 */ 56 #define USB_HID_UINT32_TO_INT32(x, size) \ 57 ((((x) & (1 << ((size) - 1))) != 0) ? \ 58 -(~((x) - 1) & ((1 << size) - 1)) : (x)) 59 60 /** 61 * Convert integer from signed format to unsigned. If number is negative the 62 * two's complement format is used. 63 * 64 * @param x Number to convert 65 * @param size Length of result number in bites 66 * @return unsigned int 67 */ 68 #define USB_HID_INT32_TO_UINT32(x, size) \ 69 (((x) < 0 ) ? ((1 << (size)) + (x)) : (x)) 70 71 /*---------------------------------------------------------------------------*/ 72 73 /** 74 * Report type 75 */ 47 76 typedef enum { 48 77 USB_HID_REPORT_TYPE_INPUT = 1, … … 51 80 } usb_hid_report_type_t; 52 81 53 82 /*---------------------------------------------------------------------------*/ 83 84 /** 85 * Description of all reports described in one report descriptor. 86 */ 54 87 typedef struct { 55 /** */88 /** Count of available reports. */ 56 89 int report_count; 57 link_t reports; /** list of usb_hid_report_description_t */ 58 90 91 /** Head of linked list of description of reports. */ 92 link_t reports; 93 94 /** Head of linked list of all used usage/collection paths. */ 59 95 link_t collection_paths; 96 97 /** Length of list of usage paths. */ 60 98 int collection_paths_count; 61 99 100 /** Flag whether report ids are used. */ 62 101 int use_report_ids; 102 103 /** Report id of last parsed report. */ 63 104 uint8_t last_report_id; 64 105 65 106 } usb_hid_report_t; 66 107 /*---------------------------------------------------------------------------*/ 108 109 /** 110 * Description of one concrete report 111 */ 67 112 typedef struct { 113 /** Report id. Zero when no report id is used. */ 68 114 uint8_t report_id; 115 116 /** Type of report */ 69 117 usb_hid_report_type_t type; 70 118 119 /** Bit length of the report */ 71 120 size_t bit_length; 121 122 /** Number of items in report */ 72 123 size_t item_length; 73 124 74 link_t report_items; /** list of report items (fields) */ 75 125 /** Linked list of report items in report */ 126 link_t report_items; 127 128 /** Linked list of descriptions. */ 76 129 link_t link; 77 130 } usb_hid_report_description_t; 78 131 /*---------------------------------------------------------------------------*/ 132 133 /** 134 * Description of one field/item in report 135 */ 79 136 typedef struct { 80 137 /** Bit offset of the field */ 81 138 int offset; 139 140 /** Bit size of the field */ 82 141 size_t size; 83 142 143 /** Usage page. Zero when usage page can be changed. */ 84 144 uint16_t usage_page; 145 146 /** Usage. Zero when usage can be changed. */ 85 147 uint16_t usage; 86 148 149 /** Item's attributes */ 87 150 uint8_t item_flags; 151 152 /** Usage/Collection path of the field. */ 88 153 usb_hid_report_path_t *collection_path; 89 154 155 /** 156 * The lowest valid logical value (value with the device operates) 157 */ 90 158 int32_t logical_minimum; 159 160 /** 161 * The greatest valid logical value 162 */ 91 163 int32_t logical_maximum; 164 165 /** 166 * The lowest valid physical value (value with the system operates) 167 */ 92 168 int32_t physical_minimum; 169 170 /** The greatest valid physical value */ 93 171 int32_t physical_maximum; 94 uint32_t usage_minimum; 95 uint32_t usage_maximum; 172 173 /** The lowest valid usage index */ 174 int32_t usage_minimum; 175 176 /** The greatest valid usage index */ 177 int32_t usage_maximum; 178 179 /** Unit of the value */ 96 180 uint32_t unit; 181 182 /** Unit exponent */ 97 183 uint32_t unit_exponent; 98 99 184 185 /** Array of possible usages */ 186 uint32_t *usages; 187 188 /** Size of the array of usages */ 189 size_t usages_count; 190 191 /** Parsed value */ 100 192 int32_t value; 101 193 194 /** List to another report items */ 102 195 link_t link; 103 196 } usb_hid_report_field_t; 104 197 105 106 107 /** 108 * state table198 /*---------------------------------------------------------------------------*/ 199 200 /** 201 * State table for report descriptor parsing 109 202 */ 110 203 typedef struct { … … 112 205 int32_t id; 113 206 114 /** */207 /** Extended usage page */ 115 208 uint16_t extended_usage_page; 209 210 /** Array of usages specified for this item */ 116 211 uint32_t usages[USB_HID_MAX_USAGES]; 212 213 /** Length of usages array */ 117 214 int usages_count; 118 215 119 /** */216 /** Usage page*/ 120 217 uint32_t usage_page; 121 218 122 /** */ 123 uint32_t usage_minimum; 124 /** */ 125 uint32_t usage_maximum; 126 /** */ 219 /** Minimum valid usage index */ 220 int32_t usage_minimum; 221 222 /** Maximum valid usage index */ 223 int32_t usage_maximum; 224 225 /** Minimum valid logical value */ 127 226 int32_t logical_minimum; 128 /** */ 227 228 /** Maximum valid logical value */ 129 229 int32_t logical_maximum; 130 /** */ 230 231 /** Length of the items in bits*/ 131 232 int32_t size; 132 /** */ 233 234 /** COunt of items*/ 133 235 int32_t count; 134 /** */ 236 237 /** Bit offset of the item in report */ 135 238 size_t offset; 136 /** */ 239 240 /** Unit exponent */ 137 241 int32_t unit_exponent; 138 /** */242 /** Unit of the value */ 139 243 int32_t unit; 140 244 141 /** */245 /** String index */ 142 246 uint32_t string_index; 143 /** */ 247 248 /** Minimum valid string index */ 144 249 uint32_t string_minimum; 145 /** */ 250 251 /** Maximum valid string index */ 146 252 uint32_t string_maximum; 147 /** */ 253 254 /** The designator index */ 148 255 uint32_t designator_index; 149 /** */ 256 257 /** Minimum valid designator value*/ 150 258 uint32_t designator_minimum; 151 /** */ 259 260 /** Maximum valid designator value*/ 152 261 uint32_t designator_maximum; 153 /** */ 262 263 /** Minimal valid physical value*/ 154 264 int32_t physical_minimum; 155 /** */ 265 266 /** Maximal valid physical value */ 156 267 int32_t physical_maximum; 157 268 158 /** */269 /** Items attributes*/ 159 270 uint8_t item_flags; 160 271 272 /** Report type */ 161 273 usb_hid_report_type_t type; 162 274 163 275 /** current collection path*/ 164 276 usb_hid_report_path_t *usage_path; 165 /** */ 277 278 /** Unused*/ 166 279 link_t link; 167 280 168 281 int in_delimiter; 169 282 } usb_hid_report_item_t; 170 171 /** HID parser callbacks for IN items. */ 172 typedef struct { 173 /** Callback for keyboard. 174 * 175 * @param key_codes Array of pressed key (including modifiers). 176 * @param count Length of @p key_codes. 177 * @param arg Custom argument. 178 */ 179 void (*keyboard)(const uint8_t *key_codes, size_t count, const uint8_t report_id, void *arg); 180 } usb_hid_report_in_callbacks_t; 181 182 283 /*---------------------------------------------------------------------------*/ 284 /** 285 * Enum of the keyboard modifiers 286 */ 183 287 typedef enum { 184 288 USB_HID_MOD_LCTRL = 0x01, … … 204 308 USB_HID_MOD_RGUI 205 309 }; 310 /*---------------------------------------------------------------------------*/ 311 206 312 207 313 #endif
Note:
See TracChangeset
for help on using the changeset viewer.