The ATPROGRAM LUFA build system module now defaults to the Atmel ICE debuger tool...
[pub/USBasp.git] / Bootloaders / CDC / BootloaderCDC.c
index acdcde3..c7eeb92 100644 (file)
@@ -1,13 +1,13 @@
 /*
              LUFA Library
-     Copyright (C) Dean Camera, 2013.
+     Copyright (C) Dean Camera, 2014.
 
   dean [at] fourwalledcubicle [dot] com
            www.lufa-lib.org
 */
 
 /*
-  Copyright 2013  Dean Camera (dean [at] fourwalledcubicle [dot] com)
+  Copyright 2014  Dean Camera (dean [at] fourwalledcubicle [dot] com)
 
   Permission to use, copy, modify, distribute, and sell this
   software and its documentation for any purpose is hereby granted
@@ -91,6 +91,10 @@ void Application_Jump_Check(void)
        if ((MCUSR & (1 << WDRF)) && (MagicBootKey == MAGIC_BOOT_KEY))
          JumpToApplication |= true;
 
+       /* Don't run the user application if the reset vector is blank (no app loaded) */
+       if (pgm_read_word_near(0) == 0xFFFF)
+         JumpToApplication = false;
+
        /* If a request has been made to jump to the user application, honor it */
        if (JumpToApplication)
        {
@@ -223,14 +227,22 @@ void EVENT_USB_Device_ControlRequest(void)
                        }
 
                        break;
+        case CDC_REQ_SetControlLineState:
+               if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE))
+               {
+                   Endpoint_ClearSETUP();
+                   Endpoint_ClearStatusStage();
+               }
+
+               break;
        }
 }
 
 #if !defined(NO_BLOCK_SUPPORT)
 /** Reads or writes a block of EEPROM or FLASH memory to or from the appropriate CDC data endpoint, depending
- *  on the AVR910 protocol command issued.
+ *  on the AVR109 protocol command issued.
  *
- *  \param[in] Command  Single character AVR910 protocol command indicating what memory operation to perform
+ *  \param[in] Command  Single character AVR109 protocol command indicating what memory operation to perform
  */
 static void ReadWriteMemoryBlock(const uint8_t Command)
 {
@@ -394,7 +406,7 @@ static void WriteNextResponseByte(const uint8_t Response)
        Endpoint_Write_8(Response);
 }
 
-/** Task to read in AVR910 commands from the CDC data OUT endpoint, process them, perform the required actions
+/** Task to read in AVR109 commands from the CDC data OUT endpoint, process them, perform the required actions
  *  and send the appropriate response back to the host.
  */
 static void CDC_Task(void)