2 * Copyright (c) 2011 Matej Klonfar
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
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.
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.
29 /** @addtogroup libusb
33 * USB HID report descriptor and report data parser
35 #ifndef LIBUSB_HIDPATH_H_
36 #define LIBUSB_HIDPATH_H_
39 #include <usb/hid/hidparser.h>
46 * Flags of usage paths comparison modes.
49 /** Wanted usage path must be exactly the same as the searched one. This
50 * option cannot be combined with the others.
52 #define USB_HID_PATH_COMPARE_STRICT 0
55 * Wanted usage path must be the suffix in the searched one.
57 #define USB_HID_PATH_COMPARE_END 1
60 * Only usage page are compared along the usage path. This option can be
61 * combined with others.
63 #define USB_HID_PATH_COMPARE_USAGE_PAGE_ONLY 2
66 * Searched usage page must be prefix of the other one.
68 #define USB_HID_PATH_COMPARE_BEGIN 4
71 * Searched couple of usage page and usage can be anywhere in usage path.
72 * This option is deprecated.
74 #define USB_HID_PATH_COMPARE_ANYWHERE 8
78 * Item of usage path structure. Last item of linked list describes one item
79 * in report, the others describe superior Collection tags. Usage and Usage
80 * page of report item can be changed due to data in report.
83 /** Usage page of report item. Zero when usage page can be changed. */
85 /** Usage of report item. Zero when usage can be changed. */
88 /** Attribute of Collection tag in report descriptor*/
91 /** Link to usb_hid_report_path_t.items list */
92 link_t rpath_items_link
;
93 } usb_hid_report_usage_path_t
;
98 * USB HID usage path structure.
101 /** Length of usage path */
104 /** Report id. Zero is reserved and means that report id is not used.
108 /** Link to usb_hid_report_path_t.collection_paths list. */
111 /** List of usage path items. */
112 list_t items
; /* of usb_hid_report_usage_path_t */
113 } usb_hid_report_path_t
;
116 usb_hid_report_path_t
*usb_hid_report_path(void);
118 void usb_hid_report_path_free(usb_hid_report_path_t
*path
);
120 errno_t
usb_hid_report_path_set_report_id(usb_hid_report_path_t
*usage_path
,
123 errno_t
usb_hid_report_path_append_item(usb_hid_report_path_t
*usage_path
,
124 int32_t usage_page
, int32_t usage
);
126 void usb_hid_report_remove_last_item(usb_hid_report_path_t
*usage_path
);
128 void usb_hid_report_null_last_item(usb_hid_report_path_t
*usage_path
);
130 void usb_hid_report_set_last_item(usb_hid_report_path_t
*usage_path
,
131 int32_t tag
, int32_t data
);
133 int usb_hid_report_compare_usage_path(usb_hid_report_path_t
*report_path
,
134 usb_hid_report_path_t
*path
, int flags
);
136 usb_hid_report_path_t
*usb_hid_report_path_clone(
137 usb_hid_report_path_t
*usage_path
);
139 void usb_hid_print_usage_path(usb_hid_report_path_t
*path
);