Fix MIT license language to make its intent clearer.
[pub/lufa.git] / LUFA / Drivers / USB / Class / Common / HID.h
index 07ed94b..761458b 100644 (file)
@@ -9,13 +9,13 @@
 /*\r
   Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
 \r
-  Permission to use, copy, modify, and distribute this software\r
-  and its documentation for any purpose and without fee is hereby\r
-  granted, provided that the above copyright notice appear in all\r
-  copies and that both that the copyright notice and this\r
-  permission notice and warranty disclaimer appear in supporting\r
-  documentation, and that the name of the author not be used in\r
-  advertising or publicity pertaining to distribution of the\r
+  Permission to use, copy, modify, distribute, and sell this \r
+  software and its documentation for any purpose is hereby granted\r
+  without fee, provided that the above copyright notice appear in \r
+  all copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting \r
+  documentation, and that the name of the author not be used in \r
+  advertising or publicity pertaining to distribution of the \r
   software without specific, written prior permission.\r
 \r
   The author disclaim all warranties with regard to this\r
 */\r
 \r
 /** \ingroup Group_USBClassHID\r
+ *  @defgroup Group_USBClassHIDCommon  Common Class Definitions\r
+ *\r
+ *  \section Module Description\r
+ *  Constants, Types and Enum definitions that are common to both Device and Host modes for the USB\r
+ *  HID Class.\r
+ *\r
  *  @{\r
  */\r
  \r
 \r
        /* Macros: */\r
                /** HID Class Specific Request to get the current HID report from the device. */\r
-               #define REQ_GetReport      0x01\r
+               #define REQ_GetReport                0x01\r
 \r
                /** HID Class Specific Request to get the current device idle count. */\r
-               #define REQ_GetIdle        0x02\r
+               #define REQ_GetIdle                  0x02\r
 \r
                /** HID Class Specific Request to set the current HID report to the device. */\r
-               #define REQ_SetReport      0x09\r
+               #define REQ_SetReport                0x09\r
 \r
                /** HID Class Specific Request to set the device's idle count. */\r
-               #define REQ_SetIdle        0x0A\r
+               #define REQ_SetIdle                  0x0A\r
 \r
                /** HID Class Specific Request to get the current HID report protocol mode. */\r
-               #define REQ_GetProtocol    0x03\r
+               #define REQ_GetProtocol              0x03\r
 \r
                /** HID Class Specific Request to set the current HID report protocol mode. */\r
-               #define REQ_SetProtocol    0x0B\r
+               #define REQ_SetProtocol              0x0B\r
 \r
                /** Descriptor header type value, to indicate a HID class HID descriptor. */\r
-               #define DTYPE_HID          0x21\r
+               #define DTYPE_HID                    0x21\r
                \r
                /** Descriptor header type value, to indicate a HID class HID report descriptor. */\r
-               #define DTYPE_Report       0x22\r
+               #define DTYPE_Report                 0x22\r
                \r
+               /** Constant for the protocol value of a HID interface descriptor, indicating that the interface does not support\r
+                *  any HID class boot protocol (see HID Class Specification).\r
+                */\r
+               #define HID_NON_BOOT_PROTOCOL        0x00\r
+\r
+               /** Constant for the protocol value of a HID interface descriptor, indicating that the interface supports the\r
+                *  HID class Keyboard boot protocol (see HID Class Specification).\r
+                */\r
+               #define HID_BOOT_KEYBOARD_PROTOCOL   0x01\r
+\r
+               /** Constant for the protocol value of a HID interface descriptor, indicating that the interface supports the\r
+                *  HID class Mouse boot protocol (see HID Class Specification).\r
+                */\r
+               #define HID_BOOT_MOUSE_PROTOCOL      0x02\r
+\r
        /* Type Defines: */\r
