summaryrefslogtreecommitdiff
path: root/tmk_core/protocol/arm_atsam/usb/usb_protocol_hid.h
blob: 2f8a39bdd8aab8d65d8cd955500ed00418780cab (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
/**
 * \file
 *
 * \brief USB Human Interface Device (HID) protocol definitions.
 *
 * Copyright (c) 2009-2015 Atmel Corporation. All rights reserved.
 *
 * \asf_license_start
 *
 * \page License
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 * 1. Redistributions of source code must retain the above copyright notice,
 *    this list of conditions and the following disclaimer.
 *
 * 2. Redistributions in binary form must reproduce the above copyright notice,
 *    this list of conditions and the following disclaimer in the documentation
 *    and/or other materials provided with the distribution.
 *
 * 3. The name of Atmel may not be used to endorse or promote products derived
 *    from this software without specific prior written permission.
 *
 * 4. This software may only be redistributed and used in connection with an
 *    Atmel microcontroller product.
 *
 * THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED
 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
 * EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR
 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 *
 * \asf_license_stop
 *
 */
/*
 * Support and FAQ: visit <a href="http://www.atmel.com/design-support/">Atmel Support</a>
 */

#ifndef _USB_PROTOCOL_HID_H_
#define _USB_PROTOCOL_HID_H_

/**
 * \ingroup usb_protocol_group
 * \defgroup usb_hid_protocol USB Human Interface Device (HID)
 * protocol definitions
 * \brief USB Human Interface Device (HID) protocol definitions
 *
 * @{
 */

//! \name Possible Class value
//@{
#define HID_CLASS 0x03
//@}

//! \name Possible SubClass value
//@{
//! Interface subclass NO support BOOT protocol
#define HID_SUB_CLASS_NOBOOT 0x00
//! Interface subclass support BOOT protocol
#define HID_SUB_CLASS_BOOT 0x01
//@}

//! \name Possible protocol value
//@{
//! Protocol generic standard
#define HID_PROTOCOL_GENERIC 0x00
//! Protocol keyboard standard
#define HID_PROTOCOL_KEYBOARD 0x01
//! Protocol mouse standard
#define HID_PROTOCOL_MOUSE 0x02
//@}

//! \brief Hid USB requests (bRequest)
enum usb_reqid_hid {
    USB_REQ_HID_GET_REPORT   = 0x01,
    USB_REQ_HID_GET_IDLE     = 0x02,
    USB_REQ_HID_GET_PROTOCOL = 0x03,
    USB_REQ_HID_SET_REPORT   = 0x09,
    USB_REQ_HID_SET_IDLE     = 0x0A,
    USB_REQ_HID_SET_PROTOCOL = 0x0B,
};

//! \brief HID USB descriptor types
enum usb_descriptor_type_hid {
    USB_DT_HID          = 0x21,
    USB_DT_HID_REPORT   = 0x22,
    USB_DT_HID_PHYSICAL = 0x23,
};

//! \brief HID Type for report descriptor
enum usb_hid_item_report_type {
    USB_HID_ITEM_REPORT_TYPE_MAIN   = 0,
    USB_HID_ITEM_REPORT_TYPE_GLOBAL = 1,
    USB_HID_ITEM_REPORT_TYPE_LOCAL  = 2,
    USB_HID_ITEM_REPORT_TYPE_LONG   = 3,
};

//! \brief HID report type
enum usb_hid_report_type {
    USB_HID_REPORT_TYPE_INPUT   = 1,
    USB_HID_REPORT_TYPE_OUTPUT  = 2,
    USB_HID_REPORT_TYPE_FEATURE = 3,
};

//! \brief HID protocol
enum usb_hid_protocol {
    USB_HID_PROCOTOL_BOOT   = 0,
    USB_HID_PROCOTOL_REPORT = 1,
};

COMPILER_PACK_SET(1)

//! \brief HID Descriptor
typedef struct {
    uint8_t bLength;            //!< Size of this descriptor in bytes
    uint8_t bDescriptorType;    //!< HID descriptor type
    le16_t  bcdHID;             //!< Binary Coded Decimal Spec. release
    uint8_t bCountryCode;       //!< Hardware target country
    uint8_t bNumDescriptors;    //!< Number of HID class descriptors to follow
    uint8_t bRDescriptorType;   //!< Report descriptor type
    le16_t  wDescriptorLength;  //!< Total length of Report descriptor
} usb_hid_descriptor_t;

COMPILER_PACK_RESET()

//! \name HID Report type
//! Used by SETUP_HID_GET_REPORT & SETUP_HID_SET_REPORT
//! @{
#define REPORT_TYPE_INPUT 0x01
#define REPORT_TYPE_OUTPUT 0x02
#define REPORT_TYPE_FEATURE 0x03
//! @}

//! \name Constants of field DESCRIPTOR_HID
//! @{
//! Numeric expression identifying the HID Class
//! Specification release (here V1.11)
#define USB_HID_BDC_V1_11 0x0111
//! Numeric expression specifying the number of class descriptors
//! Note: Always at least one i.e. Report descriptor.
#define USB_HID_NUM_DESC 0x01

//! \name Country code
//! @{
#define USB_HID_NO_COUNTRY_CODE 0             // Not Supported
#define USB_HID_COUNTRY_ARABIC 1              // Arabic
#define USB_HID_COUNTRY_BELGIAN 2             // Belgian
#define USB_HID_COUNTRY_CANADIAN_BILINGUAL 3  // Canadian-Bilingual
#define USB_HID_COUNTRY_CANADIAN_FRENCH 4     // Canadian-French
#define USB_HID_COUNTRY_CZECH_REPUBLIC 5      // Czech Republic
#define USB_HID_COUNTRY_DANISH 6              // Danish
#define USB_HID_COUNTRY_FINNISH 7             // Finnish
#define USB_HID_COUNTRY_FRENCH 8              // French
#define USB_HID_COUNTRY_GERMAN 9              // German
#define USB_HID_COUNTRY_GREEK 10              // Greek
#define USB_HID_COUNTRY_HEBREW 11             // Hebrew
#define USB_HID_COUNTRY_HUNGARY 12            // Hungary
#define USB_HID_COUNTRY_INTERNATIONAL_ISO 13  // International (ISO)
#define USB_HID_COUNTRY_ITALIAN 14            // Italian
#define USB_HID_COUNTRY_JAPAN_KATAKANA 15     // Japan (Katakana)
#define USB_HID_COUNTRY_KOREAN 16             // Korean
#define USB_HID_COUNTRY_LATIN_AMERICAN 17     // Latin American
#define USB_HID_COUNTRY_NETHERLANDS_DUTCH 18  // Netherlands/Dutch
#define USB_HID_COUNTRY_NORWEGIAN 19          // Norwegian
#define USB_HID_COUNTRY_PERSIAN_FARSI 20      // Persian (Farsi)
#define USB_HID_COUNTRY_POLAND 21             // Poland
#define USB_HID_COUNTRY_PORTUGUESE 22         // Portuguese
#define USB_HID_COUNTRY_RUSSIA 23             // Russia
#define USB_HID_COUNTRY_SLOVAKIA 24           // Slovakia
#define USB_HID_COUNTRY_SPANISH 25            // Spanish
#define USB_HID_COUNTRY_SWEDISH 26            // Swedish
#define USB_HID_COUNTRY_SWISS_FRENCH 27       // Swiss/French
#define USB_HID_COUNTRY_SWISS_GERMAN 28       // Swiss/German
#define USB_HID_COUNTRY_SWITZERLAND 29        // Switzerland
#define USB_HID_COUNTRY_TAIWAN 30             // Taiwan
#define USB_HID_COUNTRY_TURKISH_Q 31          // Turkish-Q
#define USB_HID_COUNTRY_UK 32                 // UK
#define USB_HID_COUNTRY_US 33                 // US
#define USB_HID_COUNTRY_YUGOSLAVIA 34         // Yugoslavia
#define USB_HID_COUNTRY_TURKISH_F 35          // Turkish-F
                                              //! @}
                                              //! @}
//! @}

//! \name HID KEYS values
//! @{
#define HID_A 0x04
#define HID_B 0x05
#define HID_C 0x06
#define HID_D 0x07
#define HID_E 0x08
#define HID_F 0x09
#define HID_G 0x0A
#define HID_H 0x0B
#define HID_I 0x0C
#define HID_J 0x0D
#define HID_K 0x0E
#define HID_L 0x0F
#define HID_M 0x10
#define HID_N 0x11
#define HID_O 0x12
#define HID_P 0x13
#define HID_Q 0x14
#define HID_R 0x15
#define HID_S 0x16
#define HID_T 0x17
#define HID_U 0x18
#define HID_V 0x19
#define HID_W 0x1A
#define HID_X 0x1B
#define HID_Y 0x1C
#define HID_Z 0x1D
#define HID_1 30
#define HID_2 31
#define HID_3 32
#define HID_4 33
#define HID_5 34
#define HID_6 35
#define HID_7 36
#define HID_8 37
#define HID_9 38
#define HID_0 39
#define HID_ENTER 40
#define HID_ESCAPE 41
#define HID_BACKSPACE 42
#define HID_TAB 43
#define HID_SPACEBAR 44
#define HID_UNDERSCORE 45
#define HID_PLUS 46
#define HID_OPEN_BRACKET 47   // {
#define HID_CLOSE_BRACKET 48  // }
#define HID_BACKSLASH 49
#define HID_ASH 50    // # ~
#define HID_COLON 51  // ; :
#define HID_QUOTE 52  // ' "
#define HID_TILDE 53
#define HID_COMMA 54
#define HID_DOT 55
#define HID_SLASH 56
#define HID_CAPS_LOCK 57
#define HID_F1 58
#define HID_F2 59
#define HID_F3 60
#define HID_F4 61
#define HID_F5 62
#define HID_F6 63
#define HID_F7 64
#define HID_F8 65
#define HID_F9 66
#define HID_F10 67
#define HID_F11 68
#define HID_F12 69
#define HID_PRINTSCREEN 70
#define HID_SCROLL_LOCK 71
#define HID_PAUSE 72
#define HID_INSERT 73
#define HID_HOME 74
#define HID_PAGEUP 75
#define HID_DELETE 76
#define HID_END 77
#define HID_PAGEDOWN 78
#define HID_RIGHT 79
#define HID_LEFT 80
#define HID_DOWN 81
#define HID_UP 82
#define HID_KEYPAD_NUM_LOCK 83
#define HID_KEYPAD_DIVIDE 84
#define HID_KEYPAD_AT 85
#define HID_KEYPAD_MULTIPLY 85
#define HID_KEYPAD_MINUS 86
#define HID_KEYPAD_PLUS 87
#define HID_KEYPAD_ENTER 88
#define HID_KEYPAD_1 89
#define HID_KEYPAD_2 90
#define HID_KEYPAD_3 91
#define HID_KEYPAD_4 92
#define HID_KEYPAD_5 93
#define HID_KEYPAD_6 94
#define HID_KEYPAD_7 95
#define HID_KEYPAD_8 96
#define HID_KEYPAD_9 97
#define HID_KEYPAD_0 98

//! \name HID modifier values
//! @{
#define HID_MODIFIER_NONE 0x00
#define HID_MODIFIER_LEFT_CTRL 0x01
#define HID_MODIFIER_LEFT_SHIFT 0x02
#define HID_MODIFIER_LEFT_ALT 0x04
#define HID_MODIFIER_LEFT_UI 0x08
#define HID_MODIFIER_RIGHT_CTRL 0x10
#define HID_MODIFIER_RIGHT_SHIFT 0x20
#define HID_MODIFIER_RIGHT_ALT 0x40
#define HID_MODIFIER_RIGHT_UI 0x80
//! @}
//! @}

//! \name HID KEYS values
//! @{
#define HID_LED_NUM_LOCK (1 << 0)
#define HID_LED_CAPS_LOCK (1 << 1)
#define HID_LED_SCROLL_LOCK (1 << 2)
#define HID_LED_COMPOSE (1 << 3)
#define HID_LED_KANA (1 << 4)
//! @}

#endif  // _USB_PROTOCOL_HID_H_