2
* Copyright (c) 2011 Lubos Slovak
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 drvusbhid
36
#ifndef USB_HID_USBHID_H_
37
#define USB_HID_USBHID_H_
41
#include <usb/hid/hidparser.h>
42
#include <ddf/driver.h>
43
#include <usb/dev/pipes.h>
44
#include <usb/dev/driver.h>
45
#include <usb/hid/hid.h>
50
typedef int (*usb_hid_driver_init_t)(struct usb_hid_dev *, void **data);
51
typedef void (*usb_hid_driver_deinit_t)(struct usb_hid_dev *, void *data);
52
typedef bool (*usb_hid_driver_poll)(struct usb_hid_dev *, void *data, uint8_t *,
54
typedef int (*usb_hid_driver_poll_ended)(struct usb_hid_dev *, void *data,
57
typedef struct usb_hid_subdriver {
58
/** Function to be called when initializing HID device. */
59
usb_hid_driver_init_t init;
60
/** Function to be called when destroying the HID device structure. */
61
usb_hid_driver_deinit_t deinit;
62
/** Function to be called when data arrives from the device. */
63
usb_hid_driver_poll poll;
64
/** Function to be called when polling ends. */
65
usb_hid_driver_poll_ended poll_end;
66
/** Arbitrary data needed by the subdriver. */
68
} usb_hid_subdriver_t;
70
/*----------------------------------------------------------------------------*/
72
* Structure for holding general HID device data.
74
typedef struct usb_hid_dev {
75
/** Structure holding generic USB device information. */
76
usb_device_t *usb_dev;
78
/** Index of the polling pipe in usb_hid_endpoints array. */
82
usb_hid_subdriver_t *subdrivers;
84
/** Number of subdrivers. */
87
/** Report descriptor. */
90
/** Report descriptor size. */
91
size_t report_desc_size;
93
/** HID Report parser. */
94
usb_hid_report_t *report;
96
uint8_t *input_report;
98
size_t input_report_size;
99
size_t max_input_report_size;
104
/*----------------------------------------------------------------------------*/
107
USB_HID_KBD_POLL_EP_NO = 0,
108
USB_HID_MOUSE_POLL_EP_NO = 1,
109
USB_HID_GENERIC_POLL_EP_NO = 2,
110
USB_HID_POLL_EP_COUNT = 3
113
usb_endpoint_description_t *usb_hid_endpoints[USB_HID_POLL_EP_COUNT + 1];
115
/*----------------------------------------------------------------------------*/
117
usb_hid_dev_t *usb_hid_new(void);
119
int usb_hid_init(usb_hid_dev_t *hid_dev, usb_device_t *dev);
121
bool usb_hid_polling_callback(usb_device_t *dev, uint8_t *buffer,
122
size_t buffer_size, void *arg);
124
void usb_hid_polling_ended_callback(usb_device_t *dev, bool reason,
127
void usb_hid_new_report(usb_hid_dev_t *hid_dev);
129
int usb_hid_report_number(usb_hid_dev_t *hid_dev);
131
void usb_hid_free(usb_hid_dev_t **hid_dev);
133
#endif /* USB_HID_USBHID_H_ */