Ensure the DFU bootloader disables and clears the activity LED toggle timer when...
[pub/USBasp.git] / Projects / LEDNotifier / LEDNotifier.c
index da4ee9e..dd3a8ae 100644 (file)
@@ -1,21 +1,21 @@
 /*
              LUFA Library
-     Copyright (C) Dean Camera, 2010.
-              
+     Copyright (C) Dean Camera, 2012.
+
   dean [at] fourwalledcubicle [dot] com
-      www.fourwalledcubicle.com
+           www.lufa-lib.org
 */
 
 /*
-  Copyright 2010  Dean Camera (dean [at] fourwalledcubicle [dot] com)
+  Copyright 2012  Dean Camera (dean [at] fourwalledcubicle [dot] com)
 
-  Permission to use, copy, modify, distribute, and sell this 
+  Permission to use, copy, modify, distribute, and sell this
   software and its documentation for any purpose is hereby granted
-  without fee, provided that the above copyright notice appear in 
+  without fee, provided that the above copyright notice appear in
   all copies and that both that the copyright notice and this
-  permission notice and warranty disclaimer appear in supporting 
-  documentation, and that the name of the author not be used in 
-  advertising or publicity pertaining to distribution of the 
+  permission notice and warranty disclaimer appear in supporting
+  documentation, and that the name of the author not be used in
+  advertising or publicity pertaining to distribution of the
   software without specific, written prior permission.
 
   The author disclaim all warranties with regard to this
@@ -31,9 +31,9 @@
 /** \file
  *
  *  Main source file for the LEDNotfier project. This file contains the main tasks of
- *  the demo and is responsible for the initial application hardware configuration.
+ *  the project and is responsible for the initial application hardware configuration.
  */
+
 #include "LEDNotifier.h"
 
 /** LUFA CDC Class driver interface configuration and state information. This structure is
@@ -44,19 +44,25 @@ USB_ClassInfo_CDC_Device_t VirtualSerial_CDC_Interface =
        {
                .Config =
                        {
-                               .ControlInterfaceNumber         = 0,
-
-                               .DataINEndpointNumber           = CDC_TX_EPNUM,
-                               .DataINEndpointSize             = CDC_TXRX_EPSIZE,
-                               .DataINEndpointDoubleBank       = false,
-
-                               .DataOUTEndpointNumber          = CDC_RX_EPNUM,
-                               .DataOUTEndpointSize            = CDC_TXRX_EPSIZE,
-                               .DataOUTEndpointDoubleBank      = false,
-
-                               .NotificationEndpointNumber     = CDC_NOTIFICATION_EPNUM,
-                               .NotificationEndpointSize       = CDC_NOTIFICATION_EPSIZE,
-                               .NotificationEndpointDoubleBank = false,
+                               .ControlInterfaceNumber   = 0,
+                               .DataINEndpoint           =
+                                       {
+                                               .Address          = CDC_TX_EPADDR,
+                                               .Size             = CDC_TXRX_EPSIZE,
+                                               .Banks            = 1,
+                                       },
+                               .DataOUTEndpoint =
+                                       {
+                                               .Address          = CDC_RX_EPADDR,
+                                               .Size             = CDC_TXRX_EPSIZE,
+                                               .Banks            = 1,
+                                       },
+                               .NotificationEndpoint =
+                                       {
+                                               .Address          = CDC_NOTIFICATION_EPADDR,
+                                               .Size             = CDC_NOTIFICATION_EPSIZE,
+                                               .Banks            = 1,
+                                       },
                        },
        };
 
@@ -72,6 +78,11 @@ static volatile uint8_t SoftPWM_Channel2_Duty;
 /** Duty cycle for the third software PWM channel */
 static volatile uint8_t SoftPWM_Channel3_Duty;
 
+/** Standard file stream for the CDC interface when set up, so that the virtual CDC COM port can be
+ *  used like any regular character stream in the C APIs
+ */
+static FILE USBSerialStream;
+
 
 /** Interrupt handler for managing the software PWM channels for the LEDs */
 ISR(TIMER0_COMPA_vect, ISR_BLOCK)
@@ -89,39 +100,34 @@ ISR(TIMER0_COMPA_vect, ISR_BLOCK)
 
        if (SoftPWM_Count >= SoftPWM_Channel3_Duty)
          LEDMask &= ~LEDS_LED3;
-         
+
        LEDs_SetAllLEDs(LEDMask);
 }
 
-/** Standard file stream for the CDC interface when set up, so that the virtual CDC COM port can be
- *  used like any regular character stream in the C APIs
- */
-static FILE USBSerialStream;
-
 /** Main program entry point. This routine contains the overall program flow, including initial
  *  setup of all components and the main program loop.
  */
 int main(void)
 {
        SetupHardware();
-       
+
        /* Create a regular blocking character stream for the interface so that it can be used with the stdio.h functions */
        CDC_Device_CreateBlockingStream(&VirtualSerial_CDC_Interface, &USBSerialStream);
-       
+
        sei();
 
        for (;;)
        {
                /* Read in next LED colour command from the host */
-               uint8_t ColorUpdate = fgetc(&USBSerialStream);
-               
+               uint8_t ColourUpdate = fgetc(&USBSerialStream);
+
                /* Top 3 bits select the LED, bottom 5 control the brightness */
-               uint8_t Channel = (ColorUpdate & 0b11100000);
-               uint8_t Duty    = (ColorUpdate & 0b00011111);
-               
+               uint8_t Channel = (ColourUpdate & 0b11100000);
+               uint8_t Duty    = (ColourUpdate & 0b00011111);
+
                if (Channel & (1 << 5))
                  SoftPWM_Channel1_Duty = Duty;
-               
+
                if (Channel & (1 << 6))
                  SoftPWM_Channel2_Duty = Duty;
 
@@ -146,7 +152,7 @@ void SetupHardware(void)
        /* Hardware Initialization */
        LEDs_Init();
        USB_Init();
-       
+
        /* Timer Initialization */
        OCR0A  = 100;
        TCCR0A = (1 << WGM01);
@@ -160,8 +166,9 @@ void EVENT_USB_Device_ConfigurationChanged(void)
        CDC_Device_ConfigureEndpoints(&VirtualSerial_CDC_Interface);
 }
 
-/** Event handler for the library USB Unhandled Control Request event. */
-void EVENT_USB_Device_UnhandledControlRequest(void)
+/** Event handler for the library USB Control Request reception event. */
+void EVENT_USB_Device_ControlRequest(void)
 {
        CDC_Device_ProcessControlRequest(&VirtualSerial_CDC_Interface);
 }
+