Add LUFA-111009-BETA tag.
[pub/USBasp.git] / LUFA / Drivers / USB / Class / Common / HID.h
index 4e3c701..74012b6 100644 (file)
                #define HID_KEYBOARD_SC_RIGHT_GUI                         0xE7
                //@}
 
-               /** \name Standard HID Device Report Descriptors */
+               /** \name Common HID Device Report Descriptors */
                //@{
                /** \hideinitializer
-                *  A list of HID report item array elements that describe a typical HID USB Joystick. The resulting report descriptor
-                *  is structured according to the following layout:
+                *  A list of HID report item array elements that describe a typical HID USB Joystick. The resulting report
+                *  descriptor is structured according to the following layout:
                 *
                 *  \code
                 *  struct
                 *  {
-                *      uintA_t Buttons; // Pressed buttons bitmask
                 *      intB_t X; // Signed X axis value
                 *      intB_t Y; // Signed Y axis value
+                *      int8_t Z; // Signed Z axis value
+                *      // Additional axis elements here
+                *      uintA_t Buttons; // Pressed buttons bitmask
                 *  } Joystick_Report;
                 *  \endcode
                 *
                 *  Where \c uintA_t is a type large enough to hold one bit per button, and \c intB_t is a type large enough to hold the
                 *  ranges of the signed \c MinAxisVal and \c MaxAxisVal values.
                 *
-                *  \param[in] MinAxisVal      Minimum X/Y logical axis value.
-                *  \param[in] MaxAxisVal      Maximum X/Y logical axis value.
-                *  \param[in] MinPhysicalVal  Minimum X/Y physical axis value, for movement resolution calculations.
-                *  \param[in] MaxPhysicalVal  Maximum X/Y physical axis value, for movement resolution calculations.
-                *  \param[in] Buttons         Total number of buttons in the device.
+                *  \param[in] NumAxis         Number of axis in the joystick (8-bit)
+                *  \param[in] MinAxisVal      Minimum logical axis value (16-bit).
+                *  \param[in] MaxAxisVal      Maximum logical axis value (16-bit).
+                *  \param[in] MinPhysicalVal  Minimum physical axis value, for movement resolution calculations (16-bit).
+                *  \param[in] MaxPhysicalVal  Maximum physical axis value, for movement resolution calculations (16-bit).
+                *  \param[in] Buttons         Total number of buttons in the device (8-bit).
                 */
-               #define HID_DESCRIPTOR_JOYSTICK(MinAxisVal, MaxAxisVal, MinPhysicalVal, MaxPhysicalVal, Buttons) \
+               #define HID_DESCRIPTOR_JOYSTICK(NumAxis, MinAxisVal, MaxAxisVal, MinPhysicalVal, MaxPhysicalVal, Buttons) \
                        HID_RI_USAGE_PAGE(8, 0x01),                     \
                        HID_RI_USAGE(8, 0x04),                          \
                        HID_RI_COLLECTION(8, 0x01),                     \
                                HID_RI_USAGE(8, 0x01),                      \
                                HID_RI_COLLECTION(8, 0x00),                 \
-                                       HID_RI_USAGE(8, 0x30),                  \
-                                       HID_RI_USAGE(8, 0x31),                  \
+                                       HID_RI_USAGE_MINIMUM(8, 0x30),          \
+                                       HID_RI_USAGE_MAXIMUM(8, (0x30 + (NumAxis - 1))), \
                                        HID_RI_LOGICAL_MINIMUM(16, MinAxisVal), \
                                        HID_RI_LOGICAL_MAXIMUM(16, MaxAxisVal), \
                                        HID_RI_PHYSICAL_MINIMUM(16, MinPhysicalVal), \
                                        HID_RI_PHYSICAL_MAXIMUM(16, MaxPhysicalVal), \
-                                       HID_RI_REPORT_COUNT(8, 0x02),           \
+                                       HID_RI_REPORT_COUNT(8, NumAxis),        \
                                        HID_RI_REPORT_SIZE(8, ((((MinAxisVal >= -0xFF) && (MaxAxisVal <= 0xFF)) ? 8 : 16))), \
                                        HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE), \
                                HID_RI_END_COLLECTION(0),                   \
                 *  } Keyboard_Report;
                 *  \endcode
                 *
-                *  \param[in] MaxKeys  Number of simultaneous keys that can be reported at the one time (a value between 1 and
-                *                      (ENDPOINT_SIZE - 2) ).
+                *  \param[in] MaxKeys  Number of simultaneous keys that can be reported at the one time (8-bit).
                 */
                #define HID_DESCRIPTOR_KEYBOARD(MaxKeys)            \
                        HID_RI_USAGE_PAGE(8, 0x01),                     \
                 *  Where \c intA_t is a type large enough to hold one bit per button, and \c intB_t is a type large enough to hold the
                 *  ranges of the signed \c MinAxisVal and \c MaxAxisVal values.
                 *
-                *  \param[in] MinAxisVal      Minimum X/Y logical axis value.
-                *  \param[in] MaxAxisVal      Maximum X/Y logical axis value.
-                *  \param[in] MinPhysicalVal  Minimum X/Y physical axis value, for movement resolution calculations.
-                *  \param[in] MaxPhysicalVal  Maximum X/Y physical axis value, for movement resolution calculations.
-                *  \param[in] Buttons         Total number of buttons in the device.
+                *  \param[in] MinAxisVal      Minimum X/Y logical axis value (16-bit).
+                *  \param[in] MaxAxisVal      Maximum X/Y logical axis value (16-bit).
+                *  \param[in] MinPhysicalVal  Minimum X/Y physical axis value, for movement resolution calculations (16-bit).
+                *  \param[in] MaxPhysicalVal  Maximum X/Y physical axis value, for movement resolution calculations (16-bit).
+                *  \param[in] Buttons         Total number of buttons in the device (8-bit).
                 *  \param[in] AbsoluteCoords  Boolean true to use absolute X/Y coordinates (e.g. touchscreen).
                 */
                #define HID_DESCRIPTOR_MOUSE(MinAxisVal, MaxAxisVal, MinPhysicalVal, MaxPhysicalVal, Buttons, AbsoluteCoords) \