Permalink
Cannot retrieve contributors at this time
| /** | |
| * \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_ |