Fixed incorrect comparison in the descriptor callback routine of the TeensyHID bootlo...
[pub/USBasp.git] / Demos / Host / ClassDriver / MouseHostWithParser / MouseHostWithParser.c
index 1da5966..40a74f5 100644 (file)
@@ -1,13 +1,13 @@
 /*\r
              LUFA Library\r
 /*\r
              LUFA Library\r
-     Copyright (C) Dean Camera, 2009.\r
+     Copyright (C) Dean Camera, 2010.\r
               \r
   dean [at] fourwalledcubicle [dot] com\r
       www.fourwalledcubicle.com\r
 */\r
 \r
 /*\r
               \r
   dean [at] fourwalledcubicle [dot] com\r
       www.fourwalledcubicle.com\r
 */\r
 \r
 /*\r
-  Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+  Copyright 2010  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
 \r
   Permission to use, copy, modify, distribute, and sell this \r
   software and its documentation for any purpose is hereby granted\r
 \r
   Permission to use, copy, modify, distribute, and sell this \r
   software and its documentation for any purpose is hereby granted\r
@@ -68,6 +68,7 @@ int main(void)
        SetupHardware();\r
 \r
        puts_P(PSTR(ESC_FG_CYAN "Mouse Host Demo running.\r\n" ESC_FG_WHITE));\r
        SetupHardware();\r
 \r
        puts_P(PSTR(ESC_FG_CYAN "Mouse Host Demo running.\r\n" ESC_FG_WHITE));\r
+       sei();\r
 \r
        LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
 \r
 \r
        LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
 \r
@@ -84,7 +85,7 @@ int main(void)
                                if (USB_Host_GetDeviceConfigDescriptor(1, &ConfigDescriptorSize, ConfigDescriptorData,\r
                                                                       sizeof(ConfigDescriptorData)) != HOST_GETCONFIG_Successful)\r
                                {\r
                                if (USB_Host_GetDeviceConfigDescriptor(1, &ConfigDescriptorSize, ConfigDescriptorData,\r
                                                                       sizeof(ConfigDescriptorData)) != HOST_GETCONFIG_Successful)\r
                                {\r
-                                       printf("Error Retrieving Configuration Descriptor.\r\n");\r
+                                       puts_P(PSTR("Error Retrieving Configuration Descriptor.\r\n"));\r
                                        LEDs_SetAllLEDs(LEDMASK_USB_ERROR);\r
                                        USB_HostState = HOST_STATE_WaitForDeviceRemoval;\r
                                        break;\r
                                        LEDs_SetAllLEDs(LEDMASK_USB_ERROR);\r
                                        USB_HostState = HOST_STATE_WaitForDeviceRemoval;\r
                                        break;\r
@@ -93,7 +94,7 @@ int main(void)
                                if (HID_Host_ConfigurePipes(&Mouse_HID_Interface,\r
                                                            ConfigDescriptorSize, ConfigDescriptorData) != HID_ENUMERROR_NoError)\r
                                {\r
                                if (HID_Host_ConfigurePipes(&Mouse_HID_Interface,\r
                                                            ConfigDescriptorSize, ConfigDescriptorData) != HID_ENUMERROR_NoError)\r
                                {\r
-                                       printf("Attached Device Not a Valid Mouse.\r\n");\r
+                                       puts_P(PSTR("Attached Device Not a Valid Mouse.\r\n"));\r
                                        LEDs_SetAllLEDs(LEDMASK_USB_ERROR);\r
                                        USB_HostState = HOST_STATE_WaitForDeviceRemoval;\r
                                        break;\r
                                        LEDs_SetAllLEDs(LEDMASK_USB_ERROR);\r
                                        USB_HostState = HOST_STATE_WaitForDeviceRemoval;\r
                                        break;\r
@@ -101,7 +102,7 @@ int main(void)
                                \r
                                if (USB_Host_SetDeviceConfiguration(1) != HOST_SENDCONTROL_Successful)\r
                                {\r
                                \r
                                if (USB_Host_SetDeviceConfiguration(1) != HOST_SENDCONTROL_Successful)\r
                                {\r
-                                       printf("Error Setting Device Configuration.\r\n");\r
+                                       puts_P(PSTR("Error Setting Device Configuration.\r\n"));\r
                                        LEDs_SetAllLEDs(LEDMASK_USB_ERROR);\r
                                        USB_HostState = HOST_STATE_WaitForDeviceRemoval;\r
                                        break;\r
                                        LEDs_SetAllLEDs(LEDMASK_USB_ERROR);\r
                                        USB_HostState = HOST_STATE_WaitForDeviceRemoval;\r
                                        break;\r
@@ -109,15 +110,14 @@ int main(void)
 \r
                                if (HID_Host_SetReportProtocol(&Mouse_HID_Interface) != 0)\r
                                {\r
 \r
                                if (HID_Host_SetReportProtocol(&Mouse_HID_Interface) != 0)\r
                                {\r
-                                       printf("Error Setting Report Protocol Mode or Not a Valid Mouse.\r\n");\r
+                                       puts_P(PSTR("Error Setting Report Protocol Mode or Not a Valid Mouse.\r\n"));\r
                                        LEDs_SetAllLEDs(LEDMASK_USB_ERROR);\r
                                        USB_HostState = HOST_STATE_WaitForDeviceRemoval;\r
                                        break;\r
                                }\r
                                \r
                                        LEDs_SetAllLEDs(LEDMASK_USB_ERROR);\r
                                        USB_HostState = HOST_STATE_WaitForDeviceRemoval;\r
                                        break;\r
                                }\r
                                \r
-                               LEDs_SetAllLEDs(LEDS_NO_LEDS);\r
-                               \r
-                               printf("Mouse Enumerated.\r\n");\r
+                               puts_P(PSTR("Mouse Enumerated.\r\n"));\r
+                               LEDs_SetAllLEDs(LEDMASK_USB_READY);\r
                                USB_HostState = HOST_STATE_Configured;\r
                                break;\r
                        case HOST_STATE_Configured:\r
                                USB_HostState = HOST_STATE_Configured;\r
                                break;\r
                        case HOST_STATE_Configured:\r
@@ -132,15 +132,14 @@ int main(void)
                                        {\r
                                                HID_ReportItem_t* ReportItem = &HIDReportInfo.ReportItems[ReportNumber];\r
                                                \r
                                        {\r
                                                HID_ReportItem_t* ReportItem = &HIDReportInfo.ReportItems[ReportNumber];\r
                                                \r
+                                               /* Update the report item value if it is contained within the current report */\r
+                                               if (!(USB_GetHIDReportItemInfo(MouseReport, ReportItem)))\r
+                                                 continue;\r
+                                               \r
+                                               /* Determine what report item is being tested, process updated value as needed */\r
                                                if ((ReportItem->Attributes.Usage.Page        == USAGE_PAGE_BUTTON) &&\r
                                                        (ReportItem->ItemType                     == REPORT_ITEM_TYPE_In))\r
                                                {\r
                                                if ((ReportItem->Attributes.Usage.Page        == USAGE_PAGE_BUTTON) &&\r
                                                        (ReportItem->ItemType                     == REPORT_ITEM_TYPE_In))\r
                                                {\r
-                                                       /* Get the mouse button value if it is contained within the current report, if not,\r
-                                                        * skip to the next item in the parser list\r
-                                                        */\r
-                                                       if (!(USB_GetHIDReportItemInfo(MouseReport, ReportItem)))\r
-                                                         continue;\r
-\r
                                                        if (ReportItem->Value)\r
                                                          LEDMask = LEDS_ALL_LEDS;\r
                                                }\r
                                                        if (ReportItem->Value)\r
                                                          LEDMask = LEDS_ALL_LEDS;\r
                                                }\r
