From f2003d941ad8a4e81545e5c08a04f9b07953a242 Mon Sep 17 00:00:00 2001 From: Nico Date: Wed, 11 Feb 2015 16:15:49 +0100 Subject: [PATCH 01/28] Moved HoodLoader2 sources To get the github main page a bit smaller and not confuse people with the source. recompilation is not tested yet, but the paths *should* be okay. --- avr/boards.txt | 22 ++--- avr/bootloaders/HoodLoader2.inf | 81 ------------------ .../bootloaders/HoodLoader2/Board}/Board.h | 0 .../bootloaders/HoodLoader2/Board}/Buttons.h | 0 .../bootloaders/HoodLoader2/Board}/LEDs.h | 0 .../bootloaders/HoodLoader2/BootloaderAPI.c | 0 .../bootloaders/HoodLoader2/BootloaderAPI.h | 0 .../HoodLoader2/BootloaderAPITable.S | 0 .../HoodLoader2/Config}/AppConfig.h | 0 .../HoodLoader2/Config}/LUFAConfig.h | 0 .../bootloaders/HoodLoader2/Descriptors.c | 0 .../bootloaders/HoodLoader2/Descriptors.h | 0 .../bootloaders/HoodLoader2/HoodLoader2.c | 0 .../bootloaders/HoodLoader2/HoodLoader2.h | 0 .../bootloaders/HoodLoader2/HoodLoader2.inf | 0 .../HoodLoader2_0_1_Mega_8u2.hex | 0 .../HoodLoader2_0_1_Mega_at90usb162.hex | 0 .../HoodLoader2_0_1_Uno_8u2.hex | 0 .../HoodLoader2_0_1_Uno_at90usb162.hex | 0 .../HoodLoader2_0_3_Mega_16u2.hex | 0 .../HoodLoader2_0_3_Mega_32u2.hex | 0 .../HoodLoader2_0_3_Uno_16u2.hex | 0 .../HoodLoader2_0_3_Uno_32u2.hex | 0 .../LegacyVersions/BootloaderCDC_atusb162.hex | 0 .../HoodLoader2_0_1_Mega_16u2.hex | 0 .../HoodLoader2_0_1_Mega_32u2.hex | 0 .../HoodLoader2_0_1_Uno_16u2.hex | 0 .../HoodLoader2_0_1_Uno_32u2.hex | 0 .../HoodLoader2_0_2_Mega_16u2.hex | 0 .../HoodLoader2_0_2_Mega_32u2.hex | 0 .../HoodLoader2_0_2_Uno_16u2.hex | 0 .../HoodLoader2_0_2_Uno_32u2.hex | 0 .../LegacyVersions/Hoodloader2_Alpha1.hex | 0 .../LegacyVersions/Hoodloader2_Alpha2.hex | 0 .../LegacyVersions/Hoodloader2_Alpha5.hex | 0 .../LegacyVersions/Hoodloader2_Mega_Beta.hex | 0 .../LegacyVersions/Hoodloader2_Uno_Beta.hex | 0 .../LegacyVersions/LUFA CDC Bootloader.inf | 0 .../LegacyVersions/Readme.md | 0 .../bootloaders/HoodLoader2/makefile | 2 +- .../lufa-LUFA-140928}/.gitignore | 0 .../HID_EEPROM_Loader/HID_EEPROM_Loader.c | 0 .../LUFA/Build/HID_EEPROM_Loader/makefile | 0 .../LUFA/Build/lufa_atprogram.mk | 0 .../LUFA/Build/lufa_avrdude.mk | 0 .../LUFA/Build/lufa_build.mk | 0 .../lufa-LUFA-140928}/LUFA/Build/lufa_core.mk | 0 .../LUFA/Build/lufa_cppcheck.mk | 0 .../lufa-LUFA-140928}/LUFA/Build/lufa_dfu.mk | 0 .../LUFA/Build/lufa_doxygen.mk | 0 .../lufa-LUFA-140928}/LUFA/Build/lufa_hid.mk | 0 .../LUFA/Build/lufa_sources.mk | 0 .../DeviceTemplate/Descriptors.c | 0 .../DeviceTemplate/Descriptors.h | 0 .../DeviceTemplate/DeviceApplication.c | 0 .../DeviceTemplate/DeviceApplication.h | 0 .../LUFA/CodeTemplates/DeviceTemplate/asf.xml | 0 .../LUFA/CodeTemplates/DriverStubs/Board.h | 0 .../LUFA/CodeTemplates/DriverStubs/Buttons.h | 0 .../CodeTemplates/DriverStubs/Dataflash.h | 0 .../LUFA/CodeTemplates/DriverStubs/Joystick.h | 0 .../LUFA/CodeTemplates/DriverStubs/LEDs.h | 0 .../HostTemplate/HostApplication.c | 0 .../HostTemplate/HostApplication.h | 0 .../LUFA/CodeTemplates/HostTemplate/asf.xml | 0 .../LUFA/CodeTemplates/LUFAConfig.h | 0 .../CodeTemplates/WindowsINF/LUFA CDC-ACM.inf | 0 .../CodeTemplates/WindowsINF/LUFA RNDIS.inf | 0 .../LUFA/CodeTemplates/makefile_template | 0 .../LUFA/Common/ArchitectureSpecific.h | 0 .../LUFA/Common/Architectures.h | 0 .../LUFA/Common/Attributes.h | 0 .../LUFA/Common/BoardTypes.h | 0 .../lufa-LUFA-140928}/LUFA/Common/Common.h | 0 .../LUFA/Common/CompilerSpecific.h | 0 .../LUFA/Common/Endianness.h | 0 .../LUFA/DoxygenPages/BuildSystem.txt | 0 .../BuildingLinkableLibraries.txt | 0 .../LUFA/DoxygenPages/ChangeLog.txt | 0 .../LUFA/DoxygenPages/CompileTimeTokens.txt | 0 .../LUFA/DoxygenPages/CompilingApps.txt | 0 .../LUFA/DoxygenPages/ConfiguringApps.txt | 0 .../LUFA/DoxygenPages/DevelopingWithLUFA.txt | 0 .../LUFA/DoxygenPages/DeviceSupport.txt | 0 .../LUFA/DoxygenPages/DirectorySummaries.txt | 0 .../LUFA/DoxygenPages/Donating.txt | 0 .../LUFA/DoxygenPages/ExportingLibrary.txt | 0 .../LUFA/DoxygenPages/FutureChanges.txt | 0 .../LUFA/DoxygenPages/GettingStarted.txt | 0 .../LUFA/DoxygenPages/Groups.txt | 0 .../AS5_AS6_Import/AS5_AS6_Import_Step1.png | Bin .../AS5_AS6_Import/AS5_AS6_Import_Step2.png | Bin .../AS5_AS6_Import/AS5_AS6_Import_Step3.png | Bin .../AS5_AS6_Import/AS5_AS6_Import_Step4.png | Bin .../AS5_AS6_Import/AS5_AS6_Import_Step5_1.png | Bin .../AS5_AS6_Import/AS5_AS6_Import_Step5_2.png | Bin .../AS5_AS6_Import/AS5_AS6_Import_Step5_3.png | Bin .../LUFA/DoxygenPages/Images/Author.jpg | Bin .../LUFA/DoxygenPages/Images/LUFA.png | Bin .../LUFA/DoxygenPages/Images/LUFA_thumb.png | Bin .../LUFA/DoxygenPages/KnownIssues.txt | 0 .../LUFA/DoxygenPages/LUFAPoweredProjects.txt | 0 .../LUFA/DoxygenPages/LibraryResources.txt | 0 .../LUFA/DoxygenPages/LicenseInfo.txt | 0 .../LUFA/DoxygenPages/MainPage.txt | 0 .../DoxygenPages/MigrationInformation.txt | 0 .../LUFA/DoxygenPages/OSDrivers.txt | 0 .../LUFA/DoxygenPages/ProgrammingApps.txt | 0 .../DoxygenPages/SoftwareBootloaderJump.txt | 0 .../LUFA/DoxygenPages/Style/Footer.htm | 0 .../LUFA/DoxygenPages/Style/Style.css | 0 .../LUFA/DoxygenPages/VIDAndPIDValues.txt | 0 .../LUFA/DoxygenPages/WritingBoardDrivers.txt | 0 .../Drivers/Board/AVR8/ADAFRUITU4/Board.h | 0 .../LUFA/Drivers/Board/AVR8/ADAFRUITU4/LEDs.h | 0 .../Drivers/Board/AVR8/ATAVRUSBRF01/Board.h | 0 .../Drivers/Board/AVR8/ATAVRUSBRF01/Buttons.h | 0 .../Drivers/Board/AVR8/ATAVRUSBRF01/LEDs.h | 0 .../LUFA/Drivers/Board/AVR8/BENITO/Board.h | 0 .../LUFA/Drivers/Board/AVR8/BENITO/Buttons.h | 0 .../LUFA/Drivers/Board/AVR8/BENITO/LEDs.h | 0 .../LUFA/Drivers/Board/AVR8/BIGMULTIO/Board.h | 0 .../LUFA/Drivers/Board/AVR8/BIGMULTIO/LEDs.h | 0 .../LUFA/Drivers/Board/AVR8/BLACKCAT/Board.h | 0 .../LUFA/Drivers/Board/AVR8/BLACKCAT/LEDs.h | 0 .../LUFA/Drivers/Board/AVR8/BUI/Board.h | 0 .../LUFA/Drivers/Board/AVR8/BUI/LEDs.h | 0 .../LUFA/Drivers/Board/AVR8/BUMBLEB/Board.h | 0 .../LUFA/Drivers/Board/AVR8/BUMBLEB/Buttons.h | 0 .../Drivers/Board/AVR8/BUMBLEB/Joystick.h | 0 .../LUFA/Drivers/Board/AVR8/BUMBLEB/LEDs.h | 0 .../LUFA/Drivers/Board/AVR8/CULV3/Board.h | 0 .../LUFA/Drivers/Board/AVR8/CULV3/Buttons.h | 0 .../LUFA/Drivers/Board/AVR8/CULV3/LEDs.h | 0 .../LUFA/Drivers/Board/AVR8/DUCE/Board.h | 0 .../LUFA/Drivers/Board/AVR8/DUCE/LEDs.h | 0 .../LUFA/Drivers/Board/AVR8/EVK527/Board.h | 0 .../LUFA/Drivers/Board/AVR8/EVK527/Buttons.h | 0 .../Drivers/Board/AVR8/EVK527/Dataflash.h | 0 .../LUFA/Drivers/Board/AVR8/EVK527/Joystick.h | 0 .../LUFA/Drivers/Board/AVR8/EVK527/LEDs.h | 0 .../LUFA/Drivers/Board/AVR8/JMDBU2/Board.h | 0 .../LUFA/Drivers/Board/AVR8/JMDBU2/Buttons.h | 0 .../LUFA/Drivers/Board/AVR8/JMDBU2/LEDs.h | 0 .../LUFA/Drivers/Board/AVR8/LEONARDO/Board.h | 0 .../LUFA/Drivers/Board/AVR8/LEONARDO/LEDs.h | 0 .../LUFA/Drivers/Board/AVR8/MAXIMUS/Board.h | 0 .../LUFA/Drivers/Board/AVR8/MAXIMUS/LEDs.h | 0 .../LUFA/Drivers/Board/AVR8/MICRO/Board.h | 0 .../LUFA/Drivers/Board/AVR8/MICRO/LEDs.h | 0 .../Drivers/Board/AVR8/MICROPENDOUS/Board.h | 0 .../Drivers/Board/AVR8/MICROPENDOUS/Buttons.h | 0 .../Drivers/Board/AVR8/MICROPENDOUS/LEDs.h | 0 .../Drivers/Board/AVR8/MICROSIN162/Board.h | 0 .../Drivers/Board/AVR8/MICROSIN162/Buttons.h | 0 .../Drivers/Board/AVR8/MICROSIN162/LEDs.h | 0 .../LUFA/Drivers/Board/AVR8/MINIMUS/Board.h | 0 .../LUFA/Drivers/Board/AVR8/MINIMUS/Buttons.h | 0 .../LUFA/Drivers/Board/AVR8/MINIMUS/LEDs.h | 0 .../LUFA/Drivers/Board/AVR8/MULTIO/Board.h | 0 .../LUFA/Drivers/Board/AVR8/MULTIO/LEDs.h | 0 .../LUFA/Drivers/Board/AVR8/OLIMEX162/Board.h | 0 .../Drivers/Board/AVR8/OLIMEX162/Buttons.h | 0 .../LUFA/Drivers/Board/AVR8/OLIMEX162/LEDs.h | 0 .../Drivers/Board/AVR8/OLIMEX32U4/Board.h | 0 .../Drivers/Board/AVR8/OLIMEX32U4/Buttons.h | 0 .../LUFA/Drivers/Board/AVR8/OLIMEX32U4/LEDs.h | 0 .../Drivers/Board/AVR8/OLIMEXISPMK2/Board.h | 0 .../Drivers/Board/AVR8/OLIMEXISPMK2/Buttons.h | 0 .../Drivers/Board/AVR8/OLIMEXISPMK2/LEDs.h | 0 .../Drivers/Board/AVR8/OLIMEXT32U4/Board.h | 0 .../Drivers/Board/AVR8/OLIMEXT32U4/Buttons.h | 0 .../Drivers/Board/AVR8/OLIMEXT32U4/LEDs.h | 0 .../Drivers/Board/AVR8/RZUSBSTICK/Board.h | 0 .../LUFA/Drivers/Board/AVR8/RZUSBSTICK/LEDs.h | 0 .../Drivers/Board/AVR8/SPARKFUN8U2/Board.h | 0 .../Drivers/Board/AVR8/SPARKFUN8U2/LEDs.h | 0 .../Drivers/Board/AVR8/STANGE_ISP/Board.h | 0 .../Drivers/Board/AVR8/STANGE_ISP/Buttons.h | 0 .../LUFA/Drivers/Board/AVR8/STANGE_ISP/LEDs.h | 0 .../LUFA/Drivers/Board/AVR8/STK525/Board.h | 0 .../LUFA/Drivers/Board/AVR8/STK525/Buttons.h | 0 .../Drivers/Board/AVR8/STK525/Dataflash.h | 0 .../LUFA/Drivers/Board/AVR8/STK525/Joystick.h | 0 .../LUFA/Drivers/Board/AVR8/STK525/LEDs.h | 0 .../LUFA/Drivers/Board/AVR8/STK526/Board.h | 0 .../LUFA/Drivers/Board/AVR8/STK526/Buttons.h | 0 .../Drivers/Board/AVR8/STK526/Dataflash.h | 0 .../LUFA/Drivers/Board/AVR8/STK526/Joystick.h | 0 .../LUFA/Drivers/Board/AVR8/STK526/LEDs.h | 0 .../LUFA/Drivers/Board/AVR8/TEENSY/Board.h | 0 .../LUFA/Drivers/Board/AVR8/TEENSY/LEDs.h | 0 .../LUFA/Drivers/Board/AVR8/TUL/Board.h | 0 .../LUFA/Drivers/Board/AVR8/TUL/Buttons.h | 0 .../LUFA/Drivers/Board/AVR8/TUL/LEDs.h | 0 .../LUFA/Drivers/Board/AVR8/U2S/Board.h | 0 .../LUFA/Drivers/Board/AVR8/U2S/Buttons.h | 0 .../LUFA/Drivers/Board/AVR8/U2S/LEDs.h | 0 .../LUFA/Drivers/Board/AVR8/UDIP/Board.h | 0 .../LUFA/Drivers/Board/AVR8/UDIP/Buttons.h | 0 .../LUFA/Drivers/Board/AVR8/UDIP/LEDs.h | 0 .../LUFA/Drivers/Board/AVR8/UNO/Board.h | 0 .../LUFA/Drivers/Board/AVR8/UNO/LEDs.h | 0 .../LUFA/Drivers/Board/AVR8/USB2AX/Board.h | 0 .../LUFA/Drivers/Board/AVR8/USB2AX/Buttons.h | 0 .../LUFA/Drivers/Board/AVR8/USB2AX/LEDs.h | 0 .../LUFA/Drivers/Board/AVR8/USBFOO/Board.h | 0 .../LUFA/Drivers/Board/AVR8/USBFOO/Buttons.h | 0 .../LUFA/Drivers/Board/AVR8/USBFOO/LEDs.h | 0 .../LUFA/Drivers/Board/AVR8/USBKEY/Board.h | 0 .../LUFA/Drivers/Board/AVR8/USBKEY/Buttons.h | 0 .../Drivers/Board/AVR8/USBKEY/Dataflash.h | 0 .../LUFA/Drivers/Board/AVR8/USBKEY/Joystick.h | 0 .../LUFA/Drivers/Board/AVR8/USBKEY/LEDs.h | 0 .../Drivers/Board/AVR8/USBTINYMKII/Board.h | 0 .../Drivers/Board/AVR8/USBTINYMKII/Buttons.h | 0 .../Drivers/Board/AVR8/USBTINYMKII/LEDs.h | 0 .../LUFA/Drivers/Board/AVR8/XPLAIN/Board.h | 0 .../Drivers/Board/AVR8/XPLAIN/Dataflash.h | 0 .../LUFA/Drivers/Board/AVR8/XPLAIN/LEDs.h | 0 .../LUFA/Drivers/Board/AVR8/YUN/Board.h | 0 .../LUFA/Drivers/Board/AVR8/YUN/LEDs.h | 0 .../LUFA/Drivers/Board/Board.h | 0 .../LUFA/Drivers/Board/Buttons.h | 0 .../LUFA/Drivers/Board/Dataflash.h | 0 .../LUFA/Drivers/Board/Joystick.h | 0 .../LUFA/Drivers/Board/LEDs.h | 0 .../LUFA/Drivers/Board/Temperature.c | 0 .../LUFA/Drivers/Board/Temperature.h | 0 .../LUFA/Drivers/Board/UC3/EVK1100/Board.h | 0 .../LUFA/Drivers/Board/UC3/EVK1100/Buttons.h | 0 .../LUFA/Drivers/Board/UC3/EVK1100/Joystick.h | 0 .../LUFA/Drivers/Board/UC3/EVK1100/LEDs.h | 0 .../LUFA/Drivers/Board/UC3/EVK1101/Board.h | 0 .../LUFA/Drivers/Board/UC3/EVK1101/Buttons.h | 0 .../LUFA/Drivers/Board/UC3/EVK1101/Joystick.h | 0 .../LUFA/Drivers/Board/UC3/EVK1101/LEDs.h | 0 .../LUFA/Drivers/Board/UC3/EVK1104/Board.h | 0 .../LUFA/Drivers/Board/UC3/EVK1104/Buttons.h | 0 .../LUFA/Drivers/Board/UC3/EVK1104/LEDs.h | 0 .../Drivers/Board/UC3/UC3A3_XPLAINED/Board.h | 0 .../Board/UC3/UC3A3_XPLAINED/Buttons.h | 0 .../Drivers/Board/UC3/UC3A3_XPLAINED/LEDs.h | 0 .../Drivers/Board/XMEGA/A3BU_XPLAINED/Board.h | 0 .../Board/XMEGA/A3BU_XPLAINED/Buttons.h | 0 .../Board/XMEGA/A3BU_XPLAINED/Dataflash.h | 0 .../Drivers/Board/XMEGA/A3BU_XPLAINED/LEDs.h | 0 .../Drivers/Board/XMEGA/B1_XPLAINED/Board.h | 0 .../Drivers/Board/XMEGA/B1_XPLAINED/Buttons.h | 0 .../Board/XMEGA/B1_XPLAINED/Dataflash.h | 0 .../Drivers/Board/XMEGA/B1_XPLAINED/LEDs.h | 0 .../Drivers/Board/XMEGA/C3_XPLAINED/Board.h | 0 .../Drivers/Board/XMEGA/C3_XPLAINED/Buttons.h | 0 .../Drivers/Board/XMEGA/C3_XPLAINED/LEDs.h | 0 .../LUFA/Drivers/Misc/AT45DB321C.h | 0 .../LUFA/Drivers/Misc/AT45DB642D.h | 0 .../LUFA/Drivers/Misc/RingBuffer.h | 0 .../LUFA/Drivers/Misc/TerminalCodes.h | 0 .../LUFA/Drivers/Peripheral/ADC.h | 0 .../LUFA/Drivers/Peripheral/AVR8/ADC_AVR8.h | 0 .../LUFA/Drivers/Peripheral/AVR8/SPI_AVR8.h | 0 .../Drivers/Peripheral/AVR8/SerialSPI_AVR8.h | 0 .../Drivers/Peripheral/AVR8/Serial_AVR8.c | 0 .../Drivers/Peripheral/AVR8/Serial_AVR8.h | 0 .../LUFA/Drivers/Peripheral/AVR8/TWI_AVR8.c | 0 .../LUFA/Drivers/Peripheral/AVR8/TWI_AVR8.h | 0 .../LUFA/Drivers/Peripheral/SPI.h | 0 .../LUFA/Drivers/Peripheral/Serial.h | 0 .../LUFA/Drivers/Peripheral/SerialSPI.h | 0 .../LUFA/Drivers/Peripheral/TWI.h | 0 .../LUFA/Drivers/Peripheral/XMEGA/SPI_XMEGA.h | 0 .../Peripheral/XMEGA/SerialSPI_XMEGA.h | 0 .../Drivers/Peripheral/XMEGA/Serial_XMEGA.c | 0 .../Drivers/Peripheral/XMEGA/Serial_XMEGA.h | 0 .../LUFA/Drivers/Peripheral/XMEGA/TWI_XMEGA.c | 0 .../LUFA/Drivers/Peripheral/XMEGA/TWI_XMEGA.h | 0 .../Drivers/USB/Class/AndroidAccessoryClass.h | 0 .../LUFA/Drivers/USB/Class/AudioClass.h | 0 .../LUFA/Drivers/USB/Class/CDCClass.h | 0 .../Common/AndroidAccessoryClassCommon.h | 0 .../USB/Class/Common/AudioClassCommon.h | 0 .../Drivers/USB/Class/Common/CDCClassCommon.h | 0 .../Drivers/USB/Class/Common/HIDClassCommon.h | 0 .../LUFA/Drivers/USB/Class/Common/HIDParser.c | 0 .../LUFA/Drivers/USB/Class/Common/HIDParser.h | 0 .../Drivers/USB/Class/Common/HIDReportData.h | 0 .../USB/Class/Common/MIDIClassCommon.h | 0 .../USB/Class/Common/MassStorageClassCommon.h | 0 .../USB/Class/Common/PrinterClassCommon.h | 0 .../USB/Class/Common/RNDISClassCommon.h | 0 .../USB/Class/Common/StillImageClassCommon.h | 0 .../USB/Class/Device/AudioClassDevice.c | 0 .../USB/Class/Device/AudioClassDevice.h | 0 .../Drivers/USB/Class/Device/CDCClassDevice.c | 0 .../Drivers/USB/Class/Device/CDCClassDevice.h | 0 .../Drivers/USB/Class/Device/HIDClassDevice.c | 0 .../Drivers/USB/Class/Device/HIDClassDevice.h | 0 .../USB/Class/Device/MIDIClassDevice.c | 0 .../USB/Class/Device/MIDIClassDevice.h | 0 .../USB/Class/Device/MassStorageClassDevice.c | 0 .../USB/Class/Device/MassStorageClassDevice.h | 0 .../USB/Class/Device/PrinterClassDevice.c | 0 .../USB/Class/Device/PrinterClassDevice.h | 0 .../USB/Class/Device/RNDISClassDevice.c | 0 .../USB/Class/Device/RNDISClassDevice.h | 0 .../LUFA/Drivers/USB/Class/HIDClass.h | 0 .../Class/Host/AndroidAccessoryClassHost.c | 0 .../Class/Host/AndroidAccessoryClassHost.h | 0 .../Drivers/USB/Class/Host/AudioClassHost.c | 0 .../Drivers/USB/Class/Host/AudioClassHost.h | 0 .../Drivers/USB/Class/Host/CDCClassHost.c | 0 .../Drivers/USB/Class/Host/CDCClassHost.h | 0 .../Drivers/USB/Class/Host/HIDClassHost.c | 0 .../Drivers/USB/Class/Host/HIDClassHost.h | 0 .../Drivers/USB/Class/Host/MIDIClassHost.c | 0 .../Drivers/USB/Class/Host/MIDIClassHost.h | 0 .../USB/Class/Host/MassStorageClassHost.c | 0 .../USB/Class/Host/MassStorageClassHost.h | 0 .../Drivers/USB/Class/Host/PrinterClassHost.c | 0 .../Drivers/USB/Class/Host/PrinterClassHost.h | 0 .../Drivers/USB/Class/Host/RNDISClassHost.c | 0 .../Drivers/USB/Class/Host/RNDISClassHost.h | 0 .../USB/Class/Host/StillImageClassHost.c | 0 .../USB/Class/Host/StillImageClassHost.h | 0 .../LUFA/Drivers/USB/Class/MIDIClass.h | 0 .../LUFA/Drivers/USB/Class/MassStorageClass.h | 0 .../LUFA/Drivers/USB/Class/PrinterClass.h | 0 .../LUFA/Drivers/USB/Class/RNDISClass.h | 0 .../LUFA/Drivers/USB/Class/StillImageClass.h | 0 .../LUFA/Drivers/USB/Core/AVR8/Device_AVR8.c | 0 .../LUFA/Drivers/USB/Core/AVR8/Device_AVR8.h | 0 .../USB/Core/AVR8/EndpointStream_AVR8.c | 0 .../USB/Core/AVR8/EndpointStream_AVR8.h | 0 .../Drivers/USB/Core/AVR8/Endpoint_AVR8.c | 0 .../Drivers/USB/Core/AVR8/Endpoint_AVR8.h | 0 .../LUFA/Drivers/USB/Core/AVR8/Host_AVR8.c | 0 .../LUFA/Drivers/USB/Core/AVR8/Host_AVR8.h | 0 .../LUFA/Drivers/USB/Core/AVR8/OTG_AVR8.h | 0 .../Drivers/USB/Core/AVR8/PipeStream_AVR8.c | 0 .../Drivers/USB/Core/AVR8/PipeStream_AVR8.h | 0 .../LUFA/Drivers/USB/Core/AVR8/Pipe_AVR8.c | 0 .../LUFA/Drivers/USB/Core/AVR8/Pipe_AVR8.h | 0 .../Template/Template_Endpoint_Control_R.c | 0 .../Template/Template_Endpoint_Control_W.c | 0 .../Core/AVR8/Template/Template_Endpoint_RW.c | 0 .../USB/Core/AVR8/Template/Template_Pipe_RW.c | 0 .../USB/Core/AVR8/USBController_AVR8.c | 0 .../USB/Core/AVR8/USBController_AVR8.h | 0 .../Drivers/USB/Core/AVR8/USBInterrupt_AVR8.c | 0 .../Drivers/USB/Core/AVR8/USBInterrupt_AVR8.h | 0 .../LUFA/Drivers/USB/Core/ConfigDescriptors.c | 0 .../LUFA/Drivers/USB/Core/ConfigDescriptors.h | 0 .../LUFA/Drivers/USB/Core/Device.h | 0 .../LUFA/Drivers/USB/Core/DeviceStandardReq.c | 0 .../LUFA/Drivers/USB/Core/DeviceStandardReq.h | 0 .../LUFA/Drivers/USB/Core/Endpoint.h | 0 .../LUFA/Drivers/USB/Core/EndpointStream.h | 0 .../LUFA/Drivers/USB/Core/Events.c | 0 .../LUFA/Drivers/USB/Core/Events.h | 0 .../LUFA/Drivers/USB/Core/Host.h | 0 .../LUFA/Drivers/USB/Core/HostStandardReq.c | 0 .../LUFA/Drivers/USB/Core/HostStandardReq.h | 0 .../LUFA/Drivers/USB/Core/OTG.h | 0 .../LUFA/Drivers/USB/Core/Pipe.h | 0 .../LUFA/Drivers/USB/Core/PipeStream.h | 0 .../LUFA/Drivers/USB/Core/StdDescriptors.h | 0 .../LUFA/Drivers/USB/Core/StdRequestType.h | 0 .../LUFA/Drivers/USB/Core/UC3/Device_UC3.c | 0 .../LUFA/Drivers/USB/Core/UC3/Device_UC3.h | 0 .../Drivers/USB/Core/UC3/EndpointStream_UC3.c | 0 .../Drivers/USB/Core/UC3/EndpointStream_UC3.h | 0 .../LUFA/Drivers/USB/Core/UC3/Endpoint_UC3.c | 0 .../LUFA/Drivers/USB/Core/UC3/Endpoint_UC3.h | 0 .../LUFA/Drivers/USB/Core/UC3/Host_UC3.c | 0 .../LUFA/Drivers/USB/Core/UC3/Host_UC3.h | 0 .../Drivers/USB/Core/UC3/PipeStream_UC3.c | 0 .../Drivers/USB/Core/UC3/PipeStream_UC3.h | 0 .../LUFA/Drivers/USB/Core/UC3/Pipe_UC3.c | 0 .../LUFA/Drivers/USB/Core/UC3/Pipe_UC3.h | 0 .../Template/Template_Endpoint_Control_R.c | 0 .../Template/Template_Endpoint_Control_W.c | 0 .../Core/UC3/Template/Template_Endpoint_RW.c | 0 .../USB/Core/UC3/Template/Template_Pipe_RW.c | 0 .../Drivers/USB/Core/UC3/USBController_UC3.c | 0 .../Drivers/USB/Core/UC3/USBController_UC3.h | 0 .../Drivers/USB/Core/UC3/USBInterrupt_UC3.c | 0 .../Drivers/USB/Core/UC3/USBInterrupt_UC3.h | 0 .../LUFA/Drivers/USB/Core/USBController.h | 0 .../LUFA/Drivers/USB/Core/USBInterrupt.h | 0 .../LUFA/Drivers/USB/Core/USBMode.h | 0 .../LUFA/Drivers/USB/Core/USBTask.c | 0 .../LUFA/Drivers/USB/Core/USBTask.h | 0 .../Drivers/USB/Core/XMEGA/Device_XMEGA.c | 0 .../Drivers/USB/Core/XMEGA/Device_XMEGA.h | 0 .../USB/Core/XMEGA/EndpointStream_XMEGA.c | 0 .../USB/Core/XMEGA/EndpointStream_XMEGA.h | 0 .../Drivers/USB/Core/XMEGA/Endpoint_XMEGA.c | 0 .../Drivers/USB/Core/XMEGA/Endpoint_XMEGA.h | 0 .../LUFA/Drivers/USB/Core/XMEGA/Host_XMEGA.c | 0 .../Drivers/USB/Core/XMEGA/PipeStream_XMEGA.c | 0 .../LUFA/Drivers/USB/Core/XMEGA/Pipe_XMEGA.c | 0 .../Template/Template_Endpoint_Control_R.c | 0 .../Template/Template_Endpoint_Control_W.c | 0 .../XMEGA/Template/Template_Endpoint_RW.c | 0 .../USB/Core/XMEGA/USBController_XMEGA.c | 0 .../USB/Core/XMEGA/USBController_XMEGA.h | 0 .../USB/Core/XMEGA/USBInterrupt_XMEGA.c | 0 .../USB/Core/XMEGA/USBInterrupt_XMEGA.h | 0 .../lufa-LUFA-140928}/LUFA/Drivers/USB/USB.h | 0 .../lufa-LUFA-140928}/LUFA/License.txt | 0 .../LUFA/Platform/Platform.h | 0 .../LUFA/Platform/UC3/ClockManagement.h | 0 .../LUFA/Platform/UC3/Exception.S | 0 .../LUFA/Platform/UC3/InterruptManagement.c | 0 .../LUFA/Platform/UC3/InterruptManagement.h | 0 .../LUFA/Platform/UC3/UC3ExperimentalInfo.txt | 0 .../LUFA/Platform/XMEGA/ClockManagement.h | 0 .../Platform/XMEGA/XMEGAExperimentalInfo.txt | 0 .../HV1/helpcontentsetup.msha | 0 .../HV1/lufa_docbook_transform.xslt | 0 .../HV1/lufa_helpcontentsetup_transform.xslt | 0 .../HV1/lufa_hv1_transform.xslt | 0 .../HV1/lufa_studio_help_styling.css | 0 .../LUFA/StudioIntegration/VSIX/LUFA.dll | Bin .../LUFA/StudioIntegration/VSIX/LUFA.pkgdef | Bin .../VSIX/[Content_Types].xml | 0 .../StudioIntegration/VSIX/asf-manifest.xml | 0 .../VSIX/extension.vsixmanifest | 0 .../StudioIntegration/VSIX/generate_caches.py | 0 .../VSIX/lufa_asfmanifest_transform.xslt | 0 .../VSIX/lufa_vsmanifest_transform.xslt | 0 .../XDK/lufa_extension_transform.xslt | 0 .../XDK/lufa_filelist_transform.xslt | 0 .../XDK/lufa_indent_transform.xslt | 0 .../XDK/lufa_module_transform.xslt | 0 .../LUFA/StudioIntegration/lufa.xml | 0 .../LUFA/StudioIntegration/lufa_common.xml | 0 .../StudioIntegration/lufa_drivers_board.xml | 0 .../lufa_drivers_board_names.xml | 0 .../StudioIntegration/lufa_drivers_misc.xml | 0 .../lufa_drivers_peripheral.xml | 0 .../StudioIntegration/lufa_drivers_usb.xml | 0 .../lufa_drivers_usb_class.xml | 0 .../lufa_drivers_usb_class_android.xml | 0 .../lufa_drivers_usb_class_audio.xml | 0 .../lufa_drivers_usb_class_cdc.xml | 0 .../lufa_drivers_usb_class_hid.xml | 0 .../lufa_drivers_usb_class_midi.xml | 0 .../lufa_drivers_usb_class_ms.xml | 0 .../lufa_drivers_usb_class_printer.xml | 0 .../lufa_drivers_usb_class_rndis.xml | 0 .../lufa_drivers_usb_class_si.xml | 0 .../lufa_drivers_usb_core.xml | 0 .../lufa_drivers_usb_core_avr8.xml | 0 .../lufa_drivers_usb_core_uc3.xml | 0 .../lufa_drivers_usb_core_xmega.xml | 0 .../LUFA/StudioIntegration/lufa_platform.xml | 0 .../StudioIntegration/lufa_platform_uc3.xml | 0 .../StudioIntegration/lufa_platform_xmega.xml | 0 .../LUFA/StudioIntegration/lufa_toolchain.xml | 0 .../LUFA/StudioIntegration/makefile | 0 .../lufa-LUFA-140928}/LUFA/Version.h | 0 .../lufa-LUFA-140928}/LUFA/doxyfile | 0 .../lufa-LUFA-140928}/LUFA/makefile | 0 .../lufa-LUFA-140928}/README.txt | 0 .../lufa-LUFA-140928}/makefile | 0 466 files changed, 12 insertions(+), 93 deletions(-) delete mode 100644 avr/bootloaders/HoodLoader2.inf rename {Board => avr/bootloaders/HoodLoader2/Board}/Board.h (100%) rename {Board => avr/bootloaders/HoodLoader2/Board}/Buttons.h (100%) rename {Board => avr/bootloaders/HoodLoader2/Board}/LEDs.h (100%) rename BootloaderAPI.c => avr/bootloaders/HoodLoader2/BootloaderAPI.c (100%) rename BootloaderAPI.h => avr/bootloaders/HoodLoader2/BootloaderAPI.h (100%) rename BootloaderAPITable.S => avr/bootloaders/HoodLoader2/BootloaderAPITable.S (100%) rename {Config => avr/bootloaders/HoodLoader2/Config}/AppConfig.h (100%) rename {Config => avr/bootloaders/HoodLoader2/Config}/LUFAConfig.h (100%) rename Descriptors.c => avr/bootloaders/HoodLoader2/Descriptors.c (100%) rename Descriptors.h => avr/bootloaders/HoodLoader2/Descriptors.h (100%) rename HoodLoader2.c => avr/bootloaders/HoodLoader2/HoodLoader2.c (100%) rename HoodLoader2.h => avr/bootloaders/HoodLoader2/HoodLoader2.h (100%) rename HoodLoader2.inf => avr/bootloaders/HoodLoader2/HoodLoader2.inf (100%) rename avr/bootloaders/{ => HoodLoader2}/HoodLoader2_0_1_Mega_8u2.hex (100%) rename avr/bootloaders/{ => HoodLoader2}/HoodLoader2_0_1_Mega_at90usb162.hex (100%) rename avr/bootloaders/{ => HoodLoader2}/HoodLoader2_0_1_Uno_8u2.hex (100%) rename avr/bootloaders/{ => HoodLoader2}/HoodLoader2_0_1_Uno_at90usb162.hex (100%) rename avr/bootloaders/{ => HoodLoader2}/HoodLoader2_0_3_Mega_16u2.hex (100%) rename avr/bootloaders/{ => HoodLoader2}/HoodLoader2_0_3_Mega_32u2.hex (100%) rename avr/bootloaders/{ => HoodLoader2}/HoodLoader2_0_3_Uno_16u2.hex (100%) rename avr/bootloaders/{ => HoodLoader2}/HoodLoader2_0_3_Uno_32u2.hex (100%) rename avr/bootloaders/{ => HoodLoader2}/LegacyVersions/BootloaderCDC_atusb162.hex (100%) rename avr/bootloaders/{ => HoodLoader2}/LegacyVersions/HoodLoader2_0_1_Mega_16u2.hex (100%) rename avr/bootloaders/{ => HoodLoader2}/LegacyVersions/HoodLoader2_0_1_Mega_32u2.hex (100%) rename avr/bootloaders/{ => HoodLoader2}/LegacyVersions/HoodLoader2_0_1_Uno_16u2.hex (100%) rename avr/bootloaders/{ => HoodLoader2}/LegacyVersions/HoodLoader2_0_1_Uno_32u2.hex (100%) rename avr/bootloaders/{ => HoodLoader2}/LegacyVersions/HoodLoader2_0_2_Mega_16u2.hex (100%) rename avr/bootloaders/{ => HoodLoader2}/LegacyVersions/HoodLoader2_0_2_Mega_32u2.hex (100%) rename avr/bootloaders/{ => HoodLoader2}/LegacyVersions/HoodLoader2_0_2_Uno_16u2.hex (100%) rename avr/bootloaders/{ => HoodLoader2}/LegacyVersions/HoodLoader2_0_2_Uno_32u2.hex (100%) rename avr/bootloaders/{ => HoodLoader2}/LegacyVersions/Hoodloader2_Alpha1.hex (100%) rename avr/bootloaders/{ => HoodLoader2}/LegacyVersions/Hoodloader2_Alpha2.hex (100%) rename avr/bootloaders/{ => HoodLoader2}/LegacyVersions/Hoodloader2_Alpha5.hex (100%) rename avr/bootloaders/{ => HoodLoader2}/LegacyVersions/Hoodloader2_Mega_Beta.hex (100%) rename avr/bootloaders/{ => HoodLoader2}/LegacyVersions/Hoodloader2_Uno_Beta.hex (100%) rename avr/bootloaders/{ => HoodLoader2}/LegacyVersions/LUFA CDC Bootloader.inf (100%) rename avr/bootloaders/{ => HoodLoader2}/LegacyVersions/Readme.md (100%) rename makefile => avr/bootloaders/HoodLoader2/makefile (98%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/.gitignore (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Build/HID_EEPROM_Loader/HID_EEPROM_Loader.c (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Build/HID_EEPROM_Loader/makefile (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Build/lufa_atprogram.mk (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Build/lufa_avrdude.mk (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Build/lufa_build.mk (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Build/lufa_core.mk (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Build/lufa_cppcheck.mk (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Build/lufa_dfu.mk (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Build/lufa_doxygen.mk (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Build/lufa_hid.mk (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Build/lufa_sources.mk (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/CodeTemplates/DeviceTemplate/Descriptors.c (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/CodeTemplates/DeviceTemplate/Descriptors.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/CodeTemplates/DeviceTemplate/DeviceApplication.c (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/CodeTemplates/DeviceTemplate/DeviceApplication.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/CodeTemplates/DeviceTemplate/asf.xml (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/CodeTemplates/DriverStubs/Board.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/CodeTemplates/DriverStubs/Buttons.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/CodeTemplates/DriverStubs/Dataflash.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/CodeTemplates/DriverStubs/Joystick.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/CodeTemplates/DriverStubs/LEDs.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/CodeTemplates/HostTemplate/HostApplication.c (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/CodeTemplates/HostTemplate/HostApplication.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/CodeTemplates/HostTemplate/asf.xml (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/CodeTemplates/LUFAConfig.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/CodeTemplates/WindowsINF/LUFA CDC-ACM.inf (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/CodeTemplates/WindowsINF/LUFA RNDIS.inf (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/CodeTemplates/makefile_template (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Common/ArchitectureSpecific.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Common/Architectures.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Common/Attributes.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Common/BoardTypes.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Common/Common.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Common/CompilerSpecific.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Common/Endianness.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/DoxygenPages/BuildSystem.txt (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/DoxygenPages/BuildingLinkableLibraries.txt (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/DoxygenPages/ChangeLog.txt (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/DoxygenPages/CompileTimeTokens.txt (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/DoxygenPages/CompilingApps.txt (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/DoxygenPages/ConfiguringApps.txt (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/DoxygenPages/DevelopingWithLUFA.txt (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/DoxygenPages/DeviceSupport.txt (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/DoxygenPages/DirectorySummaries.txt (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/DoxygenPages/Donating.txt (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/DoxygenPages/ExportingLibrary.txt (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/DoxygenPages/FutureChanges.txt (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/DoxygenPages/GettingStarted.txt (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/DoxygenPages/Groups.txt (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/DoxygenPages/Images/AS5_AS6_Import/AS5_AS6_Import_Step1.png (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/DoxygenPages/Images/AS5_AS6_Import/AS5_AS6_Import_Step2.png (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/DoxygenPages/Images/AS5_AS6_Import/AS5_AS6_Import_Step3.png (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/DoxygenPages/Images/AS5_AS6_Import/AS5_AS6_Import_Step4.png (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/DoxygenPages/Images/AS5_AS6_Import/AS5_AS6_Import_Step5_1.png (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/DoxygenPages/Images/AS5_AS6_Import/AS5_AS6_Import_Step5_2.png (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/DoxygenPages/Images/AS5_AS6_Import/AS5_AS6_Import_Step5_3.png (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/DoxygenPages/Images/Author.jpg (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/DoxygenPages/Images/LUFA.png (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/DoxygenPages/Images/LUFA_thumb.png (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/DoxygenPages/KnownIssues.txt (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/DoxygenPages/LUFAPoweredProjects.txt (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/DoxygenPages/LibraryResources.txt (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/DoxygenPages/LicenseInfo.txt (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/DoxygenPages/MainPage.txt (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/DoxygenPages/MigrationInformation.txt (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/DoxygenPages/OSDrivers.txt (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/DoxygenPages/ProgrammingApps.txt (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/DoxygenPages/SoftwareBootloaderJump.txt (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/DoxygenPages/Style/Footer.htm (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/DoxygenPages/Style/Style.css (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/DoxygenPages/VIDAndPIDValues.txt (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/DoxygenPages/WritingBoardDrivers.txt (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/AVR8/ADAFRUITU4/Board.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/AVR8/ADAFRUITU4/LEDs.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/AVR8/ATAVRUSBRF01/Board.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/AVR8/ATAVRUSBRF01/Buttons.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/AVR8/ATAVRUSBRF01/LEDs.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/AVR8/BENITO/Board.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/AVR8/BENITO/Buttons.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/AVR8/BENITO/LEDs.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/AVR8/BIGMULTIO/Board.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/AVR8/BIGMULTIO/LEDs.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/AVR8/BLACKCAT/Board.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/AVR8/BLACKCAT/LEDs.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/AVR8/BUI/Board.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/AVR8/BUI/LEDs.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/AVR8/BUMBLEB/Board.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/AVR8/BUMBLEB/Buttons.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/AVR8/BUMBLEB/Joystick.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/AVR8/BUMBLEB/LEDs.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/AVR8/CULV3/Board.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/AVR8/CULV3/Buttons.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/AVR8/CULV3/LEDs.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/AVR8/DUCE/Board.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/AVR8/DUCE/LEDs.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/AVR8/EVK527/Board.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/AVR8/EVK527/Buttons.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/AVR8/EVK527/Dataflash.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/AVR8/EVK527/Joystick.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/AVR8/EVK527/LEDs.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/AVR8/JMDBU2/Board.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/AVR8/JMDBU2/Buttons.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/AVR8/JMDBU2/LEDs.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/AVR8/LEONARDO/Board.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/AVR8/LEONARDO/LEDs.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/AVR8/MAXIMUS/Board.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/AVR8/MAXIMUS/LEDs.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/AVR8/MICRO/Board.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/AVR8/MICRO/LEDs.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/AVR8/MICROPENDOUS/Board.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/AVR8/MICROPENDOUS/Buttons.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/AVR8/MICROPENDOUS/LEDs.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/AVR8/MICROSIN162/Board.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/AVR8/MICROSIN162/Buttons.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/AVR8/MICROSIN162/LEDs.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/AVR8/MINIMUS/Board.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/AVR8/MINIMUS/Buttons.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/AVR8/MINIMUS/LEDs.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/AVR8/MULTIO/Board.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/AVR8/MULTIO/LEDs.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/AVR8/OLIMEX162/Board.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/AVR8/OLIMEX162/Buttons.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/AVR8/OLIMEX162/LEDs.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/AVR8/OLIMEX32U4/Board.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/AVR8/OLIMEX32U4/Buttons.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/AVR8/OLIMEX32U4/LEDs.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/AVR8/OLIMEXISPMK2/Board.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/AVR8/OLIMEXISPMK2/Buttons.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/AVR8/OLIMEXISPMK2/LEDs.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/AVR8/OLIMEXT32U4/Board.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/AVR8/OLIMEXT32U4/Buttons.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/AVR8/OLIMEXT32U4/LEDs.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/AVR8/RZUSBSTICK/Board.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/AVR8/RZUSBSTICK/LEDs.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/AVR8/SPARKFUN8U2/Board.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/AVR8/SPARKFUN8U2/LEDs.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/AVR8/STANGE_ISP/Board.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/AVR8/STANGE_ISP/Buttons.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/AVR8/STANGE_ISP/LEDs.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/AVR8/STK525/Board.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/AVR8/STK525/Buttons.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/AVR8/STK525/Dataflash.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/AVR8/STK525/Joystick.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/AVR8/STK525/LEDs.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/AVR8/STK526/Board.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/AVR8/STK526/Buttons.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/AVR8/STK526/Dataflash.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/AVR8/STK526/Joystick.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/AVR8/STK526/LEDs.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/AVR8/TEENSY/Board.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/AVR8/TEENSY/LEDs.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/AVR8/TUL/Board.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/AVR8/TUL/Buttons.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/AVR8/TUL/LEDs.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/AVR8/U2S/Board.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/AVR8/U2S/Buttons.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/AVR8/U2S/LEDs.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/AVR8/UDIP/Board.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/AVR8/UDIP/Buttons.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/AVR8/UDIP/LEDs.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/AVR8/UNO/Board.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/AVR8/UNO/LEDs.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/AVR8/USB2AX/Board.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/AVR8/USB2AX/Buttons.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/AVR8/USB2AX/LEDs.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/AVR8/USBFOO/Board.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/AVR8/USBFOO/Buttons.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/AVR8/USBFOO/LEDs.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/AVR8/USBKEY/Board.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/AVR8/USBKEY/Buttons.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/AVR8/USBKEY/Dataflash.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/AVR8/USBKEY/Joystick.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/AVR8/USBKEY/LEDs.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/AVR8/USBTINYMKII/Board.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/AVR8/USBTINYMKII/Buttons.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/AVR8/USBTINYMKII/LEDs.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/AVR8/XPLAIN/Board.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/AVR8/XPLAIN/Dataflash.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/AVR8/XPLAIN/LEDs.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/AVR8/YUN/Board.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/AVR8/YUN/LEDs.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/Board.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/Buttons.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/Dataflash.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/Joystick.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/LEDs.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/Temperature.c (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/Temperature.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/UC3/EVK1100/Board.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/UC3/EVK1100/Buttons.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/UC3/EVK1100/Joystick.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/UC3/EVK1100/LEDs.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/UC3/EVK1101/Board.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/UC3/EVK1101/Buttons.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/UC3/EVK1101/Joystick.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/UC3/EVK1101/LEDs.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/UC3/EVK1104/Board.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/UC3/EVK1104/Buttons.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/UC3/EVK1104/LEDs.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/UC3/UC3A3_XPLAINED/Board.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/UC3/UC3A3_XPLAINED/Buttons.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/UC3/UC3A3_XPLAINED/LEDs.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/XMEGA/A3BU_XPLAINED/Board.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/XMEGA/A3BU_XPLAINED/Buttons.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/XMEGA/A3BU_XPLAINED/Dataflash.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/XMEGA/A3BU_XPLAINED/LEDs.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/XMEGA/B1_XPLAINED/Board.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/XMEGA/B1_XPLAINED/Buttons.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/XMEGA/B1_XPLAINED/Dataflash.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/XMEGA/B1_XPLAINED/LEDs.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/XMEGA/C3_XPLAINED/Board.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/XMEGA/C3_XPLAINED/Buttons.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Board/XMEGA/C3_XPLAINED/LEDs.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Misc/AT45DB321C.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Misc/AT45DB642D.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Misc/RingBuffer.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Misc/TerminalCodes.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Peripheral/ADC.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Peripheral/AVR8/ADC_AVR8.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Peripheral/AVR8/SPI_AVR8.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Peripheral/AVR8/SerialSPI_AVR8.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Peripheral/AVR8/Serial_AVR8.c (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Peripheral/AVR8/Serial_AVR8.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Peripheral/AVR8/TWI_AVR8.c (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Peripheral/AVR8/TWI_AVR8.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Peripheral/SPI.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Peripheral/Serial.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Peripheral/SerialSPI.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Peripheral/TWI.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Peripheral/XMEGA/SPI_XMEGA.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Peripheral/XMEGA/SerialSPI_XMEGA.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Peripheral/XMEGA/Serial_XMEGA.c (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Peripheral/XMEGA/Serial_XMEGA.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Peripheral/XMEGA/TWI_XMEGA.c (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/Peripheral/XMEGA/TWI_XMEGA.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Class/AndroidAccessoryClass.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Class/AudioClass.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Class/CDCClass.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Class/Common/AndroidAccessoryClassCommon.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Class/Common/AudioClassCommon.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Class/Common/CDCClassCommon.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Class/Common/HIDClassCommon.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Class/Common/HIDParser.c (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Class/Common/HIDParser.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Class/Common/HIDReportData.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Class/Common/MIDIClassCommon.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Class/Common/MassStorageClassCommon.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Class/Common/PrinterClassCommon.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Class/Common/RNDISClassCommon.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Class/Common/StillImageClassCommon.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Class/Device/AudioClassDevice.c (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Class/Device/AudioClassDevice.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Class/Device/CDCClassDevice.c (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Class/Device/CDCClassDevice.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Class/Device/HIDClassDevice.c (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Class/Device/HIDClassDevice.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Class/Device/MIDIClassDevice.c (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Class/Device/MIDIClassDevice.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Class/Device/MassStorageClassDevice.c (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Class/Device/MassStorageClassDevice.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Class/Device/PrinterClassDevice.c (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Class/Device/PrinterClassDevice.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Class/Device/RNDISClassDevice.c (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Class/Device/RNDISClassDevice.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Class/HIDClass.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Class/Host/AndroidAccessoryClassHost.c (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Class/Host/AndroidAccessoryClassHost.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Class/Host/AudioClassHost.c (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Class/Host/AudioClassHost.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Class/Host/CDCClassHost.c (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Class/Host/CDCClassHost.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Class/Host/HIDClassHost.c (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Class/Host/HIDClassHost.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Class/Host/MIDIClassHost.c (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Class/Host/MIDIClassHost.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Class/Host/MassStorageClassHost.c (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Class/Host/MassStorageClassHost.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Class/Host/PrinterClassHost.c (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Class/Host/PrinterClassHost.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Class/Host/RNDISClassHost.c (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Class/Host/RNDISClassHost.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Class/Host/StillImageClassHost.c (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Class/Host/StillImageClassHost.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Class/MIDIClass.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Class/MassStorageClass.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Class/PrinterClass.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Class/RNDISClass.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Class/StillImageClass.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Core/AVR8/Device_AVR8.c (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Core/AVR8/Device_AVR8.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.c (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.c (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Core/AVR8/Host_AVR8.c (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Core/AVR8/Host_AVR8.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Core/AVR8/OTG_AVR8.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Core/AVR8/PipeStream_AVR8.c (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Core/AVR8/PipeStream_AVR8.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Core/AVR8/Pipe_AVR8.c (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Core/AVR8/Pipe_AVR8.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Core/AVR8/Template/Template_Endpoint_Control_R.c (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Core/AVR8/Template/Template_Endpoint_Control_W.c (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Core/AVR8/Template/Template_Endpoint_RW.c (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Core/AVR8/Template/Template_Pipe_RW.c (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.c (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.c (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Core/ConfigDescriptors.c (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Core/ConfigDescriptors.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Core/Device.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Core/DeviceStandardReq.c (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Core/DeviceStandardReq.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Core/Endpoint.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Core/EndpointStream.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Core/Events.c (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Core/Events.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Core/Host.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Core/HostStandardReq.c (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Core/HostStandardReq.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Core/OTG.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Core/Pipe.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Core/PipeStream.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Core/StdDescriptors.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Core/StdRequestType.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Core/UC3/Device_UC3.c (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Core/UC3/Device_UC3.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Core/UC3/EndpointStream_UC3.c (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Core/UC3/EndpointStream_UC3.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Core/UC3/Endpoint_UC3.c (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Core/UC3/Endpoint_UC3.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Core/UC3/Host_UC3.c (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Core/UC3/Host_UC3.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Core/UC3/PipeStream_UC3.c (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Core/UC3/PipeStream_UC3.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Core/UC3/Pipe_UC3.c (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Core/UC3/Pipe_UC3.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Core/UC3/Template/Template_Endpoint_Control_R.c (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Core/UC3/Template/Template_Endpoint_Control_W.c (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Core/UC3/Template/Template_Endpoint_RW.c (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Core/UC3/Template/Template_Pipe_RW.c (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Core/UC3/USBController_UC3.c (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Core/UC3/USBController_UC3.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Core/UC3/USBInterrupt_UC3.c (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Core/UC3/USBInterrupt_UC3.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Core/USBController.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Core/USBInterrupt.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Core/USBMode.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Core/USBTask.c (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Core/USBTask.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Core/XMEGA/Device_XMEGA.c (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Core/XMEGA/Device_XMEGA.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Core/XMEGA/EndpointStream_XMEGA.c (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Core/XMEGA/EndpointStream_XMEGA.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Core/XMEGA/Endpoint_XMEGA.c (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Core/XMEGA/Endpoint_XMEGA.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Core/XMEGA/Host_XMEGA.c (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Core/XMEGA/PipeStream_XMEGA.c (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Core/XMEGA/Pipe_XMEGA.c (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Core/XMEGA/Template/Template_Endpoint_Control_R.c (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Core/XMEGA/Template/Template_Endpoint_Control_W.c (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Core/XMEGA/Template/Template_Endpoint_RW.c (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Core/XMEGA/USBController_XMEGA.c (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Core/XMEGA/USBController_XMEGA.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Core/XMEGA/USBInterrupt_XMEGA.c (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/Core/XMEGA/USBInterrupt_XMEGA.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Drivers/USB/USB.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/License.txt (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Platform/Platform.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Platform/UC3/ClockManagement.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Platform/UC3/Exception.S (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Platform/UC3/InterruptManagement.c (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Platform/UC3/InterruptManagement.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Platform/UC3/UC3ExperimentalInfo.txt (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Platform/XMEGA/ClockManagement.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Platform/XMEGA/XMEGAExperimentalInfo.txt (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/StudioIntegration/HV1/helpcontentsetup.msha (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/StudioIntegration/HV1/lufa_docbook_transform.xslt (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/StudioIntegration/HV1/lufa_helpcontentsetup_transform.xslt (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/StudioIntegration/HV1/lufa_hv1_transform.xslt (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/StudioIntegration/HV1/lufa_studio_help_styling.css (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/StudioIntegration/VSIX/LUFA.dll (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/StudioIntegration/VSIX/LUFA.pkgdef (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/StudioIntegration/VSIX/[Content_Types].xml (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/StudioIntegration/VSIX/asf-manifest.xml (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/StudioIntegration/VSIX/extension.vsixmanifest (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/StudioIntegration/VSIX/generate_caches.py (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/StudioIntegration/VSIX/lufa_asfmanifest_transform.xslt (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/StudioIntegration/VSIX/lufa_vsmanifest_transform.xslt (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/StudioIntegration/XDK/lufa_extension_transform.xslt (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/StudioIntegration/XDK/lufa_filelist_transform.xslt (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/StudioIntegration/XDK/lufa_indent_transform.xslt (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/StudioIntegration/XDK/lufa_module_transform.xslt (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/StudioIntegration/lufa.xml (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/StudioIntegration/lufa_common.xml (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/StudioIntegration/lufa_drivers_board.xml (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/StudioIntegration/lufa_drivers_board_names.xml (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/StudioIntegration/lufa_drivers_misc.xml (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/StudioIntegration/lufa_drivers_peripheral.xml (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/StudioIntegration/lufa_drivers_usb.xml (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/StudioIntegration/lufa_drivers_usb_class.xml (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/StudioIntegration/lufa_drivers_usb_class_android.xml (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/StudioIntegration/lufa_drivers_usb_class_audio.xml (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/StudioIntegration/lufa_drivers_usb_class_cdc.xml (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/StudioIntegration/lufa_drivers_usb_class_hid.xml (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/StudioIntegration/lufa_drivers_usb_class_midi.xml (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/StudioIntegration/lufa_drivers_usb_class_ms.xml (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/StudioIntegration/lufa_drivers_usb_class_printer.xml (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/StudioIntegration/lufa_drivers_usb_class_rndis.xml (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/StudioIntegration/lufa_drivers_usb_class_si.xml (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/StudioIntegration/lufa_drivers_usb_core.xml (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/StudioIntegration/lufa_drivers_usb_core_avr8.xml (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/StudioIntegration/lufa_drivers_usb_core_uc3.xml (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/StudioIntegration/lufa_drivers_usb_core_xmega.xml (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/StudioIntegration/lufa_platform.xml (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/StudioIntegration/lufa_platform_uc3.xml (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/StudioIntegration/lufa_platform_xmega.xml (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/StudioIntegration/lufa_toolchain.xml (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/StudioIntegration/makefile (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/Version.h (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/doxyfile (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/LUFA/makefile (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/README.txt (100%) rename {lufa-LUFA-140928 => tools/lufa-LUFA-140928}/makefile (100%) diff --git a/avr/boards.txt b/avr/boards.txt index 6387ba0..1c6f90b 100644 --- a/avr/boards.txt +++ b/avr/boards.txt @@ -60,11 +60,11 @@ HoodLoader2atmega16u2.menu.usbcore.NO_USB.build.variant=HoodLoader2_NoUSB #Board selection (only important for burning bootloaders) HoodLoader2atmega16u2.menu.board.uno=HoodLoader2 Uno -HoodLoader2atmega16u2.menu.board.uno.bootloader.file=HoodLoader2_0_3_Uno_16u2.hex +HoodLoader2atmega16u2.menu.board.uno.bootloader.file=HoodLoader2/HoodLoader2_0_3_Uno_16u2.hex HoodLoader2atmega16u2.menu.board.mega2560=HoodLoader2 Mega -HoodLoader2atmega16u2.menu.board.mega2560.bootloader.file=HoodLoader2_0_3_Mega_16u2.hex +HoodLoader2atmega16u2.menu.board.mega2560.bootloader.file=HoodLoader2/HoodLoader2_0_3_Mega_16u2.hex HoodLoader2atmega16u2.menu.board.dev=HoodLoader2 Dev -HoodLoader2atmega16u2.menu.board.dev.bootloader.file=../../HoodLoader2.hex +HoodLoader2atmega16u2.menu.board.dev.bootloader.file=HoodLoader2/HoodLoader2.hex ############################################################## @@ -124,9 +124,9 @@ HoodLoader2at90usb162.menu.usbcore.NO_USB.build.variant=HoodLoader2_NoUSB #Board selection (only important for burning bootloaders) HoodLoader2at90usb162.menu.board.uno=HoodLoader2 Uno -HoodLoader2at90usb162.menu.board.uno.bootloader.file=HoodLoader2_0_1_Uno_at90usb162.hex +HoodLoader2at90usb162.menu.board.uno.bootloader.file=HoodLoader2/HoodLoader2_0_1_Uno_at90usb162.hex HoodLoader2at90usb162.menu.board.mega2560=HoodLoader2 Mega -HoodLoader2at90usb162.menu.board.mega2560.bootloader.file=HoodLoader2_0_1_Mega_at90usb162.hex +HoodLoader2at90usb162.menu.board.mega2560.bootloader.file=HoodLoader2/HoodLoader2_0_1_Mega_at90usb162.hex ############################################################## @@ -186,9 +186,9 @@ HoodLoader2atmega32u2.menu.usbcore.NO_USB.build.variant=HoodLoader2_NoUSB #Board selection (only important for burning bootloaders) HoodLoader2atmega32u2.menu.board.uno=HoodLoader2 Uno -HoodLoader2atmega32u2.menu.board.uno.bootloader.file=HoodLoader2_0_3_Uno_32u2.hex +HoodLoader2atmega32u2.menu.board.uno.bootloader.file=HoodLoader2/HoodLoader2_0_3_Uno_32u2.hex HoodLoader2atmega32u2.menu.board.mega2560=HoodLoader2 Mega -HoodLoader2atmega32u2.menu.board.mega2560.bootloader.file=HoodLoader2_0_3_Mega_32u2.hex +HoodLoader2atmega32u2.menu.board.mega2560.bootloader.file=HoodLoader2/HoodLoader2_0_3_Mega_32u2.hex ############################################################## @@ -248,9 +248,9 @@ HoodLoader2atmega8u2.menu.usbcore.NO_USB.build.variant=HoodLoader2_NoUSB #Board selection (only important for burning bootloaders) HoodLoader2atmega8u2.menu.board.uno=HoodLoader2 Uno -HoodLoader2atmega8u2.menu.board.uno.bootloader.file=HoodLoader2_0_1_Uno_8u2.hex +HoodLoader2atmega8u2.menu.board.uno.bootloader.file=HoodLoader2/HoodLoader2_0_1_Uno_8u2.hex HoodLoader2atmega8u2.menu.board.mega2560=HoodLoader2 Mega -HoodLoader2atmega8u2.menu.board.mega2560.bootloader.file=HoodLoader2_0_1_Mega_8u2.hex +HoodLoader2atmega8u2.menu.board.mega2560.bootloader.file=HoodLoader2/HoodLoader2_0_1_Mega_8u2.hex ############################################################## @@ -296,7 +296,7 @@ HoodLoader2atmega16u2DFU.build.variant=HoodLoader2_DFU #Board selection (only important for burning bootloaders) HoodLoader2atmega16u2DFU.menu.board.uno=HoodLoader2 Uno -HoodLoader2atmega16u2DFU.menu.board.uno.bootloader.file=Arduino-COMBINED-dfu-usbserial-atmega16u2-Uno-Rev3.hex +HoodLoader2atmega16u2DFU.menu.board.uno.bootloader.file=HoodLoader2/Arduino-COMBINED-dfu-usbserial-atmega16u2-Uno-Rev3.hex HoodLoader2atmega16u2DFU.menu.board.mega2560=HoodLoader2 Mega -HoodLoader2atmega16u2DFU.menu.board.mega2560.bootloader.file=Arduino-COMBINED-dfu-usbserial-atmega16u2-Mega2560-Rev3.hex +HoodLoader2atmega16u2DFU.menu.board.mega2560.bootloader.file=HoodLoader2/Arduino-COMBINED-dfu-usbserial-atmega16u2-Mega2560-Rev3.hex diff --git a/avr/bootloaders/HoodLoader2.inf b/avr/bootloaders/HoodLoader2.inf deleted file mode 100644 index 16eabc6..0000000 --- a/avr/bootloaders/HoodLoader2.inf +++ /dev/null @@ -1,81 +0,0 @@ -;************************************************************ -; Windows USB CDC ACM Setup File -; Copyright (c) 2000 Microsoft Corporation -;************************************************************ - -[DefaultInstall] -CopyINF="HoodLoader2.inf" - -[Version] -Signature="$Windows NT$" -Class=Ports -ClassGuid={4D36E978-E325-11CE-BFC1-08002BE10318} -Provider=%MFGNAME% -DriverVer=7/1/2012,10.0.0.0 - -[Manufacturer] -%MFGNAME%=DeviceList, NTx86, NTamd64, NTia64 - -[SourceDisksNames] - -[SourceDisksFiles] - -[DestinationDirs] -DefaultDestDir=12 - -[DriverInstall] -Include=mdmcpq.inf -CopyFiles=FakeModemCopyFileSection -AddReg=DriverInstall.AddReg - -[DriverInstall.Services] -Include=mdmcpq.inf -AddService=usbser, 0x00000002, LowerFilter_Service_Inst - -[DriverInstall.AddReg] -HKR,,EnumPropPages32,,"msports.dll,SerialPortPropPageProvider" - -;------------------------------------------------------------------------------ -; Vendor and Product ID Definitions -;------------------------------------------------------------------------------ -; When developing your USB device, the VID and PID used in the PC side -; application program and the firmware on the microcontroller must match. -; Modify the below line to use your VID and PID. Use the format as shown below. -; Note: One INF file can be used for multiple devices with different VID and PIDs. -; For each supported device, append ",USB\VID_xxxx&PID_yyyy" to the end of the line. -;------------------------------------------------------------------------------ -[DeviceList] -%hoodloader2_16u2.name%=DriverInstall, USB\VID_2341&PID_484C&MI_00 -%hoodloader2_32u2.name%=DriverInstall, USB\VID_2341&PID_484D&MI_00 -%hoodloader2_8u2.name%=DriverInstall, USB\VID_2341&PID_484E&MI_00 -%hoodloader2_at90usb1622.name%=DriverInstall, USB\VID_2341&PID_484F&MI_00 - -[DeviceList.NTx86] -%hoodloader2_16u2.name%=DriverInstall, USB\VID_2341&PID_484C&MI_00 -%hoodloader2_32u2.name%=DriverInstall, USB\VID_2341&PID_484D&MI_00 -%hoodloader2_8u2.name%=DriverInstall, USB\VID_2341&PID_484E&MI_00 -%hoodloader2_at90usb1622.name%=DriverInstall, USB\VID_2341&PID_484F&MI_00 - -[DeviceList.NTamd64] -%hoodloader2_16u2.name%=DriverInstall, USB\VID_2341&PID_484C&MI_00 -%hoodloader2_32u2.name%=DriverInstall, USB\VID_2341&PID_484D&MI_00 -%hoodloader2_8u2.name%=DriverInstall, USB\VID_2341&PID_484E&MI_00 -%hoodloader2_at90usb1622.name%=DriverInstall, USB\VID_2341&PID_484F&MI_00 - -[DeviceList.NTia64] -%hoodloader2_16u2.name%=DriverInstall, USB\VID_2341&PID_484C&MI_00 -%hoodloader2_32u2.name%=DriverInstall, USB\VID_2341&PID_484D&MI_00 -%hoodloader2_8u2.name%=DriverInstall, USB\VID_2341&PID_484E&MI_00 -%hoodloader2_at90usb1622.name%=DriverInstall, USB\VID_2341&PID_484F&MI_00 - -;------------------------------------------------------------------------------ -; String Definitions -;------------------------------------------------------------------------------ -;Modify these strings to customize your device -;------------------------------------------------------------------------------ -[Strings] -MFGNAME="NicoHood" -hoodloader2_16u2.name="Arduino HoodLoader2 16u2" -hoodloader2_32u2.name="Arduino HoodLoader2 32u2" -hoodloader2_8u2.name="Arduino HoodLoader2 8u2" -hoodloader2_at90usb162.name="Arduino HoodLoader2 at90usb162" diff --git a/Board/Board.h b/avr/bootloaders/HoodLoader2/Board/Board.h similarity index 100% rename from Board/Board.h rename to avr/bootloaders/HoodLoader2/Board/Board.h diff --git a/Board/Buttons.h b/avr/bootloaders/HoodLoader2/Board/Buttons.h similarity index 100% rename from Board/Buttons.h rename to avr/bootloaders/HoodLoader2/Board/Buttons.h diff --git a/Board/LEDs.h b/avr/bootloaders/HoodLoader2/Board/LEDs.h similarity index 100% rename from Board/LEDs.h rename to avr/bootloaders/HoodLoader2/Board/LEDs.h diff --git a/BootloaderAPI.c b/avr/bootloaders/HoodLoader2/BootloaderAPI.c similarity index 100% rename from BootloaderAPI.c rename to avr/bootloaders/HoodLoader2/BootloaderAPI.c diff --git a/BootloaderAPI.h b/avr/bootloaders/HoodLoader2/BootloaderAPI.h similarity index 100% rename from BootloaderAPI.h rename to avr/bootloaders/HoodLoader2/BootloaderAPI.h diff --git a/BootloaderAPITable.S b/avr/bootloaders/HoodLoader2/BootloaderAPITable.S similarity index 100% rename from BootloaderAPITable.S rename to avr/bootloaders/HoodLoader2/BootloaderAPITable.S diff --git a/Config/AppConfig.h b/avr/bootloaders/HoodLoader2/Config/AppConfig.h similarity index 100% rename from Config/AppConfig.h rename to avr/bootloaders/HoodLoader2/Config/AppConfig.h diff --git a/Config/LUFAConfig.h b/avr/bootloaders/HoodLoader2/Config/LUFAConfig.h similarity index 100% rename from Config/LUFAConfig.h rename to avr/bootloaders/HoodLoader2/Config/LUFAConfig.h diff --git a/Descriptors.c b/avr/bootloaders/HoodLoader2/Descriptors.c similarity index 100% rename from Descriptors.c rename to avr/bootloaders/HoodLoader2/Descriptors.c diff --git a/Descriptors.h b/avr/bootloaders/HoodLoader2/Descriptors.h similarity index 100% rename from Descriptors.h rename to avr/bootloaders/HoodLoader2/Descriptors.h diff --git a/HoodLoader2.c b/avr/bootloaders/HoodLoader2/HoodLoader2.c similarity index 100% rename from HoodLoader2.c rename to avr/bootloaders/HoodLoader2/HoodLoader2.c diff --git a/HoodLoader2.h b/avr/bootloaders/HoodLoader2/HoodLoader2.h similarity index 100% rename from HoodLoader2.h rename to avr/bootloaders/HoodLoader2/HoodLoader2.h diff --git a/HoodLoader2.inf b/avr/bootloaders/HoodLoader2/HoodLoader2.inf similarity index 100% rename from HoodLoader2.inf rename to avr/bootloaders/HoodLoader2/HoodLoader2.inf diff --git a/avr/bootloaders/HoodLoader2_0_1_Mega_8u2.hex b/avr/bootloaders/HoodLoader2/HoodLoader2_0_1_Mega_8u2.hex similarity index 100% rename from avr/bootloaders/HoodLoader2_0_1_Mega_8u2.hex rename to avr/bootloaders/HoodLoader2/HoodLoader2_0_1_Mega_8u2.hex diff --git a/avr/bootloaders/HoodLoader2_0_1_Mega_at90usb162.hex b/avr/bootloaders/HoodLoader2/HoodLoader2_0_1_Mega_at90usb162.hex similarity index 100% rename from avr/bootloaders/HoodLoader2_0_1_Mega_at90usb162.hex rename to avr/bootloaders/HoodLoader2/HoodLoader2_0_1_Mega_at90usb162.hex diff --git a/avr/bootloaders/HoodLoader2_0_1_Uno_8u2.hex b/avr/bootloaders/HoodLoader2/HoodLoader2_0_1_Uno_8u2.hex similarity index 100% rename from avr/bootloaders/HoodLoader2_0_1_Uno_8u2.hex rename to avr/bootloaders/HoodLoader2/HoodLoader2_0_1_Uno_8u2.hex diff --git a/avr/bootloaders/HoodLoader2_0_1_Uno_at90usb162.hex b/avr/bootloaders/HoodLoader2/HoodLoader2_0_1_Uno_at90usb162.hex similarity index 100% rename from avr/bootloaders/HoodLoader2_0_1_Uno_at90usb162.hex rename to avr/bootloaders/HoodLoader2/HoodLoader2_0_1_Uno_at90usb162.hex diff --git a/avr/bootloaders/HoodLoader2_0_3_Mega_16u2.hex b/avr/bootloaders/HoodLoader2/HoodLoader2_0_3_Mega_16u2.hex similarity index 100% rename from avr/bootloaders/HoodLoader2_0_3_Mega_16u2.hex rename to avr/bootloaders/HoodLoader2/HoodLoader2_0_3_Mega_16u2.hex diff --git a/avr/bootloaders/HoodLoader2_0_3_Mega_32u2.hex b/avr/bootloaders/HoodLoader2/HoodLoader2_0_3_Mega_32u2.hex similarity index 100% rename from avr/bootloaders/HoodLoader2_0_3_Mega_32u2.hex rename to avr/bootloaders/HoodLoader2/HoodLoader2_0_3_Mega_32u2.hex diff --git a/avr/bootloaders/HoodLoader2_0_3_Uno_16u2.hex b/avr/bootloaders/HoodLoader2/HoodLoader2_0_3_Uno_16u2.hex similarity index 100% rename from avr/bootloaders/HoodLoader2_0_3_Uno_16u2.hex rename to avr/bootloaders/HoodLoader2/HoodLoader2_0_3_Uno_16u2.hex diff --git a/avr/bootloaders/HoodLoader2_0_3_Uno_32u2.hex b/avr/bootloaders/HoodLoader2/HoodLoader2_0_3_Uno_32u2.hex similarity index 100% rename from avr/bootloaders/HoodLoader2_0_3_Uno_32u2.hex rename to avr/bootloaders/HoodLoader2/HoodLoader2_0_3_Uno_32u2.hex diff --git a/avr/bootloaders/LegacyVersions/BootloaderCDC_atusb162.hex b/avr/bootloaders/HoodLoader2/LegacyVersions/BootloaderCDC_atusb162.hex similarity index 100% rename from avr/bootloaders/LegacyVersions/BootloaderCDC_atusb162.hex rename to avr/bootloaders/HoodLoader2/LegacyVersions/BootloaderCDC_atusb162.hex diff --git a/avr/bootloaders/LegacyVersions/HoodLoader2_0_1_Mega_16u2.hex b/avr/bootloaders/HoodLoader2/LegacyVersions/HoodLoader2_0_1_Mega_16u2.hex similarity index 100% rename from avr/bootloaders/LegacyVersions/HoodLoader2_0_1_Mega_16u2.hex rename to avr/bootloaders/HoodLoader2/LegacyVersions/HoodLoader2_0_1_Mega_16u2.hex diff --git a/avr/bootloaders/LegacyVersions/HoodLoader2_0_1_Mega_32u2.hex b/avr/bootloaders/HoodLoader2/LegacyVersions/HoodLoader2_0_1_Mega_32u2.hex similarity index 100% rename from avr/bootloaders/LegacyVersions/HoodLoader2_0_1_Mega_32u2.hex rename to avr/bootloaders/HoodLoader2/LegacyVersions/HoodLoader2_0_1_Mega_32u2.hex diff --git a/avr/bootloaders/LegacyVersions/HoodLoader2_0_1_Uno_16u2.hex b/avr/bootloaders/HoodLoader2/LegacyVersions/HoodLoader2_0_1_Uno_16u2.hex similarity index 100% rename from avr/bootloaders/LegacyVersions/HoodLoader2_0_1_Uno_16u2.hex rename to avr/bootloaders/HoodLoader2/LegacyVersions/HoodLoader2_0_1_Uno_16u2.hex diff --git a/avr/bootloaders/LegacyVersions/HoodLoader2_0_1_Uno_32u2.hex b/avr/bootloaders/HoodLoader2/LegacyVersions/HoodLoader2_0_1_Uno_32u2.hex similarity index 100% rename from avr/bootloaders/LegacyVersions/HoodLoader2_0_1_Uno_32u2.hex rename to avr/bootloaders/HoodLoader2/LegacyVersions/HoodLoader2_0_1_Uno_32u2.hex diff --git a/avr/bootloaders/LegacyVersions/HoodLoader2_0_2_Mega_16u2.hex b/avr/bootloaders/HoodLoader2/LegacyVersions/HoodLoader2_0_2_Mega_16u2.hex similarity index 100% rename from avr/bootloaders/LegacyVersions/HoodLoader2_0_2_Mega_16u2.hex rename to avr/bootloaders/HoodLoader2/LegacyVersions/HoodLoader2_0_2_Mega_16u2.hex diff --git a/avr/bootloaders/LegacyVersions/HoodLoader2_0_2_Mega_32u2.hex b/avr/bootloaders/HoodLoader2/LegacyVersions/HoodLoader2_0_2_Mega_32u2.hex similarity index 100% rename from avr/bootloaders/LegacyVersions/HoodLoader2_0_2_Mega_32u2.hex rename to avr/bootloaders/HoodLoader2/LegacyVersions/HoodLoader2_0_2_Mega_32u2.hex diff --git a/avr/bootloaders/LegacyVersions/HoodLoader2_0_2_Uno_16u2.hex b/avr/bootloaders/HoodLoader2/LegacyVersions/HoodLoader2_0_2_Uno_16u2.hex similarity index 100% rename from avr/bootloaders/LegacyVersions/HoodLoader2_0_2_Uno_16u2.hex rename to avr/bootloaders/HoodLoader2/LegacyVersions/HoodLoader2_0_2_Uno_16u2.hex diff --git a/avr/bootloaders/LegacyVersions/HoodLoader2_0_2_Uno_32u2.hex b/avr/bootloaders/HoodLoader2/LegacyVersions/HoodLoader2_0_2_Uno_32u2.hex similarity index 100% rename from avr/bootloaders/LegacyVersions/HoodLoader2_0_2_Uno_32u2.hex rename to avr/bootloaders/HoodLoader2/LegacyVersions/HoodLoader2_0_2_Uno_32u2.hex diff --git a/avr/bootloaders/LegacyVersions/Hoodloader2_Alpha1.hex b/avr/bootloaders/HoodLoader2/LegacyVersions/Hoodloader2_Alpha1.hex similarity index 100% rename from avr/bootloaders/LegacyVersions/Hoodloader2_Alpha1.hex rename to avr/bootloaders/HoodLoader2/LegacyVersions/Hoodloader2_Alpha1.hex diff --git a/avr/bootloaders/LegacyVersions/Hoodloader2_Alpha2.hex b/avr/bootloaders/HoodLoader2/LegacyVersions/Hoodloader2_Alpha2.hex similarity index 100% rename from avr/bootloaders/LegacyVersions/Hoodloader2_Alpha2.hex rename to avr/bootloaders/HoodLoader2/LegacyVersions/Hoodloader2_Alpha2.hex diff --git a/avr/bootloaders/LegacyVersions/Hoodloader2_Alpha5.hex b/avr/bootloaders/HoodLoader2/LegacyVersions/Hoodloader2_Alpha5.hex similarity index 100% rename from avr/bootloaders/LegacyVersions/Hoodloader2_Alpha5.hex rename to avr/bootloaders/HoodLoader2/LegacyVersions/Hoodloader2_Alpha5.hex diff --git a/avr/bootloaders/LegacyVersions/Hoodloader2_Mega_Beta.hex b/avr/bootloaders/HoodLoader2/LegacyVersions/Hoodloader2_Mega_Beta.hex similarity index 100% rename from avr/bootloaders/LegacyVersions/Hoodloader2_Mega_Beta.hex rename to avr/bootloaders/HoodLoader2/LegacyVersions/Hoodloader2_Mega_Beta.hex diff --git a/avr/bootloaders/LegacyVersions/Hoodloader2_Uno_Beta.hex b/avr/bootloaders/HoodLoader2/LegacyVersions/Hoodloader2_Uno_Beta.hex similarity index 100% rename from avr/bootloaders/LegacyVersions/Hoodloader2_Uno_Beta.hex rename to avr/bootloaders/HoodLoader2/LegacyVersions/Hoodloader2_Uno_Beta.hex diff --git a/avr/bootloaders/LegacyVersions/LUFA CDC Bootloader.inf b/avr/bootloaders/HoodLoader2/LegacyVersions/LUFA CDC Bootloader.inf similarity index 100% rename from avr/bootloaders/LegacyVersions/LUFA CDC Bootloader.inf rename to avr/bootloaders/HoodLoader2/LegacyVersions/LUFA CDC Bootloader.inf diff --git a/avr/bootloaders/LegacyVersions/Readme.md b/avr/bootloaders/HoodLoader2/LegacyVersions/Readme.md similarity index 100% rename from avr/bootloaders/LegacyVersions/Readme.md rename to avr/bootloaders/HoodLoader2/LegacyVersions/Readme.md diff --git a/makefile b/avr/bootloaders/HoodLoader2/makefile similarity index 98% rename from makefile rename to avr/bootloaders/HoodLoader2/makefile index fb4c12e..5b036ca 100644 --- a/makefile +++ b/avr/bootloaders/HoodLoader2/makefile @@ -19,7 +19,7 @@ F_USB = $(F_CPU) OPTIMIZATION = s TARGET = HoodLoader2 SRC = $(TARGET).c Descriptors.c BootloaderAPI.c BootloaderAPITable.S $(LUFA_SRC_USB) -LUFA_PATH = ./lufa-LUFA-140928/LUFA +LUFA_PATH = ../../../tools/lufa-LUFA-140928/LUFA CC_FLAGS = -DUSE_LUFA_CONFIG_HEADER -IConfig/ $(HOODLOADER2_OPTS) -DBOOT_START_ADDR=$(BOOT_START_OFFSET) LD_FLAGS = -Wl,--section-start=.text=$(BOOT_START_OFFSET) $(BOOT_API_LD_FLAGS) diff --git a/lufa-LUFA-140928/.gitignore b/tools/lufa-LUFA-140928/.gitignore similarity index 100% rename from lufa-LUFA-140928/.gitignore rename to tools/lufa-LUFA-140928/.gitignore diff --git a/lufa-LUFA-140928/LUFA/Build/HID_EEPROM_Loader/HID_EEPROM_Loader.c b/tools/lufa-LUFA-140928/LUFA/Build/HID_EEPROM_Loader/HID_EEPROM_Loader.c similarity index 100% rename from lufa-LUFA-140928/LUFA/Build/HID_EEPROM_Loader/HID_EEPROM_Loader.c rename to tools/lufa-LUFA-140928/LUFA/Build/HID_EEPROM_Loader/HID_EEPROM_Loader.c diff --git a/lufa-LUFA-140928/LUFA/Build/HID_EEPROM_Loader/makefile b/tools/lufa-LUFA-140928/LUFA/Build/HID_EEPROM_Loader/makefile similarity index 100% rename from lufa-LUFA-140928/LUFA/Build/HID_EEPROM_Loader/makefile rename to tools/lufa-LUFA-140928/LUFA/Build/HID_EEPROM_Loader/makefile diff --git a/lufa-LUFA-140928/LUFA/Build/lufa_atprogram.mk b/tools/lufa-LUFA-140928/LUFA/Build/lufa_atprogram.mk similarity index 100% rename from lufa-LUFA-140928/LUFA/Build/lufa_atprogram.mk rename to tools/lufa-LUFA-140928/LUFA/Build/lufa_atprogram.mk diff --git a/lufa-LUFA-140928/LUFA/Build/lufa_avrdude.mk b/tools/lufa-LUFA-140928/LUFA/Build/lufa_avrdude.mk similarity index 100% rename from lufa-LUFA-140928/LUFA/Build/lufa_avrdude.mk rename to tools/lufa-LUFA-140928/LUFA/Build/lufa_avrdude.mk diff --git a/lufa-LUFA-140928/LUFA/Build/lufa_build.mk b/tools/lufa-LUFA-140928/LUFA/Build/lufa_build.mk similarity index 100% rename from lufa-LUFA-140928/LUFA/Build/lufa_build.mk rename to tools/lufa-LUFA-140928/LUFA/Build/lufa_build.mk diff --git a/lufa-LUFA-140928/LUFA/Build/lufa_core.mk b/tools/lufa-LUFA-140928/LUFA/Build/lufa_core.mk similarity index 100% rename from lufa-LUFA-140928/LUFA/Build/lufa_core.mk rename to tools/lufa-LUFA-140928/LUFA/Build/lufa_core.mk diff --git a/lufa-LUFA-140928/LUFA/Build/lufa_cppcheck.mk b/tools/lufa-LUFA-140928/LUFA/Build/lufa_cppcheck.mk similarity index 100% rename from lufa-LUFA-140928/LUFA/Build/lufa_cppcheck.mk rename to tools/lufa-LUFA-140928/LUFA/Build/lufa_cppcheck.mk diff --git a/lufa-LUFA-140928/LUFA/Build/lufa_dfu.mk b/tools/lufa-LUFA-140928/LUFA/Build/lufa_dfu.mk similarity index 100% rename from lufa-LUFA-140928/LUFA/Build/lufa_dfu.mk rename to tools/lufa-LUFA-140928/LUFA/Build/lufa_dfu.mk diff --git a/lufa-LUFA-140928/LUFA/Build/lufa_doxygen.mk b/tools/lufa-LUFA-140928/LUFA/Build/lufa_doxygen.mk similarity index 100% rename from lufa-LUFA-140928/LUFA/Build/lufa_doxygen.mk rename to tools/lufa-LUFA-140928/LUFA/Build/lufa_doxygen.mk diff --git a/lufa-LUFA-140928/LUFA/Build/lufa_hid.mk b/tools/lufa-LUFA-140928/LUFA/Build/lufa_hid.mk similarity index 100% rename from lufa-LUFA-140928/LUFA/Build/lufa_hid.mk rename to tools/lufa-LUFA-140928/LUFA/Build/lufa_hid.mk diff --git a/lufa-LUFA-140928/LUFA/Build/lufa_sources.mk b/tools/lufa-LUFA-140928/LUFA/Build/lufa_sources.mk similarity index 100% rename from lufa-LUFA-140928/LUFA/Build/lufa_sources.mk rename to tools/lufa-LUFA-140928/LUFA/Build/lufa_sources.mk diff --git a/lufa-LUFA-140928/LUFA/CodeTemplates/DeviceTemplate/Descriptors.c b/tools/lufa-LUFA-140928/LUFA/CodeTemplates/DeviceTemplate/Descriptors.c similarity index 100% rename from lufa-LUFA-140928/LUFA/CodeTemplates/DeviceTemplate/Descriptors.c rename to tools/lufa-LUFA-140928/LUFA/CodeTemplates/DeviceTemplate/Descriptors.c diff --git a/lufa-LUFA-140928/LUFA/CodeTemplates/DeviceTemplate/Descriptors.h b/tools/lufa-LUFA-140928/LUFA/CodeTemplates/DeviceTemplate/Descriptors.h similarity index 100% rename from lufa-LUFA-140928/LUFA/CodeTemplates/DeviceTemplate/Descriptors.h rename to tools/lufa-LUFA-140928/LUFA/CodeTemplates/DeviceTemplate/Descriptors.h diff --git a/lufa-LUFA-140928/LUFA/CodeTemplates/DeviceTemplate/DeviceApplication.c b/tools/lufa-LUFA-140928/LUFA/CodeTemplates/DeviceTemplate/DeviceApplication.c similarity index 100% rename from lufa-LUFA-140928/LUFA/CodeTemplates/DeviceTemplate/DeviceApplication.c rename to tools/lufa-LUFA-140928/LUFA/CodeTemplates/DeviceTemplate/DeviceApplication.c diff --git a/lufa-LUFA-140928/LUFA/CodeTemplates/DeviceTemplate/DeviceApplication.h b/tools/lufa-LUFA-140928/LUFA/CodeTemplates/DeviceTemplate/DeviceApplication.h similarity index 100% rename from lufa-LUFA-140928/LUFA/CodeTemplates/DeviceTemplate/DeviceApplication.h rename to tools/lufa-LUFA-140928/LUFA/CodeTemplates/DeviceTemplate/DeviceApplication.h diff --git a/lufa-LUFA-140928/LUFA/CodeTemplates/DeviceTemplate/asf.xml b/tools/lufa-LUFA-140928/LUFA/CodeTemplates/DeviceTemplate/asf.xml similarity index 100% rename from lufa-LUFA-140928/LUFA/CodeTemplates/DeviceTemplate/asf.xml rename to tools/lufa-LUFA-140928/LUFA/CodeTemplates/DeviceTemplate/asf.xml diff --git a/lufa-LUFA-140928/LUFA/CodeTemplates/DriverStubs/Board.h b/tools/lufa-LUFA-140928/LUFA/CodeTemplates/DriverStubs/Board.h similarity index 100% rename from lufa-LUFA-140928/LUFA/CodeTemplates/DriverStubs/Board.h rename to tools/lufa-LUFA-140928/LUFA/CodeTemplates/DriverStubs/Board.h diff --git a/lufa-LUFA-140928/LUFA/CodeTemplates/DriverStubs/Buttons.h b/tools/lufa-LUFA-140928/LUFA/CodeTemplates/DriverStubs/Buttons.h similarity index 100% rename from lufa-LUFA-140928/LUFA/CodeTemplates/DriverStubs/Buttons.h rename to tools/lufa-LUFA-140928/LUFA/CodeTemplates/DriverStubs/Buttons.h diff --git a/lufa-LUFA-140928/LUFA/CodeTemplates/DriverStubs/Dataflash.h b/tools/lufa-LUFA-140928/LUFA/CodeTemplates/DriverStubs/Dataflash.h similarity index 100% rename from lufa-LUFA-140928/LUFA/CodeTemplates/DriverStubs/Dataflash.h rename to tools/lufa-LUFA-140928/LUFA/CodeTemplates/DriverStubs/Dataflash.h diff --git a/lufa-LUFA-140928/LUFA/CodeTemplates/DriverStubs/Joystick.h b/tools/lufa-LUFA-140928/LUFA/CodeTemplates/DriverStubs/Joystick.h similarity index 100% rename from lufa-LUFA-140928/LUFA/CodeTemplates/DriverStubs/Joystick.h rename to tools/lufa-LUFA-140928/LUFA/CodeTemplates/DriverStubs/Joystick.h diff --git a/lufa-LUFA-140928/LUFA/CodeTemplates/DriverStubs/LEDs.h b/tools/lufa-LUFA-140928/LUFA/CodeTemplates/DriverStubs/LEDs.h similarity index 100% rename from lufa-LUFA-140928/LUFA/CodeTemplates/DriverStubs/LEDs.h rename to tools/lufa-LUFA-140928/LUFA/CodeTemplates/DriverStubs/LEDs.h diff --git a/lufa-LUFA-140928/LUFA/CodeTemplates/HostTemplate/HostApplication.c b/tools/lufa-LUFA-140928/LUFA/CodeTemplates/HostTemplate/HostApplication.c similarity index 100% rename from lufa-LUFA-140928/LUFA/CodeTemplates/HostTemplate/HostApplication.c rename to tools/lufa-LUFA-140928/LUFA/CodeTemplates/HostTemplate/HostApplication.c diff --git a/lufa-LUFA-140928/LUFA/CodeTemplates/HostTemplate/HostApplication.h b/tools/lufa-LUFA-140928/LUFA/CodeTemplates/HostTemplate/HostApplication.h similarity index 100% rename from lufa-LUFA-140928/LUFA/CodeTemplates/HostTemplate/HostApplication.h rename to tools/lufa-LUFA-140928/LUFA/CodeTemplates/HostTemplate/HostApplication.h diff --git a/lufa-LUFA-140928/LUFA/CodeTemplates/HostTemplate/asf.xml b/tools/lufa-LUFA-140928/LUFA/CodeTemplates/HostTemplate/asf.xml similarity index 100% rename from lufa-LUFA-140928/LUFA/CodeTemplates/HostTemplate/asf.xml rename to tools/lufa-LUFA-140928/LUFA/CodeTemplates/HostTemplate/asf.xml diff --git a/lufa-LUFA-140928/LUFA/CodeTemplates/LUFAConfig.h b/tools/lufa-LUFA-140928/LUFA/CodeTemplates/LUFAConfig.h similarity index 100% rename from lufa-LUFA-140928/LUFA/CodeTemplates/LUFAConfig.h rename to tools/lufa-LUFA-140928/LUFA/CodeTemplates/LUFAConfig.h diff --git a/lufa-LUFA-140928/LUFA/CodeTemplates/WindowsINF/LUFA CDC-ACM.inf b/tools/lufa-LUFA-140928/LUFA/CodeTemplates/WindowsINF/LUFA CDC-ACM.inf similarity index 100% rename from lufa-LUFA-140928/LUFA/CodeTemplates/WindowsINF/LUFA CDC-ACM.inf rename to tools/lufa-LUFA-140928/LUFA/CodeTemplates/WindowsINF/LUFA CDC-ACM.inf diff --git a/lufa-LUFA-140928/LUFA/CodeTemplates/WindowsINF/LUFA RNDIS.inf b/tools/lufa-LUFA-140928/LUFA/CodeTemplates/WindowsINF/LUFA RNDIS.inf similarity index 100% rename from lufa-LUFA-140928/LUFA/CodeTemplates/WindowsINF/LUFA RNDIS.inf rename to tools/lufa-LUFA-140928/LUFA/CodeTemplates/WindowsINF/LUFA RNDIS.inf diff --git a/lufa-LUFA-140928/LUFA/CodeTemplates/makefile_template b/tools/lufa-LUFA-140928/LUFA/CodeTemplates/makefile_template similarity index 100% rename from lufa-LUFA-140928/LUFA/CodeTemplates/makefile_template rename to tools/lufa-LUFA-140928/LUFA/CodeTemplates/makefile_template diff --git a/lufa-LUFA-140928/LUFA/Common/ArchitectureSpecific.h b/tools/lufa-LUFA-140928/LUFA/Common/ArchitectureSpecific.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Common/ArchitectureSpecific.h rename to tools/lufa-LUFA-140928/LUFA/Common/ArchitectureSpecific.h diff --git a/lufa-LUFA-140928/LUFA/Common/Architectures.h b/tools/lufa-LUFA-140928/LUFA/Common/Architectures.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Common/Architectures.h rename to tools/lufa-LUFA-140928/LUFA/Common/Architectures.h diff --git a/lufa-LUFA-140928/LUFA/Common/Attributes.h b/tools/lufa-LUFA-140928/LUFA/Common/Attributes.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Common/Attributes.h rename to tools/lufa-LUFA-140928/LUFA/Common/Attributes.h diff --git a/lufa-LUFA-140928/LUFA/Common/BoardTypes.h b/tools/lufa-LUFA-140928/LUFA/Common/BoardTypes.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Common/BoardTypes.h rename to tools/lufa-LUFA-140928/LUFA/Common/BoardTypes.h diff --git a/lufa-LUFA-140928/LUFA/Common/Common.h b/tools/lufa-LUFA-140928/LUFA/Common/Common.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Common/Common.h rename to tools/lufa-LUFA-140928/LUFA/Common/Common.h diff --git a/lufa-LUFA-140928/LUFA/Common/CompilerSpecific.h b/tools/lufa-LUFA-140928/LUFA/Common/CompilerSpecific.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Common/CompilerSpecific.h rename to tools/lufa-LUFA-140928/LUFA/Common/CompilerSpecific.h diff --git a/lufa-LUFA-140928/LUFA/Common/Endianness.h b/tools/lufa-LUFA-140928/LUFA/Common/Endianness.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Common/Endianness.h rename to tools/lufa-LUFA-140928/LUFA/Common/Endianness.h diff --git a/lufa-LUFA-140928/LUFA/DoxygenPages/BuildSystem.txt b/tools/lufa-LUFA-140928/LUFA/DoxygenPages/BuildSystem.txt similarity index 100% rename from lufa-LUFA-140928/LUFA/DoxygenPages/BuildSystem.txt rename to tools/lufa-LUFA-140928/LUFA/DoxygenPages/BuildSystem.txt diff --git a/lufa-LUFA-140928/LUFA/DoxygenPages/BuildingLinkableLibraries.txt b/tools/lufa-LUFA-140928/LUFA/DoxygenPages/BuildingLinkableLibraries.txt similarity index 100% rename from lufa-LUFA-140928/LUFA/DoxygenPages/BuildingLinkableLibraries.txt rename to tools/lufa-LUFA-140928/LUFA/DoxygenPages/BuildingLinkableLibraries.txt diff --git a/lufa-LUFA-140928/LUFA/DoxygenPages/ChangeLog.txt b/tools/lufa-LUFA-140928/LUFA/DoxygenPages/ChangeLog.txt similarity index 100% rename from lufa-LUFA-140928/LUFA/DoxygenPages/ChangeLog.txt rename to tools/lufa-LUFA-140928/LUFA/DoxygenPages/ChangeLog.txt diff --git a/lufa-LUFA-140928/LUFA/DoxygenPages/CompileTimeTokens.txt b/tools/lufa-LUFA-140928/LUFA/DoxygenPages/CompileTimeTokens.txt similarity index 100% rename from lufa-LUFA-140928/LUFA/DoxygenPages/CompileTimeTokens.txt rename to tools/lufa-LUFA-140928/LUFA/DoxygenPages/CompileTimeTokens.txt diff --git a/lufa-LUFA-140928/LUFA/DoxygenPages/CompilingApps.txt b/tools/lufa-LUFA-140928/LUFA/DoxygenPages/CompilingApps.txt similarity index 100% rename from lufa-LUFA-140928/LUFA/DoxygenPages/CompilingApps.txt rename to tools/lufa-LUFA-140928/LUFA/DoxygenPages/CompilingApps.txt diff --git a/lufa-LUFA-140928/LUFA/DoxygenPages/ConfiguringApps.txt b/tools/lufa-LUFA-140928/LUFA/DoxygenPages/ConfiguringApps.txt similarity index 100% rename from lufa-LUFA-140928/LUFA/DoxygenPages/ConfiguringApps.txt rename to tools/lufa-LUFA-140928/LUFA/DoxygenPages/ConfiguringApps.txt diff --git a/lufa-LUFA-140928/LUFA/DoxygenPages/DevelopingWithLUFA.txt b/tools/lufa-LUFA-140928/LUFA/DoxygenPages/DevelopingWithLUFA.txt similarity index 100% rename from lufa-LUFA-140928/LUFA/DoxygenPages/DevelopingWithLUFA.txt rename to tools/lufa-LUFA-140928/LUFA/DoxygenPages/DevelopingWithLUFA.txt diff --git a/lufa-LUFA-140928/LUFA/DoxygenPages/DeviceSupport.txt b/tools/lufa-LUFA-140928/LUFA/DoxygenPages/DeviceSupport.txt similarity index 100% rename from lufa-LUFA-140928/LUFA/DoxygenPages/DeviceSupport.txt rename to tools/lufa-LUFA-140928/LUFA/DoxygenPages/DeviceSupport.txt diff --git a/lufa-LUFA-140928/LUFA/DoxygenPages/DirectorySummaries.txt b/tools/lufa-LUFA-140928/LUFA/DoxygenPages/DirectorySummaries.txt similarity index 100% rename from lufa-LUFA-140928/LUFA/DoxygenPages/DirectorySummaries.txt rename to tools/lufa-LUFA-140928/LUFA/DoxygenPages/DirectorySummaries.txt diff --git a/lufa-LUFA-140928/LUFA/DoxygenPages/Donating.txt b/tools/lufa-LUFA-140928/LUFA/DoxygenPages/Donating.txt similarity index 100% rename from lufa-LUFA-140928/LUFA/DoxygenPages/Donating.txt rename to tools/lufa-LUFA-140928/LUFA/DoxygenPages/Donating.txt diff --git a/lufa-LUFA-140928/LUFA/DoxygenPages/ExportingLibrary.txt b/tools/lufa-LUFA-140928/LUFA/DoxygenPages/ExportingLibrary.txt similarity index 100% rename from lufa-LUFA-140928/LUFA/DoxygenPages/ExportingLibrary.txt rename to tools/lufa-LUFA-140928/LUFA/DoxygenPages/ExportingLibrary.txt diff --git a/lufa-LUFA-140928/LUFA/DoxygenPages/FutureChanges.txt b/tools/lufa-LUFA-140928/LUFA/DoxygenPages/FutureChanges.txt similarity index 100% rename from lufa-LUFA-140928/LUFA/DoxygenPages/FutureChanges.txt rename to tools/lufa-LUFA-140928/LUFA/DoxygenPages/FutureChanges.txt diff --git a/lufa-LUFA-140928/LUFA/DoxygenPages/GettingStarted.txt b/tools/lufa-LUFA-140928/LUFA/DoxygenPages/GettingStarted.txt similarity index 100% rename from lufa-LUFA-140928/LUFA/DoxygenPages/GettingStarted.txt rename to tools/lufa-LUFA-140928/LUFA/DoxygenPages/GettingStarted.txt diff --git a/lufa-LUFA-140928/LUFA/DoxygenPages/Groups.txt b/tools/lufa-LUFA-140928/LUFA/DoxygenPages/Groups.txt similarity index 100% rename from lufa-LUFA-140928/LUFA/DoxygenPages/Groups.txt rename to tools/lufa-LUFA-140928/LUFA/DoxygenPages/Groups.txt diff --git a/lufa-LUFA-140928/LUFA/DoxygenPages/Images/AS5_AS6_Import/AS5_AS6_Import_Step1.png b/tools/lufa-LUFA-140928/LUFA/DoxygenPages/Images/AS5_AS6_Import/AS5_AS6_Import_Step1.png similarity index 100% rename from lufa-LUFA-140928/LUFA/DoxygenPages/Images/AS5_AS6_Import/AS5_AS6_Import_Step1.png rename to tools/lufa-LUFA-140928/LUFA/DoxygenPages/Images/AS5_AS6_Import/AS5_AS6_Import_Step1.png diff --git a/lufa-LUFA-140928/LUFA/DoxygenPages/Images/AS5_AS6_Import/AS5_AS6_Import_Step2.png b/tools/lufa-LUFA-140928/LUFA/DoxygenPages/Images/AS5_AS6_Import/AS5_AS6_Import_Step2.png similarity index 100% rename from lufa-LUFA-140928/LUFA/DoxygenPages/Images/AS5_AS6_Import/AS5_AS6_Import_Step2.png rename to tools/lufa-LUFA-140928/LUFA/DoxygenPages/Images/AS5_AS6_Import/AS5_AS6_Import_Step2.png diff --git a/lufa-LUFA-140928/LUFA/DoxygenPages/Images/AS5_AS6_Import/AS5_AS6_Import_Step3.png b/tools/lufa-LUFA-140928/LUFA/DoxygenPages/Images/AS5_AS6_Import/AS5_AS6_Import_Step3.png similarity index 100% rename from lufa-LUFA-140928/LUFA/DoxygenPages/Images/AS5_AS6_Import/AS5_AS6_Import_Step3.png rename to tools/lufa-LUFA-140928/LUFA/DoxygenPages/Images/AS5_AS6_Import/AS5_AS6_Import_Step3.png diff --git a/lufa-LUFA-140928/LUFA/DoxygenPages/Images/AS5_AS6_Import/AS5_AS6_Import_Step4.png b/tools/lufa-LUFA-140928/LUFA/DoxygenPages/Images/AS5_AS6_Import/AS5_AS6_Import_Step4.png similarity index 100% rename from lufa-LUFA-140928/LUFA/DoxygenPages/Images/AS5_AS6_Import/AS5_AS6_Import_Step4.png rename to tools/lufa-LUFA-140928/LUFA/DoxygenPages/Images/AS5_AS6_Import/AS5_AS6_Import_Step4.png diff --git a/lufa-LUFA-140928/LUFA/DoxygenPages/Images/AS5_AS6_Import/AS5_AS6_Import_Step5_1.png b/tools/lufa-LUFA-140928/LUFA/DoxygenPages/Images/AS5_AS6_Import/AS5_AS6_Import_Step5_1.png similarity index 100% rename from lufa-LUFA-140928/LUFA/DoxygenPages/Images/AS5_AS6_Import/AS5_AS6_Import_Step5_1.png rename to tools/lufa-LUFA-140928/LUFA/DoxygenPages/Images/AS5_AS6_Import/AS5_AS6_Import_Step5_1.png diff --git a/lufa-LUFA-140928/LUFA/DoxygenPages/Images/AS5_AS6_Import/AS5_AS6_Import_Step5_2.png b/tools/lufa-LUFA-140928/LUFA/DoxygenPages/Images/AS5_AS6_Import/AS5_AS6_Import_Step5_2.png similarity index 100% rename from lufa-LUFA-140928/LUFA/DoxygenPages/Images/AS5_AS6_Import/AS5_AS6_Import_Step5_2.png rename to tools/lufa-LUFA-140928/LUFA/DoxygenPages/Images/AS5_AS6_Import/AS5_AS6_Import_Step5_2.png diff --git a/lufa-LUFA-140928/LUFA/DoxygenPages/Images/AS5_AS6_Import/AS5_AS6_Import_Step5_3.png b/tools/lufa-LUFA-140928/LUFA/DoxygenPages/Images/AS5_AS6_Import/AS5_AS6_Import_Step5_3.png similarity index 100% rename from lufa-LUFA-140928/LUFA/DoxygenPages/Images/AS5_AS6_Import/AS5_AS6_Import_Step5_3.png rename to tools/lufa-LUFA-140928/LUFA/DoxygenPages/Images/AS5_AS6_Import/AS5_AS6_Import_Step5_3.png diff --git a/lufa-LUFA-140928/LUFA/DoxygenPages/Images/Author.jpg b/tools/lufa-LUFA-140928/LUFA/DoxygenPages/Images/Author.jpg similarity index 100% rename from lufa-LUFA-140928/LUFA/DoxygenPages/Images/Author.jpg rename to tools/lufa-LUFA-140928/LUFA/DoxygenPages/Images/Author.jpg diff --git a/lufa-LUFA-140928/LUFA/DoxygenPages/Images/LUFA.png b/tools/lufa-LUFA-140928/LUFA/DoxygenPages/Images/LUFA.png similarity index 100% rename from lufa-LUFA-140928/LUFA/DoxygenPages/Images/LUFA.png rename to tools/lufa-LUFA-140928/LUFA/DoxygenPages/Images/LUFA.png diff --git a/lufa-LUFA-140928/LUFA/DoxygenPages/Images/LUFA_thumb.png b/tools/lufa-LUFA-140928/LUFA/DoxygenPages/Images/LUFA_thumb.png similarity index 100% rename from lufa-LUFA-140928/LUFA/DoxygenPages/Images/LUFA_thumb.png rename to tools/lufa-LUFA-140928/LUFA/DoxygenPages/Images/LUFA_thumb.png diff --git a/lufa-LUFA-140928/LUFA/DoxygenPages/KnownIssues.txt b/tools/lufa-LUFA-140928/LUFA/DoxygenPages/KnownIssues.txt similarity index 100% rename from lufa-LUFA-140928/LUFA/DoxygenPages/KnownIssues.txt rename to tools/lufa-LUFA-140928/LUFA/DoxygenPages/KnownIssues.txt diff --git a/lufa-LUFA-140928/LUFA/DoxygenPages/LUFAPoweredProjects.txt b/tools/lufa-LUFA-140928/LUFA/DoxygenPages/LUFAPoweredProjects.txt similarity index 100% rename from lufa-LUFA-140928/LUFA/DoxygenPages/LUFAPoweredProjects.txt rename to tools/lufa-LUFA-140928/LUFA/DoxygenPages/LUFAPoweredProjects.txt diff --git a/lufa-LUFA-140928/LUFA/DoxygenPages/LibraryResources.txt b/tools/lufa-LUFA-140928/LUFA/DoxygenPages/LibraryResources.txt similarity index 100% rename from lufa-LUFA-140928/LUFA/DoxygenPages/LibraryResources.txt rename to tools/lufa-LUFA-140928/LUFA/DoxygenPages/LibraryResources.txt diff --git a/lufa-LUFA-140928/LUFA/DoxygenPages/LicenseInfo.txt b/tools/lufa-LUFA-140928/LUFA/DoxygenPages/LicenseInfo.txt similarity index 100% rename from lufa-LUFA-140928/LUFA/DoxygenPages/LicenseInfo.txt rename to tools/lufa-LUFA-140928/LUFA/DoxygenPages/LicenseInfo.txt diff --git a/lufa-LUFA-140928/LUFA/DoxygenPages/MainPage.txt b/tools/lufa-LUFA-140928/LUFA/DoxygenPages/MainPage.txt similarity index 100% rename from lufa-LUFA-140928/LUFA/DoxygenPages/MainPage.txt rename to tools/lufa-LUFA-140928/LUFA/DoxygenPages/MainPage.txt diff --git a/lufa-LUFA-140928/LUFA/DoxygenPages/MigrationInformation.txt b/tools/lufa-LUFA-140928/LUFA/DoxygenPages/MigrationInformation.txt similarity index 100% rename from lufa-LUFA-140928/LUFA/DoxygenPages/MigrationInformation.txt rename to tools/lufa-LUFA-140928/LUFA/DoxygenPages/MigrationInformation.txt diff --git a/lufa-LUFA-140928/LUFA/DoxygenPages/OSDrivers.txt b/tools/lufa-LUFA-140928/LUFA/DoxygenPages/OSDrivers.txt similarity index 100% rename from lufa-LUFA-140928/LUFA/DoxygenPages/OSDrivers.txt rename to tools/lufa-LUFA-140928/LUFA/DoxygenPages/OSDrivers.txt diff --git a/lufa-LUFA-140928/LUFA/DoxygenPages/ProgrammingApps.txt b/tools/lufa-LUFA-140928/LUFA/DoxygenPages/ProgrammingApps.txt similarity index 100% rename from lufa-LUFA-140928/LUFA/DoxygenPages/ProgrammingApps.txt rename to tools/lufa-LUFA-140928/LUFA/DoxygenPages/ProgrammingApps.txt diff --git a/lufa-LUFA-140928/LUFA/DoxygenPages/SoftwareBootloaderJump.txt b/tools/lufa-LUFA-140928/LUFA/DoxygenPages/SoftwareBootloaderJump.txt similarity index 100% rename from lufa-LUFA-140928/LUFA/DoxygenPages/SoftwareBootloaderJump.txt rename to tools/lufa-LUFA-140928/LUFA/DoxygenPages/SoftwareBootloaderJump.txt diff --git a/lufa-LUFA-140928/LUFA/DoxygenPages/Style/Footer.htm b/tools/lufa-LUFA-140928/LUFA/DoxygenPages/Style/Footer.htm similarity index 100% rename from lufa-LUFA-140928/LUFA/DoxygenPages/Style/Footer.htm rename to tools/lufa-LUFA-140928/LUFA/DoxygenPages/Style/Footer.htm diff --git a/lufa-LUFA-140928/LUFA/DoxygenPages/Style/Style.css b/tools/lufa-LUFA-140928/LUFA/DoxygenPages/Style/Style.css similarity index 100% rename from lufa-LUFA-140928/LUFA/DoxygenPages/Style/Style.css rename to tools/lufa-LUFA-140928/LUFA/DoxygenPages/Style/Style.css diff --git a/lufa-LUFA-140928/LUFA/DoxygenPages/VIDAndPIDValues.txt b/tools/lufa-LUFA-140928/LUFA/DoxygenPages/VIDAndPIDValues.txt similarity index 100% rename from lufa-LUFA-140928/LUFA/DoxygenPages/VIDAndPIDValues.txt rename to tools/lufa-LUFA-140928/LUFA/DoxygenPages/VIDAndPIDValues.txt diff --git a/lufa-LUFA-140928/LUFA/DoxygenPages/WritingBoardDrivers.txt b/tools/lufa-LUFA-140928/LUFA/DoxygenPages/WritingBoardDrivers.txt similarity index 100% rename from lufa-LUFA-140928/LUFA/DoxygenPages/WritingBoardDrivers.txt rename to tools/lufa-LUFA-140928/LUFA/DoxygenPages/WritingBoardDrivers.txt diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/ADAFRUITU4/Board.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/ADAFRUITU4/Board.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/ADAFRUITU4/Board.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/ADAFRUITU4/Board.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/ADAFRUITU4/LEDs.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/ADAFRUITU4/LEDs.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/ADAFRUITU4/LEDs.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/ADAFRUITU4/LEDs.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/ATAVRUSBRF01/Board.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/ATAVRUSBRF01/Board.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/ATAVRUSBRF01/Board.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/ATAVRUSBRF01/Board.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/ATAVRUSBRF01/Buttons.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/ATAVRUSBRF01/Buttons.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/ATAVRUSBRF01/Buttons.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/ATAVRUSBRF01/Buttons.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/ATAVRUSBRF01/LEDs.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/ATAVRUSBRF01/LEDs.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/ATAVRUSBRF01/LEDs.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/ATAVRUSBRF01/LEDs.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/BENITO/Board.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/BENITO/Board.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/BENITO/Board.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/BENITO/Board.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/BENITO/Buttons.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/BENITO/Buttons.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/BENITO/Buttons.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/BENITO/Buttons.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/BENITO/LEDs.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/BENITO/LEDs.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/BENITO/LEDs.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/BENITO/LEDs.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/BIGMULTIO/Board.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/BIGMULTIO/Board.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/BIGMULTIO/Board.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/BIGMULTIO/Board.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/BIGMULTIO/LEDs.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/BIGMULTIO/LEDs.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/BIGMULTIO/LEDs.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/BIGMULTIO/LEDs.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/BLACKCAT/Board.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/BLACKCAT/Board.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/BLACKCAT/Board.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/BLACKCAT/Board.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/BLACKCAT/LEDs.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/BLACKCAT/LEDs.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/BLACKCAT/LEDs.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/BLACKCAT/LEDs.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/BUI/Board.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/BUI/Board.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/BUI/Board.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/BUI/Board.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/BUI/LEDs.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/BUI/LEDs.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/BUI/LEDs.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/BUI/LEDs.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/BUMBLEB/Board.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/BUMBLEB/Board.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/BUMBLEB/Board.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/BUMBLEB/Board.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/BUMBLEB/Buttons.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/BUMBLEB/Buttons.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/BUMBLEB/Buttons.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/BUMBLEB/Buttons.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/BUMBLEB/Joystick.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/BUMBLEB/Joystick.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/BUMBLEB/Joystick.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/BUMBLEB/Joystick.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/BUMBLEB/LEDs.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/BUMBLEB/LEDs.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/BUMBLEB/LEDs.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/BUMBLEB/LEDs.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/CULV3/Board.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/CULV3/Board.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/CULV3/Board.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/CULV3/Board.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/CULV3/Buttons.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/CULV3/Buttons.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/CULV3/Buttons.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/CULV3/Buttons.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/CULV3/LEDs.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/CULV3/LEDs.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/CULV3/LEDs.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/CULV3/LEDs.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/DUCE/Board.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/DUCE/Board.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/DUCE/Board.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/DUCE/Board.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/DUCE/LEDs.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/DUCE/LEDs.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/DUCE/LEDs.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/DUCE/LEDs.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/EVK527/Board.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/EVK527/Board.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/EVK527/Board.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/EVK527/Board.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/EVK527/Buttons.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/EVK527/Buttons.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/EVK527/Buttons.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/EVK527/Buttons.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/EVK527/Dataflash.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/EVK527/Dataflash.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/EVK527/Dataflash.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/EVK527/Dataflash.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/EVK527/Joystick.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/EVK527/Joystick.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/EVK527/Joystick.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/EVK527/Joystick.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/EVK527/LEDs.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/EVK527/LEDs.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/EVK527/LEDs.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/EVK527/LEDs.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/JMDBU2/Board.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/JMDBU2/Board.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/JMDBU2/Board.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/JMDBU2/Board.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/JMDBU2/Buttons.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/JMDBU2/Buttons.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/JMDBU2/Buttons.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/JMDBU2/Buttons.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/JMDBU2/LEDs.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/JMDBU2/LEDs.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/JMDBU2/LEDs.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/JMDBU2/LEDs.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/LEONARDO/Board.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/LEONARDO/Board.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/LEONARDO/Board.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/LEONARDO/Board.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/LEONARDO/LEDs.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/LEONARDO/LEDs.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/LEONARDO/LEDs.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/LEONARDO/LEDs.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/MAXIMUS/Board.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/MAXIMUS/Board.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/MAXIMUS/Board.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/MAXIMUS/Board.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/MAXIMUS/LEDs.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/MAXIMUS/LEDs.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/MAXIMUS/LEDs.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/MAXIMUS/LEDs.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/MICRO/Board.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/MICRO/Board.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/MICRO/Board.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/MICRO/Board.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/MICRO/LEDs.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/MICRO/LEDs.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/MICRO/LEDs.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/MICRO/LEDs.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/MICROPENDOUS/Board.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/MICROPENDOUS/Board.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/MICROPENDOUS/Board.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/MICROPENDOUS/Board.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/MICROPENDOUS/Buttons.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/MICROPENDOUS/Buttons.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/MICROPENDOUS/Buttons.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/MICROPENDOUS/Buttons.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/MICROPENDOUS/LEDs.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/MICROPENDOUS/LEDs.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/MICROPENDOUS/LEDs.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/MICROPENDOUS/LEDs.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/MICROSIN162/Board.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/MICROSIN162/Board.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/MICROSIN162/Board.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/MICROSIN162/Board.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/MICROSIN162/Buttons.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/MICROSIN162/Buttons.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/MICROSIN162/Buttons.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/MICROSIN162/Buttons.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/MICROSIN162/LEDs.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/MICROSIN162/LEDs.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/MICROSIN162/LEDs.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/MICROSIN162/LEDs.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/MINIMUS/Board.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/MINIMUS/Board.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/MINIMUS/Board.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/MINIMUS/Board.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/MINIMUS/Buttons.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/MINIMUS/Buttons.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/MINIMUS/Buttons.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/MINIMUS/Buttons.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/MINIMUS/LEDs.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/MINIMUS/LEDs.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/MINIMUS/LEDs.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/MINIMUS/LEDs.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/MULTIO/Board.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/MULTIO/Board.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/MULTIO/Board.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/MULTIO/Board.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/MULTIO/LEDs.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/MULTIO/LEDs.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/MULTIO/LEDs.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/MULTIO/LEDs.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/OLIMEX162/Board.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/OLIMEX162/Board.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/OLIMEX162/Board.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/OLIMEX162/Board.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/OLIMEX162/Buttons.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/OLIMEX162/Buttons.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/OLIMEX162/Buttons.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/OLIMEX162/Buttons.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/OLIMEX162/LEDs.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/OLIMEX162/LEDs.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/OLIMEX162/LEDs.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/OLIMEX162/LEDs.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/OLIMEX32U4/Board.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/OLIMEX32U4/Board.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/OLIMEX32U4/Board.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/OLIMEX32U4/Board.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/OLIMEX32U4/Buttons.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/OLIMEX32U4/Buttons.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/OLIMEX32U4/Buttons.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/OLIMEX32U4/Buttons.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/OLIMEX32U4/LEDs.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/OLIMEX32U4/LEDs.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/OLIMEX32U4/LEDs.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/OLIMEX32U4/LEDs.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/OLIMEXISPMK2/Board.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/OLIMEXISPMK2/Board.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/OLIMEXISPMK2/Board.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/OLIMEXISPMK2/Board.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/OLIMEXISPMK2/Buttons.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/OLIMEXISPMK2/Buttons.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/OLIMEXISPMK2/Buttons.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/OLIMEXISPMK2/Buttons.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/OLIMEXISPMK2/LEDs.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/OLIMEXISPMK2/LEDs.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/OLIMEXISPMK2/LEDs.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/OLIMEXISPMK2/LEDs.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/OLIMEXT32U4/Board.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/OLIMEXT32U4/Board.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/OLIMEXT32U4/Board.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/OLIMEXT32U4/Board.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/OLIMEXT32U4/Buttons.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/OLIMEXT32U4/Buttons.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/OLIMEXT32U4/Buttons.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/OLIMEXT32U4/Buttons.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/OLIMEXT32U4/LEDs.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/OLIMEXT32U4/LEDs.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/OLIMEXT32U4/LEDs.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/OLIMEXT32U4/LEDs.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/RZUSBSTICK/Board.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/RZUSBSTICK/Board.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/RZUSBSTICK/Board.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/RZUSBSTICK/Board.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/RZUSBSTICK/LEDs.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/RZUSBSTICK/LEDs.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/RZUSBSTICK/LEDs.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/RZUSBSTICK/LEDs.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/SPARKFUN8U2/Board.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/SPARKFUN8U2/Board.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/SPARKFUN8U2/Board.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/SPARKFUN8U2/Board.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/SPARKFUN8U2/LEDs.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/SPARKFUN8U2/LEDs.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/SPARKFUN8U2/LEDs.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/SPARKFUN8U2/LEDs.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/STANGE_ISP/Board.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/STANGE_ISP/Board.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/STANGE_ISP/Board.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/STANGE_ISP/Board.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/STANGE_ISP/Buttons.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/STANGE_ISP/Buttons.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/STANGE_ISP/Buttons.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/STANGE_ISP/Buttons.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/STANGE_ISP/LEDs.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/STANGE_ISP/LEDs.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/STANGE_ISP/LEDs.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/STANGE_ISP/LEDs.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/STK525/Board.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/STK525/Board.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/STK525/Board.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/STK525/Board.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/STK525/Buttons.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/STK525/Buttons.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/STK525/Buttons.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/STK525/Buttons.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/STK525/Dataflash.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/STK525/Dataflash.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/STK525/Dataflash.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/STK525/Dataflash.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/STK525/Joystick.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/STK525/Joystick.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/STK525/Joystick.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/STK525/Joystick.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/STK525/LEDs.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/STK525/LEDs.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/STK525/LEDs.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/STK525/LEDs.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/STK526/Board.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/STK526/Board.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/STK526/Board.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/STK526/Board.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/STK526/Buttons.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/STK526/Buttons.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/STK526/Buttons.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/STK526/Buttons.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/STK526/Dataflash.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/STK526/Dataflash.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/STK526/Dataflash.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/STK526/Dataflash.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/STK526/Joystick.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/STK526/Joystick.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/STK526/Joystick.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/STK526/Joystick.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/STK526/LEDs.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/STK526/LEDs.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/STK526/LEDs.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/STK526/LEDs.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/TEENSY/Board.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/TEENSY/Board.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/TEENSY/Board.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/TEENSY/Board.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/TEENSY/LEDs.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/TEENSY/LEDs.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/TEENSY/LEDs.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/TEENSY/LEDs.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/TUL/Board.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/TUL/Board.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/TUL/Board.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/TUL/Board.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/TUL/Buttons.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/TUL/Buttons.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/TUL/Buttons.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/TUL/Buttons.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/TUL/LEDs.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/TUL/LEDs.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/TUL/LEDs.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/TUL/LEDs.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/U2S/Board.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/U2S/Board.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/U2S/Board.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/U2S/Board.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/U2S/Buttons.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/U2S/Buttons.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/U2S/Buttons.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/U2S/Buttons.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/U2S/LEDs.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/U2S/LEDs.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/U2S/LEDs.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/U2S/LEDs.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/UDIP/Board.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/UDIP/Board.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/UDIP/Board.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/UDIP/Board.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/UDIP/Buttons.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/UDIP/Buttons.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/UDIP/Buttons.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/UDIP/Buttons.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/UDIP/LEDs.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/UDIP/LEDs.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/UDIP/LEDs.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/UDIP/LEDs.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/UNO/Board.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/UNO/Board.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/UNO/Board.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/UNO/Board.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/UNO/LEDs.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/UNO/LEDs.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/UNO/LEDs.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/UNO/LEDs.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/USB2AX/Board.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/USB2AX/Board.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/USB2AX/Board.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/USB2AX/Board.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/USB2AX/Buttons.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/USB2AX/Buttons.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/USB2AX/Buttons.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/USB2AX/Buttons.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/USB2AX/LEDs.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/USB2AX/LEDs.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/USB2AX/LEDs.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/USB2AX/LEDs.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/USBFOO/Board.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/USBFOO/Board.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/USBFOO/Board.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/USBFOO/Board.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/USBFOO/Buttons.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/USBFOO/Buttons.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/USBFOO/Buttons.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/USBFOO/Buttons.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/USBFOO/LEDs.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/USBFOO/LEDs.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/USBFOO/LEDs.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/USBFOO/LEDs.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/USBKEY/Board.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/USBKEY/Board.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/USBKEY/Board.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/USBKEY/Board.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/USBKEY/Buttons.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/USBKEY/Buttons.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/USBKEY/Buttons.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/USBKEY/Buttons.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/USBKEY/Dataflash.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/USBKEY/Dataflash.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/USBKEY/Dataflash.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/USBKEY/Dataflash.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/USBKEY/Joystick.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/USBKEY/Joystick.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/USBKEY/Joystick.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/USBKEY/Joystick.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/USBKEY/LEDs.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/USBKEY/LEDs.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/USBKEY/LEDs.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/USBKEY/LEDs.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/USBTINYMKII/Board.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/USBTINYMKII/Board.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/USBTINYMKII/Board.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/USBTINYMKII/Board.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/USBTINYMKII/Buttons.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/USBTINYMKII/Buttons.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/USBTINYMKII/Buttons.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/USBTINYMKII/Buttons.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/USBTINYMKII/LEDs.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/USBTINYMKII/LEDs.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/USBTINYMKII/LEDs.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/USBTINYMKII/LEDs.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/XPLAIN/Board.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/XPLAIN/Board.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/XPLAIN/Board.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/XPLAIN/Board.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/XPLAIN/Dataflash.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/XPLAIN/Dataflash.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/XPLAIN/Dataflash.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/XPLAIN/Dataflash.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/XPLAIN/LEDs.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/XPLAIN/LEDs.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/XPLAIN/LEDs.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/XPLAIN/LEDs.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/YUN/Board.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/YUN/Board.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/YUN/Board.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/YUN/Board.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/YUN/LEDs.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/YUN/LEDs.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/YUN/LEDs.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/AVR8/YUN/LEDs.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/Board.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/Board.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/Board.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/Board.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/Buttons.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/Buttons.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/Buttons.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/Buttons.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/Dataflash.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/Dataflash.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/Dataflash.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/Dataflash.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/Joystick.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/Joystick.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/Joystick.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/Joystick.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/LEDs.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/LEDs.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/LEDs.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/LEDs.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/Temperature.c b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/Temperature.c similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/Temperature.c rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/Temperature.c diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/Temperature.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/Temperature.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/Temperature.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/Temperature.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/UC3/EVK1100/Board.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/UC3/EVK1100/Board.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/UC3/EVK1100/Board.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/UC3/EVK1100/Board.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/UC3/EVK1100/Buttons.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/UC3/EVK1100/Buttons.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/UC3/EVK1100/Buttons.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/UC3/EVK1100/Buttons.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/UC3/EVK1100/Joystick.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/UC3/EVK1100/Joystick.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/UC3/EVK1100/Joystick.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/UC3/EVK1100/Joystick.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/UC3/EVK1100/LEDs.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/UC3/EVK1100/LEDs.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/UC3/EVK1100/LEDs.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/UC3/EVK1100/LEDs.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/UC3/EVK1101/Board.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/UC3/EVK1101/Board.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/UC3/EVK1101/Board.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/UC3/EVK1101/Board.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/UC3/EVK1101/Buttons.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/UC3/EVK1101/Buttons.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/UC3/EVK1101/Buttons.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/UC3/EVK1101/Buttons.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/UC3/EVK1101/Joystick.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/UC3/EVK1101/Joystick.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/UC3/EVK1101/Joystick.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/UC3/EVK1101/Joystick.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/UC3/EVK1101/LEDs.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/UC3/EVK1101/LEDs.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/UC3/EVK1101/LEDs.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/UC3/EVK1101/LEDs.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/UC3/EVK1104/Board.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/UC3/EVK1104/Board.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/UC3/EVK1104/Board.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/UC3/EVK1104/Board.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/UC3/EVK1104/Buttons.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/UC3/EVK1104/Buttons.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/UC3/EVK1104/Buttons.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/UC3/EVK1104/Buttons.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/UC3/EVK1104/LEDs.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/UC3/EVK1104/LEDs.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/UC3/EVK1104/LEDs.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/UC3/EVK1104/LEDs.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/UC3/UC3A3_XPLAINED/Board.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/UC3/UC3A3_XPLAINED/Board.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/UC3/UC3A3_XPLAINED/Board.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/UC3/UC3A3_XPLAINED/Board.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/UC3/UC3A3_XPLAINED/Buttons.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/UC3/UC3A3_XPLAINED/Buttons.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/UC3/UC3A3_XPLAINED/Buttons.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/UC3/UC3A3_XPLAINED/Buttons.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/UC3/UC3A3_XPLAINED/LEDs.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/UC3/UC3A3_XPLAINED/LEDs.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/UC3/UC3A3_XPLAINED/LEDs.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/UC3/UC3A3_XPLAINED/LEDs.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/XMEGA/A3BU_XPLAINED/Board.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/XMEGA/A3BU_XPLAINED/Board.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/XMEGA/A3BU_XPLAINED/Board.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/XMEGA/A3BU_XPLAINED/Board.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/XMEGA/A3BU_XPLAINED/Buttons.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/XMEGA/A3BU_XPLAINED/Buttons.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/XMEGA/A3BU_XPLAINED/Buttons.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/XMEGA/A3BU_XPLAINED/Buttons.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/XMEGA/A3BU_XPLAINED/Dataflash.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/XMEGA/A3BU_XPLAINED/Dataflash.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/XMEGA/A3BU_XPLAINED/Dataflash.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/XMEGA/A3BU_XPLAINED/Dataflash.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/XMEGA/A3BU_XPLAINED/LEDs.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/XMEGA/A3BU_XPLAINED/LEDs.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/XMEGA/A3BU_XPLAINED/LEDs.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/XMEGA/A3BU_XPLAINED/LEDs.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/XMEGA/B1_XPLAINED/Board.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/XMEGA/B1_XPLAINED/Board.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/XMEGA/B1_XPLAINED/Board.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/XMEGA/B1_XPLAINED/Board.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/XMEGA/B1_XPLAINED/Buttons.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/XMEGA/B1_XPLAINED/Buttons.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/XMEGA/B1_XPLAINED/Buttons.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/XMEGA/B1_XPLAINED/Buttons.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/XMEGA/B1_XPLAINED/Dataflash.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/XMEGA/B1_XPLAINED/Dataflash.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/XMEGA/B1_XPLAINED/Dataflash.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/XMEGA/B1_XPLAINED/Dataflash.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/XMEGA/B1_XPLAINED/LEDs.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/XMEGA/B1_XPLAINED/LEDs.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/XMEGA/B1_XPLAINED/LEDs.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/XMEGA/B1_XPLAINED/LEDs.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/XMEGA/C3_XPLAINED/Board.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/XMEGA/C3_XPLAINED/Board.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/XMEGA/C3_XPLAINED/Board.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/XMEGA/C3_XPLAINED/Board.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/XMEGA/C3_XPLAINED/Buttons.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/XMEGA/C3_XPLAINED/Buttons.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/XMEGA/C3_XPLAINED/Buttons.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/XMEGA/C3_XPLAINED/Buttons.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Board/XMEGA/C3_XPLAINED/LEDs.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Board/XMEGA/C3_XPLAINED/LEDs.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Board/XMEGA/C3_XPLAINED/LEDs.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Board/XMEGA/C3_XPLAINED/LEDs.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Misc/AT45DB321C.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Misc/AT45DB321C.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Misc/AT45DB321C.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Misc/AT45DB321C.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Misc/AT45DB642D.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Misc/AT45DB642D.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Misc/AT45DB642D.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Misc/AT45DB642D.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Misc/RingBuffer.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Misc/RingBuffer.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Misc/RingBuffer.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Misc/RingBuffer.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Misc/TerminalCodes.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Misc/TerminalCodes.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Misc/TerminalCodes.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Misc/TerminalCodes.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Peripheral/ADC.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Peripheral/ADC.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Peripheral/ADC.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Peripheral/ADC.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Peripheral/AVR8/ADC_AVR8.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Peripheral/AVR8/ADC_AVR8.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Peripheral/AVR8/ADC_AVR8.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Peripheral/AVR8/ADC_AVR8.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Peripheral/AVR8/SPI_AVR8.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Peripheral/AVR8/SPI_AVR8.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Peripheral/AVR8/SPI_AVR8.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Peripheral/AVR8/SPI_AVR8.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Peripheral/AVR8/SerialSPI_AVR8.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Peripheral/AVR8/SerialSPI_AVR8.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Peripheral/AVR8/SerialSPI_AVR8.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Peripheral/AVR8/SerialSPI_AVR8.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Peripheral/AVR8/Serial_AVR8.c b/tools/lufa-LUFA-140928/LUFA/Drivers/Peripheral/AVR8/Serial_AVR8.c similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Peripheral/AVR8/Serial_AVR8.c rename to tools/lufa-LUFA-140928/LUFA/Drivers/Peripheral/AVR8/Serial_AVR8.c diff --git a/lufa-LUFA-140928/LUFA/Drivers/Peripheral/AVR8/Serial_AVR8.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Peripheral/AVR8/Serial_AVR8.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Peripheral/AVR8/Serial_AVR8.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Peripheral/AVR8/Serial_AVR8.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Peripheral/AVR8/TWI_AVR8.c b/tools/lufa-LUFA-140928/LUFA/Drivers/Peripheral/AVR8/TWI_AVR8.c similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Peripheral/AVR8/TWI_AVR8.c rename to tools/lufa-LUFA-140928/LUFA/Drivers/Peripheral/AVR8/TWI_AVR8.c diff --git a/lufa-LUFA-140928/LUFA/Drivers/Peripheral/AVR8/TWI_AVR8.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Peripheral/AVR8/TWI_AVR8.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Peripheral/AVR8/TWI_AVR8.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Peripheral/AVR8/TWI_AVR8.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Peripheral/SPI.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Peripheral/SPI.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Peripheral/SPI.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Peripheral/SPI.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Peripheral/Serial.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Peripheral/Serial.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Peripheral/Serial.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Peripheral/Serial.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Peripheral/SerialSPI.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Peripheral/SerialSPI.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Peripheral/SerialSPI.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Peripheral/SerialSPI.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Peripheral/TWI.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Peripheral/TWI.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Peripheral/TWI.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Peripheral/TWI.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Peripheral/XMEGA/SPI_XMEGA.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Peripheral/XMEGA/SPI_XMEGA.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Peripheral/XMEGA/SPI_XMEGA.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Peripheral/XMEGA/SPI_XMEGA.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Peripheral/XMEGA/SerialSPI_XMEGA.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Peripheral/XMEGA/SerialSPI_XMEGA.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Peripheral/XMEGA/SerialSPI_XMEGA.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Peripheral/XMEGA/SerialSPI_XMEGA.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Peripheral/XMEGA/Serial_XMEGA.c b/tools/lufa-LUFA-140928/LUFA/Drivers/Peripheral/XMEGA/Serial_XMEGA.c similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Peripheral/XMEGA/Serial_XMEGA.c rename to tools/lufa-LUFA-140928/LUFA/Drivers/Peripheral/XMEGA/Serial_XMEGA.c diff --git a/lufa-LUFA-140928/LUFA/Drivers/Peripheral/XMEGA/Serial_XMEGA.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Peripheral/XMEGA/Serial_XMEGA.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Peripheral/XMEGA/Serial_XMEGA.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Peripheral/XMEGA/Serial_XMEGA.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/Peripheral/XMEGA/TWI_XMEGA.c b/tools/lufa-LUFA-140928/LUFA/Drivers/Peripheral/XMEGA/TWI_XMEGA.c similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Peripheral/XMEGA/TWI_XMEGA.c rename to tools/lufa-LUFA-140928/LUFA/Drivers/Peripheral/XMEGA/TWI_XMEGA.c diff --git a/lufa-LUFA-140928/LUFA/Drivers/Peripheral/XMEGA/TWI_XMEGA.h b/tools/lufa-LUFA-140928/LUFA/Drivers/Peripheral/XMEGA/TWI_XMEGA.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/Peripheral/XMEGA/TWI_XMEGA.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/Peripheral/XMEGA/TWI_XMEGA.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Class/AndroidAccessoryClass.h b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Class/AndroidAccessoryClass.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Class/AndroidAccessoryClass.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Class/AndroidAccessoryClass.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Class/AudioClass.h b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Class/AudioClass.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Class/AudioClass.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Class/AudioClass.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Class/CDCClass.h b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Class/CDCClass.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Class/CDCClass.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Class/CDCClass.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Common/AndroidAccessoryClassCommon.h b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Common/AndroidAccessoryClassCommon.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Class/Common/AndroidAccessoryClassCommon.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Common/AndroidAccessoryClassCommon.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Common/AudioClassCommon.h b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Common/AudioClassCommon.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Class/Common/AudioClassCommon.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Common/AudioClassCommon.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Common/CDCClassCommon.h b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Common/CDCClassCommon.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Class/Common/CDCClassCommon.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Common/CDCClassCommon.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Common/HIDClassCommon.h b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Common/HIDClassCommon.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Class/Common/HIDClassCommon.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Common/HIDClassCommon.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Common/HIDParser.c b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Common/HIDParser.c similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Class/Common/HIDParser.c rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Common/HIDParser.c diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Common/HIDParser.h b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Common/HIDParser.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Class/Common/HIDParser.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Common/HIDParser.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Common/HIDReportData.h b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Common/HIDReportData.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Class/Common/HIDReportData.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Common/HIDReportData.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Common/MIDIClassCommon.h b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Common/MIDIClassCommon.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Class/Common/MIDIClassCommon.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Common/MIDIClassCommon.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Common/MassStorageClassCommon.h b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Common/MassStorageClassCommon.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Class/Common/MassStorageClassCommon.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Common/MassStorageClassCommon.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Common/PrinterClassCommon.h b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Common/PrinterClassCommon.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Class/Common/PrinterClassCommon.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Common/PrinterClassCommon.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Common/RNDISClassCommon.h b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Common/RNDISClassCommon.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Class/Common/RNDISClassCommon.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Common/RNDISClassCommon.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Common/StillImageClassCommon.h b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Common/StillImageClassCommon.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Class/Common/StillImageClassCommon.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Common/StillImageClassCommon.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Device/AudioClassDevice.c b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Device/AudioClassDevice.c similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Class/Device/AudioClassDevice.c rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Device/AudioClassDevice.c diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Device/AudioClassDevice.h b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Device/AudioClassDevice.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Class/Device/AudioClassDevice.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Device/AudioClassDevice.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Device/CDCClassDevice.c b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Device/CDCClassDevice.c similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Class/Device/CDCClassDevice.c rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Device/CDCClassDevice.c diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Device/CDCClassDevice.h b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Device/CDCClassDevice.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Class/Device/CDCClassDevice.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Device/CDCClassDevice.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Device/HIDClassDevice.c b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Device/HIDClassDevice.c similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Class/Device/HIDClassDevice.c rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Device/HIDClassDevice.c diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Device/HIDClassDevice.h b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Device/HIDClassDevice.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Class/Device/HIDClassDevice.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Device/HIDClassDevice.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Device/MIDIClassDevice.c b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Device/MIDIClassDevice.c similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Class/Device/MIDIClassDevice.c rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Device/MIDIClassDevice.c diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Device/MIDIClassDevice.h b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Device/MIDIClassDevice.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Class/Device/MIDIClassDevice.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Device/MIDIClassDevice.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Device/MassStorageClassDevice.c b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Device/MassStorageClassDevice.c similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Class/Device/MassStorageClassDevice.c rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Device/MassStorageClassDevice.c diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Device/MassStorageClassDevice.h b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Device/MassStorageClassDevice.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Class/Device/MassStorageClassDevice.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Device/MassStorageClassDevice.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Device/PrinterClassDevice.c b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Device/PrinterClassDevice.c similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Class/Device/PrinterClassDevice.c rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Device/PrinterClassDevice.c diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Device/PrinterClassDevice.h b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Device/PrinterClassDevice.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Class/Device/PrinterClassDevice.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Device/PrinterClassDevice.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Device/RNDISClassDevice.c b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Device/RNDISClassDevice.c similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Class/Device/RNDISClassDevice.c rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Device/RNDISClassDevice.c diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Device/RNDISClassDevice.h b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Device/RNDISClassDevice.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Class/Device/RNDISClassDevice.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Device/RNDISClassDevice.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Class/HIDClass.h b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Class/HIDClass.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Class/HIDClass.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Class/HIDClass.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Host/AndroidAccessoryClassHost.c b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Host/AndroidAccessoryClassHost.c similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Class/Host/AndroidAccessoryClassHost.c rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Host/AndroidAccessoryClassHost.c diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Host/AndroidAccessoryClassHost.h b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Host/AndroidAccessoryClassHost.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Class/Host/AndroidAccessoryClassHost.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Host/AndroidAccessoryClassHost.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Host/AudioClassHost.c b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Host/AudioClassHost.c similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Class/Host/AudioClassHost.c rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Host/AudioClassHost.c diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Host/AudioClassHost.h b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Host/AudioClassHost.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Class/Host/AudioClassHost.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Host/AudioClassHost.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Host/CDCClassHost.c b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Host/CDCClassHost.c similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Class/Host/CDCClassHost.c rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Host/CDCClassHost.c diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Host/CDCClassHost.h b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Host/CDCClassHost.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Class/Host/CDCClassHost.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Host/CDCClassHost.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Host/HIDClassHost.c b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Host/HIDClassHost.c similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Class/Host/HIDClassHost.c rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Host/HIDClassHost.c diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Host/HIDClassHost.h b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Host/HIDClassHost.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Class/Host/HIDClassHost.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Host/HIDClassHost.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Host/MIDIClassHost.c b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Host/MIDIClassHost.c similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Class/Host/MIDIClassHost.c rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Host/MIDIClassHost.c diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Host/MIDIClassHost.h b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Host/MIDIClassHost.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Class/Host/MIDIClassHost.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Host/MIDIClassHost.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Host/MassStorageClassHost.c b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Host/MassStorageClassHost.c similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Class/Host/MassStorageClassHost.c rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Host/MassStorageClassHost.c diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Host/MassStorageClassHost.h b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Host/MassStorageClassHost.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Class/Host/MassStorageClassHost.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Host/MassStorageClassHost.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Host/PrinterClassHost.c b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Host/PrinterClassHost.c similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Class/Host/PrinterClassHost.c rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Host/PrinterClassHost.c diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Host/PrinterClassHost.h b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Host/PrinterClassHost.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Class/Host/PrinterClassHost.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Host/PrinterClassHost.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Host/RNDISClassHost.c b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Host/RNDISClassHost.c similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Class/Host/RNDISClassHost.c rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Host/RNDISClassHost.c diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Host/RNDISClassHost.h b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Host/RNDISClassHost.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Class/Host/RNDISClassHost.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Host/RNDISClassHost.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Host/StillImageClassHost.c b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Host/StillImageClassHost.c similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Class/Host/StillImageClassHost.c rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Host/StillImageClassHost.c diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Host/StillImageClassHost.h b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Host/StillImageClassHost.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Class/Host/StillImageClassHost.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Host/StillImageClassHost.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Class/MIDIClass.h b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Class/MIDIClass.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Class/MIDIClass.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Class/MIDIClass.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Class/MassStorageClass.h b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Class/MassStorageClass.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Class/MassStorageClass.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Class/MassStorageClass.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Class/PrinterClass.h b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Class/PrinterClass.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Class/PrinterClass.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Class/PrinterClass.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Class/RNDISClass.h b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Class/RNDISClass.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Class/RNDISClass.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Class/RNDISClass.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Class/StillImageClass.h b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Class/StillImageClass.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Class/StillImageClass.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Class/StillImageClass.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/Device_AVR8.c b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/Device_AVR8.c similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/Device_AVR8.c rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/Device_AVR8.c diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/Device_AVR8.h b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/Device_AVR8.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/Device_AVR8.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/Device_AVR8.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.c b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.c similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.c rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.c diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.h b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.c b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.c similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.c rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.c diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.h b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/Host_AVR8.c b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/Host_AVR8.c similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/Host_AVR8.c rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/Host_AVR8.c diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/Host_AVR8.h b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/Host_AVR8.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/Host_AVR8.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/Host_AVR8.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/OTG_AVR8.h b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/OTG_AVR8.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/OTG_AVR8.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/OTG_AVR8.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/PipeStream_AVR8.c b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/PipeStream_AVR8.c similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/PipeStream_AVR8.c rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/PipeStream_AVR8.c diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/PipeStream_AVR8.h b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/PipeStream_AVR8.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/PipeStream_AVR8.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/PipeStream_AVR8.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/Pipe_AVR8.c b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/Pipe_AVR8.c similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/Pipe_AVR8.c rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/Pipe_AVR8.c diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/Pipe_AVR8.h b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/Pipe_AVR8.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/Pipe_AVR8.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/Pipe_AVR8.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/Template/Template_Endpoint_Control_R.c b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/Template/Template_Endpoint_Control_R.c similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/Template/Template_Endpoint_Control_R.c rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/Template/Template_Endpoint_Control_R.c diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/Template/Template_Endpoint_Control_W.c b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/Template/Template_Endpoint_Control_W.c similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/Template/Template_Endpoint_Control_W.c rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/Template/Template_Endpoint_Control_W.c diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/Template/Template_Endpoint_RW.c b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/Template/Template_Endpoint_RW.c similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/Template/Template_Endpoint_RW.c rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/Template/Template_Endpoint_RW.c diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/Template/Template_Pipe_RW.c b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/Template/Template_Pipe_RW.c similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/Template/Template_Pipe_RW.c rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/Template/Template_Pipe_RW.c diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.c b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.c similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.c rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.c diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.h b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.c b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.c similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.c rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.c diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.h b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Core/ConfigDescriptors.c b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/ConfigDescriptors.c similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Core/ConfigDescriptors.c rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/ConfigDescriptors.c diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Core/ConfigDescriptors.h b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/ConfigDescriptors.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Core/ConfigDescriptors.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/ConfigDescriptors.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Core/Device.h b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/Device.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Core/Device.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/Device.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Core/DeviceStandardReq.c b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/DeviceStandardReq.c similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Core/DeviceStandardReq.c rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/DeviceStandardReq.c diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Core/DeviceStandardReq.h b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/DeviceStandardReq.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Core/DeviceStandardReq.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/DeviceStandardReq.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Core/Endpoint.h b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/Endpoint.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Core/Endpoint.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/Endpoint.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Core/EndpointStream.h b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/EndpointStream.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Core/EndpointStream.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/EndpointStream.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Core/Events.c b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/Events.c similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Core/Events.c rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/Events.c diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Core/Events.h b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/Events.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Core/Events.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/Events.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Core/Host.h b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/Host.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Core/Host.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/Host.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Core/HostStandardReq.c b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/HostStandardReq.c similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Core/HostStandardReq.c rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/HostStandardReq.c diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Core/HostStandardReq.h b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/HostStandardReq.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Core/HostStandardReq.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/HostStandardReq.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Core/OTG.h b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/OTG.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Core/OTG.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/OTG.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Core/Pipe.h b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/Pipe.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Core/Pipe.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/Pipe.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Core/PipeStream.h b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/PipeStream.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Core/PipeStream.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/PipeStream.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Core/StdDescriptors.h b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/StdDescriptors.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Core/StdDescriptors.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/StdDescriptors.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Core/StdRequestType.h b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/StdRequestType.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Core/StdRequestType.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/StdRequestType.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Core/UC3/Device_UC3.c b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/UC3/Device_UC3.c similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Core/UC3/Device_UC3.c rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/UC3/Device_UC3.c diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Core/UC3/Device_UC3.h b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/UC3/Device_UC3.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Core/UC3/Device_UC3.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/UC3/Device_UC3.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Core/UC3/EndpointStream_UC3.c b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/UC3/EndpointStream_UC3.c similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Core/UC3/EndpointStream_UC3.c rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/UC3/EndpointStream_UC3.c diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Core/UC3/EndpointStream_UC3.h b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/UC3/EndpointStream_UC3.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Core/UC3/EndpointStream_UC3.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/UC3/EndpointStream_UC3.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Core/UC3/Endpoint_UC3.c b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/UC3/Endpoint_UC3.c similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Core/UC3/Endpoint_UC3.c rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/UC3/Endpoint_UC3.c diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Core/UC3/Endpoint_UC3.h b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/UC3/Endpoint_UC3.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Core/UC3/Endpoint_UC3.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/UC3/Endpoint_UC3.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Core/UC3/Host_UC3.c b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/UC3/Host_UC3.c similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Core/UC3/Host_UC3.c rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/UC3/Host_UC3.c diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Core/UC3/Host_UC3.h b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/UC3/Host_UC3.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Core/UC3/Host_UC3.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/UC3/Host_UC3.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Core/UC3/PipeStream_UC3.c b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/UC3/PipeStream_UC3.c similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Core/UC3/PipeStream_UC3.c rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/UC3/PipeStream_UC3.c diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Core/UC3/PipeStream_UC3.h b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/UC3/PipeStream_UC3.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Core/UC3/PipeStream_UC3.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/UC3/PipeStream_UC3.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Core/UC3/Pipe_UC3.c b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/UC3/Pipe_UC3.c similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Core/UC3/Pipe_UC3.c rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/UC3/Pipe_UC3.c diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Core/UC3/Pipe_UC3.h b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/UC3/Pipe_UC3.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Core/UC3/Pipe_UC3.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/UC3/Pipe_UC3.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Core/UC3/Template/Template_Endpoint_Control_R.c b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/UC3/Template/Template_Endpoint_Control_R.c similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Core/UC3/Template/Template_Endpoint_Control_R.c rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/UC3/Template/Template_Endpoint_Control_R.c diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Core/UC3/Template/Template_Endpoint_Control_W.c b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/UC3/Template/Template_Endpoint_Control_W.c similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Core/UC3/Template/Template_Endpoint_Control_W.c rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/UC3/Template/Template_Endpoint_Control_W.c diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Core/UC3/Template/Template_Endpoint_RW.c b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/UC3/Template/Template_Endpoint_RW.c similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Core/UC3/Template/Template_Endpoint_RW.c rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/UC3/Template/Template_Endpoint_RW.c diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Core/UC3/Template/Template_Pipe_RW.c b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/UC3/Template/Template_Pipe_RW.c similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Core/UC3/Template/Template_Pipe_RW.c rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/UC3/Template/Template_Pipe_RW.c diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Core/UC3/USBController_UC3.c b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/UC3/USBController_UC3.c similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Core/UC3/USBController_UC3.c rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/UC3/USBController_UC3.c diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Core/UC3/USBController_UC3.h b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/UC3/USBController_UC3.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Core/UC3/USBController_UC3.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/UC3/USBController_UC3.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Core/UC3/USBInterrupt_UC3.c b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/UC3/USBInterrupt_UC3.c similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Core/UC3/USBInterrupt_UC3.c rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/UC3/USBInterrupt_UC3.c diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Core/UC3/USBInterrupt_UC3.h b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/UC3/USBInterrupt_UC3.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Core/UC3/USBInterrupt_UC3.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/UC3/USBInterrupt_UC3.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Core/USBController.h b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/USBController.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Core/USBController.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/USBController.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Core/USBInterrupt.h b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/USBInterrupt.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Core/USBInterrupt.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/USBInterrupt.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Core/USBMode.h b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/USBMode.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Core/USBMode.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/USBMode.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Core/USBTask.c b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/USBTask.c similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Core/USBTask.c rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/USBTask.c diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Core/USBTask.h b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/USBTask.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Core/USBTask.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/USBTask.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Core/XMEGA/Device_XMEGA.c b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/XMEGA/Device_XMEGA.c similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Core/XMEGA/Device_XMEGA.c rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/XMEGA/Device_XMEGA.c diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Core/XMEGA/Device_XMEGA.h b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/XMEGA/Device_XMEGA.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Core/XMEGA/Device_XMEGA.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/XMEGA/Device_XMEGA.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Core/XMEGA/EndpointStream_XMEGA.c b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/XMEGA/EndpointStream_XMEGA.c similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Core/XMEGA/EndpointStream_XMEGA.c rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/XMEGA/EndpointStream_XMEGA.c diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Core/XMEGA/EndpointStream_XMEGA.h b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/XMEGA/EndpointStream_XMEGA.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Core/XMEGA/EndpointStream_XMEGA.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/XMEGA/EndpointStream_XMEGA.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Core/XMEGA/Endpoint_XMEGA.c b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/XMEGA/Endpoint_XMEGA.c similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Core/XMEGA/Endpoint_XMEGA.c rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/XMEGA/Endpoint_XMEGA.c diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Core/XMEGA/Endpoint_XMEGA.h b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/XMEGA/Endpoint_XMEGA.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Core/XMEGA/Endpoint_XMEGA.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/XMEGA/Endpoint_XMEGA.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Core/XMEGA/Host_XMEGA.c b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/XMEGA/Host_XMEGA.c similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Core/XMEGA/Host_XMEGA.c rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/XMEGA/Host_XMEGA.c diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Core/XMEGA/PipeStream_XMEGA.c b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/XMEGA/PipeStream_XMEGA.c similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Core/XMEGA/PipeStream_XMEGA.c rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/XMEGA/PipeStream_XMEGA.c diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Core/XMEGA/Pipe_XMEGA.c b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/XMEGA/Pipe_XMEGA.c similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Core/XMEGA/Pipe_XMEGA.c rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/XMEGA/Pipe_XMEGA.c diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Core/XMEGA/Template/Template_Endpoint_Control_R.c b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/XMEGA/Template/Template_Endpoint_Control_R.c similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Core/XMEGA/Template/Template_Endpoint_Control_R.c rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/XMEGA/Template/Template_Endpoint_Control_R.c diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Core/XMEGA/Template/Template_Endpoint_Control_W.c b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/XMEGA/Template/Template_Endpoint_Control_W.c similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Core/XMEGA/Template/Template_Endpoint_Control_W.c rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/XMEGA/Template/Template_Endpoint_Control_W.c diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Core/XMEGA/Template/Template_Endpoint_RW.c b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/XMEGA/Template/Template_Endpoint_RW.c similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Core/XMEGA/Template/Template_Endpoint_RW.c rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/XMEGA/Template/Template_Endpoint_RW.c diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Core/XMEGA/USBController_XMEGA.c b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/XMEGA/USBController_XMEGA.c similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Core/XMEGA/USBController_XMEGA.c rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/XMEGA/USBController_XMEGA.c diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Core/XMEGA/USBController_XMEGA.h b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/XMEGA/USBController_XMEGA.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Core/XMEGA/USBController_XMEGA.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/XMEGA/USBController_XMEGA.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Core/XMEGA/USBInterrupt_XMEGA.c b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/XMEGA/USBInterrupt_XMEGA.c similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Core/XMEGA/USBInterrupt_XMEGA.c rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/XMEGA/USBInterrupt_XMEGA.c diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/Core/XMEGA/USBInterrupt_XMEGA.h b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/XMEGA/USBInterrupt_XMEGA.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/Core/XMEGA/USBInterrupt_XMEGA.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/XMEGA/USBInterrupt_XMEGA.h diff --git a/lufa-LUFA-140928/LUFA/Drivers/USB/USB.h b/tools/lufa-LUFA-140928/LUFA/Drivers/USB/USB.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Drivers/USB/USB.h rename to tools/lufa-LUFA-140928/LUFA/Drivers/USB/USB.h diff --git a/lufa-LUFA-140928/LUFA/License.txt b/tools/lufa-LUFA-140928/LUFA/License.txt similarity index 100% rename from lufa-LUFA-140928/LUFA/License.txt rename to tools/lufa-LUFA-140928/LUFA/License.txt diff --git a/lufa-LUFA-140928/LUFA/Platform/Platform.h b/tools/lufa-LUFA-140928/LUFA/Platform/Platform.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Platform/Platform.h rename to tools/lufa-LUFA-140928/LUFA/Platform/Platform.h diff --git a/lufa-LUFA-140928/LUFA/Platform/UC3/ClockManagement.h b/tools/lufa-LUFA-140928/LUFA/Platform/UC3/ClockManagement.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Platform/UC3/ClockManagement.h rename to tools/lufa-LUFA-140928/LUFA/Platform/UC3/ClockManagement.h diff --git a/lufa-LUFA-140928/LUFA/Platform/UC3/Exception.S b/tools/lufa-LUFA-140928/LUFA/Platform/UC3/Exception.S similarity index 100% rename from lufa-LUFA-140928/LUFA/Platform/UC3/Exception.S rename to tools/lufa-LUFA-140928/LUFA/Platform/UC3/Exception.S diff --git a/lufa-LUFA-140928/LUFA/Platform/UC3/InterruptManagement.c b/tools/lufa-LUFA-140928/LUFA/Platform/UC3/InterruptManagement.c similarity index 100% rename from lufa-LUFA-140928/LUFA/Platform/UC3/InterruptManagement.c rename to tools/lufa-LUFA-140928/LUFA/Platform/UC3/InterruptManagement.c diff --git a/lufa-LUFA-140928/LUFA/Platform/UC3/InterruptManagement.h b/tools/lufa-LUFA-140928/LUFA/Platform/UC3/InterruptManagement.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Platform/UC3/InterruptManagement.h rename to tools/lufa-LUFA-140928/LUFA/Platform/UC3/InterruptManagement.h diff --git a/lufa-LUFA-140928/LUFA/Platform/UC3/UC3ExperimentalInfo.txt b/tools/lufa-LUFA-140928/LUFA/Platform/UC3/UC3ExperimentalInfo.txt similarity index 100% rename from lufa-LUFA-140928/LUFA/Platform/UC3/UC3ExperimentalInfo.txt rename to tools/lufa-LUFA-140928/LUFA/Platform/UC3/UC3ExperimentalInfo.txt diff --git a/lufa-LUFA-140928/LUFA/Platform/XMEGA/ClockManagement.h b/tools/lufa-LUFA-140928/LUFA/Platform/XMEGA/ClockManagement.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Platform/XMEGA/ClockManagement.h rename to tools/lufa-LUFA-140928/LUFA/Platform/XMEGA/ClockManagement.h diff --git a/lufa-LUFA-140928/LUFA/Platform/XMEGA/XMEGAExperimentalInfo.txt b/tools/lufa-LUFA-140928/LUFA/Platform/XMEGA/XMEGAExperimentalInfo.txt similarity index 100% rename from lufa-LUFA-140928/LUFA/Platform/XMEGA/XMEGAExperimentalInfo.txt rename to tools/lufa-LUFA-140928/LUFA/Platform/XMEGA/XMEGAExperimentalInfo.txt diff --git a/lufa-LUFA-140928/LUFA/StudioIntegration/HV1/helpcontentsetup.msha b/tools/lufa-LUFA-140928/LUFA/StudioIntegration/HV1/helpcontentsetup.msha similarity index 100% rename from lufa-LUFA-140928/LUFA/StudioIntegration/HV1/helpcontentsetup.msha rename to tools/lufa-LUFA-140928/LUFA/StudioIntegration/HV1/helpcontentsetup.msha diff --git a/lufa-LUFA-140928/LUFA/StudioIntegration/HV1/lufa_docbook_transform.xslt b/tools/lufa-LUFA-140928/LUFA/StudioIntegration/HV1/lufa_docbook_transform.xslt similarity index 100% rename from lufa-LUFA-140928/LUFA/StudioIntegration/HV1/lufa_docbook_transform.xslt rename to tools/lufa-LUFA-140928/LUFA/StudioIntegration/HV1/lufa_docbook_transform.xslt diff --git a/lufa-LUFA-140928/LUFA/StudioIntegration/HV1/lufa_helpcontentsetup_transform.xslt b/tools/lufa-LUFA-140928/LUFA/StudioIntegration/HV1/lufa_helpcontentsetup_transform.xslt similarity index 100% rename from lufa-LUFA-140928/LUFA/StudioIntegration/HV1/lufa_helpcontentsetup_transform.xslt rename to tools/lufa-LUFA-140928/LUFA/StudioIntegration/HV1/lufa_helpcontentsetup_transform.xslt diff --git a/lufa-LUFA-140928/LUFA/StudioIntegration/HV1/lufa_hv1_transform.xslt b/tools/lufa-LUFA-140928/LUFA/StudioIntegration/HV1/lufa_hv1_transform.xslt similarity index 100% rename from lufa-LUFA-140928/LUFA/StudioIntegration/HV1/lufa_hv1_transform.xslt rename to tools/lufa-LUFA-140928/LUFA/StudioIntegration/HV1/lufa_hv1_transform.xslt diff --git a/lufa-LUFA-140928/LUFA/StudioIntegration/HV1/lufa_studio_help_styling.css b/tools/lufa-LUFA-140928/LUFA/StudioIntegration/HV1/lufa_studio_help_styling.css similarity index 100% rename from lufa-LUFA-140928/LUFA/StudioIntegration/HV1/lufa_studio_help_styling.css rename to tools/lufa-LUFA-140928/LUFA/StudioIntegration/HV1/lufa_studio_help_styling.css diff --git a/lufa-LUFA-140928/LUFA/StudioIntegration/VSIX/LUFA.dll b/tools/lufa-LUFA-140928/LUFA/StudioIntegration/VSIX/LUFA.dll similarity index 100% rename from lufa-LUFA-140928/LUFA/StudioIntegration/VSIX/LUFA.dll rename to tools/lufa-LUFA-140928/LUFA/StudioIntegration/VSIX/LUFA.dll diff --git a/lufa-LUFA-140928/LUFA/StudioIntegration/VSIX/LUFA.pkgdef b/tools/lufa-LUFA-140928/LUFA/StudioIntegration/VSIX/LUFA.pkgdef similarity index 100% rename from lufa-LUFA-140928/LUFA/StudioIntegration/VSIX/LUFA.pkgdef rename to tools/lufa-LUFA-140928/LUFA/StudioIntegration/VSIX/LUFA.pkgdef diff --git a/lufa-LUFA-140928/LUFA/StudioIntegration/VSIX/[Content_Types].xml b/tools/lufa-LUFA-140928/LUFA/StudioIntegration/VSIX/[Content_Types].xml similarity index 100% rename from lufa-LUFA-140928/LUFA/StudioIntegration/VSIX/[Content_Types].xml rename to tools/lufa-LUFA-140928/LUFA/StudioIntegration/VSIX/[Content_Types].xml diff --git a/lufa-LUFA-140928/LUFA/StudioIntegration/VSIX/asf-manifest.xml b/tools/lufa-LUFA-140928/LUFA/StudioIntegration/VSIX/asf-manifest.xml similarity index 100% rename from lufa-LUFA-140928/LUFA/StudioIntegration/VSIX/asf-manifest.xml rename to tools/lufa-LUFA-140928/LUFA/StudioIntegration/VSIX/asf-manifest.xml diff --git a/lufa-LUFA-140928/LUFA/StudioIntegration/VSIX/extension.vsixmanifest b/tools/lufa-LUFA-140928/LUFA/StudioIntegration/VSIX/extension.vsixmanifest similarity index 100% rename from lufa-LUFA-140928/LUFA/StudioIntegration/VSIX/extension.vsixmanifest rename to tools/lufa-LUFA-140928/LUFA/StudioIntegration/VSIX/extension.vsixmanifest diff --git a/lufa-LUFA-140928/LUFA/StudioIntegration/VSIX/generate_caches.py b/tools/lufa-LUFA-140928/LUFA/StudioIntegration/VSIX/generate_caches.py similarity index 100% rename from lufa-LUFA-140928/LUFA/StudioIntegration/VSIX/generate_caches.py rename to tools/lufa-LUFA-140928/LUFA/StudioIntegration/VSIX/generate_caches.py diff --git a/lufa-LUFA-140928/LUFA/StudioIntegration/VSIX/lufa_asfmanifest_transform.xslt b/tools/lufa-LUFA-140928/LUFA/StudioIntegration/VSIX/lufa_asfmanifest_transform.xslt similarity index 100% rename from lufa-LUFA-140928/LUFA/StudioIntegration/VSIX/lufa_asfmanifest_transform.xslt rename to tools/lufa-LUFA-140928/LUFA/StudioIntegration/VSIX/lufa_asfmanifest_transform.xslt diff --git a/lufa-LUFA-140928/LUFA/StudioIntegration/VSIX/lufa_vsmanifest_transform.xslt b/tools/lufa-LUFA-140928/LUFA/StudioIntegration/VSIX/lufa_vsmanifest_transform.xslt similarity index 100% rename from lufa-LUFA-140928/LUFA/StudioIntegration/VSIX/lufa_vsmanifest_transform.xslt rename to tools/lufa-LUFA-140928/LUFA/StudioIntegration/VSIX/lufa_vsmanifest_transform.xslt diff --git a/lufa-LUFA-140928/LUFA/StudioIntegration/XDK/lufa_extension_transform.xslt b/tools/lufa-LUFA-140928/LUFA/StudioIntegration/XDK/lufa_extension_transform.xslt similarity index 100% rename from lufa-LUFA-140928/LUFA/StudioIntegration/XDK/lufa_extension_transform.xslt rename to tools/lufa-LUFA-140928/LUFA/StudioIntegration/XDK/lufa_extension_transform.xslt diff --git a/lufa-LUFA-140928/LUFA/StudioIntegration/XDK/lufa_filelist_transform.xslt b/tools/lufa-LUFA-140928/LUFA/StudioIntegration/XDK/lufa_filelist_transform.xslt similarity index 100% rename from lufa-LUFA-140928/LUFA/StudioIntegration/XDK/lufa_filelist_transform.xslt rename to tools/lufa-LUFA-140928/LUFA/StudioIntegration/XDK/lufa_filelist_transform.xslt diff --git a/lufa-LUFA-140928/LUFA/StudioIntegration/XDK/lufa_indent_transform.xslt b/tools/lufa-LUFA-140928/LUFA/StudioIntegration/XDK/lufa_indent_transform.xslt similarity index 100% rename from lufa-LUFA-140928/LUFA/StudioIntegration/XDK/lufa_indent_transform.xslt rename to tools/lufa-LUFA-140928/LUFA/StudioIntegration/XDK/lufa_indent_transform.xslt diff --git a/lufa-LUFA-140928/LUFA/StudioIntegration/XDK/lufa_module_transform.xslt b/tools/lufa-LUFA-140928/LUFA/StudioIntegration/XDK/lufa_module_transform.xslt similarity index 100% rename from lufa-LUFA-140928/LUFA/StudioIntegration/XDK/lufa_module_transform.xslt rename to tools/lufa-LUFA-140928/LUFA/StudioIntegration/XDK/lufa_module_transform.xslt diff --git a/lufa-LUFA-140928/LUFA/StudioIntegration/lufa.xml b/tools/lufa-LUFA-140928/LUFA/StudioIntegration/lufa.xml similarity index 100% rename from lufa-LUFA-140928/LUFA/StudioIntegration/lufa.xml rename to tools/lufa-LUFA-140928/LUFA/StudioIntegration/lufa.xml diff --git a/lufa-LUFA-140928/LUFA/StudioIntegration/lufa_common.xml b/tools/lufa-LUFA-140928/LUFA/StudioIntegration/lufa_common.xml similarity index 100% rename from lufa-LUFA-140928/LUFA/StudioIntegration/lufa_common.xml rename to tools/lufa-LUFA-140928/LUFA/StudioIntegration/lufa_common.xml diff --git a/lufa-LUFA-140928/LUFA/StudioIntegration/lufa_drivers_board.xml b/tools/lufa-LUFA-140928/LUFA/StudioIntegration/lufa_drivers_board.xml similarity index 100% rename from lufa-LUFA-140928/LUFA/StudioIntegration/lufa_drivers_board.xml rename to tools/lufa-LUFA-140928/LUFA/StudioIntegration/lufa_drivers_board.xml diff --git a/lufa-LUFA-140928/LUFA/StudioIntegration/lufa_drivers_board_names.xml b/tools/lufa-LUFA-140928/LUFA/StudioIntegration/lufa_drivers_board_names.xml similarity index 100% rename from lufa-LUFA-140928/LUFA/StudioIntegration/lufa_drivers_board_names.xml rename to tools/lufa-LUFA-140928/LUFA/StudioIntegration/lufa_drivers_board_names.xml diff --git a/lufa-LUFA-140928/LUFA/StudioIntegration/lufa_drivers_misc.xml b/tools/lufa-LUFA-140928/LUFA/StudioIntegration/lufa_drivers_misc.xml similarity index 100% rename from lufa-LUFA-140928/LUFA/StudioIntegration/lufa_drivers_misc.xml rename to tools/lufa-LUFA-140928/LUFA/StudioIntegration/lufa_drivers_misc.xml diff --git a/lufa-LUFA-140928/LUFA/StudioIntegration/lufa_drivers_peripheral.xml b/tools/lufa-LUFA-140928/LUFA/StudioIntegration/lufa_drivers_peripheral.xml similarity index 100% rename from lufa-LUFA-140928/LUFA/StudioIntegration/lufa_drivers_peripheral.xml rename to tools/lufa-LUFA-140928/LUFA/StudioIntegration/lufa_drivers_peripheral.xml diff --git a/lufa-LUFA-140928/LUFA/StudioIntegration/lufa_drivers_usb.xml b/tools/lufa-LUFA-140928/LUFA/StudioIntegration/lufa_drivers_usb.xml similarity index 100% rename from lufa-LUFA-140928/LUFA/StudioIntegration/lufa_drivers_usb.xml rename to tools/lufa-LUFA-140928/LUFA/StudioIntegration/lufa_drivers_usb.xml diff --git a/lufa-LUFA-140928/LUFA/StudioIntegration/lufa_drivers_usb_class.xml b/tools/lufa-LUFA-140928/LUFA/StudioIntegration/lufa_drivers_usb_class.xml similarity index 100% rename from lufa-LUFA-140928/LUFA/StudioIntegration/lufa_drivers_usb_class.xml rename to tools/lufa-LUFA-140928/LUFA/StudioIntegration/lufa_drivers_usb_class.xml diff --git a/lufa-LUFA-140928/LUFA/StudioIntegration/lufa_drivers_usb_class_android.xml b/tools/lufa-LUFA-140928/LUFA/StudioIntegration/lufa_drivers_usb_class_android.xml similarity index 100% rename from lufa-LUFA-140928/LUFA/StudioIntegration/lufa_drivers_usb_class_android.xml rename to tools/lufa-LUFA-140928/LUFA/StudioIntegration/lufa_drivers_usb_class_android.xml diff --git a/lufa-LUFA-140928/LUFA/StudioIntegration/lufa_drivers_usb_class_audio.xml b/tools/lufa-LUFA-140928/LUFA/StudioIntegration/lufa_drivers_usb_class_audio.xml similarity index 100% rename from lufa-LUFA-140928/LUFA/StudioIntegration/lufa_drivers_usb_class_audio.xml rename to tools/lufa-LUFA-140928/LUFA/StudioIntegration/lufa_drivers_usb_class_audio.xml diff --git a/lufa-LUFA-140928/LUFA/StudioIntegration/lufa_drivers_usb_class_cdc.xml b/tools/lufa-LUFA-140928/LUFA/StudioIntegration/lufa_drivers_usb_class_cdc.xml similarity index 100% rename from lufa-LUFA-140928/LUFA/StudioIntegration/lufa_drivers_usb_class_cdc.xml rename to tools/lufa-LUFA-140928/LUFA/StudioIntegration/lufa_drivers_usb_class_cdc.xml diff --git a/lufa-LUFA-140928/LUFA/StudioIntegration/lufa_drivers_usb_class_hid.xml b/tools/lufa-LUFA-140928/LUFA/StudioIntegration/lufa_drivers_usb_class_hid.xml similarity index 100% rename from lufa-LUFA-140928/LUFA/StudioIntegration/lufa_drivers_usb_class_hid.xml rename to tools/lufa-LUFA-140928/LUFA/StudioIntegration/lufa_drivers_usb_class_hid.xml diff --git a/lufa-LUFA-140928/LUFA/StudioIntegration/lufa_drivers_usb_class_midi.xml b/tools/lufa-LUFA-140928/LUFA/StudioIntegration/lufa_drivers_usb_class_midi.xml similarity index 100% rename from lufa-LUFA-140928/LUFA/StudioIntegration/lufa_drivers_usb_class_midi.xml rename to tools/lufa-LUFA-140928/LUFA/StudioIntegration/lufa_drivers_usb_class_midi.xml diff --git a/lufa-LUFA-140928/LUFA/StudioIntegration/lufa_drivers_usb_class_ms.xml b/tools/lufa-LUFA-140928/LUFA/StudioIntegration/lufa_drivers_usb_class_ms.xml similarity index 100% rename from lufa-LUFA-140928/LUFA/StudioIntegration/lufa_drivers_usb_class_ms.xml rename to tools/lufa-LUFA-140928/LUFA/StudioIntegration/lufa_drivers_usb_class_ms.xml diff --git a/lufa-LUFA-140928/LUFA/StudioIntegration/lufa_drivers_usb_class_printer.xml b/tools/lufa-LUFA-140928/LUFA/StudioIntegration/lufa_drivers_usb_class_printer.xml similarity index 100% rename from lufa-LUFA-140928/LUFA/StudioIntegration/lufa_drivers_usb_class_printer.xml rename to tools/lufa-LUFA-140928/LUFA/StudioIntegration/lufa_drivers_usb_class_printer.xml diff --git a/lufa-LUFA-140928/LUFA/StudioIntegration/lufa_drivers_usb_class_rndis.xml b/tools/lufa-LUFA-140928/LUFA/StudioIntegration/lufa_drivers_usb_class_rndis.xml similarity index 100% rename from lufa-LUFA-140928/LUFA/StudioIntegration/lufa_drivers_usb_class_rndis.xml rename to tools/lufa-LUFA-140928/LUFA/StudioIntegration/lufa_drivers_usb_class_rndis.xml diff --git a/lufa-LUFA-140928/LUFA/StudioIntegration/lufa_drivers_usb_class_si.xml b/tools/lufa-LUFA-140928/LUFA/StudioIntegration/lufa_drivers_usb_class_si.xml similarity index 100% rename from lufa-LUFA-140928/LUFA/StudioIntegration/lufa_drivers_usb_class_si.xml rename to tools/lufa-LUFA-140928/LUFA/StudioIntegration/lufa_drivers_usb_class_si.xml diff --git a/lufa-LUFA-140928/LUFA/StudioIntegration/lufa_drivers_usb_core.xml b/tools/lufa-LUFA-140928/LUFA/StudioIntegration/lufa_drivers_usb_core.xml similarity index 100% rename from lufa-LUFA-140928/LUFA/StudioIntegration/lufa_drivers_usb_core.xml rename to tools/lufa-LUFA-140928/LUFA/StudioIntegration/lufa_drivers_usb_core.xml diff --git a/lufa-LUFA-140928/LUFA/StudioIntegration/lufa_drivers_usb_core_avr8.xml b/tools/lufa-LUFA-140928/LUFA/StudioIntegration/lufa_drivers_usb_core_avr8.xml similarity index 100% rename from lufa-LUFA-140928/LUFA/StudioIntegration/lufa_drivers_usb_core_avr8.xml rename to tools/lufa-LUFA-140928/LUFA/StudioIntegration/lufa_drivers_usb_core_avr8.xml diff --git a/lufa-LUFA-140928/LUFA/StudioIntegration/lufa_drivers_usb_core_uc3.xml b/tools/lufa-LUFA-140928/LUFA/StudioIntegration/lufa_drivers_usb_core_uc3.xml similarity index 100% rename from lufa-LUFA-140928/LUFA/StudioIntegration/lufa_drivers_usb_core_uc3.xml rename to tools/lufa-LUFA-140928/LUFA/StudioIntegration/lufa_drivers_usb_core_uc3.xml diff --git a/lufa-LUFA-140928/LUFA/StudioIntegration/lufa_drivers_usb_core_xmega.xml b/tools/lufa-LUFA-140928/LUFA/StudioIntegration/lufa_drivers_usb_core_xmega.xml similarity index 100% rename from lufa-LUFA-140928/LUFA/StudioIntegration/lufa_drivers_usb_core_xmega.xml rename to tools/lufa-LUFA-140928/LUFA/StudioIntegration/lufa_drivers_usb_core_xmega.xml diff --git a/lufa-LUFA-140928/LUFA/StudioIntegration/lufa_platform.xml b/tools/lufa-LUFA-140928/LUFA/StudioIntegration/lufa_platform.xml similarity index 100% rename from lufa-LUFA-140928/LUFA/StudioIntegration/lufa_platform.xml rename to tools/lufa-LUFA-140928/LUFA/StudioIntegration/lufa_platform.xml diff --git a/lufa-LUFA-140928/LUFA/StudioIntegration/lufa_platform_uc3.xml b/tools/lufa-LUFA-140928/LUFA/StudioIntegration/lufa_platform_uc3.xml similarity index 100% rename from lufa-LUFA-140928/LUFA/StudioIntegration/lufa_platform_uc3.xml rename to tools/lufa-LUFA-140928/LUFA/StudioIntegration/lufa_platform_uc3.xml diff --git a/lufa-LUFA-140928/LUFA/StudioIntegration/lufa_platform_xmega.xml b/tools/lufa-LUFA-140928/LUFA/StudioIntegration/lufa_platform_xmega.xml similarity index 100% rename from lufa-LUFA-140928/LUFA/StudioIntegration/lufa_platform_xmega.xml rename to tools/lufa-LUFA-140928/LUFA/StudioIntegration/lufa_platform_xmega.xml diff --git a/lufa-LUFA-140928/LUFA/StudioIntegration/lufa_toolchain.xml b/tools/lufa-LUFA-140928/LUFA/StudioIntegration/lufa_toolchain.xml similarity index 100% rename from lufa-LUFA-140928/LUFA/StudioIntegration/lufa_toolchain.xml rename to tools/lufa-LUFA-140928/LUFA/StudioIntegration/lufa_toolchain.xml diff --git a/lufa-LUFA-140928/LUFA/StudioIntegration/makefile b/tools/lufa-LUFA-140928/LUFA/StudioIntegration/makefile similarity index 100% rename from lufa-LUFA-140928/LUFA/StudioIntegration/makefile rename to tools/lufa-LUFA-140928/LUFA/StudioIntegration/makefile diff --git a/lufa-LUFA-140928/LUFA/Version.h b/tools/lufa-LUFA-140928/LUFA/Version.h similarity index 100% rename from lufa-LUFA-140928/LUFA/Version.h rename to tools/lufa-LUFA-140928/LUFA/Version.h diff --git a/lufa-LUFA-140928/LUFA/doxyfile b/tools/lufa-LUFA-140928/LUFA/doxyfile similarity index 100% rename from lufa-LUFA-140928/LUFA/doxyfile rename to tools/lufa-LUFA-140928/LUFA/doxyfile diff --git a/lufa-LUFA-140928/LUFA/makefile b/tools/lufa-LUFA-140928/LUFA/makefile similarity index 100% rename from lufa-LUFA-140928/LUFA/makefile rename to tools/lufa-LUFA-140928/LUFA/makefile diff --git a/lufa-LUFA-140928/README.txt b/tools/lufa-LUFA-140928/README.txt similarity index 100% rename from lufa-LUFA-140928/README.txt rename to tools/lufa-LUFA-140928/README.txt diff --git a/lufa-LUFA-140928/makefile b/tools/lufa-LUFA-140928/makefile similarity index 100% rename from lufa-LUFA-140928/makefile rename to tools/lufa-LUFA-140928/makefile From 59f5305bb77243d8e44cd3774f022f0318dd0bd2 Mon Sep 17 00:00:00 2001 From: Nico Date: Wed, 11 Feb 2015 17:02:54 +0100 Subject: [PATCH 02/28] Prepare for HID bridge also added 1200 serial touch to enter 328 programming mode. You no longer need to double tab the reset when a 16u2 sketch is running! --- Readme.md | 6 ++- avr/boards.txt | 95 ++++++++++++++++++++++++++++++++++++++++++++++++ avr/platform.txt | 2 +- 3 files changed, 101 insertions(+), 2 deletions(-) diff --git a/Readme.md b/Readme.md index 9916c37..a7bff40 100644 --- a/Readme.md +++ b/Readme.md @@ -1,4 +1,4 @@ -HoodLoader2.0.3 +HoodLoader2.0.4 =============== ![header](header.jpg) @@ -57,6 +57,10 @@ www.nicohood.de Version History =============== ``` +2.0.4 Release (xx.xx.2015) +* added HID-Project 2.2 compatibility +* added boards.txt for Uno/Mega + HID-Bridge + 2.0.3 Release (28.01.2015) * added HID Project 2.1 board definition compatibility * fixed usb flag pass via boards.txt (instead of pins_arduino.h) diff --git a/avr/boards.txt b/avr/boards.txt index 1c6f90b..953a2de 100644 --- a/avr/boards.txt +++ b/avr/boards.txt @@ -300,3 +300,98 @@ HoodLoader2atmega16u2DFU.menu.board.uno.bootloader.file=HoodLoader2/Arduino-COMB HoodLoader2atmega16u2DFU.menu.board.mega2560=HoodLoader2 Mega HoodLoader2atmega16u2DFU.menu.board.mega2560.bootloader.file=HoodLoader2/Arduino-COMBINED-dfu-usbserial-atmega16u2-Mega2560-Rev3.hex + +############################################################## + + +uno.name=Arduino Uno HID-Bridge + +uno.vid.0=0x2341 +uno.pid.0=0x0043 +uno.vid.1=0x2341 +uno.pid.1=0x0001 + +uno.upload.tool=arduino:avrdude +uno.upload.protocol=arduino +uno.upload.maximum_size=32256 +uno.upload.maximum_data_size=2048 +uno.upload.speed=115200 +uno.upload.use_1200bps_touch=true +uno.upload.wait_for_upload_port=true + +uno.bootloader.tool=arduino:avrdude +uno.bootloader.low_fuses=0xFF +uno.bootloader.high_fuses=0xDE +uno.bootloader.extended_fuses=0x05 +uno.bootloader.unlock_bits=0x3F +uno.bootloader.lock_bits=0x0F +uno.bootloader.file=arduino:optiboot/optiboot_atmega328.hex + +uno.build.mcu=atmega328p +uno.build.f_cpu=8000000L +uno.build.board=AVR_UNO +uno.build.core=HID:hid + +#USB core selection +#HID Project needs to be installed https://github.com/NicoHood/HID +uno.menu.usbcore.hid=Serial + Extended HID +uno.menu.usbcore.hid.build.variant=standard_hid +uno.menu.usbcore.gamepad=Serial + Gamepad HID +uno.menu.usbcore.gamepad.build.variant=standard_gamepad +uno.menu.usbcore.custom=Serial + Custom HID +uno.menu.usbcore.custom.build.variant=standard_custom +uno.menu.usbcore.NO_USB=Default Core +uno.menu.usbcore.NO_USB.build.variant=standard + + +############################################################## + + +mega.name=Arduino Mega 2560 HID-Bridge + +mega.vid.0=0x2341 +mega.pid.0=0x0010 +mega.vid.1=0x2341 +mega.pid.1=0x0042 + +mega.upload.tool=arduino:avrdude +mega.upload.maximum_data_size=8192 +mega.upload.use_1200bps_touch=true +mega.upload.wait_for_upload_port=true + +mega.bootloader.tool=arduino:avrdude +mega.bootloader.low_fuses=0xFF +mega.bootloader.unlock_bits=0x3F +mega.bootloader.lock_bits=0x0F + +mega.build.f_cpu=16000000L +mega.build.core=HID:hid +# default board may be overridden by the cpu menu +mega.build.board=AVR_MEGA2560 + +## Arduino Mega w/ ATmega2560 +## ------------------------- + +mega.upload.protocol=wiring +mega.upload.maximum_size=253952 +mega.upload.speed=115200 + +mega.bootloader.high_fuses=0xD8 +mega.bootloader.extended_fuses=0xFD +mega.bootloader.file=arduino:stk500v2/stk500boot_v2_mega2560.hex + +mega.build.mcu=atmega2560 +mega.build.board=AVR_MEGA2560 + +#USB core selection +#HID Project needs to be installed https://github.com/NicoHood/HID +mega.menu.usbcore.hid=Serial + Extended HID +mega.menu.usbcore.hid.build.variant=mega_hid +mega.menu.usbcore.gamepad=Serial + Gamepad HID +mega.menu.usbcore.gamepad.build.variant=mega_gamepad +mega.menu.usbcore.custom=Serial + Custom HID +mega.menu.usbcore.custom.build.variant=mega_custom +mega.menu.usbcore.NO_USB=Default Core +mega.menu.usbcore.NO_USB.build.variant=mega + + diff --git a/avr/platform.txt b/avr/platform.txt index c58e855..2e82109 100644 --- a/avr/platform.txt +++ b/avr/platform.txt @@ -6,4 +6,4 @@ # https://github.com/arduino/Arduino/wiki/Arduino-IDE-1.5---3rd-party-Hardware-specification name=Arduino Hoodloader2 -version=2.0.3 +version=2.0.4 From 7582e4284c4ecfa27d10d7a81e4aa2e571666093 Mon Sep 17 00:00:00 2001 From: Nico Date: Wed, 11 Feb 2015 17:05:41 +0100 Subject: [PATCH 03/28] Added pin definition dups for HID Bridge forgot in last commit... --- avr/variants/mega/pins_arduino.h | 389 +++++++++++++++++++ avr/variants/mega_custom/pins_arduino.h | 169 ++++++++ avr/variants/mega_gamepad/pins_arduino.h | 38 ++ avr/variants/mega_hid/pins_arduino.h | 38 ++ avr/variants/standard/pins_arduino.h | 238 ++++++++++++ avr/variants/standard_custom/pins_arduino.h | 169 ++++++++ avr/variants/standard_gamepad/pins_arduino.h | 38 ++ avr/variants/standard_hid/pins_arduino.h | 38 ++ 8 files changed, 1117 insertions(+) create mode 100644 avr/variants/mega/pins_arduino.h create mode 100644 avr/variants/mega_custom/pins_arduino.h create mode 100644 avr/variants/mega_gamepad/pins_arduino.h create mode 100644 avr/variants/mega_hid/pins_arduino.h create mode 100644 avr/variants/standard/pins_arduino.h create mode 100644 avr/variants/standard_custom/pins_arduino.h create mode 100644 avr/variants/standard_gamepad/pins_arduino.h create mode 100644 avr/variants/standard_hid/pins_arduino.h diff --git a/avr/variants/mega/pins_arduino.h b/avr/variants/mega/pins_arduino.h new file mode 100644 index 0000000..a80991b --- /dev/null +++ b/avr/variants/mega/pins_arduino.h @@ -0,0 +1,389 @@ +/* + pins_arduino.h - Pin definition functions for Arduino + Part of Arduino - http://www.arduino.cc/ + + Copyright (c) 2007 David A. Mellis + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General + Public License along with this library; if not, write to the + Free Software Foundation, Inc., 59 Temple Place, Suite 330, + Boston, MA 02111-1307 USA + + $Id: wiring.h 249 2007-02-03 16:52:51Z mellis $ +*/ + +#ifndef Pins_Arduino_h +#define Pins_Arduino_h + +#include + +#define NUM_DIGITAL_PINS 70 +#define NUM_ANALOG_INPUTS 16 +#define analogInputToDigitalPin(p) ((p < 16) ? (p) + 54 : -1) +#define digitalPinHasPWM(p) (((p) >= 2 && (p) <= 13) || ((p) >= 44 && (p)<= 46)) + +static const uint8_t SS = 53; +static const uint8_t MOSI = 51; +static const uint8_t MISO = 50; +static const uint8_t SCK = 52; + +static const uint8_t SDA = 20; +static const uint8_t SCL = 21; +#define LED_BUILTIN 13 + +static const uint8_t A0 = 54; +static const uint8_t A1 = 55; +static const uint8_t A2 = 56; +static const uint8_t A3 = 57; +static const uint8_t A4 = 58; +static const uint8_t A5 = 59; +static const uint8_t A6 = 60; +static const uint8_t A7 = 61; +static const uint8_t A8 = 62; +static const uint8_t A9 = 63; +static const uint8_t A10 = 64; +static const uint8_t A11 = 65; +static const uint8_t A12 = 66; +static const uint8_t A13 = 67; +static const uint8_t A14 = 68; +static const uint8_t A15 = 69; + +// A majority of the pins are NOT PCINTs, SO BE WARNED (i.e. you cannot use them as receive pins) +// Only pins available for RECEIVE (TRANSMIT can be on any pin): +// (I've deliberately left out pin mapping to the Hardware USARTs - seems senseless to me) +// Pins: 10, 11, 12, 13, 50, 51, 52, 53, 62, 63, 64, 65, 66, 67, 68, 69 + +#define digitalPinToPCICR(p) ( (((p) >= 10) && ((p) <= 13)) || \ + (((p) >= 50) && ((p) <= 53)) || \ + (((p) >= 62) && ((p) <= 69)) ? (&PCICR) : ((uint8_t *)0) ) + +#define digitalPinToPCICRbit(p) ( (((p) >= 10) && ((p) <= 13)) || (((p) >= 50) && ((p) <= 53)) ? 0 : \ + ( (((p) >= 62) && ((p) <= 69)) ? 2 : \ + 0 ) ) + +#define digitalPinToPCMSK(p) ( (((p) >= 10) && ((p) <= 13)) || (((p) >= 50) && ((p) <= 53)) ? (&PCMSK0) : \ + ( (((p) >= 62) && ((p) <= 69)) ? (&PCMSK2) : \ + ((uint8_t *)0) ) ) + +#define digitalPinToPCMSKbit(p) ( (((p) >= 10) && ((p) <= 13)) ? ((p) - 6) : \ + ( ((p) == 50) ? 3 : \ + ( ((p) == 51) ? 2 : \ + ( ((p) == 52) ? 1 : \ + ( ((p) == 53) ? 0 : \ + ( (((p) >= 62) && ((p) <= 69)) ? ((p) - 62) : \ + 0 ) ) ) ) ) ) + +#define digitalPinToInterrupt(p) ((p) == 2 ? 0 : ((p) == 3 ? 1 : ((p) >= 18 && (p) <= 21 ? 23 - (p) : NOT_AN_INTERRUPT))) + +#ifdef ARDUINO_MAIN + +const uint16_t PROGMEM port_to_mode_PGM[] = { + NOT_A_PORT, + (uint16_t) &DDRA, + (uint16_t) &DDRB, + (uint16_t) &DDRC, + (uint16_t) &DDRD, + (uint16_t) &DDRE, + (uint16_t) &DDRF, + (uint16_t) &DDRG, + (uint16_t) &DDRH, + NOT_A_PORT, + (uint16_t) &DDRJ, + (uint16_t) &DDRK, + (uint16_t) &DDRL, +}; + +const uint16_t PROGMEM port_to_output_PGM[] = { + NOT_A_PORT, + (uint16_t) &PORTA, + (uint16_t) &PORTB, + (uint16_t) &PORTC, + (uint16_t) &PORTD, + (uint16_t) &PORTE, + (uint16_t) &PORTF, + (uint16_t) &PORTG, + (uint16_t) &PORTH, + NOT_A_PORT, + (uint16_t) &PORTJ, + (uint16_t) &PORTK, + (uint16_t) &PORTL, +}; + +const uint16_t PROGMEM port_to_input_PGM[] = { + NOT_A_PIN, + (uint16_t) &PINA, + (uint16_t) &PINB, + (uint16_t) &PINC, + (uint16_t) &PIND, + (uint16_t) &PINE, + (uint16_t) &PINF, + (uint16_t) &PING, + (uint16_t) &PINH, + NOT_A_PIN, + (uint16_t) &PINJ, + (uint16_t) &PINK, + (uint16_t) &PINL, +}; + +const uint8_t PROGMEM digital_pin_to_port_PGM[] = { + // PORTLIST + // ------------------------------------------- + PE , // PE 0 ** 0 ** USART0_RX + PE , // PE 1 ** 1 ** USART0_TX + PE , // PE 4 ** 2 ** PWM2 + PE , // PE 5 ** 3 ** PWM3 + PG , // PG 5 ** 4 ** PWM4 + PE , // PE 3 ** 5 ** PWM5 + PH , // PH 3 ** 6 ** PWM6 + PH , // PH 4 ** 7 ** PWM7 + PH , // PH 5 ** 8 ** PWM8 + PH , // PH 6 ** 9 ** PWM9 + PB , // PB 4 ** 10 ** PWM10 + PB , // PB 5 ** 11 ** PWM11 + PB , // PB 6 ** 12 ** PWM12 + PB , // PB 7 ** 13 ** PWM13 + PJ , // PJ 1 ** 14 ** USART3_TX + PJ , // PJ 0 ** 15 ** USART3_RX + PH , // PH 1 ** 16 ** USART2_TX + PH , // PH 0 ** 17 ** USART2_RX + PD , // PD 3 ** 18 ** USART1_TX + PD , // PD 2 ** 19 ** USART1_RX + PD , // PD 1 ** 20 ** I2C_SDA + PD , // PD 0 ** 21 ** I2C_SCL + PA , // PA 0 ** 22 ** D22 + PA , // PA 1 ** 23 ** D23 + PA , // PA 2 ** 24 ** D24 + PA , // PA 3 ** 25 ** D25 + PA , // PA 4 ** 26 ** D26 + PA , // PA 5 ** 27 ** D27 + PA , // PA 6 ** 28 ** D28 + PA , // PA 7 ** 29 ** D29 + PC , // PC 7 ** 30 ** D30 + PC , // PC 6 ** 31 ** D31 + PC , // PC 5 ** 32 ** D32 + PC , // PC 4 ** 33 ** D33 + PC , // PC 3 ** 34 ** D34 + PC , // PC 2 ** 35 ** D35 + PC , // PC 1 ** 36 ** D36 + PC , // PC 0 ** 37 ** D37 + PD , // PD 7 ** 38 ** D38 + PG , // PG 2 ** 39 ** D39 + PG , // PG 1 ** 40 ** D40 + PG , // PG 0 ** 41 ** D41 + PL , // PL 7 ** 42 ** D42 + PL , // PL 6 ** 43 ** D43 + PL , // PL 5 ** 44 ** D44 + PL , // PL 4 ** 45 ** D45 + PL , // PL 3 ** 46 ** D46 + PL , // PL 2 ** 47 ** D47 + PL , // PL 1 ** 48 ** D48 + PL , // PL 0 ** 49 ** D49 + PB , // PB 3 ** 50 ** SPI_MISO + PB , // PB 2 ** 51 ** SPI_MOSI + PB , // PB 1 ** 52 ** SPI_SCK + PB , // PB 0 ** 53 ** SPI_SS + PF , // PF 0 ** 54 ** A0 + PF , // PF 1 ** 55 ** A1 + PF , // PF 2 ** 56 ** A2 + PF , // PF 3 ** 57 ** A3 + PF , // PF 4 ** 58 ** A4 + PF , // PF 5 ** 59 ** A5 + PF , // PF 6 ** 60 ** A6 + PF , // PF 7 ** 61 ** A7 + PK , // PK 0 ** 62 ** A8 + PK , // PK 1 ** 63 ** A9 + PK , // PK 2 ** 64 ** A10 + PK , // PK 3 ** 65 ** A11 + PK , // PK 4 ** 66 ** A12 + PK , // PK 5 ** 67 ** A13 + PK , // PK 6 ** 68 ** A14 + PK , // PK 7 ** 69 ** A15 +}; + +const uint8_t PROGMEM digital_pin_to_bit_mask_PGM[] = { + // PIN IN PORT + // ------------------------------------------- + _BV( 0 ) , // PE 0 ** 0 ** USART0_RX + _BV( 1 ) , // PE 1 ** 1 ** USART0_TX + _BV( 4 ) , // PE 4 ** 2 ** PWM2 + _BV( 5 ) , // PE 5 ** 3 ** PWM3 + _BV( 5 ) , // PG 5 ** 4 ** PWM4 + _BV( 3 ) , // PE 3 ** 5 ** PWM5 + _BV( 3 ) , // PH 3 ** 6 ** PWM6 + _BV( 4 ) , // PH 4 ** 7 ** PWM7 + _BV( 5 ) , // PH 5 ** 8 ** PWM8 + _BV( 6 ) , // PH 6 ** 9 ** PWM9 + _BV( 4 ) , // PB 4 ** 10 ** PWM10 + _BV( 5 ) , // PB 5 ** 11 ** PWM11 + _BV( 6 ) , // PB 6 ** 12 ** PWM12 + _BV( 7 ) , // PB 7 ** 13 ** PWM13 + _BV( 1 ) , // PJ 1 ** 14 ** USART3_TX + _BV( 0 ) , // PJ 0 ** 15 ** USART3_RX + _BV( 1 ) , // PH 1 ** 16 ** USART2_TX + _BV( 0 ) , // PH 0 ** 17 ** USART2_RX + _BV( 3 ) , // PD 3 ** 18 ** USART1_TX + _BV( 2 ) , // PD 2 ** 19 ** USART1_RX + _BV( 1 ) , // PD 1 ** 20 ** I2C_SDA + _BV( 0 ) , // PD 0 ** 21 ** I2C_SCL + _BV( 0 ) , // PA 0 ** 22 ** D22 + _BV( 1 ) , // PA 1 ** 23 ** D23 + _BV( 2 ) , // PA 2 ** 24 ** D24 + _BV( 3 ) , // PA 3 ** 25 ** D25 + _BV( 4 ) , // PA 4 ** 26 ** D26 + _BV( 5 ) , // PA 5 ** 27 ** D27 + _BV( 6 ) , // PA 6 ** 28 ** D28 + _BV( 7 ) , // PA 7 ** 29 ** D29 + _BV( 7 ) , // PC 7 ** 30 ** D30 + _BV( 6 ) , // PC 6 ** 31 ** D31 + _BV( 5 ) , // PC 5 ** 32 ** D32 + _BV( 4 ) , // PC 4 ** 33 ** D33 + _BV( 3 ) , // PC 3 ** 34 ** D34 + _BV( 2 ) , // PC 2 ** 35 ** D35 + _BV( 1 ) , // PC 1 ** 36 ** D36 + _BV( 0 ) , // PC 0 ** 37 ** D37 + _BV( 7 ) , // PD 7 ** 38 ** D38 + _BV( 2 ) , // PG 2 ** 39 ** D39 + _BV( 1 ) , // PG 1 ** 40 ** D40 + _BV( 0 ) , // PG 0 ** 41 ** D41 + _BV( 7 ) , // PL 7 ** 42 ** D42 + _BV( 6 ) , // PL 6 ** 43 ** D43 + _BV( 5 ) , // PL 5 ** 44 ** D44 + _BV( 4 ) , // PL 4 ** 45 ** D45 + _BV( 3 ) , // PL 3 ** 46 ** D46 + _BV( 2 ) , // PL 2 ** 47 ** D47 + _BV( 1 ) , // PL 1 ** 48 ** D48 + _BV( 0 ) , // PL 0 ** 49 ** D49 + _BV( 3 ) , // PB 3 ** 50 ** SPI_MISO + _BV( 2 ) , // PB 2 ** 51 ** SPI_MOSI + _BV( 1 ) , // PB 1 ** 52 ** SPI_SCK + _BV( 0 ) , // PB 0 ** 53 ** SPI_SS + _BV( 0 ) , // PF 0 ** 54 ** A0 + _BV( 1 ) , // PF 1 ** 55 ** A1 + _BV( 2 ) , // PF 2 ** 56 ** A2 + _BV( 3 ) , // PF 3 ** 57 ** A3 + _BV( 4 ) , // PF 4 ** 58 ** A4 + _BV( 5 ) , // PF 5 ** 59 ** A5 + _BV( 6 ) , // PF 6 ** 60 ** A6 + _BV( 7 ) , // PF 7 ** 61 ** A7 + _BV( 0 ) , // PK 0 ** 62 ** A8 + _BV( 1 ) , // PK 1 ** 63 ** A9 + _BV( 2 ) , // PK 2 ** 64 ** A10 + _BV( 3 ) , // PK 3 ** 65 ** A11 + _BV( 4 ) , // PK 4 ** 66 ** A12 + _BV( 5 ) , // PK 5 ** 67 ** A13 + _BV( 6 ) , // PK 6 ** 68 ** A14 + _BV( 7 ) , // PK 7 ** 69 ** A15 +}; + +const uint8_t PROGMEM digital_pin_to_timer_PGM[] = { + // TIMERS + // ------------------------------------------- + NOT_ON_TIMER , // PE 0 ** 0 ** USART0_RX + NOT_ON_TIMER , // PE 1 ** 1 ** USART0_TX + TIMER3B , // PE 4 ** 2 ** PWM2 + TIMER3C , // PE 5 ** 3 ** PWM3 + TIMER0B , // PG 5 ** 4 ** PWM4 + TIMER3A , // PE 3 ** 5 ** PWM5 + TIMER4A , // PH 3 ** 6 ** PWM6 + TIMER4B , // PH 4 ** 7 ** PWM7 + TIMER4C , // PH 5 ** 8 ** PWM8 + TIMER2B , // PH 6 ** 9 ** PWM9 + TIMER2A , // PB 4 ** 10 ** PWM10 + TIMER1A , // PB 5 ** 11 ** PWM11 + TIMER1B , // PB 6 ** 12 ** PWM12 + TIMER0A , // PB 7 ** 13 ** PWM13 + NOT_ON_TIMER , // PJ 1 ** 14 ** USART3_TX + NOT_ON_TIMER , // PJ 0 ** 15 ** USART3_RX + NOT_ON_TIMER , // PH 1 ** 16 ** USART2_TX + NOT_ON_TIMER , // PH 0 ** 17 ** USART2_RX + NOT_ON_TIMER , // PD 3 ** 18 ** USART1_TX + NOT_ON_TIMER , // PD 2 ** 19 ** USART1_RX + NOT_ON_TIMER , // PD 1 ** 20 ** I2C_SDA + NOT_ON_TIMER , // PD 0 ** 21 ** I2C_SCL + NOT_ON_TIMER , // PA 0 ** 22 ** D22 + NOT_ON_TIMER , // PA 1 ** 23 ** D23 + NOT_ON_TIMER , // PA 2 ** 24 ** D24 + NOT_ON_TIMER , // PA 3 ** 25 ** D25 + NOT_ON_TIMER , // PA 4 ** 26 ** D26 + NOT_ON_TIMER , // PA 5 ** 27 ** D27 + NOT_ON_TIMER , // PA 6 ** 28 ** D28 + NOT_ON_TIMER , // PA 7 ** 29 ** D29 + NOT_ON_TIMER , // PC 7 ** 30 ** D30 + NOT_ON_TIMER , // PC 6 ** 31 ** D31 + NOT_ON_TIMER , // PC 5 ** 32 ** D32 + NOT_ON_TIMER , // PC 4 ** 33 ** D33 + NOT_ON_TIMER , // PC 3 ** 34 ** D34 + NOT_ON_TIMER , // PC 2 ** 35 ** D35 + NOT_ON_TIMER , // PC 1 ** 36 ** D36 + NOT_ON_TIMER , // PC 0 ** 37 ** D37 + NOT_ON_TIMER , // PD 7 ** 38 ** D38 + NOT_ON_TIMER , // PG 2 ** 39 ** D39 + NOT_ON_TIMER , // PG 1 ** 40 ** D40 + NOT_ON_TIMER , // PG 0 ** 41 ** D41 + NOT_ON_TIMER , // PL 7 ** 42 ** D42 + NOT_ON_TIMER , // PL 6 ** 43 ** D43 + TIMER5C , // PL 5 ** 44 ** D44 + TIMER5B , // PL 4 ** 45 ** D45 + TIMER5A , // PL 3 ** 46 ** D46 + NOT_ON_TIMER , // PL 2 ** 47 ** D47 + NOT_ON_TIMER , // PL 1 ** 48 ** D48 + NOT_ON_TIMER , // PL 0 ** 49 ** D49 + NOT_ON_TIMER , // PB 3 ** 50 ** SPI_MISO + NOT_ON_TIMER , // PB 2 ** 51 ** SPI_MOSI + NOT_ON_TIMER , // PB 1 ** 52 ** SPI_SCK + NOT_ON_TIMER , // PB 0 ** 53 ** SPI_SS + NOT_ON_TIMER , // PF 0 ** 54 ** A0 + NOT_ON_TIMER , // PF 1 ** 55 ** A1 + NOT_ON_TIMER , // PF 2 ** 56 ** A2 + NOT_ON_TIMER , // PF 3 ** 57 ** A3 + NOT_ON_TIMER , // PF 4 ** 58 ** A4 + NOT_ON_TIMER , // PF 5 ** 59 ** A5 + NOT_ON_TIMER , // PF 6 ** 60 ** A6 + NOT_ON_TIMER , // PF 7 ** 61 ** A7 + NOT_ON_TIMER , // PK 0 ** 62 ** A8 + NOT_ON_TIMER , // PK 1 ** 63 ** A9 + NOT_ON_TIMER , // PK 2 ** 64 ** A10 + NOT_ON_TIMER , // PK 3 ** 65 ** A11 + NOT_ON_TIMER , // PK 4 ** 66 ** A12 + NOT_ON_TIMER , // PK 5 ** 67 ** A13 + NOT_ON_TIMER , // PK 6 ** 68 ** A14 + NOT_ON_TIMER , // PK 7 ** 69 ** A15 +}; + +#endif + +// These serial port names are intended to allow libraries and architecture-neutral +// sketches to automatically default to the correct port name for a particular type +// of use. For example, a GPS module would normally connect to SERIAL_PORT_HARDWARE_OPEN, +// the first hardware serial port whose RX/TX pins are not dedicated to another use. +// +// SERIAL_PORT_MONITOR Port which normally prints to the Arduino Serial Monitor +// +// SERIAL_PORT_USBVIRTUAL Port which is USB virtual serial +// +// SERIAL_PORT_LINUXBRIDGE Port which connects to a Linux system via Bridge library +// +// SERIAL_PORT_HARDWARE Hardware serial port, physical RX & TX pins. +// +// SERIAL_PORT_HARDWARE_OPEN Hardware serial ports which are open for use. Their RX & TX +// pins are NOT connected to anything by default. +#define SERIAL_PORT_MONITOR Serial +#define SERIAL_PORT_HARDWARE Serial +#define SERIAL_PORT_HARDWARE1 Serial1 +#define SERIAL_PORT_HARDWARE2 Serial2 +#define SERIAL_PORT_HARDWARE3 Serial3 +#define SERIAL_PORT_HARDWARE_OPEN Serial1 +#define SERIAL_PORT_HARDWARE_OPEN1 Serial2 +#define SERIAL_PORT_HARDWARE_OPEN2 Serial3 + +#endif diff --git a/avr/variants/mega_custom/pins_arduino.h b/avr/variants/mega_custom/pins_arduino.h new file mode 100644 index 0000000..5eef588 --- /dev/null +++ b/avr/variants/mega_custom/pins_arduino.h @@ -0,0 +1,169 @@ +/* +Copyright(c) 2014-2015 NicoHood +See the readme for credit to other people. + +This file is part of Hoodloader2. + +Hoodloader2 is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +Hoodloader2 is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with Hoodloader2. If not, see . +*/ + +// include the standard Mega board definition file +#include "../mega/pins_arduino.h" + +//================================================================================ +// HID Settings +//================================================================================ + +// HID Project needs to be installed https://github.com/NicoHood/HID + +/* +You have two options to enable/disbale hid functions: + +The nearly full automatic way which enables the specific hid report for you, +enables the specific hid api and also enables the keyboard led function if needed. + +The fully customizable variant where you can create your very own HID report. +You still can use the predefined hid reports or add you very own ones. +You have to enable the specific hid apis on your own then, also the keyboard led function. +*/ + +#define HID_AUTOMATIC +//#define HID_CUSTOM_SETTINGS + +//================================================================================ +// Notice for HoodLoader2! +//================================================================================ + +/* +HoodLoader2 sketches are limited to a maximum 15 byte HID report. +Dont use more than that. (for a Leonardo/Micro it is 63 bytes). + +Arduino Uno/Mega's main mcu cannot have a specified HID descriptor, +edit the HoodLoader2 file for the 16u2 instead. +It is more important that the HID APIs are the same on both devices. +*/ + +//================================================================================ +// Automatic +//================================================================================ + +#ifdef HID_AUTOMATIC +// pre selected hid reports with autoinclude of the api +#define HID_MOUSE_ENABLE // normal mouse with buttons + wheel +//#define HID_MOUSE_ABSOLUTE_ENABLE // only works with system and without gamepad +#define HID_KEYBOARD_LEDS_ENABLE // leds OR keys +//#define HID_KEYBOARD_KEYS_ENABLE +//#define HID_RAWHID_ENABLE // currently not working +//#define HID_CONSUMERCONTROL_ENABLE +//#define HID_SYSTEMCONTROL_ENABLE +//#define HID_GAMEPAD_ENABLE // only works without mouse absolute + +//================================================================================ +// Custom Settings +//================================================================================ + +#elif defined(HID_CUSTOM_SETTINGS) + +// default setting here shows a mouse + keyboard with no led function +// like in IDE 1.0.6/1.5.8 or lower + +// use this to enable the Keyboard Led functions +//#define HID_KEYBOARD_LEDS_ENABLED + +// add your custom report here: +#define EXTERN_HID_REPORT \ +HID_REPORT_KEYBOARD_KEYS(HID_REPORTID_KEYBOARD), \ +HID_REPORT_MOUSE(HID_REPORTID_MOUSE) + +// activate your custom HID-APIs here: +#define HID_MOUSE_API_ENABLE +//#define HID_MOUSE_ABSOLUTE_API_ENABLE +#define HID_KEYBOARD_API_ENABLE +//#define HID_RAWHID_API_ENABLE +//#define HID_CONSUMERCONTROL_API_ENABLE +//#define HID_SYSTEMCONTROL_API_ENABLE +//#define HID_GAMEPAD_API_ENABLE +//#define HID_ENABLE_ALL_APIS // enables all of the ones above + + +//// 2nd example with a custom Joystick report (the Gamepad API wont work anymor since the report is different) +//#define EXTERN_HID_REPORT \ /* Gamepad with 32 buttons and 10 axis*/ \ +//0x05, 0x01, /* USAGE_PAGE (Generic Desktop) */ \ +//0x09, 0x04, /* USAGE (Joystick) */ \ +//0xa1, 0x01, /* COLLECTION (Application) */ \ +//0x85, HID_REPORTID_GAMEPAD, /* REPORT_ID */ \ +///* 32 Buttons */ \ +//0x05, 0x09, /* USAGE_PAGE (Button) */ \ +//0x19, 0x01, /* USAGE_MINIMUM (Button 1) */ \ +//0x29, 0x20, /* USAGE_MAXIMUM (Button 32) */ \ +//0x15, 0x00, /* LOGICAL_MINIMUM (0) */ \ +//0x25, 0x01, /* LOGICAL_MAXIMUM (1) */ \ +//0x75, 0x01, /* REPORT_SIZE (1) */ \ +//0x95, 0x20, /* REPORT_COUNT (32) */ \ +//0x81, 0x02, /* INPUT (Data,Var,Abs) */ \ +///* 10 8bit Axis */ \ +//0x05, 0x01, /* USAGE_PAGE (Generic Desktop) */ \ +//0xa1, 0x00, /* COLLECTION (Physical) */ \ +//0x09, 0x30, /* USAGE (X) */ \ +//0x09, 0x31, /* USAGE (Y) */ \ +//0x09, 0x33, /* USAGE (Rx) */ \ +//0x09, 0x34, /* USAGE (Ry) */ \ +//0x09, 0x32, /* USAGE (Z) */ \ +//0x09, 0x35, /* USAGE (Rz) */ \ +//0x09, 0x36, /* Usage (Slider) */ \ +//0x09, 0x36, /* Usage (Slider) */ \ +//0x09, 0x36, /* Usage (Slider) */ \ +//0x09, 0x36, /* Usage (Slider) */ \ +//0x15, 0x80, /* LOGICAL_MINIMUM (-128) */ \ +//0x25, 0x7F, /* LOGICAL_MAXIMUM (127) */ \ +//0x75, 0x08, /* REPORT_SIZE (8) */ \ +//0x95, 0x0A, /* REPORT_COUNT (10) */ \ +//0x81, 0x02, /* INPUT (Data,Var,Abs) */ \ +//0xc0, /* END_COLLECTION */ \ +//0xc0 /* END_COLLECTION */ +// +//// activate your custom HID-APIs here: +////#define HID_MOUSE_API_ENABLE +////#define HID_MOUSE_ABSOLUTE_API_ENABLE +////#define HID_KEYBOARD_API_ENABLE +////#define HID_RAWHID_API_ENABLE +////#define HID_CONSUMERCONTROL_API_ENABLE +////#define HID_SYSTEMCONTROL_API_ENABLE +////#define HID_GAMEPAD_API_ENABLE +////#define HID_ENABLE_ALL_APIS // enables all of the ones above + + +/* +You can use the pre defined reports as well. +Keep in mind that changing the ids or reports might confuse your OS. +Then you might need to reinstall all drivers or change the USB PID. +Mouse Abs only works with a System report together. +Gamepad and Mouse Abs dont work together. +Gamepads can causes some recognition problems with some OS. +RAW HID seems to not works properly in a multireport. +Currently available pre defined reports : +*/ + +//HID_REPORT_KEYBOARD_LEDS(HID_REPORTID_KEYBOARD), +//HID_REPORT_KEYBOARD_KEYS(HID_REPORTID_KEYBOARD), +//HID_REPORT_MOUSE(HID_REPORTID_MOUSE), +//HID_REPORT_MOUSE_ABSOLUTE(HID_REPORTID_MOUSE_ABSOLUTE), +//HID_REPORT_RAWHID(HID_REPORTID_RAWHID), +//HID_REPORT_CONSUMERCONTROL(HID_REPORTID_CONSUMERCONTROL), +//HID_REPORT_SYSTEMCONTROL(HID_REPORTID_SYSTEMCONTROL), +//HID_REPORT_GAMEPAD(HID_REPORTID_GAMEPAD), + +#else +#error Please select automatic or custom hid report in the pins_arduino.h! +#endif \ No newline at end of file diff --git a/avr/variants/mega_gamepad/pins_arduino.h b/avr/variants/mega_gamepad/pins_arduino.h new file mode 100644 index 0000000..377e98f --- /dev/null +++ b/avr/variants/mega_gamepad/pins_arduino.h @@ -0,0 +1,38 @@ +/* +Copyright(c) 2014-2015 NicoHood +See the readme for credit to other people. + +This file is part of Hoodloader2. + +Hoodloader2 is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +Hoodloader2 is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with Hoodloader2. If not, see . +*/ + +// include the standard Mega board definition file +#include "../mega/pins_arduino.h" + +//================================================================================ +// HID Settings +//================================================================================ + +// HID Project needs to be installed https://github.com/NicoHood/HID + +// pre selected hid reports with autoinclude of the api +#define HID_MOUSE_ENABLE // normal mouse with buttons + wheel +//#define HID_MOUSE_ABSOLUTE_ENABLE // only works with system and without gamepad +#define HID_KEYBOARD_LEDS_ENABLE // leds OR keys +//#define HID_KEYBOARD_KEYS_ENABLE +//#define HID_RAWHID_ENABLE // currently not working +//#define HID_CONSUMERCONTROL_ENABLE +//#define HID_SYSTEMCONTROL_ENABLE +#define HID_GAMEPAD_ENABLE // only works without mouse absolute diff --git a/avr/variants/mega_hid/pins_arduino.h b/avr/variants/mega_hid/pins_arduino.h new file mode 100644 index 0000000..86a603f --- /dev/null +++ b/avr/variants/mega_hid/pins_arduino.h @@ -0,0 +1,38 @@ +/* +Copyright(c) 2014-2015 NicoHood +See the readme for credit to other people. + +This file is part of Hoodloader2. + +Hoodloader2 is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +Hoodloader2 is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with Hoodloader2. If not, see . +*/ + +// include the standard Mega board definition file +#include "../mega/pins_arduino.h" + +//================================================================================ +// HID Settings +//================================================================================ + +// HID Project needs to be installed https://github.com/NicoHood/HID + +// pre selected hid reports with autoinclude of the api +#define HID_MOUSE_ENABLE // normal mouse with buttons + wheel +#define HID_MOUSE_ABSOLUTE_ENABLE // only works with system and without gamepad +#define HID_KEYBOARD_LEDS_ENABLE // leds OR keys +//#define HID_KEYBOARD_KEYS_ENABLE +//#define HID_RAWHID_ENABLE // currently not working +#define HID_CONSUMERCONTROL_ENABLE +#define HID_SYSTEMCONTROL_ENABLE +//#define HID_GAMEPAD_ENABLE // only works without mouse absolute \ No newline at end of file diff --git a/avr/variants/standard/pins_arduino.h b/avr/variants/standard/pins_arduino.h new file mode 100644 index 0000000..3d4a9f6 --- /dev/null +++ b/avr/variants/standard/pins_arduino.h @@ -0,0 +1,238 @@ +/* + pins_arduino.h - Pin definition functions for Arduino + Part of Arduino - http://www.arduino.cc/ + + Copyright (c) 2007 David A. Mellis + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General + Public License along with this library; if not, write to the + Free Software Foundation, Inc., 59 Temple Place, Suite 330, + Boston, MA 02111-1307 USA + + $Id: wiring.h 249 2007-02-03 16:52:51Z mellis $ +*/ + +#ifndef Pins_Arduino_h +#define Pins_Arduino_h + +#include + +#define NUM_DIGITAL_PINS 20 +#define NUM_ANALOG_INPUTS 6 +#define analogInputToDigitalPin(p) ((p < 6) ? (p) + 14 : -1) + +#if defined(__AVR_ATmega8__) +#define digitalPinHasPWM(p) ((p) == 9 || (p) == 10 || (p) == 11) +#else +#define digitalPinHasPWM(p) ((p) == 3 || (p) == 5 || (p) == 6 || (p) == 9 || (p) == 10 || (p) == 11) +#endif + +static const uint8_t SS = 10; +static const uint8_t MOSI = 11; +static const uint8_t MISO = 12; +static const uint8_t SCK = 13; + +static const uint8_t SDA = 18; +static const uint8_t SCL = 19; +#define LED_BUILTIN 13 + +static const uint8_t A0 = 14; +static const uint8_t A1 = 15; +static const uint8_t A2 = 16; +static const uint8_t A3 = 17; +static const uint8_t A4 = 18; +static const uint8_t A5 = 19; +static const uint8_t A6 = 20; +static const uint8_t A7 = 21; + +#define digitalPinToPCICR(p) (((p) >= 0 && (p) <= 21) ? (&PCICR) : ((uint8_t *)0)) +#define digitalPinToPCICRbit(p) (((p) <= 7) ? 2 : (((p) <= 13) ? 0 : 1)) +#define digitalPinToPCMSK(p) (((p) <= 7) ? (&PCMSK2) : (((p) <= 13) ? (&PCMSK0) : (((p) <= 21) ? (&PCMSK1) : ((uint8_t *)0)))) +#define digitalPinToPCMSKbit(p) (((p) <= 7) ? (p) : (((p) <= 13) ? ((p) - 8) : ((p) - 14))) + +#define digitalPinToInterrupt(p) ((p) == 2 ? 0 : ((p) == 3 ? 1 : NOT_AN_INTERRUPT)) + +#ifdef ARDUINO_MAIN + +// On the Arduino board, digital pins are also used +// for the analog output (software PWM). Analog input +// pins are a separate set. + +// ATMEL ATMEGA8 & 168 / ARDUINO +// +// +-\/-+ +// PC6 1| |28 PC5 (AI 5) +// (D 0) PD0 2| |27 PC4 (AI 4) +// (D 1) PD1 3| |26 PC3 (AI 3) +// (D 2) PD2 4| |25 PC2 (AI 2) +// PWM+ (D 3) PD3 5| |24 PC1 (AI 1) +// (D 4) PD4 6| |23 PC0 (AI 0) +// VCC 7| |22 GND +// GND 8| |21 AREF +// PB6 9| |20 AVCC +// PB7 10| |19 PB5 (D 13) +// PWM+ (D 5) PD5 11| |18 PB4 (D 12) +// PWM+ (D 6) PD6 12| |17 PB3 (D 11) PWM +// (D 7) PD7 13| |16 PB2 (D 10) PWM +// (D 8) PB0 14| |15 PB1 (D 9) PWM +// +----+ +// +// (PWM+ indicates the additional PWM pins on the ATmega168.) + +// ATMEL ATMEGA1280 / ARDUINO +// +// 0-7 PE0-PE7 works +// 8-13 PB0-PB5 works +// 14-21 PA0-PA7 works +// 22-29 PH0-PH7 works +// 30-35 PG5-PG0 works +// 36-43 PC7-PC0 works +// 44-51 PJ7-PJ0 works +// 52-59 PL7-PL0 works +// 60-67 PD7-PD0 works +// A0-A7 PF0-PF7 +// A8-A15 PK0-PK7 + + +// these arrays map port names (e.g. port B) to the +// appropriate addresses for various functions (e.g. reading +// and writing) +const uint16_t PROGMEM port_to_mode_PGM[] = { + NOT_A_PORT, + NOT_A_PORT, + (uint16_t) &DDRB, + (uint16_t) &DDRC, + (uint16_t) &DDRD, +}; + +const uint16_t PROGMEM port_to_output_PGM[] = { + NOT_A_PORT, + NOT_A_PORT, + (uint16_t) &PORTB, + (uint16_t) &PORTC, + (uint16_t) &PORTD, +}; + +const uint16_t PROGMEM port_to_input_PGM[] = { + NOT_A_PORT, + NOT_A_PORT, + (uint16_t) &PINB, + (uint16_t) &PINC, + (uint16_t) &PIND, +}; + +const uint8_t PROGMEM digital_pin_to_port_PGM[] = { + PD, /* 0 */ + PD, + PD, + PD, + PD, + PD, + PD, + PD, + PB, /* 8 */ + PB, + PB, + PB, + PB, + PB, + PC, /* 14 */ + PC, + PC, + PC, + PC, + PC, +}; + +const uint8_t PROGMEM digital_pin_to_bit_mask_PGM[] = { + _BV(0), /* 0, port D */ + _BV(1), + _BV(2), + _BV(3), + _BV(4), + _BV(5), + _BV(6), + _BV(7), + _BV(0), /* 8, port B */ + _BV(1), + _BV(2), + _BV(3), + _BV(4), + _BV(5), + _BV(0), /* 14, port C */ + _BV(1), + _BV(2), + _BV(3), + _BV(4), + _BV(5), +}; + +const uint8_t PROGMEM digital_pin_to_timer_PGM[] = { + NOT_ON_TIMER, /* 0 - port D */ + NOT_ON_TIMER, + NOT_ON_TIMER, + // on the ATmega168, digital pin 3 has hardware pwm +#if defined(__AVR_ATmega8__) + NOT_ON_TIMER, +#else + TIMER2B, +#endif + NOT_ON_TIMER, + // on the ATmega168, digital pins 5 and 6 have hardware pwm +#if defined(__AVR_ATmega8__) + NOT_ON_TIMER, + NOT_ON_TIMER, +#else + TIMER0B, + TIMER0A, +#endif + NOT_ON_TIMER, + NOT_ON_TIMER, /* 8 - port B */ + TIMER1A, + TIMER1B, +#if defined(__AVR_ATmega8__) + TIMER2, +#else + TIMER2A, +#endif + NOT_ON_TIMER, + NOT_ON_TIMER, + NOT_ON_TIMER, + NOT_ON_TIMER, /* 14 - port C */ + NOT_ON_TIMER, + NOT_ON_TIMER, + NOT_ON_TIMER, + NOT_ON_TIMER, +}; + +#endif + +// These serial port names are intended to allow libraries and architecture-neutral +// sketches to automatically default to the correct port name for a particular type +// of use. For example, a GPS module would normally connect to SERIAL_PORT_HARDWARE_OPEN, +// the first hardware serial port whose RX/TX pins are not dedicated to another use. +// +// SERIAL_PORT_MONITOR Port which normally prints to the Arduino Serial Monitor +// +// SERIAL_PORT_USBVIRTUAL Port which is USB virtual serial +// +// SERIAL_PORT_LINUXBRIDGE Port which connects to a Linux system via Bridge library +// +// SERIAL_PORT_HARDWARE Hardware serial port, physical RX & TX pins. +// +// SERIAL_PORT_HARDWARE_OPEN Hardware serial ports which are open for use. Their RX & TX +// pins are NOT connected to anything by default. +#define SERIAL_PORT_MONITOR Serial +#define SERIAL_PORT_HARDWARE Serial + +#endif diff --git a/avr/variants/standard_custom/pins_arduino.h b/avr/variants/standard_custom/pins_arduino.h new file mode 100644 index 0000000..fb19f02 --- /dev/null +++ b/avr/variants/standard_custom/pins_arduino.h @@ -0,0 +1,169 @@ +/* +Copyright(c) 2014-2015 NicoHood +See the readme for credit to other people. + +This file is part of Hoodloader2. + +Hoodloader2 is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +Hoodloader2 is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with Hoodloader2. If not, see . +*/ + +// include the standard Uno board definition file +#include "../standard/pins_arduino.h" + +//================================================================================ +// HID Settings +//================================================================================ + +// HID Project needs to be installed https://github.com/NicoHood/HID + +/* +You have two options to enable/disbale hid functions: + +The nearly full automatic way which enables the specific hid report for you, +enables the specific hid api and also enables the keyboard led function if needed. + +The fully customizable variant where you can create your very own HID report. +You still can use the predefined hid reports or add you very own ones. +You have to enable the specific hid apis on your own then, also the keyboard led function. +*/ + +#define HID_AUTOMATIC +//#define HID_CUSTOM_SETTINGS + +//================================================================================ +// Notice for HoodLoader2! +//================================================================================ + +/* +HoodLoader2 sketches are limited to a maximum 15 byte HID report. +Dont use more than that. (for a Leonardo/Micro it is 63 bytes). + +Arduino Uno/Mega's main mcu cannot have a specified HID descriptor, +edit the HoodLoader2 file for the 16u2 instead. +It is more important that the HID APIs are the same on both devices. +*/ + +//================================================================================ +// Automatic +//================================================================================ + +#ifdef HID_AUTOMATIC +// pre selected hid reports with autoinclude of the api +#define HID_MOUSE_ENABLE // normal mouse with buttons + wheel +//#define HID_MOUSE_ABSOLUTE_ENABLE // only works with system and without gamepad +#define HID_KEYBOARD_LEDS_ENABLE // leds OR keys +//#define HID_KEYBOARD_KEYS_ENABLE +//#define HID_RAWHID_ENABLE // currently not working +//#define HID_CONSUMERCONTROL_ENABLE +//#define HID_SYSTEMCONTROL_ENABLE +//#define HID_GAMEPAD_ENABLE // only works without mouse absolute + +//================================================================================ +// Custom Settings +//================================================================================ + +#elif defined(HID_CUSTOM_SETTINGS) + +// default setting here shows a mouse + keyboard with no led function +// like in IDE 1.0.6/1.5.8 or lower + +// use this to enable the Keyboard Led functions +//#define HID_KEYBOARD_LEDS_ENABLED + +// add your custom report here: +#define EXTERN_HID_REPORT \ +HID_REPORT_KEYBOARD_KEYS(HID_REPORTID_KEYBOARD), \ +HID_REPORT_MOUSE(HID_REPORTID_MOUSE) + +// activate your custom HID-APIs here: +#define HID_MOUSE_API_ENABLE +//#define HID_MOUSE_ABSOLUTE_API_ENABLE +#define HID_KEYBOARD_API_ENABLE +//#define HID_RAWHID_API_ENABLE +//#define HID_CONSUMERCONTROL_API_ENABLE +//#define HID_SYSTEMCONTROL_API_ENABLE +//#define HID_GAMEPAD_API_ENABLE +//#define HID_ENABLE_ALL_APIS // enables all of the ones above + + +//// 2nd example with a custom Joystick report (the Gamepad API wont work anymor since the report is different) +//#define EXTERN_HID_REPORT \ /* Gamepad with 32 buttons and 10 axis*/ \ +//0x05, 0x01, /* USAGE_PAGE (Generic Desktop) */ \ +//0x09, 0x04, /* USAGE (Joystick) */ \ +//0xa1, 0x01, /* COLLECTION (Application) */ \ +//0x85, HID_REPORTID_GAMEPAD, /* REPORT_ID */ \ +///* 32 Buttons */ \ +//0x05, 0x09, /* USAGE_PAGE (Button) */ \ +//0x19, 0x01, /* USAGE_MINIMUM (Button 1) */ \ +//0x29, 0x20, /* USAGE_MAXIMUM (Button 32) */ \ +//0x15, 0x00, /* LOGICAL_MINIMUM (0) */ \ +//0x25, 0x01, /* LOGICAL_MAXIMUM (1) */ \ +//0x75, 0x01, /* REPORT_SIZE (1) */ \ +//0x95, 0x20, /* REPORT_COUNT (32) */ \ +//0x81, 0x02, /* INPUT (Data,Var,Abs) */ \ +///* 10 8bit Axis */ \ +//0x05, 0x01, /* USAGE_PAGE (Generic Desktop) */ \ +//0xa1, 0x00, /* COLLECTION (Physical) */ \ +//0x09, 0x30, /* USAGE (X) */ \ +//0x09, 0x31, /* USAGE (Y) */ \ +//0x09, 0x33, /* USAGE (Rx) */ \ +//0x09, 0x34, /* USAGE (Ry) */ \ +//0x09, 0x32, /* USAGE (Z) */ \ +//0x09, 0x35, /* USAGE (Rz) */ \ +//0x09, 0x36, /* Usage (Slider) */ \ +//0x09, 0x36, /* Usage (Slider) */ \ +//0x09, 0x36, /* Usage (Slider) */ \ +//0x09, 0x36, /* Usage (Slider) */ \ +//0x15, 0x80, /* LOGICAL_MINIMUM (-128) */ \ +//0x25, 0x7F, /* LOGICAL_MAXIMUM (127) */ \ +//0x75, 0x08, /* REPORT_SIZE (8) */ \ +//0x95, 0x0A, /* REPORT_COUNT (10) */ \ +//0x81, 0x02, /* INPUT (Data,Var,Abs) */ \ +//0xc0, /* END_COLLECTION */ \ +//0xc0 /* END_COLLECTION */ +// +//// activate your custom HID-APIs here: +////#define HID_MOUSE_API_ENABLE +////#define HID_MOUSE_ABSOLUTE_API_ENABLE +////#define HID_KEYBOARD_API_ENABLE +////#define HID_RAWHID_API_ENABLE +////#define HID_CONSUMERCONTROL_API_ENABLE +////#define HID_SYSTEMCONTROL_API_ENABLE +////#define HID_GAMEPAD_API_ENABLE +////#define HID_ENABLE_ALL_APIS // enables all of the ones above + + +/* +You can use the pre defined reports as well. +Keep in mind that changing the ids or reports might confuse your OS. +Then you might need to reinstall all drivers or change the USB PID. +Mouse Abs only works with a System report together. +Gamepad and Mouse Abs dont work together. +Gamepads can causes some recognition problems with some OS. +RAW HID seems to not works properly in a multireport. +Currently available pre defined reports : +*/ + +//HID_REPORT_KEYBOARD_LEDS(HID_REPORTID_KEYBOARD), +//HID_REPORT_KEYBOARD_KEYS(HID_REPORTID_KEYBOARD), +//HID_REPORT_MOUSE(HID_REPORTID_MOUSE), +//HID_REPORT_MOUSE_ABSOLUTE(HID_REPORTID_MOUSE_ABSOLUTE), +//HID_REPORT_RAWHID(HID_REPORTID_RAWHID), +//HID_REPORT_CONSUMERCONTROL(HID_REPORTID_CONSUMERCONTROL), +//HID_REPORT_SYSTEMCONTROL(HID_REPORTID_SYSTEMCONTROL), +//HID_REPORT_GAMEPAD(HID_REPORTID_GAMEPAD), + +#else +#error Please select automatic or custom hid report in the pins_arduino.h! +#endif \ No newline at end of file diff --git a/avr/variants/standard_gamepad/pins_arduino.h b/avr/variants/standard_gamepad/pins_arduino.h new file mode 100644 index 0000000..ac67f27 --- /dev/null +++ b/avr/variants/standard_gamepad/pins_arduino.h @@ -0,0 +1,38 @@ +/* +Copyright(c) 2014-2015 NicoHood +See the readme for credit to other people. + +This file is part of Hoodloader2. + +Hoodloader2 is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +Hoodloader2 is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with Hoodloader2. If not, see . +*/ + +// include the standard Uno board definition file +#include "../standard/pins_arduino.h" + +//================================================================================ +// HID Settings +//================================================================================ + +// HID Project needs to be installed https://github.com/NicoHood/HID + +// pre selected hid reports with autoinclude of the api +#define HID_MOUSE_ENABLE // normal mouse with buttons + wheel +//#define HID_MOUSE_ABSOLUTE_ENABLE // only works with system and without gamepad +#define HID_KEYBOARD_LEDS_ENABLE // leds OR keys +//#define HID_KEYBOARD_KEYS_ENABLE +//#define HID_RAWHID_ENABLE // currently not working +//#define HID_CONSUMERCONTROL_ENABLE +//#define HID_SYSTEMCONTROL_ENABLE +#define HID_GAMEPAD_ENABLE // only works without mouse absolute diff --git a/avr/variants/standard_hid/pins_arduino.h b/avr/variants/standard_hid/pins_arduino.h new file mode 100644 index 0000000..ec721d2 --- /dev/null +++ b/avr/variants/standard_hid/pins_arduino.h @@ -0,0 +1,38 @@ +/* +Copyright(c) 2014-2015 NicoHood +See the readme for credit to other people. + +This file is part of Hoodloader2. + +Hoodloader2 is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +Hoodloader2 is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with Hoodloader2. If not, see . +*/ + +// include the standard Uno board definition file +#include "../standard/pins_arduino.h" + +//================================================================================ +// HID Settings +//================================================================================ + +// HID Project needs to be installed https://github.com/NicoHood/HID + +// pre selected hid reports with autoinclude of the api +#define HID_MOUSE_ENABLE // normal mouse with buttons + wheel +#define HID_MOUSE_ABSOLUTE_ENABLE // only works with system and without gamepad +#define HID_KEYBOARD_LEDS_ENABLE // leds OR keys +//#define HID_KEYBOARD_KEYS_ENABLE +//#define HID_RAWHID_ENABLE // currently not working +#define HID_CONSUMERCONTROL_ENABLE +#define HID_SYSTEMCONTROL_ENABLE +//#define HID_GAMEPAD_ENABLE // only works without mouse absolute \ No newline at end of file From fa1dd90852f1506b476d81418c9fdae59e7e5f7b Mon Sep 17 00:00:00 2001 From: Nico Date: Wed, 11 Feb 2015 17:24:21 +0100 Subject: [PATCH 04/28] remove test --- avr/boards.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/avr/boards.txt b/avr/boards.txt index 953a2de..8d3af61 100644 --- a/avr/boards.txt +++ b/avr/boards.txt @@ -328,7 +328,7 @@ uno.bootloader.lock_bits=0x0F uno.bootloader.file=arduino:optiboot/optiboot_atmega328.hex uno.build.mcu=atmega328p -uno.build.f_cpu=8000000L +uno.build.f_cpu=16000000L uno.build.board=AVR_UNO uno.build.core=HID:hid From 8fafd5edd3ba057aa3f60dc7268ea8604b381b46 Mon Sep 17 00:00:00 2001 From: Nico Date: Sat, 14 Feb 2015 12:39:14 +0100 Subject: [PATCH 05/28] Updated drivers Now a separate driver for each usb core for better pc side recognition if the reports/core change. Also corrected wrong PIDs in boards.txt --- Readme.md | 14 +- avr/boards.txt | 170 ++++++++++++-------- avr/bootloaders/HoodLoader2/HoodLoader2.inf | 100 +++++++++--- avr/variants/mega_custom/pins_arduino.h | 76 +-------- avr/variants/standard_custom/pins_arduino.h | 76 +-------- 5 files changed, 200 insertions(+), 236 deletions(-) diff --git a/Readme.md b/Readme.md index a7bff40..6938db0 100644 --- a/Readme.md +++ b/Readme.md @@ -58,13 +58,17 @@ Version History =============== ``` 2.0.4 Release (xx.xx.2015) -* added HID-Project 2.2 compatibility -* added boards.txt for Uno/Mega + HID-Bridge +* Added HID-Project 2.2 compatibility +* Added boards.txt for Uno/Mega + HID-Bridge +* Improved Uno/Mega uploading (no double tab needed any more) +* Updated USB drivers for better PC side recognition + (Each USB core has a different PID + Windows driver) +* Fixed wrong PIDs in boards.txt 2.0.3 Release (28.01.2015) -* added HID Project 2.1 board definition compatibility -* fixed usb flag pass via boards.txt (instead of pins_arduino.h) -* fixed 16u2 4 pin header pinout picture +* Added HID Project 2.1 board definition compatibility +* Fixed usb flag pass via boards.txt (instead of pins_arduino.h) +* Fixed 16u2 4 pin header pinout picture * DFU burn bootloader fix * HoodLoader2.0.3 released (minor firmware CDC identifier fix) * Added 32u2 bootloader to the installation sketch as well diff --git a/avr/boards.txt b/avr/boards.txt index 8d3af61..7cf9499 100644 --- a/avr/boards.txt +++ b/avr/boards.txt @@ -21,6 +21,12 @@ HoodLoader2atmega16u2.build.board=HOODLOADER2 HoodLoader2atmega16u2.build.f_cpu=16000000L HoodLoader2atmega16u2.vid.0=0x2341 HoodLoader2atmega16u2.pid.0=0x484C +HoodLoader2atmega16u2.vid.1=0x2341 +HoodLoader2atmega16u2.pid.1=0x485C +HoodLoader2atmega16u2.vid.2=0x2341 +HoodLoader2atmega16u2.pid.2=0x486C +HoodLoader2atmega16u2.vid.3=0x2341 +HoodLoader2atmega16u2.pid.3=0x487C #uploading settings HoodLoader2atmega16u2.upload.speed=57600 @@ -38,7 +44,6 @@ HoodLoader2atmega16u2.bootloader.lock_bits=0x2F #usb settings, manufacturer overwritten by the IDE because of the VID HoodLoader2atmega16u2.build.vid=0x2341 -HoodLoader2atmega16u2.build.pid=0x484C HoodLoader2atmega16u2.build.usb_product="HoodLoader2 16u2" HoodLoader2atmega16u2.build.usb_manufacturer="Nico Hood" HoodLoader2atmega16u2.build.extra_flags={build.usb_flags} @@ -48,14 +53,19 @@ HoodLoader2atmega16u2.build.extra_flags={build.usb_flags} #HID Project needs to be installed https://github.com/NicoHood/HID HoodLoader2atmega16u2.menu.usbcore.hid=Serial + Extended HID HoodLoader2atmega16u2.menu.usbcore.hid.build.variant=HoodLoader2_hid +HoodLoader2atmega16u2.menu.usbcore.hid.build.pid=0x484C HoodLoader2atmega16u2.menu.usbcore.gamepad=Serial + Gamepad HID HoodLoader2atmega16u2.menu.usbcore.gamepad.build.variant=HoodLoader2_gamepad +HoodLoader2atmega16u2.menu.usbcore.gamepad.build.pid=0x486C HoodLoader2atmega16u2.menu.usbcore.custom=Serial + Custom HID HoodLoader2atmega16u2.menu.usbcore.custom.build.variant=HoodLoader2_custom +HoodLoader2atmega16u2.menu.usbcore.custom.build.pid=0x485C HoodLoader2atmega16u2.menu.usbcore.USB_CORE=Default HID Project Core HoodLoader2atmega16u2.menu.usbcore.USB_CORE.build.variant=HoodLoader2 +HoodLoader2atmega16u2.menu.usbcore.USB_CORE.build.pid=0x487C HoodLoader2atmega16u2.menu.usbcore.NO_USB=No USB functions HoodLoader2atmega16u2.menu.usbcore.NO_USB.build.variant=HoodLoader2_NoUSB +HoodLoader2atmega16u2.menu.usbcore.NO_USB.build.pid=0x484C #Board selection (only important for burning bootloaders) @@ -70,68 +80,6 @@ HoodLoader2atmega16u2.menu.board.dev.bootloader.file=HoodLoader2/HoodLoader2.hex ############################################################## -HoodLoader2at90usb162.name=HoodLoader2 at90usb162 -HoodLoader2at90usb162.build.core=HID:hid -HoodLoader2at90usb162.bootloader.tool=arduino:avrdude -HoodLoader2at90usb162.upload.tool=arduino:avrdude - -# MCU properties -HoodLoader2at90usb162.upload.maximum_size=12288 -HoodLoader2at90usb162.upload.maximum_data_size=512 -HoodLoader2at90usb162.build.mcu=at90usb162 - -#general settings for all boards: -HoodLoader2at90usb162.build.board=HOODLOADER2 -HoodLoader2at90usb162.build.f_cpu=16000000L -HoodLoader2at90usb162.vid.0=0x2341 -HoodLoader2at90usb162.pid.0=0x484F - -#uploading settings -HoodLoader2at90usb162.upload.speed=57600 -HoodLoader2at90usb162.upload.protocol=avr109 -HoodLoader2at90usb162.upload.disable_flushing=true -HoodLoader2at90usb162.upload.use_1200bps_touch=true -HoodLoader2at90usb162.upload.wait_for_upload_port=true - -#fuses (HoodLoader2 only, not suitable for DFU) -HoodLoader2at90usb162.bootloader.low_fuses=0xFF -HoodLoader2at90usb162.bootloader.high_fuses=0xD8 -HoodLoader2at90usb162.bootloader.extended_fuses=0xFC -HoodLoader2at90usb162.bootloader.unlock_bits=0x3F -HoodLoader2at90usb162.bootloader.lock_bits=0x2F - -#usb settings, manufacturer overwritten by the IDE because of the VID -HoodLoader2at90usb162.build.vid=0x2341 -HoodLoader2at90usb162.build.pid=0x484C -HoodLoader2at90usb162.build.usb_product="HoodLoader2 at90usb162" -HoodLoader2at90usb162.build.usb_manufacturer="Nico Hood" -HoodLoader2at90usb162.build.extra_flags={build.usb_flags} - - -#USB core selection -#HID Project needs to be installed https://github.com/NicoHood/HID -HoodLoader2at90usb162.menu.usbcore.hid=Serial + Extended HID -HoodLoader2at90usb162.menu.usbcore.hid.build.variant=HoodLoader2_hid -HoodLoader2at90usb162.menu.usbcore.gamepad=Serial + Gamepad HID -HoodLoader2at90usb162.menu.usbcore.gamepad.build.variant=HoodLoader2_gamepad -HoodLoader2at90usb162.menu.usbcore.custom=Serial + Custom HID -HoodLoader2at90usb162.menu.usbcore.custom.build.variant=HoodLoader2_custom -HoodLoader2at90usb162.menu.usbcore.USB_CORE=Default HID Project Core -HoodLoader2at90usb162.menu.usbcore.USB_CORE.build.variant=HoodLoader2 -HoodLoader2at90usb162.menu.usbcore.NO_USB=No USB functions -HoodLoader2at90usb162.menu.usbcore.NO_USB.build.variant=HoodLoader2_NoUSB - - -#Board selection (only important for burning bootloaders) -HoodLoader2at90usb162.menu.board.uno=HoodLoader2 Uno -HoodLoader2at90usb162.menu.board.uno.bootloader.file=HoodLoader2/HoodLoader2_0_1_Uno_at90usb162.hex -HoodLoader2at90usb162.menu.board.mega2560=HoodLoader2 Mega -HoodLoader2at90usb162.menu.board.mega2560.bootloader.file=HoodLoader2/HoodLoader2_0_1_Mega_at90usb162.hex - - -############################################################## - - HoodLoader2atmega32u2.name=HoodLoader2 32u2 HoodLoader2atmega32u2.build.core=HID:hid HoodLoader2atmega32u2.bootloader.tool=arduino:avrdude @@ -147,6 +95,12 @@ HoodLoader2atmega32u2.build.board=HOODLOADER2 HoodLoader2atmega32u2.build.f_cpu=16000000L HoodLoader2atmega32u2.vid.0=0x2341 HoodLoader2atmega32u2.pid.0=0x484D +HoodLoader2atmega32u2.vid.1=0x2341 +HoodLoader2atmega32u2.pid.1=0x485D +HoodLoader2atmega32u2.vid.2=0x2341 +HoodLoader2atmega32u2.pid.2=0x486D +HoodLoader2atmega32u2.vid.3=0x2341 +HoodLoader2atmega32u2.pid.3=0x487D #uploading settings HoodLoader2atmega32u2.upload.speed=57600 @@ -164,7 +118,6 @@ HoodLoader2atmega32u2.bootloader.lock_bits=0x2F #usb settings, manufacturer overwritten by the IDE because of the VID HoodLoader2atmega32u2.build.vid=0x2341 -HoodLoader2atmega32u2.build.pid=0x484C HoodLoader2atmega32u2.build.usb_product="HoodLoader2 32u2" HoodLoader2atmega32u2.build.usb_manufacturer="Nico Hood" HoodLoader2atmega32u2.build.extra_flags={build.usb_flags} @@ -174,14 +127,19 @@ HoodLoader2atmega32u2.build.extra_flags={build.usb_flags} #HID Project needs to be installed https://github.com/NicoHood/HID HoodLoader2atmega32u2.menu.usbcore.hid=Serial + Extended HID HoodLoader2atmega32u2.menu.usbcore.hid.build.variant=HoodLoader2_hid +HoodLoader2atmega32u2.menu.usbcore.hid.build.pid=0x484D HoodLoader2atmega32u2.menu.usbcore.gamepad=Serial + Gamepad HID HoodLoader2atmega32u2.menu.usbcore.gamepad.build.variant=HoodLoader2_gamepad +HoodLoader2atmega32u2.menu.usbcore.gamepad.build.pid=0x486D HoodLoader2atmega32u2.menu.usbcore.custom=Serial + Custom HID HoodLoader2atmega32u2.menu.usbcore.custom.build.variant=HoodLoader2_custom +HoodLoader2atmega32u2.menu.usbcore.custom.build.pid=0x485D HoodLoader2atmega32u2.menu.usbcore.USB_CORE=Default HID Project Core HoodLoader2atmega32u2.menu.usbcore.USB_CORE.build.variant=HoodLoader2 +HoodLoader2atmega32u2.menu.usbcore.USB_CORE.build.pid=0x487D HoodLoader2atmega32u2.menu.usbcore.NO_USB=No USB functions HoodLoader2atmega32u2.menu.usbcore.NO_USB.build.variant=HoodLoader2_NoUSB +HoodLoader2atmega32u2.menu.usbcore.NO_USB.build.pid=0x484D #Board selection (only important for burning bootloaders) @@ -209,6 +167,12 @@ HoodLoader2atmega8u2.build.board=HOODLOADER2 HoodLoader2atmega8u2.build.f_cpu=16000000L HoodLoader2atmega8u2.vid.0=0x2341 HoodLoader2atmega8u2.pid.0=0x484E +HoodLoader2atmega8u2.vid.1=0x2341 +HoodLoader2atmega8u2.pid.1=0x485E +HoodLoader2atmega8u2.vid.2=0x2341 +HoodLoader2atmega8u2.pid.2=0x486E +HoodLoader2atmega8u2.vid.3=0x2341 +HoodLoader2atmega8u2.pid.3=0x487E #uploading settings HoodLoader2atmega8u2.upload.speed=57600 @@ -226,7 +190,6 @@ HoodLoader2atmega8u2.bootloader.lock_bits=0x2F #usb settings, manufacturer overwritten by the IDE because of the VID HoodLoader2atmega8u2.build.vid=0x2341 -HoodLoader2atmega8u2.build.pid=0x484C HoodLoader2atmega8u2.build.usb_product="HoodLoader2 8u2" HoodLoader2atmega8u2.build.usb_manufacturer="Nico Hood" HoodLoader2atmega8u2.build.extra_flags={build.usb_flags} @@ -236,14 +199,19 @@ HoodLoader2atmega8u2.build.extra_flags={build.usb_flags} #HID Project needs to be installed https://github.com/NicoHood/HID HoodLoader2atmega8u2.menu.usbcore.hid=Serial + Extended HID HoodLoader2atmega8u2.menu.usbcore.hid.build.variant=HoodLoader2_hid +HoodLoader2atmega8u2.menu.usbcore.hid.build.pid=0x484E HoodLoader2atmega8u2.menu.usbcore.gamepad=Serial + Gamepad HID HoodLoader2atmega8u2.menu.usbcore.gamepad.build.variant=HoodLoader2_gamepad +HoodLoader2atmega8u2.menu.usbcore.gamepad.build.pid=0x486E HoodLoader2atmega8u2.menu.usbcore.custom=Serial + Custom HID HoodLoader2atmega8u2.menu.usbcore.custom.build.variant=HoodLoader2_custom +HoodLoader2atmega8u2.menu.usbcore.custom.build.pid=0x485E HoodLoader2atmega8u2.menu.usbcore.USB_CORE=Default HID Project Core HoodLoader2atmega8u2.menu.usbcore.USB_CORE.build.variant=HoodLoader2 +HoodLoader2atmega8u2.menu.usbcore.USB_CORE.build.pid=0x487E HoodLoader2atmega8u2.menu.usbcore.NO_USB=No USB functions HoodLoader2atmega8u2.menu.usbcore.NO_USB.build.variant=HoodLoader2_NoUSB +HoodLoader2atmega8u2.menu.usbcore.NO_USB.build.pid=0x484E #Board selection (only important for burning bootloaders) @@ -253,6 +221,78 @@ HoodLoader2atmega8u2.menu.board.mega2560=HoodLoader2 Mega HoodLoader2atmega8u2.menu.board.mega2560.bootloader.file=HoodLoader2/HoodLoader2_0_1_Mega_8u2.hex +############################################################## + + +HoodLoader2at90usb162.name=HoodLoader2 at90usb162 +HoodLoader2at90usb162.build.core=HID:hid +HoodLoader2at90usb162.bootloader.tool=arduino:avrdude +HoodLoader2at90usb162.upload.tool=arduino:avrdude + +# MCU properties +HoodLoader2at90usb162.upload.maximum_size=12288 +HoodLoader2at90usb162.upload.maximum_data_size=512 +HoodLoader2at90usb162.build.mcu=at90usb162 + +#general settings for all boards: +HoodLoader2at90usb162.build.board=HOODLOADER2 +HoodLoader2at90usb162.build.f_cpu=16000000L +HoodLoader2at90usb162.vid.0=0x2341 +HoodLoader2at90usb162.pid.0=0x484F +HoodLoader2at90usb162.vid.1=0x2341 +HoodLoader2at90usb162.pid.1=0x485F +HoodLoader2at90usb162.vid.2=0x2341 +HoodLoader2at90usb162.pid.2=0x486F +HoodLoader2at90usb162.vid.3=0x2341 +HoodLoader2at90usb162.pid.3=0x487F + +#uploading settings +HoodLoader2at90usb162.upload.speed=57600 +HoodLoader2at90usb162.upload.protocol=avr109 +HoodLoader2at90usb162.upload.disable_flushing=true +HoodLoader2at90usb162.upload.use_1200bps_touch=true +HoodLoader2at90usb162.upload.wait_for_upload_port=true + +#fuses (HoodLoader2 only, not suitable for DFU) +HoodLoader2at90usb162.bootloader.low_fuses=0xFF +HoodLoader2at90usb162.bootloader.high_fuses=0xD8 +HoodLoader2at90usb162.bootloader.extended_fuses=0xFC +HoodLoader2at90usb162.bootloader.unlock_bits=0x3F +HoodLoader2at90usb162.bootloader.lock_bits=0x2F + +#usb settings, manufacturer overwritten by the IDE because of the VID +HoodLoader2at90usb162.build.vid=0x2341 +HoodLoader2at90usb162.build.usb_product="HoodLoader2 at90usb162" +HoodLoader2at90usb162.build.usb_manufacturer="Nico Hood" +HoodLoader2at90usb162.build.extra_flags={build.usb_flags} + + +#USB core selection +#HID Project needs to be installed https://github.com/NicoHood/HID +HoodLoader2at90usb162.menu.usbcore.hid=Serial + Extended HID +HoodLoader2at90usb162.menu.usbcore.hid.build.variant=HoodLoader2_hid +HoodLoader2at90usb162.menu.usbcore.hid.build.pid=0x484F +HoodLoader2at90usb162.menu.usbcore.gamepad=Serial + Gamepad HID +HoodLoader2at90usb162.menu.usbcore.gamepad.build.variant=HoodLoader2_gamepad +HoodLoader2at90usb162.menu.usbcore.gamepad.build.pid=0x486F +HoodLoader2at90usb162.menu.usbcore.custom=Serial + Custom HID +HoodLoader2at90usb162.menu.usbcore.custom.build.variant=HoodLoader2_custom +HoodLoader2at90usb162.menu.usbcore.custom.build.pid=0x485F +HoodLoader2at90usb162.menu.usbcore.USB_CORE=Default HID Project Core +HoodLoader2at90usb162.menu.usbcore.USB_CORE.build.variant=HoodLoader2 +HoodLoader2at90usb162.menu.usbcore.USB_CORE.build.pid=0x487F +HoodLoader2at90usb162.menu.usbcore.NO_USB=No USB functions +HoodLoader2at90usb162.menu.usbcore.NO_USB.build.variant=HoodLoader2_NoUSB +HoodLoader2at90usb162.menu.usbcore.NO_USB.build.pid=0x484F + + +#Board selection (only important for burning bootloaders) +HoodLoader2at90usb162.menu.board.uno=HoodLoader2 Uno +HoodLoader2at90usb162.menu.board.uno.bootloader.file=HoodLoader2/HoodLoader2_0_1_Uno_at90usb162.hex +HoodLoader2at90usb162.menu.board.mega2560=HoodLoader2 Mega +HoodLoader2at90usb162.menu.board.mega2560.bootloader.file=HoodLoader2/HoodLoader2_0_1_Mega_at90usb162.hex + + ############################################################## HoodLoader2atmega16u2DFU.name=Original 16u2 DFU Firmware diff --git a/avr/bootloaders/HoodLoader2/HoodLoader2.inf b/avr/bootloaders/HoodLoader2/HoodLoader2.inf index 16eabc6..28ebe8d 100644 --- a/avr/bootloaders/HoodLoader2/HoodLoader2.inf +++ b/avr/bootloaders/HoodLoader2/HoodLoader2.inf @@ -45,28 +45,76 @@ HKR,,EnumPropPages32,,"msports.dll,SerialPortPropPageProvider" ; For each supported device, append ",USB\VID_xxxx&PID_yyyy" to the end of the line. ;------------------------------------------------------------------------------ [DeviceList] -%hoodloader2_16u2.name%=DriverInstall, USB\VID_2341&PID_484C&MI_00 -%hoodloader2_32u2.name%=DriverInstall, USB\VID_2341&PID_484D&MI_00 -%hoodloader2_8u2.name%=DriverInstall, USB\VID_2341&PID_484E&MI_00 -%hoodloader2_at90usb1622.name%=DriverInstall, USB\VID_2341&PID_484F&MI_00 +%hoodloader2_16u2_extended.name%=DriverInstall, USB\VID_2341&PID_484C&MI_00 +%hoodloader2_32u2_extended.name%=DriverInstall, USB\VID_2341&PID_484D&MI_00 +%hoodloader2_8u2_extended.name%=DriverInstall, USB\VID_2341&PID_484E&MI_00 +%hoodloader2_at90usb1622_extended.name%=DriverInstall, USB\VID_2341&PID_484F&MI_00 +%hoodloader2_16u2_custom.name%=DriverInstall, USB\VID_2341&PID_485C&MI_00 +%hoodloader2_32u2_custom.name%=DriverInstall, USB\VID_2341&PID_485D&MI_00 +%hoodloader2_8u2_custom.name%=DriverInstall, USB\VID_2341&PID_485E&MI_00 +%hoodloader2_at90usb1622_custom.name%=DriverInstall, USB\VID_2341&PID_485F&MI_00 +%hoodloader2_16u2_gamepad.name%=DriverInstall, USB\VID_2341&PID_486C&MI_00 +%hoodloader2_32u2_gamepad.name%=DriverInstall, USB\VID_2341&PID_486D&MI_00 +%hoodloader2_8u2_gamepad.name%=DriverInstall, USB\VID_2341&PID_486E&MI_00 +%hoodloader2_at90usb1622_gamepad.name%=DriverInstall, USB\VID_2341&PID_486F&MI_00 +%hoodloader2_16u2_default.name%=DriverInstall, USB\VID_2341&PID_487C&MI_00 +%hoodloader2_32u2_default.name%=DriverInstall, USB\VID_2341&PID_487D&MI_00 +%hoodloader2_8u2_default.name%=DriverInstall, USB\VID_2341&PID_487E&MI_00 +%hoodloader2_at90usb1622_default.name%=DriverInstall, USB\VID_2341&PID_487F&MI_00 [DeviceList.NTx86] -%hoodloader2_16u2.name%=DriverInstall, USB\VID_2341&PID_484C&MI_00 -%hoodloader2_32u2.name%=DriverInstall, USB\VID_2341&PID_484D&MI_00 -%hoodloader2_8u2.name%=DriverInstall, USB\VID_2341&PID_484E&MI_00 -%hoodloader2_at90usb1622.name%=DriverInstall, USB\VID_2341&PID_484F&MI_00 +%hoodloader2_16u2_extended.name%=DriverInstall, USB\VID_2341&PID_484C&MI_00 +%hoodloader2_32u2_extended.name%=DriverInstall, USB\VID_2341&PID_484D&MI_00 +%hoodloader2_8u2_extended.name%=DriverInstall, USB\VID_2341&PID_484E&MI_00 +%hoodloader2_at90usb1622_extended.name%=DriverInstall, USB\VID_2341&PID_484F&MI_00 +%hoodloader2_16u2_custom.name%=DriverInstall, USB\VID_2341&PID_485C&MI_00 +%hoodloader2_32u2_custom.name%=DriverInstall, USB\VID_2341&PID_485D&MI_00 +%hoodloader2_8u2_custom.name%=DriverInstall, USB\VID_2341&PID_485E&MI_00 +%hoodloader2_at90usb1622_custom.name%=DriverInstall, USB\VID_2341&PID_485F&MI_00 +%hoodloader2_16u2_gamepad.name%=DriverInstall, USB\VID_2341&PID_486C&MI_00 +%hoodloader2_32u2_gamepad.name%=DriverInstall, USB\VID_2341&PID_486D&MI_00 +%hoodloader2_8u2_gamepad.name%=DriverInstall, USB\VID_2341&PID_486E&MI_00 +%hoodloader2_at90usb1622_gamepad.name%=DriverInstall, USB\VID_2341&PID_486F&MI_00 +%hoodloader2_16u2_default.name%=DriverInstall, USB\VID_2341&PID_487C&MI_00 +%hoodloader2_32u2_default.name%=DriverInstall, USB\VID_2341&PID_487D&MI_00 +%hoodloader2_8u2_default.name%=DriverInstall, USB\VID_2341&PID_487E&MI_00 +%hoodloader2_at90usb1622_default.name%=DriverInstall, USB\VID_2341&PID_487F&MI_00 [DeviceList.NTamd64] -%hoodloader2_16u2.name%=DriverInstall, USB\VID_2341&PID_484C&MI_00 -%hoodloader2_32u2.name%=DriverInstall, USB\VID_2341&PID_484D&MI_00 -%hoodloader2_8u2.name%=DriverInstall, USB\VID_2341&PID_484E&MI_00 -%hoodloader2_at90usb1622.name%=DriverInstall, USB\VID_2341&PID_484F&MI_00 +%hoodloader2_16u2_extended.name%=DriverInstall, USB\VID_2341&PID_484C&MI_00 +%hoodloader2_32u2_extended.name%=DriverInstall, USB\VID_2341&PID_484D&MI_00 +%hoodloader2_8u2_extended.name%=DriverInstall, USB\VID_2341&PID_484E&MI_00 +%hoodloader2_at90usb1622_extended.name%=DriverInstall, USB\VID_2341&PID_484F&MI_00 +%hoodloader2_16u2_custom.name%=DriverInstall, USB\VID_2341&PID_485C&MI_00 +%hoodloader2_32u2_custom.name%=DriverInstall, USB\VID_2341&PID_485D&MI_00 +%hoodloader2_8u2_custom.name%=DriverInstall, USB\VID_2341&PID_485E&MI_00 +%hoodloader2_at90usb1622_custom.name%=DriverInstall, USB\VID_2341&PID_485F&MI_00 +%hoodloader2_16u2_gamepad.name%=DriverInstall, USB\VID_2341&PID_486C&MI_00 +%hoodloader2_32u2_gamepad.name%=DriverInstall, USB\VID_2341&PID_486D&MI_00 +%hoodloader2_8u2_gamepad.name%=DriverInstall, USB\VID_2341&PID_486E&MI_00 +%hoodloader2_at90usb1622_gamepad.name%=DriverInstall, USB\VID_2341&PID_486F&MI_00 +%hoodloader2_16u2_default.name%=DriverInstall, USB\VID_2341&PID_487C&MI_00 +%hoodloader2_32u2_default.name%=DriverInstall, USB\VID_2341&PID_487D&MI_00 +%hoodloader2_8u2_default.name%=DriverInstall, USB\VID_2341&PID_487E&MI_00 +%hoodloader2_at90usb1622_default.name%=DriverInstall, USB\VID_2341&PID_487F&MI_00 [DeviceList.NTia64] -%hoodloader2_16u2.name%=DriverInstall, USB\VID_2341&PID_484C&MI_00 -%hoodloader2_32u2.name%=DriverInstall, USB\VID_2341&PID_484D&MI_00 -%hoodloader2_8u2.name%=DriverInstall, USB\VID_2341&PID_484E&MI_00 -%hoodloader2_at90usb1622.name%=DriverInstall, USB\VID_2341&PID_484F&MI_00 +%hoodloader2_16u2_extended.name%=DriverInstall, USB\VID_2341&PID_484C&MI_00 +%hoodloader2_32u2_extended.name%=DriverInstall, USB\VID_2341&PID_484D&MI_00 +%hoodloader2_8u2_extended.name%=DriverInstall, USB\VID_2341&PID_484E&MI_00 +%hoodloader2_at90usb1622_extended.name%=DriverInstall, USB\VID_2341&PID_484F&MI_00 +%hoodloader2_16u2_custom.name%=DriverInstall, USB\VID_2341&PID_485C&MI_00 +%hoodloader2_32u2_custom.name%=DriverInstall, USB\VID_2341&PID_485D&MI_00 +%hoodloader2_8u2_custom.name%=DriverInstall, USB\VID_2341&PID_485E&MI_00 +%hoodloader2_at90usb1622_custom.name%=DriverInstall, USB\VID_2341&PID_485F&MI_00 +%hoodloader2_16u2_gamepad.name%=DriverInstall, USB\VID_2341&PID_486C&MI_00 +%hoodloader2_32u2_gamepad.name%=DriverInstall, USB\VID_2341&PID_486D&MI_00 +%hoodloader2_8u2_gamepad.name%=DriverInstall, USB\VID_2341&PID_486E&MI_00 +%hoodloader2_at90usb1622_gamepad.name%=DriverInstall, USB\VID_2341&PID_486F&MI_00 +%hoodloader2_16u2_default.name%=DriverInstall, USB\VID_2341&PID_487C&MI_00 +%hoodloader2_32u2_default.name%=DriverInstall, USB\VID_2341&PID_487D&MI_00 +%hoodloader2_8u2_default.name%=DriverInstall, USB\VID_2341&PID_487E&MI_00 +%hoodloader2_at90usb1622_default.name%=DriverInstall, USB\VID_2341&PID_487F&MI_00 ;------------------------------------------------------------------------------ ; String Definitions @@ -75,7 +123,19 @@ HKR,,EnumPropPages32,,"msports.dll,SerialPortPropPageProvider" ;------------------------------------------------------------------------------ [Strings] MFGNAME="NicoHood" -hoodloader2_16u2.name="Arduino HoodLoader2 16u2" -hoodloader2_32u2.name="Arduino HoodLoader2 32u2" -hoodloader2_8u2.name="Arduino HoodLoader2 8u2" -hoodloader2_at90usb162.name="Arduino HoodLoader2 at90usb162" +hoodloader2_16u2_extended.name="HoodLoader2 16u2 Extended" +hoodloader2_32u2_extended.name="HoodLoader2 32u2 Extended" +hoodloader2_8u2_extended.name="HoodLoader2 8u2 Extended" +hoodloader2_at90usb162_extended.name="HoodLoader2 at90usb162 Extended" +hoodloader2_16u2_custom.name="HoodLoader2 16u2 Custom" +hoodloader2_32u2_custom.name="HoodLoader2 32u2 Custom" +hoodloader2_8u2_custom.name="HoodLoader2 8u2 Custom" +hoodloader2_at90usb162_custom.name="HoodLoader2 at90usb162 Custom" +hoodloader2_16u2_gamepad.name="HoodLoader2 16u2 Gamepad" +hoodloader2_32u2_gamepad.name="HoodLoader2 32u2 Gamepad" +hoodloader2_8u2_gamepad.name="HoodLoader2 8u2 Gamepad" +hoodloader2_at90usb162_gamepad.name="HoodLoader2 at90usb162 Gamepad" +hoodloader2_16u2_default.name="HoodLoader2 16u2 Default" +hoodloader2_32u2_default.name="HoodLoader2 32u2 Default" +hoodloader2_8u2_default.name="HoodLoader2 8u2 Default" +hoodloader2_at90usb162_default.name="HoodLoader2 at90usb162 Default" diff --git a/avr/variants/mega_custom/pins_arduino.h b/avr/variants/mega_custom/pins_arduino.h index 5eef588..15c5f98 100644 --- a/avr/variants/mega_custom/pins_arduino.h +++ b/avr/variants/mega_custom/pins_arduino.h @@ -49,7 +49,7 @@ You have to enable the specific hid apis on your own then, also the keyboard led HoodLoader2 sketches are limited to a maximum 15 byte HID report. Dont use more than that. (for a Leonardo/Micro it is 63 bytes). -Arduino Uno/Mega's main mcu cannot have a specified HID descriptor, +Arduino Uno/Mega's main MCU cannot have a specified HID descriptor, edit the HoodLoader2 file for the 16u2 instead. It is more important that the HID APIs are the same on both devices. */ @@ -81,10 +81,8 @@ It is more important that the HID APIs are the same on both devices. // use this to enable the Keyboard Led functions //#define HID_KEYBOARD_LEDS_ENABLED -// add your custom report here: -#define EXTERN_HID_REPORT \ -HID_REPORT_KEYBOARD_KEYS(HID_REPORTID_KEYBOARD), \ -HID_REPORT_MOUSE(HID_REPORTID_MOUSE) +// flag that you are using a custom hid report descriptor +#define EXTERN_HID_REPORT // activate your custom HID-APIs here: #define HID_MOUSE_API_ENABLE @@ -96,74 +94,6 @@ HID_REPORT_MOUSE(HID_REPORTID_MOUSE) //#define HID_GAMEPAD_API_ENABLE //#define HID_ENABLE_ALL_APIS // enables all of the ones above - -//// 2nd example with a custom Joystick report (the Gamepad API wont work anymor since the report is different) -//#define EXTERN_HID_REPORT \ /* Gamepad with 32 buttons and 10 axis*/ \ -//0x05, 0x01, /* USAGE_PAGE (Generic Desktop) */ \ -//0x09, 0x04, /* USAGE (Joystick) */ \ -//0xa1, 0x01, /* COLLECTION (Application) */ \ -//0x85, HID_REPORTID_GAMEPAD, /* REPORT_ID */ \ -///* 32 Buttons */ \ -//0x05, 0x09, /* USAGE_PAGE (Button) */ \ -//0x19, 0x01, /* USAGE_MINIMUM (Button 1) */ \ -//0x29, 0x20, /* USAGE_MAXIMUM (Button 32) */ \ -//0x15, 0x00, /* LOGICAL_MINIMUM (0) */ \ -//0x25, 0x01, /* LOGICAL_MAXIMUM (1) */ \ -//0x75, 0x01, /* REPORT_SIZE (1) */ \ -//0x95, 0x20, /* REPORT_COUNT (32) */ \ -//0x81, 0x02, /* INPUT (Data,Var,Abs) */ \ -///* 10 8bit Axis */ \ -//0x05, 0x01, /* USAGE_PAGE (Generic Desktop) */ \ -//0xa1, 0x00, /* COLLECTION (Physical) */ \ -//0x09, 0x30, /* USAGE (X) */ \ -//0x09, 0x31, /* USAGE (Y) */ \ -//0x09, 0x33, /* USAGE (Rx) */ \ -//0x09, 0x34, /* USAGE (Ry) */ \ -//0x09, 0x32, /* USAGE (Z) */ \ -//0x09, 0x35, /* USAGE (Rz) */ \ -//0x09, 0x36, /* Usage (Slider) */ \ -//0x09, 0x36, /* Usage (Slider) */ \ -//0x09, 0x36, /* Usage (Slider) */ \ -//0x09, 0x36, /* Usage (Slider) */ \ -//0x15, 0x80, /* LOGICAL_MINIMUM (-128) */ \ -//0x25, 0x7F, /* LOGICAL_MAXIMUM (127) */ \ -//0x75, 0x08, /* REPORT_SIZE (8) */ \ -//0x95, 0x0A, /* REPORT_COUNT (10) */ \ -//0x81, 0x02, /* INPUT (Data,Var,Abs) */ \ -//0xc0, /* END_COLLECTION */ \ -//0xc0 /* END_COLLECTION */ -// -//// activate your custom HID-APIs here: -////#define HID_MOUSE_API_ENABLE -////#define HID_MOUSE_ABSOLUTE_API_ENABLE -////#define HID_KEYBOARD_API_ENABLE -////#define HID_RAWHID_API_ENABLE -////#define HID_CONSUMERCONTROL_API_ENABLE -////#define HID_SYSTEMCONTROL_API_ENABLE -////#define HID_GAMEPAD_API_ENABLE -////#define HID_ENABLE_ALL_APIS // enables all of the ones above - - -/* -You can use the pre defined reports as well. -Keep in mind that changing the ids or reports might confuse your OS. -Then you might need to reinstall all drivers or change the USB PID. -Mouse Abs only works with a System report together. -Gamepad and Mouse Abs dont work together. -Gamepads can causes some recognition problems with some OS. -RAW HID seems to not works properly in a multireport. -Currently available pre defined reports : -*/ - -//HID_REPORT_KEYBOARD_LEDS(HID_REPORTID_KEYBOARD), -//HID_REPORT_KEYBOARD_KEYS(HID_REPORTID_KEYBOARD), -//HID_REPORT_MOUSE(HID_REPORTID_MOUSE), -//HID_REPORT_MOUSE_ABSOLUTE(HID_REPORTID_MOUSE_ABSOLUTE), -//HID_REPORT_RAWHID(HID_REPORTID_RAWHID), -//HID_REPORT_CONSUMERCONTROL(HID_REPORTID_CONSUMERCONTROL), -//HID_REPORT_SYSTEMCONTROL(HID_REPORTID_SYSTEMCONTROL), -//HID_REPORT_GAMEPAD(HID_REPORTID_GAMEPAD), - #else #error Please select automatic or custom hid report in the pins_arduino.h! #endif \ No newline at end of file diff --git a/avr/variants/standard_custom/pins_arduino.h b/avr/variants/standard_custom/pins_arduino.h index fb19f02..f21238d 100644 --- a/avr/variants/standard_custom/pins_arduino.h +++ b/avr/variants/standard_custom/pins_arduino.h @@ -49,7 +49,7 @@ You have to enable the specific hid apis on your own then, also the keyboard led HoodLoader2 sketches are limited to a maximum 15 byte HID report. Dont use more than that. (for a Leonardo/Micro it is 63 bytes). -Arduino Uno/Mega's main mcu cannot have a specified HID descriptor, +Arduino Uno/Mega's main MCU cannot have a specified HID descriptor, edit the HoodLoader2 file for the 16u2 instead. It is more important that the HID APIs are the same on both devices. */ @@ -81,10 +81,8 @@ It is more important that the HID APIs are the same on both devices. // use this to enable the Keyboard Led functions //#define HID_KEYBOARD_LEDS_ENABLED -// add your custom report here: -#define EXTERN_HID_REPORT \ -HID_REPORT_KEYBOARD_KEYS(HID_REPORTID_KEYBOARD), \ -HID_REPORT_MOUSE(HID_REPORTID_MOUSE) +// flag that you are using a custom hid report descriptor +#define EXTERN_HID_REPORT // activate your custom HID-APIs here: #define HID_MOUSE_API_ENABLE @@ -96,74 +94,6 @@ HID_REPORT_MOUSE(HID_REPORTID_MOUSE) //#define HID_GAMEPAD_API_ENABLE //#define HID_ENABLE_ALL_APIS // enables all of the ones above - -//// 2nd example with a custom Joystick report (the Gamepad API wont work anymor since the report is different) -//#define EXTERN_HID_REPORT \ /* Gamepad with 32 buttons and 10 axis*/ \ -//0x05, 0x01, /* USAGE_PAGE (Generic Desktop) */ \ -//0x09, 0x04, /* USAGE (Joystick) */ \ -//0xa1, 0x01, /* COLLECTION (Application) */ \ -//0x85, HID_REPORTID_GAMEPAD, /* REPORT_ID */ \ -///* 32 Buttons */ \ -//0x05, 0x09, /* USAGE_PAGE (Button) */ \ -//0x19, 0x01, /* USAGE_MINIMUM (Button 1) */ \ -//0x29, 0x20, /* USAGE_MAXIMUM (Button 32) */ \ -//0x15, 0x00, /* LOGICAL_MINIMUM (0) */ \ -//0x25, 0x01, /* LOGICAL_MAXIMUM (1) */ \ -//0x75, 0x01, /* REPORT_SIZE (1) */ \ -//0x95, 0x20, /* REPORT_COUNT (32) */ \ -//0x81, 0x02, /* INPUT (Data,Var,Abs) */ \ -///* 10 8bit Axis */ \ -//0x05, 0x01, /* USAGE_PAGE (Generic Desktop) */ \ -//0xa1, 0x00, /* COLLECTION (Physical) */ \ -//0x09, 0x30, /* USAGE (X) */ \ -//0x09, 0x31, /* USAGE (Y) */ \ -//0x09, 0x33, /* USAGE (Rx) */ \ -//0x09, 0x34, /* USAGE (Ry) */ \ -//0x09, 0x32, /* USAGE (Z) */ \ -//0x09, 0x35, /* USAGE (Rz) */ \ -//0x09, 0x36, /* Usage (Slider) */ \ -//0x09, 0x36, /* Usage (Slider) */ \ -//0x09, 0x36, /* Usage (Slider) */ \ -//0x09, 0x36, /* Usage (Slider) */ \ -//0x15, 0x80, /* LOGICAL_MINIMUM (-128) */ \ -//0x25, 0x7F, /* LOGICAL_MAXIMUM (127) */ \ -//0x75, 0x08, /* REPORT_SIZE (8) */ \ -//0x95, 0x0A, /* REPORT_COUNT (10) */ \ -//0x81, 0x02, /* INPUT (Data,Var,Abs) */ \ -//0xc0, /* END_COLLECTION */ \ -//0xc0 /* END_COLLECTION */ -// -//// activate your custom HID-APIs here: -////#define HID_MOUSE_API_ENABLE -////#define HID_MOUSE_ABSOLUTE_API_ENABLE -////#define HID_KEYBOARD_API_ENABLE -////#define HID_RAWHID_API_ENABLE -////#define HID_CONSUMERCONTROL_API_ENABLE -////#define HID_SYSTEMCONTROL_API_ENABLE -////#define HID_GAMEPAD_API_ENABLE -////#define HID_ENABLE_ALL_APIS // enables all of the ones above - - -/* -You can use the pre defined reports as well. -Keep in mind that changing the ids or reports might confuse your OS. -Then you might need to reinstall all drivers or change the USB PID. -Mouse Abs only works with a System report together. -Gamepad and Mouse Abs dont work together. -Gamepads can causes some recognition problems with some OS. -RAW HID seems to not works properly in a multireport. -Currently available pre defined reports : -*/ - -//HID_REPORT_KEYBOARD_LEDS(HID_REPORTID_KEYBOARD), -//HID_REPORT_KEYBOARD_KEYS(HID_REPORTID_KEYBOARD), -//HID_REPORT_MOUSE(HID_REPORTID_MOUSE), -//HID_REPORT_MOUSE_ABSOLUTE(HID_REPORTID_MOUSE_ABSOLUTE), -//HID_REPORT_RAWHID(HID_REPORTID_RAWHID), -//HID_REPORT_CONSUMERCONTROL(HID_REPORTID_CONSUMERCONTROL), -//HID_REPORT_SYSTEMCONTROL(HID_REPORTID_SYSTEMCONTROL), -//HID_REPORT_GAMEPAD(HID_REPORTID_GAMEPAD), - #else #error Please select automatic or custom hid report in the pins_arduino.h! #endif \ No newline at end of file From ed7b9c6941920bd142b125d3680b2b9175e43ef9 Mon Sep 17 00:00:00 2001 From: Nico Date: Mon, 16 Feb 2015 19:46:46 +0100 Subject: [PATCH 06/28] Uncommented usb PID/VIDs To not display the Arduino Uno with a bridge in name --- avr/boards.txt | 16 +- avr/bootloaders/CDC/Board/Board.h | 127 + avr/bootloaders/CDC/Board/Buttons.h | 165 + avr/bootloaders/CDC/Board/LEDs.h | 145 + avr/bootloaders/CDC/BootloaderAPI.c | 75 + avr/bootloaders/CDC/BootloaderAPI.d | 30 + avr/bootloaders/CDC/BootloaderAPI.h | 58 + avr/bootloaders/CDC/BootloaderAPI.o | Bin 0 -> 6188 bytes avr/bootloaders/CDC/BootloaderAPITable.S | 91 + avr/bootloaders/CDC/BootloaderAPITable.d | 1 + avr/bootloaders/CDC/BootloaderAPITable.o | Bin 0 -> 3020 bytes avr/bootloaders/CDC/BootloaderCDC.bin | Bin 0 -> 4096 bytes avr/bootloaders/CDC/BootloaderCDC.c | 641 +++ avr/bootloaders/CDC/BootloaderCDC.d | 304 ++ avr/bootloaders/CDC/BootloaderCDC.eep | 2 + avr/bootloaders/CDC/BootloaderCDC.elf | Bin 0 -> 84710 bytes avr/bootloaders/CDC/BootloaderCDC.h | 144 + avr/bootloaders/CDC/BootloaderCDC.hex | 252 ++ avr/bootloaders/CDC/BootloaderCDC.lss | 3870 +++++++++++++++++ avr/bootloaders/CDC/BootloaderCDC.map | 1071 +++++ avr/bootloaders/CDC/BootloaderCDC.o | Bin 0 -> 25388 bytes avr/bootloaders/CDC/BootloaderCDC.sym | 218 + avr/bootloaders/CDC/BootloaderCDC.txt | 240 + avr/bootloaders/CDC/Config/AppConfig.h | 50 + avr/bootloaders/CDC/Config/LUFAConfig.h | 93 + avr/bootloaders/CDC/Descriptors.c | 244 ++ avr/bootloaders/CDC/Descriptors.d | 279 ++ avr/bootloaders/CDC/Descriptors.h | 158 + avr/bootloaders/CDC/Descriptors.o | Bin 0 -> 9708 bytes avr/bootloaders/CDC/LUFA CDC Bootloader.inf | 66 + avr/bootloaders/CDC/asf.xml | 161 + avr/bootloaders/CDC/doxyfile | 2365 ++++++++++ avr/bootloaders/CDC/makefile | 55 + avr/bootloaders/caterina/Caterina-Esplora.hex | 1024 +++++ avr/bootloaders/caterina/Caterina-Esplora.txt | 6 + .../caterina/Caterina-Leonardo.hex | 1024 +++++ .../caterina/Caterina-Leonardo.txt | 11 + avr/bootloaders/caterina/Caterina-Micro.hex | 1024 +++++ avr/bootloaders/caterina/Caterina-Micro.txt | 11 + avr/bootloaders/caterina/Caterina-Yun.hex | 1025 +++++ avr/bootloaders/caterina/Caterina.c | 714 +++ avr/bootloaders/caterina/Caterina.h | 106 + avr/bootloaders/caterina/Config/AppConfig.h | 70 + avr/bootloaders/caterina/Config/LUFAConfig.h | 113 + avr/bootloaders/caterina/Descriptors.c | 266 ++ avr/bootloaders/caterina/Descriptors.h | 139 + .../Esplora-prod-firmware-2012-12-10.hex | 1024 +++++ .../Esplora-prod-firmware-2012-12-10.txt | 6 + .../Leonardo-prod-firmware-2012-04-26.hex | 1024 +++++ .../Leonardo-prod-firmware-2012-04-26.txt | 11 + .../Leonardo-prod-firmware-2012-12-10.hex | 1024 +++++ .../Leonardo-prod-firmware-2012-12-10.txt | 11 + avr/bootloaders/caterina/Makefile_ori | 732 ++++ .../Micro-prod-firmware-2012-11-23.hex | 1024 +++++ .../Micro-prod-firmware-2012-11-23.txt | 11 + .../Micro-prod-firmware-2012-12-10.hex | 1024 +++++ .../Micro-prod-firmware-2012-12-10.txt | 11 + avr/bootloaders/caterina/makefile | 55 + tools/avrdude/Hoodloader1_8.hex | 642 +++ 59 files changed, 23045 insertions(+), 8 deletions(-) create mode 100644 avr/bootloaders/CDC/Board/Board.h create mode 100644 avr/bootloaders/CDC/Board/Buttons.h create mode 100644 avr/bootloaders/CDC/Board/LEDs.h create mode 100644 avr/bootloaders/CDC/BootloaderAPI.c create mode 100644 avr/bootloaders/CDC/BootloaderAPI.d create mode 100644 avr/bootloaders/CDC/BootloaderAPI.h create mode 100644 avr/bootloaders/CDC/BootloaderAPI.o create mode 100644 avr/bootloaders/CDC/BootloaderAPITable.S create mode 100644 avr/bootloaders/CDC/BootloaderAPITable.d create mode 100644 avr/bootloaders/CDC/BootloaderAPITable.o create mode 100644 avr/bootloaders/CDC/BootloaderCDC.bin create mode 100644 avr/bootloaders/CDC/BootloaderCDC.c create mode 100644 avr/bootloaders/CDC/BootloaderCDC.d create mode 100644 avr/bootloaders/CDC/BootloaderCDC.eep create mode 100644 avr/bootloaders/CDC/BootloaderCDC.elf create mode 100644 avr/bootloaders/CDC/BootloaderCDC.h create mode 100644 avr/bootloaders/CDC/BootloaderCDC.hex create mode 100644 avr/bootloaders/CDC/BootloaderCDC.lss create mode 100644 avr/bootloaders/CDC/BootloaderCDC.map create mode 100644 avr/bootloaders/CDC/BootloaderCDC.o create mode 100644 avr/bootloaders/CDC/BootloaderCDC.sym create mode 100644 avr/bootloaders/CDC/BootloaderCDC.txt create mode 100644 avr/bootloaders/CDC/Config/AppConfig.h create mode 100644 avr/bootloaders/CDC/Config/LUFAConfig.h create mode 100644 avr/bootloaders/CDC/Descriptors.c create mode 100644 avr/bootloaders/CDC/Descriptors.d create mode 100644 avr/bootloaders/CDC/Descriptors.h create mode 100644 avr/bootloaders/CDC/Descriptors.o create mode 100644 avr/bootloaders/CDC/LUFA CDC Bootloader.inf create mode 100644 avr/bootloaders/CDC/asf.xml create mode 100644 avr/bootloaders/CDC/doxyfile create mode 100644 avr/bootloaders/CDC/makefile create mode 100644 avr/bootloaders/caterina/Caterina-Esplora.hex create mode 100644 avr/bootloaders/caterina/Caterina-Esplora.txt create mode 100644 avr/bootloaders/caterina/Caterina-Leonardo.hex create mode 100644 avr/bootloaders/caterina/Caterina-Leonardo.txt create mode 100644 avr/bootloaders/caterina/Caterina-Micro.hex create mode 100644 avr/bootloaders/caterina/Caterina-Micro.txt create mode 100644 avr/bootloaders/caterina/Caterina-Yun.hex create mode 100644 avr/bootloaders/caterina/Caterina.c create mode 100644 avr/bootloaders/caterina/Caterina.h create mode 100644 avr/bootloaders/caterina/Config/AppConfig.h create mode 100644 avr/bootloaders/caterina/Config/LUFAConfig.h create mode 100644 avr/bootloaders/caterina/Descriptors.c create mode 100644 avr/bootloaders/caterina/Descriptors.h create mode 100644 avr/bootloaders/caterina/Esplora-prod-firmware-2012-12-10.hex create mode 100644 avr/bootloaders/caterina/Esplora-prod-firmware-2012-12-10.txt create mode 100644 avr/bootloaders/caterina/Leonardo-prod-firmware-2012-04-26.hex create mode 100644 avr/bootloaders/caterina/Leonardo-prod-firmware-2012-04-26.txt create mode 100644 avr/bootloaders/caterina/Leonardo-prod-firmware-2012-12-10.hex create mode 100644 avr/bootloaders/caterina/Leonardo-prod-firmware-2012-12-10.txt create mode 100644 avr/bootloaders/caterina/Makefile_ori create mode 100644 avr/bootloaders/caterina/Micro-prod-firmware-2012-11-23.hex create mode 100644 avr/bootloaders/caterina/Micro-prod-firmware-2012-11-23.txt create mode 100644 avr/bootloaders/caterina/Micro-prod-firmware-2012-12-10.hex create mode 100644 avr/bootloaders/caterina/Micro-prod-firmware-2012-12-10.txt create mode 100644 avr/bootloaders/caterina/makefile create mode 100644 tools/avrdude/Hoodloader1_8.hex diff --git a/avr/boards.txt b/avr/boards.txt index 7cf9499..28d824c 100644 --- a/avr/boards.txt +++ b/avr/boards.txt @@ -346,10 +346,10 @@ HoodLoader2atmega16u2DFU.menu.board.mega2560.bootloader.file=HoodLoader2/Arduino uno.name=Arduino Uno HID-Bridge -uno.vid.0=0x2341 -uno.pid.0=0x0043 -uno.vid.1=0x2341 -uno.pid.1=0x0001 +#uno.vid.0=0x2341 +#uno.pid.0=0x0043 +#uno.vid.1=0x2341 +#uno.pid.1=0x0001 uno.upload.tool=arduino:avrdude uno.upload.protocol=arduino @@ -389,10 +389,10 @@ uno.menu.usbcore.NO_USB.build.variant=standard mega.name=Arduino Mega 2560 HID-Bridge -mega.vid.0=0x2341 -mega.pid.0=0x0010 -mega.vid.1=0x2341 -mega.pid.1=0x0042 +#mega.vid.0=0x2341 +#mega.pid.0=0x0010 +#mega.vid.1=0x2341 +#mega.pid.1=0x0042 mega.upload.tool=arduino:avrdude mega.upload.maximum_data_size=8192 diff --git a/avr/bootloaders/CDC/Board/Board.h b/avr/bootloaders/CDC/Board/Board.h new file mode 100644 index 0000000..dffeea9 --- /dev/null +++ b/avr/bootloaders/CDC/Board/Board.h @@ -0,0 +1,127 @@ +/* +LUFA Library +Copyright (C) Dean Camera, 2014. + +dean [at] fourwalledcubicle [dot] com +www.lufa-lib.org +*/ + +/* +Copyright 2014 Dean Camera (dean [at] fourwalledcubicle [dot] com) + +Permission to use, copy, modify, distribute, and sell this +software and its documentation for any purpose is hereby granted +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 disclaims 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. +*/ + +/* +Copyright(c) 2014-2015 NicoHood +See the readme for credit to other people. + +This file is part of Hoodloader2. + +Hoodloader2 is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +Hoodloader2 is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with Hoodloader2. If not, see . +*/ + +/** \file +* \brief Board specific information header for the Arduino Leonardo board. +* \copydetails Group_BoardInfo_LEONARDO +* +* \note This file should not be included directly. It is automatically included as needed by the Board driver +* dispatch header located in LUFA/Drivers/Board/Board.h. +*/ + +/** \ingroup Group_BoardInfo +* \defgroup Group_BoardInfo_LEONARDO LEONARDO +* \brief Board specific information header for the Arduino Leonardo board. +* +* Board specific information header for the Arduino Leonardo board (http://arduino.cc/en/Main/arduinoBoardLeonardo). +* +* @{ +*/ + +#ifndef __BOARD_HOODLOADER_H__ +#define __BOARD_HOODLOADER_H__ + +/* Includes: */ +//#include "../../../../Common/Common.h" +//#include "../../LEDs.h" + +/* Enable C linkage for C++ Compilers: */ +#if defined(__cplusplus) +extern "C" { +#endif + + /* Preprocessor Checks: */ +#if !defined(__INCLUDE_FROM_BOARD_H) +#error Do not include this file directly. Include LUFA/Drivers/Board/Board.h instead. +#endif + + /* Public Interface - May be used in end-application: */ + /* Macros: */ + /** Indicates the board has hardware LEDs mounted. */ +#define BOARD_HAS_LEDS + +// 1200 is the baud to load the Bootloader from an Arduino sketch, 57600 turns out to be the actual baud rate for uploading +//TODO change baud rate to something people wont normally use +//#define BAUDRATE_CDC_BOOTLOADER 1200 +#define BAUDRATE_CDC_BOOTLOADER 57600 + +#define ARDUINO_PORT PORTD +#define ARDUINO_DDR DDRD + +#define AVR_RESET_LINE_PORT PORTD +#define AVR_RESET_LINE_DDR DDRD +#define AVR_RESET_LINE_PIN PIND +#define AVR_RESET_LINE_MASK (1 << PD7) + + // hardware configuration +#define AVR_SPI_PIN PINB +#define AVR_SPI_PORT PORTB +#define AVR_SPI_DDR DDRB +#define AVR_MOSI PB2 +#define AVR_MISO PB3 +#define AVR_SCK PB1 + // The "real", hardware SS pin is not connected on an Arduino R3 so we use another pin as SS. + // The hardware SS pin still needs to be in output mode to enable SPI master mode. + // SS is the pin thats close to the TX Led (bottom right) +#define AVR_SS PB4 +#define AVR_HARDWARE_SS PB0 + +#define LOW 0 +#define HIGH 1 + + /* Disable C linkage for C++ Compilers: */ +#if defined(__cplusplus) +} +#endif + +#endif + +/** @} */ + diff --git a/avr/bootloaders/CDC/Board/Buttons.h b/avr/bootloaders/CDC/Board/Buttons.h new file mode 100644 index 0000000..b30ee0f --- /dev/null +++ b/avr/bootloaders/CDC/Board/Buttons.h @@ -0,0 +1,165 @@ +/* + LUFA Library + Copyright (C) Dean Camera, 2014. + + dean [at] fourwalledcubicle [dot] com + www.lufa-lib.org + */ + +/* + Copyright 2014 Dean Camera (dean [at] fourwalledcubicle [dot] com) + + Permission to use, copy, modify, distribute, and sell this + software and its documentation for any purpose is hereby granted + 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 disclaims 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. + */ + +/* +Copyright(c) 2014-2015 NicoHood +See the readme for credit to other people. + +This file is part of Hoodloader2. + +Hoodloader2 is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +Hoodloader2 is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with Hoodloader2. If not, see . +*/ + +/** \file + * \brief Digital button board hardware driver. + * + * This file is the master dispatch header file for the board-specific Buttons driver, for boards containing + * physical pushbuttons connected to the microcontroller's GPIO pins. + * + * User code should include this file, which will in turn include the correct Button driver header file for the + * currently selected board. + * + * If the \c BOARD value is set to \c BOARD_USER, this will include the \c /Board/Buttons.h file in the user project + * directory. + * + * For possible \c BOARD makefile values, see \ref Group_BoardTypes. + */ + +/** \ingroup Group_BoardDrivers + * \defgroup Group_Buttons Buttons Driver - LUFA/Drivers/Board/Buttons.h + * \brief Digital button board hardware driver. + * + * \section Sec_Buttons_Dependencies Module Source Dependencies + * The following files must be built with any user project that uses this module: + * - None + * + * \section Sec_Buttons_ModDescription Module Description + * Hardware buttons driver. This provides an easy to use driver for the hardware buttons present on many boards. + * It provides a way to easily configure and check the status of all the buttons on the board so that appropriate + * actions can be taken. + * + * If the \c BOARD value is set to \c BOARD_USER, this will include the \c /Board/Buttons.h file in the user project + * directory. Otherwise, it will include the appropriate built-in board driver header file. + * + * For possible \c BOARD makefile values, see \ref Group_BoardTypes. + * + * \section Sec_Buttons_ExampleUsage Example Usage + * The following snippet is an example of how this module may be used within a typical + * application. + * + * \code + * // Initialize the button driver before first use + * Buttons_Init(); + * + * printf("Waiting for button press...\r\n"); + * + * // Loop until a board button has been pressed + * uint8_t ButtonPress; + * while (!(ButtonPress = Buttons_GetStatus())) {}; + * + * // Display which button was pressed (assuming two board buttons) + * printf("Button pressed: %s\r\n", (ButtonPress == BUTTONS_BUTTON1) ? "Button 1" : "Button 2"); + * \endcode + * + * @{ + */ + +#ifndef __BUTTONS_ARDUINO_H__ +#define __BUTTONS_ARDUINO_H__ + +/* Includes: */ +#include + +/* Enable C linkage for C++ Compilers: */ +#if defined(__cplusplus) +extern "C" { +#endif + + /* Preprocessor Checks: */ +#if !defined(__INCLUDE_FROM_BUTTONS_H) +#error Do not include this file directly. Include LUFA/Drivers/Board/Buttons.h instead. +#endif + +#define BUTTONS_BUTTON1 (1 << PB5) +#define BUTTONS_BUTTON2 (1 << PB6) +#define BUTTONS_BUTTON3 (1 << PB7) // unused +#define BUTTONS_ALL_BUTTONS (BUTTONS_BUTTON1 | BUTTONS_BUTTON2 | BUTTONS_BUTTON3) + + // Hoodloader defined button usage +#define BUTTON_HID BUTTONS_BUTTON1 +#define BUTTON_AUTORESET BUTTONS_BUTTON2 + + /* Pseudo-Functions for Doxygen: */ +#if !defined(__DOXYGEN__) + /** Initializes the buttons driver, so that the current button position can be read. This sets the appropriate + * I/O pins to an inputs with pull-ups enabled. + * + * This must be called before any Button driver functions are used. + */ + static inline void Buttons_Init(void){ + DDRB &= ~BUTTONS_ALL_BUTTONS; + PORTB |= BUTTONS_ALL_BUTTONS; + } + + /** Disables the buttons driver, releasing the I/O pins back to their default high-impedance input mode. */ + static inline void Buttons_Disable(void){ + PORTB &= ~BUTTONS_ALL_BUTTONS; + } + + /** Returns a mask indicating which board buttons are currently pressed. + * + * \return Mask of \c BUTTONS_BUTTON* constants indicating which board buttons are currently pressed. + */ + static inline uint_reg_t Buttons_GetStatus(void) ATTR_WARN_UNUSED_RESULT; + static inline uint_reg_t Buttons_GetStatus(void){ + return (PINB & (BUTTONS_ALL_BUTTONS)); + } +#endif + + /* Disable C linkage for C++ Compilers: */ +#if defined(__cplusplus) +} +#endif + +#endif + +/** @} */ + diff --git a/avr/bootloaders/CDC/Board/LEDs.h b/avr/bootloaders/CDC/Board/LEDs.h new file mode 100644 index 0000000..b27c6e4 --- /dev/null +++ b/avr/bootloaders/CDC/Board/LEDs.h @@ -0,0 +1,145 @@ +/* + LUFA Library + Copyright (C) Dean Camera, 2014. + + dean [at] fourwalledcubicle [dot] com + www.fourwalledcubicle.com + */ + +/* + Copyright 2014 Dean Camera (dean [at] fourwalledcubicle [dot] com) + + Permission to use, copy, modify, distribute, and sell this + software and its documentation for any purpose is hereby granted + 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. + */ + +/* +Copyright(c) 2014-2015 NicoHood +See the readme for credit to other people. + +This file is part of Hoodloader2. + +Hoodloader2 is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +Hoodloader2 is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with Hoodloader2. If not, see . +*/ + +#ifndef __LEDS_ARDUINOUNO_H__ +#define __LEDS_ARDUINOUNO_H__ + +/* Includes: */ +#include + +/* Enable C linkage for C++ Compilers: */ +#if defined(__cplusplus) +extern "C" { +#endif + + /* Preprocessor Checks: */ +#if !defined(__INCLUDE_FROM_LEDS_H) +#error Do not include this file directly. Include LUFA/Drivers/Board/LEDS.h instead. +#endif + + // Pulse generation counters to keep track of the number of milliseconds remaining for each pulse type +#define TX_RX_LED_PULSE_MS 3 + + /* Public Interface - May be used in end-application: */ + /* Macros: */ + /** LED mask for the first LED on the board. */ +#define LEDS_LED1 (1 << 5) + + /** LED mask for the second LED on the board. */ +#define LEDS_LED2 (1 << 4) + + /** LED mask for all the LEDs on the board. */ +#define LEDS_ALL_LEDS (LEDS_LED1 | LEDS_LED2) + + /** LED mask for the none of the board LEDs */ +#define LEDS_NO_LEDS 0 + + // LED mask for the library LED driver, to indicate TX activity. +#define LEDMASK_TX LEDS_LED1 + + // LED mask for the library LED driver, to indicate RX activity. +#define LEDMASK_RX LEDS_LED2 + + // AVRISP Leds +#define LEDS_PMODE LEDS_LED1 +#define LEDS_ERR LEDS_LED2 + + /* Inline Functions: */ +#if !defined(__DOXYGEN__) + static inline void LEDs_Init(void) + { + DDRD |= LEDS_ALL_LEDS; + PORTD |= LEDS_ALL_LEDS; + } + + static inline void LEDs_Disable(void) + { + DDRD &= ~LEDS_ALL_LEDS; + PORTD |= LEDS_ALL_LEDS; + } + + static inline void LEDs_TurnOnLEDs(const uint8_t LEDMask) + { + PORTD &= ~LEDMask; + } + + static inline void LEDs_TurnOffLEDs(const uint8_t LEDMask) + { + PORTD |= LEDMask; + } + + static inline void LEDs_SetAllLEDs(const uint8_t LEDMask) + { + PORTD = ((PORTD | LEDS_ALL_LEDS) & ~LEDMask); + } + + static inline void LEDs_ChangeLEDs(const uint8_t LEDMask, const uint8_t ActiveMask) + { + PORTD = ((PORTD | ActiveMask) & ~LEDMask); + } + + static inline void LEDs_ToggleLEDs(const uint8_t LEDMask) + { + PORTD ^= LEDMask; + } + + static inline uint8_t LEDs_GetLEDs(void) ATTR_WARN_UNUSED_RESULT; + static inline uint8_t LEDs_GetLEDs(void) + { + return (PORTD & LEDS_ALL_LEDS); + } +#endif + + /* Disable C linkage for C++ Compilers: */ +#if defined(__cplusplus) +} +#endif + +#endif diff --git a/avr/bootloaders/CDC/BootloaderAPI.c b/avr/bootloaders/CDC/BootloaderAPI.c new file mode 100644 index 0000000..f7564e9 --- /dev/null +++ b/avr/bootloaders/CDC/BootloaderAPI.c @@ -0,0 +1,75 @@ +/* + LUFA Library + Copyright (C) Dean Camera, 2014. + + dean [at] fourwalledcubicle [dot] com + www.lufa-lib.org +*/ + +/* + Copyright 2014 Dean Camera (dean [at] fourwalledcubicle [dot] com) + + Permission to use, copy, modify, distribute, and sell this + software and its documentation for any purpose is hereby granted + 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 disclaims 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 + * + * Bootloader user application API functions. + */ + +#include "BootloaderAPI.h" + +void BootloaderAPI_ErasePage(const uint32_t Address) +{ + boot_page_erase_safe(Address); + boot_spm_busy_wait(); + boot_rww_enable(); +} + +void BootloaderAPI_WritePage(const uint32_t Address) +{ + boot_page_write_safe(Address); + boot_spm_busy_wait(); + boot_rww_enable(); +} + +void BootloaderAPI_FillWord(const uint32_t Address, const uint16_t Word) +{ + boot_page_fill_safe(Address, Word); +} + +uint8_t BootloaderAPI_ReadSignature(const uint16_t Address) +{ + return boot_signature_byte_get(Address); +} + +uint8_t BootloaderAPI_ReadFuse(const uint16_t Address) +{ + return boot_lock_fuse_bits_get(Address); +} + +uint8_t BootloaderAPI_ReadLock(void) +{ + return boot_lock_fuse_bits_get(GET_LOCK_BITS); +} + +void BootloaderAPI_WriteLock(const uint8_t LockBits) +{ + boot_lock_bits_set_safe(LockBits); +} diff --git a/avr/bootloaders/CDC/BootloaderAPI.d b/avr/bootloaders/CDC/BootloaderAPI.d new file mode 100644 index 0000000..99481d6 --- /dev/null +++ b/avr/bootloaders/CDC/BootloaderAPI.d @@ -0,0 +1,30 @@ +BootloaderAPI.o: BootloaderAPI.c BootloaderAPI.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Common/Common.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Common/Architectures.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Common/BoardTypes.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Common/ArchitectureSpecific.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Common/CompilerSpecific.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Common/Attributes.h \ + Config/LUFAConfig.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Common/Endianness.h \ + Config/AppConfig.h + +BootloaderAPI.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Common/Common.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Common/Architectures.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Common/BoardTypes.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Common/ArchitectureSpecific.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Common/CompilerSpecific.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Common/Attributes.h: + +Config/LUFAConfig.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Common/Endianness.h: + +Config/AppConfig.h: diff --git a/avr/bootloaders/CDC/BootloaderAPI.h b/avr/bootloaders/CDC/BootloaderAPI.h new file mode 100644 index 0000000..2462cac --- /dev/null +++ b/avr/bootloaders/CDC/BootloaderAPI.h @@ -0,0 +1,58 @@ +/* + LUFA Library + Copyright (C) Dean Camera, 2014. + + dean [at] fourwalledcubicle [dot] com + www.lufa-lib.org +*/ + +/* + Copyright 2014 Dean Camera (dean [at] fourwalledcubicle [dot] com) + + Permission to use, copy, modify, distribute, and sell this + software and its documentation for any purpose is hereby granted + 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 disclaims 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 BootloaderAPI.c. + */ + +#ifndef _BOOTLOADER_API_H_ +#define _BOOTLOADER_API_H_ + + /* Includes: */ + #include + #include + #include + + #include + + #include "Config/AppConfig.h" + + /* Function Prototypes: */ + void BootloaderAPI_ErasePage(const uint32_t Address); + void BootloaderAPI_WritePage(const uint32_t Address); + void BootloaderAPI_FillWord(const uint32_t Address, const uint16_t Word); + uint8_t BootloaderAPI_ReadSignature(const uint16_t Address); + uint8_t BootloaderAPI_ReadFuse(const uint16_t Address); + uint8_t BootloaderAPI_ReadLock(void); + void BootloaderAPI_WriteLock(const uint8_t LockBits); + +#endif + diff --git a/avr/bootloaders/CDC/BootloaderAPI.o b/avr/bootloaders/CDC/BootloaderAPI.o new file mode 100644 index 0000000000000000000000000000000000000000..6275b3eac0f6c0028f5bab3a5127110fa07a210e GIT binary patch literal 6188 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 literal 0 HcmV?d00001 diff --git a/avr/bootloaders/CDC/BootloaderCDC.bin b/avr/bootloaders/CDC/BootloaderCDC.bin new file mode 100644 index 0000000000000000000000000000000000000000..2b1cace9035ac20e5ebbaa426da2ab40deaf217c GIT binary patch literal 4096 zcmcIne{fXA9pAkq<_>?{or;RU3pcGIHxEpXM zU#GMHjQ&f($VUe_BU%}RuB<9~$Q|0dtMC>~!>N&X#IixaV z?{Y}(*deuHN_A>eoV1O0(2?U8k6F|t@p|cv#U06q#+~$y;SP$`*;3n*j^xPr!v24J z@|@BKEzV7diM5Nr18Jic0vKL}= z(wW^pTHU?=fU9L*%bJ$;E%&tC*W{3&MFRNFqj^p1VZ6D1khbQI(O|BP7JigLUErY^ zLGDMdhMU~g1t~Fygzz&7dd0X zm!E6$!iw0Yp|5hi^i1wJ=1CQPG8`Qqy(LQH*L03|_cSoegX_cGV2>s*%8S(utqoTX zuL;*hIyI&6ofz9gQCf?Jl;oZ0!lcGc>(fW$t0FU9$G%Rk7;o3M7Ose;hB+ky64qQK zGnocWT9guFlpE9rh}p;pwH11UKuc7~!o1i3^cc6FaGF$@2T|Sv5#JotwJ=kIoF$WDkS51*+n&OVK`JPR6pFxv-JxOKA|zb6>46@V_0s_xl2_=3HOUK zreZzTMFnT^a|=3S#~0{yBx^FuPX*o5ZPUB78+u&eg$KMS1}|2F7mNAA z0-OH08pYGs^kPJGhY_JO<7=v2#TSeESm=Y? z_PKM^M?xFj9FgG6%D9cxD`zYX?Xx>(b29MDz%K*8tl;U9S=5f4_MA)c z{ZTWcd803ir)Ne>pIq=%3=#*{UB)+uL^_VIyX^OtKDp2~c4d?}v?FBJ=y| z3!||sBbc5m_aAug=p6ddRrV)AeJ#(X|DjKm%*w@TL!D9Ylu4&i{kX|QsC>NhtTxja zo3my$^cvNWgKAblJyVs%td_BVa|B`D`N=+xP{fyUGDW^Gww@H_cFf6bIEMxzB4rir zZH3iqdzTBoaV=G{OZJ_1$(a$9c`9^r1GSyEd=Mmd(cWbjQ^nhqQtBP?(dYM!3D}#jIp$5_`bly{|`#kNsi+U(WMS7DuC*q-jV+86_2GCvxPMbOpXuppT zs7uBy_;(HyffM#(>s0kS+k8<=r{}TDIDuwGJTs;=IWw$E+Q0>4 z2o+4`ccHoJ23OftM7n1_l?(w z@Y~t@aBcQe<4n>#A5vAH zRdGm%;bj+r-Zyo^E#D)rk~hfD%2jeu-X`ymyX8?iE_38C;^Mc%DjbCNR%j0+&?Ezu z90JObC;M$qHDoXmQl`3X)w zh*CbR2I&_JDStfI;P%JoUtxjq2VZ3TOgls^gALHedZu0;>Llwm;6S=l_fwWtgQzBM zQ3ZIRG7s-FYzXl*m>EDqd^WTZqn1UG59ZkpF$#;+)XsXQcGGKfw+@8n?2nUC(oJ@d zZ6rvl$g^YvSw-$4?rF8w%n8)b-l#*vQEKKmPwA40!Sd!zmgyon zft2&jnc`Uo+(}p!!Rn=IEy9_1NKsS=wKN6ls7-%Y4OX!BEzr{f_f7Wy=tGURSc}TE zxho zN^`~7TEJZ_nrGOmu-`E3chNiW5*S9oa*>R{uN#Xh4zZov>;5$R(#i>w2SZx93VWf! z$!GVMw1?j_(E_{vzEzp)W|Y+3jON&2137SFhQ*SU zaSg)BNxlRtirW$~vdjRPI>xqQ>T?j)LKd@$5$-PUN-T(LB kjNaROb9#$<@9Hh>UEa&q+Wh~%cEj3t|D$ry5I%q8zmTnmk^lez literal 0 HcmV?d00001 diff --git a/avr/bootloaders/CDC/BootloaderCDC.c b/avr/bootloaders/CDC/BootloaderCDC.c new file mode 100644 index 0000000..f66a483 --- /dev/null +++ b/avr/bootloaders/CDC/BootloaderCDC.c @@ -0,0 +1,641 @@ +/* + LUFA Library + Copyright (C) Dean Camera, 2014. + + dean [at] fourwalledcubicle [dot] com + www.lufa-lib.org +*/ + +/* + Copyright 2014 Dean Camera (dean [at] fourwalledcubicle [dot] com) + + Permission to use, copy, modify, distribute, and sell this + software and its documentation for any purpose is hereby granted + 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 disclaims 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_BOOTLOADERCDC_C +#include "BootloaderCDC.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; + +/** Magic lock for forced application start. If the HWBE fuse is programmed and BOOTRST is unprogrammed, the bootloader + * will start if the /HWB line of the AVR is held low and the system is reset. However, if the /HWB line is still held + * low when the application attempts to start via a watchdog reset, the bootloader will re-start. If set to the value + * \ref MAGIC_BOOT_KEY the special init function \ref Application_Jump_Check() will force the application to start. + */ +uint16_t MagicBootKey ATTR_NO_INIT; + + +/** Special startup routine to check if the bootloader was started via a watchdog reset, and if the magic application + * start key has been loaded into \ref MagicBootKey. If the bootloader started via the watchdog and the key is valid, + * this will force the user application to start via a software jump. + */ +void Application_Jump_Check(void) +{ + bool JumpToApplication = false; + + #if ((BOARD == BOARD_XPLAIN) || (BOARD == BOARD_XPLAIN_REV1)) + /* Disable JTAG debugging */ + JTAG_DISABLE(); + + /* Enable pull-up on the JTAG TCK pin so we can use it to select the mode */ + PORTF |= (1 << 4); + Delay_MS(10); + + /* If the TCK pin is not jumpered to ground, start the user application instead */ + JumpToApplication |= ((PINF & (1 << 4)) != 0); + + /* Re-enable JTAG debugging */ + JTAG_ENABLE(); + #endif + + /* If the reset source was the bootloader and the key is correct, clear it and jump to the application */ + if ((MCUSR & (1 << WDRF)) && (MagicBootKey == MAGIC_BOOT_KEY)) + JumpToApplication |= true; + + /* If a request has been made to jump to the user application, honor it */ + if (JumpToApplication) + { + /* Turn off the watchdog */ + MCUSR &= ~(1< 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 == MEMORY_TYPE_FLASH) + { + boot_page_erase(PageStartAddress); + boot_spm_busy_wait(); + } + + while (BlockSize--) + { + if (MemoryType == MEMORY_TYPE_FLASH) + { + /* 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 == MEMORY_TYPE_FLASH) + { + /* 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'); + } +} +#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_EPADDR); + + /* 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_EPADDR); + + /* 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); +} + +/** Task to read in AVR109 commands from the CDC data OUT endpoint, process them, perform the required actions + * and send the appropriate response back to the host. + */ +static void CDC_Task(void) +{ + /* Select the OUT endpoint */ + Endpoint_SelectEndpoint(CDC_RX_EPADDR); + + /* Check if endpoint has a command in it sent from the host */ + if (!(Endpoint_IsOUTReceived())) + return; + + /* Read in the bootloader command (first byte sent from host) */ + uint8_t Command = FetchNextCommandByte(); + + if (Command == AVR109_COMMAND_ExitBootloader) + { + RunBootloader = false; + + /* Send confirmation byte back to the host */ + WriteNextResponseByte('\r'); + } + else if ((Command == AVR109_COMMAND_SetLED) || (Command == AVR109_COMMAND_ClearLED) || + (Command == AVR109_COMMAND_SelectDeviceType)) + { + FetchNextCommandByte(); + + /* Send confirmation byte back to the host */ + WriteNextResponseByte('\r'); + } + else if ((Command == AVR109_COMMAND_EnterProgrammingMode) || (Command == AVR109_COMMAND_LeaveProgrammingMode)) + { + /* Send confirmation byte back to the host */ + WriteNextResponseByte('\r'); + } + else if (Command == AVR109_COMMAND_ReadPartCode) + { + /* Return ATMEGA128 part code - this is only to allow AVRProg to use the bootloader */ + WriteNextResponseByte(0x44); + WriteNextResponseByte(0x00); + } + else if (Command == AVR109_COMMAND_ReadAutoAddressIncrement) + { + /* Indicate auto-address increment is supported */ + WriteNextResponseByte('Y'); + } + else if (Command == AVR109_COMMAND_SetCurrentAddress) + { + /* Set the current address to that given by the host (translate 16-bit word address to byte address) */ + CurrAddress = (FetchNextCommandByte() << 9); + CurrAddress |= (FetchNextCommandByte() << 1); + + /* Send confirmation byte back to the host */ + WriteNextResponseByte('\r'); + } + else if (Command == AVR109_COMMAND_ReadBootloaderInterface) + { + /* Indicate serial programmer back to the host */ + WriteNextResponseByte('S'); + } + else if (Command == AVR109_COMMAND_ReadBootloaderIdentifier) + { + /* Write the 7-byte software identifier to the endpoint */ + for (uint8_t CurrByte = 0; CurrByte < 7; CurrByte++) + WriteNextResponseByte(SOFTWARE_IDENTIFIER[CurrByte]); + } + else if (Command == AVR109_COMMAND_ReadBootloaderSWVersion) + { + WriteNextResponseByte('0' + BOOTLOADER_VERSION_MAJOR); + WriteNextResponseByte('0' + BOOTLOADER_VERSION_MINOR); + } + else if (Command == AVR109_COMMAND_ReadSignature) + { + WriteNextResponseByte(AVR_SIGNATURE_3); + WriteNextResponseByte(AVR_SIGNATURE_2); + WriteNextResponseByte(AVR_SIGNATURE_1); + } + else if (Command == AVR109_COMMAND_EraseFLASH) + { + /* Clear the application section of flash */ + for (uint32_t CurrFlashAddress = 0; CurrFlashAddress < (uint32_t)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 == AVR109_COMMAND_WriteLockbits) + { + /* 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 == AVR109_COMMAND_ReadLockbits) + { + WriteNextResponseByte(boot_lock_fuse_bits_get(GET_LOCK_BITS)); + } + else if (Command == AVR109_COMMAND_ReadLowFuses) + { + WriteNextResponseByte(boot_lock_fuse_bits_get(GET_LOW_FUSE_BITS)); + } + else if (Command == AVR109_COMMAND_ReadHighFuses) + { + WriteNextResponseByte(boot_lock_fuse_bits_get(GET_HIGH_FUSE_BITS)); + } + else if (Command == AVR109_COMMAND_ReadExtendedFuses) + { + WriteNextResponseByte(boot_lock_fuse_bits_get(GET_EXTENDED_FUSE_BITS)); + } + #if !defined(NO_BLOCK_SUPPORT) + else if (Command == AVR109_COMMAND_GetBlockWriteSupport) + { + WriteNextResponseByte('Y'); + + /* Send block size to the host */ + WriteNextResponseByte(SPM_PAGESIZE >> 8); + WriteNextResponseByte(SPM_PAGESIZE & 0xFF); + } + else if ((Command == AVR109_COMMAND_BlockWrite) || (Command == AVR109_COMMAND_BlockRead)) + { + /* Delegate the block write/read to a separate function for clarity */ + ReadWriteMemoryBlock(Command); + } + #endif + #if !defined(NO_FLASH_BYTE_SUPPORT) + else if (Command == AVR109_COMMAND_FillFlashPageWordHigh) + { + /* 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 == AVR109_COMMAND_FillFlashPageWordLow) + { + /* 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 == AVR109_COMMAND_WriteFlashPage) + { + /* 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 == AVR109_COMMAND_ReadFLASHWord) + { + #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 == AVR109_COMMAND_WriteEEPROM) + { + /* 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 == AVR109_COMMAND_ReadEEPROM) + { + /* 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 != AVR109_COMMAND_Sync) + { + /* Unknown (non-sync) command, return fail code */ + WriteNextResponseByte('?'); + } + + /* Select the IN endpoint */ + Endpoint_SelectEndpoint(CDC_TX_EPADDR); + + /* 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_EPADDR); + + /* Acknowledge the command from the host */ + Endpoint_ClearOUT(); +} + diff --git a/avr/bootloaders/CDC/BootloaderCDC.d b/avr/bootloaders/CDC/BootloaderCDC.d new file mode 100644 index 0000000..b7655c4 --- /dev/null +++ b/avr/bootloaders/CDC/BootloaderCDC.d @@ -0,0 +1,304 @@ +BootloaderCDC.o: BootloaderCDC.c BootloaderCDC.h Descriptors.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/USB.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/../../Common/Common.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/../../Common/Architectures.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/../../Common/BoardTypes.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/../../Common/ArchitectureSpecific.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/../../Common/CompilerSpecific.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/../../Common/Attributes.h \ + Config/LUFAConfig.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/../../Common/Endianness.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/USBMode.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/../../../Common/Common.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/USBTask.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/USBMode.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/USBController.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/AVR8/../../../../Common/Common.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/AVR8/../USBMode.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/AVR8/../Events.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/AVR8/../../../../Common/Common.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/AVR8/../USBMode.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/AVR8/../USBTask.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/AVR8/../USBInterrupt.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/AVR8/../AVR8/USBInterrupt_AVR8.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/AVR8/../AVR8/../../../../Common/Common.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/AVR8/../AVR8/../USBMode.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/AVR8/../AVR8/../Events.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/AVR8/../AVR8/../USBController.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/AVR8/../Device.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/AVR8/../StdDescriptors.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/AVR8/../Events.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/AVR8/../USBInterrupt.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/AVR8/../Endpoint.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/AVR8/../AVR8/Endpoint_AVR8.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/AVR8/../AVR8/../USBTask.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/AVR8/../AVR8/../USBInterrupt.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/AVR8/../AVR8/Device_AVR8.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/AVR8/../AVR8/../StdDescriptors.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/AVR8/../AVR8/../Endpoint.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/AVR8/../Endpoint.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/AVR8/../DeviceStandardReq.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/AVR8/../StdRequestType.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/AVR8/../USBTask.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/AVR8/../USBController.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/AVR8/../EndpointStream.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/AVR8/../AVR8/EndpointStream_AVR8.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/Events.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/StdRequestType.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/StdDescriptors.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/DeviceStandardReq.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/Events.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/StdDescriptors.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/ConfigDescriptors.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/HostStandardReq.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/USBController.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/USBInterrupt.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/Device.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/Endpoint.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/DeviceStandardReq.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/EndpointStream.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Class/AndroidAccessoryClass.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Class/../Core/USBMode.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Class/AudioClass.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Class/Device/AudioClassDevice.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Class/Device/../../USB.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Class/Device/../Common/AudioClassCommon.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Class/Device/../Common/../../Core/StdDescriptors.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Class/CDCClass.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Class/Device/CDCClassDevice.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Class/Device/../Common/CDCClassCommon.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Class/HIDClass.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Class/Device/HIDClassDevice.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Class/Device/../Common/HIDClassCommon.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Class/Device/../Common/HIDParser.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Class/Device/../Common/../../../../Common/Common.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Class/Device/../Common/HIDReportData.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Class/Device/../Common/HIDClassCommon.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Class/MassStorageClass.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Class/Device/MassStorageClassDevice.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Class/Device/../Common/MassStorageClassCommon.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Class/MIDIClass.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Class/Device/MIDIClassDevice.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Class/Device/../Common/MIDIClassCommon.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Class/Device/../Common/AudioClassCommon.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Class/PrinterClass.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Class/Device/PrinterClassDevice.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Class/Device/../Common/PrinterClassCommon.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Class/RNDISClass.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Class/Device/RNDISClassDevice.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Class/Device/../Common/RNDISClassCommon.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Class/Device/../Common/CDCClassCommon.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Class/StillImageClass.h \ + Config/AppConfig.h BootloaderAPI.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Common/Common.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/Board/LEDs.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/Board/../../Common/Common.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/Board/AVR8/LEONARDO/LEDs.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/Board/AVR8/LEONARDO/../../../../Common/Common.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Platform/Platform.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Platform/../Common/Common.h + +BootloaderCDC.h: + +Descriptors.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/USB.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/../../Common/Common.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/../../Common/Architectures.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/../../Common/BoardTypes.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/../../Common/ArchitectureSpecific.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/../../Common/CompilerSpecific.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/../../Common/Attributes.h: + +Config/LUFAConfig.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/../../Common/Endianness.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/USBMode.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/../../../Common/Common.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/USBTask.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/USBMode.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/USBController.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/AVR8/../../../../Common/Common.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/AVR8/../USBMode.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/AVR8/../Events.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/AVR8/../../../../Common/Common.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/AVR8/../USBMode.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/AVR8/../USBTask.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/AVR8/../USBInterrupt.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/AVR8/../AVR8/USBInterrupt_AVR8.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/AVR8/../AVR8/../../../../Common/Common.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/AVR8/../AVR8/../USBMode.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/AVR8/../AVR8/../Events.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/AVR8/../AVR8/../USBController.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/AVR8/../Device.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/AVR8/../StdDescriptors.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/AVR8/../Events.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/AVR8/../USBInterrupt.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/AVR8/../Endpoint.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/AVR8/../AVR8/Endpoint_AVR8.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/AVR8/../AVR8/../USBTask.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/AVR8/../AVR8/../USBInterrupt.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/AVR8/../AVR8/Device_AVR8.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/AVR8/../AVR8/../StdDescriptors.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/AVR8/../AVR8/../Endpoint.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/AVR8/../Endpoint.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/AVR8/../DeviceStandardReq.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/AVR8/../StdRequestType.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/AVR8/../USBTask.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/AVR8/../USBController.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/AVR8/../EndpointStream.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/AVR8/../AVR8/EndpointStream_AVR8.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/Events.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/StdRequestType.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/StdDescriptors.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/DeviceStandardReq.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/Events.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/StdDescriptors.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/ConfigDescriptors.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/HostStandardReq.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/USBController.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/USBInterrupt.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/Device.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/Endpoint.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/DeviceStandardReq.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/EndpointStream.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Class/AndroidAccessoryClass.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Class/../Core/USBMode.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Class/AudioClass.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Class/Device/AudioClassDevice.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Class/Device/../../USB.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Class/Device/../Common/AudioClassCommon.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Class/Device/../Common/../../Core/StdDescriptors.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Class/CDCClass.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Class/Device/CDCClassDevice.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Class/Device/../Common/CDCClassCommon.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Class/HIDClass.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Class/Device/HIDClassDevice.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Class/Device/../Common/HIDClassCommon.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Class/Device/../Common/HIDParser.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Class/Device/../Common/../../../../Common/Common.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Class/Device/../Common/HIDReportData.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Class/Device/../Common/HIDClassCommon.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Class/MassStorageClass.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Class/Device/MassStorageClassDevice.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Class/Device/../Common/MassStorageClassCommon.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Class/MIDIClass.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Class/Device/MIDIClassDevice.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Class/Device/../Common/MIDIClassCommon.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Class/Device/../Common/AudioClassCommon.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Class/PrinterClass.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Class/Device/PrinterClassDevice.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Class/Device/../Common/PrinterClassCommon.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Class/RNDISClass.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Class/Device/RNDISClassDevice.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Class/Device/../Common/RNDISClassCommon.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Class/Device/../Common/CDCClassCommon.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Class/StillImageClass.h: + +Config/AppConfig.h: + +BootloaderAPI.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Common/Common.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/Board/LEDs.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/Board/../../Common/Common.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/Board/AVR8/LEONARDO/LEDs.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/Board/AVR8/LEONARDO/../../../../Common/Common.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Platform/Platform.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Platform/../Common/Common.h: diff --git a/avr/bootloaders/CDC/BootloaderCDC.eep b/avr/bootloaders/CDC/BootloaderCDC.eep new file mode 100644 index 0000000..4d6b5cc --- /dev/null +++ b/avr/bootloaders/CDC/BootloaderCDC.eep @@ -0,0 +1,2 @@ +:040000030000700089 +:00000001FF diff --git a/avr/bootloaders/CDC/BootloaderCDC.elf b/avr/bootloaders/CDC/BootloaderCDC.elf new file mode 100644 index 0000000000000000000000000000000000000000..699a95453f39169704847d63d55d09c254c3dacd GIT binary patch literal 84710 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 TIwr@oGhnnK?bY2_q^|xC>~Wl$ literal 0 HcmV?d00001 diff --git a/avr/bootloaders/CDC/BootloaderCDC.h b/avr/bootloaders/CDC/BootloaderCDC.h new file mode 100644 index 0000000..9b326ab --- /dev/null +++ b/avr/bootloaders/CDC/BootloaderCDC.h @@ -0,0 +1,144 @@ +/* + LUFA Library + Copyright (C) Dean Camera, 2014. + + dean [at] fourwalledcubicle [dot] com + www.lufa-lib.org +*/ + +/* + Copyright 2014 Dean Camera (dean [at] fourwalledcubicle [dot] com) + + Permission to use, copy, modify, distribute, and sell this + software and its documentation for any purpose is hereby granted + 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 disclaims 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 + #include + #include + #include + #include + #include + #include + + #include "Descriptors.h" + #include "BootloaderAPI.h" + #include "Config/AppConfig.h" + + #include + #include + #include + + /* Preprocessor Checks: */ + #if !defined(__OPTIMIZE_SIZE__) + #error This bootloader requires that it be optimized for size, not speed, to fit into the target device. Change optimization settings and try again. + #endif + + /* 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 "LUFACDC" + + /** Magic bootloader key to unlock forced application start mode. */ + #define MAGIC_BOOT_KEY 0xDC42 + + /* Enums: */ + /** Possible memory types that can be addressed via the bootloader. */ + enum AVR109_Memories + { + MEMORY_TYPE_FLASH = 'F', + MEMORY_TYPE_EEPROM = 'E', + }; + + /** Possible commands that can be issued to the bootloader. */ + enum AVR109_Commands + { + AVR109_COMMAND_Sync = 27, + AVR109_COMMAND_ReadEEPROM = 'd', + AVR109_COMMAND_WriteEEPROM = 'D', + AVR109_COMMAND_ReadFLASHWord = 'R', + AVR109_COMMAND_WriteFlashPage = 'm', + AVR109_COMMAND_FillFlashPageWordLow = 'c', + AVR109_COMMAND_FillFlashPageWordHigh = 'C', + AVR109_COMMAND_GetBlockWriteSupport = 'b', + AVR109_COMMAND_BlockWrite = 'B', + AVR109_COMMAND_BlockRead = 'g', + AVR109_COMMAND_ReadExtendedFuses = 'Q', + AVR109_COMMAND_ReadHighFuses = 'N', + AVR109_COMMAND_ReadLowFuses = 'F', + AVR109_COMMAND_ReadLockbits = 'r', + AVR109_COMMAND_WriteLockbits = 'l', + AVR109_COMMAND_EraseFLASH = 'e', + AVR109_COMMAND_ReadSignature = 's', + AVR109_COMMAND_ReadBootloaderSWVersion = 'V', + AVR109_COMMAND_ReadBootloaderHWVersion = 'v', + AVR109_COMMAND_ReadBootloaderIdentifier = 'S', + AVR109_COMMAND_ReadBootloaderInterface = 'p', + AVR109_COMMAND_SetCurrentAddress = 'A', + AVR109_COMMAND_ReadAutoAddressIncrement = 'a', + AVR109_COMMAND_ReadPartCode = 't', + AVR109_COMMAND_EnterProgrammingMode = 'P', + AVR109_COMMAND_LeaveProgrammingMode = 'L', + AVR109_COMMAND_SelectDeviceType = 'T', + AVR109_COMMAND_SetLED = 'x', + AVR109_COMMAND_ClearLED = 'y', + AVR109_COMMAND_ExitBootloader = 'E', + }; + + /* 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: */ + static void CDC_Task(void); + static void SetupHardware(void); + + void Application_Jump_Check(void) ATTR_INIT_SECTION(3); + + void EVENT_USB_Device_ConfigurationChanged(void); + + #if defined(INCLUDE_FROM_BOOTLOADERCDC_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/avr/bootloaders/CDC/BootloaderCDC.hex b/avr/bootloaders/CDC/BootloaderCDC.hex new file mode 100644 index 0000000..d6d5641 --- /dev/null +++ b/avr/bootloaders/CDC/BootloaderCDC.hex @@ -0,0 +1,252 @@ +:1070000055C000008AC0000088C0000086C0000093 +:1070100084C0000082C0000080C000007EC000006C +:107020007CC000007AC0000049C5000076C00000A6 +:1070300074C0000072C0000070C000006EC000008C +:107040006CC000006AC0000068C0000066C000009C +:1070500021C3000062C0000060C000005EC00000EC +:107060005CC000005AC0000058C0000056C00000BC +:1070700054C0000052C0000050C000004EC00000CC +:107080004CC000004AC0000048C0000046C00000DC +:1070900044C0000042C0000040C000003EC00000EC +:1070A0003CC000003AC0000038C0000011241FBEE0 +:1070B000CFEFDAE0DEBFCDBF04B603FE19C080918A +:1070C000A0019091A10182349C4D91F484B7877FF7 +:1070D00084BF88E10FB6F89480936000109260003E +:1070E0000FBE1092A1011092A001E0E0F0E009951E +:1070F00011E0A0E0B1E0ECEAFEE702C005900D92DD +:10710000A239B107D9F711E0A2E9B1E001C01D929F +:10711000A03AB107E1F735D0C7C672CF84E08093BB +:10712000E9000DC08091E8008B778093E80003C0F0 +:107130008EB3882359F08091E80082FFF9CF8091C7 +:10714000E80085FFEFCF8091F100089580E0089579 +:1071500093E09093E9009091E80095FF03C080933D +:10716000F10008959091E8009E779093E80003C0A5 +:107170009EB3992329F09091E80090FFF9CFEFCFCB +:107180000895CF93DF93CDB7DEB728970FB6F89465 +:10719000DEBF0FBECDBF84B7877F84BF88E10FB647 +:1071A000F89480936000109260000FBE90E080E839 +:1071B0000FB6F89480936100909361000FBE11E0C8 +:1071C00015BF82E085BF5DD4209A289A559A5D9AB2 +:1071D0003F9A479810936F0083E08093810028982E +:1071E0005D9A47987894E3E09E2EF5E08F2E09E0B3 +:1071F00036C224E02093E9008091E80082FF2EC28D +:107200008DDF982F853419F41092000106C088573D +:10721000823010F0943521F481DF8DE099DFF6C1E2 +:107220009035D9F39C3409F4F8CF943721F484E4F1 +:107230008FDF80E0F3CF913611F489E5EFCF913401 +:1072400091F46CDFF82E6ADF90E0880F991FFF0C35 +:10725000FB821A822A813B81822B932BAA2797FDDE +:10726000A095BA2FA7C1903711F483E5D7CF9335F6 +:1072700071F46AE8E62E61E0F62EF70181917F0154 +:1072800067DFF1E9EF16F1E0FF06B9F7BFC1963508 +:1072900021F481E35DDF80E3C1CF933731F487E8E8 +:1072A00057DF85E955DF8EE1B9CF9536A9F4E0E0E7 +:1072B000F0E090925700E89507B600FCFDCF809271 +:1072C0005700E89507B600FCFDCFE058FF4FE115E9 +:1072D00020E7F20771F7A1CF9C3649F41FDF8095B4 +:1072E000E1E0F0E0082E00935700E89596CF923742 +:1072F00019F4E1E0F0E00EC0963419F4E0E0F0E0BB +:1073000009C09E3419F4E3E0F0E004C0913531F493 +:10731000E2E0F0E000935700849180CF923631F4A0 +:1073200089E516DF80E014DF80E878CF923419F029 +:10733000973609F0D8C09E83F1DE782E612CEEDE00 +:107340009301282B38872F83E9DE898385549E811A +:10735000823010F08FE362CF973609F049C031E1F7 +:1073600030935700E895A12C3DC0C0909201D09079 +:107370009301E0909401F090950129812634B9F4AD +:10738000EA2DF0E0EC29FD298491E2DEAA2069F0E3 +:1073900032E0C30ED11CE11CF11CC0929201D092CC +:1073A0009301E0929401F0929501A12615C0D701B6 +:1073B000C601B695A7959795879560D5C9DE82E0F9 +:1073C000C80ED11CE11CF11CC0929201D092930115 +:1073D000E0929401F09295012F8138852150310976 +:1073E00038872F832F813885232B09F0BECF0EC11C +:1073F000209092013090930140909401509095011B +:107400003981363409F05CC0F10190925700E8955B +:1074100007B600FCFDCF54C02981263441F5AA20CF +:1074200011F1C0909201D0909301E0909401F090FE +:10743000950174DE8D831C822C813D812B29F60100 +:10744000090110935700E8951124F2E0CF0ED11CEA +:10745000E11CF11CC0929201D0929301E092940140 +:10746000F092950102C05ADEB82EA12622C056DE47 +:10747000682F8091920190919301A0919401B09115 +:107480009501B695A7959795879500D5809192011E +:1074900090919301A0919401B09195010296A11D44 +:1074A000B11D8093920190939301A0939401B093A6 +:1074B00095012F8138852150310938872F8302C0EB +:1074C000B12CA12C2F813885232B09F0A5CF398130 +:1074D000363409F0A2CEF10180925700E89507B644 +:1074E00000FCFDCF9ACE933469F4E0909201F090C5 +:1074F000930114DE90E0F7010C0110935700E8951A +:1075000011248BCE933609F5C0909201D09093014F +:10751000E0909401F090950101DEB701A601416071 +:1075200090E0FA010C0110935700E8951124F2E065 +:10753000CF0ED11CE11CF11CC0929201D09293019C +:10754000E0929401F092950168CE9D3659F4E09155 +:107550009201F091930180925700E89507B600FCE4 +:10756000FDCF5BCE923551F4E0919201F091930101 +:10757000E590F4908F2DECDD8E2D50CE943419F5DE +:10758000CDDD682F8091920190919301A09194019B +:10759000B0919501B695A7959795879577D48091E9 +:1075A000920190919301A0919401B091950102965E +:1075B000A11DB11D8093920190939301A09394011A +:1075C000B09395012ACE9436F1F4C0909201D090F8 +:1075D0009301E0909401F0909501D701C601B69512 +:1075E000A795979587954AD4B3DD22E0C20ED11CAA +:1075F000E11CF11CC0929201D0929301E09294019F +:10760000F092950103C09B3109F0A4CE9092E9005D +:107610009091E8008091E8008E778093E80095FDD6 +:1076200011C08091E80080FD04C08EB38111F9CFB4 +:1076300015C08091E8008E778093E80003C08EB378 +:10764000882361F08091E80080FFF9CF34E0309327 +:10765000E9008091E8008B778093E800F4D3809173 +:1076600000018111C6CD8091E00081608093E0002F +:1076700082E49CED9093A1018093A0012CE088E12D +:1076800090E00FB6F894A895809360000FBE209309 +:107690006000FFCF1F920F920FB60F9211248F93AD +:1076A00081E083B980E289B916B88F910F900FBE3F +:1076B0000F901F90189542E061EC82E074D142E196 +:1076C00061E883E070D142E160E884E06CC18091C0 +:1076D0009801982F9F779132C1F591E093B990E28C +:1076E00099B916B890919901913229F0923229F105 +:1076F000903259F510C0813A41F58091E800877FBA +:107700008093E80067E070E081E091E0A6D080918E +:10771000E8008B770FC08132C1F48091E800877F49 +:107720008093E80067E070E081E091E0F7D080911D +:10773000E8008E778093E8000895813231F48091DB +:10774000E800877F8093E80042C10895292F30E048 +:1077500033272230310539F02330310549F021300B +:10776000310589F00BC02EE330E08AE391E01EC0C2 +:10777000882371F0813089F08230A1F020E030E080 +:1077800080E090E013C022E130E088E791E00EC095 +:1077900024E030E086E391E009C028E130E08CE1AC +:1077A00091E004C022E130E088E091E0FA019183A9 +:1077B0008083C901089507B600FCFDCFF999FECF7B +:1077C00023E0FB0120935700E89507B600FCFDCFAE +:1077D00081E180935700E895089507B600FCFDCF3E +:1077E000F999FECF25E0FB0120935700E89507B6F5 +:1077F00000FCFDCF81E180935700E895089507B61E +:1078000000FCFDCFF999FECF21E0FB010A01209396 +:107810005700E8951124089521E2FC0120935700B8 +:107820008491089529E0FC012093570084910895E4 +:10783000E1E0F0E089E0809357008491089507B675 +:1078400000FCFDCFF999FECF809599E0E1E0F0E0F2 +:10785000082E90935700E895089540919E0150910D +:107860009F014617570748F06115710539F440919B +:10787000E8004E774093E80001C0BA01FC0140E007 +:1078800032C08EB3882309F443C0853009F442C066 +:107890008091E80083FD40C08091E80082FD32C005 +:1078A0008091E80080FF1FC09091F3008091F2006A +:1078B000392F20E0A901482BCA0106C0419140930D +:1078C000F1006150710901966115710519F0883058 +:1078D0009105A0F341E0089709F040E08091E800AD +:1078E0008E778093E8006115710559F64111C9CF73 +:1078F00009C08EB3882361F0853061F08091E80083 +:1079000083FD0AC08091E80082FFF3CF80E00895F4 +:1079100082E0089583E0089581E00895611571057E +:1079200029F44091E8004B774093E800AC0127C070 +:107930008EB38823B1F1853071F18091E80083FD29 +:107940002CC08091E80082FFF3CFFA0107C080913C +:10795000F1008193AF016150710961F0AF01909125 +:10796000F3008091F200392F20E0D901A82BCD013E +:10797000892B69F78091E8008B778093E800611587 +:107980007105B1F68091E80080FD09C08EB38823AF +:1079900041F08530B9F783E0089581E0089580E0F3 +:1079A000089582E008958F708093E900EBEEF0E097 +:1079B000808181608083EDEEF0E010826093EC00C6 +:1079C00040838091EE00881F8827881F089580914A +:1079D000980187FD05C08091E80080FF0DC010C0B0 +:1079E0008091E80082FD04C08EB38111F9CF089523 +:1079F0008091E8008B7707C08EB38111ECCF08959A +:107A00008091E8008E778093E80008950F931F938C +:107A1000CF93DF9346D04DD0C8EDD0E088818F77EB +:107A2000888388818068888388818F7D888319BC5A +:107A30001EBA1092960100EE10E0F80180818B7F53 +:107A4000808388818160888342E060E080E0ABDFF2 +:107A5000E1EEF0E080818E7F8083E2EEF0E08081D5 +:107A600081608083808188608083F80180818E7F3F +:107A70008083888180618883DF91CF911F910F91EE +:107A80000895E8EDF0E080818F7E8083E7EDF0E0FF +:107A900080818160808384E082BF81E08093970150 +:107AA000B5CFE8EDF0E080818E7F80831092E20018 +:107AB00008951092DA001092E10008951F920F923B +:107AC0000FB60F9211242F933F934F935F936F93B1 +:107AD0007F938F939F93AF93BF93EF93FF93809187 +:107AE000DA0080FF1BC08091D80080FF17C0809112 +:107AF000DA008E7F8093DA008091D90080FF0BC07E +:107B000080E189BD82E189BD09B400FEFDCF81E03D +:107B10008EBB98D103C019BC1EBA94D18091E100EC +:107B200080FF17C08091E20080FF13C08091E200C7 +:107B30008E7F8093E2008091E20080618093E2007A +:107B40008091D80080628093D80019BC85E08EBBFC +:107B500079D18091E10084FF2EC08091E20084FF02 +:107B60002AC080E189BD82E189BD09B400FEFDCF54 +:107B70008091D8008F7D8093D8008091E1008F7E26 +:107B80008093E1008091E2008F7E8093E2008091FB +:107B9000E20081608093E20080919601882311F0D9 +:107BA00084E007C08091E30087FF02C083E001C04A +:107BB00081E08EBB47D18091E10083FF21C080919D +:107BC000E20083FF1DC08091E100877F8093E10088 +:107BD00082E08EBB109296018091E1008E7F8093AF +:107BE000E1008091E2008E7F8093E2008091E200CC +:107BF00080618093E20042E060E080E0D4DE22D148 +:107C0000FF91EF91BF91AF919F918F917F916F9174 +:107C10005F914F913F912F910F900FBE0F901F904A +:107C200018951F93CF93DF9300D0CDB7DEB7E8E967 +:107C3000F1E08091F100819381E0E03AF807C9F723 +:107C400046DD8091E80083FFE9C080919801909122 +:107C50009901953009F470C038F4913079F170F0E1 +:107C6000933009F0DBC02AC0983009F4AAC09930DB +:107C700009F4B9C0963009F0D1C083C0803899F0BA +:107C8000823809F0CBC080919C0190919D018F704A +:107C900099278093E9009091EB0095FB992790F943 +:107CA0001092E90001C090E08091E800877F809306 +:107CB000E8009093F1001092F1008EC0882319F033 +:107CC000823009F0ABC08F71823009F0A7C080917B +:107CD0009A0181112BC080919C0190919D018F7020 +:107CE0009927009709F49AC08093E9002091EB004E +:107CF00020FF1CC020919901233021F48091EB00DA +:107D0000806212C09091EB0090619093EB0021E0B3 +:107D100030E001C0220F8A95EAF72093EA00109222 +:107D2000EA008091EB0088608093EB001092E900FC +:107D30008091E800877F53C0811170C080919A01C3 +:107D400090919B018F779927182F9091E30090785D +:107D5000982B9093E3008091E800877F8093E80060 +:107D600036DE8091E80080FFFCCF8091E3008068E0 +:107D70008093E300112311F083E001C082E08EBB09 +:107D80004DC08058823008F049C0AE014F5F5F4F50 +:107D900060919C0180919A0190919B01D7DC0097A2 +:107DA00009F43CC02091E800277F2093E800BC0143 +:107DB00089819A8152DD8091E8008B778093E80079 +:107DC0002DC0803859F58091E800877F8093E800C6 +:107DD000809196018093F1008091E8008E778093E6 +:107DE000E800F5DD1BC0811119C090919A01923015 +:107DF000A8F48091E800877F8093E8009093960133 +:107E0000E6DD80919601811104C08091E30087FF37 +:107E100002C084E001C081E08EBB4DDC8091E800AF +:107E200083FF0AC08091E800877F8093E8008091FB +:107E3000EB0080628093EB000F900F90DF91CF9169 +:107E40001F9108950895CF938EB38823A9F0809150 +:107E5000E9008F709091EC0090FF02C090E801C0A3 +:107E600090E0C92FC82B1092E9008091E80083FDB3 +:107E7000D8DECF70C093E900CF910895F999FECF75 +:107E800092BD81BDF89A992780B50895262FF9995A +:107E9000FECF1FBA92BD81BD20BD0FB6F894FA9AED +:0C7EA000F99A0FBE01960895F894FFCFE8 +:107EAC00010000000000000812034C0055004600C1 +:107EBC00410020004300440043000000180344002C +:107ECC00650061006E002000430061006D006500DC +:107EDC007200610000000403090409023E00020163 +:107EEC000080320904000001020201000524001088 +:107EFC000104240202052406000107058203080080 +:107F0C00FF09040100020A0000000705040210002A +:107F1C00050705830210000512011001020000087C +:107F2C00EB034A200001010200014C554641434439 +:027F3C00430000 +:107FA0000ACC1BCC2CCC38CC3DCC42CC48CC089550 +:087FB000089508950895089555 +:107FE000DFCFDFCFDFCFDFCFDFCFDFCFDFCFDFCF21 +:087FF000DFCFDFCFDFCFDFCFD1 +:087FF8000070000000DFFBDC5B +:040000030000700089 +:00000001FF diff --git a/avr/bootloaders/CDC/BootloaderCDC.lss b/avr/bootloaders/CDC/BootloaderCDC.lss new file mode 100644 index 0000000..218e73e --- /dev/null +++ b/avr/bootloaders/CDC/BootloaderCDC.lss @@ -0,0 +1,3870 @@ + +BootloaderCDC.elf: file format elf32-avr + +Sections: +Idx Name Size VMA LMA File off Algn + 0 .data 00000092 00800100 00007eac 00000f80 2**0 + CONTENTS, ALLOC, LOAD, DATA + 1 .text 00000eac 00007000 00007000 000000d4 2**1 + CONTENTS, ALLOC, LOAD, READONLY, CODE + 2 .apitable_trampolines 00000018 00007fa0 00007fa0 00001012 2**0 + CONTENTS, ALLOC, LOAD, READONLY, CODE + 3 .apitable_jumptable 00000018 00007fe0 00007fe0 0000102a 2**0 + CONTENTS, ALLOC, LOAD, READONLY, CODE + 4 .apitable_signatures 00000008 00007ff8 00007ff8 00001042 2**0 + CONTENTS, ALLOC, LOAD, READONLY, CODE + 5 .bss 0000000e 00800192 00800192 0000104a 2**0 + ALLOC + 6 .noinit 00000002 008001a0 008001a0 0000104a 2**0 + ALLOC + 7 .stab 00000954 00000000 00000000 0000104c 2**2 + CONTENTS, READONLY, DEBUGGING + 8 .stabstr 000000e2 00000000 00000000 000019a0 2**0 + CONTENTS, READONLY, DEBUGGING + 9 .comment 00000011 00000000 00000000 00001a82 2**0 + CONTENTS, READONLY + 10 .debug_aranges 000003a8 00000000 00000000 00001a98 2**3 + CONTENTS, READONLY, DEBUGGING + 11 .debug_info 00005818 00000000 00000000 00001e40 2**0 + CONTENTS, READONLY, DEBUGGING + 12 .debug_abbrev 0000163a 00000000 00000000 00007658 2**0 + CONTENTS, READONLY, DEBUGGING + 13 .debug_line 00002af7 00000000 00000000 00008c92 2**0 + CONTENTS, READONLY, DEBUGGING + 14 .debug_frame 000009a0 00000000 00000000 0000b78c 2**2 + CONTENTS, READONLY, DEBUGGING + 15 .debug_str 00002a84 00000000 00000000 0000c12c 2**0 + CONTENTS, READONLY, DEBUGGING + 16 .debug_loc 00003b00 00000000 00000000 0000ebb0 2**0 + CONTENTS, READONLY, DEBUGGING + 17 .debug_ranges 00000580 00000000 00000000 000126b0 2**3 + CONTENTS, READONLY, DEBUGGING + +Disassembly of section .text: + +00007000 <__vectors>: + 7000: 55 c0 rjmp .+170 ; 0x70ac <__ctors_end> + 7002: 00 00 nop + 7004: 8a c0 rjmp .+276 ; 0x711a <__bad_interrupt> + 7006: 00 00 nop + 7008: 88 c0 rjmp .+272 ; 0x711a <__bad_interrupt> + 700a: 00 00 nop + 700c: 86 c0 rjmp .+268 ; 0x711a <__bad_interrupt> + 700e: 00 00 nop + 7010: 84 c0 rjmp .+264 ; 0x711a <__bad_interrupt> + 7012: 00 00 nop + 7014: 82 c0 rjmp .+260 ; 0x711a <__bad_interrupt> + 7016: 00 00 nop + 7018: 80 c0 rjmp .+256 ; 0x711a <__bad_interrupt> + 701a: 00 00 nop + 701c: 7e c0 rjmp .+252 ; 0x711a <__bad_interrupt> + 701e: 00 00 nop + 7020: 7c c0 rjmp .+248 ; 0x711a <__bad_interrupt> + 7022: 00 00 nop + 7024: 7a c0 rjmp .+244 ; 0x711a <__bad_interrupt> + 7026: 00 00 nop + 7028: 49 c5 rjmp .+2706 ; 0x7abc <__vector_10> + 702a: 00 00 nop + 702c: 76 c0 rjmp .+236 ; 0x711a <__bad_interrupt> + 702e: 00 00 nop + 7030: 74 c0 rjmp .+232 ; 0x711a <__bad_interrupt> + 7032: 00 00 nop + 7034: 72 c0 rjmp .+228 ; 0x711a <__bad_interrupt> + 7036: 00 00 nop + 7038: 70 c0 rjmp .+224 ; 0x711a <__bad_interrupt> + 703a: 00 00 nop + 703c: 6e c0 rjmp .+220 ; 0x711a <__bad_interrupt> + 703e: 00 00 nop + 7040: 6c c0 rjmp .+216 ; 0x711a <__bad_interrupt> + 7042: 00 00 nop + 7044: 6a c0 rjmp .+212 ; 0x711a <__bad_interrupt> + 7046: 00 00 nop + 7048: 68 c0 rjmp .+208 ; 0x711a <__bad_interrupt> + 704a: 00 00 nop + 704c: 66 c0 rjmp .+204 ; 0x711a <__bad_interrupt> + 704e: 00 00 nop + 7050: 21 c3 rjmp .+1602 ; 0x7694 <__vector_20> + 7052: 00 00 nop + 7054: 62 c0 rjmp .+196 ; 0x711a <__bad_interrupt> + 7056: 00 00 nop + 7058: 60 c0 rjmp .+192 ; 0x711a <__bad_interrupt> + 705a: 00 00 nop + 705c: 5e c0 rjmp .+188 ; 0x711a <__bad_interrupt> + 705e: 00 00 nop + 7060: 5c c0 rjmp .+184 ; 0x711a <__bad_interrupt> + 7062: 00 00 nop + 7064: 5a c0 rjmp .+180 ; 0x711a <__bad_interrupt> + 7066: 00 00 nop + 7068: 58 c0 rjmp .+176 ; 0x711a <__bad_interrupt> + 706a: 00 00 nop + 706c: 56 c0 rjmp .+172 ; 0x711a <__bad_interrupt> + 706e: 00 00 nop + 7070: 54 c0 rjmp .+168 ; 0x711a <__bad_interrupt> + 7072: 00 00 nop + 7074: 52 c0 rjmp .+164 ; 0x711a <__bad_interrupt> + 7076: 00 00 nop + 7078: 50 c0 rjmp .+160 ; 0x711a <__bad_interrupt> + 707a: 00 00 nop + 707c: 4e c0 rjmp .+156 ; 0x711a <__bad_interrupt> + 707e: 00 00 nop + 7080: 4c c0 rjmp .+152 ; 0x711a <__bad_interrupt> + 7082: 00 00 nop + 7084: 4a c0 rjmp .+148 ; 0x711a <__bad_interrupt> + 7086: 00 00 nop + 7088: 48 c0 rjmp .+144 ; 0x711a <__bad_interrupt> + 708a: 00 00 nop + 708c: 46 c0 rjmp .+140 ; 0x711a <__bad_interrupt> + 708e: 00 00 nop + 7090: 44 c0 rjmp .+136 ; 0x711a <__bad_interrupt> + 7092: 00 00 nop + 7094: 42 c0 rjmp .+132 ; 0x711a <__bad_interrupt> + 7096: 00 00 nop + 7098: 40 c0 rjmp .+128 ; 0x711a <__bad_interrupt> + 709a: 00 00 nop + 709c: 3e c0 rjmp .+124 ; 0x711a <__bad_interrupt> + 709e: 00 00 nop + 70a0: 3c c0 rjmp .+120 ; 0x711a <__bad_interrupt> + 70a2: 00 00 nop + 70a4: 3a c0 rjmp .+116 ; 0x711a <__bad_interrupt> + 70a6: 00 00 nop + 70a8: 38 c0 rjmp .+112 ; 0x711a <__bad_interrupt> + 70aa: 00 00 nop + +000070ac <__ctors_end>: + 70ac: 11 24 eor r1, r1 + 70ae: 1f be out 0x3f, r1 ; 63 + 70b0: cf ef ldi r28, 0xFF ; 255 + 70b2: da e0 ldi r29, 0x0A ; 10 + 70b4: de bf out 0x3e, r29 ; 62 + 70b6: cd bf out 0x3d, r28 ; 61 + +000070b8 : +/** Special startup routine to check if the bootloader was started via a watchdog reset, and if the magic application + * start key has been loaded into \ref MagicBootKey. If the bootloader started via the watchdog and the key is valid, + * this will force the user application to start via a software jump. + */ +void Application_Jump_Check(void) +{ + 70b8: 04 b6 in r0, 0x34 ; 52 + 70ba: 03 fe sbrs r0, 3 + 70bc: 19 c0 rjmp .+50 ; 0x70f0 <__do_copy_data> + /* Re-enable JTAG debugging */ + JTAG_ENABLE(); + #endif + + /* If the reset source was the bootloader and the key is correct, clear it and jump to the application */ + if ((MCUSR & (1 << WDRF)) && (MagicBootKey == MAGIC_BOOT_KEY)) + 70be: 80 91 a0 01 lds r24, 0x01A0 + 70c2: 90 91 a1 01 lds r25, 0x01A1 + 70c6: 82 34 cpi r24, 0x42 ; 66 + 70c8: 9c 4d sbci r25, 0xDC ; 220 + 70ca: 91 f4 brne .+36 ; 0x70f0 <__do_copy_data> + + /* If a request has been made to jump to the user application, honor it */ + if (JumpToApplication) + { + /* Turn off the watchdog */ + MCUSR &= ~(1<: + 70f0: 11 e0 ldi r17, 0x01 ; 1 + 70f2: a0 e0 ldi r26, 0x00 ; 0 + 70f4: b1 e0 ldi r27, 0x01 ; 1 + 70f6: ec ea ldi r30, 0xAC ; 172 + 70f8: fe e7 ldi r31, 0x7E ; 126 + 70fa: 02 c0 rjmp .+4 ; 0x7100 <__do_copy_data+0x10> + 70fc: 05 90 lpm r0, Z+ + 70fe: 0d 92 st X+, r0 + 7100: a2 39 cpi r26, 0x92 ; 146 + 7102: b1 07 cpc r27, r17 + 7104: d9 f7 brne .-10 ; 0x70fc <__do_copy_data+0xc> + +00007106 <__do_clear_bss>: + 7106: 11 e0 ldi r17, 0x01 ; 1 + 7108: a2 e9 ldi r26, 0x92 ; 146 + 710a: b1 e0 ldi r27, 0x01 ; 1 + 710c: 01 c0 rjmp .+2 ; 0x7110 <.do_clear_bss_start> + +0000710e <.do_clear_bss_loop>: + 710e: 1d 92 st X+, r1 + +00007110 <.do_clear_bss_start>: + 7110: a0 3a cpi r26, 0xA0 ; 160 + 7112: b1 07 cpc r27, r17 + 7114: e1 f7 brne .-8 ; 0x710e <.do_clear_bss_loop> + 7116: 35 d0 rcall .+106 ; 0x7182
+ 7118: c7 c6 rjmp .+3470 ; 0x7ea8 <_exit> + +0000711a <__bad_interrupt>: + 711a: 72 cf rjmp .-284 ; 0x7000 <__vectors> + +0000711c : + */ + static inline void Endpoint_SelectEndpoint(const uint8_t Address) ATTR_ALWAYS_INLINE; + static inline void Endpoint_SelectEndpoint(const uint8_t Address) + { + #if !defined(CONTROL_ONLY_DEVICE) + UENUM = (Address & ENDPOINT_EPNUM_MASK); + 711c: 84 e0 ldi r24, 0x04 ; 4 + 711e: 80 93 e9 00 sts 0x00E9, r24 + 7122: 0d c0 rjmp .+26 ; 0x713e + */ + static inline void Endpoint_ClearOUT(void) ATTR_ALWAYS_INLINE; + static inline void Endpoint_ClearOUT(void) + { + #if !defined(CONTROL_ONLY_DEVICE) + UEINTX &= ~((1 << RXOUTI) | (1 << FIFOCON)); + 7124: 80 91 e8 00 lds r24, 0x00E8 + 7128: 8b 77 andi r24, 0x7B ; 123 + 712a: 80 93 e8 00 sts 0x00E8, r24 + 712e: 03 c0 rjmp .+6 ; 0x7136 + { + Endpoint_ClearOUT(); + + while (!(Endpoint_IsOUTReceived())) + { + if (USB_DeviceState == DEVICE_STATE_Unattached) + 7130: 8e b3 in r24, 0x1e ; 30 + 7132: 88 23 and r24, r24 + 7134: 59 f0 breq .+22 ; 0x714c + * \return Boolean \c true if current endpoint is has received an OUT packet, \c false otherwise. + */ + static inline bool Endpoint_IsOUTReceived(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; + static inline bool Endpoint_IsOUTReceived(void) + { + return ((UEINTX & (1 << RXOUTI)) ? true : false); + 7136: 80 91 e8 00 lds r24, 0x00E8 + /* If OUT endpoint empty, clear it and wait for the next packet from the host */ + while (!(Endpoint_IsReadWriteAllowed())) + { + Endpoint_ClearOUT(); + + while (!(Endpoint_IsOUTReceived())) + 713a: 82 ff sbrs r24, 2 + 713c: f9 cf rjmp .-14 ; 0x7130 + * on its direction. + */ + static inline bool Endpoint_IsReadWriteAllowed(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; + static inline bool Endpoint_IsReadWriteAllowed(void) + { + return ((UEINTX & (1 << RWAL)) ? true : false); + 713e: 80 91 e8 00 lds r24, 0x00E8 +{ + /* Select the OUT endpoint so that the next data byte can be read */ + Endpoint_SelectEndpoint(CDC_RX_EPADDR); + + /* If OUT endpoint empty, clear it and wait for the next packet from the host */ + while (!(Endpoint_IsReadWriteAllowed())) + 7142: 85 ff sbrs r24, 5 + 7144: ef cf rjmp .-34 ; 0x7124 + * \return Next byte in the currently selected endpoint's FIFO buffer. + */ + static inline uint8_t Endpoint_Read_8(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; + static inline uint8_t Endpoint_Read_8(void) + { + return UEDATX; + 7146: 80 91 f1 00 lds r24, 0x00F1 + return 0; + } + } + + /* Fetch the next byte from the OUT endpoint */ + return Endpoint_Read_8(); + 714a: 08 95 ret + Endpoint_ClearOUT(); + + while (!(Endpoint_IsOUTReceived())) + { + if (USB_DeviceState == DEVICE_STATE_Unattached) + return 0; + 714c: 80 e0 ldi r24, 0x00 ; 0 + } + } + + /* Fetch the next byte from the OUT endpoint */ + return Endpoint_Read_8(); +} + 714e: 08 95 ret + +00007150 : + */ + static inline void Endpoint_SelectEndpoint(const uint8_t Address) ATTR_ALWAYS_INLINE; + static inline void Endpoint_SelectEndpoint(const uint8_t Address) + { + #if !defined(CONTROL_ONLY_DEVICE) + UENUM = (Address & ENDPOINT_EPNUM_MASK); + 7150: 93 e0 ldi r25, 0x03 ; 3 + 7152: 90 93 e9 00 sts 0x00E9, r25 + * on its direction. + */ + static inline bool Endpoint_IsReadWriteAllowed(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; + static inline bool Endpoint_IsReadWriteAllowed(void) + { + return ((UEINTX & (1 << RWAL)) ? true : false); + 7156: 90 91 e8 00 lds r25, 0x00E8 +{ + /* Select the IN endpoint so that the next data byte can be written */ + Endpoint_SelectEndpoint(CDC_TX_EPADDR); + + /* If IN endpoint full, clear it and wait until ready for the next packet to the host */ + if (!(Endpoint_IsReadWriteAllowed())) + 715a: 95 ff sbrs r25, 5 + 715c: 03 c0 rjmp .+6 ; 0x7164 + * \param[in] Data Data to write into the the currently selected endpoint's FIFO buffer. + */ + static inline void Endpoint_Write_8(const uint8_t Data) ATTR_ALWAYS_INLINE; + static inline void Endpoint_Write_8(const uint8_t Data) + { + UEDATX = Data; + 715e: 80 93 f1 00 sts 0x00F1, r24 + 7162: 08 95 ret + */ + static inline void Endpoint_ClearIN(void) ATTR_ALWAYS_INLINE; + static inline void Endpoint_ClearIN(void) + { + #if !defined(CONTROL_ONLY_DEVICE) + UEINTX &= ~((1 << TXINI) | (1 << FIFOCON)); + 7164: 90 91 e8 00 lds r25, 0x00E8 + 7168: 9e 77 andi r25, 0x7E ; 126 + 716a: 90 93 e8 00 sts 0x00E8, r25 + 716e: 03 c0 rjmp .+6 ; 0x7176 + { + Endpoint_ClearIN(); + + while (!(Endpoint_IsINReady())) + { + if (USB_DeviceState == DEVICE_STATE_Unattached) + 7170: 9e b3 in r25, 0x1e ; 30 + 7172: 99 23 and r25, r25 + 7174: 29 f0 breq .+10 ; 0x7180 + * \return Boolean \c true if the current endpoint is ready for an IN packet, \c false otherwise. + */ + static inline bool Endpoint_IsINReady(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; + static inline bool Endpoint_IsINReady(void) + { + return ((UEINTX & (1 << TXINI)) ? true : false); + 7176: 90 91 e8 00 lds r25, 0x00E8 + /* 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())) + 717a: 90 ff sbrs r25, 0 + 717c: f9 cf rjmp .-14 ; 0x7170 + 717e: ef cf rjmp .-34 ; 0x715e + 7180: 08 95 ret + +00007182
: +/** 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) +{ + 7182: cf 93 push r28 + 7184: df 93 push r29 + 7186: cd b7 in r28, 0x3d ; 61 + 7188: de b7 in r29, 0x3e ; 62 + 718a: 28 97 sbiw r28, 0x08 ; 8 + 718c: 0f b6 in r0, 0x3f ; 63 + 718e: f8 94 cli + 7190: de bf out 0x3e, r29 ; 62 + 7192: 0f be out 0x3f, r0 ; 63 + 7194: cd bf out 0x3d, r28 ; 61 + +/** Configures all hardware required for the bootloader. */ +static void SetupHardware(void) +{ + /* Disable watchdog if enabled by bootloader/fuses */ + MCUSR &= ~(1 << WDRF); + 7196: 84 b7 in r24, 0x34 ; 52 + 7198: 87 7f andi r24, 0xF7 ; 247 + 719a: 84 bf out 0x34, r24 ; 52 + wdt_disable(); + 719c: 88 e1 ldi r24, 0x18 ; 24 + 719e: 0f b6 in r0, 0x3f ; 63 + 71a0: f8 94 cli + 71a2: 80 93 60 00 sts 0x0060, r24 + 71a6: 10 92 60 00 sts 0x0060, r1 + 71aa: 0f be out 0x3f, r0 ; 63 +The type of x is clock_div_t. +*/ +void clock_prescale_set(clock_div_t __x) +{ + uint8_t __tmp = _BV(CLKPCE); + __asm__ __volatile__ ( + 71ac: 90 e0 ldi r25, 0x00 ; 0 + 71ae: 80 e8 ldi r24, 0x80 ; 128 + 71b0: 0f b6 in r0, 0x3f ; 63 + 71b2: f8 94 cli + 71b4: 80 93 61 00 sts 0x0061, r24 + 71b8: 90 93 61 00 sts 0x0061, r25 + 71bc: 0f be out 0x3f, r0 ; 63 + + /* Disable clock division */ + clock_prescale_set(clock_div_1); + + /* Relocate the interrupt vector table to the bootloader section */ + MCUCR = (1 << IVCE); + 71be: 11 e0 ldi r17, 0x01 ; 1 + 71c0: 15 bf out 0x35, r17 ; 53 + MCUCR = (1 << IVSEL); + 71c2: 82 e0 ldi r24, 0x02 ; 2 + 71c4: 85 bf out 0x35, r24 ; 53 + + /* Initialize the USB and other board hardware drivers */ + USB_Init(); + 71c6: 5d d4 rcall .+2234 ; 0x7a82 + 71c8: 20 9a sbi 0x04, 0 ; 4 + + /* Inline Functions: */ + #if !defined(__DOXYGEN__) + static inline void LEDs_Init(void) + { + DDRB |= LEDS_PORTB_LEDS; + 71ca: 28 9a sbi 0x05, 0 ; 5 + PORTB |= LEDS_PORTB_LEDS; + 71cc: 55 9a sbi 0x0a, 5 ; 10 + DDRD |= LEDS_PORTD_LEDS; + 71ce: 5d 9a sbi 0x0b, 5 ; 11 + PORTD |= LEDS_PORTD_LEDS; + 71d0: 3f 9a sbi 0x07, 7 ; 7 + DDRC |= LEDS_PORTC_LEDS; + 71d2: 47 98 cbi 0x08, 7 ; 8 + PORTC &= ~LEDS_PORTC_LEDS; + 71d4: 10 93 6f 00 sts 0x006F, r17 + LEDs_Init(); + + /* Bootloader active LED toggle timer initialization */ + TIMSK1 = (1 << TOIE1); + 71d8: 83 e0 ldi r24, 0x03 ; 3 + TCCR1B = ((1 << CS11) | (1 << CS10)); + 71da: 80 93 81 00 sts 0x0081, r24 + 71de: 28 98 cbi 0x05, 0 ; 5 + PORTC &= ~(LEDMask & LEDS_PORTC_LEDS); + } + + static inline void LEDs_SetAllLEDs(const uint8_t LEDMask) + { + PORTB = ((PORTB | LEDS_PORTB_LEDS) & ~(LEDMask & LEDS_PORTB_LEDS)); + 71e0: 5d 9a sbi 0x0b, 5 ; 11 + PORTD = ((PORTD | LEDS_PORTD_LEDS) & ~(LEDMask & LEDS_PORTD_LEDS)); + 71e2: 47 98 cbi 0x08, 7 ; 8 + PORTC = ((PORTC & ~LEDS_PORTC_LEDS) | (LEDMask & LEDS_PORTC_LEDS)); + 71e4: 78 94 sei + static inline void GlobalInterruptEnable(void) + { + GCC_MEMORY_BARRIER(); + + #if (ARCH == ARCH_AVR8) + sei(); + 71e6: e3 e0 ldi r30, 0x03 ; 3 + */ + static inline void Endpoint_SelectEndpoint(const uint8_t Address) ATTR_ALWAYS_INLINE; + static inline void Endpoint_SelectEndpoint(const uint8_t Address) + { + #if !defined(CONTROL_ONLY_DEVICE) + UENUM = (Address & ENDPOINT_EPNUM_MASK); + 71e8: 9e 2e mov r9, r30 + 71ea: f5 e0 ldi r31, 0x05 ; 5 + + /* If in FLASH programming mode, commit the page after writing */ + if (MemoryType == MEMORY_TYPE_FLASH) + { + /* Commit the flash page to memory */ + boot_page_write(PageStartAddress); + 71ec: 8f 2e mov r8, r31 + 71ee: 09 e0 ldi r16, 0x09 ; 9 + { + WriteNextResponseByte(boot_lock_fuse_bits_get(GET_HIGH_FUSE_BITS)); + } + else if (Command == AVR109_COMMAND_ReadExtendedFuses) + { + WriteNextResponseByte(boot_lock_fuse_bits_get(GET_EXTENDED_FUSE_BITS)); + 71f0: 36 c2 rjmp .+1132 ; 0x765e + 71f2: 24 e0 ldi r18, 0x04 ; 4 + 71f4: 20 93 e9 00 sts 0x00E9, r18 + 71f8: 80 91 e8 00 lds r24, 0x00E8 + * \return Boolean \c true if current endpoint is has received an OUT packet, \c false otherwise. + */ + static inline bool Endpoint_IsOUTReceived(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; + static inline bool Endpoint_IsOUTReceived(void) + { + return ((UEINTX & (1 << RXOUTI)) ? true : false); + 71fc: 82 ff sbrs r24, 2 +{ + /* Select the OUT endpoint */ + Endpoint_SelectEndpoint(CDC_RX_EPADDR); + + /* Check if endpoint has a command in it sent from the host */ + if (!(Endpoint_IsOUTReceived())) + 71fe: 2e c2 rjmp .+1116 ; 0x765c + 7200: 8d df rcall .-230 ; 0x711c + return; + + /* Read in the bootloader command (first byte sent from host) */ + uint8_t Command = FetchNextCommandByte(); + 7202: 98 2f mov r25, r24 + 7204: 85 34 cpi r24, 0x45 ; 69 + 7206: 19 f4 brne .+6 ; 0x720e + + if (Command == AVR109_COMMAND_ExitBootloader) + 7208: 10 92 00 01 sts 0x0100, r1 + { + RunBootloader = false; + 720c: 06 c0 rjmp .+12 ; 0x721a + 720e: 88 57 subi r24, 0x78 ; 120 + 7210: 82 30 cpi r24, 0x02 ; 2 + + /* Send confirmation byte back to the host */ + WriteNextResponseByte('\r'); + } + else if ((Command == AVR109_COMMAND_SetLED) || (Command == AVR109_COMMAND_ClearLED) || + 7212: 10 f0 brcs .+4 ; 0x7218 + 7214: 94 35 cpi r25, 0x54 ; 84 + 7216: 21 f4 brne .+8 ; 0x7220 + 7218: 81 df rcall .-254 ; 0x711c + 721a: 8d e0 ldi r24, 0x0D ; 13 + (Command == AVR109_COMMAND_SelectDeviceType)) + { + FetchNextCommandByte(); + 721c: 99 df rcall .-206 ; 0x7150 + 721e: f6 c1 rjmp .+1004 ; 0x760c + + /* Send confirmation byte back to the host */ + WriteNextResponseByte('\r'); + 7220: 90 35 cpi r25, 0x50 ; 80 + 7222: d9 f3 breq .-10 ; 0x721a + 7224: 9c 34 cpi r25, 0x4C ; 76 + 7226: 09 f4 brne .+2 ; 0x722a + } + else if ((Command == AVR109_COMMAND_EnterProgrammingMode) || (Command == AVR109_COMMAND_LeaveProgrammingMode)) + 7228: f8 cf rjmp .-16 ; 0x721a + 722a: 94 37 cpi r25, 0x74 ; 116 + 722c: 21 f4 brne .+8 ; 0x7236 + 722e: 84 e4 ldi r24, 0x44 ; 68 + 7230: 8f df rcall .-226 ; 0x7150 + { + /* Send confirmation byte back to the host */ + WriteNextResponseByte('\r'); + } + else if (Command == AVR109_COMMAND_ReadPartCode) + 7232: 80 e0 ldi r24, 0x00 ; 0 + 7234: f3 cf rjmp .-26 ; 0x721c + { + /* Return ATMEGA128 part code - this is only to allow AVRProg to use the bootloader */ + WriteNextResponseByte(0x44); + 7236: 91 36 cpi r25, 0x61 ; 97 + 7238: 11 f4 brne .+4 ; 0x723e + 723a: 89 e5 ldi r24, 0x59 ; 89 + WriteNextResponseByte(0x00); + 723c: ef cf rjmp .-34 ; 0x721c + 723e: 91 34 cpi r25, 0x41 ; 65 + } + else if (Command == AVR109_COMMAND_ReadAutoAddressIncrement) + 7240: 91 f4 brne .+36 ; 0x7266 + 7242: 6c df rcall .-296 ; 0x711c + { + /* Indicate auto-address increment is supported */ + WriteNextResponseByte('Y'); + 7244: f8 2e mov r15, r24 + 7246: 6a df rcall .-300 ; 0x711c + } + else if (Command == AVR109_COMMAND_SetCurrentAddress) + 7248: 90 e0 ldi r25, 0x00 ; 0 + 724a: 88 0f add r24, r24 + { + /* Set the current address to that given by the host (translate 16-bit word address to byte address) */ + CurrAddress = (FetchNextCommandByte() << 9); + 724c: 99 1f adc r25, r25 + 724e: ff 0c add r15, r15 + 7250: fb 82 std Y+3, r15 ; 0x03 + CurrAddress |= (FetchNextCommandByte() << 1); + 7252: 1a 82 std Y+2, r1 ; 0x02 + 7254: 2a 81 ldd r18, Y+2 ; 0x02 + 7256: 3b 81 ldd r19, Y+3 ; 0x03 + 7258: 82 2b or r24, r18 + 725a: 93 2b or r25, r19 + WriteNextResponseByte('Y'); + } + else if (Command == AVR109_COMMAND_SetCurrentAddress) + { + /* Set the current address to that given by the host (translate 16-bit word address to byte address) */ + CurrAddress = (FetchNextCommandByte() << 9); + 725c: aa 27 eor r26, r26 + 725e: 97 fd sbrc r25, 7 + 7260: a0 95 com r26 + CurrAddress |= (FetchNextCommandByte() << 1); + 7262: ba 2f mov r27, r26 + 7264: a7 c1 rjmp .+846 ; 0x75b4 + 7266: 90 37 cpi r25, 0x70 ; 112 + 7268: 11 f4 brne .+4 ; 0x726e + 726a: 83 e5 ldi r24, 0x53 ; 83 + 726c: d7 cf rjmp .-82 ; 0x721c + 726e: 93 35 cpi r25, 0x53 ; 83 + 7270: 71 f4 brne .+28 ; 0x728e + 7272: 6a e8 ldi r22, 0x8A ; 138 + + /* Send confirmation byte back to the host */ + WriteNextResponseByte('\r'); + } + else if (Command == AVR109_COMMAND_ReadBootloaderInterface) + 7274: e6 2e mov r14, r22 + 7276: 61 e0 ldi r22, 0x01 ; 1 + { + /* Indicate serial programmer back to the host */ + WriteNextResponseByte('S'); + 7278: f6 2e mov r15, r22 + 727a: f7 01 movw r30, r14 + } + else if (Command == AVR109_COMMAND_ReadBootloaderIdentifier) + 727c: 81 91 ld r24, Z+ + 727e: 7f 01 movw r14, r30 + 7280: 67 df rcall .-306 ; 0x7150 + 7282: f1 e9 ldi r31, 0x91 ; 145 + 7284: ef 16 cp r14, r31 + 7286: f1 e0 ldi r31, 0x01 ; 1 + { + /* Write the 7-byte software identifier to the endpoint */ + for (uint8_t CurrByte = 0; CurrByte < 7; CurrByte++) + WriteNextResponseByte(SOFTWARE_IDENTIFIER[CurrByte]); + 7288: ff 06 cpc r15, r31 + 728a: b9 f7 brne .-18 ; 0x727a + 728c: bf c1 rjmp .+894 ; 0x760c + 728e: 96 35 cpi r25, 0x56 ; 86 + 7290: 21 f4 brne .+8 ; 0x729a + WriteNextResponseByte('S'); + } + else if (Command == AVR109_COMMAND_ReadBootloaderIdentifier) + { + /* Write the 7-byte software identifier to the endpoint */ + for (uint8_t CurrByte = 0; CurrByte < 7; CurrByte++) + 7292: 81 e3 ldi r24, 0x31 ; 49 + 7294: 5d df rcall .-326 ; 0x7150 + 7296: 80 e3 ldi r24, 0x30 ; 48 + 7298: c1 cf rjmp .-126 ; 0x721c + 729a: 93 37 cpi r25, 0x73 ; 115 + 729c: 31 f4 brne .+12 ; 0x72aa + WriteNextResponseByte(SOFTWARE_IDENTIFIER[CurrByte]); + } + else if (Command == AVR109_COMMAND_ReadBootloaderSWVersion) + 729e: 87 e8 ldi r24, 0x87 ; 135 + 72a0: 57 df rcall .-338 ; 0x7150 + { + WriteNextResponseByte('0' + BOOTLOADER_VERSION_MAJOR); + 72a2: 85 e9 ldi r24, 0x95 ; 149 + 72a4: 55 df rcall .-342 ; 0x7150 + 72a6: 8e e1 ldi r24, 0x1E ; 30 + WriteNextResponseByte('0' + BOOTLOADER_VERSION_MINOR); + 72a8: b9 cf rjmp .-142 ; 0x721c + 72aa: 95 36 cpi r25, 0x65 ; 101 + } + else if (Command == AVR109_COMMAND_ReadSignature) + 72ac: a9 f4 brne .+42 ; 0x72d8 + 72ae: e0 e0 ldi r30, 0x00 ; 0 + { + WriteNextResponseByte(AVR_SIGNATURE_3); + 72b0: f0 e0 ldi r31, 0x00 ; 0 + 72b2: 90 92 57 00 sts 0x0057, r9 + WriteNextResponseByte(AVR_SIGNATURE_2); + 72b6: e8 95 spm + 72b8: 07 b6 in r0, 0x37 ; 55 + 72ba: 00 fc sbrc r0, 0 + WriteNextResponseByte(AVR_SIGNATURE_1); + 72bc: fd cf rjmp .-6 ; 0x72b8 + 72be: 80 92 57 00 sts 0x0057, r8 + } + else if (Command == AVR109_COMMAND_EraseFLASH) + 72c2: e8 95 spm + 72c4: 07 b6 in r0, 0x37 ; 55 + 72c6: 00 fc sbrc r0, 0 + { + /* Clear the application section of flash */ + for (uint32_t CurrFlashAddress = 0; CurrFlashAddress < (uint32_t)BOOT_START_ADDR; CurrFlashAddress += SPM_PAGESIZE) + { + boot_page_erase(CurrFlashAddress); + 72c8: fd cf rjmp .-6 ; 0x72c4 + 72ca: e0 58 subi r30, 0x80 ; 128 + 72cc: ff 4f sbci r31, 0xFF ; 255 + boot_spm_busy_wait(); + 72ce: e1 15 cp r30, r1 + 72d0: 20 e7 ldi r18, 0x70 ; 112 + 72d2: f2 07 cpc r31, r18 + boot_page_write(CurrFlashAddress); + 72d4: 71 f7 brne .-36 ; 0x72b2 + 72d6: a1 cf rjmp .-190 ; 0x721a + 72d8: 9c 36 cpi r25, 0x6C ; 108 + boot_spm_busy_wait(); + 72da: 49 f4 brne .+18 ; 0x72ee + 72dc: 1f df rcall .-450 ; 0x711c + 72de: 80 95 com r24 + 72e0: e1 e0 ldi r30, 0x01 ; 1 + 72e2: f0 e0 ldi r31, 0x00 ; 0 + WriteNextResponseByte(AVR_SIGNATURE_1); + } + else if (Command == AVR109_COMMAND_EraseFLASH) + { + /* Clear the application section of flash */ + for (uint32_t CurrFlashAddress = 0; CurrFlashAddress < (uint32_t)BOOT_START_ADDR; CurrFlashAddress += SPM_PAGESIZE) + 72e4: 08 2e mov r0, r24 + 72e6: 00 93 57 00 sts 0x0057, r16 + 72ea: e8 95 spm + 72ec: 96 cf rjmp .-212 ; 0x721a + + /* Send confirmation byte back to the host */ + WriteNextResponseByte('\r'); + } + #if !defined(NO_LOCK_BYTE_WRITE_SUPPORT) + else if (Command == AVR109_COMMAND_WriteLockbits) + 72ee: 92 37 cpi r25, 0x72 ; 114 + 72f0: 19 f4 brne .+6 ; 0x72f8 + { + /* Set the lock bits to those given by the host */ + boot_lock_bits_set(FetchNextCommandByte()); + 72f2: e1 e0 ldi r30, 0x01 ; 1 + 72f4: f0 e0 ldi r31, 0x00 ; 0 + 72f6: 0e c0 rjmp .+28 ; 0x7314 + 72f8: 96 34 cpi r25, 0x46 ; 70 + 72fa: 19 f4 brne .+6 ; 0x7302 + 72fc: e0 e0 ldi r30, 0x00 ; 0 + 72fe: f0 e0 ldi r31, 0x00 ; 0 + 7300: 09 c0 rjmp .+18 ; 0x7314 + 7302: 9e 34 cpi r25, 0x4E ; 78 + 7304: 19 f4 brne .+6 ; 0x730c + + /* Send confirmation byte back to the host */ + WriteNextResponseByte('\r'); + } + #endif + else if (Command == AVR109_COMMAND_ReadLockbits) + 7306: e3 e0 ldi r30, 0x03 ; 3 + 7308: f0 e0 ldi r31, 0x00 ; 0 + { + WriteNextResponseByte(boot_lock_fuse_bits_get(GET_LOCK_BITS)); + 730a: 04 c0 rjmp .+8 ; 0x7314 + 730c: 91 35 cpi r25, 0x51 ; 81 + 730e: 31 f4 brne .+12 ; 0x731c + } + else if (Command == AVR109_COMMAND_ReadLowFuses) + 7310: e2 e0 ldi r30, 0x02 ; 2 + 7312: f0 e0 ldi r31, 0x00 ; 0 + { + WriteNextResponseByte(boot_lock_fuse_bits_get(GET_LOW_FUSE_BITS)); + 7314: 00 93 57 00 sts 0x0057, r16 + 7318: 84 91 lpm r24, Z+ + } + else if (Command == AVR109_COMMAND_ReadHighFuses) + 731a: 80 cf rjmp .-256 ; 0x721c + 731c: 92 36 cpi r25, 0x62 ; 98 + { + WriteNextResponseByte(boot_lock_fuse_bits_get(GET_HIGH_FUSE_BITS)); + 731e: 31 f4 brne .+12 ; 0x732c + 7320: 89 e5 ldi r24, 0x59 ; 89 + 7322: 16 df rcall .-468 ; 0x7150 + } + else if (Command == AVR109_COMMAND_ReadExtendedFuses) + 7324: 80 e0 ldi r24, 0x00 ; 0 + 7326: 14 df rcall .-472 ; 0x7150 + { + WriteNextResponseByte(boot_lock_fuse_bits_get(GET_EXTENDED_FUSE_BITS)); + 7328: 80 e8 ldi r24, 0x80 ; 128 + 732a: 78 cf rjmp .-272 ; 0x721c + 732c: 92 34 cpi r25, 0x42 ; 66 + 732e: 19 f0 breq .+6 ; 0x7336 + 7330: 97 36 cpi r25, 0x67 ; 103 + 7332: 09 f0 breq .+2 ; 0x7336 + } + #if !defined(NO_BLOCK_SUPPORT) + else if (Command == AVR109_COMMAND_GetBlockWriteSupport) + 7334: d8 c0 rjmp .+432 ; 0x74e6 + 7336: 9e 83 std Y+6, r25 ; 0x06 + { + WriteNextResponseByte('Y'); + 7338: f1 de rcall .-542 ; 0x711c + 733a: 78 2e mov r7, r24 + 733c: 61 2c mov r6, r1 + + /* Send block size to the host */ + WriteNextResponseByte(SPM_PAGESIZE >> 8); + 733e: ee de rcall .-548 ; 0x711c + 7340: 93 01 movw r18, r6 + 7342: 28 2b or r18, r24 + WriteNextResponseByte(SPM_PAGESIZE & 0xFF); + 7344: 38 87 std Y+8, r19 ; 0x08 + 7346: 2f 83 std Y+7, r18 ; 0x07 + } + else if ((Command == AVR109_COMMAND_BlockWrite) || (Command == AVR109_COMMAND_BlockRead)) + 7348: e9 de rcall .-558 ; 0x711c + 734a: 89 83 std Y+1, r24 ; 0x01 + 734c: 85 54 subi r24, 0x45 ; 69 + 734e: 9e 81 ldd r25, Y+6 ; 0x06 + 7350: 82 30 cpi r24, 0x02 ; 2 + char MemoryType; + + uint8_t HighByte = 0; + uint8_t LowByte = 0; + + BlockSize = (FetchNextCommandByte() << 8); + 7352: 10 f0 brcs .+4 ; 0x7358 + 7354: 8f e3 ldi r24, 0x3F ; 63 + 7356: 62 cf rjmp .-316 ; 0x721c + 7358: 97 36 cpi r25, 0x67 ; 103 + 735a: 09 f0 breq .+2 ; 0x735e + BlockSize |= FetchNextCommandByte(); + 735c: 49 c0 rjmp .+146 ; 0x73f0 + 735e: 31 e1 ldi r19, 0x11 ; 17 + 7360: 30 93 57 00 sts 0x0057, r19 + 7364: e8 95 spm + 7366: a1 2c mov r10, r1 + + MemoryType = FetchNextCommandByte(); + 7368: 3d c0 rjmp .+122 ; 0x73e4 + 736a: c0 90 92 01 lds r12, 0x0192 + + if ((MemoryType != MEMORY_TYPE_FLASH) && (MemoryType != MEMORY_TYPE_EEPROM)) + 736e: d0 90 93 01 lds r13, 0x0193 + 7372: e0 90 94 01 lds r14, 0x0194 + { + /* Send error byte back to the host */ + WriteNextResponseByte('?'); + 7376: f0 90 95 01 lds r15, 0x0195 + + return; + } + + /* Check if command is to read a memory block */ + if (Command == AVR109_COMMAND_BlockRead) + 737a: 29 81 ldd r18, Y+1 ; 0x01 + 737c: 26 34 cpi r18, 0x46 ; 70 + 737e: b9 f4 brne .+46 ; 0x73ae + { + /* Re-enable RWW section */ + boot_rww_enable(); + 7380: ea 2d mov r30, r10 + 7382: f0 e0 ldi r31, 0x00 ; 0 + 7384: ec 29 or r30, r12 + 7386: fd 29 or r31, r13 +static void ReadWriteMemoryBlock(const uint8_t Command) +{ + uint16_t BlockSize; + char MemoryType; + + uint8_t HighByte = 0; + 7388: 84 91 lpm r24, Z+ + 738a: e2 de rcall .-572 ; 0x7150 + 738c: aa 20 and r10, r10 + 738e: 69 f0 breq .+26 ; 0x73aa + 7390: 32 e0 ldi r19, 0x02 ; 2 + 7392: c3 0e add r12, r19 + 7394: d1 1c adc r13, r1 + 7396: e1 1c adc r14, r1 + 7398: f1 1c adc r15, r1 + 739a: c0 92 92 01 sts 0x0192, r12 + /* Re-enable RWW section */ + boot_rww_enable(); + + while (BlockSize--) + { + if (MemoryType == MEMORY_TYPE_FLASH) + 739e: d0 92 93 01 sts 0x0193, r13 + { + /* 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)); + 73a2: e0 92 94 01 sts 0x0194, r14 + 73a6: f0 92 95 01 sts 0x0195, r15 + 73aa: a1 26 eor r10, r17 + 73ac: 15 c0 rjmp .+42 ; 0x73d8 + 73ae: d7 01 movw r26, r14 + #endif + + /* If both bytes in current word have been read, increment the address counter */ + if (HighByte) + 73b0: c6 01 movw r24, r12 + 73b2: b6 95 lsr r27 + CurrAddress += 2; + 73b4: a7 95 ror r26 + 73b6: 97 95 ror r25 + 73b8: 87 95 ror r24 + 73ba: 60 d5 rcall .+2752 ; 0x7e7c <__eerd_byte_m32u4> + 73bc: c9 de rcall .-622 ; 0x7150 + 73be: 82 e0 ldi r24, 0x02 ; 2 + 73c0: c8 0e add r12, r24 + 73c2: d1 1c adc r13, r1 + 73c4: e1 1c adc r14, r1 + 73c6: f1 1c adc r15, r1 + 73c8: c0 92 92 01 sts 0x0192, r12 + 73cc: d0 92 93 01 sts 0x0193, r13 + + HighByte = !HighByte; + 73d0: e0 92 94 01 sts 0x0194, r14 + } + else + { + /* Read the next EEPROM byte into the endpoint */ + WriteNextResponseByte(eeprom_read_byte((uint8_t*)(intptr_t)(CurrAddress >> 1))); + 73d4: f0 92 95 01 sts 0x0195, r15 + 73d8: 2f 81 ldd r18, Y+7 ; 0x07 + 73da: 38 85 ldd r19, Y+8 ; 0x08 + 73dc: 21 50 subi r18, 0x01 ; 1 + 73de: 31 09 sbc r19, r1 + 73e0: 38 87 std Y+8, r19 ; 0x08 + 73e2: 2f 83 std Y+7, r18 ; 0x07 + 73e4: 2f 81 ldd r18, Y+7 ; 0x07 + + /* Increment the address counter after use */ + CurrAddress += 2; + 73e6: 38 85 ldd r19, Y+8 ; 0x08 + 73e8: 23 2b or r18, r19 + 73ea: 09 f0 breq .+2 ; 0x73ee + 73ec: be cf rjmp .-132 ; 0x736a + 73ee: 0e c1 rjmp .+540 ; 0x760c + 73f0: 20 90 92 01 lds r2, 0x0192 + 73f4: 30 90 93 01 lds r3, 0x0193 + 73f8: 40 90 94 01 lds r4, 0x0194 + 73fc: 50 90 95 01 lds r5, 0x0195 + 7400: 39 81 ldd r19, Y+1 ; 0x01 + 7402: 36 34 cpi r19, 0x46 ; 70 + 7404: 09 f0 breq .+2 ; 0x7408 + 7406: 5c c0 rjmp .+184 ; 0x74c0 + 7408: f1 01 movw r30, r2 + 740a: 90 92 57 00 sts 0x0057, r9 + if (Command == AVR109_COMMAND_BlockRead) + { + /* Re-enable RWW section */ + boot_rww_enable(); + + while (BlockSize--) + 740e: e8 95 spm + 7410: 07 b6 in r0, 0x37 ; 55 + 7412: 00 fc sbrc r0, 0 + 7414: fd cf rjmp .-6 ; 0x7410 + 7416: 54 c0 rjmp .+168 ; 0x74c0 + } + } + } + else + { + uint32_t PageStartAddress = CurrAddress; + 7418: 29 81 ldd r18, Y+1 ; 0x01 + 741a: 26 34 cpi r18, 0x46 ; 70 + 741c: 41 f5 brne .+80 ; 0x746e + 741e: aa 20 and r10, r10 + 7420: 11 f1 breq .+68 ; 0x7466 + 7422: c0 90 92 01 lds r12, 0x0192 + 7426: d0 90 93 01 lds r13, 0x0193 + + if (MemoryType == MEMORY_TYPE_FLASH) + 742a: e0 90 94 01 lds r14, 0x0194 + 742e: f0 90 95 01 lds r15, 0x0195 + { + boot_page_erase(PageStartAddress); + 7432: 74 de rcall .-792 ; 0x711c + 7434: 8d 83 std Y+5, r24 ; 0x05 + 7436: 1c 82 std Y+4, r1 ; 0x04 + boot_spm_busy_wait(); + 7438: 2c 81 ldd r18, Y+4 ; 0x04 + 743a: 3d 81 ldd r19, Y+5 ; 0x05 + 743c: 2b 29 or r18, r11 + 743e: f6 01 movw r30, r12 + } + + while (BlockSize--) + { + if (MemoryType == MEMORY_TYPE_FLASH) + 7440: 09 01 movw r0, r18 + 7442: 10 93 57 00 sts 0x0057, r17 + { + /* If both bytes in current word have been written, increment the address counter */ + if (HighByte) + 7446: e8 95 spm + 7448: 11 24 eor r1, r1 + { + /* Write the next FLASH word to the current FLASH page */ + boot_page_fill(CurrAddress, ((FetchNextCommandByte() << 8) | LowByte)); + 744a: f2 e0 ldi r31, 0x02 ; 2 + 744c: cf 0e add r12, r31 + 744e: d1 1c adc r13, r1 + 7450: e1 1c adc r14, r1 + 7452: f1 1c adc r15, r1 + 7454: c0 92 92 01 sts 0x0192, r12 + 7458: d0 92 93 01 sts 0x0193, r13 + 745c: e0 92 94 01 sts 0x0194, r14 + 7460: f0 92 95 01 sts 0x0195, r15 + 7464: 02 c0 rjmp .+4 ; 0x746a + 7466: 5a de rcall .-844 ; 0x711c + 7468: b8 2e mov r11, r24 + 746a: a1 26 eor r10, r17 + 746c: 22 c0 rjmp .+68 ; 0x74b2 + 746e: 56 de rcall .-852 ; 0x711c + 7470: 68 2f mov r22, r24 + 7472: 80 91 92 01 lds r24, 0x0192 + + /* Increment the address counter after use */ + CurrAddress += 2; + 7476: 90 91 93 01 lds r25, 0x0193 + 747a: a0 91 94 01 lds r26, 0x0194 + 747e: b0 91 95 01 lds r27, 0x0195 + 7482: b6 95 lsr r27 + 7484: a7 95 ror r26 + 7486: 97 95 ror r25 + 7488: 87 95 ror r24 + 748a: 00 d5 rcall .+2560 ; 0x7e8c <__eewr_byte_m32u4> + 748c: 80 91 92 01 lds r24, 0x0192 + } + else + { + LowByte = FetchNextCommandByte(); + 7490: 90 91 93 01 lds r25, 0x0193 + 7494: a0 91 94 01 lds r26, 0x0194 + } + + HighByte = !HighByte; + 7498: b0 91 95 01 lds r27, 0x0195 + } + else + { + /* Write the next EEPROM byte from the endpoint */ + eeprom_write_byte((uint8_t*)((intptr_t)(CurrAddress >> 1)), FetchNextCommandByte()); + 749c: 02 96 adiw r24, 0x02 ; 2 + 749e: a1 1d adc r26, r1 + 74a0: b1 1d adc r27, r1 + 74a2: 80 93 92 01 sts 0x0192, r24 + 74a6: 90 93 93 01 sts 0x0193, r25 + 74aa: a0 93 94 01 sts 0x0194, r26 + 74ae: b0 93 95 01 sts 0x0195, r27 + 74b2: 2f 81 ldd r18, Y+7 ; 0x07 + 74b4: 38 85 ldd r19, Y+8 ; 0x08 + 74b6: 21 50 subi r18, 0x01 ; 1 + 74b8: 31 09 sbc r19, r1 + 74ba: 38 87 std Y+8, r19 ; 0x08 + + /* Increment the address counter after use */ + CurrAddress += 2; + 74bc: 2f 83 std Y+7, r18 ; 0x07 + 74be: 02 c0 rjmp .+4 ; 0x74c4 + 74c0: b1 2c mov r11, r1 + 74c2: a1 2c mov r10, r1 + 74c4: 2f 81 ldd r18, Y+7 ; 0x07 + 74c6: 38 85 ldd r19, Y+8 ; 0x08 + 74c8: 23 2b or r18, r19 + 74ca: 09 f0 breq .+2 ; 0x74ce + 74cc: a5 cf rjmp .-182 ; 0x7418 + 74ce: 39 81 ldd r19, Y+1 ; 0x01 + 74d0: 36 34 cpi r19, 0x46 ; 70 + 74d2: 09 f0 breq .+2 ; 0x74d6 + 74d4: a2 ce rjmp .-700 ; 0x721a + 74d6: f1 01 movw r30, r2 + 74d8: 80 92 57 00 sts 0x0057, r8 + 74dc: e8 95 spm + 74de: 07 b6 in r0, 0x37 ; 55 + 74e0: 00 fc sbrc r0, 0 + 74e2: fd cf rjmp .-6 ; 0x74de + 74e4: 9a ce rjmp .-716 ; 0x721a + 74e6: 93 34 cpi r25, 0x43 ; 67 + 74e8: 69 f4 brne .+26 ; 0x7504 + 74ea: e0 90 92 01 lds r14, 0x0192 + 74ee: f0 90 93 01 lds r15, 0x0193 + } + else + { + uint32_t PageStartAddress = CurrAddress; + + if (MemoryType == MEMORY_TYPE_FLASH) + 74f2: 14 de rcall .-984 ; 0x711c + { + boot_page_erase(PageStartAddress); + boot_spm_busy_wait(); + } + + while (BlockSize--) + 74f4: 90 e0 ldi r25, 0x00 ; 0 + 74f6: f7 01 movw r30, r14 + 74f8: 0c 01 movw r0, r24 + 74fa: 10 93 57 00 sts 0x0057, r17 + CurrAddress += 2; + } + } + + /* If in FLASH programming mode, commit the page after writing */ + if (MemoryType == MEMORY_TYPE_FLASH) + 74fe: e8 95 spm + 7500: 11 24 eor r1, r1 + 7502: 8b ce rjmp .-746 ; 0x721a + 7504: 93 36 cpi r25, 0x63 ; 99 + { + /* Commit the flash page to memory */ + boot_page_write(PageStartAddress); + 7506: 09 f5 brne .+66 ; 0x754a + 7508: c0 90 92 01 lds r12, 0x0192 + 750c: d0 90 93 01 lds r13, 0x0193 + + /* Wait until write operation has completed */ + boot_spm_busy_wait(); + 7510: e0 90 94 01 lds r14, 0x0194 + 7514: f0 90 95 01 lds r15, 0x0195 + /* Delegate the block write/read to a separate function for clarity */ + ReadWriteMemoryBlock(Command); + } + #endif + #if !defined(NO_FLASH_BYTE_SUPPORT) + else if (Command == AVR109_COMMAND_FillFlashPageWordHigh) + 7518: 01 de rcall .-1022 ; 0x711c + { + /* Write the high byte to the current flash page */ + boot_page_fill(CurrAddress, FetchNextCommandByte()); + 751a: b7 01 movw r22, r14 + 751c: a6 01 movw r20, r12 + 751e: 41 60 ori r20, 0x01 ; 1 + 7520: 90 e0 ldi r25, 0x00 ; 0 + 7522: fa 01 movw r30, r20 + 7524: 0c 01 movw r0, r24 + 7526: 10 93 57 00 sts 0x0057, r17 + 752a: e8 95 spm + 752c: 11 24 eor r1, r1 + 752e: f2 e0 ldi r31, 0x02 ; 2 + 7530: cf 0e add r12, r31 + 7532: d1 1c adc r13, r1 + 7534: e1 1c adc r14, r1 + + /* Send confirmation byte back to the host */ + WriteNextResponseByte('\r'); + } + else if (Command == AVR109_COMMAND_FillFlashPageWordLow) + 7536: f1 1c adc r15, r1 + 7538: c0 92 92 01 sts 0x0192, r12 + { + /* Write the low byte to the current flash page */ + boot_page_fill(CurrAddress | 0x01, FetchNextCommandByte()); + 753c: d0 92 93 01 sts 0x0193, r13 + 7540: e0 92 94 01 sts 0x0194, r14 + 7544: f0 92 95 01 sts 0x0195, r15 + 7548: 68 ce rjmp .-816 ; 0x721a + 754a: 9d 36 cpi r25, 0x6D ; 109 + 754c: 59 f4 brne .+22 ; 0x7564 + 754e: e0 91 92 01 lds r30, 0x0192 + 7552: f0 91 93 01 lds r31, 0x0193 + 7556: 80 92 57 00 sts 0x0057, r8 + 755a: e8 95 spm + 755c: 07 b6 in r0, 0x37 ; 55 + 755e: 00 fc sbrc r0, 0 + 7560: fd cf rjmp .-6 ; 0x755c + + /* Increment the address */ + CurrAddress += 2; + 7562: 5b ce rjmp .-842 ; 0x721a + 7564: 92 35 cpi r25, 0x52 ; 82 + 7566: 51 f4 brne .+20 ; 0x757c + 7568: e0 91 92 01 lds r30, 0x0192 + 756c: f0 91 93 01 lds r31, 0x0193 + 7570: e5 90 lpm r14, Z+ + 7572: f4 90 lpm r15, Z+ + 7574: 8f 2d mov r24, r15 + 7576: ec dd rcall .-1064 ; 0x7150 + 7578: 8e 2d mov r24, r14 + 757a: 50 ce rjmp .-864 ; 0x721c + 757c: 94 34 cpi r25, 0x44 ; 68 + + /* Send confirmation byte back to the host */ + WriteNextResponseByte('\r'); + } + else if (Command == AVR109_COMMAND_WriteFlashPage) + 757e: 19 f5 brne .+70 ; 0x75c6 + 7580: cd dd rcall .-1126 ; 0x711c + { + /* Commit the flash page to memory */ + boot_page_write(CurrAddress); + 7582: 68 2f mov r22, r24 + 7584: 80 91 92 01 lds r24, 0x0192 + 7588: 90 91 93 01 lds r25, 0x0193 + 758c: a0 91 94 01 lds r26, 0x0194 + + /* Wait until write operation has completed */ + boot_spm_busy_wait(); + 7590: b0 91 95 01 lds r27, 0x0195 + 7594: b6 95 lsr r27 + 7596: a7 95 ror r26 + + /* Send confirmation byte back to the host */ + WriteNextResponseByte('\r'); + } + else if (Command == AVR109_COMMAND_ReadFLASHWord) + 7598: 97 95 ror r25 + 759a: 87 95 ror r24 + { + #if (FLASHEND > 0xFFFF) + uint16_t ProgramWord = pgm_read_word_far(CurrAddress); + #else + uint16_t ProgramWord = pgm_read_word(CurrAddress); + 759c: 77 d4 rcall .+2286 ; 0x7e8c <__eewr_byte_m32u4> + 759e: 80 91 92 01 lds r24, 0x0192 + 75a2: 90 91 93 01 lds r25, 0x0193 + 75a6: a0 91 94 01 lds r26, 0x0194 + #endif + + WriteNextResponseByte(ProgramWord >> 8); + 75aa: b0 91 95 01 lds r27, 0x0195 + WriteNextResponseByte(ProgramWord & 0xFF); + 75ae: 02 96 adiw r24, 0x02 ; 2 + 75b0: a1 1d adc r26, r1 + } + #endif + #if !defined(NO_EEPROM_BYTE_SUPPORT) + else if (Command == AVR109_COMMAND_WriteEEPROM) + 75b2: b1 1d adc r27, r1 + 75b4: 80 93 92 01 sts 0x0192, r24 + { + /* Read the byte from the endpoint and write it to the EEPROM */ + eeprom_write_byte((uint8_t*)((intptr_t)(CurrAddress >> 1)), FetchNextCommandByte()); + 75b8: 90 93 93 01 sts 0x0193, r25 + 75bc: a0 93 94 01 sts 0x0194, r26 + 75c0: b0 93 95 01 sts 0x0195, r27 + 75c4: 2a ce rjmp .-940 ; 0x721a + 75c6: 94 36 cpi r25, 0x64 ; 100 + 75c8: f1 f4 brne .+60 ; 0x7606 + 75ca: c0 90 92 01 lds r12, 0x0192 + 75ce: d0 90 93 01 lds r13, 0x0193 + 75d2: e0 90 94 01 lds r14, 0x0194 + 75d6: f0 90 95 01 lds r15, 0x0195 + + /* Increment the address after use */ + CurrAddress += 2; + 75da: d7 01 movw r26, r14 + 75dc: c6 01 movw r24, r12 + 75de: b6 95 lsr r27 + 75e0: a7 95 ror r26 + 75e2: 97 95 ror r25 + 75e4: 87 95 ror r24 + 75e6: 4a d4 rcall .+2196 ; 0x7e7c <__eerd_byte_m32u4> + 75e8: b3 dd rcall .-1178 ; 0x7150 + 75ea: 22 e0 ldi r18, 0x02 ; 2 + 75ec: c2 0e add r12, r18 + 75ee: d1 1c adc r13, r1 + 75f0: e1 1c adc r14, r1 + 75f2: f1 1c adc r15, r1 + 75f4: c0 92 92 01 sts 0x0192, r12 + 75f8: d0 92 93 01 sts 0x0193, r13 + 75fc: e0 92 94 01 sts 0x0194, r14 + + /* Send confirmation byte back to the host */ + WriteNextResponseByte('\r'); + } + else if (Command == AVR109_COMMAND_ReadEEPROM) + 7600: f0 92 95 01 sts 0x0195, r15 + { + /* Read the EEPROM byte and write it to the endpoint */ + WriteNextResponseByte(eeprom_read_byte((uint8_t*)((intptr_t)(CurrAddress >> 1)))); + 7604: 03 c0 rjmp .+6 ; 0x760c + 7606: 9b 31 cpi r25, 0x1B ; 27 + 7608: 09 f0 breq .+2 ; 0x760c + 760a: a4 ce rjmp .-696 ; 0x7354 + 760c: 90 92 e9 00 sts 0x00E9, r9 + 7610: 90 91 e8 00 lds r25, 0x00E8 + 7614: 80 91 e8 00 lds r24, 0x00E8 + 7618: 8e 77 andi r24, 0x7E ; 126 + 761a: 80 93 e8 00 sts 0x00E8, r24 + 761e: 95 fd sbrc r25, 5 + 7620: 11 c0 rjmp .+34 ; 0x7644 + 7622: 80 91 e8 00 lds r24, 0x00E8 + 7626: 80 fd sbrc r24, 0 + + /* Increment the address after use */ + CurrAddress += 2; + 7628: 04 c0 rjmp .+8 ; 0x7632 + 762a: 8e b3 in r24, 0x1e ; 30 + 762c: 81 11 cpse r24, r1 + 762e: f9 cf rjmp .-14 ; 0x7622 + 7630: 15 c0 rjmp .+42 ; 0x765c + 7632: 80 91 e8 00 lds r24, 0x00E8 + 7636: 8e 77 andi r24, 0x7E ; 126 + 7638: 80 93 e8 00 sts 0x00E8, r24 + 763c: 03 c0 rjmp .+6 ; 0x7644 + 763e: 8e b3 in r24, 0x1e ; 30 + 7640: 88 23 and r24, r24 + 7642: 61 f0 breq .+24 ; 0x765c + } + #endif + else if (Command != AVR109_COMMAND_Sync) + 7644: 80 91 e8 00 lds r24, 0x00E8 + 7648: 80 ff sbrs r24, 0 + */ + static inline void Endpoint_SelectEndpoint(const uint8_t Address) ATTR_ALWAYS_INLINE; + static inline void Endpoint_SelectEndpoint(const uint8_t Address) + { + #if !defined(CONTROL_ONLY_DEVICE) + UENUM = (Address & ENDPOINT_EPNUM_MASK); + 764a: f9 cf rjmp .-14 ; 0x763e + 764c: 34 e0 ldi r19, 0x04 ; 4 + * on its direction. + */ + static inline bool Endpoint_IsReadWriteAllowed(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; + static inline bool Endpoint_IsReadWriteAllowed(void) + { + return ((UEINTX & (1 << RWAL)) ? true : false); + 764e: 30 93 e9 00 sts 0x00E9, r19 + */ + static inline void Endpoint_ClearIN(void) ATTR_ALWAYS_INLINE; + static inline void Endpoint_ClearIN(void) + { + #if !defined(CONTROL_ONLY_DEVICE) + UEINTX &= ~((1 << TXINI) | (1 << FIFOCON)); + 7652: 80 91 e8 00 lds r24, 0x00E8 + 7656: 8b 77 andi r24, 0x7B ; 123 + 7658: 80 93 e8 00 sts 0x00E8, r24 + + /* 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) + 765c: f4 d3 rcall .+2024 ; 0x7e46 + 765e: 80 91 00 01 lds r24, 0x0100 + * \return Boolean \c true if the current endpoint is ready for an IN packet, \c false otherwise. + */ + static inline bool Endpoint_IsINReady(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; + static inline bool Endpoint_IsINReady(void) + { + return ((UEINTX & (1 << TXINI)) ? true : false); + 7662: 81 11 cpse r24, r1 + { + while (!(Endpoint_IsINReady())) + 7664: c6 cd rjmp .-1140 ; 0x71f2 + 7666: 80 91 e0 00 lds r24, 0x00E0 + { + if (USB_DeviceState == DEVICE_STATE_Unattached) + 766a: 81 60 ori r24, 0x01 ; 1 + 766c: 80 93 e0 00 sts 0x00E0, r24 + */ + static inline void Endpoint_ClearIN(void) ATTR_ALWAYS_INLINE; + static inline void Endpoint_ClearIN(void) + { + #if !defined(CONTROL_ONLY_DEVICE) + UEINTX &= ~((1 << TXINI) | (1 << FIFOCON)); + 7670: 82 e4 ldi r24, 0x42 ; 66 + 7672: 9c ed ldi r25, 0xDC ; 220 + 7674: 90 93 a1 01 sts 0x01A1, r25 + 7678: 80 93 a0 01 sts 0x01A0, r24 + } + + /* Wait until the data has been sent to the host */ + while (!(Endpoint_IsINReady())) + { + if (USB_DeviceState == DEVICE_STATE_Unattached) + 767c: 2c e0 ldi r18, 0x0C ; 12 + 767e: 88 e1 ldi r24, 0x18 ; 24 + 7680: 90 e0 ldi r25, 0x00 ; 0 + * \return Boolean \c true if the current endpoint is ready for an IN packet, \c false otherwise. + */ + static inline bool Endpoint_IsINReady(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; + static inline bool Endpoint_IsINReady(void) + { + return ((UEINTX & (1 << TXINI)) ? true : false); + 7682: 0f b6 in r0, 0x3f ; 63 + 7684: f8 94 cli + + Endpoint_ClearIN(); + } + + /* Wait until the data has been sent to the host */ + while (!(Endpoint_IsINReady())) + 7686: a8 95 wdr + 7688: 80 93 60 00 sts 0x0060, r24 + */ + static inline void Endpoint_SelectEndpoint(const uint8_t Address) ATTR_ALWAYS_INLINE; + static inline void Endpoint_SelectEndpoint(const uint8_t Address) + { + #if !defined(CONTROL_ONLY_DEVICE) + UENUM = (Address & ENDPOINT_EPNUM_MASK); + 768c: 0f be out 0x3f, r0 ; 63 + 768e: 20 93 60 00 sts 0x0060, r18 + */ + static inline void Endpoint_ClearOUT(void) ATTR_ALWAYS_INLINE; + static inline void Endpoint_ClearOUT(void) + { + #if !defined(CONTROL_ONLY_DEVICE) + UEINTX &= ~((1 << RXOUTI) | (1 << FIFOCON)); + 7692: ff cf rjmp .-2 ; 0x7692 + +00007694 <__vector_20>: + TCCR1B = ((1 << CS11) | (1 << CS10)); +} + +/** ISR to periodically toggle the LEDs on the board to indicate that the bootloader is active. */ +ISR(TIMER1_OVF_vect, ISR_BLOCK) +{ + 7694: 1f 92 push r1 + 7696: 0f 92 push r0 + 7698: 0f b6 in r0, 0x3f ; 63 + GlobalInterruptEnable(); + + while (RunBootloader) + { + CDC_Task(); + USB_USBTask(); + 769a: 0f 92 push r0 + 769c: 11 24 eor r1, r1 + LEDs_SetAllLEDs(LEDS_LED1); + + /* Enable global interrupts so that the USB stack can function */ + GlobalInterruptEnable(); + + while (RunBootloader) + 769e: 8f 93 push r24 + PORTC = ((PORTC & ~(LEDMask & LEDS_PORTC_LEDS)) | (ActiveMask & LEDS_PORTC_LEDS)); + } + + static inline void LEDs_ToggleLEDs(const uint8_t LEDMask) + { + PINB = (LEDMask & LEDS_PORTB_LEDS); + 76a0: 81 e0 ldi r24, 0x01 ; 1 + 76a2: 83 b9 out 0x03, r24 ; 3 + PIND = (LEDMask & LEDS_PORTD_LEDS); + 76a4: 80 e2 ldi r24, 0x20 ; 32 + * enumerating the device once attached until \ref USB_Attach() is called. + */ + static inline void USB_Detach(void) ATTR_ALWAYS_INLINE; + static inline void USB_Detach(void) + { + UDCON |= (1 << DETACH); + 76a6: 89 b9 out 0x09, r24 ; 9 + PINC = (LEDMask & LEDS_PORTC_LEDS); + 76a8: 16 b8 out 0x06, r1 ; 6 + +/** ISR to periodically toggle the LEDs on the board to indicate that the bootloader is active. */ +ISR(TIMER1_OVF_vect, ISR_BLOCK) +{ + LEDs_ToggleLEDs(LEDS_LED1 | LEDS_LED2); +} + 76aa: 8f 91 pop r24 + 76ac: 0f 90 pop r0 + 76ae: 0f be out 0x3f, r0 ; 63 + + /* Disconnect from the host - USB interface will be reset later along with the AVR */ + USB_Detach(); + + /* Unlock the forced application start mode of the bootloader if it is restarted */ + MagicBootKey = MAGIC_BOOT_KEY; + 76b0: 0f 90 pop r0 + 76b2: 1f 90 pop r1 + 76b4: 18 95 reti + +000076b6 : + +/** 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) +{ + 76b6: 42 e0 ldi r20, 0x02 ; 2 + 76b8: 61 ec ldi r22, 0xC1 ; 193 + 76ba: 82 e0 ldi r24, 0x02 ; 2 + + /* Unlock the forced application start mode of the bootloader if it is restarted */ + MagicBootKey = MAGIC_BOOT_KEY; + + /* Enable the watchdog and force a timeout to reset the AVR */ + wdt_enable(WDTO_250MS); + 76bc: 74 d1 rcall .+744 ; 0x79a6 + 76be: 42 e1 ldi r20, 0x12 ; 18 + 76c0: 61 e8 ldi r22, 0x81 ; 129 + 76c2: 83 e0 ldi r24, 0x03 ; 3 + 76c4: 70 d1 rcall .+736 ; 0x79a6 + 76c6: 42 e1 ldi r20, 0x12 ; 18 + 76c8: 60 e8 ldi r22, 0x80 ; 128 + 76ca: 84 e0 ldi r24, 0x04 ; 4 + 76cc: 6c c1 rjmp .+728 ; 0x79a6 + +000076ce : +/** 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) +{ + 76ce: 80 91 98 01 lds r24, 0x0198 + 76d2: 98 2f mov r25, r24 + 76d4: 9f 77 andi r25, 0x7F ; 127 + 76d6: 91 32 cpi r25, 0x21 ; 33 + 76d8: c1 f5 brne .+112 ; 0x774a + PORTC = ((PORTC & ~(LEDMask & LEDS_PORTC_LEDS)) | (ActiveMask & LEDS_PORTC_LEDS)); + } + + static inline void LEDs_ToggleLEDs(const uint8_t LEDMask) + { + PINB = (LEDMask & LEDS_PORTB_LEDS); + 76da: 91 e0 ldi r25, 0x01 ; 1 + 76dc: 93 b9 out 0x03, r25 ; 3 + PIND = (LEDMask & LEDS_PORTD_LEDS); + 76de: 90 e2 ldi r25, 0x20 ; 32 + 76e0: 99 b9 out 0x09, r25 ; 9 + PINC = (LEDMask & LEDS_PORTC_LEDS); + 76e2: 16 b8 out 0x06, r1 ; 6 + + /* Activity - toggle indicator LEDs */ + LEDs_ToggleLEDs(LEDS_LED1 | LEDS_LED2); + + /* Process CDC specific control requests */ + switch (USB_ControlRequest.bRequest) + 76e4: 90 91 99 01 lds r25, 0x0199 + 76e8: 91 32 cpi r25, 0x21 ; 33 + 76ea: 29 f0 breq .+10 ; 0x76f6 + 76ec: 92 32 cpi r25, 0x22 ; 34 + 76ee: 29 f1 breq .+74 ; 0x773a + 76f0: 90 32 cpi r25, 0x20 ; 32 + 76f2: 59 f5 brne .+86 ; 0x774a + 76f4: 10 c0 rjmp .+32 ; 0x7716 + { + case CDC_REQ_GetLineEncoding: + if (USB_ControlRequest.bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE)) + 76f6: 81 3a cpi r24, 0xA1 ; 161 + 76f8: 41 f5 brne .+80 ; 0x774a + * \note This is not applicable for non CONTROL type endpoints. + */ + static inline void Endpoint_ClearSETUP(void) ATTR_ALWAYS_INLINE; + static inline void Endpoint_ClearSETUP(void) + { + UEINTX &= ~(1 << RXSTPI); + 76fa: 80 91 e8 00 lds r24, 0x00E8 + 76fe: 87 7f andi r24, 0xF7 ; 247 + 7700: 80 93 e8 00 sts 0x00E8, r24 + { + Endpoint_ClearSETUP(); + + /* Write the line coding data to the control endpoint */ + Endpoint_Write_Control_Stream_LE(&LineEncoding, sizeof(CDC_LineEncoding_t)); + 7704: 67 e0 ldi r22, 0x07 ; 7 + 7706: 70 e0 ldi r23, 0x00 ; 0 + 7708: 81 e0 ldi r24, 0x01 ; 1 + 770a: 91 e0 ldi r25, 0x01 ; 1 + 770c: a6 d0 rcall .+332 ; 0x785a + 770e: 80 91 e8 00 lds r24, 0x00E8 + */ + static inline void Endpoint_ClearOUT(void) ATTR_ALWAYS_INLINE; + static inline void Endpoint_ClearOUT(void) + { + #if !defined(CONTROL_ONLY_DEVICE) + UEINTX &= ~((1 << RXOUTI) | (1 << FIFOCON)); + 7712: 8b 77 andi r24, 0x7B ; 123 + 7714: 0f c0 rjmp .+30 ; 0x7734 + 7716: 81 32 cpi r24, 0x21 ; 33 + Endpoint_ClearOUT(); + } + + break; + case CDC_REQ_SetLineEncoding: + if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE)) + 7718: c1 f4 brne .+48 ; 0x774a + 771a: 80 91 e8 00 lds r24, 0x00E8 + * \note This is not applicable for non CONTROL type endpoints. + */ + static inline void Endpoint_ClearSETUP(void) ATTR_ALWAYS_INLINE; + static inline void Endpoint_ClearSETUP(void) + { + UEINTX &= ~(1 << RXSTPI); + 771e: 87 7f andi r24, 0xF7 ; 247 + 7720: 80 93 e8 00 sts 0x00E8, r24 + 7724: 67 e0 ldi r22, 0x07 ; 7 + { + 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)); + 7726: 70 e0 ldi r23, 0x00 ; 0 + 7728: 81 e0 ldi r24, 0x01 ; 1 + 772a: 91 e0 ldi r25, 0x01 ; 1 + 772c: f7 d0 rcall .+494 ; 0x791c + 772e: 80 91 e8 00 lds r24, 0x00E8 + */ + static inline void Endpoint_ClearIN(void) ATTR_ALWAYS_INLINE; + static inline void Endpoint_ClearIN(void) + { + #if !defined(CONTROL_ONLY_DEVICE) + UEINTX &= ~((1 << TXINI) | (1 << FIFOCON)); + 7732: 8e 77 andi r24, 0x7E ; 126 + 7734: 80 93 e8 00 sts 0x00E8, r24 + 7738: 08 95 ret + 773a: 81 32 cpi r24, 0x21 ; 33 + 773c: 31 f4 brne .+12 ; 0x774a + Endpoint_ClearIN(); + } + + break; + case CDC_REQ_SetControlLineState: + if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE)) + 773e: 80 91 e8 00 lds r24, 0x00E8 + * \note This is not applicable for non CONTROL type endpoints. + */ + static inline void Endpoint_ClearSETUP(void) ATTR_ALWAYS_INLINE; + static inline void Endpoint_ClearSETUP(void) + { + UEINTX &= ~(1 << RXSTPI); + 7742: 87 7f andi r24, 0xF7 ; 247 + 7744: 80 93 e8 00 sts 0x00E8, r24 + 7748: 42 c1 rjmp .+644 ; 0x79ce + 774a: 08 95 ret + +0000774c : + */ +uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, + const uint8_t wIndex, + const void** const DescriptorAddress) +{ + const uint8_t DescriptorType = (wValue >> 8); + 774c: 29 2f mov r18, r25 + 774e: 30 e0 ldi r19, 0x00 ; 0 + break; + } + + *DescriptorAddress = Address; + return Size; +} + 7750: 33 27 eor r19, r19 + const uint8_t DescriptorNumber = (wValue & 0xFF); + + const void* Address = NULL; + uint16_t Size = NO_DESCRIPTOR; + + switch (DescriptorType) + 7752: 22 30 cpi r18, 0x02 ; 2 + 7754: 31 05 cpc r19, r1 + 7756: 39 f0 breq .+14 ; 0x7766 + 7758: 23 30 cpi r18, 0x03 ; 3 + 775a: 31 05 cpc r19, r1 + 775c: 49 f0 breq .+18 ; 0x7770 + 775e: 21 30 cpi r18, 0x01 ; 1 + 7760: 31 05 cpc r19, r1 + 7762: 89 f0 breq .+34 ; 0x7786 + 7764: 0b c0 rjmp .+22 ; 0x777c + Address = &DeviceDescriptor; + Size = sizeof(USB_Descriptor_Device_t); + break; + case DTYPE_Configuration: + Address = &ConfigurationDescriptor; + Size = sizeof(USB_Descriptor_Configuration_t); + 7766: 2e e3 ldi r18, 0x3E ; 62 + 7768: 30 e0 ldi r19, 0x00 ; 0 + case DTYPE_Device: + Address = &DeviceDescriptor; + Size = sizeof(USB_Descriptor_Device_t); + break; + case DTYPE_Configuration: + Address = &ConfigurationDescriptor; + 776a: 8a e3 ldi r24, 0x3A ; 58 + 776c: 91 e0 ldi r25, 0x01 ; 1 + Size = sizeof(USB_Descriptor_Configuration_t); + break; + 776e: 1e c0 rjmp .+60 ; 0x77ac + case DTYPE_String: + if (DescriptorNumber == STRING_ID_Language) + 7770: 88 23 and r24, r24 + 7772: 71 f0 breq .+28 ; 0x7790 + { + Address = &LanguageString; + Size = LanguageString.Header.Size; + } + else if (DescriptorNumber == STRING_ID_Manufacturer) + 7774: 81 30 cpi r24, 0x01 ; 1 + 7776: 89 f0 breq .+34 ; 0x779a + { + Address = &ManufacturerString; + Size = ManufacturerString.Header.Size; + } + else if (DescriptorNumber == STRING_ID_Product) + 7778: 82 30 cpi r24, 0x02 ; 2 + 777a: a1 f0 breq .+40 ; 0x77a4 +{ + const uint8_t DescriptorType = (wValue >> 8); + const uint8_t DescriptorNumber = (wValue & 0xFF); + + const void* Address = NULL; + uint16_t Size = NO_DESCRIPTOR; + 777c: 20 e0 ldi r18, 0x00 ; 0 + 777e: 30 e0 ldi r19, 0x00 ; 0 + const void** const DescriptorAddress) +{ + const uint8_t DescriptorType = (wValue >> 8); + const uint8_t DescriptorNumber = (wValue & 0xFF); + + const void* Address = NULL; + 7780: 80 e0 ldi r24, 0x00 ; 0 + 7782: 90 e0 ldi r25, 0x00 ; 0 + 7784: 13 c0 rjmp .+38 ; 0x77ac + + switch (DescriptorType) + { + case DTYPE_Device: + Address = &DeviceDescriptor; + Size = sizeof(USB_Descriptor_Device_t); + 7786: 22 e1 ldi r18, 0x12 ; 18 + 7788: 30 e0 ldi r19, 0x00 ; 0 + uint16_t Size = NO_DESCRIPTOR; + + switch (DescriptorType) + { + case DTYPE_Device: + Address = &DeviceDescriptor; + 778a: 88 e7 ldi r24, 0x78 ; 120 + 778c: 91 e0 ldi r25, 0x01 ; 1 + 778e: 0e c0 rjmp .+28 ; 0x77ac + break; + case DTYPE_String: + if (DescriptorNumber == STRING_ID_Language) + { + Address = &LanguageString; + Size = LanguageString.Header.Size; + 7790: 24 e0 ldi r18, 0x04 ; 4 + 7792: 30 e0 ldi r19, 0x00 ; 0 + Size = sizeof(USB_Descriptor_Configuration_t); + break; + case DTYPE_String: + if (DescriptorNumber == STRING_ID_Language) + { + Address = &LanguageString; + 7794: 86 e3 ldi r24, 0x36 ; 54 + 7796: 91 e0 ldi r25, 0x01 ; 1 + 7798: 09 c0 rjmp .+18 ; 0x77ac + Size = LanguageString.Header.Size; + } + else if (DescriptorNumber == STRING_ID_Manufacturer) + { + Address = &ManufacturerString; + Size = ManufacturerString.Header.Size; + 779a: 28 e1 ldi r18, 0x18 ; 24 + 779c: 30 e0 ldi r19, 0x00 ; 0 + Address = &LanguageString; + Size = LanguageString.Header.Size; + } + else if (DescriptorNumber == STRING_ID_Manufacturer) + { + Address = &ManufacturerString; + 779e: 8c e1 ldi r24, 0x1C ; 28 + 77a0: 91 e0 ldi r25, 0x01 ; 1 + 77a2: 04 c0 rjmp .+8 ; 0x77ac + Size = ManufacturerString.Header.Size; + } + else if (DescriptorNumber == STRING_ID_Product) + { + Address = &ProductString; + Size = ProductString.Header.Size; + 77a4: 22 e1 ldi r18, 0x12 ; 18 + 77a6: 30 e0 ldi r19, 0x00 ; 0 + Address = &ManufacturerString; + Size = ManufacturerString.Header.Size; + } + else if (DescriptorNumber == STRING_ID_Product) + { + Address = &ProductString; + 77a8: 88 e0 ldi r24, 0x08 ; 8 + 77aa: 91 e0 ldi r25, 0x01 ; 1 + } + + break; + } + + *DescriptorAddress = Address; + 77ac: fa 01 movw r30, r20 + 77ae: 91 83 std Z+1, r25 ; 0x01 + 77b0: 80 83 st Z, r24 + return Size; +} + 77b2: c9 01 movw r24, r18 + 77b4: 08 95 ret + +000077b6 : + +#include "BootloaderAPI.h" + +void BootloaderAPI_ErasePage(const uint32_t Address) +{ + boot_page_erase_safe(Address); + 77b6: 07 b6 in r0, 0x37 ; 55 + 77b8: 00 fc sbrc r0, 0 + 77ba: fd cf rjmp .-6 ; 0x77b6 + 77bc: f9 99 sbic 0x1f, 1 ; 31 + 77be: fe cf rjmp .-4 ; 0x77bc + 77c0: 23 e0 ldi r18, 0x03 ; 3 + 77c2: fb 01 movw r30, r22 + 77c4: 20 93 57 00 sts 0x0057, r18 + 77c8: e8 95 spm + boot_spm_busy_wait(); + 77ca: 07 b6 in r0, 0x37 ; 55 + 77cc: 00 fc sbrc r0, 0 + 77ce: fd cf rjmp .-6 ; 0x77ca + boot_rww_enable(); + 77d0: 81 e1 ldi r24, 0x11 ; 17 + 77d2: 80 93 57 00 sts 0x0057, r24 + 77d6: e8 95 spm + 77d8: 08 95 ret + +000077da : +} + +void BootloaderAPI_WritePage(const uint32_t Address) +{ + boot_page_write_safe(Address); + 77da: 07 b6 in r0, 0x37 ; 55 + 77dc: 00 fc sbrc r0, 0 + 77de: fd cf rjmp .-6 ; 0x77da + 77e0: f9 99 sbic 0x1f, 1 ; 31 + 77e2: fe cf rjmp .-4 ; 0x77e0 + 77e4: 25 e0 ldi r18, 0x05 ; 5 + 77e6: fb 01 movw r30, r22 + 77e8: 20 93 57 00 sts 0x0057, r18 + 77ec: e8 95 spm + boot_spm_busy_wait(); + 77ee: 07 b6 in r0, 0x37 ; 55 + 77f0: 00 fc sbrc r0, 0 + 77f2: fd cf rjmp .-6 ; 0x77ee + boot_rww_enable(); + 77f4: 81 e1 ldi r24, 0x11 ; 17 + 77f6: 80 93 57 00 sts 0x0057, r24 + 77fa: e8 95 spm + 77fc: 08 95 ret + +000077fe : +} + +void BootloaderAPI_FillWord(const uint32_t Address, const uint16_t Word) +{ + boot_page_fill_safe(Address, Word); + 77fe: 07 b6 in r0, 0x37 ; 55 + 7800: 00 fc sbrc r0, 0 + 7802: fd cf rjmp .-6 ; 0x77fe + 7804: f9 99 sbic 0x1f, 1 ; 31 + 7806: fe cf rjmp .-4 ; 0x7804 + 7808: 21 e0 ldi r18, 0x01 ; 1 + 780a: fb 01 movw r30, r22 + 780c: 0a 01 movw r0, r20 + 780e: 20 93 57 00 sts 0x0057, r18 + 7812: e8 95 spm + 7814: 11 24 eor r1, r1 + 7816: 08 95 ret + +00007818 : +} + +uint8_t BootloaderAPI_ReadSignature(const uint16_t Address) +{ + return boot_signature_byte_get(Address); + 7818: 21 e2 ldi r18, 0x21 ; 33 + 781a: fc 01 movw r30, r24 + 781c: 20 93 57 00 sts 0x0057, r18 + 7820: 84 91 lpm r24, Z+ +} + 7822: 08 95 ret + +00007824 : + +uint8_t BootloaderAPI_ReadFuse(const uint16_t Address) +{ + return boot_lock_fuse_bits_get(Address); + 7824: 29 e0 ldi r18, 0x09 ; 9 + 7826: fc 01 movw r30, r24 + 7828: 20 93 57 00 sts 0x0057, r18 + 782c: 84 91 lpm r24, Z+ +} + 782e: 08 95 ret + +00007830 : + +uint8_t BootloaderAPI_ReadLock(void) +{ + return boot_lock_fuse_bits_get(GET_LOCK_BITS); + 7830: e1 e0 ldi r30, 0x01 ; 1 + 7832: f0 e0 ldi r31, 0x00 ; 0 + 7834: 89 e0 ldi r24, 0x09 ; 9 + 7836: 80 93 57 00 sts 0x0057, r24 + 783a: 84 91 lpm r24, Z+ +} + 783c: 08 95 ret + +0000783e : + +void BootloaderAPI_WriteLock(const uint8_t LockBits) +{ + boot_lock_bits_set_safe(LockBits); + 783e: 07 b6 in r0, 0x37 ; 55 + 7840: 00 fc sbrc r0, 0 + 7842: fd cf rjmp .-6 ; 0x783e + 7844: f9 99 sbic 0x1f, 1 ; 31 + 7846: fe cf rjmp .-4 ; 0x7844 + 7848: 80 95 com r24 + 784a: 99 e0 ldi r25, 0x09 ; 9 + 784c: e1 e0 ldi r30, 0x01 ; 1 + 784e: f0 e0 ldi r31, 0x00 ; 0 + 7850: 08 2e mov r0, r24 + 7852: 90 93 57 00 sts 0x0057, r25 + 7856: e8 95 spm + 7858: 08 95 ret + +0000785a : + uint16_t Length) +{ + uint8_t* DataStream = ((uint8_t*)Buffer + TEMPLATE_BUFFER_OFFSET(Length)); + bool LastPacketFull = false; + + if (Length > USB_ControlRequest.wLength) + 785a: 40 91 9e 01 lds r20, 0x019E + 785e: 50 91 9f 01 lds r21, 0x019F + 7862: 46 17 cp r20, r22 + 7864: 57 07 cpc r21, r23 + 7866: 48 f0 brcs .+18 ; 0x787a + Length = USB_ControlRequest.wLength; + else if (!(Length)) + 7868: 61 15 cp r22, r1 + 786a: 71 05 cpc r23, r1 + 786c: 39 f4 brne .+14 ; 0x787c + */ + static inline void Endpoint_ClearIN(void) ATTR_ALWAYS_INLINE; + static inline void Endpoint_ClearIN(void) + { + #if !defined(CONTROL_ONLY_DEVICE) + UEINTX &= ~((1 << TXINI) | (1 << FIFOCON)); + 786e: 40 91 e8 00 lds r20, 0x00E8 + 7872: 4e 77 andi r20, 0x7E ; 126 + 7874: 40 93 e8 00 sts 0x00E8, r20 + 7878: 01 c0 rjmp .+2 ; 0x787c + uint16_t Length) +{ + uint8_t* DataStream = ((uint8_t*)Buffer + TEMPLATE_BUFFER_OFFSET(Length)); + bool LastPacketFull = false; + + if (Length > USB_ControlRequest.wLength) + 787a: ba 01 movw r22, r20 + 787c: fc 01 movw r30, r24 + 787e: 40 e0 ldi r20, 0x00 ; 0 + 7880: 32 c0 rjmp .+100 ; 0x78e6 + else if (!(Length)) + Endpoint_ClearIN(); + + while (Length || LastPacketFull) + { + uint8_t USB_DeviceState_LCL = USB_DeviceState; + 7882: 8e b3 in r24, 0x1e ; 30 + + if (USB_DeviceState_LCL == DEVICE_STATE_Unattached) + 7884: 88 23 and r24, r24 + 7886: 09 f4 brne .+2 ; 0x788a + 7888: 43 c0 rjmp .+134 ; 0x7910 + return ENDPOINT_RWCSTREAM_DeviceDisconnected; + else if (USB_DeviceState_LCL == DEVICE_STATE_Suspended) + 788a: 85 30 cpi r24, 0x05 ; 5 + 788c: 09 f4 brne .+2 ; 0x7890 + 788e: 42 c0 rjmp .+132 ; 0x7914 + * \return Boolean \c true if the selected endpoint has received a SETUP packet, \c false otherwise. + */ + static inline bool Endpoint_IsSETUPReceived(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; + static inline bool Endpoint_IsSETUPReceived(void) + { + return ((UEINTX & (1 << RXSTPI)) ? true : false); + 7890: 80 91 e8 00 lds r24, 0x00E8 + return ENDPOINT_RWCSTREAM_BusSuspended; + else if (Endpoint_IsSETUPReceived()) + 7894: 83 fd sbrc r24, 3 + 7896: 40 c0 rjmp .+128 ; 0x7918 + * \return Boolean \c true if current endpoint is has received an OUT packet, \c false otherwise. + */ + static inline bool Endpoint_IsOUTReceived(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; + static inline bool Endpoint_IsOUTReceived(void) + { + return ((UEINTX & (1 << RXOUTI)) ? true : false); + 7898: 80 91 e8 00 lds r24, 0x00E8 + return ENDPOINT_RWCSTREAM_HostAborted; + else if (Endpoint_IsOUTReceived()) + 789c: 82 fd sbrc r24, 2 + 789e: 32 c0 rjmp .+100 ; 0x7904 + * \return Boolean \c true if the current endpoint is ready for an IN packet, \c false otherwise. + */ + static inline bool Endpoint_IsINReady(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; + static inline bool Endpoint_IsINReady(void) + { + return ((UEINTX & (1 << TXINI)) ? true : false); + 78a0: 80 91 e8 00 lds r24, 0x00E8 + break; + + if (Endpoint_IsINReady()) + 78a4: 80 ff sbrs r24, 0 + 78a6: 1f c0 rjmp .+62 ; 0x78e6 + static inline uint16_t Endpoint_BytesInEndpoint(void) + { + #if (defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR)) + return UEBCX; + #elif defined(USB_SERIES_4_AVR) + return (((uint16_t)UEBCHX << 8) | UEBCLX); + 78a8: 90 91 f3 00 lds r25, 0x00F3 + 78ac: 80 91 f2 00 lds r24, 0x00F2 + 78b0: 39 2f mov r19, r25 + 78b2: 20 e0 ldi r18, 0x00 ; 0 + 78b4: a9 01 movw r20, r18 + 78b6: 48 2b or r20, r24 + 78b8: ca 01 movw r24, r20 + { + uint16_t BytesInEndpoint = Endpoint_BytesInEndpoint(); + + while (Length && (BytesInEndpoint < USB_Device_ControlEndpointSize)) + 78ba: 06 c0 rjmp .+12 ; 0x78c8 + { + TEMPLATE_TRANSFER_BYTE(DataStream); + 78bc: 41 91 ld r20, Z+ + * \param[in] Data Data to write into the the currently selected endpoint's FIFO buffer. + */ + static inline void Endpoint_Write_8(const uint8_t Data) ATTR_ALWAYS_INLINE; + static inline void Endpoint_Write_8(const uint8_t Data) + { + UEDATX = Data; + 78be: 40 93 f1 00 sts 0x00F1, r20 + TEMPLATE_BUFFER_MOVE(DataStream, 1); + Length--; + 78c2: 61 50 subi r22, 0x01 ; 1 + 78c4: 71 09 sbc r23, r1 + BytesInEndpoint++; + 78c6: 01 96 adiw r24, 0x01 ; 1 + + if (Endpoint_IsINReady()) + { + uint16_t BytesInEndpoint = Endpoint_BytesInEndpoint(); + + while (Length && (BytesInEndpoint < USB_Device_ControlEndpointSize)) + 78c8: 61 15 cp r22, r1 + 78ca: 71 05 cpc r23, r1 + 78cc: 19 f0 breq .+6 ; 0x78d4 + 78ce: 88 30 cpi r24, 0x08 ; 8 + 78d0: 91 05 cpc r25, r1 + 78d2: a0 f3 brcs .-24 ; 0x78bc + TEMPLATE_BUFFER_MOVE(DataStream, 1); + Length--; + BytesInEndpoint++; + } + + LastPacketFull = (BytesInEndpoint == USB_Device_ControlEndpointSize); + 78d4: 41 e0 ldi r20, 0x01 ; 1 + 78d6: 08 97 sbiw r24, 0x08 ; 8 + 78d8: 09 f0 breq .+2 ; 0x78dc + 78da: 40 e0 ldi r20, 0x00 ; 0 + */ + static inline void Endpoint_ClearIN(void) ATTR_ALWAYS_INLINE; + static inline void Endpoint_ClearIN(void) + { + #if !defined(CONTROL_ONLY_DEVICE) + UEINTX &= ~((1 << TXINI) | (1 << FIFOCON)); + 78dc: 80 91 e8 00 lds r24, 0x00E8 + 78e0: 8e 77 andi r24, 0x7E ; 126 + 78e2: 80 93 e8 00 sts 0x00E8, r24 + if (Length > USB_ControlRequest.wLength) + Length = USB_ControlRequest.wLength; + else if (!(Length)) + Endpoint_ClearIN(); + + while (Length || LastPacketFull) + 78e6: 61 15 cp r22, r1 + 78e8: 71 05 cpc r23, r1 + 78ea: 59 f6 brne .-106 ; 0x7882 + 78ec: 41 11 cpse r20, r1 + 78ee: c9 cf rjmp .-110 ; 0x7882 + 78f0: 09 c0 rjmp .+18 ; 0x7904 + } + } + + while (!(Endpoint_IsOUTReceived())) + { + uint8_t USB_DeviceState_LCL = USB_DeviceState; + 78f2: 8e b3 in r24, 0x1e ; 30 + + if (USB_DeviceState_LCL == DEVICE_STATE_Unattached) + 78f4: 88 23 and r24, r24 + 78f6: 61 f0 breq .+24 ; 0x7910 + return ENDPOINT_RWCSTREAM_DeviceDisconnected; + else if (USB_DeviceState_LCL == DEVICE_STATE_Suspended) + 78f8: 85 30 cpi r24, 0x05 ; 5 + 78fa: 61 f0 breq .+24 ; 0x7914 + * \return Boolean \c true if the selected endpoint has received a SETUP packet, \c false otherwise. + */ + static inline bool Endpoint_IsSETUPReceived(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; + static inline bool Endpoint_IsSETUPReceived(void) + { + return ((UEINTX & (1 << RXSTPI)) ? true : false); + 78fc: 80 91 e8 00 lds r24, 0x00E8 + return ENDPOINT_RWCSTREAM_BusSuspended; + else if (Endpoint_IsSETUPReceived()) + 7900: 83 fd sbrc r24, 3 + 7902: 0a c0 rjmp .+20 ; 0x7918 + * \return Boolean \c true if current endpoint is has received an OUT packet, \c false otherwise. + */ + static inline bool Endpoint_IsOUTReceived(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; + static inline bool Endpoint_IsOUTReceived(void) + { + return ((UEINTX & (1 << RXOUTI)) ? true : false); + 7904: 80 91 e8 00 lds r24, 0x00E8 + LastPacketFull = (BytesInEndpoint == USB_Device_ControlEndpointSize); + Endpoint_ClearIN(); + } + } + + while (!(Endpoint_IsOUTReceived())) + 7908: 82 ff sbrs r24, 2 + 790a: f3 cf rjmp .-26 ; 0x78f2 + return ENDPOINT_RWCSTREAM_BusSuspended; + else if (Endpoint_IsSETUPReceived()) + return ENDPOINT_RWCSTREAM_HostAborted; + } + + return ENDPOINT_RWCSTREAM_NoError; + 790c: 80 e0 ldi r24, 0x00 ; 0 + 790e: 08 95 ret + while (Length || LastPacketFull) + { + uint8_t USB_DeviceState_LCL = USB_DeviceState; + + if (USB_DeviceState_LCL == DEVICE_STATE_Unattached) + return ENDPOINT_RWCSTREAM_DeviceDisconnected; + 7910: 82 e0 ldi r24, 0x02 ; 2 + 7912: 08 95 ret + else if (USB_DeviceState_LCL == DEVICE_STATE_Suspended) + return ENDPOINT_RWCSTREAM_BusSuspended; + 7914: 83 e0 ldi r24, 0x03 ; 3 + 7916: 08 95 ret + else if (Endpoint_IsSETUPReceived()) + return ENDPOINT_RWCSTREAM_HostAborted; + 7918: 81 e0 ldi r24, 0x01 ; 1 + else if (Endpoint_IsSETUPReceived()) + return ENDPOINT_RWCSTREAM_HostAborted; + } + + return ENDPOINT_RWCSTREAM_NoError; +} + 791a: 08 95 ret + +0000791c : +uint8_t TEMPLATE_FUNC_NAME (void* const Buffer, + uint16_t Length) +{ + uint8_t* DataStream = ((uint8_t*)Buffer + TEMPLATE_BUFFER_OFFSET(Length)); + + if (!(Length)) + 791c: 61 15 cp r22, r1 + 791e: 71 05 cpc r23, r1 + 7920: 29 f4 brne .+10 ; 0x792c + */ + static inline void Endpoint_ClearOUT(void) ATTR_ALWAYS_INLINE; + static inline void Endpoint_ClearOUT(void) + { + #if !defined(CONTROL_ONLY_DEVICE) + UEINTX &= ~((1 << RXOUTI) | (1 << FIFOCON)); + 7922: 40 91 e8 00 lds r20, 0x00E8 + 7926: 4b 77 andi r20, 0x7B ; 123 + 7928: 40 93 e8 00 sts 0x00E8, r20 + +#if defined(TEMPLATE_FUNC_NAME) + +uint8_t TEMPLATE_FUNC_NAME (void* const Buffer, + uint16_t Length) +{ + 792c: ac 01 movw r20, r24 + 792e: 27 c0 rjmp .+78 ; 0x797e + if (!(Length)) + Endpoint_ClearOUT(); + + while (Length) + { + uint8_t USB_DeviceState_LCL = USB_DeviceState; + 7930: 8e b3 in r24, 0x1e ; 30 + + if (USB_DeviceState_LCL == DEVICE_STATE_Unattached) + 7932: 88 23 and r24, r24 + 7934: b1 f1 breq .+108 ; 0x79a2 + return ENDPOINT_RWCSTREAM_DeviceDisconnected; + else if (USB_DeviceState_LCL == DEVICE_STATE_Suspended) + 7936: 85 30 cpi r24, 0x05 ; 5 + 7938: 71 f1 breq .+92 ; 0x7996 + * \return Boolean \c true if the selected endpoint has received a SETUP packet, \c false otherwise. + */ + static inline bool Endpoint_IsSETUPReceived(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; + static inline bool Endpoint_IsSETUPReceived(void) + { + return ((UEINTX & (1 << RXSTPI)) ? true : false); + 793a: 80 91 e8 00 lds r24, 0x00E8 + return ENDPOINT_RWCSTREAM_BusSuspended; + else if (Endpoint_IsSETUPReceived()) + 793e: 83 fd sbrc r24, 3 + 7940: 2c c0 rjmp .+88 ; 0x799a + * \return Boolean \c true if current endpoint is has received an OUT packet, \c false otherwise. + */ + static inline bool Endpoint_IsOUTReceived(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; + static inline bool Endpoint_IsOUTReceived(void) + { + return ((UEINTX & (1 << RXOUTI)) ? true : false); + 7942: 80 91 e8 00 lds r24, 0x00E8 + return ENDPOINT_RWCSTREAM_HostAborted; + + if (Endpoint_IsOUTReceived()) + 7946: 82 ff sbrs r24, 2 + 7948: f3 cf rjmp .-26 ; 0x7930 + 794a: fa 01 movw r30, r20 + 794c: 07 c0 rjmp .+14 ; 0x795c + * \return Next byte in the currently selected endpoint's FIFO buffer. + */ + static inline uint8_t Endpoint_Read_8(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; + static inline uint8_t Endpoint_Read_8(void) + { + return UEDATX; + 794e: 80 91 f1 00 lds r24, 0x00F1 + { + while (Length && Endpoint_BytesInEndpoint()) + { + TEMPLATE_TRANSFER_BYTE(DataStream); + 7952: 81 93 st Z+, r24 + TEMPLATE_BUFFER_MOVE(DataStream, 1); + 7954: af 01 movw r20, r30 + Length--; + 7956: 61 50 subi r22, 0x01 ; 1 + 7958: 71 09 sbc r23, r1 + else if (Endpoint_IsSETUPReceived()) + return ENDPOINT_RWCSTREAM_HostAborted; + + if (Endpoint_IsOUTReceived()) + { + while (Length && Endpoint_BytesInEndpoint()) + 795a: 61 f0 breq .+24 ; 0x7974 + 795c: af 01 movw r20, r30 + static inline uint16_t Endpoint_BytesInEndpoint(void) + { + #if (defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR)) + return UEBCX; + #elif defined(USB_SERIES_4_AVR) + return (((uint16_t)UEBCHX << 8) | UEBCLX); + 795e: 90 91 f3 00 lds r25, 0x00F3 + 7962: 80 91 f2 00 lds r24, 0x00F2 + 7966: 39 2f mov r19, r25 + 7968: 20 e0 ldi r18, 0x00 ; 0 + 796a: d9 01 movw r26, r18 + 796c: a8 2b or r26, r24 + 796e: cd 01 movw r24, r26 + 7970: 89 2b or r24, r25 + 7972: 69 f7 brne .-38 ; 0x794e + */ + static inline void Endpoint_ClearOUT(void) ATTR_ALWAYS_INLINE; + static inline void Endpoint_ClearOUT(void) + { + #if !defined(CONTROL_ONLY_DEVICE) + UEINTX &= ~((1 << RXOUTI) | (1 << FIFOCON)); + 7974: 80 91 e8 00 lds r24, 0x00E8 + 7978: 8b 77 andi r24, 0x7B ; 123 + 797a: 80 93 e8 00 sts 0x00E8, r24 + uint8_t* DataStream = ((uint8_t*)Buffer + TEMPLATE_BUFFER_OFFSET(Length)); + + if (!(Length)) + Endpoint_ClearOUT(); + + while (Length) + 797e: 61 15 cp r22, r1 + 7980: 71 05 cpc r23, r1 + 7982: b1 f6 brne .-84 ; 0x7930 + * \return Boolean \c true if the current endpoint is ready for an IN packet, \c false otherwise. + */ + static inline bool Endpoint_IsINReady(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; + static inline bool Endpoint_IsINReady(void) + { + return ((UEINTX & (1 << TXINI)) ? true : false); + 7984: 80 91 e8 00 lds r24, 0x00E8 + + Endpoint_ClearOUT(); + } + } + + while (!(Endpoint_IsINReady())) + 7988: 80 fd sbrc r24, 0 + 798a: 09 c0 rjmp .+18 ; 0x799e + { + uint8_t USB_DeviceState_LCL = USB_DeviceState; + 798c: 8e b3 in r24, 0x1e ; 30 + + if (USB_DeviceState_LCL == DEVICE_STATE_Unattached) + 798e: 88 23 and r24, r24 + 7990: 41 f0 breq .+16 ; 0x79a2 + return ENDPOINT_RWCSTREAM_DeviceDisconnected; + else if (USB_DeviceState_LCL == DEVICE_STATE_Suspended) + 7992: 85 30 cpi r24, 0x05 ; 5 + 7994: b9 f7 brne .-18 ; 0x7984 + uint8_t USB_DeviceState_LCL = USB_DeviceState; + + if (USB_DeviceState_LCL == DEVICE_STATE_Unattached) + return ENDPOINT_RWCSTREAM_DeviceDisconnected; + else if (USB_DeviceState_LCL == DEVICE_STATE_Suspended) + return ENDPOINT_RWCSTREAM_BusSuspended; + 7996: 83 e0 ldi r24, 0x03 ; 3 + 7998: 08 95 ret + else if (Endpoint_IsSETUPReceived()) + return ENDPOINT_RWCSTREAM_HostAborted; + 799a: 81 e0 ldi r24, 0x01 ; 1 + 799c: 08 95 ret + return ENDPOINT_RWCSTREAM_DeviceDisconnected; + else if (USB_DeviceState_LCL == DEVICE_STATE_Suspended) + return ENDPOINT_RWCSTREAM_BusSuspended; + } + + return ENDPOINT_RWCSTREAM_NoError; + 799e: 80 e0 ldi r24, 0x00 ; 0 + 79a0: 08 95 ret + while (Length) + { + uint8_t USB_DeviceState_LCL = USB_DeviceState; + + if (USB_DeviceState_LCL == DEVICE_STATE_Unattached) + return ENDPOINT_RWCSTREAM_DeviceDisconnected; + 79a2: 82 e0 ldi r24, 0x02 ; 2 + else if (USB_DeviceState_LCL == DEVICE_STATE_Suspended) + return ENDPOINT_RWCSTREAM_BusSuspended; + } + + return ENDPOINT_RWCSTREAM_NoError; +} + 79a4: 08 95 ret + +000079a6 : + */ + static inline void Endpoint_SelectEndpoint(const uint8_t Address) ATTR_ALWAYS_INLINE; + static inline void Endpoint_SelectEndpoint(const uint8_t Address) + { + #if !defined(CONTROL_ONLY_DEVICE) + UENUM = (Address & ENDPOINT_EPNUM_MASK); + 79a6: 8f 70 andi r24, 0x0F ; 15 + 79a8: 80 93 e9 00 sts 0x00E9, r24 + * \note Endpoints must first be configured properly via \ref Endpoint_ConfigureEndpoint(). + */ + static inline void Endpoint_EnableEndpoint(void) ATTR_ALWAYS_INLINE; + static inline void Endpoint_EnableEndpoint(void) + { + UECONX |= (1 << EPEN); + 79ac: eb ee ldi r30, 0xEB ; 235 + 79ae: f0 e0 ldi r31, 0x00 ; 0 + 79b0: 80 81 ld r24, Z + 79b2: 81 60 ori r24, 0x01 ; 1 + 79b4: 80 83 st Z, r24 +{ +#if defined(CONTROL_ONLY_DEVICE) || defined(ORDERED_EP_CONFIG) + Endpoint_SelectEndpoint(Number); + Endpoint_EnableEndpoint(); + + UECFG1X = 0; + 79b6: ed ee ldi r30, 0xED ; 237 + 79b8: f0 e0 ldi r31, 0x00 ; 0 + 79ba: 10 82 st Z, r1 + UECFG0X = UECFG0XData; + 79bc: 60 93 ec 00 sts 0x00EC, r22 + UECFG1X = UECFG1XData; + 79c0: 40 83 st Z, r20 + * \return Boolean \c true if the currently selected endpoint has been configured, \c false otherwise. + */ + static inline bool Endpoint_IsConfigured(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; + static inline bool Endpoint_IsConfigured(void) + { + return ((UESTA0X & (1 << CFGOK)) ? true : false); + 79c2: 80 91 ee 00 lds r24, 0x00EE + } + + Endpoint_SelectEndpoint(Number); + return true; +#endif +} + 79c6: 88 1f adc r24, r24 + 79c8: 88 27 eor r24, r24 + 79ca: 88 1f adc r24, r24 + 79cc: 08 95 ret + +000079ce : + } +} + +void Endpoint_ClearStatusStage(void) +{ + if (USB_ControlRequest.bmRequestType & REQDIR_DEVICETOHOST) + 79ce: 80 91 98 01 lds r24, 0x0198 + 79d2: 87 fd sbrc r24, 7 + 79d4: 05 c0 rjmp .+10 ; 0x79e0 + * \return Boolean \c true if the current endpoint is ready for an IN packet, \c false otherwise. + */ + static inline bool Endpoint_IsINReady(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; + static inline bool Endpoint_IsINReady(void) + { + return ((UEINTX & (1 << TXINI)) ? true : false); + 79d6: 80 91 e8 00 lds r24, 0x00E8 + + Endpoint_ClearOUT(); + } + else + { + while (!(Endpoint_IsINReady())) + 79da: 80 ff sbrs r24, 0 + 79dc: 0d c0 rjmp .+26 ; 0x79f8 + 79de: 10 c0 rjmp .+32 ; 0x7a00 + * \return Boolean \c true if current endpoint is has received an OUT packet, \c false otherwise. + */ + static inline bool Endpoint_IsOUTReceived(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; + static inline bool Endpoint_IsOUTReceived(void) + { + return ((UEINTX & (1 << RXOUTI)) ? true : false); + 79e0: 80 91 e8 00 lds r24, 0x00E8 + +void Endpoint_ClearStatusStage(void) +{ + if (USB_ControlRequest.bmRequestType & REQDIR_DEVICETOHOST) + { + while (!(Endpoint_IsOUTReceived())) + 79e4: 82 fd sbrc r24, 2 + 79e6: 04 c0 rjmp .+8 ; 0x79f0 + { + if (USB_DeviceState == DEVICE_STATE_Unattached) + 79e8: 8e b3 in r24, 0x1e ; 30 + 79ea: 81 11 cpse r24, r1 + 79ec: f9 cf rjmp .-14 ; 0x79e0 + 79ee: 08 95 ret + */ + static inline void Endpoint_ClearOUT(void) ATTR_ALWAYS_INLINE; + static inline void Endpoint_ClearOUT(void) + { + #if !defined(CONTROL_ONLY_DEVICE) + UEINTX &= ~((1 << RXOUTI) | (1 << FIFOCON)); + 79f0: 80 91 e8 00 lds r24, 0x00E8 + 79f4: 8b 77 andi r24, 0x7B ; 123 + 79f6: 07 c0 rjmp .+14 ; 0x7a06 + } + else + { + while (!(Endpoint_IsINReady())) + { + if (USB_DeviceState == DEVICE_STATE_Unattached) + 79f8: 8e b3 in r24, 0x1e ; 30 + 79fa: 81 11 cpse r24, r1 + 79fc: ec cf rjmp .-40 ; 0x79d6 + 79fe: 08 95 ret + */ + static inline void Endpoint_ClearIN(void) ATTR_ALWAYS_INLINE; + static inline void Endpoint_ClearIN(void) + { + #if !defined(CONTROL_ONLY_DEVICE) + UEINTX &= ~((1 << TXINI) | (1 << FIFOCON)); + 7a00: 80 91 e8 00 lds r24, 0x00E8 + 7a04: 8e 77 andi r24, 0x7E ; 126 + 7a06: 80 93 e8 00 sts 0x00E8, r24 + 7a0a: 08 95 ret + +00007a0c : + + USB_IsInitialized = false; +} + +void USB_ResetInterface(void) +{ + 7a0c: 0f 93 push r16 + 7a0e: 1f 93 push r17 + 7a10: cf 93 push r28 + 7a12: df 93 push r29 + #if defined(USB_CAN_BE_BOTH) + bool UIDModeSelectEnabled = ((UHWCON & (1 << UIDE)) != 0); + #endif + + USB_INT_DisableAllInterrupts(); + 7a14: 46 d0 rcall .+140 ; 0x7aa2 + 7a16: 4d d0 rcall .+154 ; 0x7ab2 + USB_INT_ClearAllInterrupts(); + 7a18: c8 ed ldi r28, 0xD8 ; 216 + 7a1a: d0 e0 ldi r29, 0x00 ; 0 + } + + static inline void USB_Controller_Reset(void) ATTR_ALWAYS_INLINE; + static inline void USB_Controller_Reset(void) + { + USBCON &= ~(1 << USBE); + 7a1c: 88 81 ld r24, Y + 7a1e: 8f 77 andi r24, 0x7F ; 127 + 7a20: 88 83 st Y, r24 + 7a22: 88 81 ld r24, Y + 7a24: 80 68 ori r24, 0x80 ; 128 + USBCON |= (1 << USBE); + 7a26: 88 83 st Y, r24 + 7a28: 88 81 ld r24, Y + 7a2a: 8f 7d andi r24, 0xDF ; 223 + } + + static inline void USB_CLK_Unfreeze(void) ATTR_ALWAYS_INLINE; + static inline void USB_CLK_Unfreeze(void) + { + USBCON &= ~(1 << FRZCLK); + 7a2c: 88 83 st Y, r24 + 7a2e: 19 bc out 0x29, r1 ; 41 + 7a30: 1e ba out 0x1e, r1 ; 30 + } + + static inline void USB_PLL_Off(void) ATTR_ALWAYS_INLINE; + static inline void USB_PLL_Off(void) + { + PLLCSR = 0; + 7a32: 10 92 96 01 sts 0x0196, r1 + +#if defined(USB_CAN_BE_DEVICE) +static void USB_Init_Device(void) +{ + USB_DeviceState = DEVICE_STATE_Unattached; + USB_Device_ConfigurationNumber = 0; + 7a36: 00 ee ldi r16, 0xE0 ; 224 + 7a38: 10 e0 ldi r17, 0x00 ; 0 + } + + static inline void USB_Device_SetFullSpeed(void) ATTR_ALWAYS_INLINE; + static inline void USB_Device_SetFullSpeed(void) + { + UDCON &= ~(1 << LSM); + 7a3a: f8 01 movw r30, r16 + 7a3c: 80 81 ld r24, Z + 7a3e: 8b 7f andi r24, 0xFB ; 251 + 7a40: 80 83 st Z, r24 + 7a42: 88 81 ld r24, Y + 7a44: 81 60 ori r24, 0x01 ; 1 + { + switch (Interrupt) + { + #if (defined(USB_SERIES_4_AVR) || defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR)) + case USB_INT_VBUSTI: + USBCON |= (1 << VBUSTE); + 7a46: 88 83 st Y, r24 + 7a48: 42 e0 ldi r20, 0x02 ; 2 + 7a4a: 60 e0 ldi r22, 0x00 ; 0 + uint8_t Number = (Address & ENDPOINT_EPNUM_MASK); + + if (Number >= ENDPOINT_TOTAL_ENDPOINTS) + return false; + + return Endpoint_ConfigureEndpoint_Prv(Number, + 7a4c: 80 e0 ldi r24, 0x00 ; 0 + 7a4e: ab df rcall .-170 ; 0x79a6 + 7a50: e1 ee ldi r30, 0xE1 ; 225 + 7a52: f0 e0 ldi r31, 0x00 ; 0 + 7a54: 80 81 ld r24, Z + #if defined(USB_CAN_BE_DEVICE) + case USB_INT_WAKEUPI: + UDINT &= ~(1 << WAKEUPI); + break; + case USB_INT_SUSPI: + UDINT &= ~(1 << SUSPI); + 7a56: 8e 7f andi r24, 0xFE ; 254 + 7a58: 80 83 st Z, r24 + 7a5a: e2 ee ldi r30, 0xE2 ; 226 + 7a5c: f0 e0 ldi r31, 0x00 ; 0 + 7a5e: 80 81 ld r24, Z + #if defined(USB_CAN_BE_DEVICE) + case USB_INT_WAKEUPI: + UDIEN |= (1 << WAKEUPE); + break; + case USB_INT_SUSPI: + UDIEN |= (1 << SUSPE); + 7a60: 81 60 ori r24, 0x01 ; 1 + 7a62: 80 83 st Z, r24 + 7a64: 80 81 ld r24, Z + 7a66: 88 60 ori r24, 0x08 ; 8 + 7a68: 80 83 st Z, r24 + break; + case USB_INT_EORSTI: + UDIEN |= (1 << EORSTE); + 7a6a: f8 01 movw r30, r16 + 7a6c: 80 81 ld r24, Z + 7a6e: 8e 7f andi r24, 0xFE ; 254 + * register and despite the datasheet making no mention of its requirement in host mode. + */ + static inline void USB_Attach(void) ATTR_ALWAYS_INLINE; + static inline void USB_Attach(void) + { + UDCON &= ~(1 << DETACH); + 7a70: 80 83 st Z, r24 + 7a72: 88 81 ld r24, Y + 7a74: 80 61 ori r24, 0x10 ; 16 + 7a76: 88 83 st Y, r24 + + #if defined(USB_SERIES_4_AVR) || defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR) + static inline void USB_OTGPAD_On(void) ATTR_ALWAYS_INLINE; + static inline void USB_OTGPAD_On(void) + { + USBCON |= (1 << OTGPADE); + 7a78: df 91 pop r29 + 7a7a: cf 91 pop r28 + 7a7c: 1f 91 pop r17 + } + + #if (defined(USB_SERIES_4_AVR) || defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR)) + USB_OTGPAD_On(); + #endif +} + 7a7e: 0f 91 pop r16 + 7a80: 08 95 ret + +00007a82 : + + #if !defined(USE_STATIC_OPTIONS) + const uint8_t Options + #endif + ) +{ + 7a82: e8 ed ldi r30, 0xD8 ; 216 + 7a84: f0 e0 ldi r31, 0x00 ; 0 + 7a86: 80 81 ld r24, Z + 7a88: 8f 7e andi r24, 0xEF ; 239 + 7a8a: 80 83 st Z, r24 + + static inline void USB_REG_On(void) ATTR_ALWAYS_INLINE; + static inline void USB_REG_On(void) + { + #if defined(USB_SERIES_4_AVR) || defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR) + UHWCON |= (1 << UVREGE); + 7a8c: e7 ed ldi r30, 0xD7 ; 215 + 7a8e: f0 e0 ldi r31, 0x00 ; 0 + 7a90: 80 81 ld r24, Z + 7a92: 81 60 ori r24, 0x01 ; 1 + 7a94: 80 83 st Z, r24 + USB_REG_Off(); + + if (!(USB_Options & USB_OPT_MANUAL_PLL)) + { + #if defined(USB_SERIES_4_AVR) + PLLFRQ = (1 << PDIV2); + 7a96: 84 e0 ldi r24, 0x04 ; 4 + 7a98: 82 bf out 0x32, r24 ; 50 + UHWCON &= ~(1 << UIDE); + USB_CurrentMode = Mode; + } + #endif + + USB_IsInitialized = true; + 7a9a: 81 e0 ldi r24, 0x01 ; 1 + 7a9c: 80 93 97 01 sts 0x0197, r24 + + USB_ResetInterface(); + 7aa0: b5 cf rjmp .-150 ; 0x7a0c + +00007aa2 : +void USB_INT_DisableAllInterrupts(void) +{ + #if defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR) + USBCON &= ~((1 << VBUSTE) | (1 << IDTE)); + #elif defined(USB_SERIES_4_AVR) + USBCON &= ~(1 << VBUSTE); + 7aa2: e8 ed ldi r30, 0xD8 ; 216 + 7aa4: f0 e0 ldi r31, 0x00 ; 0 + 7aa6: 80 81 ld r24, Z + 7aa8: 8e 7f andi r24, 0xFE ; 254 + 7aaa: 80 83 st Z, r24 + #if defined(USB_CAN_BE_HOST) + UHIEN = 0; + #endif + + #if defined(USB_CAN_BE_DEVICE) + UDIEN = 0; + 7aac: 10 92 e2 00 sts 0x00E2, r1 + 7ab0: 08 95 ret + +00007ab2 : +} + +void USB_INT_ClearAllInterrupts(void) +{ + #if defined(USB_SERIES_4_AVR) || defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR) + USBINT = 0; + 7ab2: 10 92 da 00 sts 0x00DA, r1 + #if defined(USB_CAN_BE_HOST) + UHINT = 0; + #endif + + #if defined(USB_CAN_BE_DEVICE) + UDINT = 0; + 7ab6: 10 92 e1 00 sts 0x00E1, r1 + 7aba: 08 95 ret + +00007abc <__vector_10>: + #endif +} + +ISR(USB_GEN_vect, ISR_BLOCK) +{ + 7abc: 1f 92 push r1 + 7abe: 0f 92 push r0 + 7ac0: 0f b6 in r0, 0x3f ; 63 + 7ac2: 0f 92 push r0 + 7ac4: 11 24 eor r1, r1 + 7ac6: 2f 93 push r18 + 7ac8: 3f 93 push r19 + 7aca: 4f 93 push r20 + 7acc: 5f 93 push r21 + 7ace: 6f 93 push r22 + 7ad0: 7f 93 push r23 + 7ad2: 8f 93 push r24 + 7ad4: 9f 93 push r25 + 7ad6: af 93 push r26 + 7ad8: bf 93 push r27 + 7ada: ef 93 push r30 + 7adc: ff 93 push r31 + { + switch (Interrupt) + { + #if (defined(USB_SERIES_4_AVR) || defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR)) + case USB_INT_VBUSTI: + return (USBINT & (1 << VBUSTI)); + 7ade: 80 91 da 00 lds r24, 0x00DA + EVENT_USB_Device_StartOfFrame(); + } + #endif + + #if defined(USB_SERIES_4_AVR) || defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR) + if (USB_INT_HasOccurred(USB_INT_VBUSTI) && USB_INT_IsEnabled(USB_INT_VBUSTI)) + 7ae2: 80 ff sbrs r24, 0 + 7ae4: 1b c0 rjmp .+54 ; 0x7b1c <__vector_10+0x60> + { + switch (Interrupt) + { + #if (defined(USB_SERIES_4_AVR) || defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR)) + case USB_INT_VBUSTI: + return (USBCON & (1 << VBUSTE)); + 7ae6: 80 91 d8 00 lds r24, 0x00D8 + 7aea: 80 ff sbrs r24, 0 + 7aec: 17 c0 rjmp .+46 ; 0x7b1c <__vector_10+0x60> + { + switch (Interrupt) + { + #if (defined(USB_SERIES_4_AVR) || defined(USB_SERIES_6_AVR) || defined(USB_SERIES_7_AVR)) + case USB_INT_VBUSTI: + USBINT &= ~(1 << VBUSTI); + 7aee: 80 91 da 00 lds r24, 0x00DA + 7af2: 8e 7f andi r24, 0xFE ; 254 + 7af4: 80 93 da 00 sts 0x00DA, r24 + * \return Boolean \c true if the VBUS line is currently detecting power from a host, \c false otherwise. + */ + static inline bool USB_VBUS_GetStatus(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; + static inline bool USB_VBUS_GetStatus(void) + { + return ((USBSTA & (1 << VBUS)) ? true : false); + 7af8: 80 91 d9 00 lds r24, 0x00D9 + { + USB_INT_Clear(USB_INT_VBUSTI); + + if (USB_VBUS_GetStatus()) + 7afc: 80 ff sbrs r24, 0 + 7afe: 0b c0 rjmp .+22 ; 0x7b16 <__vector_10+0x5a> + + /* Inline Functions: */ + static inline void USB_PLL_On(void) ATTR_ALWAYS_INLINE; + static inline void USB_PLL_On(void) + { + PLLCSR = USB_PLL_PSC; + 7b00: 80 e1 ldi r24, 0x10 ; 16 + 7b02: 89 bd out 0x29, r24 ; 41 + PLLCSR = (USB_PLL_PSC | (1 << PLLE)); + 7b04: 82 e1 ldi r24, 0x12 ; 18 + 7b06: 89 bd out 0x29, r24 ; 41 + { + if (!(USB_Options & USB_OPT_MANUAL_PLL)) + { + USB_PLL_On(); + while (!(USB_PLL_IsReady())); + 7b08: 09 b4 in r0, 0x29 ; 41 + 7b0a: 00 fe sbrs r0, 0 + 7b0c: fd cf rjmp .-6 ; 0x7b08 <__vector_10+0x4c> + } + + USB_DeviceState = DEVICE_STATE_Powered; + 7b0e: 81 e0 ldi r24, 0x01 ; 1 + 7b10: 8e bb out 0x1e, r24 ; 30 + EVENT_USB_Device_Connect(); + 7b12: 98 d1 rcall .+816 ; 0x7e44 + 7b14: 03 c0 rjmp .+6 ; 0x7b1c <__vector_10+0x60> + 7b16: 19 bc out 0x29, r1 ; 41 + } + + static inline void USB_PLL_Off(void) ATTR_ALWAYS_INLINE; + static inline void USB_PLL_Off(void) + { + PLLCSR = 0; + 7b18: 1e ba out 0x1e, r1 ; 30 + else + { + if (!(USB_Options & USB_OPT_MANUAL_PLL)) + USB_PLL_Off(); + + USB_DeviceState = DEVICE_STATE_Unattached; + 7b1a: 94 d1 rcall .+808 ; 0x7e44 + EVENT_USB_Device_Disconnect(); + 7b1c: 80 91 e1 00 lds r24, 0x00E1 + #endif + #if defined(USB_CAN_BE_DEVICE) + case USB_INT_WAKEUPI: + return (UDINT & (1 << WAKEUPI)); + case USB_INT_SUSPI: + return (UDINT & (1 << SUSPI)); + 7b20: 80 ff sbrs r24, 0 + 7b22: 17 c0 rjmp .+46 ; 0x7b52 <__vector_10+0x96> + } + } + #endif + + if (USB_INT_HasOccurred(USB_INT_SUSPI) && USB_INT_IsEnabled(USB_INT_SUSPI)) + 7b24: 80 91 e2 00 lds r24, 0x00E2 + #endif + #if defined(USB_CAN_BE_DEVICE) + case USB_INT_WAKEUPI: + return (UDIEN & (1 << WAKEUPE)); + case USB_INT_SUSPI: + return (UDIEN & (1 << SUSPE)); + 7b28: 80 ff sbrs r24, 0 + 7b2a: 13 c0 rjmp .+38 ; 0x7b52 <__vector_10+0x96> + 7b2c: 80 91 e2 00 lds r24, 0x00E2 + #if defined(USB_CAN_BE_DEVICE) + case USB_INT_WAKEUPI: + UDIEN &= ~(1 << WAKEUPE); + break; + case USB_INT_SUSPI: + UDIEN &= ~(1 << SUSPE); + 7b30: 8e 7f andi r24, 0xFE ; 254 + 7b32: 80 93 e2 00 sts 0x00E2, r24 + 7b36: 80 91 e2 00 lds r24, 0x00E2 + USBCON |= (1 << IDTE); + break; + #endif + #if defined(USB_CAN_BE_DEVICE) + case USB_INT_WAKEUPI: + UDIEN |= (1 << WAKEUPE); + 7b3a: 80 61 ori r24, 0x10 ; 16 + 7b3c: 80 93 e2 00 sts 0x00E2, r24 + 7b40: 80 91 d8 00 lds r24, 0x00D8 + #endif + + static inline void USB_CLK_Freeze(void) ATTR_ALWAYS_INLINE; + static inline void USB_CLK_Freeze(void) + { + USBCON |= (1 << FRZCLK); + 7b44: 80 62 ori r24, 0x20 ; 32 + 7b46: 80 93 d8 00 sts 0x00D8, r24 + 7b4a: 19 bc out 0x29, r1 ; 41 + 7b4c: 85 e0 ldi r24, 0x05 ; 5 + } + + static inline void USB_PLL_Off(void) ATTR_ALWAYS_INLINE; + static inline void USB_PLL_Off(void) + { + PLLCSR = 0; + 7b4e: 8e bb out 0x1e, r24 ; 30 + + #if defined(USB_SERIES_2_AVR) && !defined(NO_LIMITED_CONTROLLER_CONNECT) + USB_DeviceState = DEVICE_STATE_Unattached; + EVENT_USB_Device_Disconnect(); + #else + USB_DeviceState = DEVICE_STATE_Suspended; + 7b50: 79 d1 rcall .+754 ; 0x7e44 + 7b52: 80 91 e1 00 lds r24, 0x00E1 + EVENT_USB_Device_Suspend(); + 7b56: 84 ff sbrs r24, 4 + case USB_INT_IDTI: + return (USBINT & (1 << IDTI)); + #endif + #if defined(USB_CAN_BE_DEVICE) + case USB_INT_WAKEUPI: + return (UDINT & (1 << WAKEUPI)); + 7b58: 2e c0 rjmp .+92 ; 0x7bb6 <__vector_10+0xfa> + 7b5a: 80 91 e2 00 lds r24, 0x00E2 + #endif + } + + if (USB_INT_HasOccurred(USB_INT_WAKEUPI) && USB_INT_IsEnabled(USB_INT_WAKEUPI)) + 7b5e: 84 ff sbrs r24, 4 + case USB_INT_IDTI: + return (USBCON & (1 << IDTE)); + #endif + #if defined(USB_CAN_BE_DEVICE) + case USB_INT_WAKEUPI: + return (UDIEN & (1 << WAKEUPE)); + 7b60: 2a c0 rjmp .+84 ; 0x7bb6 <__vector_10+0xfa> + 7b62: 80 e1 ldi r24, 0x10 ; 16 + 7b64: 89 bd out 0x29, r24 ; 41 + 7b66: 82 e1 ldi r24, 0x12 ; 18 + + /* Inline Functions: */ + static inline void USB_PLL_On(void) ATTR_ALWAYS_INLINE; + static inline void USB_PLL_On(void) + { + PLLCSR = USB_PLL_PSC; + 7b68: 89 bd out 0x29, r24 ; 41 + 7b6a: 09 b4 in r0, 0x29 ; 41 + PLLCSR = (USB_PLL_PSC | (1 << PLLE)); + 7b6c: 00 fe sbrs r0, 0 + 7b6e: fd cf rjmp .-6 ; 0x7b6a <__vector_10+0xae> + { + if (!(USB_Options & USB_OPT_MANUAL_PLL)) + { + USB_PLL_On(); + while (!(USB_PLL_IsReady())); + 7b70: 80 91 d8 00 lds r24, 0x00D8 + 7b74: 8f 7d andi r24, 0xDF ; 223 + } + + static inline void USB_CLK_Unfreeze(void) ATTR_ALWAYS_INLINE; + static inline void USB_CLK_Unfreeze(void) + { + USBCON &= ~(1 << FRZCLK); + 7b76: 80 93 d8 00 sts 0x00D8, r24 + 7b7a: 80 91 e1 00 lds r24, 0x00E1 + 7b7e: 8f 7e andi r24, 0xEF ; 239 + USBINT &= ~(1 << IDTI); + break; + #endif + #if defined(USB_CAN_BE_DEVICE) + case USB_INT_WAKEUPI: + UDINT &= ~(1 << WAKEUPI); + 7b80: 80 93 e1 00 sts 0x00E1, r24 + 7b84: 80 91 e2 00 lds r24, 0x00E2 + 7b88: 8f 7e andi r24, 0xEF ; 239 + USBCON &= ~(1 << IDTE); + break; + #endif + #if defined(USB_CAN_BE_DEVICE) + case USB_INT_WAKEUPI: + UDIEN &= ~(1 << WAKEUPE); + 7b8a: 80 93 e2 00 sts 0x00E2, r24 + 7b8e: 80 91 e2 00 lds r24, 0x00E2 + 7b92: 81 60 ori r24, 0x01 ; 1 + #if defined(USB_CAN_BE_DEVICE) + case USB_INT_WAKEUPI: + UDIEN |= (1 << WAKEUPE); + break; + case USB_INT_SUSPI: + UDIEN |= (1 << SUSPE); + 7b94: 80 93 e2 00 sts 0x00E2, r24 + 7b98: 80 91 96 01 lds r24, 0x0196 + 7b9c: 88 23 and r24, r24 + USB_INT_Clear(USB_INT_WAKEUPI); + + USB_INT_Disable(USB_INT_WAKEUPI); + USB_INT_Enable(USB_INT_SUSPI); + + if (USB_Device_ConfigurationNumber) + 7b9e: 11 f0 breq .+4 ; 0x7ba4 <__vector_10+0xe8> + 7ba0: 84 e0 ldi r24, 0x04 ; 4 + 7ba2: 07 c0 rjmp .+14 ; 0x7bb2 <__vector_10+0xf6> + 7ba4: 80 91 e3 00 lds r24, 0x00E3 + USB_DeviceState = DEVICE_STATE_Configured; + 7ba8: 87 ff sbrs r24, 7 + } + + static inline bool USB_Device_IsAddressSet(void) ATTR_ALWAYS_INLINE ATTR_WARN_UNUSED_RESULT; + static inline bool USB_Device_IsAddressSet(void) + { + return (UDADDR & (1 << ADDEN)); + 7baa: 02 c0 rjmp .+4 ; 0x7bb0 <__vector_10+0xf4> + 7bac: 83 e0 ldi r24, 0x03 ; 3 + else + USB_DeviceState = (USB_Device_IsAddressSet()) ? DEVICE_STATE_Addressed : DEVICE_STATE_Powered; + 7bae: 01 c0 rjmp .+2 ; 0x7bb2 <__vector_10+0xf6> + 7bb0: 81 e0 ldi r24, 0x01 ; 1 + 7bb2: 8e bb out 0x1e, r24 ; 30 + 7bb4: 47 d1 rcall .+654 ; 0x7e44 + 7bb6: 80 91 e1 00 lds r24, 0x00E1 + + #if defined(USB_SERIES_2_AVR) && !defined(NO_LIMITED_CONTROLLER_CONNECT) + EVENT_USB_Device_Connect(); + #else + EVENT_USB_Device_WakeUp(); + 7bba: 83 ff sbrs r24, 3 + 7bbc: 21 c0 rjmp .+66 ; 0x7c00 <__vector_10+0x144> + case USB_INT_WAKEUPI: + return (UDINT & (1 << WAKEUPI)); + case USB_INT_SUSPI: + return (UDINT & (1 << SUSPI)); + case USB_INT_EORSTI: + return (UDINT & (1 << EORSTI)); + 7bbe: 80 91 e2 00 lds r24, 0x00E2 + #endif + } + + if (USB_INT_HasOccurred(USB_INT_EORSTI) && USB_INT_IsEnabled(USB_INT_EORSTI)) + 7bc2: 83 ff sbrs r24, 3 + 7bc4: 1d c0 rjmp .+58 ; 0x7c00 <__vector_10+0x144> + case USB_INT_WAKEUPI: + return (UDIEN & (1 << WAKEUPE)); + case USB_INT_SUSPI: + return (UDIEN & (1 << SUSPE)); + case USB_INT_EORSTI: + return (UDIEN & (1 << EORSTE)); + 7bc6: 80 91 e1 00 lds r24, 0x00E1 + 7bca: 87 7f andi r24, 0xF7 ; 247 + 7bcc: 80 93 e1 00 sts 0x00E1, r24 + break; + case USB_INT_SUSPI: + UDINT &= ~(1 << SUSPI); + break; + case USB_INT_EORSTI: + UDINT &= ~(1 << EORSTI); + 7bd0: 82 e0 ldi r24, 0x02 ; 2 + 7bd2: 8e bb out 0x1e, r24 ; 30 + 7bd4: 10 92 96 01 sts 0x0196, r1 + { + USB_INT_Clear(USB_INT_EORSTI); + + USB_DeviceState = DEVICE_STATE_Default; + 7bd8: 80 91 e1 00 lds r24, 0x00E1 + USB_Device_ConfigurationNumber = 0; + 7bdc: 8e 7f andi r24, 0xFE ; 254 + 7bde: 80 93 e1 00 sts 0x00E1, r24 + #if defined(USB_CAN_BE_DEVICE) + case USB_INT_WAKEUPI: + UDINT &= ~(1 << WAKEUPI); + break; + case USB_INT_SUSPI: + UDINT &= ~(1 << SUSPI); + 7be2: 80 91 e2 00 lds r24, 0x00E2 + 7be6: 8e 7f andi r24, 0xFE ; 254 + 7be8: 80 93 e2 00 sts 0x00E2, r24 + #if defined(USB_CAN_BE_DEVICE) + case USB_INT_WAKEUPI: + UDIEN &= ~(1 << WAKEUPE); + break; + case USB_INT_SUSPI: + UDIEN &= ~(1 << SUSPE); + 7bec: 80 91 e2 00 lds r24, 0x00E2 + 7bf0: 80 61 ori r24, 0x10 ; 16 + 7bf2: 80 93 e2 00 sts 0x00E2, r24 + USBCON |= (1 << IDTE); + break; + #endif + #if defined(USB_CAN_BE_DEVICE) + case USB_INT_WAKEUPI: + UDIEN |= (1 << WAKEUPE); + 7bf6: 42 e0 ldi r20, 0x02 ; 2 + 7bf8: 60 e0 ldi r22, 0x00 ; 0 + 7bfa: 80 e0 ldi r24, 0x00 ; 0 + 7bfc: d4 de rcall .-600 ; 0x79a6 + uint8_t Number = (Address & ENDPOINT_EPNUM_MASK); + + if (Number >= ENDPOINT_TOTAL_ENDPOINTS) + return false; + + return Endpoint_ConfigureEndpoint_Prv(Number, + 7bfe: 22 d1 rcall .+580 ; 0x7e44 + 7c00: ff 91 pop r31 + 7c02: ef 91 pop r30 + 7c04: bf 91 pop r27 + 7c06: af 91 pop r26 + + #if defined(INTERRUPT_CONTROL_ENDPOINT) + USB_INT_Enable(USB_INT_RXSTPI); + #endif + + EVENT_USB_Device_Reset(); + 7c08: 9f 91 pop r25 + 7c0a: 8f 91 pop r24 + USB_ResetInterface(); + + EVENT_USB_UIDChange(); + } + #endif +} + 7c0c: 7f 91 pop r23 + 7c0e: 6f 91 pop r22 + 7c10: 5f 91 pop r21 + 7c12: 4f 91 pop r20 + 7c14: 3f 91 pop r19 + 7c16: 2f 91 pop r18 + 7c18: 0f 90 pop r0 + 7c1a: 0f be out 0x3f, r0 ; 63 + 7c1c: 0f 90 pop r0 + 7c1e: 1f 90 pop r1 + 7c20: 18 95 reti + +00007c22 : +#if !defined(NO_DEVICE_REMOTE_WAKEUP) +bool USB_Device_RemoteWakeupEnabled; +#endif + +void USB_Device_ProcessControlRequest(void) +{ + 7c22: 1f 93 push r17 + 7c24: cf 93 push r28 + 7c26: df 93 push r29 + 7c28: 00 d0 rcall .+0 ; 0x7c2a + 7c2a: cd b7 in r28, 0x3d ; 61 + 7c2c: de b7 in r29, 0x3e ; 62 + USB_ControlRequest.bRequest = Endpoint_Read_8(); + USB_ControlRequest.wValue = Endpoint_Read_16_LE(); + USB_ControlRequest.wIndex = Endpoint_Read_16_LE(); + USB_ControlRequest.wLength = Endpoint_Read_16_LE(); + #else + uint8_t* RequestHeader = (uint8_t*)&USB_ControlRequest; + 7c2e: e8 e9 ldi r30, 0x98 ; 152 + 7c30: f1 e0 ldi r31, 0x01 ; 1 + * \return Next byte in the currently selected endpoint's FIFO buffer. + */ + static inline uint8_t Endpoint_Read_8(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; + static inline uint8_t Endpoint_Read_8(void) + { + return UEDATX; + 7c32: 80 91 f1 00 lds r24, 0x00F1 + + for (uint8_t RequestHeaderByte = 0; RequestHeaderByte < sizeof(USB_Request_Header_t); RequestHeaderByte++) + *(RequestHeader++) = Endpoint_Read_8(); + 7c36: 81 93 st Z+, r24 + USB_ControlRequest.wIndex = Endpoint_Read_16_LE(); + USB_ControlRequest.wLength = Endpoint_Read_16_LE(); + #else + uint8_t* RequestHeader = (uint8_t*)&USB_ControlRequest; + + for (uint8_t RequestHeaderByte = 0; RequestHeaderByte < sizeof(USB_Request_Header_t); RequestHeaderByte++) + 7c38: 81 e0 ldi r24, 0x01 ; 1 + 7c3a: e0 3a cpi r30, 0xA0 ; 160 + 7c3c: f8 07 cpc r31, r24 + 7c3e: c9 f7 brne .-14 ; 0x7c32 + *(RequestHeader++) = Endpoint_Read_8(); + #endif + + EVENT_USB_Device_ControlRequest(); + 7c40: 46 dd rcall .-1396 ; 0x76ce + 7c42: 80 91 e8 00 lds r24, 0x00E8 + * \return Boolean \c true if the selected endpoint has received a SETUP packet, \c false otherwise. + */ + static inline bool Endpoint_IsSETUPReceived(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; + static inline bool Endpoint_IsSETUPReceived(void) + { + return ((UEINTX & (1 << RXSTPI)) ? true : false); + 7c46: 83 ff sbrs r24, 3 + + if (Endpoint_IsSETUPReceived()) + 7c48: e9 c0 rjmp .+466 ; 0x7e1c + 7c4a: 80 91 98 01 lds r24, 0x0198 + { + uint8_t bmRequestType = USB_ControlRequest.bmRequestType; + 7c4e: 90 91 99 01 lds r25, 0x0199 + + switch (USB_ControlRequest.bRequest) + 7c52: 95 30 cpi r25, 0x05 ; 5 + 7c54: 09 f4 brne .+2 ; 0x7c58 + 7c56: 70 c0 rjmp .+224 ; 0x7d38 + 7c58: 38 f4 brcc .+14 ; 0x7c68 + 7c5a: 91 30 cpi r25, 0x01 ; 1 + 7c5c: 79 f1 breq .+94 ; 0x7cbc + 7c5e: 70 f0 brcs .+28 ; 0x7c7c + 7c60: 93 30 cpi r25, 0x03 ; 3 + 7c62: 09 f0 breq .+2 ; 0x7c66 + 7c64: db c0 rjmp .+438 ; 0x7e1c + 7c66: 2a c0 rjmp .+84 ; 0x7cbc + 7c68: 98 30 cpi r25, 0x08 ; 8 + 7c6a: 09 f4 brne .+2 ; 0x7c6e + 7c6c: aa c0 rjmp .+340 ; 0x7dc2 + 7c6e: 99 30 cpi r25, 0x09 ; 9 + 7c70: 09 f4 brne .+2 ; 0x7c74 + 7c72: b9 c0 rjmp .+370 ; 0x7de6 + 7c74: 96 30 cpi r25, 0x06 ; 6 + 7c76: 09 f0 breq .+2 ; 0x7c7a + 7c78: d1 c0 rjmp .+418 ; 0x7e1c + 7c7a: 83 c0 rjmp .+262 ; 0x7d82 + 7c7c: 80 38 cpi r24, 0x80 ; 128 + { + case REQ_GetStatus: + if ((bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_STANDARD | REQREC_DEVICE)) || + 7c7e: 99 f0 breq .+38 ; 0x7ca6 + 7c80: 82 38 cpi r24, 0x82 ; 130 + 7c82: 09 f0 breq .+2 ; 0x7c86 + 7c84: cb c0 rjmp .+406 ; 0x7e1c + 7c86: 80 91 9c 01 lds r24, 0x019C + CurrentStatus |= FEATURE_REMOTE_WAKEUP_ENABLED; + #endif + break; + case (REQDIR_DEVICETOHOST | REQTYPE_STANDARD | REQREC_ENDPOINT): + #if !defined(CONTROL_ONLY_DEVICE) + Endpoint_SelectEndpoint((uint8_t)USB_ControlRequest.wIndex & ENDPOINT_EPNUM_MASK); + 7c8a: 90 91 9d 01 lds r25, 0x019D + 7c8e: 8f 70 andi r24, 0x0F ; 15 + 7c90: 99 27 eor r25, r25 + 7c92: 80 93 e9 00 sts 0x00E9, r24 + */ + static inline void Endpoint_SelectEndpoint(const uint8_t Address) ATTR_ALWAYS_INLINE; + static inline void Endpoint_SelectEndpoint(const uint8_t Address) + { + #if !defined(CONTROL_ONLY_DEVICE) + UENUM = (Address & ENDPOINT_EPNUM_MASK); + 7c96: 90 91 eb 00 lds r25, 0x00EB + * \return Boolean \c true if the currently selected endpoint is stalled, \c false otherwise. + */ + static inline bool Endpoint_IsStalled(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; + static inline bool Endpoint_IsStalled(void) + { + return ((UECONX & (1 << STALLRQ)) ? true : false); + 7c9a: 95 fb bst r25, 5 + 7c9c: 99 27 eor r25, r25 + 7c9e: 90 f9 bld r25, 0 + 7ca0: 10 92 e9 00 sts 0x00E9, r1 + */ + static inline void Endpoint_SelectEndpoint(const uint8_t Address) ATTR_ALWAYS_INLINE; + static inline void Endpoint_SelectEndpoint(const uint8_t Address) + { + #if !defined(CONTROL_ONLY_DEVICE) + UENUM = (Address & ENDPOINT_EPNUM_MASK); + 7ca4: 01 c0 rjmp .+2 ; 0x7ca8 + 7ca6: 90 e0 ldi r25, 0x00 ; 0 + Endpoint_ClearOUT(); +} + +static void USB_Device_GetStatus(void) +{ + uint8_t CurrentStatus = 0; + 7ca8: 80 91 e8 00 lds r24, 0x00E8 + * \note This is not applicable for non CONTROL type endpoints. + */ + static inline void Endpoint_ClearSETUP(void) ATTR_ALWAYS_INLINE; + static inline void Endpoint_ClearSETUP(void) + { + UEINTX &= ~(1 << RXSTPI); + 7cac: 87 7f andi r24, 0xF7 ; 247 + 7cae: 80 93 e8 00 sts 0x00E8, r24 + 7cb2: 90 93 f1 00 sts 0x00F1, r25 + * \param[in] Data Data to write to the currently selected endpoint's FIFO buffer. + */ + static inline void Endpoint_Write_16_LE(const uint16_t Data) ATTR_ALWAYS_INLINE; + static inline void Endpoint_Write_16_LE(const uint16_t Data) + { + UEDATX = (Data & 0xFF); + 7cb6: 10 92 f1 00 sts 0x00F1, r1 + UEDATX = (Data >> 8); + 7cba: 8e c0 rjmp .+284 ; 0x7dd8 + 7cbc: 88 23 and r24, r24 + } + + break; + case REQ_ClearFeature: + case REQ_SetFeature: + if ((bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_STANDARD | REQREC_DEVICE)) || + 7cbe: 19 f0 breq .+6 ; 0x7cc6 + 7cc0: 82 30 cpi r24, 0x02 ; 2 + 7cc2: 09 f0 breq .+2 ; 0x7cc6 + 7cc4: ab c0 rjmp .+342 ; 0x7e1c + 7cc6: 8f 71 andi r24, 0x1F ; 31 + Endpoint_ClearStatusStage(); +} + +static void USB_Device_ClearSetFeature(void) +{ + switch (USB_ControlRequest.bmRequestType & CONTROL_REQTYPE_RECIPIENT) + 7cc8: 82 30 cpi r24, 0x02 ; 2 + 7cca: 09 f0 breq .+2 ; 0x7cce + 7ccc: a7 c0 rjmp .+334 ; 0x7e1c + 7cce: 80 91 9a 01 lds r24, 0x019A + + break; + #endif + #if !defined(CONTROL_ONLY_DEVICE) + case REQREC_ENDPOINT: + if ((uint8_t)USB_ControlRequest.wValue == FEATURE_SEL_EndpointHalt) + 7cd2: 81 11 cpse r24, r1 + 7cd4: 2b c0 rjmp .+86 ; 0x7d2c + 7cd6: 80 91 9c 01 lds r24, 0x019C + { + uint8_t EndpointIndex = ((uint8_t)USB_ControlRequest.wIndex & ENDPOINT_EPNUM_MASK); + 7cda: 90 91 9d 01 lds r25, 0x019D + 7cde: 8f 70 andi r24, 0x0F ; 15 + 7ce0: 99 27 eor r25, r25 + 7ce2: 00 97 sbiw r24, 0x00 ; 0 + + if (EndpointIndex == ENDPOINT_CONTROLEP) + 7ce4: 09 f4 brne .+2 ; 0x7ce8 + 7ce6: 9a c0 rjmp .+308 ; 0x7e1c + 7ce8: 80 93 e9 00 sts 0x00E9, r24 + */ + static inline void Endpoint_SelectEndpoint(const uint8_t Address) ATTR_ALWAYS_INLINE; + static inline void Endpoint_SelectEndpoint(const uint8_t Address) + { + #if !defined(CONTROL_ONLY_DEVICE) + UENUM = (Address & ENDPOINT_EPNUM_MASK); + 7cec: 20 91 eb 00 lds r18, 0x00EB + * \return Boolean \c true if the currently selected endpoint is enabled, \c false otherwise. + */ + static inline bool Endpoint_IsEnabled(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; + static inline bool Endpoint_IsEnabled(void) + { + return ((UECONX & (1 << EPEN)) ? true : false); + 7cf0: 20 ff sbrs r18, 0 + return; + + Endpoint_SelectEndpoint(EndpointIndex); + + if (Endpoint_IsEnabled()) + 7cf2: 1c c0 rjmp .+56 ; 0x7d2c + 7cf4: 20 91 99 01 lds r18, 0x0199 + { + if (USB_ControlRequest.bRequest == REQ_SetFeature) + 7cf8: 23 30 cpi r18, 0x03 ; 3 + 7cfa: 21 f4 brne .+8 ; 0x7d04 + 7cfc: 80 91 eb 00 lds r24, 0x00EB + * \ingroup Group_EndpointPacketManagement_AVR8 + */ + static inline void Endpoint_StallTransaction(void) ATTR_ALWAYS_INLINE; + static inline void Endpoint_StallTransaction(void) + { + UECONX |= (1 << STALLRQ); + 7d00: 80 62 ori r24, 0x20 ; 32 + 7d02: 12 c0 rjmp .+36 ; 0x7d28 + 7d04: 90 91 eb 00 lds r25, 0x00EB + * \ingroup Group_EndpointPacketManagement_AVR8 + */ + static inline void Endpoint_ClearStall(void) ATTR_ALWAYS_INLINE; + static inline void Endpoint_ClearStall(void) + { + UECONX |= (1 << STALLRQC); + 7d08: 90 61 ori r25, 0x10 ; 16 + 7d0a: 90 93 eb 00 sts 0x00EB, r25 + 7d0e: 21 e0 ldi r18, 0x01 ; 1 + * \param[in] Address Endpoint address whose FIFO buffers are to be reset. + */ + static inline void Endpoint_ResetEndpoint(const uint8_t Address) ATTR_ALWAYS_INLINE; + static inline void Endpoint_ResetEndpoint(const uint8_t Address) + { + UERST = (1 << (Address & ENDPOINT_EPNUM_MASK)); + 7d10: 30 e0 ldi r19, 0x00 ; 0 + 7d12: 01 c0 rjmp .+2 ; 0x7d16 + 7d14: 22 0f add r18, r18 + 7d16: 8a 95 dec r24 + 7d18: ea f7 brpl .-6 ; 0x7d14 + 7d1a: 20 93 ea 00 sts 0x00EA, r18 + 7d1e: 10 92 ea 00 sts 0x00EA, r1 + UERST = 0; + 7d22: 80 91 eb 00 lds r24, 0x00EB + + /** Resets the data toggle of the currently selected endpoint. */ + static inline void Endpoint_ResetDataToggle(void) ATTR_ALWAYS_INLINE; + static inline void Endpoint_ResetDataToggle(void) + { + UECONX |= (1 << RSTDT); + 7d26: 88 60 ori r24, 0x08 ; 8 + 7d28: 80 93 eb 00 sts 0x00EB, r24 + 7d2c: 10 92 e9 00 sts 0x00E9, r1 + */ + static inline void Endpoint_SelectEndpoint(const uint8_t Address) ATTR_ALWAYS_INLINE; + static inline void Endpoint_SelectEndpoint(const uint8_t Address) + { + #if !defined(CONTROL_ONLY_DEVICE) + UENUM = (Address & ENDPOINT_EPNUM_MASK); + 7d30: 80 91 e8 00 lds r24, 0x00E8 + * \note This is not applicable for non CONTROL type endpoints. + */ + static inline void Endpoint_ClearSETUP(void) ATTR_ALWAYS_INLINE; + static inline void Endpoint_ClearSETUP(void) + { + UEINTX &= ~(1 << RXSTPI); + 7d34: 87 7f andi r24, 0xF7 ; 247 + 7d36: 53 c0 rjmp .+166 ; 0x7dde + 7d38: 81 11 cpse r24, r1 + USB_Device_ClearSetFeature(); + } + + break; + case REQ_SetAddress: + if (bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_STANDARD | REQREC_DEVICE)) + 7d3a: 70 c0 rjmp .+224 ; 0x7e1c + 7d3c: 80 91 9a 01 lds r24, 0x019A + } +} + +static void USB_Device_SetAddress(void) +{ + uint8_t DeviceAddress = (USB_ControlRequest.wValue & 0x7F); + 7d40: 90 91 9b 01 lds r25, 0x019B + 7d44: 8f 77 andi r24, 0x7F ; 127 + 7d46: 99 27 eor r25, r25 + 7d48: 18 2f mov r17, r24 + 7d4a: 90 91 e3 00 lds r25, 0x00E3 + #endif + + static inline void USB_Device_SetDeviceAddress(const uint8_t Address) ATTR_ALWAYS_INLINE; + static inline void USB_Device_SetDeviceAddress(const uint8_t Address) + { + UDADDR = (UDADDR & (1 << ADDEN)) | (Address & 0x7F); + 7d4e: 90 78 andi r25, 0x80 ; 128 + 7d50: 98 2b or r25, r24 + 7d52: 90 93 e3 00 sts 0x00E3, r25 + 7d56: 80 91 e8 00 lds r24, 0x00E8 + 7d5a: 87 7f andi r24, 0xF7 ; 247 + 7d5c: 80 93 e8 00 sts 0x00E8, r24 + 7d60: 36 de rcall .-916 ; 0x79ce + + USB_Device_SetDeviceAddress(DeviceAddress); + + Endpoint_ClearSETUP(); + + Endpoint_ClearStatusStage(); + 7d62: 80 91 e8 00 lds r24, 0x00E8 + * \return Boolean \c true if the current endpoint is ready for an IN packet, \c false otherwise. + */ + static inline bool Endpoint_IsINReady(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; + static inline bool Endpoint_IsINReady(void) + { + return ((UEINTX & (1 << TXINI)) ? true : false); + 7d66: 80 ff sbrs r24, 0 + 7d68: fc cf rjmp .-8 ; 0x7d62 + + while (!(Endpoint_IsINReady())); + 7d6a: 80 91 e3 00 lds r24, 0x00E3 + static inline void USB_Device_EnableDeviceAddress(const uint8_t Address) ATTR_ALWAYS_INLINE; + static inline void USB_Device_EnableDeviceAddress(const uint8_t Address) + { + (void)Address; + + UDADDR |= (1 << ADDEN); + 7d6e: 80 68 ori r24, 0x80 ; 128 + 7d70: 80 93 e3 00 sts 0x00E3, r24 + 7d74: 11 23 and r17, r17 + 7d76: 11 f0 breq .+4 ; 0x7d7c + + USB_Device_EnableDeviceAddress(DeviceAddress); + + USB_DeviceState = (DeviceAddress) ? DEVICE_STATE_Addressed : DEVICE_STATE_Default; + 7d78: 83 e0 ldi r24, 0x03 ; 3 + 7d7a: 01 c0 rjmp .+2 ; 0x7d7e + 7d7c: 82 e0 ldi r24, 0x02 ; 2 + 7d7e: 8e bb out 0x1e, r24 ; 30 + 7d80: 4d c0 rjmp .+154 ; 0x7e1c + 7d82: 80 58 subi r24, 0x80 ; 128 + 7d84: 82 30 cpi r24, 0x02 ; 2 + if (bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_STANDARD | REQREC_DEVICE)) + USB_Device_SetAddress(); + + break; + case REQ_GetDescriptor: + if ((bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_STANDARD | REQREC_DEVICE)) || + 7d86: 08 f0 brcs .+2 ; 0x7d8a + 7d88: 49 c0 rjmp .+146 ; 0x7e1c + 7d8a: ae 01 movw r20, r28 + 7d8c: 4f 5f subi r20, 0xFF ; 255 + USB_Device_GetInternalSerialDescriptor(); + return; + } + #endif + + if ((DescriptorSize = CALLBACK_USB_GetDescriptor(USB_ControlRequest.wValue, USB_ControlRequest.wIndex, + 7d8e: 5f 4f sbci r21, 0xFF ; 255 + 7d90: 60 91 9c 01 lds r22, 0x019C + 7d94: 80 91 9a 01 lds r24, 0x019A + 7d98: 90 91 9b 01 lds r25, 0x019B + 7d9c: d7 dc rcall .-1618 ; 0x774c + 7d9e: 00 97 sbiw r24, 0x00 ; 0 + 7da0: 09 f4 brne .+2 ; 0x7da4 + 7da2: 3c c0 rjmp .+120 ; 0x7e1c + 7da4: 20 91 e8 00 lds r18, 0x00E8 + 7da8: 27 7f andi r18, 0xF7 ; 247 + * \note This is not applicable for non CONTROL type endpoints. + */ + static inline void Endpoint_ClearSETUP(void) ATTR_ALWAYS_INLINE; + static inline void Endpoint_ClearSETUP(void) + { + UEINTX &= ~(1 << RXSTPI); + 7daa: 20 93 e8 00 sts 0x00E8, r18 + 7dae: bc 01 movw r22, r24 + 7db0: 89 81 ldd r24, Y+1 ; 0x01 + 7db2: 9a 81 ldd r25, Y+2 ; 0x02 + } + + Endpoint_ClearSETUP(); + + #if defined(USE_RAM_DESCRIPTORS) || !defined(ARCH_HAS_MULTI_ADDRESS_SPACE) + Endpoint_Write_Control_Stream_LE(DescriptorPointer, DescriptorSize); + 7db4: 52 dd rcall .-1372 ; 0x785a + 7db6: 80 91 e8 00 lds r24, 0x00E8 + 7dba: 8b 77 andi r24, 0x7B ; 123 + 7dbc: 80 93 e8 00 sts 0x00E8, r24 + */ + static inline void Endpoint_ClearOUT(void) ATTR_ALWAYS_INLINE; + static inline void Endpoint_ClearOUT(void) + { + #if !defined(CONTROL_ONLY_DEVICE) + UEINTX &= ~((1 << RXOUTI) | (1 << FIFOCON)); + 7dc0: 2d c0 rjmp .+90 ; 0x7e1c + 7dc2: 80 38 cpi r24, 0x80 ; 128 + 7dc4: 59 f5 brne .+86 ; 0x7e1c + 7dc6: 80 91 e8 00 lds r24, 0x00E8 + USB_Device_GetDescriptor(); + } + + break; + case REQ_GetConfiguration: + if (bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_STANDARD | REQREC_DEVICE)) + 7dca: 87 7f andi r24, 0xF7 ; 247 + 7dcc: 80 93 e8 00 sts 0x00E8, r24 + * \note This is not applicable for non CONTROL type endpoints. + */ + static inline void Endpoint_ClearSETUP(void) ATTR_ALWAYS_INLINE; + static inline void Endpoint_ClearSETUP(void) + { + UEINTX &= ~(1 << RXSTPI); + 7dd0: 80 91 96 01 lds r24, 0x0196 + 7dd4: 80 93 f1 00 sts 0x00F1, r24 + +static void USB_Device_GetConfiguration(void) +{ + Endpoint_ClearSETUP(); + + Endpoint_Write_8(USB_Device_ConfigurationNumber); + 7dd8: 80 91 e8 00 lds r24, 0x00E8 + * \param[in] Data Data to write into the the currently selected endpoint's FIFO buffer. + */ + static inline void Endpoint_Write_8(const uint8_t Data) ATTR_ALWAYS_INLINE; + static inline void Endpoint_Write_8(const uint8_t Data) + { + UEDATX = Data; + 7ddc: 8e 77 andi r24, 0x7E ; 126 + 7dde: 80 93 e8 00 sts 0x00E8, r24 + */ + static inline void Endpoint_ClearIN(void) ATTR_ALWAYS_INLINE; + static inline void Endpoint_ClearIN(void) + { + #if !defined(CONTROL_ONLY_DEVICE) + UEINTX &= ~((1 << TXINI) | (1 << FIFOCON)); + 7de2: f5 dd rcall .-1046 ; 0x79ce + 7de4: 1b c0 rjmp .+54 ; 0x7e1c + 7de6: 81 11 cpse r24, r1 + 7de8: 19 c0 rjmp .+50 ; 0x7e1c + Endpoint_ClearIN(); + + Endpoint_ClearStatusStage(); + 7dea: 90 91 9a 01 lds r25, 0x019A + 7dee: 92 30 cpi r25, 0x02 ; 2 + if (bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_STANDARD | REQREC_DEVICE)) + USB_Device_GetConfiguration(); + + break; + case REQ_SetConfiguration: + if (bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_STANDARD | REQREC_DEVICE)) + 7df0: a8 f4 brcc .+42 ; 0x7e1c + 7df2: 80 91 e8 00 lds r24, 0x00E8 +} + +static void USB_Device_SetConfiguration(void) +{ + #if defined(FIXED_NUM_CONFIGURATIONS) + if ((uint8_t)USB_ControlRequest.wValue > FIXED_NUM_CONFIGURATIONS) + 7df6: 87 7f andi r24, 0xF7 ; 247 + 7df8: 80 93 e8 00 sts 0x00E8, r24 + * \note This is not applicable for non CONTROL type endpoints. + */ + static inline void Endpoint_ClearSETUP(void) ATTR_ALWAYS_INLINE; + static inline void Endpoint_ClearSETUP(void) + { + UEINTX &= ~(1 << RXSTPI); + 7dfc: 90 93 96 01 sts 0x0196, r25 + 7e00: e6 dd rcall .-1076 ; 0x79ce + 7e02: 80 91 96 01 lds r24, 0x0196 + #endif + #endif + + Endpoint_ClearSETUP(); + + USB_Device_ConfigurationNumber = (uint8_t)USB_ControlRequest.wValue; + 7e06: 81 11 cpse r24, r1 + 7e08: 04 c0 rjmp .+8 ; 0x7e12 + + Endpoint_ClearStatusStage(); + 7e0a: 80 91 e3 00 lds r24, 0x00E3 + + if (USB_Device_ConfigurationNumber) + 7e0e: 87 ff sbrs r24, 7 + 7e10: 02 c0 rjmp .+4 ; 0x7e16 + 7e12: 84 e0 ldi r24, 0x04 ; 4 + 7e14: 01 c0 rjmp .+2 ; 0x7e18 + } + + static inline bool USB_Device_IsAddressSet(void) ATTR_ALWAYS_INLINE ATTR_WARN_UNUSED_RESULT; + static inline bool USB_Device_IsAddressSet(void) + { + return (UDADDR & (1 << ADDEN)); + 7e16: 81 e0 ldi r24, 0x01 ; 1 + 7e18: 8e bb out 0x1e, r24 ; 30 + USB_DeviceState = DEVICE_STATE_Configured; + else + USB_DeviceState = (USB_Device_IsAddressSet()) ? DEVICE_STATE_Configured : DEVICE_STATE_Powered; + 7e1a: 4d dc rcall .-1894 ; 0x76b6 + 7e1c: 80 91 e8 00 lds r24, 0x00E8 + 7e20: 83 ff sbrs r24, 3 + 7e22: 0a c0 rjmp .+20 ; 0x7e38 + 7e24: 80 91 e8 00 lds r24, 0x00E8 + + EVENT_USB_Device_ConfigurationChanged(); + 7e28: 87 7f andi r24, 0xF7 ; 247 + * \return Boolean \c true if the selected endpoint has received a SETUP packet, \c false otherwise. + */ + static inline bool Endpoint_IsSETUPReceived(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; + static inline bool Endpoint_IsSETUPReceived(void) + { + return ((UEINTX & (1 << RXSTPI)) ? true : false); + 7e2a: 80 93 e8 00 sts 0x00E8, r24 + default: + break; + } + } + + if (Endpoint_IsSETUPReceived()) + 7e2e: 80 91 eb 00 lds r24, 0x00EB + * \note This is not applicable for non CONTROL type endpoints. + */ + static inline void Endpoint_ClearSETUP(void) ATTR_ALWAYS_INLINE; + static inline void Endpoint_ClearSETUP(void) + { + UEINTX &= ~(1 << RXSTPI); + 7e32: 80 62 ori r24, 0x20 ; 32 + 7e34: 80 93 eb 00 sts 0x00EB, r24 + 7e38: 0f 90 pop r0 + 7e3a: 0f 90 pop r0 + * \ingroup Group_EndpointPacketManagement_AVR8 + */ + static inline void Endpoint_StallTransaction(void) ATTR_ALWAYS_INLINE; + static inline void Endpoint_StallTransaction(void) + { + UECONX |= (1 << STALLRQ); + 7e3c: df 91 pop r29 + 7e3e: cf 91 pop r28 + 7e40: 1f 91 pop r17 + 7e42: 08 95 ret + +00007e44 : +#define __INCLUDE_FROM_EVENTS_C +#define __INCLUDE_FROM_USB_DRIVER +#include "Events.h" + +void USB_Event_Stub(void) +{ + 7e44: 08 95 ret + +00007e46 : +#if defined(USB_CAN_BE_DEVICE) && !defined(DEVICE_STATE_AS_GPIOR) +volatile uint8_t USB_DeviceState; +#endif + +void USB_USBTask(void) +{ + 7e46: cf 93 push r28 +} + +#if defined(USB_CAN_BE_DEVICE) +static void USB_DeviceTask(void) +{ + if (USB_DeviceState == DEVICE_STATE_Unattached) + 7e48: 8e b3 in r24, 0x1e ; 30 + 7e4a: 88 23 and r24, r24 + 7e4c: a9 f0 breq .+42 ; 0x7e78 + */ + static inline uint8_t Endpoint_GetCurrentEndpoint(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; + static inline uint8_t Endpoint_GetCurrentEndpoint(void) + { + #if !defined(CONTROL_ONLY_DEVICE) + return ((UENUM & ENDPOINT_EPNUM_MASK) | Endpoint_GetEndpointDirection()); + 7e4e: 80 91 e9 00 lds r24, 0x00E9 + 7e52: 8f 70 andi r24, 0x0F ; 15 + * \return The currently selected endpoint's direction, as a \c ENDPOINT_DIR_* mask. + */ + static inline uint8_t Endpoint_GetEndpointDirection(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; + static inline uint8_t Endpoint_GetEndpointDirection(void) + { + return (UECFG0X & (1 << EPDIR)) ? ENDPOINT_DIR_IN : ENDPOINT_DIR_OUT; + 7e54: 90 91 ec 00 lds r25, 0x00EC + 7e58: 90 ff sbrs r25, 0 + 7e5a: 02 c0 rjmp .+4 ; 0x7e60 + 7e5c: 90 e8 ldi r25, 0x80 ; 128 + 7e5e: 01 c0 rjmp .+2 ; 0x7e62 + 7e60: 90 e0 ldi r25, 0x00 ; 0 + */ + static inline uint8_t Endpoint_GetCurrentEndpoint(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; + static inline uint8_t Endpoint_GetCurrentEndpoint(void) + { + #if !defined(CONTROL_ONLY_DEVICE) + return ((UENUM & ENDPOINT_EPNUM_MASK) | Endpoint_GetEndpointDirection()); + 7e62: c9 2f mov r28, r25 + 7e64: c8 2b or r28, r24 + */ + static inline void Endpoint_SelectEndpoint(const uint8_t Address) ATTR_ALWAYS_INLINE; + static inline void Endpoint_SelectEndpoint(const uint8_t Address) + { + #if !defined(CONTROL_ONLY_DEVICE) + UENUM = (Address & ENDPOINT_EPNUM_MASK); + 7e66: 10 92 e9 00 sts 0x00E9, r1 + * \return Boolean \c true if the selected endpoint has received a SETUP packet, \c false otherwise. + */ + static inline bool Endpoint_IsSETUPReceived(void) ATTR_WARN_UNUSED_RESULT ATTR_ALWAYS_INLINE; + static inline bool Endpoint_IsSETUPReceived(void) + { + return ((UEINTX & (1 << RXSTPI)) ? true : false); + 7e6a: 80 91 e8 00 lds r24, 0x00E8 + + uint8_t PrevEndpoint = Endpoint_GetCurrentEndpoint(); + + Endpoint_SelectEndpoint(ENDPOINT_CONTROLEP); + + if (Endpoint_IsSETUPReceived()) + 7e6e: 83 fd sbrc r24, 3 + USB_Device_ProcessControlRequest(); + 7e70: d8 de rcall .-592 ; 0x7c22 + 7e72: cf 70 andi r28, 0x0F ; 15 + */ + static inline void Endpoint_SelectEndpoint(const uint8_t Address) ATTR_ALWAYS_INLINE; + static inline void Endpoint_SelectEndpoint(const uint8_t Address) + { + #if !defined(CONTROL_ONLY_DEVICE) + UENUM = (Address & ENDPOINT_EPNUM_MASK); + 7e74: c0 93 e9 00 sts 0x00E9, r28 + 7e78: cf 91 pop r28 + #elif defined(USB_CAN_BE_HOST) + USB_HostTask(); + #elif defined(USB_CAN_BE_DEVICE) + USB_DeviceTask(); + #endif +} + 7e7a: 08 95 ret + +00007e7c <__eerd_byte_m32u4>: + 7e7c: f9 99 sbic 0x1f, 1 ; 31 + 7e7e: fe cf rjmp .-4 ; 0x7e7c <__eerd_byte_m32u4> + 7e80: 92 bd out 0x22, r25 ; 34 + 7e82: 81 bd out 0x21, r24 ; 33 + 7e84: f8 9a sbi 0x1f, 0 ; 31 + 7e86: 99 27 eor r25, r25 + 7e88: 80 b5 in r24, 0x20 ; 32 + 7e8a: 08 95 ret + +00007e8c <__eewr_byte_m32u4>: + 7e8c: 26 2f mov r18, r22 + +00007e8e <__eewr_r18_m32u4>: + 7e8e: f9 99 sbic 0x1f, 1 ; 31 + 7e90: fe cf rjmp .-4 ; 0x7e8e <__eewr_r18_m32u4> + 7e92: 1f ba out 0x1f, r1 ; 31 + 7e94: 92 bd out 0x22, r25 ; 34 + 7e96: 81 bd out 0x21, r24 ; 33 + 7e98: 20 bd out 0x20, r18 ; 32 + 7e9a: 0f b6 in r0, 0x3f ; 63 + 7e9c: f8 94 cli + 7e9e: fa 9a sbi 0x1f, 2 ; 31 + 7ea0: f9 9a sbi 0x1f, 1 ; 31 + 7ea2: 0f be out 0x3f, r0 ; 63 + 7ea4: 01 96 adiw r24, 0x01 ; 1 + 7ea6: 08 95 ret + +00007ea8 <_exit>: + 7ea8: f8 94 cli + +00007eaa <__stop_program>: + 7eaa: ff cf rjmp .-2 ; 0x7eaa <__stop_program> + +Disassembly of section .apitable_trampolines: + +00007fa0 : +.section .apitable_trampolines, "ax" +.global BootloaderAPI_Trampolines +BootloaderAPI_Trampolines: + + BootloaderAPI_ErasePage_Trampoline: + jmp BootloaderAPI_ErasePage + 7fa0: 0a cc rjmp .-2028 ; 0x77b6 + +00007fa2 : + 7fa2: 1b cc rjmp .-1994 ; 0x77da + +00007fa4 : + BootloaderAPI_WritePage_Trampoline: + jmp BootloaderAPI_WritePage + 7fa4: 2c cc rjmp .-1960 ; 0x77fe + +00007fa6 : + 7fa6: 38 cc rjmp .-1936 ; 0x7818 + +00007fa8 : + BootloaderAPI_FillWord_Trampoline: + jmp BootloaderAPI_FillWord + 7fa8: 3d cc rjmp .-1926 ; 0x7824 + +00007faa : + 7faa: 42 cc rjmp .-1916 ; 0x7830 + +00007fac : + BootloaderAPI_ReadSignature_Trampoline: + jmp BootloaderAPI_ReadSignature + 7fac: 48 cc rjmp .-1904 ; 0x783e + +00007fae : + 7fae: 08 95 ret + +00007fb0 : + BootloaderAPI_ReadFuse_Trampoline: + jmp BootloaderAPI_ReadFuse + 7fb0: 08 95 ret + +00007fb2 : + 7fb2: 08 95 ret + +00007fb4 : + BootloaderAPI_ReadLock_Trampoline: + jmp BootloaderAPI_ReadLock + 7fb4: 08 95 ret + +00007fb6 : + 7fb6: 08 95 ret + +Disassembly of section .apitable_jumptable: + +00007fe0 : +; API function jump table +.section .apitable_jumptable, "ax" +.global BootloaderAPI_JumpTable +BootloaderAPI_JumpTable: + + rjmp BootloaderAPI_ErasePage_Trampoline + 7fe0: df cf rjmp .-66 ; 0x7fa0 + rjmp BootloaderAPI_WritePage_Trampoline + 7fe2: df cf rjmp .-66 ; 0x7fa2 + rjmp BootloaderAPI_FillWord_Trampoline + 7fe4: df cf rjmp .-66 ; 0x7fa4 + rjmp BootloaderAPI_ReadSignature_Trampoline + 7fe6: df cf rjmp .-66 ; 0x7fa6 + rjmp BootloaderAPI_ReadFuse_Trampoline + 7fe8: df cf rjmp .-66 ; 0x7fa8 + rjmp BootloaderAPI_ReadLock_Trampoline + 7fea: df cf rjmp .-66 ; 0x7faa + rjmp BootloaderAPI_WriteLock_Trampoline + 7fec: df cf rjmp .-66 ; 0x7fac + rjmp BootloaderAPI_UNUSED1 ; UNUSED ENTRY 1 + 7fee: df cf rjmp .-66 ; 0x7fae + rjmp BootloaderAPI_UNUSED2 ; UNUSED ENTRY 2 + 7ff0: df cf rjmp .-66 ; 0x7fb0 + rjmp BootloaderAPI_UNUSED3 ; UNUSED ENTRY 3 + 7ff2: df cf rjmp .-66 ; 0x7fb2 + rjmp BootloaderAPI_UNUSED4 ; UNUSED ENTRY 4 + 7ff4: df cf rjmp .-66 ; 0x7fb4 + rjmp BootloaderAPI_UNUSED5 ; UNUSED ENTRY 5 + 7ff6: df cf rjmp .-66 ; 0x7fb6 + +Disassembly of section .apitable_signatures: + +00007ff8 : + 7ff8: 00 70 andi r16, 0x00 ; 0 + 7ffa: 00 00 nop + 7ffc: 00 df rcall .-512 ; 0x7dfe + 7ffe: fb dc rcall .-1546 ; 0x79f6 diff --git a/avr/bootloaders/CDC/BootloaderCDC.map b/avr/bootloaders/CDC/BootloaderCDC.map new file mode 100644 index 0000000..b62a2c5 --- /dev/null +++ b/avr/bootloaders/CDC/BootloaderCDC.map @@ -0,0 +1,1071 @@ +Archive member included because of file (symbol) + +/usr/lib/gcc/avr/4.7.2/avr5/libgcc.a(_exit.o) + /usr/lib/gcc/avr/4.7.2/../../../avr/lib/avr5/crtm32u4.o (exit) +/usr/lib/gcc/avr/4.7.2/avr5/libgcc.a(_copy_data.o) + BootloaderCDC.o (__do_copy_data) +/usr/lib/gcc/avr/4.7.2/avr5/libgcc.a(_clear_bss.o) + BootloaderCDC.o (__do_clear_bss) +/usr/lib/gcc/avr/4.7.2/../../../avr/lib/avr5/libc.a(eerd_byte_atmega32u4.o) + BootloaderCDC.o (__eerd_byte_m32u4) +/usr/lib/gcc/avr/4.7.2/../../../avr/lib/avr5/libc.a(eeupd_byte_atmega32u4.o) + ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o (__eeupd_byte_m32u4) +/usr/lib/gcc/avr/4.7.2/../../../avr/lib/avr5/libc.a(eewr_byte_atmega32u4.o) + BootloaderCDC.o (__eewr_byte_m32u4) + +Allocating common symbols +Common symbol size file + +USB_IsInitialized 0x1 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/USBTask.o +USB_Device_ConfigurationNumber + 0x1 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/DeviceStandardReq.o +USB_ControlRequest 0x8 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/USBTask.o + +Discarded input sections + + .data 0x00000000 0x0 /usr/lib/gcc/avr/4.7.2/../../../avr/lib/avr5/crtm32u4.o + .bss 0x00000000 0x0 /usr/lib/gcc/avr/4.7.2/../../../avr/lib/avr5/crtm32u4.o + .text 0x00000000 0x0 BootloaderCDC.o + .text 0x00000000 0x0 Descriptors.o + .data 0x00000000 0x0 Descriptors.o + .bss 0x00000000 0x0 Descriptors.o + .text 0x00000000 0x0 BootloaderAPI.o + .data 0x00000000 0x0 BootloaderAPI.o + .bss 0x00000000 0x0 BootloaderAPI.o + .text 0x00000000 0x0 BootloaderAPITable.o + .data 0x00000000 0x0 BootloaderAPITable.o + .bss 0x00000000 0x0 BootloaderAPITable.o + .text 0x00000000 0x0 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Common/HIDParser.o + .data 0x00000000 0x0 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Common/HIDParser.o + .bss 0x00000000 0x0 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Common/HIDParser.o + .text.USB_ProcessHIDReport + 0x00000000 0x6d0 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Common/HIDParser.o + .text.USB_GetHIDReportItemInfo + 0x00000000 0xbc ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Common/HIDParser.o + .text.USB_SetHIDReportItemInfo + 0x00000000 0xec ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Common/HIDParser.o + .text.USB_GetHIDReportSize + 0x00000000 0x60 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Common/HIDParser.o + .text 0x00000000 0x0 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/Device_AVR8.o + .data 0x00000000 0x0 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/Device_AVR8.o + .bss 0x00000000 0x0 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/Device_AVR8.o + .text.USB_Device_SendRemoteWakeup + 0x00000000 0x2c ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/Device_AVR8.o + .text 0x00000000 0x0 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o + .data 0x00000000 0x0 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o + .bss 0x00000000 0x0 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o + .text.Endpoint_Discard_Stream + 0x00000000 0x8a ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o + .text.Endpoint_Null_Stream + 0x00000000 0x8a ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o + .text.Endpoint_Write_Stream_LE + 0x00000000 0xa2 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o + .text.Endpoint_Write_Stream_BE + 0x00000000 0xb0 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o + .text.Endpoint_Read_Stream_LE + 0x00000000 0xa2 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o + .text.Endpoint_Read_Stream_BE + 0x00000000 0xb0 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o + .text.Endpoint_Write_PStream_LE + 0x00000000 0xa6 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o + .text.Endpoint_Write_PStream_BE + 0x00000000 0xb2 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o + .text.Endpoint_Write_EStream_LE + 0x00000000 0xa8 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o + .text.Endpoint_Write_EStream_BE + 0x00000000 0xb4 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o + .text.Endpoint_Read_EStream_LE + 0x00000000 0xac ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o + .text.Endpoint_Read_EStream_BE + 0x00000000 0xb4 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o + .text.Endpoint_Write_Control_Stream_BE + 0x00000000 0xca ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o + .text.Endpoint_Read_Control_Stream_BE + 0x00000000 0x82 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o + .text.Endpoint_Write_Control_PStream_LE + 0x00000000 0xc4 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o + .text.Endpoint_Write_Control_PStream_BE + 0x00000000 0xca ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o + .text.Endpoint_Write_Control_EStream_LE + 0x00000000 0xf6 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o + .text.Endpoint_Write_Control_EStream_BE + 0x00000000 0x106 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o + .text.Endpoint_Read_Control_EStream_LE + 0x00000000 0xa0 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o + .text.Endpoint_Read_Control_EStream_BE + 0x00000000 0x9e ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o + .text 0x00000000 0x0 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o + .data 0x00000000 0x0 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o + .bss 0x00000000 0x0 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o + .text.Endpoint_ConfigureEndpointTable + 0x00000000 0x80 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o + .text.Endpoint_ClearEndpoints + 0x00000000 0x28 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o + .text.Endpoint_WaitUntilReady + 0x00000000 0x62 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o + .text 0x00000000 0x0 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/Host_AVR8.o + .data 0x00000000 0x0 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/Host_AVR8.o + .bss 0x00000000 0x0 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/Host_AVR8.o + .text 0x00000000 0x0 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/PipeStream_AVR8.o + .data 0x00000000 0x0 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/PipeStream_AVR8.o + .bss 0x00000000 0x0 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/PipeStream_AVR8.o + .text 0x00000000 0x0 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/Pipe_AVR8.o + .data 0x00000000 0x0 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/Pipe_AVR8.o + .bss 0x00000000 0x0 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/Pipe_AVR8.o + .text 0x00000000 0x0 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o + .data 0x00000000 0x0 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o + .bss 0x00000000 0x0 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o + .text.USB_Disable + 0x00000000 0x34 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o + .text 0x00000000 0x0 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o + .data 0x00000000 0x0 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o + .bss 0x00000000 0x0 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o + .text 0x00000000 0x0 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/ConfigDescriptors.o + .data 0x00000000 0x0 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/ConfigDescriptors.o + .bss 0x00000000 0x0 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/ConfigDescriptors.o + .text.USB_GetNextDescriptor + 0x00000000 0x38 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/ConfigDescriptors.o + .text.USB_GetNextDescriptorOfType + 0x00000000 0x4a ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/ConfigDescriptors.o + .text.USB_GetNextDescriptorOfTypeBefore + 0x00000000 0x5c ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/ConfigDescriptors.o + .text.USB_GetNextDescriptorOfTypeAfter + 0x00000000 0x3e ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/ConfigDescriptors.o + .text.USB_GetNextDescriptorComp + 0x00000000 0x68 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/ConfigDescriptors.o + .text 0x00000000 0x0 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/DeviceStandardReq.o + .data 0x00000000 0x0 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/DeviceStandardReq.o + .bss 0x00000000 0x0 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/DeviceStandardReq.o + .text 0x00000000 0x0 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/Events.o + .data 0x00000000 0x0 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/Events.o + .bss 0x00000000 0x0 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/Events.o + .text 0x00000000 0x0 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/HostStandardReq.o + .data 0x00000000 0x0 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/HostStandardReq.o + .bss 0x00000000 0x0 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/HostStandardReq.o + .text 0x00000000 0x0 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/USBTask.o + .data 0x00000000 0x0 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/USBTask.o + .bss 0x00000000 0x0 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/USBTask.o + .text 0x00000000 0x0 /usr/lib/gcc/avr/4.7.2/avr5/libgcc.a(_exit.o) + .data 0x00000000 0x0 /usr/lib/gcc/avr/4.7.2/avr5/libgcc.a(_exit.o) + .bss 0x00000000 0x0 /usr/lib/gcc/avr/4.7.2/avr5/libgcc.a(_exit.o) + .text.libgcc.mul + 0x00000000 0x0 /usr/lib/gcc/avr/4.7.2/avr5/libgcc.a(_exit.o) + .text.libgcc.div + 0x00000000 0x0 /usr/lib/gcc/avr/4.7.2/avr5/libgcc.a(_exit.o) + .text.libgcc 0x00000000 0x0 /usr/lib/gcc/avr/4.7.2/avr5/libgcc.a(_exit.o) + .text.libgcc.prologue + 0x00000000 0x0 /usr/lib/gcc/avr/4.7.2/avr5/libgcc.a(_exit.o) + .text.libgcc.builtins + 0x00000000 0x0 /usr/lib/gcc/avr/4.7.2/avr5/libgcc.a(_exit.o) + .text.libgcc.fmul + 0x00000000 0x0 /usr/lib/gcc/avr/4.7.2/avr5/libgcc.a(_exit.o) + .text 0x00000000 0x0 /usr/lib/gcc/avr/4.7.2/avr5/libgcc.a(_copy_data.o) + .data 0x00000000 0x0 /usr/lib/gcc/avr/4.7.2/avr5/libgcc.a(_copy_data.o) + .bss 0x00000000 0x0 /usr/lib/gcc/avr/4.7.2/avr5/libgcc.a(_copy_data.o) + .text.libgcc.mul + 0x00000000 0x0 /usr/lib/gcc/avr/4.7.2/avr5/libgcc.a(_copy_data.o) + .text.libgcc.div + 0x00000000 0x0 /usr/lib/gcc/avr/4.7.2/avr5/libgcc.a(_copy_data.o) + .text.libgcc 0x00000000 0x0 /usr/lib/gcc/avr/4.7.2/avr5/libgcc.a(_copy_data.o) + .text.libgcc.prologue + 0x00000000 0x0 /usr/lib/gcc/avr/4.7.2/avr5/libgcc.a(_copy_data.o) + .text.libgcc.builtins + 0x00000000 0x0 /usr/lib/gcc/avr/4.7.2/avr5/libgcc.a(_copy_data.o) + .text.libgcc.fmul + 0x00000000 0x0 /usr/lib/gcc/avr/4.7.2/avr5/libgcc.a(_copy_data.o) + .text 0x00000000 0x0 /usr/lib/gcc/avr/4.7.2/avr5/libgcc.a(_clear_bss.o) + .data 0x00000000 0x0 /usr/lib/gcc/avr/4.7.2/avr5/libgcc.a(_clear_bss.o) + .bss 0x00000000 0x0 /usr/lib/gcc/avr/4.7.2/avr5/libgcc.a(_clear_bss.o) + .text.libgcc.mul + 0x00000000 0x0 /usr/lib/gcc/avr/4.7.2/avr5/libgcc.a(_clear_bss.o) + .text.libgcc.div + 0x00000000 0x0 /usr/lib/gcc/avr/4.7.2/avr5/libgcc.a(_clear_bss.o) + .text.libgcc 0x00000000 0x0 /usr/lib/gcc/avr/4.7.2/avr5/libgcc.a(_clear_bss.o) + .text.libgcc.prologue + 0x00000000 0x0 /usr/lib/gcc/avr/4.7.2/avr5/libgcc.a(_clear_bss.o) + .text.libgcc.builtins + 0x00000000 0x0 /usr/lib/gcc/avr/4.7.2/avr5/libgcc.a(_clear_bss.o) + .text.libgcc.fmul + 0x00000000 0x0 /usr/lib/gcc/avr/4.7.2/avr5/libgcc.a(_clear_bss.o) + .text 0x00000000 0x0 /usr/lib/gcc/avr/4.7.2/../../../avr/lib/avr5/libc.a(eerd_byte_atmega32u4.o) + .data 0x00000000 0x0 /usr/lib/gcc/avr/4.7.2/../../../avr/lib/avr5/libc.a(eerd_byte_atmega32u4.o) + .bss 0x00000000 0x0 /usr/lib/gcc/avr/4.7.2/../../../avr/lib/avr5/libc.a(eerd_byte_atmega32u4.o) + .text 0x00000000 0x0 /usr/lib/gcc/avr/4.7.2/../../../avr/lib/avr5/libc.a(eeupd_byte_atmega32u4.o) + .data 0x00000000 0x0 /usr/lib/gcc/avr/4.7.2/../../../avr/lib/avr5/libc.a(eeupd_byte_atmega32u4.o) + .bss 0x00000000 0x0 /usr/lib/gcc/avr/4.7.2/../../../avr/lib/avr5/libc.a(eeupd_byte_atmega32u4.o) + .text.avr-libc + 0x00000000 0x24 /usr/lib/gcc/avr/4.7.2/../../../avr/lib/avr5/libc.a(eeupd_byte_atmega32u4.o) + .text 0x00000000 0x0 /usr/lib/gcc/avr/4.7.2/../../../avr/lib/avr5/libc.a(eewr_byte_atmega32u4.o) + .data 0x00000000 0x0 /usr/lib/gcc/avr/4.7.2/../../../avr/lib/avr5/libc.a(eewr_byte_atmega32u4.o) + .bss 0x00000000 0x0 /usr/lib/gcc/avr/4.7.2/../../../avr/lib/avr5/libc.a(eewr_byte_atmega32u4.o) + +Memory Configuration + +Name Origin Length Attributes +text 0x00000000 0x00020000 xr +data 0x00800060 0x0000ffa0 rw !x +eeprom 0x00810000 0x00010000 rw !x +fuse 0x00820000 0x00000400 rw !x +lock 0x00830000 0x00000400 rw !x +signature 0x00840000 0x00000400 rw !x +*default* 0x00000000 0xffffffff + +Linker script and memory map + +Address of section .data set to 0x800100 +LOAD /usr/lib/gcc/avr/4.7.2/../../../avr/lib/avr5/crtm32u4.o +LOAD BootloaderCDC.o +LOAD Descriptors.o +LOAD BootloaderAPI.o +LOAD BootloaderAPITable.o +LOAD ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Common/HIDParser.o +LOAD ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/Device_AVR8.o +LOAD ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o +LOAD ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o +LOAD ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/Host_AVR8.o +LOAD ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/PipeStream_AVR8.o +LOAD ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/Pipe_AVR8.o +LOAD ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o +LOAD ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o +LOAD ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/ConfigDescriptors.o +LOAD ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/DeviceStandardReq.o +LOAD ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/Events.o +LOAD ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/HostStandardReq.o +LOAD ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/USBTask.o +LOAD /usr/lib/gcc/avr/4.7.2/../../../avr/lib/avr5/libm.a +Address of section .text set to 0x7000 +Address of section .apitable_trampolines set to 0x7fa0 +Address of section .apitable_jumptable set to 0x7fe0 +Address of section .apitable_signatures set to 0x7ff8 +LOAD /usr/lib/gcc/avr/4.7.2/avr5/libgcc.a +LOAD /usr/lib/gcc/avr/4.7.2/../../../avr/lib/avr5/libc.a +LOAD /usr/lib/gcc/avr/4.7.2/avr5/libgcc.a + +.hash + *(.hash) + +.dynsym + *(.dynsym) + +.dynstr + *(.dynstr) + +.gnu.version + *(.gnu.version) + +.gnu.version_d + *(.gnu.version_d) + +.gnu.version_r + *(.gnu.version_r) + +.rel.init + *(.rel.init) + +.rela.init + *(.rela.init) + +.rel.text + *(.rel.text) + *(.rel.text.*) + *(.rel.gnu.linkonce.t*) + +.rela.text + *(.rela.text) + *(.rela.text.*) + *(.rela.gnu.linkonce.t*) + +.rel.fini + *(.rel.fini) + +.rela.fini + *(.rela.fini) + +.rel.rodata + *(.rel.rodata) + *(.rel.rodata.*) + *(.rel.gnu.linkonce.r*) + +.rela.rodata + *(.rela.rodata) + *(.rela.rodata.*) + *(.rela.gnu.linkonce.r*) + +.rel.data + *(.rel.data) + *(.rel.data.*) + *(.rel.gnu.linkonce.d*) + +.rela.data + *(.rela.data) + *(.rela.data.*) + *(.rela.gnu.linkonce.d*) + +.rel.ctors + *(.rel.ctors) + +.rela.ctors + *(.rela.ctors) + +.rel.dtors + *(.rel.dtors) + +.rela.dtors + *(.rela.dtors) + +.rel.got + *(.rel.got) + +.rela.got + *(.rela.got) + +.rel.bss + *(.rel.bss) + +.rela.bss + *(.rela.bss) + +.rel.plt + *(.rel.plt) + +.rela.plt + *(.rela.plt) + +.text 0x00007000 0xeac + *(.vectors) + .vectors 0x00007000 0xac /usr/lib/gcc/avr/4.7.2/../../../avr/lib/avr5/crtm32u4.o + 0x00007000 __vectors + 0x00007000 __vector_default + *(.vectors) + *(.progmem.gcc*) + *(.progmem*) + 0x000070ac . = ALIGN (0x2) + 0x000070ac __trampolines_start = . + *(.trampolines) + .trampolines 0x000070ac 0x0 linker stubs + *(.trampolines*) + 0x000070ac __trampolines_end = . + *(.jumptables) + *(.jumptables*) + *(.lowtext) + *(.lowtext*) + 0x000070ac __ctors_start = . + *(.ctors) + 0x000070ac __ctors_end = . + 0x000070ac __dtors_start = . + *(.dtors) + 0x000070ac __dtors_end = . + SORT(*)(.ctors) + SORT(*)(.dtors) + *(.init0) + .init0 0x000070ac 0x0 /usr/lib/gcc/avr/4.7.2/../../../avr/lib/avr5/crtm32u4.o + 0x000070ac __init + *(.init0) + *(.init1) + *(.init1) + *(.init2) + .init2 0x000070ac 0xc /usr/lib/gcc/avr/4.7.2/../../../avr/lib/avr5/crtm32u4.o + *(.init2) + *(.init3) + .init3 0x000070b8 0x38 BootloaderCDC.o + 0x000070b8 Application_Jump_Check + *(.init3) + *(.init4) + .init4 0x000070f0 0x16 /usr/lib/gcc/avr/4.7.2/avr5/libgcc.a(_copy_data.o) + 0x000070f0 __do_copy_data + .init4 0x00007106 0x10 /usr/lib/gcc/avr/4.7.2/avr5/libgcc.a(_clear_bss.o) + 0x00007106 __do_clear_bss + *(.init4) + *(.init5) + *(.init5) + *(.init6) + *(.init6) + *(.init7) + *(.init7) + *(.init8) + *(.init8) + *(.init9) + .init9 0x00007116 0x4 /usr/lib/gcc/avr/4.7.2/../../../avr/lib/avr5/crtm32u4.o + *(.init9) + *(.text) + .text 0x0000711a 0x2 /usr/lib/gcc/avr/4.7.2/../../../avr/lib/avr5/crtm32u4.o + 0x0000711a __vector_38 + 0x0000711a __vector_22 + 0x0000711a __vector_28 + 0x0000711a __vector_1 + 0x0000711a __vector_32 + 0x0000711a __vector_34 + 0x0000711a __vector_24 + 0x0000711a __vector_12 + 0x0000711a __bad_interrupt + 0x0000711a __vector_6 + 0x0000711a __vector_31 + 0x0000711a __vector_35 + 0x0000711a __vector_39 + 0x0000711a __vector_3 + 0x0000711a __vector_23 + 0x0000711a __vector_30 + 0x0000711a __vector_25 + 0x0000711a __vector_11 + 0x0000711a __vector_13 + 0x0000711a __vector_17 + 0x0000711a __vector_19 + 0x0000711a __vector_7 + 0x0000711a __vector_41 + 0x0000711a __vector_27 + 0x0000711a __vector_5 + 0x0000711a __vector_33 + 0x0000711a __vector_37 + 0x0000711a __vector_4 + 0x0000711a __vector_9 + 0x0000711a __vector_2 + 0x0000711a __vector_21 + 0x0000711a __vector_15 + 0x0000711a __vector_36 + 0x0000711a __vector_29 + 0x0000711a __vector_40 + 0x0000711a __vector_8 + 0x0000711a __vector_26 + 0x0000711a __vector_14 + 0x0000711a __vector_16 + 0x0000711a __vector_18 + 0x0000711a __vector_42 + 0x0000711c . = ALIGN (0x2) + *(.text.*) + .text.FetchNextCommandByte + 0x0000711c 0x34 BootloaderCDC.o + .text.WriteNextResponseByte + 0x00007150 0x32 BootloaderCDC.o + .text.startup.main + 0x00007182 0x512 BootloaderCDC.o + 0x00007182 main + .text.__vector_20 + 0x00007694 0x22 BootloaderCDC.o + 0x00007694 __vector_20 + .text.EVENT_USB_Device_ConfigurationChanged + 0x000076b6 0x18 BootloaderCDC.o + 0x000076b6 EVENT_USB_Device_ConfigurationChanged + .text.EVENT_USB_Device_ControlRequest + 0x000076ce 0x7e BootloaderCDC.o + 0x000076ce EVENT_USB_Device_ControlRequest + .text.CALLBACK_USB_GetDescriptor + 0x0000774c 0x6a Descriptors.o + 0x0000774c CALLBACK_USB_GetDescriptor + .text.BootloaderAPI_ErasePage + 0x000077b6 0x24 BootloaderAPI.o + 0x000077b6 BootloaderAPI_ErasePage + .text.BootloaderAPI_WritePage + 0x000077da 0x24 BootloaderAPI.o + 0x000077da BootloaderAPI_WritePage + .text.BootloaderAPI_FillWord + 0x000077fe 0x1a BootloaderAPI.o + 0x000077fe BootloaderAPI_FillWord + .text.BootloaderAPI_ReadSignature + 0x00007818 0xc BootloaderAPI.o + 0x00007818 BootloaderAPI_ReadSignature + .text.BootloaderAPI_ReadFuse + 0x00007824 0xc BootloaderAPI.o + 0x00007824 BootloaderAPI_ReadFuse + .text.BootloaderAPI_ReadLock + 0x00007830 0xe BootloaderAPI.o + 0x00007830 BootloaderAPI_ReadLock + .text.BootloaderAPI_WriteLock + 0x0000783e 0x1c BootloaderAPI.o + 0x0000783e BootloaderAPI_WriteLock + .text.Endpoint_Write_Control_Stream_LE + 0x0000785a 0xc2 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o + 0x0000785a Endpoint_Write_Control_Stream_LE + .text.Endpoint_Read_Control_Stream_LE + 0x0000791c 0x8a ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o + 0x0000791c Endpoint_Read_Control_Stream_LE + .text.Endpoint_ConfigureEndpoint_Prv + 0x000079a6 0x28 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o + 0x000079a6 Endpoint_ConfigureEndpoint_Prv + .text.Endpoint_ClearStatusStage + 0x000079ce 0x3e ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o + 0x000079ce Endpoint_ClearStatusStage + .text.USB_ResetInterface + 0x00007a0c 0x76 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o + 0x00007a0c USB_ResetInterface + .text.USB_Init + 0x00007a82 0x20 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o + 0x00007a82 USB_Init + .text.USB_INT_DisableAllInterrupts + 0x00007aa2 0x10 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o + 0x00007aa2 USB_INT_DisableAllInterrupts + .text.USB_INT_ClearAllInterrupts + 0x00007ab2 0xa ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o + 0x00007ab2 USB_INT_ClearAllInterrupts + .text.__vector_10 + 0x00007abc 0x166 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o + 0x00007abc __vector_10 + .text.USB_Device_ProcessControlRequest + 0x00007c22 0x222 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/DeviceStandardReq.o + 0x00007c22 USB_Device_ProcessControlRequest + .text.USB_Event_Stub + 0x00007e44 0x2 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/Events.o + 0x00007e44 EVENT_USB_Device_Connect + 0x00007e44 EVENT_USB_Device_WakeUp + 0x00007e44 USB_Event_Stub + 0x00007e44 EVENT_USB_Device_Suspend + 0x00007e44 EVENT_USB_Device_StartOfFrame + 0x00007e44 EVENT_USB_Device_Disconnect + 0x00007e44 EVENT_USB_Device_Reset + .text.USB_USBTask + 0x00007e46 0x36 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/USBTask.o + 0x00007e46 USB_USBTask + .text.avr-libc + 0x00007e7c 0x10 /usr/lib/gcc/avr/4.7.2/../../../avr/lib/avr5/libc.a(eerd_byte_atmega32u4.o) + 0x00007e7c __eerd_byte_m32u4 + .text.avr-libc + 0x00007e8c 0x1c /usr/lib/gcc/avr/4.7.2/../../../avr/lib/avr5/libc.a(eewr_byte_atmega32u4.o) + 0x00007e8c __eewr_byte_m32u4 + 0x00007e8e __eewr_r18_m32u4 + 0x00007ea8 . = ALIGN (0x2) + *(.fini9) + .fini9 0x00007ea8 0x0 /usr/lib/gcc/avr/4.7.2/avr5/libgcc.a(_exit.o) + 0x00007ea8 exit + 0x00007ea8 _exit + *(.fini9) + *(.fini8) + *(.fini8) + *(.fini7) + *(.fini7) + *(.fini6) + *(.fini6) + *(.fini5) + *(.fini5) + *(.fini4) + *(.fini4) + *(.fini3) + *(.fini3) + *(.fini2) + *(.fini2) + *(.fini1) + *(.fini1) + *(.fini0) + .fini0 0x00007ea8 0x4 /usr/lib/gcc/avr/4.7.2/avr5/libgcc.a(_exit.o) + *(.fini0) + 0x00007eac _etext = . + +.data 0x00800100 0x92 load address 0x00007eac + 0x00800100 PROVIDE (__data_start, .) + *(.data) + .data 0x00800100 0x8 BootloaderCDC.o + *(.data*) + *(.rodata) + .rodata 0x00800108 0x82 Descriptors.o + 0x00800108 ProductString + 0x0080011c ManufacturerString + 0x00800136 LanguageString + 0x0080013a ConfigurationDescriptor + 0x00800178 DeviceDescriptor + *(.rodata*) + .rodata.str1.1 + 0x0080018a 0x8 BootloaderCDC.o + *(.gnu.linkonce.d*) + 0x00800192 . = ALIGN (0x2) + 0x00800192 _edata = . + 0x00800192 PROVIDE (__data_end, .) + +.bss 0x00800192 0xe + 0x00800192 PROVIDE (__bss_start, .) + *(.bss) + .bss 0x00800192 0x4 BootloaderCDC.o + *(.bss*) + *(COMMON) + COMMON 0x00800196 0x1 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/DeviceStandardReq.o + 0x00800196 USB_Device_ConfigurationNumber + COMMON 0x00800197 0x9 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/USBTask.o + 0x00800197 USB_IsInitialized + 0x00800198 USB_ControlRequest + 0x008001a0 PROVIDE (__bss_end, .) + 0x00007eac __data_load_start = LOADADDR (.data) + 0x00007f3e __data_load_end = (__data_load_start + SIZEOF (.data)) + +.noinit 0x008001a0 0x2 + 0x008001a0 PROVIDE (__noinit_start, .) + *(.noinit*) + .noinit 0x008001a0 0x2 BootloaderCDC.o + 0x008001a0 MagicBootKey + 0x008001a2 PROVIDE (__noinit_end, .) + 0x008001a2 _end = . + 0x008001a2 PROVIDE (__heap_start, .) + +.eeprom 0x00810000 0x0 + *(.eeprom*) + 0x00810000 __eeprom_end = . + +.fuse + *(.fuse) + *(.lfuse) + *(.hfuse) + *(.efuse) + +.lock + *(.lock*) + +.signature + *(.signature*) + +.stab 0x00000000 0x954 + *(.stab) + .stab 0x00000000 0x6cc /usr/lib/gcc/avr/4.7.2/../../../avr/lib/avr5/crtm32u4.o + .stab 0x000006cc 0x90 /usr/lib/gcc/avr/4.7.2/../../../avr/lib/avr5/libc.a(eerd_byte_atmega32u4.o) + 0x9c (size before relaxing) + .stab 0x0000075c 0x114 /usr/lib/gcc/avr/4.7.2/../../../avr/lib/avr5/libc.a(eeupd_byte_atmega32u4.o) + 0x120 (size before relaxing) + .stab 0x00000870 0xe4 /usr/lib/gcc/avr/4.7.2/../../../avr/lib/avr5/libc.a(eewr_byte_atmega32u4.o) + 0xf0 (size before relaxing) + +.stabstr 0x00000000 0xe2 + *(.stabstr) + .stabstr 0x00000000 0xe2 /usr/lib/gcc/avr/4.7.2/../../../avr/lib/avr5/crtm32u4.o + +.stab.excl + *(.stab.excl) + +.stab.exclstr + *(.stab.exclstr) + +.stab.index + *(.stab.index) + +.stab.indexstr + *(.stab.indexstr) + +.comment 0x00000000 0x11 + *(.comment) + .comment 0x00000000 0x11 BootloaderCDC.o + 0x12 (size before relaxing) + .comment 0x00000000 0x12 Descriptors.o + .comment 0x00000000 0x12 BootloaderAPI.o + .comment 0x00000000 0x12 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Common/HIDParser.o + .comment 0x00000000 0x12 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/Device_AVR8.o + .comment 0x00000000 0x12 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o + .comment 0x00000000 0x12 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o + .comment 0x00000000 0x12 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/Host_AVR8.o + .comment 0x00000000 0x12 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/PipeStream_AVR8.o + .comment 0x00000000 0x12 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/Pipe_AVR8.o + .comment 0x00000000 0x12 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o + .comment 0x00000000 0x12 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o + .comment 0x00000000 0x12 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/ConfigDescriptors.o + .comment 0x00000000 0x12 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/DeviceStandardReq.o + .comment 0x00000000 0x12 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/Events.o + .comment 0x00000000 0x12 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/HostStandardReq.o + .comment 0x00000000 0x12 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/USBTask.o + +.debug + *(.debug) + +.line + *(.line) + +.debug_srcinfo + *(.debug_srcinfo) + +.debug_sfnames + *(.debug_sfnames) + +.debug_aranges 0x00000000 0x3a8 + *(.debug_aranges) + .debug_aranges + 0x00000000 0x50 BootloaderCDC.o + .debug_aranges + 0x00000050 0x20 Descriptors.o + .debug_aranges + 0x00000070 0x50 BootloaderAPI.o + .debug_aranges + 0x000000c0 0x28 BootloaderAPITable.o + .debug_aranges + 0x000000e8 0x38 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Common/HIDParser.o + .debug_aranges + 0x00000120 0x20 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/Device_AVR8.o + .debug_aranges + 0x00000140 0xc8 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o + .debug_aranges + 0x00000208 0x40 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o + .debug_aranges + 0x00000248 0x18 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/Host_AVR8.o + .debug_aranges + 0x00000260 0x18 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/PipeStream_AVR8.o + .debug_aranges + 0x00000278 0x18 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/Pipe_AVR8.o + .debug_aranges + 0x00000290 0x30 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o + .debug_aranges + 0x000002c0 0x30 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o + .debug_aranges + 0x000002f0 0x40 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/ConfigDescriptors.o + .debug_aranges + 0x00000330 0x20 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/DeviceStandardReq.o + .debug_aranges + 0x00000350 0x20 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/Events.o + .debug_aranges + 0x00000370 0x18 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/HostStandardReq.o + .debug_aranges + 0x00000388 0x20 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/USBTask.o + +.debug_pubnames + *(.debug_pubnames) + +.debug_info 0x00000000 0x5818 + *(.debug_info) + .debug_info 0x00000000 0xefb BootloaderCDC.o + .debug_info 0x00000efb 0x693 Descriptors.o + .debug_info 0x0000158e 0x240 BootloaderAPI.o + .debug_info 0x000017ce 0x86 BootloaderAPITable.o + .debug_info 0x00001854 0x73a ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Common/HIDParser.o + .debug_info 0x00001f8e 0xd2 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/Device_AVR8.o + .debug_info 0x00002060 0x180d ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o + .debug_info 0x0000386d 0x595 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o + .debug_info 0x00003e02 0x56 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/Host_AVR8.o + .debug_info 0x00003e58 0x56 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/PipeStream_AVR8.o + .debug_info 0x00003eae 0x56 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/Pipe_AVR8.o + .debug_info 0x00003f04 0x49f ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o + .debug_info 0x000043a3 0x5f9 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o + .debug_info 0x0000499c 0x3cd ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/ConfigDescriptors.o + .debug_info 0x00004d69 0x78b ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/DeviceStandardReq.o + .debug_info 0x000054f4 0x78 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/Events.o + .debug_info 0x0000556c 0x56 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/HostStandardReq.o + .debug_info 0x000055c2 0x256 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/USBTask.o + *(.gnu.linkonce.wi.*) + +.debug_abbrev 0x00000000 0x163a + *(.debug_abbrev) + .debug_abbrev 0x00000000 0x3c8 BootloaderCDC.o + .debug_abbrev 0x000003c8 0x124 Descriptors.o + .debug_abbrev 0x000004ec 0xbb BootloaderAPI.o + .debug_abbrev 0x000005a7 0x12 BootloaderAPITable.o + .debug_abbrev 0x000005b9 0x22b ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Common/HIDParser.o + .debug_abbrev 0x000007e4 0x80 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/Device_AVR8.o + .debug_abbrev 0x00000864 0x224 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o + .debug_abbrev 0x00000a88 0x203 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o + .debug_abbrev 0x00000c8b 0x26 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/Host_AVR8.o + .debug_abbrev 0x00000cb1 0x26 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/PipeStream_AVR8.o + .debug_abbrev 0x00000cd7 0x26 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/Pipe_AVR8.o + .debug_abbrev 0x00000cfd 0x196 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o + .debug_abbrev 0x00000e93 0x1ce ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o + .debug_abbrev 0x00001061 0x183 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/ConfigDescriptors.o + .debug_abbrev 0x000011e4 0x282 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/DeviceStandardReq.o + .debug_abbrev 0x00001466 0x44 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/Events.o + .debug_abbrev 0x000014aa 0x26 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/HostStandardReq.o + .debug_abbrev 0x000014d0 0x16a ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/USBTask.o + +.debug_line 0x00000000 0x2af7 + *(.debug_line) + .debug_line 0x00000000 0x5d3 BootloaderCDC.o + .debug_line 0x000005d3 0x18b Descriptors.o + .debug_line 0x0000075e 0x114 BootloaderAPI.o + .debug_line 0x00000872 0x67 BootloaderAPITable.o + .debug_line 0x000008d9 0x283 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Common/HIDParser.o + .debug_line 0x00000b5c 0x133 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/Device_AVR8.o + .debug_line 0x00000c8f 0xd1e ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o + .debug_line 0x000019ad 0x3a3 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o + .debug_line 0x00001d50 0x1a ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/Host_AVR8.o + .debug_line 0x00001d6a 0x1a ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/PipeStream_AVR8.o + .debug_line 0x00001d84 0x1a ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/Pipe_AVR8.o + .debug_line 0x00001d9e 0x2eb ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o + .debug_line 0x00002089 0x3e2 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o + .debug_line 0x0000246b 0x199 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/ConfigDescriptors.o + .debug_line 0x00002604 0x2d6 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/DeviceStandardReq.o + .debug_line 0x000028da 0x6b ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/Events.o + .debug_line 0x00002945 0x1a ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/HostStandardReq.o + .debug_line 0x0000295f 0x198 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/USBTask.o + +.debug_frame 0x00000000 0x9a0 + *(.debug_frame) + .debug_frame 0x00000000 0xa4 BootloaderCDC.o + .debug_frame 0x000000a4 0x24 Descriptors.o + .debug_frame 0x000000c8 0x84 BootloaderAPI.o + .debug_frame 0x0000014c 0x114 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Common/HIDParser.o + .debug_frame 0x00000260 0x24 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/Device_AVR8.o + .debug_frame 0x00000284 0x42c ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o + .debug_frame 0x000006b0 0x78 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o + .debug_frame 0x00000728 0x58 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o + .debug_frame 0x00000780 0x8c ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o + .debug_frame 0x0000080c 0x108 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/ConfigDescriptors.o + .debug_frame 0x00000914 0x3c ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/DeviceStandardReq.o + .debug_frame 0x00000950 0x24 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/Events.o + .debug_frame 0x00000974 0x2c ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/USBTask.o + +.debug_str 0x00000000 0x2a84 + *(.debug_str) + .debug_str 0x00000000 0xb95 BootloaderCDC.o + 0xc21 (size before relaxing) + .debug_str 0x00000b95 0x6b0 Descriptors.o + 0x808 (size before relaxing) + .debug_str 0x00001245 0xc2 BootloaderAPI.o + 0x1b8 (size before relaxing) + .debug_str 0x00001307 0x4bf ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Common/HIDParser.o + 0x62c (size before relaxing) + .debug_str 0x000017c6 0x91 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/Device_AVR8.o + 0x168 (size before relaxing) + .debug_str 0x00001857 0x4df ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o + 0x7c7 (size before relaxing) + .debug_str 0x00001d36 0x248 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o + 0x557 (size before relaxing) + .debug_str 0x00001f7e 0x47 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/Host_AVR8.o + 0x107 (size before relaxing) + .debug_str 0x00001fc5 0x4d ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/PipeStream_AVR8.o + 0x10d (size before relaxing) + .debug_str 0x00002012 0x47 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/Pipe_AVR8.o + 0x107 (size before relaxing) + .debug_str 0x00002059 0x24c ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o + 0x47a (size before relaxing) + .debug_str 0x000022a5 0x148 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o + 0x470 (size before relaxing) + .debug_str 0x000023ed 0x241 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/ConfigDescriptors.o + 0x350 (size before relaxing) + .debug_str 0x0000262e 0x348 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/DeviceStandardReq.o + 0x6c5 (size before relaxing) + .debug_str 0x00002976 0x4e ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/Events.o + 0x10e (size before relaxing) + .debug_str 0x000029c4 0x48 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/HostStandardReq.o + 0x108 (size before relaxing) + .debug_str 0x00002a0c 0x78 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/USBTask.o + 0x2df (size before relaxing) + +.debug_loc 0x00000000 0x3b00 + *(.debug_loc) + .debug_loc 0x00000000 0x39b BootloaderCDC.o + .debug_loc 0x0000039b 0x17f Descriptors.o + .debug_loc 0x0000051a 0x92 BootloaderAPI.o + .debug_loc 0x000005ac 0x928 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Common/HIDParser.o + .debug_loc 0x00000ed4 0x1f1b ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o + .debug_loc 0x00002def 0x2d7 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o + .debug_loc 0x000030c6 0x49 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o + .debug_loc 0x0000310f 0x21f ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o + .debug_loc 0x0000332e 0x5bd ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/ConfigDescriptors.o + .debug_loc 0x000038eb 0x1cc ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/DeviceStandardReq.o + .debug_loc 0x00003ab7 0x49 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/USBTask.o + +.debug_macinfo + *(.debug_macinfo) +OUTPUT(BootloaderCDC.elf elf32-avr) +LOAD linker stubs + +.apitable_trampolines + 0x00007fa0 0x18 + .apitable_trampolines + 0x00007fa0 0x18 BootloaderAPITable.o + 0x00007fa0 BootloaderAPI_Trampolines + +.apitable_jumptable + 0x00007fe0 0x18 + .apitable_jumptable + 0x00007fe0 0x18 BootloaderAPITable.o + 0x00007fe0 BootloaderAPI_JumpTable + +.apitable_signatures + 0x00007ff8 0x8 + .apitable_signatures + 0x00007ff8 0x8 BootloaderAPITable.o + 0x00007ff8 BootloaderAPI_Signatures + +.debug_ranges 0x00000000 0x580 + .debug_ranges 0x00000000 0xd0 BootloaderCDC.o + .debug_ranges 0x000000d0 0x10 Descriptors.o + .debug_ranges 0x000000e0 0x40 BootloaderAPI.o + .debug_ranges 0x00000120 0x20 BootloaderAPITable.o + .debug_ranges 0x00000140 0xc8 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Common/HIDParser.o + .debug_ranges 0x00000208 0x10 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/Device_AVR8.o + .debug_ranges 0x00000218 0x238 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o + .debug_ranges 0x00000450 0x60 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o + .debug_ranges 0x000004b0 0x20 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o + .debug_ranges 0x000004d0 0x20 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o + .debug_ranges 0x000004f0 0x30 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/ConfigDescriptors.o + .debug_ranges 0x00000520 0x40 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/DeviceStandardReq.o + .debug_ranges 0x00000560 0x10 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/Events.o + .debug_ranges 0x00000570 0x10 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/USBTask.o + +Cross Reference Table + +Symbol File +Application_Jump_Check BootloaderCDC.o +BootloaderAPI_ErasePage BootloaderAPI.o + BootloaderAPITable.o +BootloaderAPI_FillWord BootloaderAPI.o + BootloaderAPITable.o +BootloaderAPI_JumpTable BootloaderAPITable.o +BootloaderAPI_ReadFuse BootloaderAPI.o + BootloaderAPITable.o +BootloaderAPI_ReadLock BootloaderAPI.o + BootloaderAPITable.o +BootloaderAPI_ReadSignature BootloaderAPI.o + BootloaderAPITable.o +BootloaderAPI_Signatures BootloaderAPITable.o +BootloaderAPI_Trampolines BootloaderAPITable.o +BootloaderAPI_WriteLock BootloaderAPI.o + BootloaderAPITable.o +BootloaderAPI_WritePage BootloaderAPI.o + BootloaderAPITable.o +CALLBACK_HIDParser_FilterHIDReportItem ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Common/HIDParser.o +CALLBACK_USB_GetDescriptor Descriptors.o + ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/DeviceStandardReq.o +ConfigurationDescriptor Descriptors.o +DeviceDescriptor Descriptors.o +EVENT_USB_Device_ConfigurationChanged BootloaderCDC.o + ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/DeviceStandardReq.o +EVENT_USB_Device_Connect ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/Events.o + ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o +EVENT_USB_Device_ControlRequest BootloaderCDC.o + ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/DeviceStandardReq.o +EVENT_USB_Device_Disconnect ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/Events.o + ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o +EVENT_USB_Device_Reset ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/Events.o + ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o +EVENT_USB_Device_StartOfFrame ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/Events.o +EVENT_USB_Device_Suspend ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/Events.o + ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o +EVENT_USB_Device_WakeUp ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/Events.o + ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o +Endpoint_ClearEndpoints ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o +Endpoint_ClearStatusStage ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o + ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/DeviceStandardReq.o + BootloaderCDC.o +Endpoint_ConfigureEndpointTable ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o +Endpoint_ConfigureEndpoint_Prv ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o + ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o + ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o + BootloaderCDC.o +Endpoint_Discard_Stream ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o +Endpoint_Null_Stream ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o +Endpoint_Read_Control_EStream_BE ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o +Endpoint_Read_Control_EStream_LE ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o +Endpoint_Read_Control_Stream_BE ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o +Endpoint_Read_Control_Stream_LE ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o + BootloaderCDC.o +Endpoint_Read_EStream_BE ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o +Endpoint_Read_EStream_LE ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o +Endpoint_Read_Stream_BE ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o +Endpoint_Read_Stream_LE ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o +Endpoint_WaitUntilReady ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o + ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o +Endpoint_Write_Control_EStream_BE ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o +Endpoint_Write_Control_EStream_LE ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o +Endpoint_Write_Control_PStream_BE ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o +Endpoint_Write_Control_PStream_LE ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o +Endpoint_Write_Control_Stream_BE ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o +Endpoint_Write_Control_Stream_LE ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o + ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/DeviceStandardReq.o + BootloaderCDC.o +Endpoint_Write_EStream_BE ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o +Endpoint_Write_EStream_LE ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o +Endpoint_Write_PStream_BE ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o +Endpoint_Write_PStream_LE ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o +Endpoint_Write_Stream_BE ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o +Endpoint_Write_Stream_LE ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o +LanguageString Descriptors.o +MagicBootKey BootloaderCDC.o +ManufacturerString Descriptors.o +ProductString Descriptors.o +USB_ControlRequest ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/USBTask.o + ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/DeviceStandardReq.o + ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/Endpoint_AVR8.o + ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o + BootloaderCDC.o +USB_Device_ConfigurationNumber ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/DeviceStandardReq.o + ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o + ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o +USB_Device_ProcessControlRequest ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/DeviceStandardReq.o + ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/USBTask.o +USB_Device_SendRemoteWakeup ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/Device_AVR8.o +USB_Disable ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o +USB_Event_Stub ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/Events.o +USB_GetHIDReportItemInfo ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Common/HIDParser.o +USB_GetHIDReportSize ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Common/HIDParser.o +USB_GetNextDescriptorComp ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/ConfigDescriptors.o +USB_GetNextDescriptorOfType ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/ConfigDescriptors.o +USB_GetNextDescriptorOfTypeAfter ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/ConfigDescriptors.o +USB_GetNextDescriptorOfTypeBefore ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/ConfigDescriptors.o +USB_INT_ClearAllInterrupts ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o + ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o +USB_INT_DisableAllInterrupts ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o + ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o +USB_Init ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o + BootloaderCDC.o +USB_IsInitialized ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/USBTask.o + ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o +USB_ProcessHIDReport ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Common/HIDParser.o +USB_ResetInterface ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.o +USB_SetHIDReportItemInfo ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Class/Common/HIDParser.o +USB_USBTask ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/USBTask.o + ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o + BootloaderCDC.o +__bad_interrupt /usr/lib/gcc/avr/4.7.2/../../../avr/lib/avr5/crtm32u4.o +__bss_end /usr/lib/gcc/avr/4.7.2/avr5/libgcc.a(_clear_bss.o) +__bss_start /usr/lib/gcc/avr/4.7.2/avr5/libgcc.a(_clear_bss.o) +__data_end /usr/lib/gcc/avr/4.7.2/avr5/libgcc.a(_copy_data.o) +__data_load_start /usr/lib/gcc/avr/4.7.2/avr5/libgcc.a(_copy_data.o) +__data_start /usr/lib/gcc/avr/4.7.2/avr5/libgcc.a(_copy_data.o) +__do_clear_bss /usr/lib/gcc/avr/4.7.2/avr5/libgcc.a(_clear_bss.o) + ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/USBTask.o + ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/DeviceStandardReq.o + BootloaderCDC.o +__do_copy_data /usr/lib/gcc/avr/4.7.2/avr5/libgcc.a(_copy_data.o) + Descriptors.o + BootloaderCDC.o +__eerd_byte_m32u4 /usr/lib/gcc/avr/4.7.2/../../../avr/lib/avr5/libc.a(eerd_byte_atmega32u4.o) + ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o + BootloaderCDC.o +__eeupd_byte_m32u4 /usr/lib/gcc/avr/4.7.2/../../../avr/lib/avr5/libc.a(eeupd_byte_atmega32u4.o) + ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/EndpointStream_AVR8.o +__eeupd_r18_m32u4 /usr/lib/gcc/avr/4.7.2/../../../avr/lib/avr5/libc.a(eeupd_byte_atmega32u4.o) +__eewr_byte_m32u4 /usr/lib/gcc/avr/4.7.2/../../../avr/lib/avr5/libc.a(eewr_byte_atmega32u4.o) + BootloaderCDC.o +__eewr_r18_m32u4 /usr/lib/gcc/avr/4.7.2/../../../avr/lib/avr5/libc.a(eewr_byte_atmega32u4.o) +__heap_end /usr/lib/gcc/avr/4.7.2/../../../avr/lib/avr5/crtm32u4.o +__init /usr/lib/gcc/avr/4.7.2/../../../avr/lib/avr5/crtm32u4.o +__stack /usr/lib/gcc/avr/4.7.2/../../../avr/lib/avr5/crtm32u4.o +__vector_1 /usr/lib/gcc/avr/4.7.2/../../../avr/lib/avr5/crtm32u4.o +__vector_10 ../../../tools/lufa-LUFA-140928/LUFA/Drivers/USB/Core/AVR8/USBInterrupt_AVR8.o + /usr/lib/gcc/avr/4.7.2/../../../avr/lib/avr5/crtm32u4.o +__vector_11 /usr/lib/gcc/avr/4.7.2/../../../avr/lib/avr5/crtm32u4.o +__vector_12 /usr/lib/gcc/avr/4.7.2/../../../avr/lib/avr5/crtm32u4.o +__vector_13 /usr/lib/gcc/avr/4.7.2/../../../avr/lib/avr5/crtm32u4.o +__vector_14 /usr/lib/gcc/avr/4.7.2/../../../avr/lib/avr5/crtm32u4.o +__vector_15 /usr/lib/gcc/avr/4.7.2/../../../avr/lib/avr5/crtm32u4.o +__vector_16 /usr/lib/gcc/avr/4.7.2/../../../avr/lib/avr5/crtm32u4.o +__vector_17 /usr/lib/gcc/avr/4.7.2/../../../avr/lib/avr5/crtm32u4.o +__vector_18 /usr/lib/gcc/avr/4.7.2/../../../avr/lib/avr5/crtm32u4.o +__vector_19 /usr/lib/gcc/avr/4.7.2/../../../avr/lib/avr5/crtm32u4.o +__vector_2 /usr/lib/gcc/avr/4.7.2/../../../avr/lib/avr5/crtm32u4.o +__vector_20 BootloaderCDC.o + /usr/lib/gcc/avr/4.7.2/../../../avr/lib/avr5/crtm32u4.o +__vector_21 /usr/lib/gcc/avr/4.7.2/../../../avr/lib/avr5/crtm32u4.o +__vector_22 /usr/lib/gcc/avr/4.7.2/../../../avr/lib/avr5/crtm32u4.o +__vector_23 /usr/lib/gcc/avr/4.7.2/../../../avr/lib/avr5/crtm32u4.o +__vector_24 /usr/lib/gcc/avr/4.7.2/../../../avr/lib/avr5/crtm32u4.o +__vector_25 /usr/lib/gcc/avr/4.7.2/../../../avr/lib/avr5/crtm32u4.o +__vector_26 /usr/lib/gcc/avr/4.7.2/../../../avr/lib/avr5/crtm32u4.o +__vector_27 /usr/lib/gcc/avr/4.7.2/../../../avr/lib/avr5/crtm32u4.o +__vector_28 /usr/lib/gcc/avr/4.7.2/../../../avr/lib/avr5/crtm32u4.o +__vector_29 /usr/lib/gcc/avr/4.7.2/../../../avr/lib/avr5/crtm32u4.o +__vector_3 /usr/lib/gcc/avr/4.7.2/../../../avr/lib/avr5/crtm32u4.o +__vector_30 /usr/lib/gcc/avr/4.7.2/../../../avr/lib/avr5/crtm32u4.o +__vector_31 /usr/lib/gcc/avr/4.7.2/../../../avr/lib/avr5/crtm32u4.o +__vector_32 /usr/lib/gcc/avr/4.7.2/../../../avr/lib/avr5/crtm32u4.o +__vector_33 /usr/lib/gcc/avr/4.7.2/../../../avr/lib/avr5/crtm32u4.o +__vector_34 /usr/lib/gcc/avr/4.7.2/../../../avr/lib/avr5/crtm32u4.o +__vector_35 /usr/lib/gcc/avr/4.7.2/../../../avr/lib/avr5/crtm32u4.o +__vector_36 /usr/lib/gcc/avr/4.7.2/../../../avr/lib/avr5/crtm32u4.o +__vector_37 /usr/lib/gcc/avr/4.7.2/../../../avr/lib/avr5/crtm32u4.o +__vector_38 /usr/lib/gcc/avr/4.7.2/../../../avr/lib/avr5/crtm32u4.o +__vector_39 /usr/lib/gcc/avr/4.7.2/../../../avr/lib/avr5/crtm32u4.o +__vector_4 /usr/lib/gcc/avr/4.7.2/../../../avr/lib/avr5/crtm32u4.o +__vector_40 /usr/lib/gcc/avr/4.7.2/../../../avr/lib/avr5/crtm32u4.o +__vector_41 /usr/lib/gcc/avr/4.7.2/../../../avr/lib/avr5/crtm32u4.o +__vector_42 /usr/lib/gcc/avr/4.7.2/../../../avr/lib/avr5/crtm32u4.o +__vector_5 /usr/lib/gcc/avr/4.7.2/../../../avr/lib/avr5/crtm32u4.o +__vector_6 /usr/lib/gcc/avr/4.7.2/../../../avr/lib/avr5/crtm32u4.o +__vector_7 /usr/lib/gcc/avr/4.7.2/../../../avr/lib/avr5/crtm32u4.o +__vector_8 /usr/lib/gcc/avr/4.7.2/../../../avr/lib/avr5/crtm32u4.o +__vector_9 /usr/lib/gcc/avr/4.7.2/../../../avr/lib/avr5/crtm32u4.o +__vector_default /usr/lib/gcc/avr/4.7.2/../../../avr/lib/avr5/crtm32u4.o +__vectors /usr/lib/gcc/avr/4.7.2/../../../avr/lib/avr5/crtm32u4.o +_exit /usr/lib/gcc/avr/4.7.2/avr5/libgcc.a(_exit.o) +exit /usr/lib/gcc/avr/4.7.2/avr5/libgcc.a(_exit.o) + /usr/lib/gcc/avr/4.7.2/../../../avr/lib/avr5/crtm32u4.o +main BootloaderCDC.o + /usr/lib/gcc/avr/4.7.2/../../../avr/lib/avr5/crtm32u4.o diff --git a/avr/bootloaders/CDC/BootloaderCDC.o b/avr/bootloaders/CDC/BootloaderCDC.o new file mode 100644 index 0000000000000000000000000000000000000000..13e3b2eb5024f4519f105b1ae0291400223dc8c6 GIT binary patch literal 25388 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 literal 0 HcmV?d00001 diff --git a/avr/bootloaders/CDC/BootloaderCDC.sym b/avr/bootloaders/CDC/BootloaderCDC.sym new file mode 100644 index 0000000..d764008 --- /dev/null +++ b/avr/bootloaders/CDC/BootloaderCDC.sym @@ -0,0 +1,218 @@ + U CALLBACK_HIDParser_FilterHIDReportItem +00000000 W __heap_end +00000000 a __tmp_reg__ +00000000 a __tmp_reg__ +00000000 a __tmp_reg__ +00000000 a __tmp_reg__ +00000000 a __tmp_reg__ +00000000 a __tmp_reg__ +00000000 a __tmp_reg__ +00000000 a __tmp_reg__ +00000000 a __tmp_reg__ +00000000 a __tmp_reg__ +00000000 a __tmp_reg__ +00000000 a __tmp_reg__ +00000000 a __tmp_reg__ +00000000 a __tmp_reg__ +00000000 a __tmp_reg__ +00000000 a __tmp_reg__ +00000000 a __tmp_reg__ +00000001 a __zero_reg__ +00000001 a __zero_reg__ +00000001 a __zero_reg__ +00000001 a __zero_reg__ +00000001 a __zero_reg__ +00000001 a __zero_reg__ +00000001 a __zero_reg__ +00000001 a __zero_reg__ +00000001 a __zero_reg__ +00000001 a __zero_reg__ +00000001 a __zero_reg__ +00000001 a __zero_reg__ +00000001 a __zero_reg__ +00000001 a __zero_reg__ +00000001 a __zero_reg__ +00000001 a __zero_reg__ +00000001 a __zero_reg__ +0000003d a __SP_L__ +0000003d a __SP_L__ +0000003d a __SP_L__ +0000003d a __SP_L__ +0000003d a __SP_L__ +0000003d a __SP_L__ +0000003d a __SP_L__ +0000003d a __SP_L__ +0000003d a __SP_L__ +0000003d a __SP_L__ +0000003d a __SP_L__ +0000003d a __SP_L__ +0000003d a __SP_L__ +0000003d a __SP_L__ +0000003d a __SP_L__ +0000003d a __SP_L__ +0000003d a __SP_L__ +0000003e a __SP_H__ +0000003e a __SP_H__ +0000003e a __SP_H__ +0000003e a __SP_H__ +0000003e a __SP_H__ +0000003e a __SP_H__ +0000003e a __SP_H__ +0000003e a __SP_H__ +0000003e a __SP_H__ +0000003e a __SP_H__ +0000003e a __SP_H__ +0000003e a __SP_H__ +0000003e a __SP_H__ +0000003e a __SP_H__ +0000003e a __SP_H__ +0000003e a __SP_H__ +0000003e a __SP_H__ +0000003f a __SREG__ +0000003f a __SREG__ +0000003f a __SREG__ +0000003f a __SREG__ +0000003f a __SREG__ +0000003f a __SREG__ +0000003f a __SREG__ +0000003f a __SREG__ +0000003f a __SREG__ +0000003f a __SREG__ +0000003f a __SREG__ +0000003f a __SREG__ +0000003f a __SREG__ +0000003f a __SREG__ +0000003f a __SREG__ +0000003f a __SREG__ +0000003f a __SREG__ +00000aff W __stack +00007000 W __vector_default +00007000 T __vectors +000070ac T __ctors_end +000070ac T __ctors_start +000070ac T __dtors_end +000070ac T __dtors_start +000070ac W __init +000070ac T __trampolines_end +000070ac T __trampolines_start +000070b8 T Application_Jump_Check +000070f0 T __do_copy_data +00007106 T __do_clear_bss +0000710e t .do_clear_bss_loop +00007110 t .do_clear_bss_start +0000711a T __bad_interrupt +0000711a W __vector_1 +0000711a W __vector_11 +0000711a W __vector_12 +0000711a W __vector_13 +0000711a W __vector_14 +0000711a W __vector_15 +0000711a W __vector_16 +0000711a W __vector_17 +0000711a W __vector_18 +0000711a W __vector_19 +0000711a W __vector_2 +0000711a W __vector_21 +0000711a W __vector_22 +0000711a W __vector_23 +0000711a W __vector_24 +0000711a W __vector_25 +0000711a W __vector_26 +0000711a W __vector_27 +0000711a W __vector_28 +0000711a W __vector_29 +0000711a W __vector_3 +0000711a W __vector_30 +0000711a W __vector_31 +0000711a W __vector_32 +0000711a W __vector_33 +0000711a W __vector_34 +0000711a W __vector_35 +0000711a W __vector_36 +0000711a W __vector_37 +0000711a W __vector_38 +0000711a W __vector_39 +0000711a W __vector_4 +0000711a W __vector_40 +0000711a W __vector_41 +0000711a W __vector_42 +0000711a W __vector_5 +0000711a W __vector_6 +0000711a W __vector_7 +0000711a W __vector_8 +0000711a W __vector_9 +0000711c t FetchNextCommandByte +00007150 t WriteNextResponseByte +00007182 T main +00007694 T __vector_20 +000076b6 T EVENT_USB_Device_ConfigurationChanged +000076ce T EVENT_USB_Device_ControlRequest +0000774c T CALLBACK_USB_GetDescriptor +000077b6 T BootloaderAPI_ErasePage +000077da T BootloaderAPI_WritePage +000077fe T BootloaderAPI_FillWord +00007818 T BootloaderAPI_ReadSignature +00007824 T BootloaderAPI_ReadFuse +00007830 T BootloaderAPI_ReadLock +0000783e T BootloaderAPI_WriteLock +0000785a T Endpoint_Write_Control_Stream_LE +0000791c T Endpoint_Read_Control_Stream_LE +000079a6 T Endpoint_ConfigureEndpoint_Prv +000079ce T Endpoint_ClearStatusStage +00007a0c T USB_ResetInterface +00007a82 T USB_Init +00007aa2 T USB_INT_DisableAllInterrupts +00007ab2 T USB_INT_ClearAllInterrupts +00007abc T __vector_10 +00007c22 T USB_Device_ProcessControlRequest +00007e44 W EVENT_USB_Device_Connect +00007e44 W EVENT_USB_Device_Disconnect +00007e44 W EVENT_USB_Device_Reset +00007e44 W EVENT_USB_Device_StartOfFrame +00007e44 W EVENT_USB_Device_Suspend +00007e44 W EVENT_USB_Device_WakeUp +00007e44 T USB_Event_Stub +00007e46 T USB_USBTask +00007e7c T __eerd_byte_m32u4 +00007e8c T __eewr_byte_m32u4 +00007e8e T __eewr_r18_m32u4 +00007ea8 T _exit +00007ea8 W exit +00007eaa t __stop_program +00007eac A __data_load_start +00007eac T _etext +00007f3e A __data_load_end +00007fa0 t BootloaderAPI_ErasePage_Trampoline +00007fa0 T BootloaderAPI_Trampolines +00007fa2 t BootloaderAPI_WritePage_Trampoline +00007fa4 t BootloaderAPI_FillWord_Trampoline +00007fa6 t BootloaderAPI_ReadSignature_Trampoline +00007fa8 t BootloaderAPI_ReadFuse_Trampoline +00007faa t BootloaderAPI_ReadLock_Trampoline +00007fac t BootloaderAPI_WriteLock_Trampoline +00007fae t BootloaderAPI_UNUSED1 +00007fb0 t BootloaderAPI_UNUSED2 +00007fb2 t BootloaderAPI_UNUSED3 +00007fb4 t BootloaderAPI_UNUSED4 +00007fb6 t BootloaderAPI_UNUSED5 +00007fe0 T BootloaderAPI_JumpTable +00007ff8 T BootloaderAPI_Signatures +00800100 d RunBootloader +00800100 D __data_start +00800101 d LineEncoding +00800108 D ProductString +0080011c D ManufacturerString +00800136 D LanguageString +0080013a D ConfigurationDescriptor +00800178 D DeviceDescriptor +00800192 b CurrAddress +00800192 B __bss_start +00800192 D __data_end +00800192 D _edata +00800196 B USB_Device_ConfigurationNumber +00800197 B USB_IsInitialized +00800198 B USB_ControlRequest +008001a0 B MagicBootKey +008001a0 B __bss_end +008001a2 B _end +00810000 N __eeprom_end diff --git a/avr/bootloaders/CDC/BootloaderCDC.txt b/avr/bootloaders/CDC/BootloaderCDC.txt new file mode 100644 index 0000000..55e5e55 --- /dev/null +++ b/avr/bootloaders/CDC/BootloaderCDC.txt @@ -0,0 +1,240 @@ +/** \file + * + * 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 CDC Class USB AVR Bootloader + * + * \section Sec_Compat Demo Compatibility: + * + * The following list indicates what microcontrollers are compatible with this demo. + * + * \li Series 7 USB AVRs (AT90USBxxx7) + * \li Series 6 USB AVRs (AT90USBxxx6) + * \li Series 4 USB AVRs (ATMEGAxxU4) + * \li Series 2 USB AVRs (AT90USBxx2, ATMEGAxxU2) + * + * \section Sec_Info USB Information: + * + * The following table gives a rundown of the USB utilization of this demo. + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + *
USB Mode:Device
USB Class:Communications Device Class (CDC)
USB Subclass:Abstract Control Model (ACM)
Relevant Standards:USBIF CDC Class Standard
Supported USB Speeds:Full Speed Mode
+ * + * \section Sec_Description Project Description: + * + * This bootloader enumerates to the host as a CDC Class device (virtual serial port), allowing for AVR109 + * protocol compatible programming software to load firmware onto the AVR. + * + * Out of the box this bootloader builds for the AT90USB1287 with an 8KB bootloader section size, and will fit + * into 4KB of bootloader space. If you wish to alter this size and/or change the AVR model, you will need to + * edit the MCU, FLASH_SIZE_KB and BOOT_SECTION_SIZE_KB values in the accompanying makefile. + * + * When the bootloader is running, the board's LED(s) will flash at regular intervals to distinguish the + * bootloader from the normal user application. + * + * \warning THIS BOOTLOADER IS NOT SECURE. Malicious entities can recover written data, even if the device + * lockbits are set. + * + * \section Sec_Running Running the Bootloader + * + * This bootloader is designed to be started via the HWB mechanism of the USB AVRs; ground the HWB pin (see device + * datasheet) then momentarily ground /RESET to start the bootloader. This assumes the HWBE fuse is set and the BOOTRST + * fuse is cleared. + * + * For board specific exceptions to the above, see below. + * + * \subsection SSec_XPLAIN Atmel Xplain Board + * Ground the USB AVR JTAG's \c TCK pin to ground when powering on the board to start the bootloader. This assumes the + * \c HWBE fuse is cleared and the \c BOOTRST fuse is set as the HWBE pin is not user accessible on this board. + * + * \subsection SSec_Leonardo Arduino Leonardo Board + * Ground \c IO13 when powering the board to start the bootloader. This assumes the \c HWBE fuse is cleared and the + * \c BOOTRST fuse is set as the HWBE pin is not user accessible on this board. + * + * \section Sec_Installation Driver Installation + * + * After running this bootloader for the first time on a new computer, you will need to supply the .INF + * file located in this bootloader project's directory as the device's driver when running under Windows. + * This will enable Windows to use its inbuilt CDC drivers, negating the need for custom drivers for the + * device. Other Operating Systems should automatically use their own inbuilt CDC-ACM drivers. + * + * \section Sec_HostApp Host Controller Application + * + * This bootloader is compatible with the open source application AVRDUDE, Atmel's AVRPROG, or other + * applications implementing the AVR109 protocol, which is documented on the Atmel website as an application + * note. + * + * \subsection SSec_AVRDude AVRDUDE (Windows, Mac, Linux) + * + * AVRDude is a free, cross-platform and open source command line programmer for Atmel and third party AVR + * programmers. It is available on the the Windows platform as part of the "WinAVR" package, or on other systems + * either from a build from the official source code, or in many distributions as a precompiled binary package. + * + * To load a new HEX file with AVRDude, specify "AVR109" as the programmer, with the allocated COM port. On Windows + * platforms this will be a COMx port name: + * \code + * avrdude -c AVR109 -p at90usb1287 -P COM0 -U flash:w:Mouse.hex + * \endcode + * + * On Linux systems, this will typically be a /dev/ttyACMx port name: + * \code + * avrdude -c AVR109 -p at90usb1287 -P /dev/ttyACM0 -U flash:w:Mouse.hex + * \endcode + * + * Refer to the AVRDude project documentation for additional usage instructions. + * + * \section Sec_API User Application API + * + * Several user application functions for FLASH and other special memory area manipulations are exposed by the bootloader, + * allowing the user application to call into the bootloader at runtime to read and write FLASH data. + * + * By default, the bootloader API jump table is located 32 bytes from the end of the device's FLASH memory, and follows the + * following layout: + * + * \code + * #define BOOTLOADER_API_TABLE_SIZE 32 + * #define BOOTLOADER_API_TABLE_START ((FLASHEND + 1UL) - BOOTLOADER_API_TABLE_SIZE) + * #define BOOTLOADER_API_CALL(Index) (void*)((BOOTLOADER_API_TABLE_START + (Index * 2)) / 2) + * + * void (*BootloaderAPI_ErasePage)(uint32_t Address) = BOOTLOADER_API_CALL(0); + * void (*BootloaderAPI_WritePage)(uint32_t Address) = BOOTLOADER_API_CALL(1); + * void (*BootloaderAPI_FillWord)(uint32_t Address, uint16_t Word) = BOOTLOADER_API_CALL(2); + * uint8_t (*BootloaderAPI_ReadSignature)(uint16_t Address) = BOOTLOADER_API_CALL(3); + * uint8_t (*BootloaderAPI_ReadFuse)(uint16_t Address) = BOOTLOADER_API_CALL(4); + * uint8_t (*BootloaderAPI_ReadLock)(void) = BOOTLOADER_API_CALL(5); + * void (*BootloaderAPI_WriteLock)(uint8_t LockBits) = BOOTLOADER_API_CALL(6); + * + * #define BOOTLOADER_MAGIC_SIGNATURE_START (BOOTLOADER_API_TABLE_START + (BOOTLOADER_API_TABLE_SIZE - 2)) + * #define BOOTLOADER_MAGIC_SIGNATURE 0xDCFB + * + * #define BOOTLOADER_CLASS_SIGNATURE_START (BOOTLOADER_API_TABLE_START + (BOOTLOADER_API_TABLE_SIZE - 4)) + * #define BOOTLOADER_CDC_SIGNATURE 0xDF00 + * + * #define BOOTLOADER_ADDRESS_START (BOOTLOADER_API_TABLE_START + (BOOTLOADER_API_TABLE_SIZE - 8)) + * #define BOOTLOADER_ADDRESS_LENGTH 4 + * \endcode + * + * From the application the API support of the bootloader can be detected by reading the FLASH memory bytes located at address + * \c BOOTLOADER_MAGIC_SIGNATURE_START and comparing them to the value \c BOOTLOADER_MAGIC_SIGNATURE. The class of bootloader + * can be determined by reading the FLASH memory bytes located at address \c BOOTLOADER_CLASS_SIGNATURE_START and comparing them + * to the value \c BOOTLOADER_CDC_SIGNATURE. The start address of the bootloader can be retrieved by reading the bytes of FLASH + * memory starting from address \c BOOTLOADER_ADDRESS_START. + * + * \subsection SSec_API_MemLayout Device Memory Map + * The following illustration indicates the final memory map of the device when loaded with the bootloader. + * + * \verbatim + * +----------------------------+ 0x0000 + * | | + * | | + * | | + * | | + * | | + * | | + * | | + * | | + * | User Application | + * | | + * | | + * | | + * | | + * | | + * | | + * | | + * +----------------------------+ FLASHEND - BOOT_SECTION_SIZE + * | | + * | Bootloader Application | + * | (Not User App. Accessible) | + * | | + * +----------------------------+ FLASHEND - 96 + * | API Table Trampolines | + * | (Not User App. Accessible) | + * +----------------------------+ FLASHEND - 32 + * | Bootloader API Table | + * | (User App. Accessible) | + * +----------------------------+ FLASHEND - 8 + * | Bootloader ID Constants | + * | (User App. Accessible) | + * +----------------------------+ FLASHEND + * \endverbatim + * + * \section Sec_KnownIssues Known Issues: + * + * \par On Linux machines, the CDC bootloader is unstable or inaccessible. + * A change to the \c ModemManager module in many Linux distributions causes + * this module to try to take control over inserted CDC devices, corrupting the + * datastream. A UDEV rule is required to prevent this. + * See here for resolution steps. + * If the issue still persists then uninstall modemmanager by executing sudo apt-get remove modemmanager, or + * the equivalent using your chosen distribution's package manager. + * + * \par On Linux machines, the CDC bootloader is inaccessible. + * On many Linux systems, non-root users do not have automatic access to newly + * inserted CDC devices. Root privileges or a UDEV rule is required to gain + * access. + * See here for resolution steps. + * + * \par After loading an application, it is not run automatically on startup. + * Some USB AVR boards ship with the BOOTRST fuse set, causing the bootloader + * to run automatically when the device is reset. In most cases, the BOOTRST + * fuse should be disabled and the HWBE fuse used instead to run the bootloader + * when needed. + * + * \section Sec_Options Project Options + * + * The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value. + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + *
Define Name:Location:Description:
NO_BLOCK_SUPPORTAppConfig.hDefine to disable memory block read/write support in the bootloader, requiring all reads and writes to be made + * using the byte-level commands.
NO_EEPROM_BYTE_SUPPORTAppConfig.hDefine to disable EEPROM memory byte read/write support in the bootloader, requiring all EEPROM reads and writes + * to be made using the block-level commands.
NO_FLASH_BYTE_SUPPORTAppConfig.hDefine to disable FLASH memory byte read/write support in the bootloader, requiring all FLASH reads and writes + * to be made using the block-level commands.
NO_LOCK_BYTE_WRITE_SUPPORTAppConfig.hDefine to disable lock byte write support in the bootloader, preventing the lock bits from being set programmatically.
+ */ + diff --git a/avr/bootloaders/CDC/Config/AppConfig.h b/avr/bootloaders/CDC/Config/AppConfig.h new file mode 100644 index 0000000..bbb5cb2 --- /dev/null +++ b/avr/bootloaders/CDC/Config/AppConfig.h @@ -0,0 +1,50 @@ +/* + LUFA Library + Copyright (C) Dean Camera, 2014. + + dean [at] fourwalledcubicle [dot] com + www.lufa-lib.org +*/ + +/* + Copyright 2014 Dean Camera (dean [at] fourwalledcubicle [dot] com) + + Permission to use, copy, modify, distribute, and sell this + software and its documentation for any purpose is hereby granted + 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 disclaims 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 + * \brief Application Configuration Header File + * + * This is a header file which is be used to configure LUFA's + * compile time options, as an alternative to the compile time + * constants supplied through a makefile. + * + * For information on what each token does, refer to the + * \ref Sec_Options section of the application documentation. + */ + +#ifndef _APP_CONFIG_H_ +#define _APP_CONFIG_H_ + +// #define NO_BLOCK_SUPPORT +// #define NO_EEPROM_BYTE_SUPPORT +// #define NO_FLASH_BYTE_SUPPORT +// #define NO_LOCK_BYTE_WRITE_SUPPORT + +#endif diff --git a/avr/bootloaders/CDC/Config/LUFAConfig.h b/avr/bootloaders/CDC/Config/LUFAConfig.h new file mode 100644 index 0000000..af2dd30 --- /dev/null +++ b/avr/bootloaders/CDC/Config/LUFAConfig.h @@ -0,0 +1,93 @@ +/* + LUFA Library + Copyright (C) Dean Camera, 2014. + + dean [at] fourwalledcubicle [dot] com + www.lufa-lib.org +*/ + +/* + Copyright 2014 Dean Camera (dean [at] fourwalledcubicle [dot] com) + + Permission to use, copy, modify, distribute, and sell this + software and its documentation for any purpose is hereby granted + 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 disclaims 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 + * \brief LUFA Library Configuration Header File + * + * This header file is used to configure LUFA's compile time options, + * as an alternative to the compile time constants supplied through + * a makefile. + * + * For information on what each token does, refer to the LUFA + * manual section "Summary of Compile Tokens". + */ + +#ifndef _LUFA_CONFIG_H_ +#define _LUFA_CONFIG_H_ + + #if (ARCH == ARCH_AVR8) + + /* Non-USB Related Configuration Tokens: */ +// #define DISABLE_TERMINAL_CODES + + /* USB Class Driver Related Tokens: */ +// #define HID_HOST_BOOT_PROTOCOL_ONLY +// #define HID_STATETABLE_STACK_DEPTH {Insert Value Here} +// #define HID_USAGE_STACK_DEPTH {Insert Value Here} +// #define HID_MAX_COLLECTIONS {Insert Value Here} +// #define HID_MAX_REPORTITEMS {Insert Value Here} +// #define HID_MAX_REPORT_IDS {Insert Value Here} +// #define NO_CLASS_DRIVER_AUTOFLUSH + + /* General USB Driver Related Tokens: */ + #define ORDERED_EP_CONFIG + #define USE_STATIC_OPTIONS (USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL) + #define USB_DEVICE_ONLY +// #define USB_HOST_ONLY +// #define USB_STREAM_TIMEOUT_MS {Insert Value Here} +// #define NO_LIMITED_CONTROLLER_CONNECT + #define NO_SOF_EVENTS + + /* USB Device Mode Driver Related Tokens: */ + #define USE_RAM_DESCRIPTORS +// #define USE_FLASH_DESCRIPTORS +// #define USE_EEPROM_DESCRIPTORS + #define NO_INTERNAL_SERIAL + #define FIXED_CONTROL_ENDPOINT_SIZE 8 + #define DEVICE_STATE_AS_GPIOR 0 + #define FIXED_NUM_CONFIGURATIONS 1 +// #define CONTROL_ONLY_DEVICE +// #define INTERRUPT_CONTROL_ENDPOINT + #define NO_DEVICE_REMOTE_WAKEUP + #define NO_DEVICE_SELF_POWER + + /* USB Host Mode Driver Related Tokens: */ +// #define HOST_STATE_AS_GPIOR {Insert Value Here} +// #define USB_HOST_TIMEOUT_MS {Insert Value Here} +// #define HOST_DEVICE_SETTLE_DELAY_MS {Insert Value Here} +// #define NO_AUTO_VBUS_MANAGEMENT +// #define INVERTED_VBUS_ENABLE_LINE + + #else + + #error Unsupported architecture for this LUFA configuration file. + + #endif +#endif diff --git a/avr/bootloaders/CDC/Descriptors.c b/avr/bootloaders/CDC/Descriptors.c new file mode 100644 index 0000000..2ff6b50 --- /dev/null +++ b/avr/bootloaders/CDC/Descriptors.c @@ -0,0 +1,244 @@ +/* + LUFA Library + Copyright (C) Dean Camera, 2014. + + dean [at] fourwalledcubicle [dot] com + www.lufa-lib.org +*/ + +/* + Copyright 2014 Dean Camera (dean [at] fourwalledcubicle [dot] com) + + Permission to use, copy, modify, distribute, and sell this + software and its documentation for any purpose is hereby granted + 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 disclaims 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(1,1,0), + .Class = CDC_CSCP_CDCClass, + .SubClass = CDC_CSCP_NoSpecificSubclass, + .Protocol = CDC_CSCP_NoSpecificProtocol, + + .Endpoint0Size = FIXED_CONTROL_ENDPOINT_SIZE, + + .VendorID = 0x03EB, + .ProductID = 0x204A, + .ReleaseNumber = VERSION_BCD(1,0,0), + + .ManufacturerStrIndex = STRING_ID_Manufacturer, + .ProductStrIndex = STRING_ID_Product, + .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_RESERVED, + + .MaxPowerConsumption = USB_CONFIG_POWER_MA(100) + }, + + .CDC_CCI_Interface = + { + .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface}, + + .InterfaceNumber = INTERFACE_ID_CDC_CCI, + .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(1,1,0), + }, + + .CDC_Functional_ACM = + { + .Header = {.Size = sizeof(USB_CDC_Descriptor_FunctionalACM_t), .Type = DTYPE_CSInterface}, + .Subtype = 0x02, + + .Capabilities = 0x02, + }, + + .CDC_Functional_Union = + { + .Header = {.Size = sizeof(USB_CDC_Descriptor_FunctionalUnion_t), .Type = DTYPE_CSInterface}, + .Subtype = 0x06, + + .MasterInterfaceNumber = INTERFACE_ID_CDC_CCI, + .SlaveInterfaceNumber = INTERFACE_ID_CDC_DCI, + }, + + .CDC_NotificationEndpoint = + { + .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, + + .EndpointAddress = CDC_NOTIFICATION_EPADDR, + .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 = INTERFACE_ID_CDC_DCI, + .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 = CDC_RX_EPADDR, + .Attributes = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), + .EndpointSize = CDC_TXRX_EPSIZE, + .PollingIntervalMS = 0x05 + }, + + .CDC_DataInEndpoint = + { + .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, + + .EndpointAddress = CDC_TX_EPADDR, + .Attributes = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), + .EndpointSize = CDC_TXRX_EPSIZE, + .PollingIntervalMS = 0x05 + } +}; + +/** 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 = USB_STRING_DESCRIPTOR_ARRAY(LANGUAGE_ID_ENG); + +/** Manufacturer descriptor string. This is a Unicode string containing the manufacturer'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 ManufacturerString = USB_STRING_DESCRIPTOR(L"Dean Camera"); + +/** 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 = USB_STRING_DESCRIPTOR(L"LUFA CDC"); + +/** 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 == STRING_ID_Language) + { + Address = &LanguageString; + Size = LanguageString.Header.Size; + } + else if (DescriptorNumber == STRING_ID_Manufacturer) + { + Address = &ManufacturerString; + Size = ManufacturerString.Header.Size; + } + else if (DescriptorNumber == STRING_ID_Product) + { + Address = &ProductString; + Size = ProductString.Header.Size; + } + + break; + } + + *DescriptorAddress = Address; + return Size; +} + diff --git a/avr/bootloaders/CDC/Descriptors.d b/avr/bootloaders/CDC/Descriptors.d new file mode 100644 index 0000000..23ae692 --- /dev/null +++ b/avr/bootloaders/CDC/Descriptors.d @@ -0,0 +1,279 @@ +Descriptors.o: Descriptors.c Descriptors.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/USB.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/../../Common/Common.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/../../Common/Architectures.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/../../Common/BoardTypes.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/../../Common/ArchitectureSpecific.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/../../Common/CompilerSpecific.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/../../Common/Attributes.h \ + Config/LUFAConfig.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/../../Common/Endianness.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/USBMode.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/../../../Common/Common.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/USBTask.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/USBMode.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/USBController.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/AVR8/../../../../Common/Common.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/AVR8/../USBMode.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/AVR8/../Events.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/AVR8/../../../../Common/Common.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/AVR8/../USBMode.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/AVR8/../USBTask.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/AVR8/../USBInterrupt.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/AVR8/../AVR8/USBInterrupt_AVR8.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/AVR8/../AVR8/../../../../Common/Common.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/AVR8/../AVR8/../USBMode.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/AVR8/../AVR8/../Events.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/AVR8/../AVR8/../USBController.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/AVR8/../Device.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/AVR8/../StdDescriptors.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/AVR8/../Events.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/AVR8/../USBInterrupt.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/AVR8/../Endpoint.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/AVR8/../AVR8/Endpoint_AVR8.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/AVR8/../AVR8/../USBTask.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/AVR8/../AVR8/../USBInterrupt.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/AVR8/../AVR8/Device_AVR8.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/AVR8/../AVR8/../StdDescriptors.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/AVR8/../AVR8/../Endpoint.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/AVR8/../Endpoint.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/AVR8/../DeviceStandardReq.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/AVR8/../StdRequestType.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/AVR8/../USBTask.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/AVR8/../USBController.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/AVR8/../EndpointStream.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/AVR8/../AVR8/EndpointStream_AVR8.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/Events.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/StdRequestType.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/StdDescriptors.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/DeviceStandardReq.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/Events.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/StdDescriptors.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/ConfigDescriptors.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/HostStandardReq.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/USBController.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/USBInterrupt.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/Device.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/Endpoint.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/DeviceStandardReq.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/EndpointStream.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Class/AndroidAccessoryClass.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Class/../Core/USBMode.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Class/AudioClass.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Class/Device/AudioClassDevice.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Class/Device/../../USB.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Class/Device/../Common/AudioClassCommon.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Class/Device/../Common/../../Core/StdDescriptors.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Class/CDCClass.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Class/Device/CDCClassDevice.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Class/Device/../Common/CDCClassCommon.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Class/HIDClass.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Class/Device/HIDClassDevice.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Class/Device/../Common/HIDClassCommon.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Class/Device/../Common/HIDParser.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Class/Device/../Common/../../../../Common/Common.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Class/Device/../Common/HIDReportData.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Class/Device/../Common/HIDClassCommon.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Class/MassStorageClass.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Class/Device/MassStorageClassDevice.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Class/Device/../Common/MassStorageClassCommon.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Class/MIDIClass.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Class/Device/MIDIClassDevice.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Class/Device/../Common/MIDIClassCommon.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Class/Device/../Common/AudioClassCommon.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Class/PrinterClass.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Class/Device/PrinterClassDevice.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Class/Device/../Common/PrinterClassCommon.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Class/RNDISClass.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Class/Device/RNDISClassDevice.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Class/Device/../Common/RNDISClassCommon.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Class/Device/../Common/CDCClassCommon.h \ + ../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Class/StillImageClass.h \ + Config/AppConfig.h + +Descriptors.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/USB.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/../../Common/Common.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/../../Common/Architectures.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/../../Common/BoardTypes.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/../../Common/ArchitectureSpecific.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/../../Common/CompilerSpecific.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/../../Common/Attributes.h: + +Config/LUFAConfig.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/../../Common/Endianness.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/USBMode.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/../../../Common/Common.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/USBTask.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/USBMode.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/USBController.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/AVR8/USBController_AVR8.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/AVR8/../../../../Common/Common.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/AVR8/../USBMode.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/AVR8/../Events.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/AVR8/../../../../Common/Common.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/AVR8/../USBMode.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/AVR8/../USBTask.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/AVR8/../USBInterrupt.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/AVR8/../AVR8/USBInterrupt_AVR8.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/AVR8/../AVR8/../../../../Common/Common.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/AVR8/../AVR8/../USBMode.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/AVR8/../AVR8/../Events.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/AVR8/../AVR8/../USBController.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/AVR8/../Device.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/AVR8/../StdDescriptors.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/AVR8/../Events.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/AVR8/../USBInterrupt.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/AVR8/../Endpoint.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/AVR8/../AVR8/Endpoint_AVR8.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/AVR8/../AVR8/../USBTask.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/AVR8/../AVR8/../USBInterrupt.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/AVR8/../AVR8/Device_AVR8.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/AVR8/../AVR8/../StdDescriptors.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/AVR8/../AVR8/../Endpoint.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/AVR8/../Endpoint.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/AVR8/../DeviceStandardReq.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/AVR8/../StdRequestType.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/AVR8/../USBTask.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/AVR8/../USBController.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/AVR8/../EndpointStream.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/AVR8/../AVR8/EndpointStream_AVR8.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/Events.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/StdRequestType.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/StdDescriptors.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/DeviceStandardReq.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/Events.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/StdDescriptors.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/ConfigDescriptors.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/HostStandardReq.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/USBController.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/USBInterrupt.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/Device.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/Endpoint.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/DeviceStandardReq.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Core/EndpointStream.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Class/AndroidAccessoryClass.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Class/../Core/USBMode.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Class/AudioClass.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Class/Device/AudioClassDevice.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Class/Device/../../USB.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Class/Device/../Common/AudioClassCommon.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Class/Device/../Common/../../Core/StdDescriptors.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Class/CDCClass.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Class/Device/CDCClassDevice.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Class/Device/../Common/CDCClassCommon.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Class/HIDClass.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Class/Device/HIDClassDevice.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Class/Device/../Common/HIDClassCommon.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Class/Device/../Common/HIDParser.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Class/Device/../Common/../../../../Common/Common.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Class/Device/../Common/HIDReportData.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Class/Device/../Common/HIDClassCommon.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Class/MassStorageClass.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Class/Device/MassStorageClassDevice.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Class/Device/../Common/MassStorageClassCommon.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Class/MIDIClass.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Class/Device/MIDIClassDevice.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Class/Device/../Common/MIDIClassCommon.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Class/Device/../Common/AudioClassCommon.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Class/PrinterClass.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Class/Device/PrinterClassDevice.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Class/Device/../Common/PrinterClassCommon.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Class/RNDISClass.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Class/Device/RNDISClassDevice.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Class/Device/../Common/RNDISClassCommon.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Class/Device/../Common/CDCClassCommon.h: + +../../../tools/lufa-LUFA-140928/LUFA/../LUFA/Drivers/USB/Class/StillImageClass.h: + +Config/AppConfig.h: diff --git a/avr/bootloaders/CDC/Descriptors.h b/avr/bootloaders/CDC/Descriptors.h new file mode 100644 index 0000000..ef04379 --- /dev/null +++ b/avr/bootloaders/CDC/Descriptors.h @@ -0,0 +1,158 @@ +/* + LUFA Library + Copyright (C) Dean Camera, 2014. + + dean [at] fourwalledcubicle [dot] com + www.lufa-lib.org +*/ + +/* + Copyright 2014 Dean Camera (dean [at] fourwalledcubicle [dot] com) + + Permission to use, copy, modify, distribute, and sell this + software and its documentation for any purpose is hereby granted + 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 disclaims 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 + + #include "Config/AppConfig.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_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 address for the CDC control interface event notification endpoint. */ + #define CDC_NOTIFICATION_EPADDR (ENDPOINT_DIR_IN | 2) + + /** Endpoint address for the CDC data interface TX (data IN) endpoint. */ + #define CDC_TX_EPADDR (ENDPOINT_DIR_IN | 3) + + /** Endpoint address for the CDC data interface RX (data OUT) endpoint. */ + #define CDC_RX_EPADDR (ENDPOINT_DIR_OUT | 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; + + /** Enum for the device interface descriptor IDs within the device. Each interface descriptor + * should have a unique ID index associated with it, which can be used to refer to the + * interface from other descriptors. + */ + enum InterfaceDescriptors_t + { + INTERFACE_ID_CDC_CCI = 0, /**< CDC CCI interface descriptor ID */ + INTERFACE_ID_CDC_DCI = 1, /**< CDC DCI interface descriptor ID */ + }; + + /** Enum for the device string descriptor IDs within the device. Each string descriptor should + * have a unique ID index associated with it, which can be used to refer to the string from + * other descriptors. + */ + enum StringDescriptors_t + { + STRING_ID_Language = 0, /**< Supported Languages string descriptor ID (must be zero) */ + STRING_ID_Manufacturer = 1, /**< Manufacturer string ID */ + STRING_ID_Product = 2, /**< Product string ID */ + }; + + /* 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/avr/bootloaders/CDC/Descriptors.o b/avr/bootloaders/CDC/Descriptors.o new file mode 100644 index 0000000000000000000000000000000000000000..33325c7817f74b0c489527cf43a93ca65d315f6f GIT binary patch literal 9708 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 G1^ydLxXn!f literal 0 HcmV?d00001 diff --git a/avr/bootloaders/CDC/LUFA CDC Bootloader.inf b/avr/bootloaders/CDC/LUFA CDC Bootloader.inf new file mode 100644 index 0000000..61624c7 --- /dev/null +++ b/avr/bootloaders/CDC/LUFA CDC Bootloader.inf @@ -0,0 +1,66 @@ +;************************************************************ +; Windows USB CDC ACM Setup File +; Copyright (c) 2000 Microsoft Corporation +;************************************************************ + +[DefaultInstall] +CopyINF="LUFA CDC Bootloader.inf" + +[Version] +Signature="$Windows NT$" +Class=Ports +ClassGuid={4D36E978-E325-11CE-BFC1-08002BE10318} +Provider=%MFGNAME% +DriverVer=7/1/2012,10.0.0.0 + +[Manufacturer] +%MFGNAME%=DeviceList, NTx86, NTamd64, NTia64 + +[SourceDisksNames] + +[SourceDisksFiles] + +[DestinationDirs] +DefaultDestDir=12 + +[DriverInstall] +Include=mdmcpq.inf +CopyFiles=FakeModemCopyFileSection +AddReg=DriverInstall.AddReg + +[DriverInstall.Services] +Include=mdmcpq.inf +AddService=usbser, 0x00000002, LowerFilter_Service_Inst + +[DriverInstall.AddReg] +HKR,,EnumPropPages32,,"msports.dll,SerialPortPropPageProvider" + +;------------------------------------------------------------------------------ +; Vendor and Product ID Definitions +;------------------------------------------------------------------------------ +; When developing your USB device, the VID and PID used in the PC side +; application program and the firmware on the microcontroller must match. +; Modify the below line to use your VID and PID. Use the format as shown below. +; Note: One INF file can be used for multiple devices with different VID and PIDs. +; For each supported device, append ",USB\VID_xxxx&PID_yyyy" to the end of the line. +;------------------------------------------------------------------------------ +[DeviceList] +%DESCRIPTION%=DriverInstall, USB\VID_03EB&PID_204A + +[DeviceList.NTx86] +%DESCRIPTION%=DriverInstall, USB\VID_03EB&PID_204A + +[DeviceList.NTamd64] +%DESCRIPTION%=DriverInstall, USB\VID_03EB&PID_204A + +[DeviceList.NTia64] +%DESCRIPTION%=DriverInstall, USB\VID_03EB&PID_204A + +;------------------------------------------------------------------------------ +; String Definitions +;------------------------------------------------------------------------------ +;Modify these strings to customize your device +;------------------------------------------------------------------------------ +[Strings] +MFGNAME="http://www.lufa-lib.org" +DESCRIPTION="LUFA CDC Class Bootloader" diff --git a/avr/bootloaders/CDC/asf.xml b/avr/bootloaders/CDC/asf.xml new file mode 100644 index 0000000..02e7063 --- /dev/null +++ b/avr/bootloaders/CDC/asf.xml @@ -0,0 +1,161 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CDC Class Bootloader, capable of reprogramming a device using avrdude or other AVR109 protocol compliant software when plugged into a host. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/avr/bootloaders/CDC/doxyfile b/avr/bootloaders/CDC/doxyfile new file mode 100644 index 0000000..2dfb2a0 --- /dev/null +++ b/avr/bootloaders/CDC/doxyfile @@ -0,0 +1,2365 @@ +# Doxyfile 1.8.8 + +# This file describes the settings to be used by the documentation system +# doxygen (www.doxygen.org) for a project. +# +# All text after a double hash (##) is considered a comment and is placed in +# front of the TAG it is preceding. +# +# All text after a single hash (#) is considered a comment and will be ignored. +# The format is: +# TAG = value [value, ...] +# For lists, items can also be appended using: +# TAG += value [value, ...] +# Values that contain spaces should be placed between quotes (\" \"). + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- + +# This tag specifies the encoding used for all characters in the config file +# that follow. The default is UTF-8 which is also the encoding used for all text +# before the first occurrence of this tag. Doxygen uses libiconv (or the iconv +# built into libc) for the transcoding. See http://www.gnu.org/software/libiconv +# for the list of possible encodings. +# The default value is: UTF-8. + +DOXYFILE_ENCODING = UTF-8 + +# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by +# double-quotes, unless you are using Doxywizard) that should identify the +# project for which the documentation is generated. This name is used in the +# title of most generated pages and in a few other places. +# The default value is: My Project. + +PROJECT_NAME = "LUFA Library - CDC Class Bootloader" + +# The PROJECT_NUMBER tag can be used to enter a project or revision number. This +# could be handy for archiving the generated documentation or if some version +# control system is used. + +PROJECT_NUMBER = + +# Using the PROJECT_BRIEF tag one can provide an optional one line description +# for a project that appears at the top of each page and should give viewer a +# quick idea about the purpose of the project. Keep the description short. + +PROJECT_BRIEF = + +# With the PROJECT_LOGO tag one can specify an logo or icon that is included in +# the documentation. The maximum height of the logo should not exceed 55 pixels +# and the maximum width should not exceed 200 pixels. Doxygen will copy the logo +# to the output directory. + +PROJECT_LOGO = + +# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path +# into which the generated documentation will be written. If a relative path is +# entered, it will be relative to the location where doxygen was started. If +# left blank the current directory will be used. + +OUTPUT_DIRECTORY = ./Documentation/ + +# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create 4096 sub- +# directories (in 2 levels) under the output directory of each output format and +# will distribute the generated files over these directories. Enabling this +# option can be useful when feeding doxygen a huge amount of source files, where +# putting all generated files in the same directory would otherwise causes +# performance problems for the file system. +# The default value is: NO. + +CREATE_SUBDIRS = NO + +# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII +# characters to appear in the names of generated files. If set to NO, non-ASCII +# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode +# U+3044. +# The default value is: NO. + +ALLOW_UNICODE_NAMES = NO + +# The OUTPUT_LANGUAGE tag is used to specify the language in which all +# documentation generated by doxygen is written. Doxygen will use this +# information to generate all constant output in the proper language. +# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, +# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), +# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, +# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), +# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, +# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, +# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, +# Ukrainian and Vietnamese. +# The default value is: English. + +OUTPUT_LANGUAGE = English + +# If the BRIEF_MEMBER_DESC tag is set to YES doxygen will include brief member +# descriptions after the members that are listed in the file and class +# documentation (similar to Javadoc). Set to NO to disable this. +# The default value is: YES. + +BRIEF_MEMBER_DESC = YES + +# If the REPEAT_BRIEF tag is set to YES doxygen will prepend the brief +# description of a member or function before the detailed description +# +# Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the +# brief descriptions will be completely suppressed. +# The default value is: YES. + +REPEAT_BRIEF = YES + +# This tag implements a quasi-intelligent brief description abbreviator that is +# used to form the text in various listings. Each string in this list, if found +# as the leading text of the brief description, will be stripped from the text +# and the result, after processing the whole list, is used as the annotated +# text. Otherwise, the brief description is used as-is. If left blank, the +# following values are used ($name is automatically replaced with the name of +# the entity):The $name class, The $name widget, The $name file, is, provides, +# specifies, contains, represents, a, an and the. + +ABBREVIATE_BRIEF = "The $name class" \ + "The $name widget" \ + "The $name file" \ + is \ + provides \ + specifies \ + contains \ + represents \ + a \ + an \ + the + +# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then +# doxygen will generate a detailed section even if there is only a brief +# description. +# The default value is: NO. + +ALWAYS_DETAILED_SEC = NO + +# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all +# inherited members of a class in the documentation of that class as if those +# members were ordinary class members. Constructors, destructors and assignment +# operators of the base classes will not be shown. +# The default value is: NO. + +INLINE_INHERITED_MEMB = NO + +# If the FULL_PATH_NAMES tag is set to YES doxygen will prepend the full path +# before files name in the file list and in the header files. If set to NO the +# shortest path that makes the file name unique will be used +# The default value is: YES. + +FULL_PATH_NAMES = YES + +# The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path. +# Stripping is only done if one of the specified strings matches the left-hand +# part of the path. The tag can be used to show relative paths in the file list. +# If left blank the directory from which doxygen is run is used as the path to +# strip. +# +# Note that you can specify absolute paths here, but also relative paths, which +# will be relative from the directory where doxygen is started. +# This tag requires that the tag FULL_PATH_NAMES is set to YES. + +STRIP_FROM_PATH = + +# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the +# path mentioned in the documentation of a class, which tells the reader which +# header file to include in order to use a class. If left blank only the name of +# the header file containing the class definition is used. Otherwise one should +# specify the list of include paths that are normally passed to the compiler +# using the -I flag. + +STRIP_FROM_INC_PATH = + +# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but +# less readable) file names. This can be useful is your file systems doesn't +# support long names like on DOS, Mac, or CD-ROM. +# The default value is: NO. + +SHORT_NAMES = YES + +# If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the +# first line (until the first dot) of a Javadoc-style comment as the brief +# description. If set to NO, the Javadoc-style will behave just like regular Qt- +# style comments (thus requiring an explicit @brief command for a brief +# description.) +# The default value is: NO. + +JAVADOC_AUTOBRIEF = NO + +# If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first +# line (until the first dot) of a Qt-style comment as the brief description. If +# set to NO, the Qt-style will behave just like regular Qt-style comments (thus +# requiring an explicit \brief command for a brief description.) +# The default value is: NO. + +QT_AUTOBRIEF = NO + +# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a +# multi-line C++ special comment block (i.e. a block of //! or /// comments) as +# a brief description. This used to be the default behavior. The new default is +# to treat a multi-line C++ comment block as a detailed description. Set this +# tag to YES if you prefer the old behavior instead. +# +# Note that setting this tag to YES also means that rational rose comments are +# not recognized any more. +# The default value is: NO. + +MULTILINE_CPP_IS_BRIEF = NO + +# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the +# documentation from any documented member that it re-implements. +# The default value is: YES. + +INHERIT_DOCS = YES + +# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce a +# new page for each member. If set to NO, the documentation of a member will be +# part of the file/class/namespace that contains it. +# The default value is: NO. + +SEPARATE_MEMBER_PAGES = NO + +# The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen +# uses this value to replace tabs by spaces in code fragments. +# Minimum value: 1, maximum value: 16, default value: 4. + +TAB_SIZE = 4 + +# This tag can be used to specify a number of aliases that act as commands in +# the documentation. An alias has the form: +# name=value +# For example adding +# "sideeffect=@par Side Effects:\n" +# will allow you to put the command \sideeffect (or @sideeffect) in the +# documentation, which will result in a user-defined paragraph with heading +# "Side Effects:". You can put \n's in the value part of an alias to insert +# newlines. + +ALIASES = + +# This tag can be used to specify a number of word-keyword mappings (TCL only). +# A mapping has the form "name=value". For example adding "class=itcl::class" +# will allow you to use the command class in the itcl::class meaning. + +TCL_SUBST = + +# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources +# only. Doxygen will then generate output that is more tailored for C. For +# instance, some of the names that are used will be different. The list of all +# members will be omitted, etc. +# The default value is: NO. + +OPTIMIZE_OUTPUT_FOR_C = YES + +# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or +# Python sources only. Doxygen will then generate output that is more tailored +# for that language. For instance, namespaces will be presented as packages, +# qualified scopes will look different, etc. +# The default value is: NO. + +OPTIMIZE_OUTPUT_JAVA = NO + +# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran +# sources. Doxygen will then generate output that is tailored for Fortran. +# The default value is: NO. + +OPTIMIZE_FOR_FORTRAN = NO + +# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL +# sources. Doxygen will then generate output that is tailored for VHDL. +# The default value is: NO. + +OPTIMIZE_OUTPUT_VHDL = NO + +# Doxygen selects the parser to use depending on the extension of the files it +# parses. With this tag you can assign which parser to use for a given +# extension. Doxygen has a built-in mapping, but you can override or extend it +# using this tag. The format is ext=language, where ext is a file extension, and +# language is one of the parsers supported by doxygen: IDL, Java, Javascript, +# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran: +# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran: +# Fortran. In the later case the parser tries to guess whether the code is fixed +# or free formatted code, this is the default for Fortran type files), VHDL. For +# instance to make doxygen treat .inc files as Fortran files (default is PHP), +# and .f files as C (default is Fortran), use: inc=Fortran f=C. +# +# Note For files without extension you can use no_extension as a placeholder. +# +# Note that for custom extensions you also need to set FILE_PATTERNS otherwise +# the files are not read by doxygen. + +EXTENSION_MAPPING = + +# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments +# according to the Markdown format, which allows for more readable +# documentation. See http://daringfireball.net/projects/markdown/ for details. +# The output of markdown processing is further processed by doxygen, so you can +# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in +# case of backward compatibilities issues. +# The default value is: YES. + +MARKDOWN_SUPPORT = NO + +# When enabled doxygen tries to link words that correspond to documented +# classes, or namespaces to their corresponding documentation. Such a link can +# be prevented in individual cases by by putting a % sign in front of the word +# or globally by setting AUTOLINK_SUPPORT to NO. +# The default value is: YES. + +AUTOLINK_SUPPORT = YES + +# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want +# to include (a tag file for) the STL sources as input, then you should set this +# tag to YES in order to let doxygen match functions declarations and +# definitions whose arguments contain STL classes (e.g. func(std::string); +# versus func(std::string) {}). This also make the inheritance and collaboration +# diagrams that involve STL classes more complete and accurate. +# The default value is: NO. + +BUILTIN_STL_SUPPORT = NO + +# If you use Microsoft's C++/CLI language, you should set this option to YES to +# enable parsing support. +# The default value is: NO. + +CPP_CLI_SUPPORT = NO + +# Set the SIP_SUPPORT tag to YES if your project consists of sip (see: +# http://www.riverbankcomputing.co.uk/software/sip/intro) sources only. Doxygen +# will parse them like normal C++ but will assume all classes use public instead +# of private inheritance when no explicit protection keyword is present. +# The default value is: NO. + +SIP_SUPPORT = NO + +# For Microsoft's IDL there are propget and propput attributes to indicate +# getter and setter methods for a property. Setting this option to YES will make +# doxygen to replace the get and set methods by a property in the documentation. +# This will only work if the methods are indeed getting or setting a simple +# type. If this is not the case, or you want to show the methods anyway, you +# should set this option to NO. +# The default value is: YES. + +IDL_PROPERTY_SUPPORT = YES + +# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC +# tag is set to YES, then doxygen will reuse the documentation of the first +# member in the group (if any) for the other members of the group. By default +# all members of a group must be documented explicitly. +# The default value is: NO. + +DISTRIBUTE_GROUP_DOC = NO + +# Set the SUBGROUPING tag to YES to allow class member groups of the same type +# (for instance a group of public functions) to be put as a subgroup of that +# type (e.g. under the Public Functions section). Set it to NO to prevent +# subgrouping. Alternatively, this can be done per class using the +# \nosubgrouping command. +# The default value is: YES. + +SUBGROUPING = YES + +# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions +# are shown inside the group in which they are included (e.g. using \ingroup) +# instead of on a separate page (for HTML and Man pages) or section (for LaTeX +# and RTF). +# +# Note that this feature does not work in combination with +# SEPARATE_MEMBER_PAGES. +# The default value is: NO. + +INLINE_GROUPED_CLASSES = NO + +# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions +# with only public data fields or simple typedef fields will be shown inline in +# the documentation of the scope in which they are defined (i.e. file, +# namespace, or group documentation), provided this scope is documented. If set +# to NO, structs, classes, and unions are shown on a separate page (for HTML and +# Man pages) or section (for LaTeX and RTF). +# The default value is: NO. + +INLINE_SIMPLE_STRUCTS = NO + +# When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or +# enum is documented as struct, union, or enum with the name of the typedef. So +# typedef struct TypeS {} TypeT, will appear in the documentation as a struct +# with name TypeT. When disabled the typedef will appear as a member of a file, +# namespace, or class. And the struct will be named TypeS. This can typically be +# useful for C code in case the coding convention dictates that all compound +# types are typedef'ed and only the typedef is referenced, never the tag name. +# The default value is: NO. + +TYPEDEF_HIDES_STRUCT = NO + +# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This +# cache is used to resolve symbols given their name and scope. Since this can be +# an expensive process and often the same symbol appears multiple times in the +# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small +# doxygen will become slower. If the cache is too large, memory is wasted. The +# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range +# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 +# symbols. At the end of a run doxygen will report the cache usage and suggest +# the optimal cache size from a speed point of view. +# Minimum value: 0, maximum value: 9, default value: 0. + +LOOKUP_CACHE_SIZE = 0 + +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- + +# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in +# documentation are documented, even if no documentation was available. Private +# class members and static file members will be hidden unless the +# EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES. +# Note: This will also disable the warnings about undocumented members that are +# normally produced when WARNINGS is set to YES. +# The default value is: NO. + +EXTRACT_ALL = YES + +# If the EXTRACT_PRIVATE tag is set to YES all private members of a class will +# be included in the documentation. +# The default value is: NO. + +EXTRACT_PRIVATE = YES + +# If the EXTRACT_PACKAGE tag is set to YES all members with package or internal +# scope will be included in the documentation. +# The default value is: NO. + +EXTRACT_PACKAGE = NO + +# If the EXTRACT_STATIC tag is set to YES all static members of a file will be +# included in the documentation. +# The default value is: NO. + +EXTRACT_STATIC = YES + +# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) defined +# locally in source files will be included in the documentation. If set to NO +# only classes defined in header files are included. Does not have any effect +# for Java sources. +# The default value is: YES. + +EXTRACT_LOCAL_CLASSES = YES + +# This flag is only useful for Objective-C code. When set to YES local methods, +# which are defined in the implementation section but not in the interface are +# included in the documentation. If set to NO only methods in the interface are +# included. +# The default value is: NO. + +EXTRACT_LOCAL_METHODS = NO + +# If this flag is set to YES, the members of anonymous namespaces will be +# extracted and appear in the documentation as a namespace called +# 'anonymous_namespace{file}', where file will be replaced with the base name of +# the file that contains the anonymous namespace. By default anonymous namespace +# are hidden. +# The default value is: NO. + +EXTRACT_ANON_NSPACES = NO + +# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all +# undocumented members inside documented classes or files. If set to NO these +# members will be included in the various overviews, but no documentation +# section is generated. This option has no effect if EXTRACT_ALL is enabled. +# The default value is: NO. + +HIDE_UNDOC_MEMBERS = NO + +# If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all +# undocumented classes that are normally visible in the class hierarchy. If set +# to NO these classes will be included in the various overviews. This option has +# no effect if EXTRACT_ALL is enabled. +# The default value is: NO. + +HIDE_UNDOC_CLASSES = NO + +# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend +# (class|struct|union) declarations. If set to NO these declarations will be +# included in the documentation. +# The default value is: NO. + +HIDE_FRIEND_COMPOUNDS = NO + +# If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any +# documentation blocks found inside the body of a function. If set to NO these +# blocks will be appended to the function's detailed documentation block. +# The default value is: NO. + +HIDE_IN_BODY_DOCS = NO + +# The INTERNAL_DOCS tag determines if documentation that is typed after a +# \internal command is included. If the tag is set to NO then the documentation +# will be excluded. Set it to YES to include the internal documentation. +# The default value is: NO. + +INTERNAL_DOCS = NO + +# If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file +# names in lower-case letters. If set to YES upper-case letters are also +# allowed. This is useful if you have classes or files whose names only differ +# in case and if your file system supports case sensitive file names. Windows +# and Mac users are advised to set this option to NO. +# The default value is: system dependent. + +CASE_SENSE_NAMES = NO + +# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with +# their full class and namespace scopes in the documentation. If set to YES the +# scope will be hidden. +# The default value is: NO. + +HIDE_SCOPE_NAMES = NO + +# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of +# the files that are included by a file in the documentation of that file. +# The default value is: YES. + +SHOW_INCLUDE_FILES = YES + +# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each +# grouped member an include statement to the documentation, telling the reader +# which file to include in order to use the member. +# The default value is: NO. + +SHOW_GROUPED_MEMB_INC = NO + +# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include +# files with double quotes in the documentation rather than with sharp brackets. +# The default value is: NO. + +FORCE_LOCAL_INCLUDES = NO + +# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the +# documentation for inline members. +# The default value is: YES. + +INLINE_INFO = YES + +# If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the +# (detailed) documentation of file and class members alphabetically by member +# name. If set to NO the members will appear in declaration order. +# The default value is: YES. + +SORT_MEMBER_DOCS = YES + +# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief +# descriptions of file, namespace and class members alphabetically by member +# name. If set to NO the members will appear in declaration order. Note that +# this will also influence the order of the classes in the class list. +# The default value is: NO. + +SORT_BRIEF_DOCS = NO + +# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the +# (brief and detailed) documentation of class members so that constructors and +# destructors are listed first. If set to NO the constructors will appear in the +# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. +# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief +# member documentation. +# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting +# detailed member documentation. +# The default value is: NO. + +SORT_MEMBERS_CTORS_1ST = NO + +# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy +# of group names into alphabetical order. If set to NO the group names will +# appear in their defined order. +# The default value is: NO. + +SORT_GROUP_NAMES = NO + +# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by +# fully-qualified names, including namespaces. If set to NO, the class list will +# be sorted only by class name, not including the namespace part. +# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. +# Note: This option applies only to the class list, not to the alphabetical +# list. +# The default value is: NO. + +SORT_BY_SCOPE_NAME = NO + +# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper +# type resolution of all parameters of a function it will reject a match between +# the prototype and the implementation of a member function even if there is +# only one candidate or it is obvious which candidate to choose by doing a +# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still +# accept a match between prototype and implementation in such cases. +# The default value is: NO. + +STRICT_PROTO_MATCHING = NO + +# The GENERATE_TODOLIST tag can be used to enable ( YES) or disable ( NO) the +# todo list. This list is created by putting \todo commands in the +# documentation. +# The default value is: YES. + +GENERATE_TODOLIST = NO + +# The GENERATE_TESTLIST tag can be used to enable ( YES) or disable ( NO) the +# test list. This list is created by putting \test commands in the +# documentation. +# The default value is: YES. + +GENERATE_TESTLIST = NO + +# The GENERATE_BUGLIST tag can be used to enable ( YES) or disable ( NO) the bug +# list. This list is created by putting \bug commands in the documentation. +# The default value is: YES. + +GENERATE_BUGLIST = NO + +# The GENERATE_DEPRECATEDLIST tag can be used to enable ( YES) or disable ( NO) +# the deprecated list. This list is created by putting \deprecated commands in +# the documentation. +# The default value is: YES. + +GENERATE_DEPRECATEDLIST= YES + +# The ENABLED_SECTIONS tag can be used to enable conditional documentation +# sections, marked by \if ... \endif and \cond +# ... \endcond blocks. + +ENABLED_SECTIONS = + +# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the +# initial value of a variable or macro / define can have for it to appear in the +# documentation. If the initializer consists of more lines than specified here +# it will be hidden. Use a value of 0 to hide initializers completely. The +# appearance of the value of individual variables and macros / defines can be +# controlled using \showinitializer or \hideinitializer command in the +# documentation regardless of this setting. +# Minimum value: 0, maximum value: 10000, default value: 30. + +MAX_INITIALIZER_LINES = 30 + +# Set the SHOW_USED_FILES tag to NO to disable the list of files generated at +# the bottom of the documentation of classes and structs. If set to YES the list +# will mention the files that were used to generate the documentation. +# The default value is: YES. + +SHOW_USED_FILES = YES + +# Set the SHOW_FILES tag to NO to disable the generation of the Files page. This +# will remove the Files entry from the Quick Index and from the Folder Tree View +# (if specified). +# The default value is: YES. + +SHOW_FILES = YES + +# Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces +# page. This will remove the Namespaces entry from the Quick Index and from the +# Folder Tree View (if specified). +# The default value is: YES. + +SHOW_NAMESPACES = YES + +# The FILE_VERSION_FILTER tag can be used to specify a program or script that +# doxygen should invoke to get the current version for each file (typically from +# the version control system). Doxygen will invoke the program by executing (via +# popen()) the command command input-file, where command is the value of the +# FILE_VERSION_FILTER tag, and input-file is the name of an input file provided +# by doxygen. Whatever the program writes to standard output is used as the file +# version. For an example see the documentation. + +FILE_VERSION_FILTER = + +# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed +# by doxygen. The layout file controls the global structure of the generated +# output files in an output format independent way. To create the layout file +# that represents doxygen's defaults, run doxygen with the -l option. You can +# optionally specify a file name after the option, if omitted DoxygenLayout.xml +# will be used as the name of the layout file. +# +# Note that if you run doxygen from a directory containing a file called +# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE +# tag is left empty. + +LAYOUT_FILE = + +# The CITE_BIB_FILES tag can be used to specify one or more bib files containing +# the reference definitions. This must be a list of .bib files. The .bib +# extension is automatically appended if omitted. This requires the bibtex tool +# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info. +# For LaTeX the style of the bibliography can be controlled using +# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the +# search path. See also \cite for info how to create references. + +CITE_BIB_FILES = + +#--------------------------------------------------------------------------- +# Configuration options related to warning and progress messages +#--------------------------------------------------------------------------- + +# The QUIET tag can be used to turn on/off the messages that are generated to +# standard output by doxygen. If QUIET is set to YES this implies that the +# messages are off. +# The default value is: NO. + +QUIET = YES + +# The WARNINGS tag can be used to turn on/off the warning messages that are +# generated to standard error ( stderr) by doxygen. If WARNINGS is set to YES +# this implies that the warnings are on. +# +# Tip: Turn warnings on while writing the documentation. +# The default value is: YES. + +WARNINGS = YES + +# If the WARN_IF_UNDOCUMENTED tag is set to YES, then doxygen will generate +# warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag +# will automatically be disabled. +# The default value is: YES. + +WARN_IF_UNDOCUMENTED = YES + +# If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for +# potential errors in the documentation, such as not documenting some parameters +# in a documented function, or documenting parameters that don't exist or using +# markup commands wrongly. +# The default value is: YES. + +WARN_IF_DOC_ERROR = YES + +# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that +# are documented, but have no documentation for their parameters or return +# value. If set to NO doxygen will only warn about wrong or incomplete parameter +# documentation, but not about the absence of documentation. +# The default value is: NO. + +WARN_NO_PARAMDOC = YES + +# The WARN_FORMAT tag determines the format of the warning messages that doxygen +# can produce. The string should contain the $file, $line, and $text tags, which +# will be replaced by the file and line number from which the warning originated +# and the warning text. Optionally the format may contain $version, which will +# be replaced by the version of the file (if it could be obtained via +# FILE_VERSION_FILTER) +# The default value is: $file:$line: $text. + +WARN_FORMAT = "$file:$line: $text" + +# The WARN_LOGFILE tag can be used to specify a file to which warning and error +# messages should be written. If left blank the output is written to standard +# error (stderr). + +WARN_LOGFILE = + +#--------------------------------------------------------------------------- +# Configuration options related to the input files +#--------------------------------------------------------------------------- + +# The INPUT tag is used to specify the files and/or directories that contain +# documented source files. You may enter file names like myfile.cpp or +# directories like /usr/src/myproject. Separate the files or directories with +# spaces. +# Note: If this tag is empty the current directory is searched. + +INPUT = ./ + +# This tag can be used to specify the character encoding of the source files +# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses +# libiconv (or the iconv built into libc) for the transcoding. See the libiconv +# documentation (see: http://www.gnu.org/software/libiconv) for the list of +# possible encodings. +# The default value is: UTF-8. + +INPUT_ENCODING = UTF-8 + +# If the value of the INPUT tag contains directories, you can use the +# FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and +# *.h) to filter out the source-files in the directories. If left blank the +# following patterns are tested:*.c, *.cc, *.cxx, *.cpp, *.c++, *.java, *.ii, +# *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp, +# *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown, +# *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf, +# *.qsf, *.as and *.js. + +FILE_PATTERNS = *.h \ + *.c \ + *.txt + +# The RECURSIVE tag can be used to specify whether or not subdirectories should +# be searched for input files as well. +# The default value is: NO. + +RECURSIVE = YES + +# The EXCLUDE tag can be used to specify files and/or directories that should be +# excluded from the INPUT source files. This way you can easily exclude a +# subdirectory from a directory tree whose root is specified with the INPUT tag. +# +# Note that relative paths are relative to the directory from which doxygen is +# run. + +EXCLUDE = Documentation/ + +# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or +# directories that are symbolic links (a Unix file system feature) are excluded +# from the input. +# The default value is: NO. + +EXCLUDE_SYMLINKS = NO + +# If the value of the INPUT tag contains directories, you can use the +# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude +# certain files from those directories. +# +# Note that the wildcards are matched against the file with absolute path, so to +# exclude all test directories for example use the pattern */test/* + +EXCLUDE_PATTERNS = + +# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names +# (namespaces, classes, functions, etc.) that should be excluded from the +# output. The symbol name can be a fully qualified name, a word, or if the +# wildcard * is used, a substring. Examples: ANamespace, AClass, +# AClass::ANamespace, ANamespace::*Test +# +# Note that the wildcards are matched against the file with absolute path, so to +# exclude all test directories use the pattern */test/* + +EXCLUDE_SYMBOLS = __* \ + INCLUDE_FROM_* + +# The EXAMPLE_PATH tag can be used to specify one or more files or directories +# that contain example code fragments that are included (see the \include +# command). + +EXAMPLE_PATH = + +# If the value of the EXAMPLE_PATH tag contains directories, you can use the +# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and +# *.h) to filter out the source-files in the directories. If left blank all +# files are included. + +EXAMPLE_PATTERNS = * + +# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be +# searched for input files to be used with the \include or \dontinclude commands +# irrespective of the value of the RECURSIVE tag. +# The default value is: NO. + +EXAMPLE_RECURSIVE = NO + +# The IMAGE_PATH tag can be used to specify one or more files or directories +# that contain images that are to be included in the documentation (see the +# \image command). + +IMAGE_PATH = + +# The INPUT_FILTER tag can be used to specify a program that doxygen should +# invoke to filter for each input file. Doxygen will invoke the filter program +# by executing (via popen()) the command: +# +# +# +# where is the value of the INPUT_FILTER tag, and is the +# name of an input file. Doxygen will then use the output that the filter +# program writes to standard output. If FILTER_PATTERNS is specified, this tag +# will be ignored. +# +# Note that the filter must not add or remove lines; it is applied before the +# code is scanned, but not when the output code is generated. If lines are added +# or removed, the anchors will not be placed correctly. + +INPUT_FILTER = + +# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern +# basis. Doxygen will compare the file name with each pattern and apply the +# filter if there is a match. The filters are a list of the form: pattern=filter +# (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how +# filters are used. If the FILTER_PATTERNS tag is empty or if none of the +# patterns match the file name, INPUT_FILTER is applied. + +FILTER_PATTERNS = + +# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using +# INPUT_FILTER ) will also be used to filter the input files that are used for +# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). +# The default value is: NO. + +FILTER_SOURCE_FILES = NO + +# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file +# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and +# it is also possible to disable source filtering for a specific pattern using +# *.ext= (so without naming a filter). +# This tag requires that the tag FILTER_SOURCE_FILES is set to YES. + +FILTER_SOURCE_PATTERNS = + +# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that +# is part of the input, its contents will be placed on the main page +# (index.html). This can be useful if you have a project on for instance GitHub +# and want to reuse the introduction page also for the doxygen output. + +USE_MDFILE_AS_MAINPAGE = + +#--------------------------------------------------------------------------- +# Configuration options related to source browsing +#--------------------------------------------------------------------------- + +# If the SOURCE_BROWSER tag is set to YES then a list of source files will be +# generated. Documented entities will be cross-referenced with these sources. +# +# Note: To get rid of all source code in the generated output, make sure that +# also VERBATIM_HEADERS is set to NO. +# The default value is: NO. + +SOURCE_BROWSER = NO + +# Setting the INLINE_SOURCES tag to YES will include the body of functions, +# classes and enums directly into the documentation. +# The default value is: NO. + +INLINE_SOURCES = NO + +# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any +# special comment blocks from generated source code fragments. Normal C, C++ and +# Fortran comments will always remain visible. +# The default value is: YES. + +STRIP_CODE_COMMENTS = YES + +# If the REFERENCED_BY_RELATION tag is set to YES then for each documented +# function all documented functions referencing it will be listed. +# The default value is: NO. + +REFERENCED_BY_RELATION = NO + +# If the REFERENCES_RELATION tag is set to YES then for each documented function +# all documented entities called/used by that function will be listed. +# The default value is: NO. + +REFERENCES_RELATION = NO + +# If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set +# to YES, then the hyperlinks from functions in REFERENCES_RELATION and +# REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will +# link to the documentation. +# The default value is: YES. + +REFERENCES_LINK_SOURCE = NO + +# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the +# source code will show a tooltip with additional information such as prototype, +# brief description and links to the definition and documentation. Since this +# will make the HTML file larger and loading of large files a bit slower, you +# can opt to disable this feature. +# The default value is: YES. +# This tag requires that the tag SOURCE_BROWSER is set to YES. + +SOURCE_TOOLTIPS = YES + +# If the USE_HTAGS tag is set to YES then the references to source code will +# point to the HTML generated by the htags(1) tool instead of doxygen built-in +# source browser. The htags tool is part of GNU's global source tagging system +# (see http://www.gnu.org/software/global/global.html). You will need version +# 4.8.6 or higher. +# +# To use it do the following: +# - Install the latest version of global +# - Enable SOURCE_BROWSER and USE_HTAGS in the config file +# - Make sure the INPUT points to the root of the source tree +# - Run doxygen as normal +# +# Doxygen will invoke htags (and that will in turn invoke gtags), so these +# tools must be available from the command line (i.e. in the search path). +# +# The result: instead of the source browser generated by doxygen, the links to +# source code will now point to the output of htags. +# The default value is: NO. +# This tag requires that the tag SOURCE_BROWSER is set to YES. + +USE_HTAGS = NO + +# If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a +# verbatim copy of the header file for each class for which an include is +# specified. Set to NO to disable this. +# See also: Section \class. +# The default value is: YES. + +VERBATIM_HEADERS = NO + +# If the CLANG_ASSISTED_PARSING tag is set to YES, then doxygen will use the +# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the +# cost of reduced performance. This can be particularly helpful with template +# rich C++ code for which doxygen's built-in parser lacks the necessary type +# information. +# Note: The availability of this option depends on whether or not doxygen was +# compiled with the --with-libclang option. +# The default value is: NO. + +CLANG_ASSISTED_PARSING = NO + +# If clang assisted parsing is enabled you can provide the compiler with command +# line options that you would normally use when invoking the compiler. Note that +# the include paths will already be set by doxygen for the files and directories +# specified with INPUT and INCLUDE_PATH. +# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES. + +CLANG_OPTIONS = + +#--------------------------------------------------------------------------- +# Configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- + +# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all +# compounds will be generated. Enable this if the project contains a lot of +# classes, structs, unions or interfaces. +# The default value is: YES. + +ALPHABETICAL_INDEX = YES + +# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in +# which the alphabetical index list will be split. +# Minimum value: 1, maximum value: 20, default value: 5. +# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. + +COLS_IN_ALPHA_INDEX = 5 + +# In case all classes in a project start with a common prefix, all classes will +# be put under the same header in the alphabetical index. The IGNORE_PREFIX tag +# can be used to specify a prefix (or a list of prefixes) that should be ignored +# while generating the index headers. +# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. + +IGNORE_PREFIX = + +#--------------------------------------------------------------------------- +# Configuration options related to the HTML output +#--------------------------------------------------------------------------- + +# If the GENERATE_HTML tag is set to YES doxygen will generate HTML output +# The default value is: YES. + +GENERATE_HTML = YES + +# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a +# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of +# it. +# The default directory is: html. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_OUTPUT = html + +# The HTML_FILE_EXTENSION tag can be used to specify the file extension for each +# generated HTML page (for example: .htm, .php, .asp). +# The default value is: .html. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_FILE_EXTENSION = .html + +# The HTML_HEADER tag can be used to specify a user-defined HTML header file for +# each generated HTML page. If the tag is left blank doxygen will generate a +# standard header. +# +# To get valid HTML the header file that includes any scripts and style sheets +# that doxygen needs, which is dependent on the configuration options used (e.g. +# the setting GENERATE_TREEVIEW). It is highly recommended to start with a +# default header using +# doxygen -w html new_header.html new_footer.html new_stylesheet.css +# YourConfigFile +# and then modify the file new_header.html. See also section "Doxygen usage" +# for information on how to generate the default header that doxygen normally +# uses. +# Note: The header is subject to change so you typically have to regenerate the +# default header when upgrading to a newer version of doxygen. For a description +# of the possible markers and block names see the documentation. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_HEADER = + +# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each +# generated HTML page. If the tag is left blank doxygen will generate a standard +# footer. See HTML_HEADER for more information on how to generate a default +# footer and what special commands can be used inside the footer. See also +# section "Doxygen usage" for information on how to generate the default footer +# that doxygen normally uses. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_FOOTER = + +# The HTML_STYLESHEET tag can be used to specify a user-defined cascading style +# sheet that is used by each HTML page. It can be used to fine-tune the look of +# the HTML output. If left blank doxygen will generate a default style sheet. +# See also section "Doxygen usage" for information on how to generate the style +# sheet that doxygen normally uses. +# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as +# it is more robust and this tag (HTML_STYLESHEET) will in the future become +# obsolete. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_STYLESHEET = + +# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined +# cascading style sheets that are included after the standard style sheets +# created by doxygen. Using this option one can overrule certain style aspects. +# This is preferred over using HTML_STYLESHEET since it does not replace the +# standard style sheet and is therefor more robust against future updates. +# Doxygen will copy the style sheet files to the output directory. +# Note: The order of the extra stylesheet files is of importance (e.g. the last +# stylesheet in the list overrules the setting of the previous ones in the +# list). For an example see the documentation. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_EXTRA_STYLESHEET = + +# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or +# other source files which should be copied to the HTML output directory. Note +# that these files will be copied to the base HTML output directory. Use the +# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these +# files. In the HTML_STYLESHEET file, use the file name only. Also note that the +# files will be copied as-is; there are no commands or markers available. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_EXTRA_FILES = + +# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen +# will adjust the colors in the stylesheet and background images according to +# this color. Hue is specified as an angle on a colorwheel, see +# http://en.wikipedia.org/wiki/Hue for more information. For instance the value +# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 +# purple, and 360 is red again. +# Minimum value: 0, maximum value: 359, default value: 220. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COLORSTYLE_HUE = 220 + +# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors +# in the HTML output. For a value of 0 the output will use grayscales only. A +# value of 255 will produce the most vivid colors. +# Minimum value: 0, maximum value: 255, default value: 100. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COLORSTYLE_SAT = 100 + +# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the +# luminance component of the colors in the HTML output. Values below 100 +# gradually make the output lighter, whereas values above 100 make the output +# darker. The value divided by 100 is the actual gamma applied, so 80 represents +# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not +# change the gamma. +# Minimum value: 40, maximum value: 240, default value: 80. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COLORSTYLE_GAMMA = 80 + +# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML +# page will contain the date and time when the page was generated. Setting this +# to NO can help when comparing the output of multiple runs. +# The default value is: YES. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_TIMESTAMP = NO + +# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML +# documentation will contain sections that can be hidden and shown after the +# page has loaded. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_DYNAMIC_SECTIONS = YES + +# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries +# shown in the various tree structured indices initially; the user can expand +# and collapse entries dynamically later on. Doxygen will expand the tree to +# such a level that at most the specified number of entries are visible (unless +# a fully collapsed tree already exceeds this amount). So setting the number of +# entries 1 will produce a full collapsed tree by default. 0 is a special value +# representing an infinite number of entries and will result in a full expanded +# tree by default. +# Minimum value: 0, maximum value: 9999, default value: 100. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_INDEX_NUM_ENTRIES = 100 + +# If the GENERATE_DOCSET tag is set to YES, additional index files will be +# generated that can be used as input for Apple's Xcode 3 integrated development +# environment (see: http://developer.apple.com/tools/xcode/), introduced with +# OSX 10.5 (Leopard). To create a documentation set, doxygen will generate a +# Makefile in the HTML output directory. Running make will produce the docset in +# that directory and running make install will install the docset in +# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at +# startup. See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html +# for more information. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_DOCSET = NO + +# This tag determines the name of the docset feed. A documentation feed provides +# an umbrella under which multiple documentation sets from a single provider +# (such as a company or product suite) can be grouped. +# The default value is: Doxygen generated docs. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_FEEDNAME = "Doxygen generated docs" + +# This tag specifies a string that should uniquely identify the documentation +# set bundle. This should be a reverse domain-name style string, e.g. +# com.mycompany.MyDocSet. Doxygen will append .docset to the name. +# The default value is: org.doxygen.Project. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_BUNDLE_ID = org.doxygen.Project + +# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify +# the documentation publisher. This should be a reverse domain-name style +# string, e.g. com.mycompany.MyDocSet.documentation. +# The default value is: org.doxygen.Publisher. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_PUBLISHER_ID = org.doxygen.Publisher + +# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. +# The default value is: Publisher. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_PUBLISHER_NAME = Publisher + +# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three +# additional HTML index files: index.hhp, index.hhc, and index.hhk. The +# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop +# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on +# Windows. +# +# The HTML Help Workshop contains a compiler that can convert all HTML output +# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML +# files are now used as the Windows 98 help format, and will replace the old +# Windows help format (.hlp) on all Windows platforms in the future. Compressed +# HTML files also contain an index, a table of contents, and you can search for +# words in the documentation. The HTML workshop also contains a viewer for +# compressed HTML files. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_HTMLHELP = NO + +# The CHM_FILE tag can be used to specify the file name of the resulting .chm +# file. You can add a path in front of the file if the result should not be +# written to the html output directory. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +CHM_FILE = + +# The HHC_LOCATION tag can be used to specify the location (absolute path +# including file name) of the HTML help compiler ( hhc.exe). If non-empty +# doxygen will try to run the HTML help compiler on the generated index.hhp. +# The file has to be specified with full path. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +HHC_LOCATION = + +# The GENERATE_CHI flag controls if a separate .chi index file is generated ( +# YES) or that it should be included in the master .chm file ( NO). +# The default value is: NO. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +GENERATE_CHI = NO + +# The CHM_INDEX_ENCODING is used to encode HtmlHelp index ( hhk), content ( hhc) +# and project file content. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +CHM_INDEX_ENCODING = + +# The BINARY_TOC flag controls whether a binary table of contents is generated ( +# YES) or a normal table of contents ( NO) in the .chm file. Furthermore it +# enables the Previous and Next buttons. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +BINARY_TOC = NO + +# The TOC_EXPAND flag can be set to YES to add extra items for group members to +# the table of contents of the HTML help documentation and to the tree view. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +TOC_EXPAND = YES + +# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and +# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that +# can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help +# (.qch) of the generated HTML documentation. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_QHP = NO + +# If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify +# the file name of the resulting .qch file. The path specified is relative to +# the HTML output folder. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QCH_FILE = + +# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help +# Project output. For more information please see Qt Help Project / Namespace +# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace). +# The default value is: org.doxygen.Project. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_NAMESPACE = org.doxygen.Project + +# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt +# Help Project output. For more information please see Qt Help Project / Virtual +# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual- +# folders). +# The default value is: doc. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_VIRTUAL_FOLDER = doc + +# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom +# filter to add. For more information please see Qt Help Project / Custom +# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- +# filters). +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_CUST_FILTER_NAME = + +# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the +# custom filter to add. For more information please see Qt Help Project / Custom +# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- +# filters). +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_CUST_FILTER_ATTRS = + +# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this +# project's filter section matches. Qt Help Project / Filter Attributes (see: +# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes). +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_SECT_FILTER_ATTRS = + +# The QHG_LOCATION tag can be used to specify the location of Qt's +# qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the +# generated .qhp file. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHG_LOCATION = + +# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be +# generated, together with the HTML files, they form an Eclipse help plugin. To +# install this plugin and make it available under the help contents menu in +# Eclipse, the contents of the directory containing the HTML and XML files needs +# to be copied into the plugins directory of eclipse. The name of the directory +# within the plugins directory should be the same as the ECLIPSE_DOC_ID value. +# After copying Eclipse needs to be restarted before the help appears. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_ECLIPSEHELP = NO + +# A unique identifier for the Eclipse help plugin. When installing the plugin +# the directory name containing the HTML and XML files should also have this +# name. Each documentation set should have its own identifier. +# The default value is: org.doxygen.Project. +# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. + +ECLIPSE_DOC_ID = org.doxygen.Project + +# If you want full control over the layout of the generated HTML pages it might +# be necessary to disable the index and replace it with your own. The +# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top +# of each HTML page. A value of NO enables the index and the value YES disables +# it. Since the tabs in the index contain the same information as the navigation +# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +DISABLE_INDEX = YES + +# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index +# structure should be generated to display hierarchical information. If the tag +# value is set to YES, a side panel will be generated containing a tree-like +# index structure (just like the one that is generated for HTML Help). For this +# to work a browser that supports JavaScript, DHTML, CSS and frames is required +# (i.e. any modern browser). Windows users are probably better off using the +# HTML help feature. Via custom stylesheets (see HTML_EXTRA_STYLESHEET) one can +# further fine-tune the look of the index. As an example, the default style +# sheet generated by doxygen has an example that shows how to put an image at +# the root of the tree instead of the PROJECT_NAME. Since the tree basically has +# the same information as the tab index, you could consider setting +# DISABLE_INDEX to YES when enabling this option. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_TREEVIEW = YES + +# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that +# doxygen will group on one line in the generated HTML documentation. +# +# Note that a value of 0 will completely suppress the enum values from appearing +# in the overview section. +# Minimum value: 0, maximum value: 20, default value: 4. +# This tag requires that the tag GENERATE_HTML is set to YES. + +ENUM_VALUES_PER_LINE = 1 + +# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used +# to set the initial width (in pixels) of the frame in which the tree is shown. +# Minimum value: 0, maximum value: 1500, default value: 250. +# This tag requires that the tag GENERATE_HTML is set to YES. + +TREEVIEW_WIDTH = 250 + +# When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open links to +# external symbols imported via tag files in a separate window. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +EXT_LINKS_IN_WINDOW = NO + +# Use this tag to change the font size of LaTeX formulas included as images in +# the HTML documentation. When you change the font size after a successful +# doxygen run you need to manually remove any form_*.png images from the HTML +# output directory to force them to be regenerated. +# Minimum value: 8, maximum value: 50, default value: 10. +# This tag requires that the tag GENERATE_HTML is set to YES. + +FORMULA_FONTSIZE = 10 + +# Use the FORMULA_TRANPARENT tag to determine whether or not the images +# generated for formulas are transparent PNGs. Transparent PNGs are not +# supported properly for IE 6.0, but are supported on all modern browsers. +# +# Note that when changing this option you need to delete any form_*.png files in +# the HTML output directory before the changes have effect. +# The default value is: YES. +# This tag requires that the tag GENERATE_HTML is set to YES. + +FORMULA_TRANSPARENT = YES + +# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see +# http://www.mathjax.org) which uses client side Javascript for the rendering +# instead of using prerendered bitmaps. Use this if you do not have LaTeX +# installed or if you want to formulas look prettier in the HTML output. When +# enabled you may also need to install MathJax separately and configure the path +# to it using the MATHJAX_RELPATH option. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +USE_MATHJAX = NO + +# When MathJax is enabled you can set the default output format to be used for +# the MathJax output. See the MathJax site (see: +# http://docs.mathjax.org/en/latest/output.html) for more details. +# Possible values are: HTML-CSS (which is slower, but has the best +# compatibility), NativeMML (i.e. MathML) and SVG. +# The default value is: HTML-CSS. +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_FORMAT = HTML-CSS + +# When MathJax is enabled you need to specify the location relative to the HTML +# output directory using the MATHJAX_RELPATH option. The destination directory +# should contain the MathJax.js script. For instance, if the mathjax directory +# is located at the same level as the HTML output directory, then +# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax +# Content Delivery Network so you can quickly see the result without installing +# MathJax. However, it is strongly recommended to install a local copy of +# MathJax from http://www.mathjax.org before deployment. +# The default value is: http://cdn.mathjax.org/mathjax/latest. +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest + +# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax +# extension names that should be enabled during MathJax rendering. For example +# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_EXTENSIONS = + +# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces +# of code that will be used on startup of the MathJax code. See the MathJax site +# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an +# example see the documentation. +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_CODEFILE = + +# When the SEARCHENGINE tag is enabled doxygen will generate a search box for +# the HTML output. The underlying search engine uses javascript and DHTML and +# should work on any modern browser. Note that when using HTML help +# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) +# there is already a search function so this one should typically be disabled. +# For large projects the javascript based search engine can be slow, then +# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to +# search using the keyboard; to jump to the search box use + S +# (what the is depends on the OS and browser, but it is typically +# , /