source: mainline/uspace/lib/usb/src/hidparser.c@ 11797d5

lfn serial ticket/834-toolchain-update topic/msim-upgrade topic/simplify-dev-export
Last change on this file since 11797d5 was 6336b6e, checked in by Lubos Slovak <lubos.slovak@…>, 14 years ago

Communication with console (not working yet)

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