/* Re-enable JTAG debugging */
JTAG_ENABLE();
#else
- /* Check if the device's BOOTRST fuse is set */
- if (boot_lock_fuse_bits_get(GET_HIGH_FUSE_BITS) & FUSE_BOOTRST)
- {
- /* If the reset source was not an external reset or the key is correct, clear it and jump to the application */
- if (!(MCUSR & (1 << EXTRF)) || (MagicBootKey == MAGIC_BOOT_KEY))
- JumpToApplication = true;
-
- /* Clear reset source */
- MCUSR &= ~(1 << EXTRF);
- }
- else
{
/* If the reset source was the bootloader and the key is correct, clear it and jump to the application;
* this can happen in the HWBE fuse is set, and the HBE pin is low during the watchdog reset */
}
}
+
+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.
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 */
+ /*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)
- USB_USBTask();
+ {
+ 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();
/* Initialize the USB and other board hardware drivers */
USB_Init();
- LEDs_Init();
+ //LEDs_Init();
+ DDRB = 1;
+ PORTB = _BV(PB5);
+ DDRD = 0b00100000;
+ PORTD = 0;
/* Bootloader active LED toggle timer initialization */
TIMSK1 = (1 << TOIE1);
{
/* Shut down the USB and other board hardware drivers */
USB_Disable();
- LEDs_Disable();
+ //LEDs_Disable();
+ DDRB = 0;
+ PORTB = 0;
+ DDRD = 0;
+ PORTD = 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)
{
- 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
return;
}
+stayinbootloader = true;
+
/* 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;
--- /dev/null
+"""\r
+ LUFA Library\r
+ Copyright (C) Dean Camera, 2013.\r
+\r
+ dean [at] fourwalledcubicle [dot] com\r
+ www.lufa-lib.org\r
+"""\r
+\r
+import sys\r
+sys.path.append("ProjectGenerator")\r
+\r
+\r
+def show_message(message):\r
+ print "[Project Generator] %s" % message\r
+ sys.stdout.flush()\r
+\r
+\r
+def main(lufa_root_path):\r
+ try:\r
+ from asf_avrstudio5_interface import PythonFacade\r
+ except ImportError:\r
+ print "Fatal Error: The ASF project generator is missing."\r
+ return 1\r
+\r
+ p = PythonFacade(lufa_root_path)\r
+\r
+ show_message("Checking database sanity...")\r
+ p.check_extension_database_sanity(lufa_root_path)\r
+\r
+ show_message("Building cache files...")\r
+ p.generate_extension_cache_files(lufa_root_path)\r
+\r
+ show_message("Cache files created.")\r
+ return 0\r
+\r
+\r
+if __name__ == "__main__":\r
+ sys.exit(main(sys.argv[1]))\r