- switch green LED on and flash yellow LED, while Bootloader mode
  is enabled.
- stay in Bootloader mode always for 5 seconds
+
+static volatile bool stayinbootloader;
+
 /** Main program entry point. This routine configures the hardware required by the bootloader, then continuously
  *  runs the bootloader processing routine until instructed to soft-exit, or hard-reset via the watchdog to start
  *  the loaded application code.
 /** Main program entry point. This routine configures the hardware required by the bootloader, then continuously
  *  runs the bootloader processing routine until instructed to soft-exit, or hard-reset via the watchdog to start
  *  the loaded application code.
        SetupHardware();
 
        /* Turn on first LED on the board to indicate that the bootloader has started */
        SetupHardware();
 
        /* Turn on first LED on the board to indicate that the bootloader has started */
-       LEDs_SetAllLEDs(LEDS_LED1);
+       //LEDs_SetAllLEDs(LEDS_LED1);
 
        /* Enable global interrupts so that the USB stack can function */
        GlobalInterruptEnable();
 
        /* Run the USB management task while the bootloader is supposed to be running */
 
        /* Enable global interrupts so that the USB stack can function */
        GlobalInterruptEnable();
 
        /* Run the USB management task while the bootloader is supposed to be running */
+       /*if bit_is_clear(PINB,PB5)     // PB5 is Digital 9 on Arduino Pro Micro
+       {
+               loop_until_bit_is_set(PINB,PB5);
+
+               while ((RunBootloader || WaitForExit) && bit_is_set(PINB,PB5))
+                       USB_USBTask();
+
+               loop_until_bit_is_clear(PINB,PB5);
+       }*/
+
+       stayinbootloader = false;
+
+       uint16_t i = 0;
        while (RunBootloader || WaitForExit)
        while (RunBootloader || WaitForExit)
+       {
+               USB_USBTask();
+
+               if (!stayinbootloader)
+               {
+                       _delay_ms(1);
+                       if (i++ > 5000)
+                       {
+                               break;
+                       }
+               }
+               else
+               {
+                       i = 0;
+               }
+       }
 
        /* Reset configured hardware back to their original states for the user application */
        ResetHardware();
 
        /* Reset configured hardware back to their original states for the user application */
        ResetHardware();
 
        /* Initialize the USB and other board hardware drivers */
        USB_Init();
 
        /* Initialize the USB and other board hardware drivers */
        USB_Init();
+       //LEDs_Init();
+       DDRB = 1;
+       PORTB = _BV(PB5);
+       DDRD = 0b00100000;
+       PORTD = 0;
 
        /* Bootloader active LED toggle timer initialization */
        TIMSK1 = (1 << TOIE1);
 
        /* Bootloader active LED toggle timer initialization */
        TIMSK1 = (1 << TOIE1);
 {
        /* Shut down the USB and other board hardware drivers */
        USB_Disable();
 {
        /* Shut down the USB and other board hardware drivers */
        USB_Disable();
+       //LEDs_Disable();
+       DDRB = 0;
+       PORTB = 0;
+       DDRD = 0;
+       PORTD = 0;
        
        /* Disable Bootloader active LED toggle timer */
        TIMSK1 = 0;
        
        /* Disable Bootloader active LED toggle timer */
        TIMSK1 = 0;
 /** ISR to periodically toggle the LEDs on the board to indicate that the bootloader is active. */
 ISR(TIMER1_OVF_vect, ISR_BLOCK)
 {
 /** ISR to periodically toggle the LEDs on the board to indicate that the bootloader is active. */
 ISR(TIMER1_OVF_vect, ISR_BLOCK)
 {
-       LEDs_ToggleLEDs(LEDS_LED1 | LEDS_LED2);
+       //LEDs_ToggleLEDs(LEDS_LED1 | LEDS_LED2);
+       PORTB &= ~_BV(PB0);
+       _delay_ms(5);
+       PORTB |= _BV(PB0);
 }
 
 /** Event handler for the USB_ControlRequest event. This is used to catch and process control requests sent to
 }
 
 /** Event handler for the USB_ControlRequest event. This is used to catch and process control requests sent to
+stayinbootloader = true;
+
        /* Activity - toggle indicator LEDs */
        /* Activity - toggle indicator LEDs */
-       LEDs_ToggleLEDs(LEDS_LED1 | LEDS_LED2);
+       //LEDs_ToggleLEDs(LEDS_LED1 | LEDS_LED2);
+       PORTB &= ~_BV(PB0);
+       _delay_ms(5);
+       PORTB |= _BV(PB0);
 
        /* Get the size of the command and data from the wLength value */
        SentCommand.DataSize = USB_ControlRequest.wLength;
 
        /* Get the size of the command and data from the wLength value */
        SentCommand.DataSize = USB_ControlRequest.wLength;
 
                #include "Config/AppConfig.h"
 
                #include <LUFA/Drivers/USB/USB.h>
                #include "Config/AppConfig.h"
 
                #include <LUFA/Drivers/USB/USB.h>
-               #include <LUFA/Drivers/Board/LEDs.h>
+               //#include <LUFA/Drivers/Board/LEDs.h>
 
        /* Macros: */
                /** Major bootloader version number. */
 
        /* Macros: */
                /** Major bootloader version number. */
 
 
 # Run "make help" for target help.
 
 
 # Run "make help" for target help.
 
 F_CPU        = 8000000
 F_USB        = $(F_CPU)
 OPTIMIZATION = s
 F_CPU        = 8000000
 F_USB        = $(F_CPU)
 OPTIMIZATION = s
 # Flash size and bootloader section sizes of the target, in KB. These must
 # match the target's total FLASH size and the bootloader size set in the
 # device's fuses.
 # Flash size and bootloader section sizes of the target, in KB. These must
 # match the target's total FLASH size and the bootloader size set in the
 # device's fuses.
-FLASH_SIZE_KB         = 128
-BOOT_SECTION_SIZE_KB  = 8
+FLASH_SIZE_KB         = 32
+BOOT_SECTION_SIZE_KB  = 4
 
 # Bootloader address calculation formulas
 # Do not modify these macros, but rather modify the dependent values above.
 
 # Bootloader address calculation formulas
 # Do not modify these macros, but rather modify the dependent values above.