Fixed PDI programming mode in the AVRISP programmer project not exiting programming...
[pub/USBasp.git] / Demos / Device / ClassDriver / MassStorageKeyboard / MassStorageKeyboard.c
index 295dbfc..4816b7e 100644 (file)
@@ -1,14 +1,14 @@
 /*\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  Matthias Hullin (lufa [at] matthias [dot] hullin [dot] net)\r
+  Copyright 2010  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+  Copyright 2010  Matthias Hullin (lufa [at] matthias [dot] hullin [dot] net)\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
@@ -118,12 +118,6 @@ void SetupHardware(void)
 \r
        /* Clear Dataflash sector protections, if enabled */\r
        DataflashManager_ResetDataflashProtections();\r
 \r
        /* Clear Dataflash sector protections, if enabled */\r
        DataflashManager_ResetDataflashProtections();\r
-\r
-       /* Millisecond timer initialization, with output compare interrupt enabled for the HID idle timing */\r
-       OCR0A  = ((F_CPU / 64) / 1000);\r
-       TCCR0A = (1 << WGM01);\r
-       TCCR0B = ((1 << CS01) | (1 << CS00));\r
-       TIMSK0 = (1 << OCIE0A);\r
 }\r
 \r
 /** Event handler for the library USB Connection event. */\r
 }\r
 \r
 /** Event handler for the library USB Connection event. */\r
@@ -145,8 +139,11 @@ void EVENT_USB_Device_ConfigurationChanged(void)
 \r
        if (!(MS_Device_ConfigureEndpoints(&Disk_MS_Interface)))\r
          LEDs_SetAllLEDs(LEDMASK_USB_ERROR);\r
 \r
        if (!(MS_Device_ConfigureEndpoints(&Disk_MS_Interface)))\r
          LEDs_SetAllLEDs(LEDMASK_USB_ERROR);\r
+\r
        if (!(HID_Device_ConfigureEndpoints(&Keyboard_HID_Interface)))\r
          LEDs_SetAllLEDs(LEDMASK_USB_ERROR);\r
        if (!(HID_Device_ConfigureEndpoints(&Keyboard_HID_Interface)))\r
          LEDs_SetAllLEDs(LEDMASK_USB_ERROR);\r
+\r
+       USB_Device_EnableSOFEvents();\r
 }\r
 \r
 /** Event handler for the library USB Unhandled Control Request event. */\r
 }\r
 \r
 /** Event handler for the library USB Unhandled Control Request event. */\r
@@ -171,10 +168,10 @@ bool CALLBACK_MS_Device_SCSICommandReceived(USB_ClassInfo_MS_Device_t* MSInterfa
        return CommandSuccess;\r
 }\r
 \r
        return CommandSuccess;\r
 }\r
 \r
-/** ISR to keep track of each millisecond interrupt, for determining the HID class idle period remaining when set. */\r
-ISR(TIMER0_COMPA_vect, ISR_BLOCK)\r
+/** Event handler for the USB device Start Of Frame event. */\r
+void EVENT_USB_Device_StartOfFrame(void)\r
 {\r
 {\r
-       HID_Device_MillisecondElapsed(&Keyboard_HID_Interface);\r
+    HID_Device_MillisecondElapsed(&Keyboard_HID_Interface);\r
 }\r
 \r
 /** HID class driver callback function for the creation of HID reports to the host.\r
 }\r
 \r
 /** HID class driver callback function for the creation of HID reports to the host.\r
@@ -195,6 +192,8 @@ bool CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const HIDIn
        uint8_t JoyStatus_LCL    = Joystick_GetStatus();\r
        uint8_t ButtonStatus_LCL = Buttons_GetStatus();\r
 \r
        uint8_t JoyStatus_LCL    = Joystick_GetStatus();\r
        uint8_t ButtonStatus_LCL = Buttons_GetStatus();\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
@@ -228,13 +227,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