Project

General

Profile

Download (6.15 KB) Statistics
| Branch: | Tag: | Revision:
1
#ifndef _USB_HID_H
2
#define _USB_HID_H
3

    
4
/*
5
 *
6
 * Portions of <linux/hid.h>:
7
 *  Copyright (c) 1999 Andreas Gal
8
 *  Copyright (c) 2000-2001 Vojtech Pavlik
9
 *  Copyright (c) 2006-2007 Jiri Kosina
10
 */
11

    
12
/*
13
 * This program is free software; you can redistribute it and/or modify
14
 * it under the terms of the GNU General Public License as published by
15
 * the Free Software Foundation; either version 2 of the License, or
16
 * (at your option) any later version.
17
 *
18
 * This program is distributed in the hope that it will be useful,
19
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
20
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
21
 * GNU General Public License for more details.
22
 *
23
 * You should have received a copy of the GNU General Public License
24
 * along with this program; if not, write to the Free Software
25
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
26
 *
27
 */
28

    
29
/*
30
 * USB HID (Human Interface Device) interface class code
31
 */
32

    
33
#define USB_INTERFACE_CLASS_HID		3
34

    
35
/*
36
 * USB HID interface subclass and protocol codes
37
 */
38

    
39
#define USB_INTERFACE_SUBCLASS_BOOT	1
40
#define USB_INTERFACE_PROTOCOL_KEYBOARD	1
41
#define USB_INTERFACE_PROTOCOL_MOUSE	2
42

    
43
/*
44
 * HID class requests
45
 */
46

    
47
#define HID_REQ_GET_REPORT		0x01
48
#define HID_REQ_GET_IDLE		0x02
49
#define HID_REQ_GET_PROTOCOL		0x03
50
#define HID_REQ_SET_REPORT		0x09
51
#define HID_REQ_SET_IDLE		0x0A
52
#define HID_REQ_SET_PROTOCOL		0x0B
53

    
54
/*
55
 * HID class descriptor types
56
 */
57

    
58
#define HID_DT_HID			(USB_TYPE_CLASS | 0x01)
59
#define HID_DT_REPORT			(USB_TYPE_CLASS | 0x02)
60
#define HID_DT_PHYSICAL			(USB_TYPE_CLASS | 0x03)
61

    
62
#define HID_MAX_DESCRIPTOR_SIZE		4096
63

    
64
/*
65
 * HID report item format
66
 */
67

    
68
#define HID_ITEM_FORMAT_SHORT	0
69
#define HID_ITEM_FORMAT_LONG	1
70

    
71
/*
72
 * Special tag indicating long items
73
 */
74

    
75
#define HID_ITEM_TAG_LONG	15
76

    
77
/*
78
 * HID report descriptor item type (prefix bit 2,3)
79
 */
80

    
81
#define HID_ITEM_TYPE_MAIN		0
82
#define HID_ITEM_TYPE_GLOBAL		1
83
#define HID_ITEM_TYPE_LOCAL		2
84
#define HID_ITEM_TYPE_RESERVED		3
85

    
86
/*
87
 * HID report descriptor main item tags
88
 */
89

    
90
#define HID_MAIN_ITEM_TAG_INPUT			8
91
#define HID_MAIN_ITEM_TAG_OUTPUT		9
92
#define HID_MAIN_ITEM_TAG_FEATURE		11
93
#define HID_MAIN_ITEM_TAG_BEGIN_COLLECTION	10
94
#define HID_MAIN_ITEM_TAG_END_COLLECTION	12
95

    
96
/*
97
 * HID report descriptor main item contents
98
 */
99

    
100
#define HID_MAIN_ITEM_CONSTANT		0x001
101
#define HID_MAIN_ITEM_VARIABLE		0x002
102
#define HID_MAIN_ITEM_RELATIVE		0x004
103
#define HID_MAIN_ITEM_WRAP		0x008
104
#define HID_MAIN_ITEM_NONLINEAR		0x010
105
#define HID_MAIN_ITEM_NO_PREFERRED	0x020
106
#define HID_MAIN_ITEM_NULL_STATE	0x040
107
#define HID_MAIN_ITEM_VOLATILE		0x080
108
#define HID_MAIN_ITEM_BUFFERED_BYTE	0x100
109

    
110
/*
111
 * HID report descriptor collection item types
112
 */
113

    
114
#define HID_COLLECTION_PHYSICAL		0
115
#define HID_COLLECTION_APPLICATION	1
116
#define HID_COLLECTION_LOGICAL		2
117

    
118
/*
119
 * HID report descriptor global item tags
120
 */
121

    
122
#define HID_GLOBAL_ITEM_TAG_USAGE_PAGE		0
123
#define HID_GLOBAL_ITEM_TAG_LOGICAL_MINIMUM	1
124
#define HID_GLOBAL_ITEM_TAG_LOGICAL_MAXIMUM	2
125
#define HID_GLOBAL_ITEM_TAG_PHYSICAL_MINIMUM	3
126
#define HID_GLOBAL_ITEM_TAG_PHYSICAL_MAXIMUM	4
127
#define HID_GLOBAL_ITEM_TAG_UNIT_EXPONENT	5
128
#define HID_GLOBAL_ITEM_TAG_UNIT		6
129
#define HID_GLOBAL_ITEM_TAG_REPORT_SIZE		7
130
#define HID_GLOBAL_ITEM_TAG_REPORT_ID		8
131
#define HID_GLOBAL_ITEM_TAG_REPORT_COUNT	9
132
#define HID_GLOBAL_ITEM_TAG_PUSH		10
133
#define HID_GLOBAL_ITEM_TAG_POP			11
134

    
135
/*
136
 * HID report descriptor local item tags
137
 */
