|
|
@ -328,43 +328,46 @@
|
|
|
|
#define HID_KEYBOARD_SC_RIGHT_GUI 0xE7
|
|
|
|
#define HID_KEYBOARD_SC_RIGHT_GUI 0xE7
|
|
|
|
//@}
|
|
|
|
//@}
|
|
|
|
|
|
|
|
|
|
|
|
/** \name Standard HID Device Report Descriptors */
|
|
|
|
/** \name Common HID Device Report Descriptors */
|
|
|
|
//@{
|
|
|
|
//@{
|
|
|
|
/** \hideinitializer
|
|
|
|
/** \hideinitializer
|
|
|
|
* A list of HID report item array elements that describe a typical HID USB Joystick. The resulting report descriptor
|
|
|
|
* A list of HID report item array elements that describe a typical HID USB Joystick. The resulting report
|
|
|
|
* is structured according to the following layout:
|
|
|
|
* descriptor is structured according to the following layout:
|
|
|
|
*
|
|
|
|
*
|
|
|
|
* \code
|
|
|
|
* \code
|
|
|
|
* struct
|
|
|
|
* struct
|
|
|
|
* {
|
|
|
|
* {
|
|
|
|
* uintA_t Buttons; // Pressed buttons bitmask
|
|
|
|
|
|
|
|
* intB_t X; // Signed X axis value
|
|
|
|
* intB_t X; // Signed X axis value
|
|
|
|
* intB_t Y; // Signed Y 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;
|
|
|
|
* } Joystick_Report;
|
|
|
|
* \endcode
|
|
|
|
* \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
|
|
|
|
* 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.
|
|
|
|
* ranges of the signed \c MinAxisVal and \c MaxAxisVal values.
|
|
|
|
*
|
|
|
|
*
|
|
|
|
* \param[in] MinAxisVal Minimum X/Y logical axis value.
|
|
|
|
* \param[in] NumAxis Number of axis in the joystick (8-bit)
|
|
|
|
* \param[in] MaxAxisVal Maximum X/Y logical axis value.
|
|
|
|
* \param[in] MinAxisVal Minimum logical axis value (16-bit).
|
|
|
|
* \param[in] MinPhysicalVal Minimum X/Y physical axis value, for movement resolution calculations.
|
|
|
|
* \param[in] MaxAxisVal Maximum logical axis value (16-bit).
|
|
|
|
* \param[in] MaxPhysicalVal Maximum X/Y physical axis value, for movement resolution calculations.
|
|
|
|
* \param[in] MinPhysicalVal Minimum physical axis value, for movement resolution calculations (16-bit).
|
|
|
|
* \param[in] Buttons Total number of buttons in the device.
|
|
|
|
* \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_PAGE(8, 0x01), \
|
|
|
|
HID_RI_USAGE(8, 0x04), \
|
|
|
|
HID_RI_USAGE(8, 0x04), \
|
|
|
|
HID_RI_COLLECTION(8, 0x01), \
|
|
|
|
HID_RI_COLLECTION(8, 0x01), \
|
|
|
|
HID_RI_USAGE(8, 0x01), \
|
|
|
|
HID_RI_USAGE(8, 0x01), \
|
|
|
|
HID_RI_COLLECTION(8, 0x00), \
|
|
|
|
HID_RI_COLLECTION(8, 0x00), \
|
|
|
|
HID_RI_USAGE(8, 0x30), \
|
|
|
|
HID_RI_USAGE_MINIMUM(8, 0x30), \
|
|
|
|
HID_RI_USAGE(8, 0x31), \
|
|
|
|
HID_RI_USAGE_MAXIMUM(8, (0x30 + (NumAxis - 1))), \
|
|
|
|
HID_RI_LOGICAL_MINIMUM(16, MinAxisVal), \
|
|
|
|
HID_RI_LOGICAL_MINIMUM(16, MinAxisVal), \
|
|
|
|
HID_RI_LOGICAL_MAXIMUM(16, MaxAxisVal), \
|
|
|
|
HID_RI_LOGICAL_MAXIMUM(16, MaxAxisVal), \
|
|
|
|
HID_RI_PHYSICAL_MINIMUM(16, MinPhysicalVal), \
|
|
|
|
HID_RI_PHYSICAL_MINIMUM(16, MinPhysicalVal), \
|
|
|
|
HID_RI_PHYSICAL_MAXIMUM(16, MaxPhysicalVal), \
|
|
|
|
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_REPORT_SIZE(8, ((((MinAxisVal >= -0xFF) && (MaxAxisVal <= 0xFF)) ? 8 : 16))), \
|
|
|
|
HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE), \
|
|
|
|
HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE), \
|
|
|
|
HID_RI_END_COLLECTION(0), \
|
|
|
|
HID_RI_END_COLLECTION(0), \
|
|
|
@ -395,8 +398,7 @@
|
|
|
|
* } Keyboard_Report;
|
|
|
|
* } Keyboard_Report;
|
|
|
|
* \endcode
|
|
|
|
* \endcode
|
|
|
|
*
|
|
|
|
*
|
|
|
|
* \param[in] MaxKeys Number of simultaneous keys that can be reported at the one time (a value between 1 and
|
|
|
|
* \param[in] MaxKeys Number of simultaneous keys that can be reported at the one time (8-bit).
|
|
|
|
* (ENDPOINT_SIZE - 2) ).
|
|
|
|
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
#define HID_DESCRIPTOR_KEYBOARD(MaxKeys) \
|
|
|
|
#define HID_DESCRIPTOR_KEYBOARD(MaxKeys) \
|
|
|
|
HID_RI_USAGE_PAGE(8, 0x01), \
|
|
|
|
HID_RI_USAGE_PAGE(8, 0x01), \
|
|
|
@ -449,11 +451,11 @@
|
|
|
|
* 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
|
|
|
|
* 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.
|
|
|
|
* ranges of the signed \c MinAxisVal and \c MaxAxisVal values.
|
|
|
|
*
|
|
|
|
*
|
|
|
|
* \param[in] MinAxisVal Minimum X/Y logical axis value.
|
|
|
|
* \param[in] MinAxisVal Minimum X/Y logical axis value (16-bit).
|
|
|
|
* \param[in] MaxAxisVal Maximum X/Y logical axis value.
|
|
|
|
* \param[in] MaxAxisVal Maximum X/Y logical axis value (16-bit).
|
|
|
|
* \param[in] MinPhysicalVal Minimum X/Y physical axis value, for movement resolution calculations.
|
|
|
|
* \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.
|
|
|
|
* \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.
|
|
|
|
* \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).
|
|
|
|
* \param[in] AbsoluteCoords Boolean true to use absolute X/Y coordinates (e.g. touchscreen).
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
#define HID_DESCRIPTOR_MOUSE(MinAxisVal, MaxAxisVal, MinPhysicalVal, MaxPhysicalVal, Buttons, AbsoluteCoords) \
|
|
|
|
#define HID_DESCRIPTOR_MOUSE(MinAxisVal, MaxAxisVal, MinPhysicalVal, MaxPhysicalVal, Buttons, AbsoluteCoords) \
|
|
|
|