/** * \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 Atmel Support */ #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_