138

    
139
#define HID_LOCAL_ITEM_TAG_USAGE		0
140
#define HID_LOCAL_ITEM_TAG_USAGE_MINIMUM	1
141
#define HID_LOCAL_ITEM_TAG_USAGE_MAXIMUM	2
142
#define HID_LOCAL_ITEM_TAG_DESIGNATOR_INDEX	3
143
#define HID_LOCAL_ITEM_TAG_DESIGNATOR_MINIMUM	4
144
#define HID_LOCAL_ITEM_TAG_DESIGNATOR_MAXIMUM	5
145
#define HID_LOCAL_ITEM_TAG_STRING_INDEX		7
146
#define HID_LOCAL_ITEM_TAG_STRING_MINIMUM	8
147
#define HID_LOCAL_ITEM_TAG_STRING_MAXIMUM	9
148
#define HID_LOCAL_ITEM_TAG_DELIMITER		10
149

    
150
/*
151
 * HID usage tables
152
 */
153

    
154
#define HID_USAGE_PAGE		0xffff0000
155

    
156
#define HID_UP_UNDEFINED	0x00000000
157
#define HID_UP_GENDESK		0x00010000
158
#define HID_UP_SIMULATION	0x00020000
159
#define HID_UP_KEYBOARD		0x00070000
160
#define HID_UP_LED		0x00080000
161
#define HID_UP_BUTTON		0x00090000
162
#define HID_UP_ORDINAL		0x000a0000
163
#define HID_UP_CONSUMER		0x000c0000
164
#define HID_UP_DIGITIZER	0x000d0000
165
#define HID_UP_PID		0x000f0000
166
#define HID_UP_HPVENDOR         0xff7f0000
167
#define HID_UP_MSVENDOR		0xff000000
168
#define HID_UP_CUSTOM		0x00ff0000
169
#define HID_UP_LOGIVENDOR	0xffbc0000
170

    
171
#define HID_USAGE		0x0000ffff
172

    
173
#define HID_GD_POINTER		0x00010001
174
#define HID_GD_MOUSE		0x00010002
175
#define HID_GD_JOYSTICK		0x00010004
176
#define HID_GD_GAMEPAD		0x00010005
177
#define HID_GD_KEYBOARD		0x00010006
178
#define HID_GD_KEYPAD		0x00010007
179
#define HID_GD_MULTIAXIS	0x00010008
180
#define HID_GD_X		0x00010030
181
#define HID_GD_Y		0x00010031
182
#define HID_GD_Z		0x00010032
183
#define HID_GD_RX		0x00010033
184
#define HID_GD_RY		0x00010034
185
#define HID_GD_RZ		0x00010035
186
#define HID_GD_SLIDER		0x00010036
187
#define HID_GD_DIAL		0x00010037
188
#define HID_GD_WHEEL		0x00010038
189
#define HID_GD_HATSWITCH	0x00010039
190
#define HID_GD_BUFFER		0x0001003a
191
#define HID_GD_BYTECOUNT	0x0001003b
192
#define HID_GD_MOTION		0x0001003c
193
#define HID_GD_START		0x0001003d
194
#define HID_GD_SELECT		0x0001003e
195
#define HID_GD_VX		0x00010040
196
#define HID_GD_VY		0x00010041
197
#define HID_GD_VZ		0x00010042
198
#define HID_GD_VBRX		0x00010043
199
#define HID_GD_VBRY		0x00010044
200
#define HID_GD_VBRZ		0x00010045
201
#define HID_GD_VNO		0x00010046
202
#define HID_GD_FEATURE		0x00010047
203
#define HID_GD_UP		0x00010090
204
#define HID_GD_DOWN		0x00010091
205
#define HID_GD_RIGHT		0x00010092
206
#define HID_GD_LEFT		0x00010093
207

    
208
/*
209
 * HID report types --- Ouch! HID spec says 1 2 3!
210
 */
211

    
212
#define HID_INPUT_REPORT	0
213
#define HID_OUTPUT_REPORT	1
214
#define HID_FEATURE_REPORT	2
215

    
216
struct usb_hid_class_descriptor {
217
	uint8_t  bDescriptorType;
218
	uint16_t wDescriptorLength;
219
} __attribute__ ((packed));
220

    
221
struct usb_hid_descriptor {
222
	uint8_t  bLength;
223
	uint8_t  bDescriptorType;
224
	uint16_t bcdHID;
225
	uint8_t  bCountryCode;
226
	uint8_t  bNumDescriptors;
227

    
228
	struct hid_class_descriptor desc[1];
229
} __attribute__ ((packed));
230

    
231
/* Applications from HID Usage Tables 4/8/99 Version 1.1 */
232
/* We ignore a few input applications that are not widely used */
233
#define IS_INPUT_APPLICATION(a) (((a >= 0x00010000) && (a <= 0x00010008)) || (a == 0x00010080) || (a == 0x000c0001))
234

    
235
#endif
236

    
(11-11/11)
Add picture from clipboard (Maximum size: 48.8 MB)