aboutsummaryrefslogtreecommitdiff
path: root/bootloaders/caterina_LUFA
diff options
context:
space:
mode:
Diffstat (limited to 'bootloaders/caterina_LUFA')
-rwxr-xr-xbootloaders/caterina_LUFA/Caterina.c698
-rwxr-xr-xbootloaders/caterina_LUFA/Caterina.h99
-rw-r--r--bootloaders/caterina_LUFA/Caterina.hex256
-rwxr-xr-xbootloaders/caterina_LUFA/Descriptors.c265
-rwxr-xr-xbootloaders/caterina_LUFA/Descriptors.h139
-rwxr-xr-xbootloaders/caterina_LUFA/makefile717
6 files changed, 0 insertions, 2174 deletions
diff --git a/bootloaders/caterina_LUFA/Caterina.c b/bootloaders/caterina_LUFA/Caterina.c
deleted file mode 100755
index c8e82a9..0000000
--- a/bootloaders/caterina_LUFA/Caterina.c
+++ /dev/null
@@ -1,698 +0,0 @@
-/*
- LUFA Library
- Copyright (C) Dean Camera, 2011.
-
- dean [at] fourwalledcubicle [dot] com
- www.lufa-lib.org
-*/
-
-/*
- Copyright 2011 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
- 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
- software without specific, written prior permission.
-
- The author disclaim all warranties with regard to this
- software, including all implied warranties of merchantability
- and fitness. In no event shall the author be liable for any
- special, indirect or consequential damages or any damages
- whatsoever resulting from loss of use, data or profits, whether
- in an action of contract, negligence or other tortious action,
- arising out of or in connection with the use or performance of
- this software.
-*/
-
-/** \file
- *
- * Main source file for the CDC class bootloader. This file contains the complete bootloader logic.
- */
-
-#define INCLUDE_FROM_CATERINA_C
-#include "Caterina.h"
-
-/** Contains the current baud rate and other settings of the first virtual serial port. This must be retained as some
- * operating systems will not open the port unless the settings can be set successfully.
- */
-static CDC_LineEncoding_t LineEncoding = { .BaudRateBPS = 0,
- .CharFormat = CDC_LINEENCODING_OneStopBit,
- .ParityType = CDC_PARITY_None,
- .DataBits = 8 };
-
-/** Current address counter. This stores the current address of the FLASH or EEPROM as set by the host,
- * and is used when reading or writing to the AVRs memory (either FLASH or EEPROM depending on the issued
- * command.)
- */
-static uint32_t CurrAddress;
-
-/** Flag to indicate if the bootloader should be running, or should exit and allow the application code to run
- * via a watchdog reset. When cleared the bootloader will exit, starting the watchdog and entering an infinite
- * loop until the AVR restarts and the application runs.
- */
-static bool RunBootloader = true;
-
-/* Pulse generation counters to keep track of the time remaining for each pulse type */
-#define TX_RX_LED_PULSE_PERIOD 100
-uint16_t TxLEDPulse = 0; // time remaining for Tx LED pulse
-uint16_t RxLEDPulse = 0; // time remaining for Rx LED pulse
-
-/* Bootloader timeout timer */
-uint16_t Timeout = 0;
-
-uint16_t bootKey = 0x7777;
-volatile uint16_t *const bootKeyPtr = (volatile uint16_t *)0x0A00;
-
-void StartSketch(void)
-{
- cli();
-
- /* Undo TIMER1 setup and clear the count before running the sketch */
- TIMSK1 = 0;
- TCCR1B = 0;
- TCNT1H = 0; // 16-bit write to TCNT1 requires high byte be written first
- TCNT1L = 0;
-
- /* Relocate the interrupt vector table to the application section */
- MCUCR = (1 << IVCE);
- MCUCR = 0;
-
- L_LED_OFF();
- TX_LED_OFF();
- RX_LED_OFF();
-
- /* jump to beginning of application space */
- __asm__ volatile("jmp 0x0000");
-}
-
-/* Breathing animation on L LED indicates bootloader is running */
-uint16_t LLEDPulse;
-void LEDPulse(void)
-{
- LLEDPulse++;
- uint8_t p = LLEDPulse >> 8;
- if (p > 127)
- p = 254-p;
- p += p;
- if (((uint8_t)LLEDPulse) > p)
- L_LED_OFF();
- else
- L_LED_ON();
-}
-
-/** 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.
- */
-int main(void)
-{
- /* Watchdog may be configured with a 15 ms period so must disable it before doing anything else */
- wdt_disable();
-
- /* Check the reason for the reset and act accordingly */
- uint8_t mcusr_state = MCUSR; // store the initial state of the Status register
- MCUSR = 0; // clear all reset flags
- // After a power-on reset skip the bootloader and jump straight to sketch
- // if one exists.
- if (mcusr_state & (1<<PORF) && pgm_read_word(0) != 0xFFFF) {
- StartSketch();
- }
- uint16_t bootKeyPtrVal = *bootKeyPtr;
- *bootKeyPtr = 0;
- if ((mcusr_state & (1<<WDRF)) && (bootKeyPtrVal != bootKey) && (pgm_read_word(0) != 0xFFFF)) {
- StartSketch();
- }
-
- /* Setup hardware required for the bootloader */
- SetupHardware();
-
- /* Enable global interrupts so that the USB stack can function */
- sei();
-
- while (RunBootloader)
- {
- CDC_Task();
- USB_USBTask();
- /* Time out and start the sketch if one is present */
- if (Timeout > 8000)
- RunBootloader = false;
-
- LEDPulse();
- }
-
- /* Disconnect from the host - USB interface will be reset later along with the AVR */
- USB_Detach();
-
- /* Jump to beginning of application space to run the sketch - do not reset */
- StartSketch();
-}
-
-/** Configures all hardware required for the bootloader. */
-void SetupHardware(void)
-{
- /* Disable watchdog if enabled by bootloader/fuses */
- MCUSR &= ~(1 << WDRF);
- wdt_disable();
-
- /* Disable clock division */
- clock_prescale_set(clock_div_1);
-
- /* Relocate the interrupt vector table to the bootloader section */
- MCUCR = (1 << IVCE);
- MCUCR = (1 << IVSEL);
-
- LED_SETUP();
- CPU_PRESCALE(0);
- L_LED_OFF();
- TX_LED_OFF();
- RX_LED_OFF();
-
- /* Initialize TIMER1 to handle bootloader timeout and LED tasks.
- * With 16 MHz clock and 1/64 prescaler, timer 1 is clocked at 250 kHz
- * Our chosen compare match generates an interrupt every 1 ms.
- * This interrupt is disabled selectively when doing memory reading, erasing,
- * or writing since SPM has tight timing requirements.
- */
- OCR1AH = 0;
- OCR1AL = 250;
- TIMSK1 = (1 << OCIE1A); // enable timer 1 output compare A match interrupt
- TCCR1B = ((1 << CS11) | (1 << CS10)); // 1/64 prescaler on timer 1 input
-
- /* Initialize USB Subsystem */
- USB_Init();
-}
-
-//uint16_t ctr = 0;
-ISR(TIMER1_COMPA_vect, ISR_BLOCK)
-{
- /* Reset counter */
- TCNT1H = 0;
- TCNT1L = 0;
-
- /* Check whether the TX or RX LED one-shot period has elapsed. if so, turn off the LED */
- if (TxLEDPulse && !(--TxLEDPulse))
- TX_LED_OFF();
- if (RxLEDPulse && !(--RxLEDPulse))
- RX_LED_OFF();
-
- if (pgm_read_word(0) != 0xFFFF)
- Timeout++;
-}
-
-/** Event handler for the USB_ConfigurationChanged event. This configures the device's endpoints ready
- * to relay data to and from the attached USB host.
- */
-void EVENT_USB_Device_ConfigurationChanged(void)
-{
- /* Setup CDC Notification, Rx and Tx Endpoints */
- Endpoint_ConfigureEndpoint(CDC_NOTIFICATION_EPNUM, EP_TYPE_INTERRUPT,
- ENDPOINT_DIR_IN, CDC_NOTIFICATION_EPSIZE,
- ENDPOINT_BANK_SINGLE);
-
- Endpoint_ConfigureEndpoint(CDC_TX_EPNUM, EP_TYPE_BULK,
- ENDPOINT_DIR_IN, CDC_TXRX_EPSIZE,
- ENDPOINT_BANK_SINGLE);
-
- Endpoint_ConfigureEndpoint(CDC_RX_EPNUM, EP_TYPE_BULK,
- ENDPOINT_DIR_OUT, CDC_TXRX_EPSIZE,
- ENDPOINT_BANK_SINGLE);
-}
-
-/** Event handler for the USB_ControlRequest event. This is used to catch and process control requests sent to
- * the device from the USB host before passing along unhandled control requests to the library for processing
- * internally.
- */
-void EVENT_USB_Device_ControlRequest(void)
-{
- /* Ignore any requests that aren't directed to the CDC interface */
- if ((USB_ControlRequest.bmRequestType & (CONTROL_REQTYPE_TYPE | CONTROL_REQTYPE_RECIPIENT)) !=
- (REQTYPE_CLASS | REQREC_INTERFACE))
- {
- return;
- }
-
- /* Process CDC specific control requests */
- switch (USB_ControlRequest.bRequest)
- {
- case CDC_REQ_GetLineEncoding:
- if (USB_ControlRequest.bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE))
- {
- Endpoint_ClearSETUP();
-
- /* Write the line coding data to the control endpoint */
- Endpoint_Write_Control_Stream_LE(&LineEncoding, sizeof(CDC_LineEncoding_t));
- Endpoint_ClearOUT();
- }
-
- break;
- case CDC_REQ_SetLineEncoding:
- if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE))
- {
- Endpoint_ClearSETUP();
-
- /* Read the line coding data in from the host into the global struct */
- Endpoint_Read_Control_Stream_LE(&LineEncoding, sizeof(CDC_LineEncoding_t));
- Endpoint_ClearIN();
- }
-
- 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.
- *
- * \param[in] Command Single character AVR910 protocol command indicating what memory operation to perform
- */
-static void ReadWriteMemoryBlock(const uint8_t Command)
-{
- uint16_t BlockSize;
- char MemoryType;
-
- bool HighByte = false;
- uint8_t LowByte = 0;
-
- BlockSize = (FetchNextCommandByte() << 8);
- BlockSize |= FetchNextCommandByte();
-
- MemoryType = FetchNextCommandByte();
-
- if ((MemoryType != 'E') && (MemoryType != 'F'))
- {
- /* Send error byte back to the host */
- WriteNextResponseByte('?');
-
- return;
- }
-
- /* Disable timer 1 interrupt - can't afford to process nonessential interrupts
- * while doing SPM tasks */
- TIMSK1 = 0;
-
- /* Check if command is to read memory */
- if (Command == 'g')
- {
- /* Re-enable RWW section */
- boot_rww_enable();
-
- while (BlockSize--)
- {
- if (MemoryType == 'F')
- {
- /* Read the next FLASH byte from the current FLASH page */
- #if (FLASHEND > 0xFFFF)
- WriteNextResponseByte(pgm_read_byte_far(CurrAddress | HighByte));
- #else
- WriteNextResponseByte(pgm_read_byte(CurrAddress | HighByte));
- #endif
-
- /* If both bytes in current word have been read, increment the address counter */
- if (HighByte)
- CurrAddress += 2;
-
- HighByte = !HighByte;
- }
- else
- {
- /* Read the next EEPROM byte into the endpoint */
- WriteNextResponseByte(eeprom_read_byte((uint8_t*)(intptr_t)(CurrAddress >> 1)));
-
- /* Increment the address counter after use */
- CurrAddress += 2;
- }
- }
- }
- else
- {
- uint32_t PageStartAddress = CurrAddress;
-
- if (MemoryType == 'F')
- {
- boot_page_erase(PageStartAddress);
- boot_spm_busy_wait();
- }
-
- while (BlockSize--)
- {
- if (MemoryType == 'F')
- {
- /* If both bytes in current word have been written, increment the address counter */
- if (HighByte)
- {
- /* Write the next FLASH word to the current FLASH page */
- boot_page_fill(CurrAddress, ((FetchNextCommandByte() << 8) | LowByte));
-
- /* Increment the address counter after use */
- CurrAddress += 2;
- }
- else
- {
- LowByte = FetchNextCommandByte();
- }
-
- HighByte = !HighByte;
- }
- else
- {
- /* Write the next EEPROM byte from the endpoint */
- eeprom_write_byte((uint8_t*)((intptr_t)(CurrAddress >> 1)), FetchNextCommandByte());
-
- /* Increment the address counter after use */
- CurrAddress += 2;
- }
- }
-
- /* If in FLASH programming mode, commit the page after writing */
- if (MemoryType == 'F')
- {
- /* Commit the flash page to memory */
- boot_page_write(PageStartAddress);
-
- /* Wait until write operation has completed */
- boot_spm_busy_wait();
- }
-
- /* Send response byte back to the host */
- WriteNextResponseByte('\r');
- }
-
- /* Re-enable timer 1 interrupt disabled earlier in this routine */
- TIMSK1 = (1 << OCIE1A);
-}
-#endif
-
-/** Retrieves the next byte from the host in the CDC data OUT endpoint, and clears the endpoint bank if needed
- * to allow reception of the next data packet from the host.
- *
- * \return Next received byte from the host in the CDC data OUT endpoint
- */
-static uint8_t FetchNextCommandByte(void)
-{
- /* Select the OUT endpoint so that the next data byte can be read */
- Endpoint_SelectEndpoint(CDC_RX_EPNUM);
-
- /* If OUT endpoint empty, clear it and wait for the next packet from the host */
- while (!(Endpoint_IsReadWriteAllowed()))
- {
- Endpoint_ClearOUT();
-
- while (!(Endpoint_IsOUTReceived()))
- {
- if (USB_DeviceState == DEVICE_STATE_Unattached)
- return 0;
- }
- }
-
- /* Fetch the next byte from the OUT endpoint */
- return Endpoint_Read_8();
-}
-
-/** Writes the next response byte to the CDC data IN endpoint, and sends the endpoint back if needed to free up the
- * bank when full ready for the next byte in the packet to the host.
- *
- * \param[in] Response Next response byte to send to the host
- */
-static void WriteNextResponseByte(const uint8_t Response)
-{
- /* Select the IN endpoint so that the next data byte can be written */
- Endpoint_SelectEndpoint(CDC_TX_EPNUM);
-
- /* If IN endpoint full, clear it and wait until ready for the next packet to the host */
- if (!(Endpoint_IsReadWriteAllowed()))
- {
- Endpoint_ClearIN();
-
- while (!(Endpoint_IsINReady()))
- {
- if (USB_DeviceState == DEVICE_STATE_Unattached)
- return;
- }
- }
-
- /* Write the next byte to the IN endpoint */
- Endpoint_Write_8(Response);
-
- TX_LED_ON();
- TxLEDPulse = TX_RX_LED_PULSE_PERIOD;
-}
-
-#define STK_OK 0x10
-#define STK_INSYNC 0x14 // ' '
-#define CRC_EOP 0x20 // 'SPACE'
-#define STK_GET_SYNC 0x30 // '0'
-
-#define STK_GET_PARAMETER 0x41 // 'A'
-#define STK_SET_DEVICE 0x42 // 'B'
-#define STK_SET_DEVICE_EXT 0x45 // 'E'
-#define STK_LOAD_ADDRESS 0x55 // 'U'
-#define STK_UNIVERSAL 0x56 // 'V'
-#define STK_PROG_PAGE 0x64 // 'd'
-#define STK_READ_PAGE 0x74 // 't'
-#define STK_READ_SIGN 0x75 // 'u'
-
-/** Task to read in AVR910 commands from the CDC data OUT endpoint, process them, perform the required actions
- * and send the appropriate response back to the host.
- */
-void CDC_Task(void)
-{
- /* Select the OUT endpoint */
- Endpoint_SelectEndpoint(CDC_RX_EPNUM);
-
- /* Check if endpoint has a command in it sent from the host */
- if (!(Endpoint_IsOUTReceived()))
- return;
-
- RX_LED_ON();
- RxLEDPulse = TX_RX_LED_PULSE_PERIOD;
-
- /* Read in the bootloader command (first byte sent from host) */
- uint8_t Command = FetchNextCommandByte();
-
- if (Command == 'E')
- {
- RunBootloader = false;
-
- // Send confirmation byte back to the host
- WriteNextResponseByte('\r');
- }
- else if (Command == 'T')
- {
- FetchNextCommandByte();
-
- // Send confirmation byte back to the host
- WriteNextResponseByte('\r');
- }
- else if ((Command == 'L') || (Command == 'P'))
- {
- // Send confirmation byte back to the host
- WriteNextResponseByte('\r');
- }
- else if (Command == 't')
- {
- // Return ATMEGA128 part code - this is only to allow AVRProg to use the bootloader
- WriteNextResponseByte(0x44);
- WriteNextResponseByte(0x00);
- }
- else if (Command == 'a')
- {
- // Indicate auto-address increment is supported
- WriteNextResponseByte('Y');
- }
- else if (Command == 'A')
- {
- // Set the current address to that given by the host
- CurrAddress = (FetchNextCommandByte() << 9);
- CurrAddress |= (FetchNextCommandByte() << 1);
-
- // Send confirmation byte back to the host
- WriteNextResponseByte('\r');
- }
- else if (Command == 'p')
- {
- // Indicate serial programmer back to the host
- WriteNextResponseByte('S');
- }
- else if (Command == 'S')
- {
- // Write the 7-byte software identifier to the endpoint
- for (uint8_t CurrByte = 0; CurrByte < 7; CurrByte++)
- WriteNextResponseByte(SOFTWARE_IDENTIFIER[CurrByte]);
- }
- else if (Command == 'V')
- {
- WriteNextResponseByte('0' + BOOTLOADER_VERSION_MAJOR);
- WriteNextResponseByte('0' + BOOTLOADER_VERSION_MINOR);
- }
- else if (Command == 's')
- {
- WriteNextResponseByte(AVR_SIGNATURE_3);
- WriteNextResponseByte(AVR_SIGNATURE_2);
- WriteNextResponseByte(AVR_SIGNATURE_1);
- }
- else if (Command == 'e')
- {
- // Clear the application section of flash
- for (uint32_t CurrFlashAddress = 0; CurrFlashAddress < BOOT_START_ADDR; CurrFlashAddress += SPM_PAGESIZE)
- {
- boot_page_erase(CurrFlashAddress);
- boot_spm_busy_wait();
- boot_page_write(CurrFlashAddress);
- boot_spm_busy_wait();
- }
-
- // Send confirmation byte back to the host
- WriteNextResponseByte('\r');
- }
- #if !defined(NO_LOCK_BYTE_WRITE_SUPPORT)
- else if (Command == 'l')
- {
- // Set the lock bits to those given by the host
- boot_lock_bits_set(FetchNextCommandByte());
-
- // Send confirmation byte back to the host
- WriteNextResponseByte('\r');
- }
- #endif
- else if (Command == 'r')
- {
- WriteNextResponseByte(boot_lock_fuse_bits_get(GET_LOCK_BITS));
- }
- else if (Command == 'F')
- {
- WriteNextResponseByte(boot_lock_fuse_bits_get(GET_LOW_FUSE_BITS));
- }
- else if (Command == 'N')
- {
- WriteNextResponseByte(boot_lock_fuse_bits_get(GET_HIGH_FUSE_BITS));
- }
- else if (Command == 'Q')
- {
- WriteNextResponseByte(boot_lock_fuse_bits_get(GET_EXTENDED_FUSE_BITS));
- }
- #if !defined(NO_BLOCK_SUPPORT)
- else if (Command == 'b')
- {
- WriteNextResponseByte('Y');
-
- // Send block size to the host
- WriteNextResponseByte(SPM_PAGESIZE >> 8);
- WriteNextResponseByte(SPM_PAGESIZE & 0xFF);
- }
- else if ((Command == 'B') || (Command == 'g'))
- {
- Timeout = 0;
- // Delegate the block write/read to a separate function for clarity
- ReadWriteMemoryBlock(Command);
- }
- #endif
- #if !defined(NO_FLASH_BYTE_SUPPORT)
- else if (Command == 'C')
- {
- // Write the high byte to the current flash page
- boot_page_fill(CurrAddress, FetchNextCommandByte());
-
- // Send confirmation byte back to the host
- WriteNextResponseByte('\r');
- }
- else if (Command == 'c')
- {
- // Write the low byte to the current flash page
- boot_page_fill(CurrAddress | 0x01, FetchNextCommandByte());
-
- // Increment the address
- CurrAddress += 2;
-
- // Send confirmation byte back to the host
- WriteNextResponseByte('\r');
- }
- else if (Command == 'm')
- {
- // Commit the flash page to memory
- boot_page_write(CurrAddress);
-
- // Wait until write operation has completed
- boot_spm_busy_wait();
-
- // Send confirmation byte back to the host
- WriteNextResponseByte('\r');
- }
- else if (Command == 'R')
- {
- #if (FLASHEND > 0xFFFF)
- uint16_t ProgramWord = pgm_read_word_far(CurrAddress);
- #else
- uint16_t ProgramWord = pgm_read_word(CurrAddress);
- #endif
-
- WriteNextResponseByte(ProgramWord >> 8);
- WriteNextResponseByte(ProgramWord & 0xFF);
- }
- #endif
- #if !defined(NO_EEPROM_BYTE_SUPPORT)
- else if (Command == 'D')
- {
- // Read the byte from the endpoint and write it to the EEPROM
- eeprom_write_byte((uint8_t*)((intptr_t)(CurrAddress >> 1)), FetchNextCommandByte());
-
- // Increment the address after use
- CurrAddress += 2;
-
- // Send confirmation byte back to the host
- WriteNextResponseByte('\r');
- }
- else if (Command == 'd')
- {
- // Read the EEPROM byte and write it to the endpoint
- WriteNextResponseByte(eeprom_read_byte((uint8_t*)((intptr_t)(CurrAddress >> 1))));
-
- // Increment the address after use
- CurrAddress += 2;
- }
- #endif
- else if (Command != 27)
- {
- // Unknown (non-sync) command, return fail code
- WriteNextResponseByte('?');
- }
-
-
- /* Select the IN endpoint */
- Endpoint_SelectEndpoint(CDC_TX_EPNUM);
-
- /* Remember if the endpoint is completely full before clearing it */
- bool IsEndpointFull = !(Endpoint_IsReadWriteAllowed());
-
- /* Send the endpoint data to the host */
- Endpoint_ClearIN();
-
- /* If a full endpoint's worth of data was sent, we need to send an empty packet afterwards to signal end of transfer */
- if (IsEndpointFull)
- {
- while (!(Endpoint_IsINReady()))
- {
- if (USB_DeviceState == DEVICE_STATE_Unattached)
- return;
- }
-
- Endpoint_ClearIN();
- }
-
- /* Wait until the data has been sent to the host */
- while (!(Endpoint_IsINReady()))
- {
- if (USB_DeviceState == DEVICE_STATE_Unattached)
- return;
- }
-
- /* Select the OUT endpoint */
- Endpoint_SelectEndpoint(CDC_RX_EPNUM);
-
- /* Acknowledge the command from the host */
- Endpoint_ClearOUT();
-}
-
diff --git a/bootloaders/caterina_LUFA/Caterina.h b/bootloaders/caterina_LUFA/Caterina.h
deleted file mode 100755
index f8251d4..0000000
--- a/bootloaders/caterina_LUFA/Caterina.h
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- LUFA Library
- Copyright (C) Dean Camera, 2011.
-
- dean [at] fourwalledcubicle [dot] com
- www.lufa-lib.org
-*/
-
-/*
- Copyright 2011 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
- 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
- software without specific, written prior permission.
-
- The author disclaim all warranties with regard to this
- software, including all implied warranties of merchantability
- and fitness. In no event shall the author be liable for any
- special, indirect or consequential damages or any damages
- whatsoever resulting from loss of use, data or profits, whether
- in an action of contract, negligence or other tortious action,
- arising out of or in connection with the use or performance of
- this software.
-*/
-
-/** \file
- *
- * Header file for BootloaderCDC.c.
- */
-
-#ifndef _CDC_H_
-#define _CDC_H_
-
- /* Includes: */
- #include <avr/io.h>
- #include <avr/wdt.h>
- #include <avr/boot.h>
- #include <avr/eeprom.h>
- #include <avr/power.h>
- #include <avr/interrupt.h>
- #include <stdbool.h>
-
- #include "Descriptors.h"
-
- #include <LUFA/Drivers/USB/USB.h>
- /* Macros: */
- /** Version major of the CDC bootloader. */
- #define BOOTLOADER_VERSION_MAJOR 0x01
-
- /** Version minor of the CDC bootloader. */
- #define BOOTLOADER_VERSION_MINOR 0x00
-
- /** Hardware version major of the CDC bootloader. */
- #define BOOTLOADER_HWVERSION_MAJOR 0x01
-
- /** Hardware version minor of the CDC bootloader. */
- #define BOOTLOADER_HWVERSION_MINOR 0x00
-
- /** Eight character bootloader firmware identifier reported to the host when requested */
- #define SOFTWARE_IDENTIFIER "CATERINA"
-
- #define CPU_PRESCALE(n) (CLKPR = 0x80, CLKPR = (n))
- #define LED_SETUP() DDRC |= (1<<7); DDRB |= (1<<0); DDRD |= (1<<5);
- #define L_LED_OFF() PORTC &= ~(1<<7)
- #define L_LED_ON() PORTC |= (1<<7)
- #define L_LED_TOGGLE() PORTC ^= (1<<7)
- #define TX_LED_OFF() PORTD |= (1<<5)
- #define TX_LED_ON() PORTD &= ~(1<<5)
- #define RX_LED_OFF() PORTB |= (1<<0)
- #define RX_LED_ON() PORTB &= ~(1<<0)
-
- /* Type Defines: */
- /** Type define for a non-returning pointer to the start of the loaded application in flash memory. */
- typedef void (*AppPtr_t)(void) ATTR_NO_RETURN;
-
- /* Function Prototypes: */
- void StartSketch(void);
- void LEDPulse(void);
-
- void CDC_Task(void);
- void SetupHardware(void);
-
- void EVENT_USB_Device_ConfigurationChanged(void);
-
- #if defined(INCLUDE_FROM_CATERINA_C) || defined(__DOXYGEN__)
- #if !defined(NO_BLOCK_SUPPORT)
- static void ReadWriteMemoryBlock(const uint8_t Command);
- #endif
- static uint8_t FetchNextCommandByte(void);
- static void WriteNextResponseByte(const uint8_t Response);
- #endif
-
-#endif
-
diff --git a/bootloaders/caterina_LUFA/Caterina.hex b/bootloaders/caterina_LUFA/Caterina.hex
deleted file mode 100644
index 98cf01a..0000000
--- a/bootloaders/caterina_LUFA/Caterina.hex
+++ /dev/null
@@ -1,256 +0,0 @@
-:1070000055C000006EC000006CC000006AC00000E7
-:1070100068C0000066C0000064C0000062C00000DC
-:1070200060C000005EC00000ECC400005AC0000058
-:1070300058C0000056C0000054C0000052C00000FC
-:1070400050C0000078C000004CC000004AC00000E2
-:1070500048C0000046C0000044C0000042C000001C
-:1070600040C000003EC000003CC000003AC000002C
-:1070700038C0000036C0000034C0000032C000003C
-:1070800030C000002EC000002CC000002AC000004C
-:1070900028C0000026C0000024C0000022C000005C
-:1070A00020C000001EC000001CC0000011241FBE34
-:1070B000CFEFDAE0DEBFCDBF11E0A0E0B1E0E6E265
-:1070C000FFE702C005900D92A83AB107D9F711E089
-:1070D000A8EAB1E001C01D92AE3BB107E1F78ED343
-:1070E00020C78ECFF89410926F00109281001092FA
-:1070F00085001092840081E085BF15BE47985D9A97
-:10710000289A0C94000008952091B2013091B301A7
-:107110002F5F3F4F3093B3012093B201932F37FF7E
-:1071200003C08EEF831B982F990F921710F4479886
-:107130000895479A08951F920F920FB60F92112447
-:107140002F938F939F93EF93FF931092850010924C
-:1071500084008091A8019091A901009741F00197C6
-:107160009093A9018093A801892B09F45D9A8091DD
-:10717000AA019091AB01009741F001979093AB0168
-:107180008093AA01892B09F4289AE0E0F0E0859128
-:1071900094918F5F9F4F49F08091AC019091AD0128
-:1071A00001969093AD018093AC01FF91EF919F9177
-:1071B0008F912F910F900FBE0F901F90189584E024
-:1071C0008093E9000DC08091E8008B778093E80000
-:1071D00003C08EB3882351F08091E80082FFF9CF7D
-:1071E0008091E80085FFEFCF8091F1000895982FFE
-:1071F00083E08093E9008091E80085FD0DC08091D7
-:10720000E8008E778093E80003C08EB3882369F08E
-:107210008091E80080FFF9CF9093F1005D9884E6BB
-:1072200090E09093A9018093A80108954F925F92F6
-:107230006F927F928F929F92AF92BF92CF92DF9286
-:10724000EF92FF920F931F93CF93DF9384E080938D
-:10725000E9008091E80082FF56C2289884E690E019
-:107260009093AB018093AA01AADF182F853419F4FB
-:1072700010920D0103C0843519F4A1DF8DE019C20D
-:107280008C34E1F38035D1F3843721F484E4AFDF2B
-:1072900080E00FC2813611F489E50BC28134B1F46C
-:1072A0008EDF182F8CDF90E0880F991FAA2797FD9B
-:1072B000A095BA2F312F330F20E0442737FD40959A
-:1072C000542F822B932BA42BB52BC4C1803711F4E0
-:1072D00083E5EFC1833549F4C0E0D1E0899187DFD0
-:1072E00021E0C730D207D1F7E5C1863521F481E32B
-:1072F0007EDF80E3DEC1833731F487E878DF85E91C
-:1073000076DF8EE1D6C18536B9F4E0E0F0E093E0B7
-:1073100085E090935700E89507B600FCFDCF809379
-:107320005700E89507B600FCFDCFE058FF4FA0E7F7
-:10733000E030FA0771F7A2CF8C3651F440DF809528
-:1073400099E0E1E0F0E0082E90935700E89596CFA1
-:10735000823739F4E1E0F0E089E0809357008491CE
-:10736000A8C1863439F4E0E0F0E089E0809357006A
-:1073700084919FC18E3439F4E3E0F0E089E080939A
-:107380005700849196C1813539F4E2E0F0E089E05C
-:107390008093570084918DC1823631F489E527DFCF
-:1073A00080E025DF80E885C1823419F0873609F056
-:1073B000E5C01092AD011092AC0101DF082FFFDE95
-:1073C000F82EFDDE682E8554823008F071C1902FB2
-:1073D00080E0CF2DD0E0C82BD92B10926F0017364C
-:1073E00009F04BC081E180935700E895DD24CC245F
-:1073F000C3943FC0E090AE01F090AF010091B001A6
-:107400001091B101B6E46B16D9F4ED2DF0E0EE2940
-:10741000FF29E4918E2FEBDEDD2081F082E090E009
-:10742000A0E0B0E0E80EF91E0A1F1B1FE092AE01BB
-:10743000F092AF010093B0011093B101DC2418C0A9
-:10744000D801C701B695A7959795879554D5CFDEF6
-:1074500082E090E0A0E0B0E0E80EF91E0A1F1B1FDA
-:10746000E092AE01F092AF010093B0011093B10130
-:107470002197209709F0BECF7DC08090AE019090FB
-:10748000AF01A090B001B090B10196E4691609F087
-:107490005DC083E0F40180935700E89507B600FCD7
-:1074A000FDCF54C0F6E46F1661F5772031F1E0901E
-:1074B000AE01F090AF010091B0011091B1017FDEFB
-:1074C000D82ECC24852D90E08C299D29F7010C0124
-:1074D00040925700E895112482E090E0A0E0B0E0EF
-:1074E000E80EF91E0A1F1B1FE092AE01F092AF01D9
-:1074F0000093B0011093B10102C061DE582E7424D4
-:1075000023C0E090AE01F090AF010091B001109166
-:10751000B10116950795F794E79451DE682FC701DE
-:10752000F2D48091AE019091AF01A091B001B091E1
-:10753000B1010296A11DB11D8093AE019093AF01E0
-:10754000A093B001B093B101219704C055247724D2
-:1075500044244394209709F0A5CF96E4691641F49A
-:1075600085E0F40180935700E89507B600FCFDCF55
-:107570008DE03DDE82E080936F009CC0833471F427
-:107580000091AE011091AF011ADE90E021E0F80108
-:107590000C0120935700E895112470CE833619F51D
-:1075A000E090AE01F090AF010091B0011091B101F7
-:1075B00006DEF701E16090E021E00C012093570026
-:1075C000E895112482E090E0A0E0B0E0E80EF91E1A
-:1075D0000A1F1B1FE092AE01F092AF010093B001B1
-:1075E0001093B1014BCE8D3661F4E091AE01F09174
-:1075F000AF0185E080935700E89507B600FCFDCF0A
-:107600003DCE823551F4E091AE01F091AF0105918C
-:107610001491812FECDD802F4CC0843421F5E09053
-:10762000AE01F090AF010091B0011091B10116953B
-:107630000795F794E794C3DD682FC70164D4809160
-:10764000AE019091AF01A091B001B091B10102964D
-:10765000A11DB11D8093AE019093AF01A093B00125
-:10766000B093B1010BCE843609F5E090AE01F090F5
-:10767000AF010091B0011091B101D801C701B695D9
-:10768000A7959795879537D4B2DD82E090E0A0E08A
-:10769000B0E0E80EF91E0A1F1B1FE092AE01F09247
-:1076A000AF010093B0011093B10104C08B3111F010
-:1076B0008FE39DDD83E08093E9009091E800809165
-:1076C000E8008E778093E80095FF04C010C08EB369
-:1076D0008823C9F08091E80080FFF9CF8091E8000D
-:1076E0008E778093E80003C08EB3882361F0809189
-:1076F000E80080FFF9CF84E08093E9008091E80002
-:107700008B778093E800DF91CF911F910F91FF90CD
-:10771000EF90DF90CF90BF90AF909F908F907F9031
-:107720006F905F904F9008959091B601892F8F7759
-:10773000813249F58091B7018032A1F0813219F58B
-:10774000913A09F58091E800877F8093E8008EE008
-:1077500091E067E070E006D28091E8008B7780933B
-:10776000E8000895913279F48091E800877F809352
-:10777000E8008EE091E067E070E058D28091E80088
-:107780008E778093E800089582E061EC42E0B0D00B
-:1077900083E061E842E1ACD084E060E842E1A8C067
-:1077A00084B7877F84BF88E10FB6F8948093600028
-:1077B000109260000FBE20E880E090E00FB6F894D1
-:1077C00020936100809361000FBE81E085BF92E04D
-:1077D00095BF3F9A209A559AE1E6F0E02083108207
-:1077E00047985D9A289A109289008AEF80938800C2
-:1077F00090936F0083E080938100EBC01F9388E13A
-:107800000FB6F89480936000109260000FBE84B7AA
-:1078100014BE182F10FF08C0E0E0F0E085919491AD
-:107820008F5F9F4F09F05EDC2091000A3091010AC2
-:107830001092010A1092000A13FF0FC080910901F3
-:1078400090910A012817390741F0E0E0F0E08591B6
-:1078500094918F5F9F4F09F045DCA2DF78940CC0B4
-:10786000E5DC37D38091AC019091AD0181549F410B
-:1078700010F010920D0148DC80910D01882381F7F2
-:107880008091E00081608093E0002CDC80E090E05B
-:107890001F910895FA01923049F0933061F09130D0
-:1078A000F9F485E191E022E130E01EC087E291E049
-:1078B0002EE330E019C0882329F485E691E024E026
-:1078C00030E012C0813029F489E691E022E230E014
-:1078D0000BC0823029F48DE891E028E130E004C04B
-:1078E00080E090E020E030E091838083C90108953A
-:1078F0008093E9008091EB0081608093EB0010920F
-:10790000ED006093EC004093ED008091EE00881F45
-:107910008827881F08958091B60188238CF403C0BE
-:107920008EB38823B1F08091E80082FFF9CF809177
-:10793000E8008B778093E80008958EB3882349F0A0
-:107940008091E80080FFF9CF8091E8008E778093E6
-:10795000E8000895EF92FF920F931F9345D04CD00B
-:1079600008ED10E0F80180818F7780838081806846
-:10797000808380818F7D808319BC1EBA1092B401F0
-:1079800080EEE82EF12CF70180818B7F8083F80157
-:1079900080818160808380E060E042E0A9DFE1EEE9
-:1079A000F0E080818E7F8083E2EEF0E08081816074
-:1079B0008083808188608083F70180818E7F8083CF
-:1079C000F8018081806180831F910F91FF90EF907B
-:1079D0000895E7EDF0E08081816080838AE482BFD2
-:1079E00081E08093B501B6CFE8EDF0E080818E7F35
-:1079F00080831092E20008951092DA001092E10064
-:107A000008951F920F920FB60F9211242F933F9358
-:107A10004F935F936F937F938F939F93AF93BF9396
-:107A2000EF93FF938091DA0080FF1BC08091D80014
-:107A300080FF17C08091DA008E7F8093DA008091FA
-:107A4000D90080FF0BC080E189BD82E189BD09B406
-:107A500000FEFDCF81E08EBB3BD203C019BC1EBA35
-:107A600037D28091E10080FF17C08091E20080FF53
-:107A700013C08091E2008E7F8093E2008091E2004B
-:107A800080618093E2008091D80080628093D8006A
-:107A900019BC85E08EBB1CD28091E10084FF2CC014
-:107AA0008091E20084FF28C080E189BD82E189BD28
-:107AB00009B400FEFDCF8091D8008F7D8093D8005F
-:107AC0008091E1008F7E8093E1008091E2008F7EC3
-:107AD0008093E2008091E20081608093E2008091D7
-:107AE000B401882331F48091E30087FD02C081E076
-:107AF00001C084E08EBBECD18091E10083FF21C006
-:107B00008091E20083FF1DC08091E100877F809318
-:107B1000E10082E08EBB1092B4018091E1008E7F83
-:107B20008093E1008091E2008E7F8093E20080915B
-:107B3000E20080618093E20080E060E042E0D8DE15
-:107B4000C7D1FF91EF91BF91AF919F918F917F919D
-:107B50006F915F914F913F912F910F900FBE0F90BA
-:107B60001F9018959C014091BC015091BD01461792
-:107B7000570718F4F90190E044C06115710511F040
-:107B8000AB01F8CF8091E8008E778093E80040E069
-:107B900050E0F0CF8EB3882309F444C0853009F457
-:107BA00043C08091E80083FF02C081E00895809186
-:107BB000E80082FD31C08091E80080FF22C0809102
-:107BC000F3009091F200782F60E0292F30E0262B0F
-:107BD000372B07C081918093F100415050402F5FB7
-:107BE0003F4F4115510519F02830310598F390E0C9
-:107BF0002830310509F491E08091E8008E77809378
-:107C0000E8004115510531F6992321F605C08EB3E0
-:107C1000882341F0853041F08091E80082FFF7CF62
-:107C200080E0089582E0089583E008959C01611545
-:107C3000710529F48091E8008B778093E800F901C1
-:107C400026C08EB3882391F1853091F18091E800B0
-:107C500083FF02C081E008958091E80082FFF1CFA8
-:107C600006C08091F10081936150704059F02091DD
-:107C7000F3008091F200322F20E090E0822B932BD2
-:107C8000892B79F78091E8008B778093E800611564
-:107C90007105B9F605C08EB3882341F0853041F0F7
-:107CA0008091E80080FFF7CF80E0089582E008959A
-:107CB00083E008950F931F93DF93CF9300D0CDB748
-:107CC000DEB7E6EBF1E08091F100819381E0EE3BDD
-:107CD000F807C9F729DD8091E80083FFE4C08091AF
-:107CE000B6019091B701953009F46DC0963040F41B
-:107CF000913081F1913070F0933009F0D4C02AC0F6
-:107D0000983009F4A3C0993009F4B2C0963009F054
-:107D1000CAC07CC0803809F4C6C0823809F0C3C02C
-:107D20008091BA0187708093E9008091EB001092F6
-:107D3000E9002091E800277F2093E80090E025E00B
-:107D4000969587952A95E1F781708093F1001092BE
-:107D5000F10087C0882319F0823009F0A4C08F7128
-:107D6000823009F0A0C08091B801882331F52091BC
-:107D7000BA01277009F497C02093E9008091EB00C5
-:107D800080FF1BC0933021F48091EB00806213C010
-:107D90008091EB0080618093EB0081E090E002C075
-:107DA000880F991F2A95E2F78093EA001092EA0063
-:107DB0008091EB0088608093EB001092E900809145
-:107DC000E800877F51C0882309F06DC01091B80189
-:107DD0001F770FB7F8948091E800877F8093E800C1
-:107DE0009ADD8091E80080FFFCCF8091E3008078ED
-:107DF000812B8093E30080688093E300112311F4CA
-:107E000082E001C083E08EBB0FBF4DC0805882303E
-:107E100008F049C08091B8019091B9016091BA0110
-:107E2000AE014F5F5F4F36DDBC01009709F43BC0E8
-:107E30008091E800877F8093E80089819A8192DEB3
-:107E40008091E8008B778093E8002DC0803859F549
-:107E50008091E800877F8093E8008091B40180934F
-:107E6000F1008091E8008E778093E80054DD1BC01C
-:107E70008823C9F49091B8019230A8F48091E80069
-:107E8000877F8093E8009093B40145DD8091B40131
-:107E9000882331F48091E30087FD02C081E001C0B6
-:107EA00084E08EBB71DC8091E80083FF0AC0809182
-:107EB000EB0080628093EB008091E800877F8093E5
-:107EC000E8000F900F90CF91DF911F910F910895CF
-:107ED00008951F938EB3882361F01091E9001092EA
-:107EE000E9008091E80083FF01C0E4DE1770109381
-:107EF000E9001F910895F999FECF92BD81BDF89ACE
-:107F0000992780B50895262FF999FECF1FBA92BD03
-:107F100081BD20BD0FB6F894FA9AF99A0FBE01966A
-:067F20000895F894FFCF64
-:107F26004341544552494E41007777000A0100000B
-:107F360000000000081201100102000008412301A0
-:107F46000701000201000109023E00020100803221
-:107F560009040000010202010005240010010424A6
-:107F660002040524060001070582030800FF090430
-:107F76000100020A000000070504021000010705BF
-:107F86008302100001040309042203410072006405
-:107F960000750069006E006F0020004C0065006FE0
-:107FA600006E006100720064006F0000001803415B
-:107FB6000072006400750069006E006F0020004CBE
-:087FC600004C00430000000024
-:040000030000700089
-:00000001FF
diff --git a/bootloaders/caterina_LUFA/Descriptors.c b/bootloaders/caterina_LUFA/Descriptors.c
deleted file mode 100755
index f1756e2..0000000
--- a/bootloaders/caterina_LUFA/Descriptors.c
+++ /dev/null
@@ -1,265 +0,0 @@
-/*
- LUFA Library
- Copyright (C) Dean Camera, 2011.
-
- dean [at] fourwalledcubicle [dot] com
- www.lufa-lib.org
-*/
-
-/*
- Copyright 2011 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
- 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
- software without specific, written prior permission.
-
- The author disclaim all warranties with regard to this
- software, including all implied warranties of merchantability
- and fitness. In no event shall the author be liable for any
- special, indirect or consequential damages or any damages
- whatsoever resulting from loss of use, data or profits, whether
- in an action of contract, negligence or other tortious action,
- arising out of or in connection with the use or performance of
- this software.
-*/
-
-/** \file
- *
- * USB Device Descriptors, for library use when in USB device mode. Descriptors are special
- * computer-readable structures which the host requests upon device enumeration, to determine
- * the device's capabilities and functions.
- */
-
-#include "Descriptors.h"
-
-/** Device descriptor structure. This descriptor, located in SRAM memory, describes the overall
- * device characteristics, including the supported USB version, control endpoint size and the
- * number of device configurations. The descriptor is read out by the USB host when the enumeration
- * process begins.
- */
-const USB_Descriptor_Device_t DeviceDescriptor =
-{
- .Header = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device},
-
- .USBSpecification = VERSION_BCD(01.10),
- .Class = CDC_CSCP_CDCClass,
- .SubClass = CDC_CSCP_NoSpecificSubclass,
- .Protocol = CDC_CSCP_NoSpecificProtocol,
-
- .Endpoint0Size = FIXED_CONTROL_ENDPOINT_SIZE,
-
- .VendorID = 0x2341,
- .ProductID = 0x0701,
- .ReleaseNumber = VERSION_BCD(00.01),
-
- .ManufacturerStrIndex = 0x02,
- .ProductStrIndex = 0x01,
- .SerialNumStrIndex = NO_DESCRIPTOR,
-
- .NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS
-};
-
-/** Configuration descriptor structure. This descriptor, located in SRAM memory, describes the usage
- * of the device in one of its supported configurations, including information about any device interfaces
- * and endpoints. The descriptor is read out by the USB host during the enumeration process when selecting
- * a configuration so that the host may correctly communicate with the USB device.
- */
-const USB_Descriptor_Configuration_t ConfigurationDescriptor =
-{
- .Config =
- {
- .Header = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration},
-
- .TotalConfigurationSize = sizeof(USB_Descriptor_Configuration_t),
- .TotalInterfaces = 2,
-
- .ConfigurationNumber = 1,
- .ConfigurationStrIndex = NO_DESCRIPTOR,
-
- .ConfigAttributes = USB_CONFIG_ATTR_BUSPOWERED,
-
- .MaxPowerConsumption = USB_CONFIG_POWER_MA(100)
- },
-
- .CDC_CCI_Interface =
- {
- .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
-
- .InterfaceNumber = 0,
- .AlternateSetting = 0,
-
- .TotalEndpoints = 1,
-
- .Class = CDC_CSCP_CDCClass,
- .SubClass = CDC_CSCP_ACMSubclass,
- .Protocol = CDC_CSCP_ATCommandProtocol,
-
- .InterfaceStrIndex = NO_DESCRIPTOR
- },
-
- .CDC_Functional_Header =
- {
- .Header = {.Size = sizeof(USB_CDC_Descriptor_FunctionalHeader_t), .Type = DTYPE_CSInterface},
- .Subtype = 0x00,
-
- .CDCSpecification = VERSION_BCD(01.10),
- },
-
- .CDC_Functional_ACM =
- {
- .Header = {.Size = sizeof(USB_CDC_Descriptor_FunctionalACM_t), .Type = DTYPE_CSInterface},
- .Subtype = 0x02,
-
- .Capabilities = 0x04,
- },
-
- .CDC_Functional_Union =
- {
- .Header = {.Size = sizeof(USB_CDC_Descriptor_FunctionalUnion_t), .Type = DTYPE_CSInterface},
- .Subtype = 0x06,
-
- .MasterInterfaceNumber = 0,
- .SlaveInterfaceNumber = 1,
- },
-
- .CDC_NotificationEndpoint =
- {
- .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},
-
- .EndpointAddress = (ENDPOINT_DIR_IN | CDC_NOTIFICATION_EPNUM),
- .Attributes = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),
- .EndpointSize = CDC_NOTIFICATION_EPSIZE,
- .PollingIntervalMS = 0xFF
- },
-
- .CDC_DCI_Interface =
- {
- .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
-
- .InterfaceNumber = 1,
- .AlternateSetting = 0,
-
- .TotalEndpoints = 2,
-
- .Class = CDC_CSCP_CDCDataClass,
- .SubClass = CDC_CSCP_NoDataSubclass,
- .Protocol = CDC_CSCP_NoDataProtocol,
-
- .InterfaceStrIndex = NO_DESCRIPTOR
- },
-
- .CDC_DataOutEndpoint =
- {
- .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},
-
- .EndpointAddress = (ENDPOINT_DIR_OUT | CDC_RX_EPNUM),
- .Attributes = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),
- .EndpointSize = CDC_TXRX_EPSIZE,
- .PollingIntervalMS = 0x01
- },
-
- .CDC_DataInEndpoint =
- {
- .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},
-
- .EndpointAddress = (ENDPOINT_DIR_IN | CDC_TX_EPNUM),
- .Attributes = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),
- .EndpointSize = CDC_TXRX_EPSIZE,
- .PollingIntervalMS = 0x01
- }
-};
-
-/** Language descriptor structure. This descriptor, located in SRAM memory, is returned when the host requests
- * the string descriptor with index 0 (the first index). It is actually an array of 16-bit integers, which indicate
- * via the language ID table available at USB.org what languages the device supports for its string descriptors.
- */
-const USB_Descriptor_String_t LanguageString =
-{
- .Header = {.Size = USB_STRING_LEN(1), .Type = DTYPE_String},
-
- .UnicodeString = {LANGUAGE_ID_ENG}
-};
-
-/** Product descriptor string. This is a Unicode string containing the product's details in human readable form,
- * and is read out upon request by the host when the appropriate string ID is requested, listed in the Device
- * Descriptor.
- */
-const USB_Descriptor_String_t ProductString =
-{
- .Header = {.Size = USB_STRING_LEN(16), .Type = DTYPE_String},
-
- .UnicodeString = L"Arduino Leonardo"
-};
-/*
-const USB_Descriptor_String_t SerialNumString =
-{
- .Header = {.Size = USB_STRING_LEN(12), .Type = DTYPE_String},
-
- .UnicodeString = L"000000001452"
-};
-*/
-const USB_Descriptor_String_t ManufNameString =
-{
- .Header = {.Size = USB_STRING_LEN(11), .Type = DTYPE_String},
-
- .UnicodeString = L"Arduino LLC"
-};
-
-/** This function is called by the library when in device mode, and must be overridden (see LUFA library "USB Descriptors"
- * documentation) by the application code so that the address and size of a requested descriptor can be given
- * to the USB library. When the device receives a Get Descriptor request on the control endpoint, this function
- * is called so that the descriptor details can be passed back and the appropriate descriptor sent back to the
- * USB host.
- */
-uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
- const uint8_t wIndex,
- const void** const DescriptorAddress)
-{
- const uint8_t DescriptorType = (wValue >> 8);
- const uint8_t DescriptorNumber = (wValue & 0xFF);
-
- const void* Address = NULL;
- uint16_t Size = NO_DESCRIPTOR;
-
- switch (DescriptorType)
- {
- case DTYPE_Device:
- Address = &DeviceDescriptor;
- Size = sizeof(USB_Descriptor_Device_t);
- break;
- case DTYPE_Configuration:
- Address = &ConfigurationDescriptor;
- Size = sizeof(USB_Descriptor_Configuration_t);
- break;
- case DTYPE_String:
- if (!(DescriptorNumber))
- {
- Address = &LanguageString;
- Size = LanguageString.Header.Size;
- }
- else if (DescriptorNumber == DeviceDescriptor.ProductStrIndex)
- {
- Address = &ProductString;
- Size = ProductString.Header.Size;
-// } else if (DescriptorNumber == DeviceDescriptor.SerialNumStrIndex)
-// {
-// Address = &SerialNumString;
-// Size = SerialNumString.Header.Size;
- } else if (DescriptorNumber == DeviceDescriptor.ManufacturerStrIndex)
- {
- Address = &ManufNameString;
- Size = ManufNameString.Header.Size;
- }
-
- break;
- }
-
- *DescriptorAddress = Address;
- return Size;
-}
-
diff --git a/bootloaders/caterina_LUFA/Descriptors.h b/bootloaders/caterina_LUFA/Descriptors.h
deleted file mode 100755
index 94091ae..0000000
--- a/bootloaders/caterina_LUFA/Descriptors.h
+++ /dev/null
@@ -1,139 +0,0 @@
-/*
- LUFA Library
- Copyright (C) Dean Camera, 2011.
-
- dean [at] fourwalledcubicle [dot] com
- www.lufa-lib.org
-*/
-
-/*
- Copyright 2011 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
- 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
- software without specific, written prior permission.
-
- The author disclaim all warranties with regard to this
- software, including all implied warranties of merchantability
- and fitness. In no event shall the author be liable for any
- special, indirect or consequential damages or any damages
- whatsoever resulting from loss of use, data or profits, whether
- in an action of contract, negligence or other tortious action,
- arising out of or in connection with the use or performance of
- this software.
-*/
-
-/** \file
- *
- * Header file for Descriptors.c.
- */
-
-#ifndef _DESCRIPTORS_H_
-#define _DESCRIPTORS_H_
-
- /* Includes: */
- #include <LUFA/Drivers/USB/USB.h>
-
- /* Macros: */
- #if defined(__AVR_AT90USB1287__)
- #define AVR_SIGNATURE_1 0x1E
- #define AVR_SIGNATURE_2 0x97
- #define AVR_SIGNATURE_3 0x82
- #elif defined(__AVR_AT90USB647__)
- #define AVR_SIGNATURE_1 0x1E
- #define AVR_SIGNATURE_2 0x96
- #define AVR_SIGNATURE_3 0x82
- #elif defined(__AVR_AT90USB1286__)
- #define AVR_SIGNATURE_1 0x1E
- #define AVR_SIGNATURE_2 0x97
- #define AVR_SIGNATURE_3 0x82
- #elif defined(__AVR_AT90USB646__)
- #define AVR_SIGNATURE_1 0x1E
- #define AVR_SIGNATURE_2 0x96
- #define AVR_SIGNATURE_3 0x82
- #elif defined(__AVR_ATmega32U6__)
- #define AVR_SIGNATURE_1 0x1E
- #define AVR_SIGNATURE_2 0x95
- #define AVR_SIGNATURE_3 0x88
- #elif defined(__AVR_ATmega32U4__)
- #define AVR_SIGNATURE_1 0x1E
- #define AVR_SIGNATURE_2 0x95
- #define AVR_SIGNATURE_3 0x87
- #elif defined(__AVR_ATmega16U4__)
- #define AVR_SIGNATURE_1 0x1E
- #define AVR_SIGNATURE_2 0x94
- #define AVR_SIGNATURE_3 0x88
- #elif defined(__AVR_ATmega32U2__)
- #define AVR_SIGNATURE_1 0x1E
- #define AVR_SIGNATURE_2 0x95
- #define AVR_SIGNATURE_3 0x8A
- #elif defined(__AVR_ATmega16U2__)
- #define AVR_SIGNATURE_1 0x1E
- #define AVR_SIGNATURE_2 0x94
- #define AVR_SIGNATURE_3 0x89
- #elif defined(__AVR_AT90USB162__)
- #define AVR_SIGNATURE_1 0x1E
- #define AVR_SIGNATURE_2 0x94
- #define AVR_SIGNATURE_3 0x82
- #elif defined(__AVR_ATmega8U2__)
- #define AVR_SIGNATURE_1 0x1E
- #define AVR_SIGNATURE_2 0x93
- #define AVR_SIGNATURE_3 0x89
- #elif defined(__AVR_AT90USB82__)
- #define AVR_SIGNATURE_1 0x1E
- #define AVR_SIGNATURE_2 0x94
- #define AVR_SIGNATURE_3 0x82
- #else
- #error The selected AVR part is not currently supported by this bootloader.
- #endif
-
- /** Endpoint number for the CDC control interface event notification endpoint. */
- #define CDC_NOTIFICATION_EPNUM 2
-
- /** Endpoint number for the CDC data interface TX (data IN) endpoint. */
- #define CDC_TX_EPNUM 3
-
- /** Endpoint number for the CDC data interface RX (data OUT) endpoint. */
- #define CDC_RX_EPNUM 4
-
- /** Size of the CDC data interface TX and RX data endpoint banks, in bytes. */
- #define CDC_TXRX_EPSIZE 16
-
- /** Size of the CDC control interface notification endpoint bank, in bytes. */
- #define CDC_NOTIFICATION_EPSIZE 8
-
- /* Type Defines: */
- /** Type define for the device configuration descriptor structure. This must be defined in the
- * application code, as the configuration descriptor contains several sub-descriptors which
- * vary between devices, and which describe the device's usage to the host.
- */
- typedef struct
- {
- USB_Descriptor_Configuration_Header_t Config;
-
- // CDC Control Interface
- USB_Descriptor_Interface_t CDC_CCI_Interface;
- USB_CDC_Descriptor_FunctionalHeader_t CDC_Functional_Header;
- USB_CDC_Descriptor_FunctionalACM_t CDC_Functional_ACM;
- USB_CDC_Descriptor_FunctionalUnion_t CDC_Functional_Union;
- USB_Descriptor_Endpoint_t CDC_NotificationEndpoint;
-
- // CDC Data Interface
- USB_Descriptor_Interface_t CDC_DCI_Interface;
- USB_Descriptor_Endpoint_t CDC_DataOutEndpoint;
- USB_Descriptor_Endpoint_t CDC_DataInEndpoint;
- } USB_Descriptor_Configuration_t;
-
- /* Function Prototypes: */
- uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
- const uint8_t wIndex,
- const void** const DescriptorAddress)
- ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);
-
-#endif
-
diff --git a/bootloaders/caterina_LUFA/makefile b/bootloaders/caterina_LUFA/makefile
deleted file mode 100755
index 5439b5b..0000000
--- a/bootloaders/caterina_LUFA/makefile
+++ /dev/null
@@ -1,717 +0,0 @@
-# Hey Emacs, this is a -*- makefile -*-
-#----------------------------------------------------------------------------
-# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al.
-# >> Modified for use with the LUFA project. <<
-#
-# Released to the Public Domain
-#
-# Additional material for this makefile was written by:
-# Peter Fleury
-# Tim Henigan
-# Colin O'Flynn
-# Reiner Patommel
-# Markus Pfaff
-# Sander Pool
-# Frederik Rouleau
-# Carlos Lamas
-# Dean Camera
-# Opendous Inc.
-# Denver Gingerich
-#
-#----------------------------------------------------------------------------
-# On command line:
-#
-# make all = Make software.
-#
-# make clean = Clean out built project files.
-#
-# make coff = Convert ELF to AVR COFF.
-#
-# make extcoff = Convert ELF to AVR Extended COFF.
-#
-# make program = Download the hex file to the device, using avrdude.
-# Please customize the avrdude settings below first!
-#
-# make doxygen = Generate DoxyGen documentation for the project (must have
-# DoxyGen installed)
-#
-# make debug = Start either simulavr or avarice as specified for debugging,
-# with avr-gdb or avr-insight as the front end for debugging.
-#
-# make filename.s = Just compile filename.c into the assembler code only.
-#
-# make filename.i = Create a preprocessed source file for use in submitting
-# bug reports to the GCC project.
-#
-# To rebuild project do "make clean" then "make all".
-#----------------------------------------------------------------------------
-
-
-# MCU name
-MCU = atmega32u4
-
-
-# Target architecture (see library "Board Types" documentation).
-ARCH = AVR8
-
-
-# Target board (see library "Board Types" documentation, NONE for projects not requiring
-# LUFA board drivers). If USER is selected, put custom board drivers in a directory called
-# "Board" inside the application directory.
-BOARD = USER
-
-
-# Processor frequency.
-# This will define a symbol, F_CPU, in all source code files equal to the
-# processor frequency in Hz. You can then use this symbol in your source code to
-# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
-# automatically to create a 32-bit value in your source code.
-#
-# This will be an integer division of F_USB below, as it is sourced by
-# F_USB after it has run through any CPU prescalers. Note that this value
-# does not *change* the processor frequency - it should merely be updated to
-# reflect the processor speed set externally so that the code can use accurate
-# software delays.
-F_CPU = 16000000
-
-
-# Input clock frequency.
-# This will define a symbol, F_USB, in all source code files equal to the
-# input clock frequency (before any prescaling is performed) in Hz. This value may
-# differ from F_CPU if prescaling is used on the latter, and is required as the
-# raw input clock is fed directly to the PLL sections of the AVR for high speed
-# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
-# at the end, this will be done automatically to create a 32-bit value in your
-# source code.
-#
-# If no clock division is performed on the input clock inside the AVR (via the
-# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
-F_USB = $(F_CPU)
-
-
-# Starting byte address of the bootloader, as a byte address - computed via the formula
-# BOOT_START = ((FLASH_SIZE_KB - BOOT_SECTION_SIZE_KB) * 1024)
-#
-# Note that the bootloader size and start address given in AVRStudio is in words and not
-# bytes, and so will need to be doubled to obtain the byte address needed by AVR-GCC.
-FLASH_SIZE_KB = 32
-BOOT_SECTION_SIZE_KB = 4
-BOOT_START = 0x$(shell echo "obase=16; ($(FLASH_SIZE_KB) - $(BOOT_SECTION_SIZE_KB)) * 1024" | bc)
-
-
-# Output format. (can be srec, ihex, binary)
-FORMAT = ihex
-
-
-# Target file name (without extension).
-TARGET = Caterina
-
-
-# Object files directory
-# To put object files in current directory, use a dot (.), do NOT make
-# this an empty or blank macro!
-OBJDIR = .
-
-
-# Path to the LUFA library
-LUFA_PATH = ../../../../../LUFA-111009
-
-
-# LUFA library compile-time options and predefined tokens
-LUFA_OPTS = -D USB_DEVICE_ONLY
-LUFA_OPTS += -D DEVICE_STATE_AS_GPIOR=0
-LUFA_OPTS += -D ORDERED_EP_CONFIG
-LUFA_OPTS += -D FIXED_CONTROL_ENDPOINT_SIZE=8
-LUFA_OPTS += -D FIXED_NUM_CONFIGURATIONS=1
-LUFA_OPTS += -D USE_RAM_DESCRIPTORS
-LUFA_OPTS += -D USE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)"
-LUFA_OPTS += -D NO_INTERNAL_SERIAL
-LUFA_OPTS += -D NO_DEVICE_SELF_POWER
-LUFA_OPTS += -D NO_DEVICE_REMOTE_WAKEUP
-LUFA_OPTS += -D NO_SOF_EVENTS
-
-#LUFA_OPTS += -D NO_BLOCK_SUPPORT
-#LUFA_OPTS += -D NO_EEPROM_BYTE_SUPPORT
-#LUFA_OPTS += -D NO_FLASH_BYTE_SUPPORT
-#LUFA_OPTS += -D NO_LOCK_BYTE_WRITE_SUPPORT
-
-
-# Create the LUFA source path variables by including the LUFA root makefile
-include $(LUFA_PATH)/LUFA/makefile
-
-
-# List C source files here. (C dependencies are automatically generated.)
-SRC = $(TARGET).c \
- Descriptors.c \
- $(LUFA_SRC_USB) \
-
-
-# List C++ source files here. (C dependencies are automatically generated.)
-CPPSRC =
-
-
-# List Assembler source files here.
-# Make them always end in a capital .S. Files ending in a lowercase .s
-# will not be considered source files but generated files (assembler
-# output from the compiler), and will be deleted upon "make clean"!
-# Even though the DOS/Win* filesystem matches both .s and .S the same,
-# it will preserve the spelling of the filenames, and gcc itself does
-# care about how the name is spelled on its command-line.
-ASRC =
-
-
-# Optimization level, can be [0, 1, 2, 3, s].
-# 0 = turn off optimization. s = optimize for size.
-# (Note: 3 is not always the best optimization level. See avr-libc FAQ.)
-OPT = s
-
-
-# Debugging format.
-# Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs.
-# AVR Studio 4.10 requires dwarf-2.
-# AVR [Extended] COFF format requires stabs, plus an avr-objcopy run.
-DEBUG = dwarf-2
-
-
-# List any extra directories to look for include files here.
-# Each directory must be seperated by a space.
-# Use forward slashes for directory separators.
-# For a directory that has spaces, enclose it in quotes.
-EXTRAINCDIRS = $(LUFA_PATH)/
-
-
-# Compiler flag to set the C Standard level.
-# c89 = "ANSI" C
-# gnu89 = c89 plus GCC extensions
-# c99 = ISO C99 standard (not yet fully implemented)
-# gnu99 = c99 plus GCC extensions
-CSTANDARD = -std=c99
-
-
-# Place -D or -U options here for C sources
-CDEFS = -DF_CPU=$(F_CPU)UL
-CDEFS += -DF_USB=$(F_USB)UL
-CDEFS += -DBOARD=BOARD_$(BOARD) -DARCH=ARCH_$(ARCH)
-CDEFS += -DBOOT_START_ADDR=$(BOOT_START)UL
-CDEFS += $(LUFA_OPTS)
-
-
-# Place -D or -U options here for ASM sources
-ADEFS = -DF_CPU=$(F_CPU)
-ADEFS += -DF_USB=$(F_USB)UL
-ADEFS += -DBOARD=BOARD_$(BOARD)
-ADEFS += -DBOOT_START_ADDR=$(BOOT_START)UL
-ADEFS += $(LUFA_OPTS)
-
-
-# Place -D or -U options here for C++ sources
-CPPDEFS = -DF_CPU=$(F_CPU)UL
-CPPDEFS += -DF_USB=$(F_USB)UL
-CPPDEFS += -DBOARD=BOARD_$(BOARD)
-CPPDEFS += -DBOOT_START_ADDR=$(BOOT_START)UL
-CPPDEFS += $(LUFA_OPTS)
-#CPPDEFS += -D__STDC_LIMIT_MACROS
-#CPPDEFS += -D__STDC_CONSTANT_MACROS
-
-
-
-#---------------- Compiler Options C ----------------
-# -g*: generate debugging information
-# -O*: optimization level
-# -f...: tuning, see GCC manual and avr-libc documentation
-# -Wall...: warning level
-# -Wa,...: tell GCC to pass this to the assembler.
-# -adhlns...: create assembler listing
-CFLAGS = -g$(DEBUG)
-CFLAGS += $(CDEFS)
-CFLAGS += -O$(OPT)
-CFLAGS += -funsigned-char
-CFLAGS += -funsigned-bitfields
-CFLAGS += -ffunction-sections
-CFLAGS += -fno-inline-small-functions
-CFLAGS += -fpack-struct
-CFLAGS += -fshort-enums
-CFLAGS += -fno-strict-aliasing
-CFLAGS += -Wall
-CFLAGS += -Wstrict-prototypes
-#CFLAGS += -mshort-calls
-#CFLAGS += -fno-unit-at-a-time
-#CFLAGS += -Wundef
-#CFLAGS += -Wunreachable-code
-#CFLAGS += -Wsign-compare
-CFLAGS += -Wa,-adhlns=$(<:%.c=$(OBJDIR)/%.lst)
-CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))
-CFLAGS += $(CSTANDARD)
-
-
-#---------------- Compiler Options C++ ----------------
-# -g*: generate debugging information
-# -O*: optimization level
-# -f...: tuning, see GCC manual and avr-libc documentation
-# -Wall...: warning level
-# -Wa,...: tell GCC to pass this to the assembler.
-# -adhlns...: create assembler listing
-CPPFLAGS = -g$(DEBUG)
-CPPFLAGS += $(CPPDEFS)
-CPPFLAGS += -O$(OPT)
-CPPFLAGS += -funsigned-char
-CPPFLAGS += -funsigned-bitfields
-CPPFLAGS += -fpack-struct
-CPPFLAGS += -fshort-enums
-CPPFLAGS += -fno-exceptions
-CPPFLAGS += -Wall
-CPPFLAGS += -Wundef
-#CPPFLAGS += -mshort-calls
-#CPPFLAGS += -fno-unit-at-a-time
-#CPPFLAGS += -Wstrict-prototypes
-#CPPFLAGS += -Wunreachable-code
-#CPPFLAGS += -Wsign-compare
-CPPFLAGS += -Wa,-adhlns=$(<:%.cpp=$(OBJDIR)/%.lst)
-CPPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))
-#CPPFLAGS += $(CSTANDARD)
-
-
-#---------------- Assembler Options ----------------
-# -Wa,...: tell GCC to pass this to the assembler.
-# -adhlns: create listing
-# -gstabs: have the assembler create line number information; note that
-# for use in COFF files, additional information about filenames
-# and function names needs to be present in the assembler source
-# files -- see avr-libc docs [FIXME: not yet described there]
-# -listing-cont-lines: Sets the maximum number of continuation lines of hex
-# dump that will be displayed for a given single line of source input.
-ASFLAGS = $(ADEFS) -Wa,-adhlns=$(<:%.S=$(OBJDIR)/%.lst),-gstabs,--listing-cont-lines=100
-
-
-#---------------- Library Options ----------------
-# Minimalistic printf version
-PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min
-
-# Floating point printf version (requires MATH_LIB = -lm below)
-PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt
-
-# If this is left blank, then it will use the Standard printf version.
-PRINTF_LIB =
-#PRINTF_LIB = $(PRINTF_LIB_MIN)
-#PRINTF_LIB = $(PRINTF_LIB_FLOAT)
-
-
-# Minimalistic scanf version
-SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min
-
-# Floating point + %[ scanf version (requires MATH_LIB = -lm below)
-SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt
-
-# If this is left blank, then it will use the Standard scanf version.
-SCANF_LIB =
-#SCANF_LIB = $(SCANF_LIB_MIN)
-#SCANF_LIB = $(SCANF_LIB_FLOAT)
-
-
-MATH_LIB = -lm
-
-
-# List any extra directories to look for libraries here.
-# Each directory must be seperated by a space.
-# Use forward slashes for directory separators.
-# For a directory that has spaces, enclose it in quotes.
-EXTRALIBDIRS =
-
-
-
-#---------------- External Memory Options ----------------
-
-# 64 KB of external RAM, starting after internal RAM (ATmega128!),
-# used for variables (.data/.bss) and heap (malloc()).
-#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff
-
-# 64 KB of external RAM, starting after internal RAM (ATmega128!),
-# only used for heap (malloc()).
-#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff
-
-EXTMEMOPTS =
-
-
-
-#---------------- Linker Options ----------------
-# -Wl,...: tell GCC to pass this to linker.
-# -Map: create map file
-# --cref: add cross reference to map file
-LDFLAGS = -Wl,-Map=$(TARGET).map,--cref
-LDFLAGS += -Wl,--section-start=.text=$(BOOT_START)
-LDFLAGS += -Wl,--relax
-LDFLAGS += -Wl,--gc-sections
-LDFLAGS += $(EXTMEMOPTS)
-LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS))
-LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)
-#LDFLAGS += -T linker_script.x
-
-
-
-#---------------- Programming Options (avrdude) ----------------
-
-# Programming hardware
-# Type: avrdude -c ?
-# to get a full listing.
-#
-AVRDUDE_PROGRAMMER = avrispmkII
-
-# com1 = serial port. Use lpt1 to connect to parallel port.
-AVRDUDE_PORT = usb
-
-AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex
-#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep
-
-
-# Uncomment the following if you want avrdude's erase cycle counter.
-# Note that this counter needs to be initialized first using -Yn,
-# see avrdude manual.
-#AVRDUDE_ERASE_COUNTER = -y
-
-# Uncomment the following if you do /not/ wish a verification to be
-# performed after programming the device.
-#AVRDUDE_NO_VERIFY = -V
-
-# Increase verbosity level. Please use this when submitting bug
-# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude>
-# to submit bug reports.
-#AVRDUDE_VERBOSE = -v -v
-
-AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)
-AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY)
-AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE)
-AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER)
-
-
-
-#---------------- Debugging Options ----------------
-
-# For simulavr only - target MCU frequency.
-DEBUG_MFREQ = $(F_CPU)
-
-# Set the DEBUG_UI to either gdb or insight.
-# DEBUG_UI = gdb
-DEBUG_UI = insight
-
-# Set the debugging back-end to either avarice, simulavr.
-DEBUG_BACKEND = avarice
-#DEBUG_BACKEND = simulavr
-
-# GDB Init Filename.
-GDBINIT_FILE = __avr_gdbinit
-
-# When using avarice settings for the JTAG
-JTAG_DEV = /dev/com1
-
-# Debugging port used to communicate between GDB / avarice / simulavr.
-DEBUG_PORT = 4242
-
-# Debugging host used to communicate between GDB / avarice / simulavr, normally
-# just set to localhost unless doing some sort of crazy debugging when
-# avarice is running on a different computer.
-DEBUG_HOST = localhost
-
-
-
-#============================================================================
-
-
-# Define programs and commands.
-SHELL = sh
-CC = avr-gcc
-OBJCOPY = avr-objcopy
-OBJDUMP = avr-objdump
-SIZE = avr-size
-AR = avr-ar rcs
-NM = avr-nm
-AVRDUDE = /Applications/avrdude -C /Applications/avrdude.conf -B 1
-REMOVE = rm -f
-REMOVEDIR = rm -rf
-COPY = cp
-WINSHELL = cmd
-
-
-# Define Messages
-# English
-MSG_ERRORS_NONE = Errors: none
-MSG_BEGIN = -------- begin --------
-MSG_END = -------- end --------
-MSG_SIZE_BEFORE = Size before:
-MSG_SIZE_AFTER = Size after:
-MSG_COFF = Converting to AVR COFF:
-MSG_EXTENDED_COFF = Converting to AVR Extended COFF:
-MSG_FLASH = Creating load file for Flash:
-MSG_EEPROM = Creating load file for EEPROM:
-MSG_EXTENDED_LISTING = Creating Extended Listing:
-MSG_SYMBOL_TABLE = Creating Symbol Table:
-MSG_LINKING = Linking:
-MSG_COMPILING = Compiling C:
-MSG_COMPILING_CPP = Compiling C++:
-MSG_ASSEMBLING = Assembling:
-MSG_CLEANING = Cleaning project:
-MSG_CREATING_LIBRARY = Creating library:
-
-
-
-
-# Define all object files.
-OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o)
-
-# Define all listing files.
-LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst)
-
-
-# Compiler flags to generate dependency files.
-GENDEPFLAGS = -MMD -MP -MF .dep/$(@F).d
-
-
-# Combine all necessary flags and optional flags.
-# Add target processor to flags.
-ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)
-ALL_CPPFLAGS = -mmcu=$(MCU) -I. -x c++ $(CPPFLAGS) $(GENDEPFLAGS)
-ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)
-
-
-
-
-
-# Default target.
-all: begin gccversion sizebefore build sizeafter end
-
-# Change the build target to build a HEX file or a library.
-build: elf hex eep lss sym
-#build: lib
-
-
-elf: $(TARGET).elf
-hex: $(TARGET).hex
-eep: $(TARGET).eep
-lss: $(TARGET).lss
-sym: $(TARGET).sym
-LIBNAME=lib$(TARGET).a
-lib: $(LIBNAME)
-
-
-
-# Eye candy.
-# AVR Studio 3.x does not check make's exit code but relies on
-# the following magic strings to be generated by the compile job.
-begin:
- @echo
- @echo $(MSG_BEGIN)
-
-end:
- @echo $(MSG_END)
- @echo
-
-
-# Display size of file.
-HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex
-ELFSIZE = $(SIZE) $(MCU_FLAG) $(FORMAT_FLAG) $(TARGET).elf
-MCU_FLAG = $(shell $(SIZE) --help | grep -- --mcu > /dev/null && echo --mcu=$(MCU) )
-FORMAT_FLAG = $(shell $(SIZE) --help | grep -- --format=.*avr > /dev/null && echo --format=avr )
-
-
-sizebefore:
- @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \
- 2>/dev/null; echo; fi
-
-sizeafter:
- @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \
- 2>/dev/null; echo; fi
-
-
-
-# Display compiler version information.
-gccversion :
- @$(CC) --version
-
-
-# Program the device.
-program: $(TARGET).hex $(TARGET).eep
- $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)
-
-
-# Generate avr-gdb config/init file which does the following:
-# define the reset signal, load the target file, connect to target, and set
-# a breakpoint at main().
-gdb-config:
- @$(REMOVE) $(GDBINIT_FILE)
- @echo define reset >> $(GDBINIT_FILE)
- @echo SIGNAL SIGHUP >> $(GDBINIT_FILE)
- @echo end >> $(GDBINIT_FILE)
- @echo file $(TARGET).elf >> $(GDBINIT_FILE)
- @echo target remote $(DEBUG_HOST):$(DEBUG_PORT) >> $(GDBINIT_FILE)
-ifeq ($(DEBUG_BACKEND),simulavr)
- @echo load >> $(GDBINIT_FILE)
-endif
- @echo break main >> $(GDBINIT_FILE)
-
-debug: gdb-config $(TARGET).elf
-ifeq ($(DEBUG_BACKEND), avarice)
- @echo Starting AVaRICE - Press enter when "waiting to connect" message displays.
- @$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \
- $(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT)
- @$(WINSHELL) /c pause
-
-else
- @$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \
- $(DEBUG_MFREQ) --port $(DEBUG_PORT)
-endif
- @$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE)
-
-
-
-
-# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.
-COFFCONVERT = $(OBJCOPY) --debugging
-COFFCONVERT += --change-section-address .data-0x800000
-COFFCONVERT += --change-section-address .bss-0x800000
-COFFCONVERT += --change-section-address .noinit-0x800000
-COFFCONVERT += --change-section-address .eeprom-0x810000
-
-
-
-coff: $(TARGET).elf
- @echo
- @echo $(MSG_COFF) $(TARGET).cof
- $(COFFCONVERT) -O coff-avr $< $(TARGET).cof
-
-
-extcoff: $(TARGET).elf
- @echo
- @echo $(MSG_EXTENDED_COFF) $(TARGET).cof
- $(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof
-
-
-
-# Create final output files (.hex, .eep) from ELF output file.
-%.hex: %.elf
- @echo
- @echo $(MSG_FLASH) $@
- $(OBJCOPY) -O $(FORMAT) -R .eeprom -R .fuse -R .lock $< $@
-
-%.eep: %.elf
- @echo
- @echo $(MSG_EEPROM) $@
- -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \
- --change-section-lma .eeprom=0 --no-change-warnings -O $(FORMAT) $< $@ || exit 0
-
-# Create extended listing file from ELF output file.
-%.lss: %.elf
- @echo
- @echo $(MSG_EXTENDED_LISTING) $@
- $(OBJDUMP) -h -S -z $< > $@
-
-# Create a symbol table from ELF output file.
-%.sym: %.elf
- @echo
- @echo $(MSG_SYMBOL_TABLE) $@
- $(NM) -n $< > $@
-
-
-
-# Create library from object files.
-.SECONDARY : $(TARGET).a
-.PRECIOUS : $(OBJ)
-%.a: $(OBJ)
- @echo
- @echo $(MSG_CREATING_LIBRARY) $@
- $(AR) $@ $(OBJ)
-
-
-# Link: create ELF output file from object files.
-.SECONDARY : $(TARGET).elf
-.PRECIOUS : $(OBJ)
-%.elf: $(OBJ)
- @echo
- @echo $(MSG_LINKING) $@
- $(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS)
-
-
-# Compile: create object files from C source files.
-$(OBJDIR)/%.o : %.c
- @echo
- @echo $(MSG_COMPILING) $<
- $(CC) -c $(ALL_CFLAGS) $< -o $@
-
-
-# Compile: create object files from C++ source files.
-$(OBJDIR)/%.o : %.cpp
- @echo
- @echo $(MSG_COMPILING_CPP) $<
- $(CC) -c $(ALL_CPPFLAGS) $< -o $@
-
-
-# Compile: create assembler files from C source files.
-%.s : %.c
- $(CC) -S $(ALL_CFLAGS) $< -o $@
-
-
-# Compile: create assembler files from C++ source files.
-%.s : %.cpp
- $(CC) -S $(ALL_CPPFLAGS) $< -o $@
-
-
-# Assemble: create object files from assembler source files.
-$(OBJDIR)/%.o : %.S
- @echo
- @echo $(MSG_ASSEMBLING) $<
- $(CC) -c $(ALL_ASFLAGS) $< -o $@
-
-
-# Create preprocessed source for use in sending a bug report.
-%.i : %.c
- $(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@
-
-
-# Target: clean project.
-clean: begin clean_list end
-
-clean_list :
- @echo
- @echo $(MSG_CLEANING)
- $(REMOVE) $(TARGET).hex
- $(REMOVE) $(TARGET).eep
- $(REMOVE) $(TARGET).cof
- $(REMOVE) $(TARGET).elf
- $(REMOVE) $(TARGET).map
- $(REMOVE) $(TARGET).sym
- $(REMOVE) $(TARGET).lss
- $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o)
- $(REMOVE) $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst)
- $(REMOVE) $(SRC:.c=.s)
- $(REMOVE) $(SRC:.c=.d)
- $(REMOVE) $(SRC:.c=.i)
- $(REMOVEDIR) .dep
-
-doxygen:
- @echo Generating Project Documentation \($(TARGET)\)...
- @doxygen Doxygen.conf
- @echo Documentation Generation Complete.
-
-clean_doxygen:
- rm -rf Documentation
-
-checksource:
- @for f in $(SRC) $(CPPSRC) $(ASRC); do \
- if [ -f $$f ]; then \
- echo "Found Source File: $$f" ; \
- else \
- echo "Source File Not Found: $$f" ; \
- fi; done
-
-
-# Create object files directory
-$(shell mkdir $(OBJDIR) 2>/dev/null)
-
-
-# Include the dependency files.
--include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)
-
-
-# Listing of phony targets.
-.PHONY : all begin finish end sizebefore sizeafter gccversion \
-build elf hex eep lss sym coff extcoff doxygen clean \
-clean_list clean_doxygen program debug gdb-config checksource
-