diff options
Diffstat (limited to 'Bootloaders/DFU')
-rw-r--r-- | Bootloaders/DFU/BootloaderDFU.c | 117 | ||||
-rw-r--r-- | Bootloaders/DFU/BootloaderDFU.h | 33 | ||||
-rw-r--r-- | Bootloaders/DFU/BootloaderDFU.txt | 19 | ||||
-rw-r--r-- | Bootloaders/DFU/Descriptors.c | 63 | ||||
-rw-r--r-- | Bootloaders/DFU/Descriptors.h | 35 | ||||
-rw-r--r-- | Bootloaders/DFU/makefile | 49 |
6 files changed, 161 insertions, 155 deletions
diff --git a/Bootloaders/DFU/BootloaderDFU.c b/Bootloaders/DFU/BootloaderDFU.c index 6f8acc80d..d7bec1f46 100644 --- a/Bootloaders/DFU/BootloaderDFU.c +++ b/Bootloaders/DFU/BootloaderDFU.c @@ -1,7 +1,7 @@ /* LUFA Library Copyright (C) Dean Camera, 2010. - + dean [at] fourwalledcubicle [dot] com www.fourwalledcubicle.com */ @@ -9,13 +9,13 @@ /* Copyright 2010 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 @@ -93,7 +93,7 @@ uint16_t StartAddr = 0x0000; uint16_t EndAddr = 0x0000; -/** Main program entry point. This routine configures the hardware required by the bootloader, then continuously +/** 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. */ @@ -101,17 +101,17 @@ int main(void) { /* Configure hardware required by the bootloader */ SetupHardware(); - + /* Enable global interrupts so that the USB stack can function */ sei(); /* Run the USB management task while the bootloader is supposed to be running */ while (RunBootloader || WaitForExit) USB_USBTask(); - + /* Reset configured hardware back to their original states for the user application */ ResetHardware(); - + /* Start the user application */ AppStartPtr(); } @@ -125,7 +125,7 @@ void SetupHardware(void) /* Disable clock division */ clock_prescale_set(clock_div_1); - + /* Relocate the interrupt vector table to the bootloader section */ MCUCR = (1 << IVCE); MCUCR = (1 << IVSEL); @@ -139,7 +139,7 @@ void ResetHardware(void) { /* Shut down the USB subsystem */ USB_ShutDown(); - + /* Relocate the interrupt vector table back to the application section */ MCUCR = (1 << IVCE); MCUCR = 0; @@ -158,32 +158,32 @@ void EVENT_USB_Device_UnhandledControlRequest(void) { case REQ_DFU_DNLOAD: Endpoint_ClearSETUP(); - + /* Check if bootloader is waiting to terminate */ if (WaitForExit) { /* Bootloader is terminating - process last received command */ ProcessBootloaderCommand(); - + /* Indicate that the last command has now been processed - free to exit bootloader */ WaitForExit = false; } - + /* If the request has a data stage, load it into the command struct */ if (SentCommand.DataSize) { while (!(Endpoint_IsOUTReceived())) - { + { if (USB_DeviceState == DEVICE_STATE_Unattached) return; } /* First byte of the data stage is the DNLOAD request's command */ SentCommand.Command = Endpoint_Read_Byte(); - + /* One byte of the data stage is the command, so subtract it from the total data bytes */ SentCommand.DataSize--; - + /* Load in the rest of the data stage as command parameters */ for (uint8_t DataByte = 0; (DataByte < sizeof(SentCommand.Data)) && Endpoint_BytesInEndpoint(); DataByte++) @@ -191,14 +191,14 @@ void EVENT_USB_Device_UnhandledControlRequest(void) SentCommand.Data[DataByte] = Endpoint_Read_Byte(); SentCommand.DataSize--; } - + /* Process the command */ ProcessBootloaderCommand(); } - + /* Check if currently downloading firmware */ if (DFU_State == dfuDNLOAD_IDLE) - { + { if (!(SentCommand.DataSize)) { DFU_State = dfuIDLE; @@ -210,21 +210,21 @@ void EVENT_USB_Device_UnhandledControlRequest(void) /* Throw away the packet alignment filler bytes before the start of the firmware */ DiscardFillerBytes(StartAddr % FIXED_CONTROL_ENDPOINT_SIZE); - + /* Calculate the number of bytes remaining to be written */ uint16_t BytesRemaining = ((EndAddr - StartAddr) + 1); - + if (IS_ONEBYTE_COMMAND(SentCommand.Data, 0x00)) // Write flash { /* Calculate the number of words to be written from the number of bytes to be written */ uint16_t WordsRemaining = (BytesRemaining >> 1); - + union { uint16_t Words[2]; uint32_t Long; } CurrFlashAddress = {.Words = {StartAddr, Flash64KBPage}}; - + uint32_t CurrFlashPageStartAddress = CurrFlashAddress.Long; uint8_t WordsInFlashPage = 0; @@ -236,7 +236,7 @@ void EVENT_USB_Device_UnhandledControlRequest(void) Endpoint_ClearOUT(); while (!(Endpoint_IsOUTReceived())) - { + { if (USB_DeviceState == DEVICE_STATE_Unattached) return; } @@ -255,7 +255,7 @@ void EVENT_USB_Device_UnhandledControlRequest(void) /* Commit the flash page to memory */ boot_page_write(CurrFlashPageStartAddress); boot_spm_busy_wait(); - + /* Check if programming incomplete */ if (WordsRemaining) { @@ -268,10 +268,10 @@ void EVENT_USB_Device_UnhandledControlRequest(void) } } } - + /* Once programming complete, start address equals the end address */ StartAddr = EndAddr; - + /* Re-enable the RWW section of flash */ boot_rww_enable(); } @@ -285,7 +285,7 @@ void EVENT_USB_Device_UnhandledControlRequest(void) Endpoint_ClearOUT(); while (!(Endpoint_IsOUTReceived())) - { + { if (USB_DeviceState == DEVICE_STATE_Unattached) return; } @@ -293,12 +293,12 @@ void EVENT_USB_Device_UnhandledControlRequest(void) /* Read the byte from the USB interface and write to to the EEPROM */ eeprom_write_byte((uint8_t*)StartAddr, Endpoint_Read_Byte()); - + /* Adjust counters */ StartAddr++; } } - + /* Throw away the currently unused DFU file suffix */ DiscardFillerBytes(DFU_FILE_SUFFIX_SIZE); } @@ -313,11 +313,11 @@ void EVENT_USB_Device_UnhandledControlRequest(void) Endpoint_ClearSETUP(); while (!(Endpoint_IsINReady())) - { + { if (USB_DeviceState == DEVICE_STATE_Unattached) return; } - + if (DFU_State != dfuUPLOAD_IDLE) { if ((DFU_State == dfuERROR) && IS_ONEBYTE_COMMAND(SentCommand.Data, 0x01)) // Blank Check @@ -356,7 +356,7 @@ void EVENT_USB_Device_UnhandledControlRequest(void) Endpoint_ClearIN(); while (!(Endpoint_IsINReady())) - { + { if (USB_DeviceState == DEVICE_STATE_Unattached) return; } @@ -366,13 +366,13 @@ void EVENT_USB_Device_UnhandledControlRequest(void) #if (FLASHEND > 0xFFFF) Endpoint_Write_Word_LE(pgm_read_word_far(CurrFlashAddress.Long)); #else - Endpoint_Write_Word_LE(pgm_read_word(CurrFlashAddress.Long)); + Endpoint_Write_Word_LE(pgm_read_word(CurrFlashAddress.Long)); #endif /* Adjust counters */ CurrFlashAddress.Long += 2; } - + /* Once reading is complete, start address equals the end address */ StartAddr = EndAddr; } @@ -384,9 +384,9 @@ void EVENT_USB_Device_UnhandledControlRequest(void) if (Endpoint_BytesInEndpoint() == FIXED_CONTROL_ENDPOINT_SIZE) { Endpoint_ClearIN(); - + while (!(Endpoint_IsINReady())) - { + { if (USB_DeviceState == DEVICE_STATE_Unattached) return; } @@ -410,14 +410,14 @@ void EVENT_USB_Device_UnhandledControlRequest(void) break; case REQ_DFU_GETSTATUS: Endpoint_ClearSETUP(); - + /* Write 8-bit status value */ Endpoint_Write_Byte(DFU_Status); - + /* Write 24-bit poll timeout value */ Endpoint_Write_Byte(0); Endpoint_Write_Word_LE(0); - + /* Write 8-bit state value */ Endpoint_Write_Byte(DFU_State); @@ -425,12 +425,12 @@ void EVENT_USB_Device_UnhandledControlRequest(void) Endpoint_Write_Byte(0); Endpoint_ClearIN(); - + Endpoint_ClearStatusStage(); - break; + break; case REQ_DFU_CLRSTATUS: Endpoint_ClearSETUP(); - + /* Reset the status value variable to the default OK status */ DFU_Status = OK; @@ -438,17 +438,17 @@ void EVENT_USB_Device_UnhandledControlRequest(void) break; case REQ_DFU_GETSTATE: Endpoint_ClearSETUP(); - + /* Write the current device state to the endpoint */ Endpoint_Write_Byte(DFU_State); - + Endpoint_ClearIN(); - + Endpoint_ClearStatusStage(); break; case REQ_DFU_ABORT: Endpoint_ClearSETUP(); - + /* Reset the current state variable to the default idle state */ DFU_State = dfuIDLE; @@ -472,7 +472,7 @@ static void DiscardFillerBytes(uint8_t NumberOfBytes) /* Wait until next data packet received */ while (!(Endpoint_IsOUTReceived())) - { + { if (USB_DeviceState == DEVICE_STATE_Unattached) return; } @@ -501,10 +501,10 @@ static void ProcessBootloaderCommand(void) /* Set the state and status variables to indicate the error */ DFU_State = dfuERROR; DFU_Status = errWRITE; - + /* Stall command */ Endpoint_StallTransaction(); - + /* Don't process the command */ return; } @@ -544,7 +544,7 @@ static void LoadStartEndAddresses(void) uint16_t Word; } Address[2] = {{.Bytes = {SentCommand.Data[2], SentCommand.Data[1]}}, {.Bytes = {SentCommand.Data[4], SentCommand.Data[3]}}}; - + /* Load in the start and ending read addresses from the sent data packet */ StartAddr = Address[0].Word; EndAddr = Address[1].Word; @@ -560,7 +560,7 @@ static void ProcessMemProgCommand(void) { /* Load in the start and ending read addresses */ LoadStartEndAddresses(); - + /* If FLASH is being written to, we need to pre-erase the first page to write to */ if (IS_ONEBYTE_COMMAND(SentCommand.Data, 0x00)) { @@ -569,12 +569,12 @@ static void ProcessMemProgCommand(void) uint16_t Words[2]; uint32_t Long; } CurrFlashAddress = {.Words = {StartAddr, Flash64KBPage}}; - + /* Erase the current page's temp buffer */ boot_page_erase(CurrFlashAddress.Long); boot_spm_busy_wait(); } - + /* Set the state so that the next DNLOAD requests reads in the firmware */ DFU_State = dfuDNLOAD_IDLE; } @@ -611,7 +611,7 @@ static void ProcessMemReadCommand(void) /* Save the location of the first non-blank byte for response back to the host */ Flash64KBPage = (CurrFlashAddress >> 16); StartAddr = CurrFlashAddress; - + /* Set state and status variables to the appropriate error values */ DFU_State = dfuERROR; DFU_Status = errCHECK_ERASED; @@ -680,7 +680,7 @@ static void ProcessWriteCommand(void) /* Re-enable the RWW section of flash as writing to the flash locks it out */ boot_rww_enable(); - + /* Memory has been erased, reset the security bit so that programming/reading is allowed */ IsSecure = false; } @@ -701,3 +701,4 @@ static void ProcessReadCommand(void) else if (IS_ONEBYTE_COMMAND(SentCommand.Data, 0x01)) // Read signature byte ResponseByte = SignatureInfo[DataIndexToRead - 0x30]; } + diff --git a/Bootloaders/DFU/BootloaderDFU.h b/Bootloaders/DFU/BootloaderDFU.h index 3ddd395c1..ce07c9f78 100644 --- a/Bootloaders/DFU/BootloaderDFU.h +++ b/Bootloaders/DFU/BootloaderDFU.h @@ -1,7 +1,7 @@ /* LUFA Library Copyright (C) Dean Camera, 2010. - + dean [at] fourwalledcubicle [dot] com www.fourwalledcubicle.com */ @@ -9,13 +9,13 @@ /* Copyright 2010 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 @@ -45,11 +45,11 @@ #include <avr/power.h> #include <avr/interrupt.h> #include <stdbool.h> - + #include "Descriptors.h" - + #include <LUFA/Drivers/USB/USB.h> - + /* Macros: */ /** Configuration define. Define this token to true to case the bootloader to reject all memory commands * until a memory erase has been performed. When used in conjunction with the lockbits of the AVR, this @@ -64,7 +64,7 @@ /** Minor bootloader version number. */ #define BOOTLOADER_VERSION_REV 0 - /** Complete bootloader version number expressed as a packed byte, constructed from the + /** Complete bootloader version number expressed as a packed byte, constructed from the * two individual bootloader version macros. */ #define BOOTLOADER_VERSION ((BOOTLOADER_VERSION_MINOR << 4) | BOOTLOADER_VERSION_REV) @@ -74,7 +74,7 @@ /** Second byte of the bootloader identification bytes, used to identify a device's bootloader. */ #define BOOTLOADER_ID_BYTE2 0xFB - + /** Convenience macro, used to determine if the issued command is the given one-byte long command. * * \param[in] dataarr Command byte array to check against @@ -89,7 +89,7 @@ * \param[in] cb2 Second command byte to check */ #define IS_TWOBYTE_COMMAND(dataarr, cb1, cb2) ((dataarr[0] == (cb1)) && (dataarr[1] == (cb2))) - + /** Length of the DFU file suffix block, appended to the end of each complete memory write command. * The DFU file suffix is currently unused (but is designed to give extra file information, such as * a CRC of the complete firmware for error checking) and so is discarded. @@ -100,7 +100,7 @@ * Filler bytes are added to the start of each complete memory write command, and must be discarded. */ #define DFU_FILLER_BYTES_SIZE 26 - + /** DFU class command request to detach from the host. */ #define REQ_DFU_DETATCH 0x00 @@ -141,7 +141,7 @@ /* Type Defines: */ /** Type define for a non-returning function pointer to the loaded application. */ typedef void (*AppPtr_t)(void) ATTR_NO_RETURN; - + /** Type define for a structure containing a complete DFU command issued by the host. */ typedef struct { @@ -187,7 +187,7 @@ errUNKNOWN = 14, errSTALLEDPKT = 15 }; - + /* Function Prototypes: */ void SetupHardware(void); void ResetHardware(void); @@ -203,5 +203,6 @@ static void ProcessWriteCommand(void); static void ProcessReadCommand(void); #endif - + #endif + diff --git a/Bootloaders/DFU/BootloaderDFU.txt b/Bootloaders/DFU/BootloaderDFU.txt index a61ca3913..38f83a6f4 100644 --- a/Bootloaders/DFU/BootloaderDFU.txt +++ b/Bootloaders/DFU/BootloaderDFU.txt @@ -3,7 +3,7 @@ * This file contains special DoxyGen information for the generation of the main page and other special * documentation pages. It is not a project source file. */ - + /** \mainpage DFU Class USB AVR Bootloader * * \section SSec_Compat Demo Compatibility: @@ -28,7 +28,7 @@ * <td><b>USB Class:</b></td> * <td>Device Firmware Update Class (DFU)</td> * </tr> - * <tr> + * <tr> * <td><b>USB Subclass:</b></td> * <td>None</td> * </tr> @@ -42,29 +42,29 @@ * </tr> * </table> * - * \section SSec_Description Project Description: + * \section SSec_Description Project Description: * * This bootloader enumerates to the host as a DFU Class device, allowing for DFU-compatible programming * software to load firmware onto the AVR. - * + * * This bootloader is compatible with Atmel's FLIP application. However, it requires the use of Atmel's * DFU drivers. You will need to install Atmel's DFU drivers prior to using this bootloader. If you are * using a 64 bit Windows OS, you will need to either disable the driver signing requirement (see online * tutorials for details) or use a digitally signed version of the official Atmel driver provided by a * third party AVR user at * <a>http://www.avrfreaks.net/index.php?module=Freaks%20Academy&func=viewItem&item_id=2196&item_type=project</a>. - * + * * As an open-source option, this bootloader is also compatible with the Linux Atmel USB DFU Programmer * software, available for download at <a>http://sourceforge.net/projects/dfu-programmer/</a>. - * + * * If SECURE_MODE is defined as true, upon start-up the bootloader will be locked, with only the chip erase - * function available (similar to Atmel's DFU bootloader). If SECURE_MODE is defined as false, all functions + * function available (similar to Atmel's DFU bootloader). If SECURE_MODE is defined as false, all functions * are usable on start-up without the prerequisite firmware erase. - * + * * Out of the box this bootloader builds for the USB1287, and should fit into 4KB of bootloader space. If * you wish to enlarge this space and/or change the AVR model, you will need to edit the BOOT_START and MCU * values in the accompanying makefile. - * + * * <b>NOTE:</b> This device spoofs Atmel's DFU Bootloader USB VID and PID so that the Atmel DFU bootloader * drivers included with FLIP will work. If you do not wish to use Atmel's ID codes, please * manually change them in Descriptors.c and alter your driver's INF file accordingly. @@ -88,3 +88,4 @@ * </tr> * </table> */ + diff --git a/Bootloaders/DFU/Descriptors.c b/Bootloaders/DFU/Descriptors.c index 46cb86835..e7051a75a 100644 --- a/Bootloaders/DFU/Descriptors.c +++ b/Bootloaders/DFU/Descriptors.c @@ -1,7 +1,7 @@ /* LUFA Library Copyright (C) Dean Camera, 2010. - + dean [at] fourwalledcubicle [dot] com www.fourwalledcubicle.com */ @@ -9,13 +9,13 @@ /* Copyright 2010 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 @@ -30,9 +30,9 @@ /** \file * - * USB Device Descriptors, for library use when in USB device mode. Descriptors are special + * 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. + * the device's capabilities and functions. */ #include "Descriptors.h" @@ -45,22 +45,22 @@ USB_Descriptor_Device_t DeviceDescriptor = { .Header = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device}, - + .USBSpecification = VERSION_BCD(01.10), .Class = 0x00, .SubClass = 0x00, .Protocol = 0x00, - + .Endpoint0Size = FIXED_CONTROL_ENDPOINT_SIZE, - + .VendorID = 0x03EB, .ProductID = PRODUCT_ID_CODE, .ReleaseNumber = VERSION_BCD(00.00), - + .ManufacturerStrIndex = NO_DESCRIPTOR, .ProductStrIndex = 0x01, .SerialNumStrIndex = NO_DESCRIPTOR, - + .NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS }; @@ -71,7 +71,7 @@ USB_Descriptor_Device_t DeviceDescriptor = */ USB_Descriptor_Configuration_t ConfigurationDescriptor = { - .Config = + .Config = { .Header = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration}, @@ -80,37 +80,37 @@ USB_Descriptor_Configuration_t ConfigurationDescriptor = .ConfigurationNumber = 1, .ConfigurationStrIndex = NO_DESCRIPTOR, - + .ConfigAttributes = USB_CONFIG_ATTR_BUSPOWERED, - + .MaxPowerConsumption = USB_CONFIG_POWER_MA(100) }, - - .DFU_Interface = + + .DFU_Interface = { .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface}, .InterfaceNumber = 0, .AlternateSetting = 0, - + .TotalEndpoints = 0, - + .Class = 0xFE, .SubClass = 0x01, .Protocol = 0x02, .InterfaceStrIndex = NO_DESCRIPTOR }, - - .DFU_Functional = + + .DFU_Functional = { .Header = {.Size = sizeof(USB_Descriptor_DFU_Functional_t), .Type = DTYPE_DFUFunctional}, - + .Attributes = (ATTR_CAN_UPLOAD | ATTR_CAN_DOWNLOAD), .DetachTimeout = 0x0000, .TransferSize = 0x0c00, - + .DFUSpecification = VERSION_BCD(01.01) } }; @@ -118,11 +118,11 @@ USB_Descriptor_Configuration_t ConfigurationDescriptor = /** Language descriptor structure. This descriptor, located in FLASH 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. - */ + */ USB_Descriptor_String_t LanguageString = { .Header = {.Size = USB_STRING_LEN(1), .Type = DTYPE_String}, - + .UnicodeString = {LANGUAGE_ID_ENG} }; @@ -133,7 +133,7 @@ USB_Descriptor_String_t LanguageString = USB_Descriptor_String_t ProductString = { .Header = {.Size = USB_STRING_LEN(18), .Type = DTYPE_String}, - + .UnicodeString = L"AVR DFU Bootloader" }; @@ -159,11 +159,11 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, Address = &DeviceDescriptor; Size = sizeof(USB_Descriptor_Device_t); break; - case DTYPE_Configuration: + case DTYPE_Configuration: Address = &ConfigurationDescriptor; Size = sizeof(USB_Descriptor_Configuration_t); break; - case DTYPE_String: + case DTYPE_String: if (!(DescriptorNumber)) { Address = &LanguageString; @@ -174,10 +174,11 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, Address = &ProductString; Size = ProductString.Header.Size; } - + break; } - + *DescriptorAddress = Address; return Size; } + diff --git a/Bootloaders/DFU/Descriptors.h b/Bootloaders/DFU/Descriptors.h index 5b38e60fc..a2211fdd7 100644 --- a/Bootloaders/DFU/Descriptors.h +++ b/Bootloaders/DFU/Descriptors.h @@ -1,7 +1,7 @@ /* LUFA Library Copyright (C) Dean Camera, 2010. - + dean [at] fourwalledcubicle [dot] com www.fourwalledcubicle.com */ @@ -9,13 +9,13 @@ /* Copyright 2010 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 @@ -42,7 +42,7 @@ /* Macros: */ /** Descriptor type value for a DFU class functional descriptor. */ #define DTYPE_DFUFunctional 0x21 - + /** DFU attribute mask, indicating that the DFU device will detach and re-attach when a DFU_DETACH * command is issued, rather than the host issuing a USB Reset. */ @@ -52,15 +52,15 @@ * (memory programming phase). */ #define ATTR_MANEFESTATION_TOLLERANT (1 << 2) - + /** DFU attribute mask, indicating that the DFU device can accept DFU_UPLOAD requests to send data from * the device to the host. - */ + */ #define ATTR_CAN_UPLOAD (1 << 1) /** DFU attribute mask, indicating that the DFU device can accept DFU_DNLOAD requests to send data from * the host to the device. - */ + */ #define ATTR_CAN_DOWNLOAD (1 << 0) #if defined(__AVR_AT90USB1287__) @@ -126,11 +126,11 @@ #else #error The selected AVR part is not currently supported by this bootloader. #endif - + #if !defined(PRODUCT_ID_CODE) #error Current AVR model is not supported by this bootloader. #endif - + /* Type Defines: */ /** Type define for a DFU class function descriptor. This descriptor gives DFU class information * to the host when read, indicating the DFU device's capabilities. @@ -138,22 +138,22 @@ typedef struct { USB_Descriptor_Header_t Header; /**< Standard descriptor header structure */ - + uint8_t Attributes; /**< DFU device attributes, a mask comprising of the * ATTR_* macros listed in this source file */ uint16_t DetachTimeout; /**< Timeout in milliseconds between a USB_DETACH * command being issued and the device detaching * from the USB bus - */ + */ uint16_t TransferSize; /**< Maximum number of bytes the DFU device can accept * from the host in a transaction - */ + */ uint16_t DFUSpecification; /**< BCD packed DFU specification number this DFU * device complies with */ } USB_Descriptor_DFU_Functional_t; - + /** 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. @@ -164,7 +164,7 @@ USB_Descriptor_Interface_t DFU_Interface; USB_Descriptor_DFU_Functional_t DFU_Functional; } USB_Descriptor_Configuration_t; - + /* Function Prototypes: */ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const uint8_t wIndex, @@ -172,3 +172,4 @@ ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3); #endif + diff --git a/Bootloaders/DFU/makefile b/Bootloaders/DFU/makefile index 4a44562dd..67b8b2dce 100644 --- a/Bootloaders/DFU/makefile +++ b/Bootloaders/DFU/makefile @@ -35,7 +35,7 @@ # make doxygen = Generate DoxyGen documentation for the project (must have # DoxyGen installed) # -# make debug = Start either simulavr or avarice as specified for debugging, +# 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. @@ -52,14 +52,14 @@ MCU = at90usb1287 # 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 +# LUFA board drivers). If USER is selected, put custom board drivers in a directory called # "Board" inside the application directory. BOARD = USBKEY # 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 +# 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. # @@ -72,7 +72,7 @@ F_CPU = 8000000 # Input clock frequency. -# This will define a symbol, F_CLOCK, in all source code files equal to the +# This will define a symbol, F_CLOCK, 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 @@ -137,7 +137,7 @@ SRC = $(TARGET).c \ # List C++ source files here. (C dependencies are automatically generated.) -CPPSRC = +CPPSRC = # List Assembler source files here. @@ -150,7 +150,7 @@ CPPSRC = ASRC = -# Optimization level, can be [0, 1, 2, 3, s]. +# 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 @@ -267,7 +267,7 @@ CPPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS)) # 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 +# -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 @@ -280,7 +280,7 @@ PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min 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 = $(PRINTF_LIB_MIN) #PRINTF_LIB = $(PRINTF_LIB_FLOAT) @@ -292,7 +292,7 @@ SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min 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 = $(SCANF_LIB_MIN) #SCANF_LIB = $(SCANF_LIB_FLOAT) @@ -304,7 +304,7 @@ MATH_LIB = -lm # 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 = +EXTRALIBDIRS = @@ -328,7 +328,7 @@ EXTMEMOPTS = # --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,--relax LDFLAGS += -Wl,--gc-sections LDFLAGS += $(EXTMEMOPTS) LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS)) @@ -362,7 +362,7 @@ AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex #AVRDUDE_NO_VERIFY = -V # Increase verbosity level. Please use this when submitting bug -# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> +# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> # to submit bug reports. #AVRDUDE_VERBOSE = -v -v @@ -396,7 +396,7 @@ JTAG_DEV = /dev/com1 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 +# just set to localhost unless doing some sort of crazy debugging when # avarice is running on a different computer. DEBUG_HOST = localhost @@ -425,7 +425,7 @@ WINSHELL = cmd MSG_ERRORS_NONE = Errors: none MSG_BEGIN = -------- begin -------- MSG_END = -------- end -------- -MSG_SIZE_BEFORE = Size before: +MSG_SIZE_BEFORE = Size before: MSG_SIZE_AFTER = Size after: MSG_COFF = Converting to AVR COFF: MSG_EXTENDED_COFF = Converting to AVR Extended COFF: @@ -444,10 +444,10 @@ MSG_CREATING_LIBRARY = Creating library: # Define all object files. -OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o) +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) +LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst) # Compiler flags to generate dependency files. @@ -512,19 +512,19 @@ sizeafter: # Display compiler version information. -gccversion : +gccversion : @$(CC) --version -# Program the device. +# 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 +# define the reset signal, load the target file, connect to target, and set # a breakpoint at main(). -gdb-config: +gdb-config: @$(REMOVE) $(GDBINIT_FILE) @echo define reset >> $(GDBINIT_FILE) @echo SIGNAL SIGHUP >> $(GDBINIT_FILE) @@ -622,14 +622,14 @@ extcoff: $(TARGET).elf $(OBJDIR)/%.o : %.c @echo @echo $(MSG_COMPILING) $< - $(CC) -c $(ALL_CFLAGS) $< -o $@ + $(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 $@ + $(CC) -c $(ALL_CPPFLAGS) $< -o $@ # Compile: create assembler files from C source files. @@ -651,7 +651,7 @@ $(OBJDIR)/%.o : %.S # Create preprocessed source for use in sending a bug report. %.i : %.c - $(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ + $(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ # Target: clean project. @@ -694,3 +694,4 @@ $(shell mkdir $(OBJDIR) 2>/dev/null) .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 + |