Add support for Mouse Scrollwheel to the MouseHostWithParser demos.

pull/1469/head
Dean Camera 15 years ago
parent 87b2572ae5
commit ba8ffa4cb7

@ -141,6 +141,21 @@ int main(void)
if (ReportItem->Value) if (ReportItem->Value)
LEDMask = LEDS_ALL_LEDS; LEDMask = LEDS_ALL_LEDS;
} }
else if ((ReportItem->Attributes.Usage.Page == USAGE_PAGE_GENERIC_DCTRL) &&
(ReportItem->Attributes.Usage.Usage == USAGE_SCROLL_WHEEL) &&
(ReportItem->ItemType == REPORT_ITEM_TYPE_In))
{
/* Get the mouse wheel value if it is contained within the current
* report, if not, skip to the next item in the parser list
*/
if (!(USB_GetHIDReportItemInfo(MouseReport, ReportItem)))
continue;
int16_t WheelDelta = (int16_t)(ReportItem->Value << (16 - ReportItem->Attributes.BitSize));
if (WheelDelta)
LEDMask = (LEDS_LED1 | LEDS_LED2 | ((WheelDelta > 0) ? LEDS_LED3 : LEDS_LED4));
}
else if ((ReportItem->Attributes.Usage.Page == USAGE_PAGE_GENERIC_DCTRL) && else if ((ReportItem->Attributes.Usage.Page == USAGE_PAGE_GENERIC_DCTRL) &&
((ReportItem->Attributes.Usage.Usage == USAGE_X) || ((ReportItem->Attributes.Usage.Usage == USAGE_X) ||
(ReportItem->Attributes.Usage.Usage == USAGE_Y)) && (ReportItem->Attributes.Usage.Usage == USAGE_Y)) &&

@ -78,6 +78,9 @@
/** HID Report Descriptor Usage value for a Y axis movement */ /** HID Report Descriptor Usage value for a Y axis movement */
#define USAGE_Y 0x31 #define USAGE_Y 0x31
/** HID Report Descriptor Usage value for a Scroll Wheel movement */
#define USAGE_SCROLL_WHEEL 0x38
/* Function Prototypes: */ /* Function Prototypes: */
void SetupHardware(void); void SetupHardware(void);

@ -47,10 +47,10 @@
* reports, allowing for correct operation across all USB mice. This * reports, allowing for correct operation across all USB mice. This
* demo supports mice with a single HID report. * demo supports mice with a single HID report.
* *
* Mouse movement and button presses are displayed on the board LEDs. * Mouse and scroll wheel movement and button presses are displayed
* On connection to a USB mouse, the report items will be processed and * on the board LEDs. On connection to a USB mouse, the report items
* printed as a formatted list through the USART before the mouse is * will be processed and printed as a formatted list through the USART
* fully enumerated. * before the mouse is fully enumerated.
* *
* Currently only single interface mice are supported. * Currently only single interface mice are supported.
* *

@ -174,7 +174,7 @@ uint8_t ProcessConfigurationDescriptor(void)
* *
* This comparator searches for the next Interface descriptor of the correct CDC control Class, Subclass and Protocol values. * This comparator searches for the next Interface descriptor of the correct CDC control Class, Subclass and Protocol values.
* *
* \return A value from the \ref DSEARCH_Return_ErrorCodes_t enum * \return A value from the DSEARCH_Return_ErrorCodes_t enum
*/ */
uint8_t DComp_NextCDCControlInterface(void* CurrentDescriptor) uint8_t DComp_NextCDCControlInterface(void* CurrentDescriptor)
{ {
@ -198,7 +198,7 @@ uint8_t DComp_NextCDCControlInterface(void* CurrentDescriptor)
* *
* This comparator searches for the next Interface descriptor of the correct CDC data Class, Subclass and Protocol values. * This comparator searches for the next Interface descriptor of the correct CDC data Class, Subclass and Protocol values.
* *
* \return A value from the \ref DSEARCH_Return_ErrorCodes_t enum * \return A value from the DSEARCH_Return_ErrorCodes_t enum
*/ */
uint8_t DComp_NextCDCDataInterface(void* CurrentDescriptor) uint8_t DComp_NextCDCDataInterface(void* CurrentDescriptor)
{ {
@ -224,7 +224,7 @@ uint8_t DComp_NextCDCDataInterface(void* CurrentDescriptor)
* aborting the search if another interface descriptor is found before the required endpoint (so that it may be compared * aborting the search if another interface descriptor is found before the required endpoint (so that it may be compared
* using a different comparator to determine if it is another CDC class interface). * using a different comparator to determine if it is another CDC class interface).
* *
* \return A value from the \ref DSEARCH_Return_ErrorCodes_t enum * \return A value from the DSEARCH_Return_ErrorCodes_t enum
*/ */
uint8_t DComp_NextCDCDataInterfaceEndpoint(void* CurrentDescriptor) uint8_t DComp_NextCDCDataInterfaceEndpoint(void* CurrentDescriptor)
{ {

@ -120,7 +120,7 @@ uint8_t ProcessConfigurationDescriptor(void)
* *
* This comparator searches for the next Interface descriptor of the correct HID Class value. * This comparator searches for the next Interface descriptor of the correct HID Class value.
* *
* \return A value from the \ref DSEARCH_Return_ErrorCodes_t enum * \return A value from the DSEARCH_Return_ErrorCodes_t enum
*/ */
uint8_t DComp_NextHIDInterface(void* CurrentDescriptor) uint8_t DComp_NextHIDInterface(void* CurrentDescriptor)
{ {
@ -146,7 +146,7 @@ uint8_t DComp_NextHIDInterface(void* CurrentDescriptor)
* This comparator searches for the next Endpoint descriptor inside the current interface descriptor, * This comparator searches for the next Endpoint descriptor inside the current interface descriptor,
* aborting the search if another interface descriptor is found before the required endpoint. * aborting the search if another interface descriptor is found before the required endpoint.
* *
* \return A value from the \ref DSEARCH_Return_ErrorCodes_t enum * \return A value from the DSEARCH_Return_ErrorCodes_t enum
*/ */
uint8_t DComp_NextHIDInterfaceDataEndpoint(void* CurrentDescriptor) uint8_t DComp_NextHIDInterfaceDataEndpoint(void* CurrentDescriptor)
{ {

@ -108,7 +108,7 @@ uint8_t ProcessConfigurationDescriptor(void)
* *
* This comparator searches for the next Interface descriptor of the correct Joystick HID Class and Protocol values. * This comparator searches for the next Interface descriptor of the correct Joystick HID Class and Protocol values.
* *
* \return A value from the \ref DSEARCH_Return_ErrorCodes_t enum * \return A value from the DSEARCH_Return_ErrorCodes_t enum
*/ */
uint8_t DComp_NextJoystickInterface(void* CurrentDescriptor) uint8_t DComp_NextJoystickInterface(void* CurrentDescriptor)
{ {
@ -132,7 +132,7 @@ uint8_t DComp_NextJoystickInterface(void* CurrentDescriptor)
* This comparator searches for the next IN Endpoint descriptor inside the current interface descriptor, * This comparator searches for the next IN Endpoint descriptor inside the current interface descriptor,
* aborting the search if another interface descriptor is found before the required endpoint. * aborting the search if another interface descriptor is found before the required endpoint.
* *
* \return A value from the \ref DSEARCH_Return_ErrorCodes_t enum * \return A value from the DSEARCH_Return_ErrorCodes_t enum
*/ */
uint8_t DComp_NextJoystickInterfaceDataEndpoint(void* CurrentDescriptor) uint8_t DComp_NextJoystickInterfaceDataEndpoint(void* CurrentDescriptor)
{ {
@ -155,7 +155,7 @@ uint8_t DComp_NextJoystickInterfaceDataEndpoint(void* CurrentDescriptor)
* *
* This comparator searches for the next HID descriptor within the current HID interface descriptor. * This comparator searches for the next HID descriptor within the current HID interface descriptor.
* *
* \return A value from the \ref DSEARCH_Return_ErrorCodes_t enum * \return A value from the DSEARCH_Return_ErrorCodes_t enum
*/ */
uint8_t DComp_NextHID(void* CurrentDescriptor) uint8_t DComp_NextHID(void* CurrentDescriptor)
{ {

@ -97,7 +97,7 @@ uint8_t ProcessConfigurationDescriptor(void)
* *
* This comparator searches for the next Interface descriptor of the correct Keyboard HID Class and Protocol values. * This comparator searches for the next Interface descriptor of the correct Keyboard HID Class and Protocol values.
* *
* \return A value from the \ref DSEARCH_Return_ErrorCodes_t enum * \return A value from the DSEARCH_Return_ErrorCodes_t enum
*/ */
uint8_t DComp_NextKeyboardInterface(void* CurrentDescriptor) uint8_t DComp_NextKeyboardInterface(void* CurrentDescriptor)
{ {
@ -121,7 +121,7 @@ uint8_t DComp_NextKeyboardInterface(void* CurrentDescriptor)
* This comparator searches for the next IN Endpoint descriptor inside the current interface descriptor, * This comparator searches for the next IN Endpoint descriptor inside the current interface descriptor,
* aborting the search if another interface descriptor is found before the required endpoint. * aborting the search if another interface descriptor is found before the required endpoint.
* *
* \return A value from the \ref DSEARCH_Return_ErrorCodes_t enum * \return A value from the DSEARCH_Return_ErrorCodes_t enum
*/ */
uint8_t DComp_NextKeyboardInterfaceDataEndpoint(void* CurrentDescriptor) uint8_t DComp_NextKeyboardInterfaceDataEndpoint(void* CurrentDescriptor)
{ {

@ -108,7 +108,7 @@ uint8_t ProcessConfigurationDescriptor(void)
* *
* This comparator searches for the next Interface descriptor of the correct Keyboard HID Class and Protocol values. * This comparator searches for the next Interface descriptor of the correct Keyboard HID Class and Protocol values.
* *
* \return A value from the \ref DSEARCH_Return_ErrorCodes_t enum * \return A value from the DSEARCH_Return_ErrorCodes_t enum
*/ */
uint8_t DComp_NextKeyboardInterface(void* CurrentDescriptor) uint8_t DComp_NextKeyboardInterface(void* CurrentDescriptor)
{ {
@ -132,7 +132,7 @@ uint8_t DComp_NextKeyboardInterface(void* CurrentDescriptor)
* This comparator searches for the next IN Endpoint descriptor inside the current interface descriptor, * This comparator searches for the next IN Endpoint descriptor inside the current interface descriptor,
* aborting the search if another interface descriptor is found before the required endpoint. * aborting the search if another interface descriptor is found before the required endpoint.
* *
* \return A value from the \ref DSEARCH_Return_ErrorCodes_t enum * \return A value from the DSEARCH_Return_ErrorCodes_t enum
*/ */
uint8_t DComp_NextKeyboardInterfaceDataEndpoint(void* CurrentDescriptor) uint8_t DComp_NextKeyboardInterfaceDataEndpoint(void* CurrentDescriptor)
{ {
@ -155,7 +155,7 @@ uint8_t DComp_NextKeyboardInterfaceDataEndpoint(void* CurrentDescriptor)
* *
* This comparator searches for the next HID descriptor within the current HID interface descriptor. * This comparator searches for the next HID descriptor within the current HID interface descriptor.
* *
* \return A value from the \ref DSEARCH_Return_ErrorCodes_t enum * \return A value from the DSEARCH_Return_ErrorCodes_t enum
*/ */
uint8_t DComp_NextHID(void* CurrentDescriptor) uint8_t DComp_NextHID(void* CurrentDescriptor)
{ {

@ -117,7 +117,7 @@ uint8_t ProcessConfigurationDescriptor(void)
* *
* This comparator searches for the next Interface descriptor of the correct MIDI Streaming Class, Subclass and Protocol values. * This comparator searches for the next Interface descriptor of the correct MIDI Streaming Class, Subclass and Protocol values.
* *
* \return A value from the \ref DSEARCH_Return_ErrorCodes_t enum * \return A value from the DSEARCH_Return_ErrorCodes_t enum
*/ */
uint8_t DComp_NextMIDIStreamingInterface(void* CurrentDescriptor) uint8_t DComp_NextMIDIStreamingInterface(void* CurrentDescriptor)
{ {
@ -142,7 +142,7 @@ uint8_t DComp_NextMIDIStreamingInterface(void* CurrentDescriptor)
* This comparator searches for the next bulk IN or OUT endpoint within the current interface, aborting the search if * This comparator searches for the next bulk IN or OUT endpoint within the current interface, aborting the search if
* another interface descriptor is found before the required endpoint. * another interface descriptor is found before the required endpoint.
* *
* \return A value from the \ref DSEARCH_Return_ErrorCodes_t enum * \return A value from the DSEARCH_Return_ErrorCodes_t enum
*/ */
uint8_t DComp_NextMIDIStreamingDataEndpoint(void* CurrentDescriptor) uint8_t DComp_NextMIDIStreamingDataEndpoint(void* CurrentDescriptor)
{ {

@ -119,7 +119,7 @@ uint8_t ProcessConfigurationDescriptor(void)
* *
* This comparator searches for the next Interface descriptor of the correct Mass Storage Class, Subclass and Protocol values. * This comparator searches for the next Interface descriptor of the correct Mass Storage Class, Subclass and Protocol values.
* *
* \return A value from the \ref DSEARCH_Return_ErrorCodes_t enum * \return A value from the DSEARCH_Return_ErrorCodes_t enum
*/ */
uint8_t DComp_NextMSInterface(void* CurrentDescriptor) uint8_t DComp_NextMSInterface(void* CurrentDescriptor)
{ {
@ -144,7 +144,7 @@ uint8_t DComp_NextMSInterface(void* CurrentDescriptor)
* This comparator searches for the next Bulk Endpoint descriptor of the correct MSD interface, aborting the search if * This comparator searches for the next Bulk Endpoint descriptor of the correct MSD interface, aborting the search if
* another interface descriptor is found before the next endpoint. * another interface descriptor is found before the next endpoint.
* *
* \return A value from the \ref DSEARCH_Return_ErrorCodes_t enum * \return A value from the DSEARCH_Return_ErrorCodes_t enum
*/ */
uint8_t DComp_NextMSInterfaceBulkDataEndpoint(void* CurrentDescriptor) uint8_t DComp_NextMSInterfaceBulkDataEndpoint(void* CurrentDescriptor)
{ {

@ -97,7 +97,7 @@ uint8_t ProcessConfigurationDescriptor(void)
* *
* This comparator searches for the next Interface descriptor of the correct Mouse HID Class and Protocol values. * This comparator searches for the next Interface descriptor of the correct Mouse HID Class and Protocol values.
* *
* \return A value from the \ref DSEARCH_Return_ErrorCodes_t enum * \return A value from the DSEARCH_Return_ErrorCodes_t enum
*/ */
uint8_t DComp_NextMouseInterface(void* CurrentDescriptor) uint8_t DComp_NextMouseInterface(void* CurrentDescriptor)
{ {
@ -124,7 +124,7 @@ uint8_t DComp_NextMouseInterface(void* CurrentDescriptor)
* This comparator searches for the next IN Endpoint descriptor inside the current interface descriptor, * This comparator searches for the next IN Endpoint descriptor inside the current interface descriptor,
* aborting the search if another interface descriptor is found before the required endpoint. * aborting the search if another interface descriptor is found before the required endpoint.
* *
* \return A value from the \ref DSEARCH_Return_ErrorCodes_t enum * \return A value from the DSEARCH_Return_ErrorCodes_t enum
*/ */
uint8_t DComp_NextMouseInterfaceDataEndpoint(void* CurrentDescriptor) uint8_t DComp_NextMouseInterfaceDataEndpoint(void* CurrentDescriptor)
{ {

@ -108,7 +108,7 @@ uint8_t ProcessConfigurationDescriptor(void)
* *
* This comparator searches for the next Interface descriptor of the correct Mouse HID Class and Protocol values. * This comparator searches for the next Interface descriptor of the correct Mouse HID Class and Protocol values.
* *
* \return A value from the \ref DSEARCH_Return_ErrorCodes_t enum * \return A value from the DSEARCH_Return_ErrorCodes_t enum
*/ */
uint8_t DComp_NextMouseInterface(void* CurrentDescriptor) uint8_t DComp_NextMouseInterface(void* CurrentDescriptor)
{ {
@ -132,7 +132,7 @@ uint8_t DComp_NextMouseInterface(void* CurrentDescriptor)
* This comparator searches for the next IN Endpoint descriptor inside the current interface descriptor, * This comparator searches for the next IN Endpoint descriptor inside the current interface descriptor,
* aborting the search if another interface descriptor is found before the required endpoint. * aborting the search if another interface descriptor is found before the required endpoint.
* *
* \return A value from the \ref DSEARCH_Return_ErrorCodes_t enum * \return A value from the DSEARCH_Return_ErrorCodes_t enum
*/ */
uint8_t DComp_NextMouseInterfaceDataEndpoint(void* CurrentDescriptor) uint8_t DComp_NextMouseInterfaceDataEndpoint(void* CurrentDescriptor)
{ {
@ -155,7 +155,7 @@ uint8_t DComp_NextMouseInterfaceDataEndpoint(void* CurrentDescriptor)
* *
* This comparator searches for the next HID descriptor within the current HID interface descriptor. * This comparator searches for the next HID descriptor within the current HID interface descriptor.
* *
* \return A value from the \ref DSEARCH_Return_ErrorCodes_t enum * \return A value from the DSEARCH_Return_ErrorCodes_t enum
*/ */
uint8_t DComp_NextHID(void* CurrentDescriptor) uint8_t DComp_NextHID(void* CurrentDescriptor)
{ {

@ -58,6 +58,9 @@
/** HID Report Descriptor Usage value for a Y axis movement */ /** HID Report Descriptor Usage value for a Y axis movement */
#define USAGE_Y 0x31 #define USAGE_Y 0x31
/** HID Report Descriptor Usage value for a Scroll Wheel movement */
#define USAGE_SCROLL_WHEEL 0x38
/* Enums: */ /* Enums: */
/** Enum for the possible return codes of the GetHIDReportData() function. */ /** Enum for the possible return codes of the GetHIDReportData() function. */
enum MouseHostWithParser_GetHIDReportDataCodes_t enum MouseHostWithParser_GetHIDReportDataCodes_t

@ -270,6 +270,21 @@ void ProcessMouseReport(uint8_t* MouseReport)
if (ReportItem->Value) if (ReportItem->Value)
LEDMask = LEDS_ALL_LEDS; LEDMask = LEDS_ALL_LEDS;
} }
else if ((ReportItem->Attributes.Usage.Page == USAGE_PAGE_GENERIC_DCTRL) &&
(ReportItem->Attributes.Usage.Usage == USAGE_SCROLL_WHEEL) &&
(ReportItem->ItemType == REPORT_ITEM_TYPE_In))
{
/* Get the mouse wheel value if it is contained within the current
* report, if not, skip to the next item in the parser list
*/
if (!(USB_GetHIDReportItemInfo(MouseReport, ReportItem)))
continue;
int16_t WheelDelta = (int16_t)(ReportItem->Value << (16 - ReportItem->Attributes.BitSize));
if (WheelDelta)
LEDMask = (LEDS_LED1 | LEDS_LED2 | ((WheelDelta > 0) ? LEDS_LED3 : LEDS_LED4));
}
else if ((ReportItem->Attributes.Usage.Page == USAGE_PAGE_GENERIC_DCTRL) && else if ((ReportItem->Attributes.Usage.Page == USAGE_PAGE_GENERIC_DCTRL) &&
((ReportItem->Attributes.Usage.Usage == USAGE_X) || ((ReportItem->Attributes.Usage.Usage == USAGE_X) ||
(ReportItem->Attributes.Usage.Usage == USAGE_Y)) && (ReportItem->Attributes.Usage.Usage == USAGE_Y)) &&

@ -47,10 +47,10 @@
* reports, allowing for correct operation across all USB mice. This * reports, allowing for correct operation across all USB mice. This
* demo supports mice with a single HID report. * demo supports mice with a single HID report.
* *
* Mouse movement and button presses are displayed on the board LEDs. * Mouse and scroll wheel movement and button presses are displayed
* On connection to a USB mouse, the report items will be processed and * on the board LEDs. On connection to a USB mouse, the report items
* printed as a formatted list through the USART before the mouse is * will be processed and printed as a formatted list through the USART
* fully enumerated. * before the mouse is fully enumerated.
* *
* Currently only single interface mice are supported. * Currently only single interface mice are supported.
* *

@ -122,7 +122,7 @@ uint8_t ProcessConfigurationDescriptor(void)
* This comparator searches for the next Bidirectional Printer Interface descriptor of the current Printer interface, * This comparator searches for the next Bidirectional Printer Interface descriptor of the current Printer interface,
* aborting the search if the end of the descriptors is found. * aborting the search if the end of the descriptors is found.
* *
* \return A value from the \ref DSEARCH_Return_ErrorCodes_t enum * \return A value from the DSEARCH_Return_ErrorCodes_t enum
*/ */
uint8_t DComp_NextBidirectionalPrinterInterface(void* CurrentDescriptor) uint8_t DComp_NextBidirectionalPrinterInterface(void* CurrentDescriptor)
{ {
@ -147,7 +147,7 @@ uint8_t DComp_NextBidirectionalPrinterInterface(void* CurrentDescriptor)
* This comparator searches for the next Bulk Endpoint descriptor of the current Printer interface, aborting the * This comparator searches for the next Bulk Endpoint descriptor of the current Printer interface, aborting the
* search if another interface descriptor is found before the next endpoint. * search if another interface descriptor is found before the next endpoint.
* *
* \return A value from the \ref DSEARCH_Return_ErrorCodes_t enum * \return A value from the DSEARCH_Return_ErrorCodes_t enum
*/ */
uint8_t DComp_NextPrinterInterfaceBulkDataEndpoint(void* CurrentDescriptor) uint8_t DComp_NextPrinterInterfaceBulkDataEndpoint(void* CurrentDescriptor)
{ {

@ -139,7 +139,7 @@ uint8_t ProcessConfigurationDescriptor(void)
* *
* This comparator searches for the next Interface descriptor of the correct Still Image Class, Subclass and Protocol values. * This comparator searches for the next Interface descriptor of the correct Still Image Class, Subclass and Protocol values.
* *
* \return A value from the \ref DSEARCH_Return_ErrorCodes_t enum * \return A value from the DSEARCH_Return_ErrorCodes_t enum
*/ */
uint8_t DComp_NextStillImageInterface(void* CurrentDescriptor) uint8_t DComp_NextStillImageInterface(void* CurrentDescriptor)
{ {
@ -164,7 +164,7 @@ uint8_t DComp_NextStillImageInterface(void* CurrentDescriptor)
* This comparator searches for the next Interrupt or Bulk Endpoint descriptor of the current SI interface, aborting the * This comparator searches for the next Interrupt or Bulk Endpoint descriptor of the current SI interface, aborting the
* search if another interface descriptor is found before the next endpoint. * search if another interface descriptor is found before the next endpoint.
* *
* \return A value from the \ref DSEARCH_Return_ErrorCodes_t enum * \return A value from the DSEARCH_Return_ErrorCodes_t enum
*/ */
uint8_t DComp_NextStillImageInterfaceDataEndpoint(void* CurrentDescriptor) uint8_t DComp_NextStillImageInterfaceDataEndpoint(void* CurrentDescriptor)
{ {

Loading…
Cancel
Save