~martin-decky/helenos/rcu

« back to all changes in this revision

Viewing changes to uspace/drv/usbhid/usbhid.h

  • Committer: Jakub Jermar
  • Date: 2011-06-07 21:31:35 UTC
  • mfrom: (708.2.1 mainline)
  • Revision ID: jakub@jermar.eu-20110607213135-cxz8vhxq21pij1gb
Merge USB support.

Changes from bzr://helenos-usb.bzr.sourceforge.net/bzrroot/helenos-usb/mainline:

- replaced '-' with '_' in new driver names
- USB libs are built for each architecture
- devman starts early
- sys_thread_udelay() uses generic delay()
- sys_as_create_area() now creates cacheable areas by default

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * Copyright (c) 2011 Lubos Slovak
 
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 drvusbhid
 
30
 * @{
 
31
 */
 
32
/** @file
 
33
 * USB HID driver API.
 
34
 */
 
35
 
 
36
#ifndef USB_HID_USBHID_H_
 
37
#define USB_HID_USBHID_H_
 
38
 
 
39
#include <stdint.h>
 
40
 
 
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>
 
46
#include <bool.h>
 
47
 
 
48
struct usb_hid_dev;
 
49
 
 
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 *,
 
53
                                    size_t);
 
54
typedef int (*usb_hid_driver_poll_ended)(struct usb_hid_dev *, void *data, 
 
55
                                         bool reason);
 
56
 
 
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. */
 
67
        void *data;
 
68
} usb_hid_subdriver_t;
 
69
 
 
70
/*----------------------------------------------------------------------------*/
 
71
/**
 
72
 * Structure for holding general HID device data.
 
73
 */
 
74
typedef struct usb_hid_dev {
 
75
        /** Structure holding generic USB device information. */
 
76
        usb_device_t *usb_dev;
 
77
        
 
78
        /** Index of the polling pipe in usb_hid_endpoints array. */
 
79
        int poll_pipe_index;
 
80
        
 
81
        /** Subdrivers. */
 
82
        usb_hid_subdriver_t *subdrivers;
 
83
        
 
84
        /** Number of subdrivers. */
 
85
        int subdriver_count;
 
86
        
 
87
        /** Report descriptor. */
 
88
        uint8_t *report_desc;
 
89
 
 
90
        /** Report descriptor size. */
 
91
        size_t report_desc_size;
 
92
        
 
93
        /** HID Report parser. */
 
94
        usb_hid_report_t *report;
 
95
        
 
96
        uint8_t *input_report;
 
97
        
 
98
        size_t input_report_size;
 
99
        size_t max_input_report_size;
 
100
        
 
101
        int report_nr;
 
102
} usb_hid_dev_t;
 
103
 
 
104
/*----------------------------------------------------------------------------*/
 
105
 
 
106
enum {
 
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
 
111
};
 
112
 
 
113
usb_endpoint_description_t *usb_hid_endpoints[USB_HID_POLL_EP_COUNT + 1];
 
114
 
 
115
/*----------------------------------------------------------------------------*/
 
116
 
 
117
usb_hid_dev_t *usb_hid_new(void);
 
118
 
 
119
int usb_hid_init(usb_hid_dev_t *hid_dev, usb_device_t *dev);
 
120
 
 
121
bool usb_hid_polling_callback(usb_device_t *dev, uint8_t *buffer, 
 
122
    size_t buffer_size, void *arg);
 
123
 
 
124
void usb_hid_polling_ended_callback(usb_device_t *dev, bool reason, 
 
125
     void *arg);
 
126
 
 
127
void usb_hid_new_report(usb_hid_dev_t *hid_dev);
 
128
 
 
129
int usb_hid_report_number(usb_hid_dev_t *hid_dev);
 
130
 
 
131
void usb_hid_free(usb_hid_dev_t **hid_dev);
 
132
 
 
133
#endif /* USB_HID_USBHID_H_ */
 
134
 
 
135
/**
 
136
 * @}
 
137
 */