source: mainline/uspace/lib/usb/src/hidparser.c@ 3b77628

lfn serial ticket/834-toolchain-update topic/msim-upgrade topic/simplify-dev-export
Last change on this file since 3b77628 was 3b77628, checked in by Vojtech Horky <vojtechhorky@…>, 14 years ago

Doxygen comment fixes

Mainly proper subgrouping and some missing @param comments.

  • Property mode set to 100644
File size: 3.9 KB
Line 
1/*
2 * Copyright (c) 2010 Vojtech Horky
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 HID parser implementation.
34 */
35#include <usb/classes/hidparser.h>
36#include <errno.h>
37
38/** Parse HID report descriptor.
39 *
40 * @param parser Opaque HID report parser structure.
41 * @param data Data describing the report.
42 * @return Error code.
43 */
44int usb_hid_parse_report_descriptor(usb_hid_report_parser_t *parser,
45 const uint8_t *data, size_t size)
46{
47 return ENOTSUP;
48}
49
50/** Parse and act upon a HID report.
51 *
52 * @see usb_hid_parse_report_descriptor
53 *
54 * @param parser Opaque HID report parser structure.
55 * @param data Data for the report.
56 * @param callbacks Callbacks for report actions.
57 * @param arg Custom argument (passed through to the callbacks).
58 * @return Error code.
59 */
60int usb_hid_parse_report(const usb_hid_report_parser_t *parser,
61 const uint8_t *data, size_t size,
62 const usb_hid_report_in_callbacks_t *callbacks, void *arg)
63{
64 int i;
65
66 /* main parsing loop */
67 while(0){
68 }
69
70
71 uint8_t keys[6];
72
73 for (i = 0; i < 6; ++i) {
74 keys[i] = data[i];
75 }
76
77 callbacks->keyboard(keys, 6, 0, arg);
78
79 return EOK;
80}
81
82/** Free the HID report parser structure
83 *
84 * @param parser Opaque HID report parser structure
85 * @return Error code
86 */
87int usb_hid_free_report_parser(usb_hid_report_parser_t *parser)
88{
89
90 return EOK;
91}
92
93
94/**
95 * Parse input report.
96 *
97 * @param data Data for report
98 * @param size Size of report
99 * @param callbacks Callbacks for report actions
100 * @param arg Custom arguments
101 *
102 * @return Error code
103 */
104int usb_hid_boot_keyboard_input_report(const uint8_t *data, size_t size,
105 const usb_hid_report_in_callbacks_t *callbacks, void *arg)
106{
107 int i;
108 usb_hid_report_item_t item;
109
110 /* fill item due to the boot protocol report descriptor */
111 // modifier keys are in the first byte
112 uint8_t modifiers = data[0];
113
114 item.offset = 2; /* second byte is reserved */
115 item.size = 8;
116 item.count = 6;
117 item.usage_min = 0;
118 item.usage_max = 255;
119 item.logical_min = 0;
120 item.logical_max = 255;
121
122 if(size != 8){
123 return -1;
124 }
125
126 uint8_t keys[6];
127 for(i=item.offset; i<item.count; i++) {
128 keys[i-2] = data[i];
129 }
130
131 callbacks->keyboard(keys, 6, modifiers, arg);
132 return EOK;
133}
134
135/**
136 * Makes output report for keyboard boot protocol
137 *
138 * @param leds
139 * @param output Output report data buffer
140 * @param size Size of the output buffer
141 * @return Error code
142 */
143int usb_hid_boot_keyboard_output_report(uint8_t leds, uint8_t *data, size_t size)
144{
145 if(size != 1){
146 return -1;
147 }
148
149 /* used only first five bits, others are only padding*/
150 *data = leds;
151 return EOK;
152}
153
154/**
155 * @}
156 */
Note: See TracBrowser for help on using the repository browser.