Device mode class driver callbacks are now fired before the control request status...
[pub/USBasp.git] / Demos / Device / ClassDriver / KeyboardMouse / KeyboardMouse.c
index e73bf12..94f27bd 100644 (file)
@@ -1,14 +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 2009  Denver Gingerich (denver [at] ossguy [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
@@ -72,13 +71,13 @@ USB_ClassInfo_HID_Device_t Mouse_HID_Interface =
        {\r
                .Config =\r
                        {\r
        {\r
                .Config =\r
                        {\r
-                               .InterfaceNumber         = 0,\r
+                               .InterfaceNumber              = 1,\r
 \r
 \r
-                               .ReportINEndpointNumber  = MOUSE_IN_EPNUM,\r
-                               .ReportINEndpointSize    = HID_EPSIZE,\r
+                               .ReportINEndpointNumber       = MOUSE_IN_EPNUM,\r
+                               .ReportINEndpointSize         = HID_EPSIZE,\r
 \r
 \r
-                               .PrevReportINBuffer      = PrevMouseHIDReportBuffer,\r
-                               .PrevReportINBufferSize  = sizeof(PrevMouseHIDReportBuffer),\r
+                               .PrevReportINBuffer           = PrevMouseHIDReportBuffer,\r
+                               .PrevReportINBufferSize       = sizeof(PrevMouseHIDReportBuffer),\r
                        },              \r
        };\r
 \r
                        },              \r
        };\r
 \r
@@ -90,6 +89,7 @@ int main(void)
        SetupHardware();\r
 \r
        LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
        SetupHardware();\r
 \r
        LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);\r
+       sei();\r
 \r
        for (;;)\r
        {\r
 \r
        for (;;)\r
        {\r
@@ -180,6 +180,8 @@ bool CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const HIDIn
                if (!(ButtonStatus_LCL & BUTTONS_BUTTON1))\r
                  return 0;\r
                \r
                if (!(ButtonStatus_LCL & BUTTONS_BUTTON1))\r
                  return 0;\r
                \r
+               KeyboardReport->Modifier = HID_KEYBOARD_MODIFER_LEFTSHIFT;\r
+\r
                if (JoyStatus_LCL & JOY_UP)\r
                  KeyboardReport->KeyCode[0] = 0x04; // A\r
                else if (JoyStatus_LCL & JOY_DOWN)\r
                if (JoyStatus_LCL & JOY_UP)\r
                  KeyboardReport->KeyCode[0] = 0x04; // A\r
                else if (JoyStatus_LCL & JOY_DOWN)\r
@@ -215,7 +217,7 @@ bool CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const HIDIn
                  MouseReport->X =  1;\r
 \r
                if (JoyStatus_LCL & JOY_PRESS)\r
                  MouseReport->X =  1;\r
 \r
                if (JoyStatus_LCL & JOY_PRESS)\r
-                 MouseReport->Button  = (1 << 0);\r
+                 MouseReport->Button |= (1 << 0);\r
                \r
                *ReportSize = sizeof(USB_MouseReport_Data_t);\r
                return true;            \r
                \r
                *ReportSize = sizeof(USB_MouseReport_Data_t);\r
                return true;            \r
@@ -237,13 +239,13 @@ void CALLBACK_HID_Device_ProcessHIDReport(USB_ClassInfo_HID_Device_t* const HIDI
                uint8_t  LEDMask   = LEDS_NO_LEDS;\r
                uint8_t* LEDReport = (uint8_t*)ReportData;\r
 \r
                uint8_t  LEDMask   = LEDS_NO_LEDS;\r
                uint8_t* LEDReport = (uint8_t*)ReportData;\r
 \r
-               if (*LEDReport & 0x01) // NUM Lock\r
+               if (*LEDReport & HID_KEYBOARD_LED_NUMLOCK)\r
                  LEDMask |= LEDS_LED1;\r
                \r
                  LEDMask |= LEDS_LED1;\r
                \r
-               if (*LEDReport & 0x02) // CAPS Lock\r
+               if (*LEDReport & HID_KEYBOARD_LED_CAPSLOCK)\r
                  LEDMask |= LEDS_LED3;\r
 \r
                  LEDMask |= LEDS_LED3;\r
 \r
-               if (*LEDReport & 0x04) // SCROLL Lock\r
+               if (*LEDReport & HID_KEYBOARD_LED_SCROLLLOCK)\r
                  LEDMask |= LEDS_LED4;\r
                  \r
                LEDs_SetAllLEDs(LEDMask);\r
                  LEDMask |= LEDS_LED4;\r
                  \r
                LEDs_SetAllLEDs(LEDMask);\r