+               /** Enum for the different types of HID reports. */\r
+               enum HID_ReportItemTypes_t\r
+               {\r
+                       REPORT_ITEM_TYPE_In                   = 0, /**< Indicates that the item is an IN report type. */\r
+                       REPORT_ITEM_TYPE_Out                  = 1, /**< Indicates that the item is an OUT report type. */\r
+                       REPORT_ITEM_TYPE_Feature              = 2, /**< Indicates that the item is a FEATURE report type. */\r
+               };\r
+\r
                /** Type define for the HID class specific HID descriptor, to describe the HID device's specifications. Refer to the HID\r
                 *  specification for details on the structure elements.\r
                 */\r
                typedef struct\r
                {\r
-                       USB_Descriptor_Header_t               Header;\r
+                       USB_Descriptor_Header_t  Header;\r
                                \r
-                       uint16_t                              HIDSpec;\r
-                       uint8_t                               CountryCode;\r
+                       uint16_t                 HIDSpec;\r
+                       uint8_t                  CountryCode;\r
                \r
-                       uint8_t                               TotalReportDescriptors;\r
-\r
-                       uint8_t                               HIDReportType;\r
-                       uint16_t                              HIDReportLength;\r
-               } USB_Descriptor_HID_t;\r
+                       uint8_t                  TotalReportDescriptors;\r
 \r
-               /** Type define for the data type used to store HID report descriptor elements. */\r
-               typedef uint8_t USB_Descriptor_HIDReport_Datatype_t;\r
+                       uint8_t                  HIDReportType;\r
+                       uint16_t                 HIDReportLength;\r
+               } USB_HID_Descriptor_t;\r
 \r
-               /** Class state structure. An instance of this structure should be made for each HID interface\r
-                *  within the user application, and passed to each of the HID class driver functions as the\r
-                *  HIDInterfaceInfo parameter. The contents of this structure should be set to their correct\r
-                *  values when used, or ommitted to force the library to use default values.\r
-                *\r
-                *  Note that for the HID class driver, host-to-device reports are received via HID class requests\r
-                *  rather than a dedicated endpoint to simplify the driver and its interface.\r
-                */\r
+               /** Type define for a standard Boot Protocol Mouse report */\r
                typedef struct\r
                {\r
-                       uint8_t  InterfaceNumber; /**< Interface number of the HID interface within the device */\r
-\r
-                       uint8_t  ReportINEndpointNumber; /**< Endpoint number of the HID interface's IN report endpoint */\r
-                       uint16_t ReportINEndpointSize; /**< Size in bytes of the HID interface's IN report endpoint */\r
-                       \r
-                       uint8_t  ReportINBufferSize; /**< Size of the largest possible report to send to the host, for buffer allocation purposes */\r
+                       uint8_t Button; /**< Button mask for currently pressed buttons in the mouse */\r
+                       int8_t  X; /**< Current delta X movement of the mouse */\r
+                       int8_t  Y; /**< Current delta Y movement on the mouse */\r
+               } USB_MouseReport_Data_t;\r
+               \r
+               /** Type define for a standard Boot Protocol Keyboard report */\r
+               typedef struct\r
+               {\r
+                       uint8_t Modifier; /**< Keyboard modifier byte, indicating pressed modifier keys (such as Shift, Control, etc.) */\r
+                       uint8_t Reserved; /**< Reserved for OEM use, always set to 0 */\r
+                       uint8_t KeyCode[6]; /**< Key codes of the currently pressed keys */\r
+               } USB_KeyboardReport_Data_t;\r
 \r
-                       bool     UsingReportProtocol; /**< Indicates if the HID interface is set to Boot or Report protocol mode */\r
-                       uint16_t IdleCount; /**< Report idle period, in ms, set by the host */\r
-                       uint16_t IdleMSRemaining; /**< Total number of ms remaining before the idle period elapses */\r
-               } USB_ClassInfo_HID_t;\r
+               /** Type define for the data type used to store HID report descriptor elements. */\r
+               typedef uint8_t USB_Descriptor_HIDReport_Datatype_t;\r
 \r
 #endif\r
 \r