@@ -148,13 +147,7 @@ int main(void)
                                                                 (ReportItem->Attributes.Usage.Usage  == USAGE_SCROLL_WHEEL)       &&\r
                                                                 (ReportItem->ItemType                == REPORT_ITEM_TYPE_In))\r
                                                {\r
                                                                 (ReportItem->Attributes.Usage.Usage  == USAGE_SCROLL_WHEEL)       &&\r
                                                                 (ReportItem->ItemType                == REPORT_ITEM_TYPE_In))\r
                                                {\r
-                                                       /* Get the mouse wheel value if it is contained within the current \r
-                                                        * report, if not, skip to the next item in the parser list\r
-                                                        */\r
-                                                       if (!(USB_GetHIDReportItemInfo(MouseReport, ReportItem)))\r
-                                                         continue;                                                       \r
-\r
-                                                       int16_t WheelDelta = (int16_t)(ReportItem->Value << (16 - ReportItem->Attributes.BitSize));\r
+                                                       int16_t WheelDelta = HID_ALIGN_DATA(ReportItem, int16_t);\r
                                                        \r
                                                        if (WheelDelta)\r
                                                          LEDMask = (LEDS_LED1 | LEDS_LED2 | ((WheelDelta > 0) ? LEDS_LED3 : LEDS_LED4));\r
                                                        \r
                                                        if (WheelDelta)\r
                                                          LEDMask = (LEDS_LED1 | LEDS_LED2 | ((WheelDelta > 0) ? LEDS_LED3 : LEDS_LED4));\r
@@ -164,13 +157,7 @@ int main(void)
                                                                  (ReportItem->Attributes.Usage.Usage == USAGE_Y))                 &&\r
                                                                 (ReportItem->ItemType                == REPORT_ITEM_TYPE_In))\r
                                                {\r
                                                                  (ReportItem->Attributes.Usage.Usage == USAGE_Y))                 &&\r
                                                                 (ReportItem->ItemType                == REPORT_ITEM_TYPE_In))\r
                                                {\r
-                                                       /* Get the mouse relative position value if it is contained within the current \r
-                                                        * report, if not, skip to the next item in the parser list\r
-                                                        */\r
-                                                       if (!(USB_GetHIDReportItemInfo(MouseReport, ReportItem)))\r
-                                                         continue;                                                       \r
-\r
-                                                       int16_t DeltaMovement = (int16_t)(ReportItem->Value << (16 - ReportItem->Attributes.BitSize));\r
+                                                       int16_t DeltaMovement = HID_ALIGN_DATA(ReportItem, int16_t);\r
                                                        \r
                                                        if (ReportItem->Attributes.Usage.Usage == USAGE_X)\r
                                                        {\r
                                                        \r
                                                        if (ReportItem->Attributes.Usage.Usage == USAGE_X)\r
                                                        {\r