summaryrefslogtreecommitdiff
path: root/tmk_core/protocol/arm_atsam/usb/usb_protocol_hid.h
blob: c482e9c069451ecbe4bc28976253364a51c69de3 (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
317
318
319
/**
 * \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_