forked from mfulz_github/qmk_firmware
Removed variable axis support from the HID_DESCRIPTOR_JOYSTICK() macro due to OS incompatibilities, replaced with fixed 3-axis joystick report structure.
This commit is contained in:
parent
7cac5e22d7
commit
b3aaffb792
@ -46,14 +46,13 @@
|
|||||||
const USB_Descriptor_HIDReport_Datatype_t PROGMEM JoystickReport[] =
|
const USB_Descriptor_HIDReport_Datatype_t PROGMEM JoystickReport[] =
|
||||||
{
|
{
|
||||||
/* Use the HID class driver's standard Joystick report.
|
/* Use the HID class driver's standard Joystick report.
|
||||||
* Number of Axis: 2 (X/Y)
|
* Min X/Y/Z Axis values: -100
|
||||||
* Min X/Y Axis values: -100
|
* Max X/Y/Z Axis values: 100
|
||||||
* Max X/Y Axis values: 100
|
* Min physical X/Y/Z Axis values (used to determine resolution): -1
|
||||||
* Min physical X/Y Axis values (used to determine resolution): -1
|
* Max physical X/Y/Z Axis values (used to determine resolution): 1
|
||||||
* Max physical X/Y Axis values (used to determine resolution): 1
|
|
||||||
* Buttons: 2
|
* Buttons: 2
|
||||||
*/
|
*/
|
||||||
HID_DESCRIPTOR_JOYSTICK(2, -100, 100, -1, 1, 2)
|
HID_DESCRIPTOR_JOYSTICK(-100, 100, -1, 1, 2)
|
||||||
};
|
};
|
||||||
|
|
||||||
/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall
|
/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall
|
||||||
|
@ -59,6 +59,7 @@
|
|||||||
{
|
{
|
||||||
int8_t X; /**< Current absolute joystick X position, as a signed 8-bit integer */
|
int8_t X; /**< Current absolute joystick X position, as a signed 8-bit integer */
|
||||||
int8_t Y; /**< Current absolute joystick Y position, as a signed 8-bit integer */
|
int8_t Y; /**< Current absolute joystick Y position, as a signed 8-bit integer */
|
||||||
|
int8_t Z; /**< Current absolute joystick Z position, as a signed 8-bit integer */
|
||||||
uint8_t Button; /**< Bit mask of the currently pressed joystick buttons */
|
uint8_t Button; /**< Bit mask of the currently pressed joystick buttons */
|
||||||
} USB_JoystickReport_Data_t;
|
} USB_JoystickReport_Data_t;
|
||||||
|
|
||||||
|
@ -52,11 +52,12 @@ const USB_Descriptor_HIDReport_Datatype_t PROGMEM JoystickReport[] =
|
|||||||
HID_RI_COLLECTION(8, 0x00), /* Physical */
|
HID_RI_COLLECTION(8, 0x00), /* Physical */
|
||||||
HID_RI_USAGE(8, 0x30), /* Usage X */
|
HID_RI_USAGE(8, 0x30), /* Usage X */
|
||||||
HID_RI_USAGE(8, 0x31), /* Usage Y */
|
HID_RI_USAGE(8, 0x31), /* Usage Y */
|
||||||
|
HID_RI_USAGE(8, 0x32), /* Usage Z */
|
||||||
HID_RI_LOGICAL_MINIMUM(8, -100),
|
HID_RI_LOGICAL_MINIMUM(8, -100),
|
||||||
HID_RI_LOGICAL_MAXIMUM(8, 100),
|
HID_RI_LOGICAL_MAXIMUM(8, 100),
|
||||||
HID_RI_PHYSICAL_MINIMUM(8, -1),
|
HID_RI_PHYSICAL_MINIMUM(8, -1),
|
||||||
HID_RI_PHYSICAL_MAXIMUM(8, 1),
|
HID_RI_PHYSICAL_MAXIMUM(8, 1),
|
||||||
HID_RI_REPORT_COUNT(8, 0x02),
|
HID_RI_REPORT_COUNT(8, 0x03),
|
||||||
HID_RI_REPORT_SIZE(8, 0x08),
|
HID_RI_REPORT_SIZE(8, 0x08),
|
||||||
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),
|
||||||
|
@ -72,6 +72,7 @@
|
|||||||
{
|
{
|
||||||
int8_t X; /**< Current absolute joystick X position, as a signed 8-bit integer */
|
int8_t X; /**< Current absolute joystick X position, as a signed 8-bit integer */
|
||||||
int8_t Y; /**< Current absolute joystick Y position, as a signed 8-bit integer */
|
int8_t Y; /**< Current absolute joystick Y position, as a signed 8-bit integer */
|
||||||
|
int8_t Z; /**< Current absolute joystick Z position, as a signed 8-bit integer */
|
||||||
uint8_t Button; /**< Bit mask of the currently pressed joystick buttons */
|
uint8_t Button; /**< Bit mask of the currently pressed joystick buttons */
|
||||||
} USB_JoystickReport_Data_t;
|
} USB_JoystickReport_Data_t;
|
||||||
|
|
||||||
|
@ -18,8 +18,10 @@
|
|||||||
* - Core:
|
* - Core:
|
||||||
* - Android Accessory Host property strings changed from a struct of pointer to an array to prevent unaligned access on greater than 8-bit architectures
|
* - Android Accessory Host property strings changed from a struct of pointer to an array to prevent unaligned access on greater than 8-bit architectures
|
||||||
* - Audio Device Class driver changed to also require the index of the Audio Control interface within the device, for SET/GET/CUR/MIN/MAX/RES property adjustments
|
* - Audio Device Class driver changed to also require the index of the Audio Control interface within the device, for SET/GET/CUR/MIN/MAX/RES property adjustments
|
||||||
|
* - Removed variable axis support from the HID_DESCRIPTOR_JOYSTICK() macro due to OS incompatibilities, replaced with fixed 3-axis joystick report structure
|
||||||
* - Library Applications:
|
* - Library Applications:
|
||||||
* - Raised the guard bits in the AVRISP-MKII clone project when in PDI and TPI to 32, to prevent communication errors on low quality connections to a target
|
* - Raised the guard bits in the AVRISP-MKII clone project when in PDI and TPI to 32, to prevent communication errors on low quality connections to a target
|
||||||
|
* - Added additional bootloader API data to expose the bootloader start address and class to the DFU and CDC class bootloaders
|
||||||
*
|
*
|
||||||
* <b>Fixed:</b>
|
* <b>Fixed:</b>
|
||||||
* - Core:
|
* - Core:
|
||||||
@ -33,7 +35,6 @@
|
|||||||
* - Fixed error in the AVRISP-MKII programmer when ISP mode is used at 64KHz (thanks to Ben R. Porter)
|
* - Fixed error in the AVRISP-MKII programmer when ISP mode is used at 64KHz (thanks to Ben R. Porter)
|
||||||
* - Fixed AVRISP-MKII programmer project failing to compile for the U4 chips when VTARGET_ADC_CHANNEL is defined to an invalid channel and NO_VTARGET_DETECT is
|
* - Fixed AVRISP-MKII programmer project failing to compile for the U4 chips when VTARGET_ADC_CHANNEL is defined to an invalid channel and NO_VTARGET_DETECT is
|
||||||
* defined (thanks to Steven Morehouse)
|
* defined (thanks to Steven Morehouse)
|
||||||
* - Added additional bootloader API data to expose the bootloader start address and class to the DFU and CDC class bootloaders
|
|
||||||
*
|
*
|
||||||
* \section Sec_ChangeLog120219 Version 120219
|
* \section Sec_ChangeLog120219 Version 120219
|
||||||
* <b>New:</b>
|
* <b>New:</b>
|
||||||
|
@ -14,6 +14,9 @@
|
|||||||
* <b>Device Mode</b>
|
* <b>Device Mode</b>
|
||||||
* - The device mode Audio Class driver now requires an additional configuration parameter, the Audio Control interface index. Existing applications should
|
* - The device mode Audio Class driver now requires an additional configuration parameter, the Audio Control interface index. Existing applications should
|
||||||
* be adjusted to specify the additional configuration parameter.
|
* be adjusted to specify the additional configuration parameter.
|
||||||
|
* - The HID_DESCRIPTOR_JOYSTICK() macro no longer takes a variable number of axis as a parameter, due to OS incompatibilities; this macro now uses a fixed
|
||||||
|
* 3 axis of data. User applications should update their calls to this macro and their report structures to suit a fixed 3-axis joystick report. If a user
|
||||||
|
* application requires more than 3 axis' of data, a custom report descriptor will need to be constructed by hand.
|
||||||
*
|
*
|
||||||
* <b>Host Mode</b>
|
* <b>Host Mode</b>
|
||||||
* - The Android Accessory Host class driver property strings are now a array of \c char* rather than a struct of named pointers. Existing applications
|
* - The Android Accessory Host class driver property strings are now a array of \c char* rather than a struct of named pointers. Existing applications
|
||||||
|
@ -337,37 +337,36 @@
|
|||||||
* \code
|
* \code
|
||||||
* struct
|
* struct
|
||||||
* {
|
* {
|
||||||
* intB_t X; // Signed X axis value
|
* intA_t X; // Signed X axis value
|
||||||
* intB_t Y; // Signed Y axis value
|
* intA_t Y; // Signed Y axis value
|
||||||
* int8_t Z; // Signed Z axis value
|
* intA_t Z; // Signed Z axis value
|
||||||
* // Additional axis elements here
|
* uintB_t Buttons; // Pressed buttons bitmask
|
||||||
* 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 the ranges of the signed \c MinAxisVal and \c MaxAxisVal values,
|
||||||
* ranges of the signed \c MinAxisVal and \c MaxAxisVal values.
|
* and \c intB_t is a type large enough to hold one bit per button.
|
||||||
*
|
*
|
||||||
* \param[in] NumAxis Number of axis in the joystick (8-bit)
|
|
||||||
* \param[in] MinAxisVal Minimum logical axis value (16-bit).
|
* \param[in] MinAxisVal Minimum logical axis value (16-bit).
|
||||||
* \param[in] MaxAxisVal Maximum 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] 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] MaxPhysicalVal Maximum physical axis value, for movement resolution calculations (16-bit).
|
||||||
* \param[in] Buttons Total number of buttons in the device (8-bit).
|
* \param[in] Buttons Total number of buttons in the device (8-bit).
|
||||||
*/
|
*/
|
||||||
#define HID_DESCRIPTOR_JOYSTICK(NumAxis, MinAxisVal, MaxAxisVal, MinPhysicalVal, MaxPhysicalVal, Buttons) \
|
#define HID_DESCRIPTOR_JOYSTICK(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_MINIMUM(8, 0x30), \
|
HID_RI_USAGE_(8, 0x30), \
|
||||||
HID_RI_USAGE_MAXIMUM(8, (0x30 + (NumAxis - 1))), \
|
HID_RI_USAGE_(8, 0x31), \
|
||||||
|
HID_RI_USAGE_(8, 0x32), \
|
||||||
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, NumAxis), \
|
HID_RI_REPORT_COUNT(8, 3), \
|
||||||
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), \
|
||||||
|
Loading…
x
Reference in New Issue
Block a user