forked from mfulz_github/qmk_firmware
Added new HID_DESCRIPTOR_MOUSE, HID_DESCRIPTOR_KEYBOARD and HID_DESCRIPTOR_JOYSTICK macros for easy automatic creation of basic USB HID device reports.
This commit is contained in:
parent
6d67b1df3c
commit
6c7ed7ecd6
|
@ -44,33 +44,14 @@
|
|||
* more details on HID report descriptors.
|
||||
*/
|
||||
USB_Descriptor_HIDReport_Datatype_t PROGMEM JoystickReport[] =
|
||||
{
|
||||
HID_RI_USAGE_PAGE(8, 0x01), /* Generic Desktop */
|
||||
HID_RI_USAGE(8, 0x04), /* Joystick */
|
||||
HID_RI_COLLECTION(8, 0x01), /* Application */
|
||||
HID_RI_USAGE(8, 0x01), /* Pointer */
|
||||
HID_RI_COLLECTION(8, 0x00), /* Physical */
|
||||
HID_RI_USAGE(8, 0x30), /* Usage X */
|
||||
HID_RI_USAGE(8, 0x31), /* Usage Y */
|
||||
HID_RI_LOGICAL_MINIMUM(8, -100),
|
||||
HID_RI_LOGICAL_MAXIMUM(8, 100),
|
||||
HID_RI_REPORT_SIZE(8, 0x08),
|
||||
HID_RI_REPORT_COUNT(8, 0x02),
|
||||
HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE | HID_IOF_NON_VOLATILE),
|
||||
HID_RI_END_COLLECTION(0),
|
||||
HID_RI_USAGE_PAGE(8, 0x09), /* Button */
|
||||
HID_RI_USAGE_MINIMUM(8, 0x01),
|
||||
HID_RI_USAGE_MAXIMUM(8, 0x02),
|
||||
HID_RI_LOGICAL_MINIMUM(8, 0x00),
|
||||
HID_RI_LOGICAL_MAXIMUM(8, 0x01),
|
||||
HID_RI_REPORT_SIZE(8, 0x01),
|
||||
HID_RI_REPORT_COUNT(8, 0x02),
|
||||
HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE | HID_IOF_NON_VOLATILE),
|
||||
HID_RI_REPORT_SIZE(8, 0x06),
|
||||
HID_RI_REPORT_COUNT(8, 0x01),
|
||||
HID_RI_INPUT(8, HID_IOF_CONSTANT),
|
||||
HID_RI_END_COLLECTION(0),
|
||||
};
|
||||
{
|
||||
/* Use the HID class driver's standard Joystick report.
|
||||
* Min X/Y Axis values: -100
|
||||
* Max X/Y Axis values: 100
|
||||
* Buttons: 2
|
||||
*/
|
||||
HID_DESCRIPTOR_JOYSTICK(-100, 100, 2)
|
||||
};
|
||||
|
||||
/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall
|
||||
* device characteristics, including the supported USB version, control endpoint size and the
|
||||
|
|
|
@ -160,7 +160,7 @@ bool CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const HIDIn
|
|||
JoystickReport->X = 100;
|
||||
|
||||
if (JoyStatus_LCL & JOY_PRESS)
|
||||
JoystickReport->Button = (1 << 1);
|
||||
JoystickReport->Button |= (1 << 1);
|
||||
|
||||
if (ButtonStatus_LCL & BUTTONS_BUTTON1)
|
||||
JoystickReport->Button |= (1 << 0);
|
||||
|
|
|
@ -45,38 +45,10 @@
|
|||
*/
|
||||
USB_Descriptor_HIDReport_Datatype_t PROGMEM KeyboardReport[] =
|
||||
{
|
||||
HID_RI_USAGE_PAGE(8, 0x01), /* Generic Desktop */
|
||||
HID_RI_USAGE(8, 0x06), /* Keyboard */
|
||||
HID_RI_COLLECTION(8, 0x01), /* Application */
|
||||
HID_RI_USAGE_PAGE(8, 0x07), /* Key Codes */
|
||||
HID_RI_USAGE_MINIMUM(8, 0xE0), /* Keyboard Left Control */
|
||||
HID_RI_USAGE_MAXIMUM(8, 0xE7), /* Keyboard Right GUI */
|
||||
HID_RI_LOGICAL_MINIMUM(8, 0x00),
|
||||
HID_RI_LOGICAL_MAXIMUM(8, 0x01),
|
||||
HID_RI_REPORT_SIZE(8, 0x01),
|
||||
HID_RI_REPORT_COUNT(8, 0x08),
|
||||
HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE | HID_IOF_NON_VOLATILE),
|
||||
HID_RI_REPORT_COUNT(8, 0x01),
|
||||
HID_RI_REPORT_SIZE(8, 0x08),
|
||||
HID_RI_INPUT(8, HID_IOF_CONSTANT),
|
||||
HID_RI_USAGE_PAGE(8, 0x08), /* LEDs */
|
||||
HID_RI_USAGE_MINIMUM(8, 0x01), /* Num Lock */
|
||||
HID_RI_USAGE_MAXIMUM(8, 0x05), /* Kana */
|
||||
HID_RI_REPORT_COUNT(8, 0x05),
|
||||
HID_RI_REPORT_SIZE(8, 0x01),
|
||||
HID_RI_OUTPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE | HID_IOF_NON_VOLATILE),
|
||||
HID_RI_REPORT_COUNT(8, 0x01),
|
||||
HID_RI_REPORT_SIZE(8, 0x03),
|
||||
HID_RI_OUTPUT(8, HID_IOF_CONSTANT),
|
||||
HID_RI_LOGICAL_MINIMUM(8, 0x00),
|
||||
HID_RI_LOGICAL_MAXIMUM(8, 0x65),
|
||||
HID_RI_USAGE_PAGE(8, 0x07), /* Keyboard */
|
||||
HID_RI_USAGE_MINIMUM(8, 0x00), /* Reserved (no event indicated) */
|
||||
HID_RI_USAGE_MAXIMUM(8, 0x65), /* Keyboard Application */
|
||||
HID_RI_REPORT_COUNT(8, 0x06),
|
||||
HID_RI_REPORT_SIZE(8, 0x08),
|
||||
HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_ARRAY | HID_IOF_ABSOLUTE | HID_IOF_NON_VOLATILE),
|
||||
HID_RI_END_COLLECTION(0),
|
||||
/* Use the HID class driver's standard Keyboard report.
|
||||
* Max simultaneous keys: 6
|
||||
*/
|
||||
HID_DESCRIPTOR_KEYBOARD(6)
|
||||
};
|
||||
|
||||
/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall
|
||||
|
|
|
@ -47,71 +47,24 @@
|
|||
*/
|
||||
USB_Descriptor_HIDReport_Datatype_t PROGMEM MouseReport[] =
|
||||
{
|
||||
HID_RI_USAGE_PAGE(8, 0x01), /* Generic Desktop */
|
||||
HID_RI_USAGE(8, 0x02), /* Mouse */
|
||||
HID_RI_COLLECTION(8, 0x01), /* Application */
|
||||
HID_RI_USAGE(8, 0x01), /* Pointer */
|
||||
HID_RI_COLLECTION(8, 0x00), /* Physical */
|
||||
HID_RI_USAGE_PAGE(8, 0x09), /* Button */
|
||||
HID_RI_USAGE_MINIMUM(8, 0x01),
|
||||
HID_RI_USAGE_MAXIMUM(8, 0x03),
|
||||
HID_RI_LOGICAL_MINIMUM(8, 0x00),
|
||||
HID_RI_LOGICAL_MAXIMUM(8, 0x01),
|
||||
HID_RI_REPORT_COUNT(8, 0x03),
|
||||
HID_RI_REPORT_SIZE(8, 0x01),
|
||||
HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE | HID_IOF_VOLATILE),
|
||||
HID_RI_REPORT_COUNT(8, 0x01),
|
||||
HID_RI_REPORT_SIZE(8, 0x05),
|
||||
HID_RI_INPUT(8, HID_IOF_CONSTANT),
|
||||
HID_RI_USAGE_PAGE(8, 0x01), /* Generic Desktop */
|
||||
HID_RI_USAGE(8, 0x30), /* Usage X */
|
||||
HID_RI_USAGE(8, 0x31), /* Usage Y */
|
||||
HID_RI_LOGICAL_MINIMUM(8, -1),
|
||||
HID_RI_LOGICAL_MAXIMUM(8, 1),
|
||||
HID_RI_PHYSICAL_MINIMUM(8, -1),
|
||||
HID_RI_PHYSICAL_MAXIMUM(8, 1),
|
||||
HID_RI_REPORT_COUNT(8, 0x02),
|
||||
HID_RI_REPORT_SIZE(8, 0x08),
|
||||
HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_RELATIVE | HID_IOF_NON_VOLATILE),
|
||||
HID_RI_END_COLLECTION(0),
|
||||
HID_RI_END_COLLECTION(0),
|
||||
/* Use the HID class driver's standard Mouse report.
|
||||
* Min X/Y Axis values: -1
|
||||
* Max X/Y Axis values: 1
|
||||
* Min physical X/Y Axis values (used to determine resolution): -1
|
||||
* Max physical X/Y Axis values (used to determine resolution): 1
|
||||
* Buttons: 3
|
||||
* Absolute screen coordinates: false
|
||||
*/
|
||||
HID_DESCRIPTOR_MOUSE(-1, 1, -1, 1, 3, false)
|
||||
};
|
||||
|
||||
/** Same as the MouseReport structure, but defines the keyboard HID interface's report structure. */
|
||||
USB_Descriptor_HIDReport_Datatype_t PROGMEM KeyboardReport[] =
|
||||
{
|
||||
HID_RI_USAGE_PAGE(8, 0x01), /* Generic Desktop */
|
||||
HID_RI_USAGE(8, 0x06), /* Keyboard */
|
||||
HID_RI_COLLECTION(8, 0x01), /* Application */
|
||||
HID_RI_USAGE_PAGE(8, 0x07), /* Key Codes */
|
||||
HID_RI_USAGE_MINIMUM(8, 0xE0), /* Keyboard Left Control */
|
||||
HID_RI_USAGE_MAXIMUM(8, 0xE7), /* Keyboard Right GUI */
|
||||
HID_RI_LOGICAL_MINIMUM(8, 0x00),
|
||||
HID_RI_LOGICAL_MAXIMUM(8, 0x01),
|
||||
HID_RI_REPORT_SIZE(8, 0x01),
|
||||
HID_RI_REPORT_COUNT(8, 0x08),
|
||||
HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE | HID_IOF_NON_VOLATILE),
|
||||
HID_RI_REPORT_COUNT(8, 0x01),
|
||||
HID_RI_REPORT_SIZE(8, 0x08),
|
||||
HID_RI_INPUT(8, HID_IOF_CONSTANT),
|
||||
HID_RI_USAGE_PAGE(8, 0x08), /* LEDs */
|
||||
HID_RI_USAGE_MINIMUM(8, 0x01), /* Num Lock */
|
||||
HID_RI_USAGE_MAXIMUM(8, 0x05), /* Kana */
|
||||
HID_RI_REPORT_COUNT(8, 0x05),
|
||||
HID_RI_REPORT_SIZE(8, 0x01),
|
||||
HID_RI_OUTPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE | HID_IOF_NON_VOLATILE),
|
||||
HID_RI_REPORT_COUNT(8, 0x01),
|
||||
HID_RI_REPORT_SIZE(8, 0x03),
|
||||
HID_RI_OUTPUT(8, HID_IOF_CONSTANT),
|
||||
HID_RI_LOGICAL_MINIMUM(8, 0x00),
|
||||
HID_RI_LOGICAL_MAXIMUM(8, 0x65),
|
||||
HID_RI_USAGE_PAGE(8, 0x07), /* Keyboard */
|
||||
HID_RI_USAGE_MINIMUM(8, 0x00), /* Reserved (no event indicated) */
|
||||
HID_RI_USAGE_MAXIMUM(8, 0x65), /* Keyboard Application */
|
||||
HID_RI_REPORT_COUNT(8, 0x06),
|
||||
HID_RI_REPORT_SIZE(8, 0x08),
|
||||
HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_ARRAY | HID_IOF_ABSOLUTE | HID_IOF_NON_VOLATILE),
|
||||
HID_RI_END_COLLECTION(0),
|
||||
/* Use the HID class driver's standard Keyboard report.
|
||||
* Max simultaneous keys: 6
|
||||
*/
|
||||
HID_DESCRIPTOR_KEYBOARD(6)
|
||||
};
|
||||
|
||||
/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall
|
||||
|
|
|
@ -58,38 +58,10 @@
|
|||
*/
|
||||
USB_Descriptor_HIDReport_Datatype_t PROGMEM KeyboardReport[] =
|
||||
{
|
||||
HID_RI_USAGE_PAGE(8, 0x01), /* Generic Desktop */
|
||||
HID_RI_USAGE(8, 0x06), /* Keyboard */
|
||||
HID_RI_COLLECTION(8, 0x01), /* Application */
|
||||
HID_RI_USAGE_PAGE(8, 0x07), /* Key Codes */
|
||||
HID_RI_USAGE_MINIMUM(8, 0xE0), /* Keyboard Left Control */
|
||||
HID_RI_USAGE_MAXIMUM(8, 0xE7), /* Keyboard Right GUI */
|
||||
HID_RI_LOGICAL_MINIMUM(8, 0x00),
|
||||
HID_RI_LOGICAL_MAXIMUM(8, 0x01),
|
||||
HID_RI_REPORT_SIZE(8, 0x01),
|
||||
HID_RI_REPORT_COUNT(8, 0x08),
|
||||
HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE | HID_IOF_NON_VOLATILE),
|
||||
HID_RI_REPORT_COUNT(8, 0x01),
|
||||
HID_RI_REPORT_SIZE(8, 0x08),
|
||||
HID_RI_INPUT(8, HID_IOF_CONSTANT),
|
||||
HID_RI_USAGE_PAGE(8, 0x08), /* LEDs */
|
||||
HID_RI_USAGE_MINIMUM(8, 0x01), /* Num Lock */
|
||||
HID_RI_USAGE_MAXIMUM(8, 0x05), /* Kana */
|
||||
HID_RI_REPORT_COUNT(8, 0x05),
|
||||
HID_RI_REPORT_SIZE(8, 0x01),
|
||||
HID_RI_OUTPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE | HID_IOF_NON_VOLATILE),
|
||||
HID_RI_REPORT_COUNT(8, 0x01),
|
||||
HID_RI_REPORT_SIZE(8, 0x03),
|
||||
HID_RI_OUTPUT(8, HID_IOF_CONSTANT),
|
||||
HID_RI_LOGICAL_MINIMUM(8, 0x00),
|
||||
HID_RI_LOGICAL_MAXIMUM(8, 0x65),
|
||||
HID_RI_USAGE_PAGE(8, 0x07), /* Keyboard */
|
||||
HID_RI_USAGE_MINIMUM(8, 0x00), /* Reserved (no event indicated) */
|
||||
HID_RI_USAGE_MAXIMUM(8, 0x65), /* Keyboard Application */
|
||||
HID_RI_REPORT_COUNT(8, 0x06),
|
||||
HID_RI_REPORT_SIZE(8, 0x08),
|
||||
HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_ARRAY | HID_IOF_ABSOLUTE | HID_IOF_NON_VOLATILE),
|
||||
HID_RI_END_COLLECTION(0),
|
||||
/* Use the HID class driver's standard Keyboard report.
|
||||
* Max simultaneous keys: 6
|
||||
*/
|
||||
HID_DESCRIPTOR_KEYBOARD(6)
|
||||
};
|
||||
|
||||
/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall
|
||||
|
|
|
@ -45,34 +45,15 @@
|
|||
*/
|
||||
USB_Descriptor_HIDReport_Datatype_t PROGMEM MouseReport[] =
|
||||
{
|
||||
HID_RI_USAGE_PAGE(8, 0x01), /* Generic Desktop */
|
||||
HID_RI_USAGE(8, 0x02), /* Mouse */
|
||||
HID_RI_COLLECTION(8, 0x01), /* Application */
|
||||
HID_RI_USAGE(8, 0x01), /* Pointer */
|
||||
HID_RI_COLLECTION(8, 0x00), /* Physical */
|
||||
HID_RI_USAGE_PAGE(8, 0x09), /* Button */
|
||||
HID_RI_USAGE_MINIMUM(8, 0x01),
|
||||
HID_RI_USAGE_MAXIMUM(8, 0x03),
|
||||
HID_RI_LOGICAL_MINIMUM(8, 0x00),
|
||||
HID_RI_LOGICAL_MAXIMUM(8, 0x01),
|
||||
HID_RI_REPORT_COUNT(8, 0x03),
|
||||
HID_RI_REPORT_SIZE(8, 0x01),
|
||||
HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE | HID_IOF_VOLATILE),
|
||||
HID_RI_REPORT_COUNT(8, 0x01),
|
||||
HID_RI_REPORT_SIZE(8, 0x05),
|
||||
HID_RI_INPUT(8, HID_IOF_CONSTANT),
|
||||
HID_RI_USAGE_PAGE(8, 0x01), /* Generic Desktop */
|
||||
HID_RI_USAGE(8, 0x30), /* Usage X */
|
||||
HID_RI_USAGE(8, 0x31), /* Usage Y */
|
||||
HID_RI_LOGICAL_MINIMUM(8, -1),
|
||||
HID_RI_LOGICAL_MAXIMUM(8, 1),
|
||||
HID_RI_PHYSICAL_MINIMUM(8, -1),
|
||||
HID_RI_PHYSICAL_MAXIMUM(8, 1),
|
||||
HID_RI_REPORT_COUNT(8, 0x02),
|
||||
HID_RI_REPORT_SIZE(8, 0x08),
|
||||
HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_RELATIVE | HID_IOF_NON_VOLATILE),
|
||||
HID_RI_END_COLLECTION(0),
|
||||
HID_RI_END_COLLECTION(0),
|
||||
/* Use the HID class driver's standard Mouse report.
|
||||
* Min X/Y Axis values: -1
|
||||
* Max X/Y Axis values: 1
|
||||
* Min physical X/Y Axis values (used to determine resolution): -1
|
||||
* Max physical X/Y Axis values (used to determine resolution): 1
|
||||
* Buttons: 3
|
||||
* Absolute screen coordinates: false
|
||||
*/
|
||||
HID_DESCRIPTOR_MOUSE(-1, 1, -1, 1, 3, false)
|
||||
};
|
||||
|
||||
/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall
|
||||
|
|
|
@ -57,34 +57,15 @@
|
|||
*/
|
||||
USB_Descriptor_HIDReport_Datatype_t PROGMEM MouseReport[] =
|
||||
{
|
||||
HID_RI_USAGE_PAGE(8, 0x01), /* Generic Desktop */
|
||||
HID_RI_USAGE(8, 0x02), /* Mouse */
|
||||
HID_RI_COLLECTION(8, 0x01), /* Application */
|
||||
HID_RI_USAGE(8, 0x01), /* Pointer */
|
||||
HID_RI_COLLECTION(8, 0x00), /* Physical */
|
||||
HID_RI_USAGE_PAGE(8, 0x09), /* Button */
|
||||
HID_RI_USAGE_MINIMUM(8, 0x01),
|
||||
HID_RI_USAGE_MAXIMUM(8, 0x03),
|
||||
HID_RI_LOGICAL_MINIMUM(8, 0x00),
|
||||
HID_RI_LOGICAL_MAXIMUM(8, 0x01),
|
||||
HID_RI_REPORT_COUNT(8, 0x03),
|
||||
HID_RI_REPORT_SIZE(8, 0x01),
|
||||
HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE | HID_IOF_VOLATILE),
|
||||
HID_RI_REPORT_COUNT(8, 0x01),
|
||||
HID_RI_REPORT_SIZE(8, 0x05),
|
||||
HID_RI_INPUT(8, HID_IOF_CONSTANT),
|
||||
HID_RI_USAGE_PAGE(8, 0x01), /* Generic Desktop */
|
||||
HID_RI_USAGE(8, 0x30), /* Usage X */
|
||||
HID_RI_USAGE(8, 0x31), /* Usage Y */
|
||||
HID_RI_LOGICAL_MINIMUM(8, -1),
|
||||
HID_RI_LOGICAL_MAXIMUM(8, 1),
|
||||
HID_RI_PHYSICAL_MINIMUM(8, -1),
|
||||
HID_RI_PHYSICAL_MAXIMUM(8, 1),
|
||||
HID_RI_REPORT_COUNT(8, 0x02),
|
||||
HID_RI_REPORT_SIZE(8, 0x08),
|
||||
HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_RELATIVE | HID_IOF_NON_VOLATILE),
|
||||
HID_RI_END_COLLECTION(0),
|
||||
HID_RI_END_COLLECTION(0),
|
||||
/* Use the HID class driver's standard Mouse report.
|
||||
* Min X/Y Axis values: -1
|
||||
* Max X/Y Axis values: 1
|
||||
* Min physical X/Y Axis values (used to determine resolution): -1
|
||||
* Max physical X/Y Axis values (used to determine resolution): 1
|
||||
* Buttons: 3
|
||||
* Absolute screen coordinates: false
|
||||
*/
|
||||
HID_DESCRIPTOR_MOUSE(-1, 1, -1, 1, 3, false)
|
||||
};
|
||||
|
||||
/** Device descriptor structure. This descriptor, located in FLASH memory, describes the overall
|
||||
|
|
|
@ -159,7 +159,7 @@ bool GetNextReport(USB_JoystickReport_Data_t* const ReportData)
|
|||
ReportData->X = 100;
|
||||
|
||||
if (JoyStatus_LCL & JOY_PRESS)
|
||||
ReportData->Button = (1 << 1);
|
||||
ReportData->Button |= (1 << 1);
|
||||
|
||||
if (ButtonStatus_LCL & BUTTONS_BUTTON1)
|
||||
ReportData->Button |= (1 << 0);
|
||||
|
|
|
@ -290,7 +290,7 @@ void Mouse_HID_Task(void)
|
|||
MouseReportData.X = -1;
|
||||
|
||||
if (JoyStatus_LCL & JOY_PRESS)
|
||||
MouseReportData.Button = (1 << 0);
|
||||
MouseReportData.Button |= (1 << 0);
|
||||
}
|
||||
|
||||
/* Select the Mouse Report Endpoint */
|
||||
|
|
|
@ -233,10 +233,10 @@ void CreateMouseReport(USB_MouseReport_Data_t* const ReportData)
|
|||
if (JoyStatus_LCL & JOY_LEFT)
|
||||
ReportData->X = -1;
|
||||
else if (JoyStatus_LCL & JOY_RIGHT)
|
||||
ReportData->X = 1;
|
||||
ReportData->X = 1;
|
||||
|
||||
if (JoyStatus_LCL & JOY_PRESS)
|
||||
ReportData->Button = (1 << 0);
|
||||
ReportData->Button |= (1 << 0);
|
||||
|
||||
if (ButtonStatus_LCL & BUTTONS_BUTTON1)
|
||||
ReportData->Button |= (1 << 1);
|
||||
|
|
|
@ -325,6 +325,159 @@
|
|||
#define HID_KEYBOARD_SC_RIGHT_GUI 0xE7
|
||||
//@}
|
||||
|
||||
/** \name Standard 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:
|
||||
*
|
||||
* \code
|
||||
* struct
|
||||
* {
|
||||
* uintA_t Buttons; // Pressed buttons bitmask
|
||||
* intB_t X; // Signed X axis value
|
||||
* intB_t Y; // Signed Y axis value
|
||||
* } Joystick_Report;
|
||||
* \endcode
|
||||
*
|
||||
* 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] Buttons Total number of buttons in the device
|
||||
*/
|
||||
#define HID_DESCRIPTOR_JOYSTICK(MinAxisVal, MaxAxisVal, 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_REPORT_SIZE(8, (((((uint16_t)MinAxisVal > 0xFF) && ((uint16_t)MaxAxisVal < 0xFF)) ? 8 : 16))), \
|
||||
HID_RI_REPORT_COUNT(8, 0x02), \
|
||||
HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE | HID_IOF_NON_VOLATILE), \
|
||||
HID_RI_END_COLLECTION(0), \
|
||||
HID_RI_USAGE_PAGE(8, 0x09), \
|
||||
HID_RI_USAGE_MINIMUM(8, 0x01), \
|
||||
HID_RI_USAGE_MAXIMUM(8, Buttons), \
|
||||
HID_RI_LOGICAL_MINIMUM(8, 0x00), \
|
||||
HID_RI_LOGICAL_MAXIMUM(8, 0x01), \
|
||||
HID_RI_REPORT_SIZE(8, 0x01), \
|
||||
HID_RI_REPORT_COUNT(8, Buttons), \
|
||||
HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE | HID_IOF_NON_VOLATILE), \
|
||||
HID_RI_REPORT_SIZE(8, (8 - (Buttons % 8))), \
|
||||
HID_RI_REPORT_COUNT(8, 0x01), \
|
||||
HID_RI_INPUT(8, HID_IOF_CONSTANT), \
|
||||
HID_RI_END_COLLECTION(0),
|
||||
|
||||
/** \hideinitializer
|
||||
* A list of HID report item array elements that describe a typical HID USB keyboard. The resulting report descriptor
|
||||
* is compatible with \ref USB_KeyboardReport_Data_t when \c MaxKeys is equal to 6. For other values, the report will
|
||||
* be structured according to the following layout:
|
||||
*
|
||||
* \code
|
||||
* struct
|
||||
* {
|
||||
* uint8_t Modifier; // Keyboard modifier byte indicating pressed modifier keys (HID_KEYBOARD_MODIFER_* masks)
|
||||
* uint8_t Reserved; // Reserved for OEM use, always set to 0.
|
||||
* uint8_t KeyCode[MaxKeys]; // Length determined by the number of keys that can be reported
|
||||
* } 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) )
|
||||
*/
|
||||
#define HID_DESCRIPTOR_KEYBOARD(MaxKeys) \
|
||||
HID_RI_USAGE_PAGE(8, 0x01), \
|
||||
HID_RI_USAGE(8, 0x06), \
|
||||
HID_RI_COLLECTION(8, 0x01), \
|
||||
HID_RI_USAGE_PAGE(8, 0x07), \
|
||||
HID_RI_USAGE_MINIMUM(8, 0xE0), \
|
||||
HID_RI_USAGE_MAXIMUM(8, 0xE7), \
|
||||
HID_RI_LOGICAL_MINIMUM(8, 0x00), \
|
||||
HID_RI_LOGICAL_MAXIMUM(8, 0x01), \
|
||||
HID_RI_REPORT_SIZE(8, 0x01), \
|
||||
HID_RI_REPORT_COUNT(8, 0x08), \
|
||||
HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE | HID_IOF_NON_VOLATILE), \
|
||||
HID_RI_REPORT_COUNT(8, 0x01), \
|
||||
HID_RI_REPORT_SIZE(8, 0x08), \
|
||||
HID_RI_INPUT(8, HID_IOF_CONSTANT), \
|
||||
HID_RI_USAGE_PAGE(8, 0x08), \
|
||||
HID_RI_USAGE_MINIMUM(8, 0x01), \
|
||||
HID_RI_USAGE_MAXIMUM(8, 0x05), \
|
||||
HID_RI_REPORT_COUNT(8, 0x05), \
|
||||
HID_RI_REPORT_SIZE(8, 0x01), \
|
||||
HID_RI_OUTPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE | HID_IOF_NON_VOLATILE), \
|
||||
HID_RI_REPORT_COUNT(8, 0x01), \
|
||||
HID_RI_REPORT_SIZE(8, 0x03), \
|
||||
HID_RI_OUTPUT(8, HID_IOF_CONSTANT), \
|
||||
HID_RI_LOGICAL_MINIMUM(8, 0x00), \
|
||||
HID_RI_LOGICAL_MAXIMUM(8, 0x65), \
|
||||
HID_RI_USAGE_PAGE(8, 0x07), \
|
||||
HID_RI_USAGE_MINIMUM(8, 0x00), \
|
||||
HID_RI_USAGE_MAXIMUM(8, 0x65), \
|
||||
HID_RI_REPORT_COUNT(8, MaxKeys), \
|
||||
HID_RI_REPORT_SIZE(8, 0x08), \
|
||||
HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_ARRAY | HID_IOF_ABSOLUTE | HID_IOF_NON_VOLATILE), \
|
||||
HID_RI_END_COLLECTION(0),
|
||||
|
||||
/** \hideinitializer
|
||||
* A list of HID report item array elements that describe a typical HID USB mouse. The resulting report descriptor
|
||||
* is compatible with \ref USB_MouseReport_Data_t if the \c MinAxisVal and \c MaxAxisVal values fit within a \c int8_t range
|
||||
* and the number of Buttons is less than 8. For other values, the report is structured according to the following layout:
|
||||
*
|
||||
* \code
|
||||
* struct
|
||||
* {
|
||||
* uintA_t Buttons; // Pressed buttons bitmask
|
||||
* intB_t X; // X axis value
|
||||
* intB_t Y; // Y axis value
|
||||
* } Mouse_Report;
|
||||
* \endcode
|
||||
*
|
||||
* 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] AbsoluteCoords Boolean true to use absolute X/Y coordinates (e.g. touchscreen)
|
||||
*/
|
||||
#define HID_DESCRIPTOR_MOUSE(MinAxisVal, MaxAxisVal, MinPhysicalVal, MaxPhysicalVal, Buttons, AbsoluteCoords) \
|
||||
HID_RI_USAGE_PAGE(8, 0x01), \
|
||||
HID_RI_USAGE(8, 0x02), \
|
||||
HID_RI_COLLECTION(8, 0x01), \
|
||||
HID_RI_USAGE(8, 0x01), \
|
||||
HID_RI_COLLECTION(8, 0x00), \
|
||||
HID_RI_USAGE_PAGE(8, 0x09), \
|
||||
HID_RI_USAGE_MINIMUM(8, 0x01), \
|
||||
HID_RI_USAGE_MAXIMUM(8, Buttons), \
|
||||
HID_RI_LOGICAL_MINIMUM(8, 0x00), \
|
||||
HID_RI_LOGICAL_MAXIMUM(8, 0x01), \
|
||||
HID_RI_REPORT_COUNT(8, Buttons), \
|
||||
HID_RI_REPORT_SIZE(8, 0x01), \
|
||||
HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE | HID_IOF_VOLATILE), \
|
||||
HID_RI_REPORT_COUNT(8, 0x01), \
|
||||
HID_RI_REPORT_SIZE(8, (8 - (Buttons % 8))), \
|
||||
HID_RI_INPUT(8, HID_IOF_CONSTANT), \
|
||||
HID_RI_USAGE_PAGE(8, 0x01), \
|
||||
HID_RI_USAGE(8, 0x30), \
|
||||
HID_RI_USAGE(8, 0x31), \
|
||||
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_SIZE(8, (((((uint16_t)MinAxisVal > 0xFF) && ((uint16_t)MaxAxisVal < 0xFF)) ? 8 : 16))), \
|
||||
HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | (AbsoluteCoords ? HID_IOF_ABSOLUTE : HID_IOF_RELATIVE) | HID_IOF_NON_VOLATILE), \
|
||||
HID_RI_END_COLLECTION(0), \
|
||||
HID_RI_END_COLLECTION(0),
|
||||
//@}
|
||||
|
||||
/* Type Defines: */
|
||||
/** Enum for possible Class, Subclass and Protocol values of device and interface descriptors relating to the HID
|
||||
* device class.
|
||||
|
|
|
@ -17,7 +17,9 @@
|
|||
* - Added basic driver example use code to the library documentation
|
||||
* - Added new Endpoint_Null_Stream() and Pipe_Null_stream() functions
|
||||
* - Added new ADC_GET_CHANNEL_MASK() convenience macro
|
||||
* - New HID report item macros (with HID_RI_ prefix) to allow for easy creation and editing of HID report descriptors
|
||||
* - Added new HID report item macros (with HID_RI_ prefix) to allow for easy creation and editing of HID report descriptors
|
||||
* - Added new HID_DESCRIPTOR_MOUSE, HID_DESCRIPTOR_KEYBOARD and HID_DESCRIPTOR_JOYSTICK macros for easy automatic creation of
|
||||
* basic USB HID device reports
|
||||
* - Library Applications:
|
||||
* - Added ability to write protect Mass Storage disk write operations from the host OS
|
||||
*
|
||||
|
|
Loading…
Reference in New Issue