Эх сурвалжийг харах

Fix the LUFA lib to use a submodule instead of just files (#6245)

* Remove LUFA files

* Update descriptions for newer version of LUFA

* Create PR6245.md

* Fix CDC(Serial) type errors

* Fix missed merge conflict for AUDIO_DTYPE_CSInterface
Drashna Jaelre 5 жил өмнө
parent
commit
cf4575b94a
100 өөрчлөгдсөн 5 нэмэгдсэн , 25711 устгасан
  1. 5 0
      docs/ChangeLog/20190830/PR6245.md
  2. 0 94
      lib/lufa/.gitattributes
  3. 0 16
      lib/lufa/.gitignore
  4. 0 75
      lib/lufa/Bootloaders/CDC/BootloaderAPI.c
  5. 0 58
      lib/lufa/Bootloaders/CDC/BootloaderAPI.h
  6. 0 91
      lib/lufa/Bootloaders/CDC/BootloaderAPITable.S
  7. 0 673
      lib/lufa/Bootloaders/CDC/BootloaderCDC.c
  8. 0 144
      lib/lufa/Bootloaders/CDC/BootloaderCDC.h
  9. 0 242
      lib/lufa/Bootloaders/CDC/BootloaderCDC.txt
  10. 0 50
      lib/lufa/Bootloaders/CDC/Config/AppConfig.h
  11. 0 93
      lib/lufa/Bootloaders/CDC/Config/LUFAConfig.h
  12. 0 244
      lib/lufa/Bootloaders/CDC/Descriptors.c
  13. 0 158
      lib/lufa/Bootloaders/CDC/Descriptors.h
  14. 0 66
      lib/lufa/Bootloaders/CDC/LUFA CDC Bootloader.inf
  15. 0 161
      lib/lufa/Bootloaders/CDC/asf.xml
  16. 0 2396
      lib/lufa/Bootloaders/CDC/doxyfile
  17. 0 62
      lib/lufa/Bootloaders/CDC/makefile
  18. 0 76
      lib/lufa/Bootloaders/DFU/BootloaderAPI.c
  19. 0 58
      lib/lufa/Bootloaders/DFU/BootloaderAPI.h
  20. 0 91
      lib/lufa/Bootloaders/DFU/BootloaderAPITable.S
  21. 0 891
      lib/lufa/Bootloaders/DFU/BootloaderDFU.c
  22. 0 216
      lib/lufa/Bootloaders/DFU/BootloaderDFU.h
  23. 0 235
      lib/lufa/Bootloaders/DFU/BootloaderDFU.txt
  24. 0 48
      lib/lufa/Bootloaders/DFU/Config/AppConfig.h
  25. 0 93
      lib/lufa/Bootloaders/DFU/Config/LUFAConfig.h
  26. 0 193
      lib/lufa/Bootloaders/DFU/Descriptors.c
  27. 0 200
      lib/lufa/Bootloaders/DFU/Descriptors.h
  28. 0 156
      lib/lufa/Bootloaders/DFU/asf.xml
  29. 0 2396
      lib/lufa/Bootloaders/DFU/doxyfile
  30. 0 62
      lib/lufa/Bootloaders/DFU/makefile
  31. 0 198
      lib/lufa/Bootloaders/HID/BootloaderHID.c
  32. 0 71
      lib/lufa/Bootloaders/HID/BootloaderHID.h
  33. 0 105
      lib/lufa/Bootloaders/HID/BootloaderHID.txt
  34. 0 93
      lib/lufa/Bootloaders/HID/Config/LUFAConfig.h
  35. 0 187
      lib/lufa/Bootloaders/HID/Descriptors.c
  36. 0 80
      lib/lufa/Bootloaders/HID/Descriptors.h
  37. 0 1
      lib/lufa/Bootloaders/HID/HostLoaderApp/.gitignore
  38. 0 40
      lib/lufa/Bootloaders/HID/HostLoaderApp/Makefile
  39. 0 21
      lib/lufa/Bootloaders/HID/HostLoaderApp/Makefile.bsd
  40. 0 674
      lib/lufa/Bootloaders/HID/HostLoaderApp/gpl3.txt
  41. 0 1013
      lib/lufa/Bootloaders/HID/HostLoaderApp/hid_bootloader_cli.c
  42. 0 120
      lib/lufa/Bootloaders/HID/HostLoaderApp_Python/hid_bootloader_loader.py
  43. 0 123
      lib/lufa/Bootloaders/HID/asf.xml
  44. 0 2398
      lib/lufa/Bootloaders/HID/doxyfile
  45. 0 55
      lib/lufa/Bootloaders/HID/makefile
  46. 0 76
      lib/lufa/Bootloaders/MassStorage/BootloaderAPI.c
  47. 0 63
      lib/lufa/Bootloaders/MassStorage/BootloaderAPI.h
  48. 0 102
      lib/lufa/Bootloaders/MassStorage/BootloaderAPITable.S
  49. 0 263
      lib/lufa/Bootloaders/MassStorage/BootloaderMassStorage.c
  50. 0 99
      lib/lufa/Bootloaders/MassStorage/BootloaderMassStorage.h
  51. 0 240
      lib/lufa/Bootloaders/MassStorage/BootloaderMassStorage.txt
  52. 0 47
      lib/lufa/Bootloaders/MassStorage/Config/AppConfig.h
  53. 0 93
      lib/lufa/Bootloaders/MassStorage/Config/LUFAConfig.h
  54. 0 157
      lib/lufa/Bootloaders/MassStorage/Descriptors.c
  55. 0 88
      lib/lufa/Bootloaders/MassStorage/Descriptors.h
  56. 0 294
      lib/lufa/Bootloaders/MassStorage/Lib/SCSI.c
  57. 0 84
      lib/lufa/Bootloaders/MassStorage/Lib/SCSI.h
  58. 0 482
      lib/lufa/Bootloaders/MassStorage/Lib/VirtualFAT.c
  59. 0 302
      lib/lufa/Bootloaders/MassStorage/Lib/VirtualFAT.h
  60. 0 156
      lib/lufa/Bootloaders/MassStorage/asf.xml
  61. 0 2396
      lib/lufa/Bootloaders/MassStorage/doxyfile
  62. 0 75
      lib/lufa/Bootloaders/MassStorage/makefile
  63. 0 75
      lib/lufa/Bootloaders/Printer/BootloaderAPI.c
  64. 0 56
      lib/lufa/Bootloaders/Printer/BootloaderAPI.h
  65. 0 91
      lib/lufa/Bootloaders/Printer/BootloaderAPITable.S
  66. 0 487
      lib/lufa/Bootloaders/Printer/BootloaderPrinter.c
  67. 0 108
      lib/lufa/Bootloaders/Printer/BootloaderPrinter.h
  68. 0 202
      lib/lufa/Bootloaders/Printer/BootloaderPrinter.txt
  69. 0 93
      lib/lufa/Bootloaders/Printer/Config/LUFAConfig.h
  70. 0 194
      lib/lufa/Bootloaders/Printer/Descriptors.c
  71. 0 96
      lib/lufa/Bootloaders/Printer/Descriptors.h
  72. 0 159
      lib/lufa/Bootloaders/Printer/asf.xml
  73. 0 2396
      lib/lufa/Bootloaders/Printer/doxyfile
  74. 0 62
      lib/lufa/Bootloaders/Printer/makefile
  75. 0 46
      lib/lufa/Bootloaders/makefile
  76. 0 82
      lib/lufa/BuildTests/BoardDriverTest/Board/Board.h
  77. 0 92
      lib/lufa/BuildTests/BoardDriverTest/Board/Buttons.h
  78. 0 197
      lib/lufa/BuildTests/BoardDriverTest/Board/Dataflash.h
  79. 0 104
      lib/lufa/BuildTests/BoardDriverTest/Board/Joystick.h
  80. 0 132
      lib/lufa/BuildTests/BoardDriverTest/Board/LEDs.h
  81. 0 89
      lib/lufa/BuildTests/BoardDriverTest/BoardDeviceMap.cfg
  82. 0 115
      lib/lufa/BuildTests/BoardDriverTest/Test.c
  83. 0 69
      lib/lufa/BuildTests/BoardDriverTest/makefile
  84. 0 35
      lib/lufa/BuildTests/BoardDriverTest/makefile.test
  85. 0 167
      lib/lufa/BuildTests/BootloaderTest/BootloaderDeviceMap.cfg
  86. 0 65
      lib/lufa/BuildTests/BootloaderTest/makefile
  87. 0 41
      lib/lufa/BuildTests/ModuleTest/Dummy.S
  88. 0 56
      lib/lufa/BuildTests/ModuleTest/Modules.h
  89. 0 31
      lib/lufa/BuildTests/ModuleTest/Test_C.c
  90. 0 31
      lib/lufa/BuildTests/ModuleTest/Test_CPP.cpp
  91. 0 67
      lib/lufa/BuildTests/ModuleTest/makefile
  92. 0 94
      lib/lufa/BuildTests/ModuleTest/makefile.test
  93. 0 42
      lib/lufa/BuildTests/SingleUSBModeTest/Dummy.S
  94. 0 32
      lib/lufa/BuildTests/SingleUSBModeTest/Test.c
  95. 0 57
      lib/lufa/BuildTests/SingleUSBModeTest/makefile
  96. 0 75
      lib/lufa/BuildTests/SingleUSBModeTest/makefile.test
  97. 0 47
      lib/lufa/BuildTests/StaticAnalysisTest/makefile
  98. 0 24
      lib/lufa/BuildTests/makefile
  99. 0 274
      lib/lufa/Demos/Device/ClassDriver/AudioInput/AudioInput.c
  100. 0 94
      lib/lufa/Demos/Device/ClassDriver/AudioInput/AudioInput.h

+ 5 - 0
docs/ChangeLog/20190830/PR6245.md

@@ -0,0 +1,5 @@
+* Update repo to use LUFA as a git submodule
+  * `/lib/LUFA` removed from the repo
+  * LUFA set as a submodule, pointing to qmk/lufa
+  * This should allow more flexibility with LUFA, and allow us to keep the sub-module up to date, a lot more easily.  It was ~2 years out of date with no easy path to fix that.  This prevents that from being an issue in the future
+  

+ 0 - 94
lib/lufa/.gitattributes

@@ -1,94 +0,0 @@
-# auto for anything unspecified
-* text=auto
-
-# sources
-*.c text
-*.cc text
-*.cxx text
-*.cpp text
-*.c++ text
-*.hpp text
-*.h text
-*.h++ text
-*.hh text
-*.bat    text
-*.coffee text
-*.css    text
-*.htm    text
-*.html   text
-*.inc    text
-*.ini    text
-*.js     text
-*.jsx    text
-*.json   text
-*.less   text
-*.php    text
-*.pl     text
-*.py     text
-*.rb     text
-*.sass   text
-*.scm    text
-*.scss   text
-*.sh     text
-*.sql    text
-*.styl   text
-*.ts     text
-*.xml    text
-*.xhtml  text
-
-# make files (need to always use lf for compatibility with Windows 10 bash)
-Makefile eol=lf
-*.mk eol=lf
-
-# make files (need to always use lf for compatibility with Windows 10 bash)
-*.sh eol=lf
-
-# documentation
-*.markdown   text
-*.md         text
-*.mdwn       text
-*.mdown      text
-*.mkd        text
-*.mkdn       text
-*.mdtxt      text
-*.mdtext     text
-*.txt        text
-AUTHORS      text
-CHANGELOG    text
-CHANGES      text
-CONTRIBUTING text
-COPYING      text
-INSTALL      text
-license      text
-LICENSE      text
-NEWS         text
-readme       text
-*README*     text
-TODO         text
-
-GRAPHICS
-*.ai   binary
-*.bmp  binary
-*.eps  binary
-*.gif  binary
-*.ico  binary
-*.jng  binary
-*.jp2  binary
-*.jpg  binary
-*.jpeg binary
-*.jpx  binary
-*.jxr  binary
-*.pdf  binary
-*.png  binary
-*.psb  binary
-*.psd  binary
-*.svg  text
-*.svgz binary
-*.tif  binary
-*.tiff binary
-*.wbmp binary
-*.webp binary
-
-# hex files
-*.hex binary
-*.eep binary

+ 0 - 16
lib/lufa/.gitignore

@@ -1,16 +0,0 @@
-*.o
-*.d
-*.elf
-*.hex
-*.eep
-*.sym
-*.bin
-*.lss
-*.map
-*.bak
-*.class
-Documentation/
-LUFA/StudioIntegration/ProjectGenerator/*
-LUFA/StudioIntegration/DocBook/*
-!LUFA/StudioIntegration/Docbook/mshelp/*
-Keyboard.h

+ 0 - 75
lib/lufa/Bootloaders/CDC/BootloaderAPI.c

@@ -1,75 +0,0 @@
-/*
-             LUFA Library
-     Copyright (C) Dean Camera, 2017.
-
-  dean [at] fourwalledcubicle [dot] com
-           www.lufa-lib.org
-*/
-
-/*
-  Copyright 2017  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);
-}

+ 0 - 58
lib/lufa/Bootloaders/CDC/BootloaderAPI.h

@@ -1,58 +0,0 @@
-/*
-             LUFA Library
-     Copyright (C) Dean Camera, 2017.
-
-  dean [at] fourwalledcubicle [dot] com
-           www.lufa-lib.org
-*/
-
-/*
-  Copyright 2017  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 <avr/io.h>
-		#include <avr/boot.h>
-		#include <stdbool.h>
-
-		#include <LUFA/Common/Common.h>
-
-		#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
-

+ 0 - 91
lib/lufa/Bootloaders/CDC/BootloaderAPITable.S

@@ -1,91 +0,0 @@
-/*
-             LUFA Library
-     Copyright (C) Dean Camera, 2017.
-
-  dean [at] fourwalledcubicle [dot] com
-           www.lufa-lib.org
-*/
-
-/*
-  Copyright 2017  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.
-*/
-
-; Trampolines to actual API implementations if the target address is outside the
-; range of a rjmp instruction (can happen with large bootloader sections)
-.section .apitable_trampolines, "ax"
-.global BootloaderAPI_Trampolines
-BootloaderAPI_Trampolines:
-
-	BootloaderAPI_ErasePage_Trampoline:
-		jmp BootloaderAPI_ErasePage
-	BootloaderAPI_WritePage_Trampoline:
-		jmp BootloaderAPI_WritePage
-	BootloaderAPI_FillWord_Trampoline:
-		jmp BootloaderAPI_FillWord
-	BootloaderAPI_ReadSignature_Trampoline:
-		jmp BootloaderAPI_ReadSignature
-	BootloaderAPI_ReadFuse_Trampoline:
-		jmp BootloaderAPI_ReadFuse
-	BootloaderAPI_ReadLock_Trampoline:
-		jmp BootloaderAPI_ReadLock
-	BootloaderAPI_WriteLock_Trampoline:
-		jmp BootloaderAPI_WriteLock
-	BootloaderAPI_UNUSED1:
-		ret
-	BootloaderAPI_UNUSED2:
-		ret
-	BootloaderAPI_UNUSED3:
-		ret
-	BootloaderAPI_UNUSED4:
-		ret
-	BootloaderAPI_UNUSED5:
-		ret
-
-
-
-; API function jump table
-.section .apitable_jumptable, "ax"
-.global BootloaderAPI_JumpTable
-BootloaderAPI_JumpTable:
-
-	rjmp BootloaderAPI_ErasePage_Trampoline
-	rjmp BootloaderAPI_WritePage_Trampoline
-	rjmp BootloaderAPI_FillWord_Trampoline
-	rjmp BootloaderAPI_ReadSignature_Trampoline
-	rjmp BootloaderAPI_ReadFuse_Trampoline
-	rjmp BootloaderAPI_ReadLock_Trampoline
-	rjmp BootloaderAPI_WriteLock_Trampoline
-	rjmp BootloaderAPI_UNUSED1 ; UNUSED ENTRY 1
-	rjmp BootloaderAPI_UNUSED2 ; UNUSED ENTRY 2
-	rjmp BootloaderAPI_UNUSED3 ; UNUSED ENTRY 3
-	rjmp BootloaderAPI_UNUSED4 ; UNUSED ENTRY 4
-	rjmp BootloaderAPI_UNUSED5 ; UNUSED ENTRY 5
-
-
-
-; Bootloader table signatures and information
-.section .apitable_signatures, "ax"
-.global BootloaderAPI_Signatures
-BootloaderAPI_Signatures:
-
-	.long BOOT_START_ADDR ; Start address of the bootloader
-	.word 0xDF00 ; Signature for the CDC class bootloader
-	.word 0xDCFB ; Signature for a LUFA class bootloader

+ 0 - 673
lib/lufa/Bootloaders/CDC/BootloaderCDC.c

@@ -1,673 +0,0 @@
-/*
-             LUFA Library
-     Copyright (C) Dean Camera, 2017.
-
-  dean [at] fourwalledcubicle [dot] com
-           www.lufa-lib.org
-*/
-
-/*
-  Copyright 2017  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_LEONARDO)
-		/* Enable pull-up on the IO13 pin so we can use it to select the mode */
-		PORTC |= (1 << 7);
-		Delay_MS(10);
-
-		/* If IO13 is not jumpered to ground, start the user application instead */
-		JumpToApplication = ((PINC & (1 << 7)) != 0);
-
-		/* Disable pull-up after the check has completed */
-		PORTC &= ~(1 << 7);
-	#elif ((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();
-	#else
-		/* Check if the device's BOOTRST fuse is set */
-		if (boot_lock_fuse_bits_get(GET_HIGH_FUSE_BITS) & FUSE_BOOTRST)
-		{
-			/* If the reset source was not an external reset or the key is correct, clear it and jump to the application */
-			if (!(MCUSR & (1 << EXTRF)) || (MagicBootKey == MAGIC_BOOT_KEY))
-			  JumpToApplication = true;
-
-			/* Clear reset source */
-			MCUSR &= ~(1 << EXTRF);
-		}
-		else
-		{
-			/* If the reset source was the bootloader and the key is correct, clear it and jump to the application;
-			 * this can happen in the HWBE fuse is set, and the HBE pin is low during the watchdog reset */
-			if ((MCUSR & (1 << WDRF)) && (MagicBootKey == MAGIC_BOOT_KEY))
-				JumpToApplication = true;
-
-			/* Clear reset source */
-			MCUSR &= ~(1 << WDRF);
-		}
-	#endif
-
-	/* Don't run the user application if the reset vector is blank (no app loaded) */
-	bool ApplicationValid = (pgm_read_word_near(0) != 0xFFFF);
-
-	/* If a request has been made to jump to the user application, honor it */
-	if (JumpToApplication && ApplicationValid)
-	{
-		/* Turn off the watchdog */
-		MCUSR &= ~(1 << WDRF);
-		wdt_disable();
-
-		/* Clear the boot key and jump to the user application */
-		MagicBootKey = 0;
-
-		// cppcheck-suppress constStatement
-		((void (*)(void))0x0000)();
-	}
-}
-
-/** 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)
-{
-	/* Setup hardware required for the bootloader */
-	SetupHardware();
-
-	/* Turn on first LED on the board to indicate that the bootloader has started */
-	LEDs_SetAllLEDs(LEDS_LED1);
-
-	/* Enable global interrupts so that the USB stack can function */
-	GlobalInterruptEnable();
-
-	while (RunBootloader)
-	{
-		CDC_Task();
-		USB_USBTask();
-	}
-
-	/* Wait a short time to end all USB transactions and then disconnect */
-	_delay_us(1000);
-
-	/* 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;
-
-	/* Enable the watchdog and force a timeout to reset the AVR */
-	wdt_enable(WDTO_250MS);
-
-	for (;;);
-}
-
-/** Configures all hardware required for the bootloader. */
-static void SetupHardware(void)
-{
-	/* Disable watchdog if enabled by bootloader/fuses */
-	MCUSR &= ~(1 << WDRF);
-	wdt_disable();
-
-	/* Disable clock division */
-	clock_prescale_set(clock_div_1);
-
-	/* Relocate the interrupt vector table to the bootloader section */
-	MCUCR = (1 << IVCE);
-	MCUCR = (1 << IVSEL);
-
-	/* Initialize the USB and other board hardware drivers */
-	USB_Init();
-	LEDs_Init();
-
-	/* Bootloader active LED toggle timer initialization */
-	TIMSK1 = (1 << TOIE1);
-	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)
-{
-	LEDs_ToggleLEDs(LEDS_LED1 | LEDS_LED2);
-}
-
-/** Event handler for the USB_ConfigurationChanged event. This configures the device's endpoints ready
- *  to relay data to and from the attached USB host.
- */
-void EVENT_USB_Device_ConfigurationChanged(void)
-{
-	/* Setup CDC Notification, Rx and Tx Endpoints */
-	Endpoint_ConfigureEndpoint(CDC_NOTIFICATION_EPADDR, EP_TYPE_INTERRUPT,
-	                           CDC_NOTIFICATION_EPSIZE, 1);
-
-	Endpoint_ConfigureEndpoint(CDC_TX_EPADDR, EP_TYPE_BULK, CDC_TXRX_EPSIZE, 1);
-
-	Endpoint_ConfigureEndpoint(CDC_RX_EPADDR, EP_TYPE_BULK, CDC_TXRX_EPSIZE, 1);
-}
-
-/** Event handler for the USB_ControlRequest event. This is used to catch and process control requests sent to
- *  the device from the USB host before passing along unhandled control requests to the library for processing
- *  internally.
- */
-void EVENT_USB_Device_ControlRequest(void)
-{
-	/* Ignore any requests that aren't directed to the CDC interface */
-	if ((USB_ControlRequest.bmRequestType & (CONTROL_REQTYPE_TYPE | CONTROL_REQTYPE_RECIPIENT)) !=
-	    (REQTYPE_CLASS | REQREC_INTERFACE))
-	{
-		return;
-	}
-
-	/* Activity - toggle indicator LEDs */
-	LEDs_ToggleLEDs(LEDS_LED1 | LEDS_LED2);
-
-	/* Process CDC specific control requests */
-	switch (USB_ControlRequest.bRequest)
-	{
-		case CDC_REQ_GetLineEncoding:
-			if (USB_ControlRequest.bmRequestType == (REQDIR_DEVICETOHOST | REQTYPE_CLASS | REQREC_INTERFACE))
-			{
-				Endpoint_ClearSETUP();
-
-				/* Write the line coding data to the control endpoint */
-				Endpoint_Write_Control_Stream_LE(&LineEncoding, sizeof(CDC_LineEncoding_t));
-				Endpoint_ClearOUT();
-			}
-
-			break;
-		case CDC_REQ_SetLineEncoding:
-			if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE))
-			{
-				Endpoint_ClearSETUP();
-
-				/* Read the line coding data in from the host into the global struct */
-				Endpoint_Read_Control_Stream_LE(&LineEncoding, sizeof(CDC_LineEncoding_t));
-				Endpoint_ClearIN();
-			}
-
-			break;
-        case CDC_REQ_SetControlLineState:
-	        if (USB_ControlRequest.bmRequestType == (REQDIR_HOSTTODEVICE | REQTYPE_CLASS | REQREC_INTERFACE))
-	        {
-	            Endpoint_ClearSETUP();
-	            Endpoint_ClearStatusStage();
-	        }
-
-	        break;
-	}
-}
-
-#if !defined(NO_BLOCK_SUPPORT)
-/** Reads or writes a block of EEPROM or FLASH memory to or from the appropriate CDC data endpoint, depending
- *  on the AVR109 protocol command issued.
- *
- *  \param[in] Command  Single character AVR109 protocol command indicating what memory operation to perform
- */
-static void ReadWriteMemoryBlock(const uint8_t Command)
-{
-	uint16_t BlockSize;
-	char     MemoryType;
-
-	uint8_t  HighByte = 0;
-	uint8_t  LowByte  = 0;
-
-	BlockSize  = (FetchNextCommandByte() << 8);
-	BlockSize |=  FetchNextCommandByte();
-
-	MemoryType =  FetchNextCommandByte();
-
-	if ((MemoryType != MEMORY_TYPE_FLASH) && (MemoryType != MEMORY_TYPE_EEPROM))
-	{
-		/* Send error byte back to the host */
-		WriteNextResponseByte('?');
-
-		return;
-	}
-
-	/* Check if command is to read a memory block */
-	if (Command == AVR109_COMMAND_BlockRead)
-	{
-		/* Re-enable RWW section */
-		boot_rww_enable();
-
-		while (BlockSize--)
-		{
-			if (MemoryType == MEMORY_TYPE_FLASH)
-			{
-				/* Read the next FLASH byte from the current FLASH page */
-				#if (FLASHEND > 0xFFFF)
-				WriteNextResponseByte(pgm_read_byte_far(CurrAddress | HighByte));
-				#else
-				WriteNextResponseByte(pgm_read_byte(CurrAddress | HighByte));
-				#endif
-
-				/* If both bytes in current word have been read, increment the address counter */
-				if (HighByte)
-				  CurrAddress += 2;
-
-				HighByte = !HighByte;
-			}
-			else
-			{
-				/* Read the next EEPROM byte into the endpoint */
-				WriteNextResponseByte(eeprom_read_byte((uint8_t*)(intptr_t)(CurrAddress >> 1)));
-
-				/* Increment the address counter after use */
-				CurrAddress += 2;
-			}
-		}
-	}
-	else
-	{
-		uint32_t PageStartAddress = CurrAddress;
-
-		if (MemoryType == 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_update_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_update_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();
-}

+ 0 - 144
lib/lufa/Bootloaders/CDC/BootloaderCDC.h

@@ -1,144 +0,0 @@
-/*
-             LUFA Library
-     Copyright (C) Dean Camera, 2017.
-
-  dean [at] fourwalledcubicle [dot] com
-           www.lufa-lib.org
-*/
-
-/*
-  Copyright 2017  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 <avr/io.h>
-		#include <avr/wdt.h>
-		#include <avr/boot.h>
-		#include <avr/eeprom.h>
-		#include <avr/power.h>
-		#include <avr/interrupt.h>
-		#include <stdbool.h>
-
-		#include "Descriptors.h"
-		#include "BootloaderAPI.h"
-		#include "Config/AppConfig.h"
-
-		#include <LUFA/Drivers/USB/USB.h>
-		#include <LUFA/Drivers/Board/LEDs.h>
-		#include <LUFA/Platform/Platform.h>
-
-	/* 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
-

+ 0 - 242
lib/lufa/Bootloaders/CDC/BootloaderCDC.txt

@@ -1,242 +0,0 @@
-/** \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.
- *
- *  <table>
- *   <tr>
- *    <td><b>USB Mode:</b></td>
- *    <td>Device</td>
- *   </tr>
- *   <tr>
- *    <td><b>USB Class:</b></td>
- *    <td>Communications Device Class (CDC)</td>
- *   </tr>
- *   <tr>
- *    <td><b>USB Subclass:</b></td>
- *    <td>Abstract Control Model (ACM)</td>
- *   </tr>
- *   <tr>
- *    <td><b>Relevant Standards:</b></td>
- *    <td>USBIF CDC Class Standard</td>
- *   </tr>
- *   <tr>
- *    <td><b>Supported USB Speeds:</b></td>
- *    <td>Full Speed Mode</td>
- *   </tr>
- *  </table>
- *
- *  \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 <b>THIS BOOTLOADER IS NOT SECURE.</b> Malicious entities can recover written data, even if the device
- *           lockbits are set.
- *
- *  \section Sec_Running Running the Bootloader
- *
- *  On the USB AVR8 devices, setting the \c HWBE device fuse will cause the bootloader to run if the \c HWB pin of
- *  the AVR is grounded when the device is reset.
- *
- *  The are two behaviours of this bootloader, depending on the device's fuses:
- *
- *  <b>If the device's BOOTRST fuse is set</b>, the bootloader will run any time the system is reset from
- *  the external reset pin, unless no valid user application has been loaded. To initiate the bootloader, the
- *  device's external reset pin should be grounded momentarily.
- *
- *  <b>If the device's BOOTRST fuse is not set</b>, the bootloader will run only if initiated via a software
- *  jump, or if the \c HWB pin was low during the last device reset (if the \c HWBE fuse is set).
- *
- *  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 <a href=https://groups.google.com/d/msg/lufa-support/CP9cy2bc8yo/kBqsOu-RBeMJ>here</a> for resolution steps.
- *  If the issue still persists then uninstall modemmanager by executing <tt>sudo apt-get remove modemmanager</tt>, 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 <a href=https://groups.google.com/d/msg/lufa-support/CP9cy2bc8yo/kBqsOu-RBeMJ>here</a> for resolution steps.
- *
- *  \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.
- *
- *  <table>
- *   <tr>
- *    <th><b>Define Name:</b></th>
- *    <th><b>Location:</b></th>
- *    <th><b>Description:</b></th>
- *   </tr>
- *   <tr>
- *    <td>NO_BLOCK_SUPPORT</td>
- *    <td>AppConfig.h</td>
- *    <td>Define to disable memory block read/write support in the bootloader, requiring all reads and writes to be made
- *        using the byte-level commands.</td>
- *   </tr>
- *   <tr>
- *    <td>NO_EEPROM_BYTE_SUPPORT</td>
- *    <td>AppConfig.h</td>
- *    <td>Define 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.</td>
- *   </tr>
- *   <tr>
- *    <td>NO_FLASH_BYTE_SUPPORT</td>
- *    <td>AppConfig.h</td>
- *    <td>Define 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.</td>
- *   </tr>
- *   <tr>
- *    <td>NO_LOCK_BYTE_WRITE_SUPPORT</td>
- *    <td>AppConfig.h</td>
- *    <td>Define to disable lock byte write support in the bootloader, preventing the lock bits from being set programmatically.</td>
- *   </tr>
- *  </table>
- */
-

+ 0 - 50
lib/lufa/Bootloaders/CDC/Config/AppConfig.h

@@ -1,50 +0,0 @@
-/*
-             LUFA Library
-     Copyright (C) Dean Camera, 2017.
-
-  dean [at] fourwalledcubicle [dot] com
-           www.lufa-lib.org
-*/
-
-/*
-  Copyright 2017  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

+ 0 - 93
lib/lufa/Bootloaders/CDC/Config/LUFAConfig.h

@@ -1,93 +0,0 @@
-/*
-             LUFA Library
-     Copyright (C) Dean Camera, 2017.
-
-  dean [at] fourwalledcubicle [dot] com
-           www.lufa-lib.org
-*/
-
-/*
-  Copyright 2017  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

+ 0 - 244
lib/lufa/Bootloaders/CDC/Descriptors.c

@@ -1,244 +0,0 @@
-/*
-             LUFA Library
-     Copyright (C) Dean Camera, 2017.
-
-  dean [at] fourwalledcubicle [dot] com
-           www.lufa-lib.org
-*/
-
-/*
-  Copyright 2017  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 uint16_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;
-}
-

+ 0 - 158
lib/lufa/Bootloaders/CDC/Descriptors.h

@@ -1,158 +0,0 @@
-/*
-             LUFA Library
-     Copyright (C) Dean Camera, 2017.
-
-  dean [at] fourwalledcubicle [dot] com
-           www.lufa-lib.org
-*/
-
-/*
-  Copyright 2017  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 <LUFA/Drivers/USB/USB.h>
-
-		#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               0x93
-			#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 uint16_t wIndex,
-		                                    const void** const DescriptorAddress)
-		                                    ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);
-
-#endif
-

+ 0 - 66
lib/lufa/Bootloaders/CDC/LUFA CDC Bootloader.inf

@@ -1,66 +0,0 @@
-;************************************************************
-; 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"

+ 0 - 161
lib/lufa/Bootloaders/CDC/asf.xml

@@ -1,161 +0,0 @@
-<asf xmlversion="1.0">
-	<project caption="CDC Bootloader - 128KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.cdc.avr8.128_4" force-caption="true" workspace-name="lufa_cdc_128kb_4kb_">
-		<require idref="lufa.bootloaders.cdc"/>
-		<require idref="lufa.boards.dummy.avr8"/>
-		<generator value="as5_8"/>
-
-		<device-support value="at90usb1287"/>
-		<config name="lufa.drivers.board.name" value="none"/>
-
-		<config name="config.compiler.optimization.level" value="size"/>
-
-		<build type="define" name="F_CPU" value="16000000UL"/>
-		<build type="define" name="F_USB" value="16000000UL"/>
-
-		<build type="define" name="BOOT_START_ADDR" value="0x1F000"/>
-		<build type="linker-config" subtype="flags" value="--section-start=.text=0x1F000"/>
-
-		<build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0x1FFA0"/>
-		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>
-		<build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0x1FFE0"/>
-		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>
-		<build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0x1FFF8"/>
-		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>
-	</project>
-
-	<project caption="CDC Bootloader - 64KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.cdc.avr8.64_4" force-caption="true" workspace-name="lufa_cdc_64kb_4kb_">
-		<require idref="lufa.bootloaders.cdc"/>
-		<require idref="lufa.boards.dummy.avr8"/>
-		<generator value="as5_8"/>
-
-		<device-support value="at90usb647"/>
-		<config name="lufa.drivers.board.name" value="none"/>
-
-		<config name="config.compiler.optimization.level" value="size"/>
-
-		<build type="define" name="F_CPU" value="16000000UL"/>
-		<build type="define" name="F_USB" value="16000000UL"/>
-
-		<build type="define" name="BOOT_START_ADDR" value="0xF000"/>
-		<build type="linker-config" subtype="flags" value="--section-start=.text=0xF000"/>
-
-		<build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0xFFA0"/>
-		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>
-		<build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0xFFE0"/>
-		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>
-		<build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0xFFF8"/>
-		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>
-	</project>
-
-	<project caption="CDC Bootloader - 32KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.cdc.avr8.32_4" force-caption="true" workspace-name="lufa_cdc_32kb_4kb_">
-		<require idref="lufa.bootloaders.cdc"/>
-		<require idref="lufa.boards.dummy.avr8"/>
-		<generator value="as5_8"/>
-
-		<device-support value="atmega32u4"/>
-		<config name="lufa.drivers.board.name" value="none"/>
-
-		<config name="config.compiler.optimization.level" value="size"/>
-
-		<build type="define" name="F_CPU" value="16000000UL"/>
-		<build type="define" name="F_USB" value="16000000UL"/>
-
-		<build type="define" name="BOOT_START_ADDR" value="0x7000"/>
-		<build type="linker-config" subtype="flags" value="--section-start=.text=0x7000"/>
-
-		<build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0x7FA0"/>
-		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>
-		<build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0x7FE0"/>
-		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>
-		<build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0x7FF8"/>
-		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>
-	</project>
-
-	<project caption="CDC Bootloader - 16KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.cdc.avr8.16_4" force-caption="true" workspace-name="lufa_cdc_16kb_4kb_">
-		<require idref="lufa.bootloaders.cdc"/>
-		<require idref="lufa.boards.dummy.avr8"/>
-		<generator value="as5_8"/>
-
-		<device-support value="atmega16u2"/>
-		<config name="lufa.drivers.board.name" value="none"/>
-
-		<config name="config.compiler.optimization.level" value="size"/>
-
-		<build type="define" name="F_CPU" value="16000000UL"/>
-		<build type="define" name="F_USB" value="16000000UL"/>
-
-		<build type="define" name="BOOT_START_ADDR" value="0x3000"/>
-		<build type="linker-config" subtype="flags" value="--section-start=.text=0x3000"/>
-
-		<build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0x3FA0"/>
-		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>
-		<build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0x3FE0"/>
-		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>
-		<build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0x3FF8"/>
-		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>
-	</project>
-
-	<project caption="CDC Bootloader - 8KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.cdc.avr8.8_4" force-caption="true" workspace-name="lufa_cdc_8kb_4kb_">
-		<require idref="lufa.bootloaders.cdc"/>
-		<require idref="lufa.boards.dummy.avr8"/>
-		<generator value="as5_8"/>
-
-		<device-support value="atmega8u2"/>
-		<config name="lufa.drivers.board.name" value="none"/>
-
-		<config name="config.compiler.optimization.level" value="size"/>
-
-		<build type="define" name="F_CPU" value="16000000UL"/>
-		<build type="define" name="F_USB" value="16000000UL"/>
-
-		<build type="define" name="BOOT_START_ADDR" value="0x1000"/>
-		<build type="linker-config" subtype="flags" value="--section-start=.text=0x1000"/>
-
-		<build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0x1FA0"/>
-		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>
-		<build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0x1FE0"/>
-		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>
-		<build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0x1FF8"/>
-		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>
-	</project>
-
-	<module type="application" id="lufa.bootloaders.cdc" caption="CDC Bootloader">
-		<info type="description" value="summary">
-		CDC Class Bootloader, capable of reprogramming a device using avrdude or other AVR109 protocol compliant software when plugged into a host.
-		</info>
-
- 		<info type="gui-flag" value="move-to-root"/>
-
-		<info type="keyword" value="Technology">
-			<keyword value="Bootloaders"/>
-			<keyword value="USB Device"/>
-		</info>
-
- 		<device-support-alias value="lufa_avr8"/>
-		<device-support-alias value="lufa_xmega"/>
-		<device-support-alias value="lufa_uc3"/>
-
-		<build type="include-path" value="."/>
-		<build type="c-source" value="BootloaderCDC.c"/>
-		<build type="header-file" value="BootloaderCDC.h"/>
-		<build type="c-source" value="Descriptors.c"/>
-		<build type="header-file" value="Descriptors.h"/>
-		<build type="c-source" value="BootloaderAPI.c"/>
-		<build type="header-file" value="BootloaderAPI.h"/>
-		<build type="asm-source" value="BootloaderAPITable.S"/>
-
-		<build type="module-config" subtype="path" value="Config"/>
-		<build type="header-file" value="Config/LUFAConfig.h"/>
-		<build type="header-file" value="Config/AppConfig.h"/>
-
-		<build type="distribute" subtype="user-file" value="doxyfile"/>
-		<build type="distribute" subtype="user-file" value="BootloaderCDC.txt"/>
-		<build type="distribute" subtype="user-file" value="LUFA CDC Bootloader.inf"/>
-
-		<require idref="lufa.common"/>
-		<require idref="lufa.platform"/>
-		<require idref="lufa.drivers.usb"/>
-		<require idref="lufa.drivers.board"/>
-		<require idref="lufa.drivers.board.leds"/>
-	</module>
-</asf>

+ 0 - 2396
lib/lufa/Bootloaders/CDC/doxyfile

@@ -1,2396 +0,0 @@
-# Doxyfile 1.8.9
-
-# 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 a logo or an 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 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. If 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 HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will
-# append additional text to a page's title, such as Class Reference. If set to
-# YES the compound reference will be hidden.
-# The default value is: NO.
-
-HIDE_COMPOUND_REFERENCE= 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 <section_label> ... \endif and \cond <section_label>
-# ... \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:
-#
-# <filter> <input-file>
-#
-# where <filter> is the value of the INPUT_FILTER tag, and <input-file> 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 therefore more robust against future updates.
-# Doxygen will copy the style sheet files to the output directory.
-# Note: The order of the extra style sheet files is of importance (e.g. the last
-# style sheet 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 style sheet 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 style sheets (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
-
-# If 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 pre-rendered 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 <access key> + S
-# (what the <access key> is depends on the OS and browser, but it is typically
-# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down
-# key> to jump into the search results window, the results can be navigated
-# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel
-# the search. The filter options can be selected when the cursor is inside the
-# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys>
-# to select a filter and <Enter> or <escape> to activate or cancel the filter
-# option.
-# The default value is: YES.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-SEARCHENGINE           = NO
-
-# When the SERVER_BASED_SEARCH tag is enabled the search engine will be
-# implemented using a web server instead of a web client using Javascript. There
-# are two flavors of web server based searching depending on the EXTERNAL_SEARCH
-# setting. When disabled, doxygen will generate a PHP script for searching and
-# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing
-# and searching needs to be provided by external tools. See the section
-# "External Indexing and Searching" for details.
-# The default value is: NO.
-# This tag requires that the tag SEARCHENGINE is set to YES.
-
-SERVER_BASED_SEARCH    = NO
-
-# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP
-# script for searching. Instead the search results are written to an XML file
-# which needs to be processed by an external indexer. Doxygen will invoke an
-# external search engine pointed to by the SEARCHENGINE_URL option to obtain the
-# search results.
-#
-# Doxygen ships with an example indexer (doxyindexer) and search engine
-# (doxysearch.cgi) which are based on the open source search engine library
-# Xapian (see: http://xapian.org/).
-#
-# See the section "External Indexing and Searching" for details.
-# The default value is: NO.
-# This tag requires that the tag SEARCHENGINE is set to YES.
-
-EXTERNAL_SEARCH        = NO
-
-# The SEARCHENGINE_URL should point to a search engine hosted by a web server
-# which will return the search results when EXTERNAL_SEARCH is enabled.
-#
-# Doxygen ships with an example indexer (doxyindexer) and search engine
-# (doxysearch.cgi) which are based on the open source search engine library
-# Xapian (see: http://xapian.org/). See the section "External Indexing and
-# Searching" for details.
-# This tag requires that the tag SEARCHENGINE is set to YES.
-
-SEARCHENGINE_URL       =
-
-# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed
-# search data is written to a file for indexing by an external tool. With the
-# SEARCHDATA_FILE tag the name of this file can be specified.
-# The default file is: searchdata.xml.
-# This tag requires that the tag SEARCHENGINE is set to YES.
-
-SEARCHDATA_FILE        = searchdata.xml
-
-# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the
-# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is
-# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple
-# projects and redirect the results back to the right project.
-# This tag requires that the tag SEARCHENGINE is set to YES.
-
-EXTERNAL_SEARCH_ID     =
-
-# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen
-# projects other than the one defined by this configuration file, but that are
-# all added to the same external search index. Each project needs to have a
-# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of
-# to a relative location where the documentation can be found. The format is:
-# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ...
-# This tag requires that the tag SEARCHENGINE is set to YES.
-
-EXTRA_SEARCH_MAPPINGS  =
-
-#---------------------------------------------------------------------------
-# Configuration options related to the LaTeX output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output.
-# The default value is: YES.
-
-GENERATE_LATEX         = NO
-
-# The LATEX_OUTPUT tag is used to specify where the LaTeX 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: latex.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_OUTPUT           = latex
-
-# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
-# invoked.
-#
-# Note that when enabling USE_PDFLATEX this option is only used for generating
-# bitmaps for formulas in the HTML output, but not in the Makefile that is
-# written to the output directory.
-# The default file is: latex.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_CMD_NAME         = latex
-
-# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate
-# index for LaTeX.
-# The default file is: makeindex.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-MAKEINDEX_CMD_NAME     = makeindex
-
-# If the COMPACT_LATEX tag is set to YES, doxygen generates more compact LaTeX
-# documents. This may be useful for small projects and may help to save some
-# trees in general.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-COMPACT_LATEX          = NO
-
-# The PAPER_TYPE tag can be used to set the paper type that is used by the
-# printer.
-# Possible values are: a4 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x
-# 14 inches) and executive (7.25 x 10.5 inches).
-# The default value is: a4.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-PAPER_TYPE             = a4wide
-
-# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names
-# that should be included in the LaTeX output. To get the times font for
-# instance you can specify
-# EXTRA_PACKAGES=times
-# If left blank no extra packages will be included.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-EXTRA_PACKAGES         =
-
-# The LATEX_HEADER tag can be used to specify a personal LaTeX header for the
-# generated LaTeX document. The header should contain everything until the first
-# chapter. If it is left blank doxygen will generate a standard header. See
-# section "Doxygen usage" for information on how to let doxygen write the
-# default header to a separate file.
-#
-# Note: Only use a user-defined header if you know what you are doing! The
-# following commands have a special meaning inside the header: $title,
-# $datetime, $date, $doxygenversion, $projectname, $projectnumber,
-# $projectbrief, $projectlogo. Doxygen will replace $title with the empty
-# string, for the replacement values of the other commands the user is referred
-# to HTML_HEADER.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_HEADER           =
-
-# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the
-# generated LaTeX document. The footer should contain everything after the last
-# chapter. If it is left blank doxygen will generate a standard footer. See
-# LATEX_HEADER for more information on how to generate a default footer and what
-# special commands can be used inside the footer.
-#
-# Note: Only use a user-defined footer if you know what you are doing!
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_FOOTER           =
-
-# The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined
-# LaTeX style sheets that are included after the standard style sheets created
-# by doxygen. Using this option one can overrule certain style aspects. Doxygen
-# will copy the style sheet files to the output directory.
-# Note: The order of the extra style sheet files is of importance (e.g. the last
-# style sheet in the list overrules the setting of the previous ones in the
-# list).
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_EXTRA_STYLESHEET =
-
-# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or
-# other source files which should be copied to the LATEX_OUTPUT output
-# directory. Note that the files will be copied as-is; there are no commands or
-# markers available.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_EXTRA_FILES      =
-
-# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is
-# prepared for conversion to PDF (using ps2pdf or pdflatex). The PDF file will
-# contain links (just like the HTML output) instead of page references. This
-# makes the output suitable for online browsing using a PDF viewer.
-# The default value is: YES.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-PDF_HYPERLINKS         = YES
-
-# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate
-# the PDF file directly from the LaTeX files. Set this option to YES, to get a
-# higher quality PDF documentation.
-# The default value is: YES.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-USE_PDFLATEX           = YES
-
-# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \batchmode
-# command to the generated LaTeX files. This will instruct LaTeX to keep running
-# if errors occur, instead of asking the user for help. This option is also used
-# when generating formulas in HTML.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_BATCHMODE        = NO
-
-# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the
-# index chapters (such as File Index, Compound Index, etc.) in the output.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_HIDE_INDICES     = NO
-
-# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source
-# code with syntax highlighting in the LaTeX output.
-#
-# Note that which sources are shown also depends on other settings such as
-# SOURCE_BROWSER.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_SOURCE_CODE      = NO
-
-# The LATEX_BIB_STYLE tag can be used to specify the style to use for the
-# bibliography, e.g. plainnat, or ieeetr. See
-# http://en.wikipedia.org/wiki/BibTeX and \cite for more info.
-# The default value is: plain.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_BIB_STYLE        = plain
-
-#---------------------------------------------------------------------------
-# Configuration options related to the RTF output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_RTF tag is set to YES, doxygen will generate RTF output. The
-# RTF output is optimized for Word 97 and may not look too pretty with other RTF
-# readers/editors.
-# The default value is: NO.
-
-GENERATE_RTF           = NO
-
-# The RTF_OUTPUT tag is used to specify where the RTF 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: rtf.
-# This tag requires that the tag GENERATE_RTF is set to YES.
-
-RTF_OUTPUT             = rtf
-
-# If the COMPACT_RTF tag is set to YES, doxygen generates more compact RTF
-# documents. This may be useful for small projects and may help to save some
-# trees in general.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_RTF is set to YES.
-
-COMPACT_RTF            = NO
-
-# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated will
-# contain hyperlink fields. The RTF file will contain links (just like the HTML
-# output) instead of page references. This makes the output suitable for online
-# browsing using Word or some other Word compatible readers that support those
-# fields.
-#
-# Note: WordPad (write) and others do not support links.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_RTF is set to YES.
-
-RTF_HYPERLINKS         = NO
-
-# Load stylesheet definitions from file. Syntax is similar to doxygen's config
-# file, i.e. a series of assignments. You only have to provide replacements,
-# missing definitions are set to their default value.
-#
-# See also section "Doxygen usage" for information on how to generate the
-# default style sheet that doxygen normally uses.
-# This tag requires that the tag GENERATE_RTF is set to YES.
-
-RTF_STYLESHEET_FILE    =
-
-# Set optional variables used in the generation of an RTF document. Syntax is
-# similar to doxygen's config file. A template extensions file can be generated
-# using doxygen -e rtf extensionFile.
-# This tag requires that the tag GENERATE_RTF is set to YES.
-
-RTF_EXTENSIONS_FILE    =
-
-# If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code
-# with syntax highlighting in the RTF output.
-#
-# Note that which sources are shown also depends on other settings such as
-# SOURCE_BROWSER.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_RTF is set to YES.
-
-RTF_SOURCE_CODE        = NO
-
-#---------------------------------------------------------------------------
-# Configuration options related to the man page output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for
-# classes and files.
-# The default value is: NO.
-
-GENERATE_MAN           = NO
-
-# The MAN_OUTPUT tag is used to specify where the man pages will be put. If a
-# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
-# it. A directory man3 will be created inside the directory specified by
-# MAN_OUTPUT.
-# The default directory is: man.
-# This tag requires that the tag GENERATE_MAN is set to YES.
-
-MAN_OUTPUT             = man
-
-# The MAN_EXTENSION tag determines the extension that is added to the generated
-# man pages. In case the manual section does not start with a number, the number
-# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is
-# optional.
-# The default value is: .3.
-# This tag requires that the tag GENERATE_MAN is set to YES.
-
-MAN_EXTENSION          = .3
-
-# The MAN_SUBDIR tag determines the name of the directory created within
-# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by
-# MAN_EXTENSION with the initial . removed.
-# This tag requires that the tag GENERATE_MAN is set to YES.
-
-MAN_SUBDIR             =
-
-# If the MAN_LINKS tag is set to YES and doxygen generates man output, then it
-# will generate one additional man file for each entity documented in the real
-# man page(s). These additional files only source the real man page, but without
-# them the man command would be unable to find the correct page.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_MAN is set to YES.
-
-MAN_LINKS              = NO
-
-#---------------------------------------------------------------------------
-# Configuration options related to the XML output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_XML tag is set to YES, doxygen will generate an XML file that
-# captures the structure of the code including all documentation.
-# The default value is: NO.
-
-GENERATE_XML           = NO
-
-# The XML_OUTPUT tag is used to specify where the XML pages 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: xml.
-# This tag requires that the tag GENERATE_XML is set to YES.
-
-XML_OUTPUT             = xml
-
-# If the XML_PROGRAMLISTING tag is set to YES, doxygen will dump the program
-# listings (including syntax highlighting and cross-referencing information) to
-# the XML output. Note that enabling this will significantly increase the size
-# of the XML output.
-# The default value is: YES.
-# This tag requires that the tag GENERATE_XML is set to YES.
-
-XML_PROGRAMLISTING     = YES
-
-#---------------------------------------------------------------------------
-# Configuration options related to the DOCBOOK output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files
-# that can be used to generate PDF.
-# The default value is: NO.
-
-GENERATE_DOCBOOK       = NO
-
-# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages 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: docbook.
-# This tag requires that the tag GENERATE_DOCBOOK is set to YES.
-
-DOCBOOK_OUTPUT         = docbook
-
-# If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the
-# program listings (including syntax highlighting and cross-referencing
-# information) to the DOCBOOK output. Note that enabling this will significantly
-# increase the size of the DOCBOOK output.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_DOCBOOK is set to YES.
-
-DOCBOOK_PROGRAMLISTING = NO
-
-#---------------------------------------------------------------------------
-# Configuration options for the AutoGen Definitions output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an
-# AutoGen Definitions (see http://autogen.sf.net) file that captures the
-# structure of the code including all documentation. Note that this feature is
-# still experimental and incomplete at the moment.
-# The default value is: NO.
-
-GENERATE_AUTOGEN_DEF   = NO
-
-#---------------------------------------------------------------------------
-# Configuration options related to the Perl module output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_PERLMOD tag is set to YES, doxygen will generate a Perl module
-# file that captures the structure of the code including all documentation.
-#
-# Note that this feature is still experimental and incomplete at the moment.
-# The default value is: NO.
-
-GENERATE_PERLMOD       = NO
-
-# If the PERLMOD_LATEX tag is set to YES, doxygen will generate the necessary
-# Makefile rules, Perl scripts and LaTeX code to be able to generate PDF and DVI
-# output from the Perl module output.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_PERLMOD is set to YES.
-
-PERLMOD_LATEX          = NO
-
-# If the PERLMOD_PRETTY tag is set to YES, the Perl module output will be nicely
-# formatted so it can be parsed by a human reader. This is useful if you want to
-# understand what is going on. On the other hand, if this tag is set to NO, the
-# size of the Perl module output will be much smaller and Perl will parse it
-# just the same.
-# The default value is: YES.
-# This tag requires that the tag GENERATE_PERLMOD is set to YES.
-
-PERLMOD_PRETTY         = YES
-
-# The names of the make variables in the generated doxyrules.make file are
-# prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. This is useful
-# so different doxyrules.make files included by the same Makefile don't
-# overwrite each other's variables.
-# This tag requires that the tag GENERATE_PERLMOD is set to YES.
-
-PERLMOD_MAKEVAR_PREFIX =
-
-#---------------------------------------------------------------------------
-# Configuration options related to the preprocessor
-#---------------------------------------------------------------------------
-
-# If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all
-# C-preprocessor directives found in the sources and include files.
-# The default value is: YES.
-
-ENABLE_PREPROCESSING   = YES
-
-# If the MACRO_EXPANSION tag is set to YES, doxygen will expand all macro names
-# in the source code. If set to NO, only conditional compilation will be
-# performed. Macro expansion can be done in a controlled way by setting
-# EXPAND_ONLY_PREDEF to YES.
-# The default value is: NO.
-# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
-
-MACRO_EXPANSION        = YES
-
-# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES then
-# the macro expansion is limited to the macros specified with the PREDEFINED and
-# EXPAND_AS_DEFINED tags.
-# The default value is: NO.
-# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
-
-EXPAND_ONLY_PREDEF     = YES
-
-# If the SEARCH_INCLUDES tag is set to YES, the include files in the
-# INCLUDE_PATH will be searched if a #include is found.
-# The default value is: YES.
-# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
-
-SEARCH_INCLUDES        = YES
-
-# The INCLUDE_PATH tag can be used to specify one or more directories that
-# contain include files that are not input files but should be processed by the
-# preprocessor.
-# This tag requires that the tag SEARCH_INCLUDES is set to YES.
-
-INCLUDE_PATH           =
-
-# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
-# patterns (like *.h and *.hpp) to filter out the header-files in the
-# directories. If left blank, the patterns specified with FILE_PATTERNS will be
-# used.
-# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
-
-INCLUDE_FILE_PATTERNS  =
-
-# The PREDEFINED tag can be used to specify one or more macro names that are
-# defined before the preprocessor is started (similar to the -D option of e.g.
-# gcc). The argument of the tag is a list of macros of the form: name or
-# name=definition (no spaces). If the definition and the "=" are omitted, "=1"
-# is assumed. To prevent a macro definition from being undefined via #undef or
-# recursively expanded use the := operator instead of the = operator.
-# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
-
-PREDEFINED             = __DOXYGEN__ \
-                         PROGMEM \
-                         ATTR_NO_INIT
-
-# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this
-# tag can be used to specify a list of macro names that should be expanded. The
-# macro definition that is found in the sources will be used. Use the PREDEFINED
-# tag if you want to use a different macro definition that overrules the
-# definition found in the source code.
-# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
-
-EXPAND_AS_DEFINED      =
-
-# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will
-# remove all references to function-like macros that are alone on a line, have
-# an all uppercase name, and do not end with a semicolon. Such function macros
-# are typically used for boiler-plate code, and will confuse the parser if not
-# removed.
-# The default value is: YES.
-# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
-
-SKIP_FUNCTION_MACROS   = YES
-
-#---------------------------------------------------------------------------
-# Configuration options related to external references
-#---------------------------------------------------------------------------
-
-# The TAGFILES tag can be used to specify one or more tag files. For each tag
-# file the location of the external documentation should be added. The format of
-# a tag file without this location is as follows:
-# TAGFILES = file1 file2 ...
-# Adding location for the tag files is done as follows:
-# TAGFILES = file1=loc1 "file2 = loc2" ...
-# where loc1 and loc2 can be relative or absolute paths or URLs. See the
-# section "Linking to external documentation" for more information about the use
-# of tag files.
-# Note: Each tag file must have a unique name (where the name does NOT include
-# the path). If a tag file is not located in the directory in which doxygen is
-# run, you must also specify the path to the tagfile here.
-
-TAGFILES               =
-
-# When a file name is specified after GENERATE_TAGFILE, doxygen will create a
-# tag file that is based on the input files it reads. See section "Linking to
-# external documentation" for more information about the usage of tag files.
-
-GENERATE_TAGFILE       =
-
-# If the ALLEXTERNALS tag is set to YES, all external class will be listed in
-# the class index. If set to NO, only the inherited external classes will be
-# listed.
-# The default value is: NO.
-
-ALLEXTERNALS           = NO
-
-# If the EXTERNAL_GROUPS tag is set to YES, all external groups will be listed
-# in the modules index. If set to NO, only the current project's groups will be
-# listed.
-# The default value is: YES.
-
-EXTERNAL_GROUPS        = YES
-
-# If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in
-# the related pages index. If set to NO, only the current project's pages will
-# be listed.
-# The default value is: YES.
-
-EXTERNAL_PAGES         = YES
-
-# The PERL_PATH should be the absolute path and name of the perl script
-# interpreter (i.e. the result of 'which perl').
-# The default file (with absolute path) is: /usr/bin/perl.
-
-PERL_PATH              = /usr/bin/perl
-
-#---------------------------------------------------------------------------
-# Configuration options related to the dot tool
-#---------------------------------------------------------------------------
-
-# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram
-# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to
-# NO turns the diagrams off. Note that this option also works with HAVE_DOT
-# disabled, but it is recommended to install and use dot, since it yields more
-# powerful graphs.
-# The default value is: YES.
-
-CLASS_DIAGRAMS         = NO
-
-# You can define message sequence charts within doxygen comments using the \msc
-# command. Doxygen will then run the mscgen tool (see:
-# http://www.mcternan.me.uk/mscgen/)) to produce the chart and insert it in the
-# documentation. The MSCGEN_PATH tag allows you to specify the directory where
-# the mscgen tool resides. If left empty the tool is assumed to be found in the
-# default search path.
-
-MSCGEN_PATH            =
-
-# You can include diagrams made with dia in doxygen documentation. Doxygen will
-# then run dia to produce the diagram and insert it in the documentation. The
-# DIA_PATH tag allows you to specify the directory where the dia binary resides.
-# If left empty dia is assumed to be found in the default search path.
-
-DIA_PATH               =
-
-# If set to YES the inheritance and collaboration graphs will hide inheritance
-# and usage relations if the target is undocumented or is not a class.
-# The default value is: YES.
-
-HIDE_UNDOC_RELATIONS   = YES
-
-# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
-# available from the path. This tool is part of Graphviz (see:
-# http://www.graphviz.org/), a graph visualization toolkit from AT&T and Lucent
-# Bell Labs. The other options in this section have no effect if this option is
-# set to NO
-# The default value is: NO.
-
-HAVE_DOT               = NO
-
-# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed
-# to run in parallel. When set to 0 doxygen will base this on the number of
-# processors available in the system. You can set it explicitly to a value
-# larger than 0 to get control over the balance between CPU load and processing
-# speed.
-# Minimum value: 0, maximum value: 32, default value: 0.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_NUM_THREADS        = 0
-
-# When you want a differently looking font in the dot files that doxygen
-# generates you can specify the font name using DOT_FONTNAME. You need to make
-# sure dot is able to find the font, which can be done by putting it in a
-# standard location or by setting the DOTFONTPATH environment variable or by
-# setting DOT_FONTPATH to the directory containing the font.
-# The default value is: Helvetica.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_FONTNAME           =
-
-# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of
-# dot graphs.
-# Minimum value: 4, maximum value: 24, default value: 10.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_FONTSIZE           = 10
-
-# By default doxygen will tell dot to use the default font as specified with
-# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set
-# the path where dot can find it using this tag.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_FONTPATH           =
-
-# If the CLASS_GRAPH tag is set to YES then doxygen will generate a graph for
-# each documented class showing the direct and indirect inheritance relations.
-# Setting this tag to YES will force the CLASS_DIAGRAMS tag to NO.
-# The default value is: YES.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-CLASS_GRAPH            = NO
-
-# If the COLLABORATION_GRAPH tag is set to YES then doxygen will generate a
-# graph for each documented class showing the direct and indirect implementation
-# dependencies (inheritance, containment, and class references variables) of the
-# class with other documented classes.
-# The default value is: YES.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-COLLABORATION_GRAPH    = NO
-
-# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for
-# groups, showing the direct groups dependencies.
-# The default value is: YES.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-GROUP_GRAPHS           = NO
-
-# If the UML_LOOK tag is set to YES, doxygen will generate inheritance and
-# collaboration diagrams in a style similar to the OMG's Unified Modeling
-# Language.
-# The default value is: NO.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-UML_LOOK               = NO
-
-# If the UML_LOOK tag is enabled, the fields and methods are shown inside the
-# class node. If there are many fields or methods and many nodes the graph may
-# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the
-# number of items for each type to make the size more manageable. Set this to 0
-# for no limit. Note that the threshold may be exceeded by 50% before the limit
-# is enforced. So when you set the threshold to 10, up to 15 fields may appear,
-# but if the number exceeds 15, the total amount of fields shown is limited to
-# 10.
-# Minimum value: 0, maximum value: 100, default value: 10.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-UML_LIMIT_NUM_FIELDS   = 10
-
-# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and
-# collaboration graphs will show the relations between templates and their
-# instances.
-# The default value is: NO.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-TEMPLATE_RELATIONS     = NO
-
-# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are set to
-# YES then doxygen will generate a graph for each documented file showing the
-# direct and indirect include dependencies of the file with other documented
-# files.
-# The default value is: YES.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-INCLUDE_GRAPH          = NO
-
-# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are
-# set to YES then doxygen will generate a graph for each documented file showing
-# the direct and indirect include dependencies of the file with other documented
-# files.
-# The default value is: YES.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-INCLUDED_BY_GRAPH      = NO
-
-# If the CALL_GRAPH tag is set to YES then doxygen will generate a call
-# dependency graph for every global function or class method.
-#
-# Note that enabling this option will significantly increase the time of a run.
-# So in most cases it will be better to enable call graphs for selected
-# functions only using the \callgraph command.
-# The default value is: NO.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-CALL_GRAPH             = NO
-
-# If the CALLER_GRAPH tag is set to YES then doxygen will generate a caller
-# dependency graph for every global function or class method.
-#
-# Note that enabling this option will significantly increase the time of a run.
-# So in most cases it will be better to enable caller graphs for selected
-# functions only using the \callergraph command.
-# The default value is: NO.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-CALLER_GRAPH           = NO
-
-# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical
-# hierarchy of all classes instead of a textual one.
-# The default value is: YES.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-GRAPHICAL_HIERARCHY    = NO
-
-# If the DIRECTORY_GRAPH tag is set to YES then doxygen will show the
-# dependencies a directory has on other directories in a graphical way. The
-# dependency relations are determined by the #include relations between the
-# files in the directories.
-# The default value is: YES.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DIRECTORY_GRAPH        = NO
-
-# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
-# generated by dot.
-# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order
-# to make the SVG files visible in IE 9+ (other browsers do not have this
-# requirement).
-# Possible values are: png, jpg, gif and svg.
-# The default value is: png.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_IMAGE_FORMAT       = png
-
-# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to
-# enable generation of interactive SVG images that allow zooming and panning.
-#
-# Note that this requires a modern browser other than Internet Explorer. Tested
-# and working are Firefox, Chrome, Safari, and Opera.
-# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make
-# the SVG files visible. Older versions of IE do not have SVG support.
-# The default value is: NO.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-INTERACTIVE_SVG        = NO
-
-# The DOT_PATH tag can be used to specify the path where the dot tool can be
-# found. If left blank, it is assumed the dot tool can be found in the path.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_PATH               =
-
-# The DOTFILE_DIRS tag can be used to specify one or more directories that
-# contain dot files that are included in the documentation (see the \dotfile
-# command).
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOTFILE_DIRS           =
-
-# The MSCFILE_DIRS tag can be used to specify one or more directories that
-# contain msc files that are included in the documentation (see the \mscfile
-# command).
-
-MSCFILE_DIRS           =
-
-# The DIAFILE_DIRS tag can be used to specify one or more directories that
-# contain dia files that are included in the documentation (see the \diafile
-# command).
-
-DIAFILE_DIRS           =
-
-# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the
-# path where java can find the plantuml.jar file. If left blank, it is assumed
-# PlantUML is not used or called during a preprocessing step. Doxygen will
-# generate a warning when it encounters a \startuml command in this case and
-# will not generate output for the diagram.
-
-PLANTUML_JAR_PATH      =
-
-# When using plantuml, the specified paths are searched for files specified by
-# the !include statement in a plantuml block.
-
-PLANTUML_INCLUDE_PATH  =
-
-# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of nodes
-# that will be shown in the graph. If the number of nodes in a graph becomes
-# larger than this value, doxygen will truncate the graph, which is visualized
-# by representing a node as a red box. Note that doxygen if the number of direct
-# children of the root node in a graph is already larger than
-# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note that
-# the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.
-# Minimum value: 0, maximum value: 10000, default value: 50.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_GRAPH_MAX_NODES    = 15
-
-# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the graphs
-# generated by dot. A depth value of 3 means that only nodes reachable from the
-# root by following a path via at most 3 edges will be shown. Nodes that lay
-# further from the root node will be omitted. Note that setting this option to 1
-# or 2 may greatly reduce the computation time needed for large code bases. Also
-# note that the size of a graph can be further restricted by
-# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.
-# Minimum value: 0, maximum value: 1000, default value: 0.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-MAX_DOT_GRAPH_DEPTH    = 2
-
-# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent
-# background. This is disabled by default, because dot on Windows does not seem
-# to support this out of the box.
-#
-# Warning: Depending on the platform used, enabling this option may lead to
-# badly anti-aliased labels on the edges of a graph (i.e. they become hard to
-# read).
-# The default value is: NO.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_TRANSPARENT        = YES
-
-# Set the DOT_MULTI_TARGETS tag to YES to allow dot to generate multiple output
-# files in one run (i.e. multiple -o and -T options on the command line). This
-# makes dot run faster, but since only newer versions of dot (>1.8.10) support
-# this, this feature is disabled by default.
-# The default value is: NO.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_MULTI_TARGETS      = NO
-
-# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page
-# explaining the meaning of the various boxes and arrows in the dot generated
-# graphs.
-# The default value is: YES.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-GENERATE_LEGEND        = YES
-
-# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot
-# files that are used to generate the various graphs.
-# The default value is: YES.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_CLEANUP            = YES

+ 0 - 62
lib/lufa/Bootloaders/CDC/makefile

@@ -1,62 +0,0 @@
-#
-#             LUFA Library
-#     Copyright (C) Dean Camera, 2017.
-#
-#  dean [at] fourwalledcubicle [dot] com
-#           www.lufa-lib.org
-#
-# --------------------------------------
-#         LUFA Project Makefile.
-# --------------------------------------
-
-# Run "make help" for target help.
-
-MCU          = at90usb1287
-ARCH         = AVR8
-BOARD        = USBKEY
-F_CPU        = 8000000
-F_USB        = $(F_CPU)
-OPTIMIZATION = s
-TARGET       = BootloaderCDC
-SRC          = $(TARGET).c Descriptors.c BootloaderAPI.c BootloaderAPITable.S $(LUFA_SRC_USB)
-LUFA_PATH    = ../../LUFA
-CC_FLAGS     = -DUSE_LUFA_CONFIG_HEADER -IConfig/ -DBOOT_START_ADDR=$(BOOT_START_OFFSET)
-LD_FLAGS     = -Wl,--section-start=.text=$(BOOT_START_OFFSET) $(BOOT_API_LD_FLAGS)
-
-# Flash size and bootloader section sizes of the target, in KB. These must
-# match the target's total FLASH size and the bootloader size set in the
-# device's fuses.
-FLASH_SIZE_KB         = 128
-BOOT_SECTION_SIZE_KB  = 8
-
-# Bootloader address calculation formulas
-# Do not modify these macros, but rather modify the dependent values above.
-CALC_ADDRESS_IN_HEX   = $(shell printf "0x%X" $$(( $(1) )) )
-BOOT_START_OFFSET     = $(call CALC_ADDRESS_IN_HEX, ($(FLASH_SIZE_KB) - $(BOOT_SECTION_SIZE_KB)) * 1024 )
-BOOT_SEC_OFFSET       = $(call CALC_ADDRESS_IN_HEX, ($(FLASH_SIZE_KB) * 1024) - ($(strip $(1))) )
-
-# Bootloader linker section flags for relocating the API table sections to
-# known FLASH addresses - these should not normally be user-edited.
-BOOT_SECTION_LD_FLAG  = -Wl,--section-start=$(strip $(1))=$(call BOOT_SEC_OFFSET, $(3)) -Wl,--undefined=$(strip $(2))
-BOOT_API_LD_FLAGS     = $(call BOOT_SECTION_LD_FLAG, .apitable_trampolines, BootloaderAPI_Trampolines, 96)
-BOOT_API_LD_FLAGS    += $(call BOOT_SECTION_LD_FLAG, .apitable_jumptable,   BootloaderAPI_JumpTable,   32)
-BOOT_API_LD_FLAGS    += $(call BOOT_SECTION_LD_FLAG, .apitable_signatures,  BootloaderAPI_Signatures,  8)
-
-# Default target
-all:
-
-# Include LUFA-specific DMBS extension modules
-DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA
-include $(DMBS_LUFA_PATH)/lufa-sources.mk
-include $(DMBS_LUFA_PATH)/lufa-gcc.mk
-
-# Include common DMBS build system modules
-DMBS_PATH      ?= $(LUFA_PATH)/Build/DMBS/DMBS
-include $(DMBS_PATH)/core.mk
-include $(DMBS_PATH)/cppcheck.mk
-include $(DMBS_PATH)/doxygen.mk
-include $(DMBS_PATH)/dfu.mk
-include $(DMBS_PATH)/gcc.mk
-include $(DMBS_PATH)/hid.mk
-include $(DMBS_PATH)/avrdude.mk
-include $(DMBS_PATH)/atprogram.mk

+ 0 - 76
lib/lufa/Bootloaders/DFU/BootloaderAPI.c

@@ -1,76 +0,0 @@
-/*
-             LUFA Library
-     Copyright (C) Dean Camera, 2017.
-
-  dean [at] fourwalledcubicle [dot] com
-           www.lufa-lib.org
-*/
-
-/*
-  Copyright 2017  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);
-}
-

+ 0 - 58
lib/lufa/Bootloaders/DFU/BootloaderAPI.h

@@ -1,58 +0,0 @@
-/*
-             LUFA Library
-     Copyright (C) Dean Camera, 2017.
-
-  dean [at] fourwalledcubicle [dot] com
-           www.lufa-lib.org
-*/
-
-/*
-  Copyright 2017  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 <avr/io.h>
-		#include <avr/boot.h>
-		#include <stdbool.h>
-
-		#include <LUFA/Common/Common.h>
-
-		#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
-

+ 0 - 91
lib/lufa/Bootloaders/DFU/BootloaderAPITable.S

@@ -1,91 +0,0 @@
-/*
-             LUFA Library
-     Copyright (C) Dean Camera, 2017.
-
-  dean [at] fourwalledcubicle [dot] com
-           www.lufa-lib.org
-*/
-
-/*
-  Copyright 2017  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.
-*/
-
-; Trampolines to actual API implementations if the target address is outside the
-; range of a rjmp instruction (can happen with large bootloader sections)
-.section .apitable_trampolines, "ax"
-.global BootloaderAPI_Trampolines
-BootloaderAPI_Trampolines:
-
-	BootloaderAPI_ErasePage_Trampoline:
-		jmp BootloaderAPI_ErasePage
-	BootloaderAPI_WritePage_Trampoline:
-		jmp BootloaderAPI_WritePage
-	BootloaderAPI_FillWord_Trampoline:
-		jmp BootloaderAPI_FillWord
-	BootloaderAPI_ReadSignature_Trampoline:
-		jmp BootloaderAPI_ReadSignature
-	BootloaderAPI_ReadFuse_Trampoline:
-		jmp BootloaderAPI_ReadFuse
-	BootloaderAPI_ReadLock_Trampoline:
-		jmp BootloaderAPI_ReadLock
-	BootloaderAPI_WriteLock_Trampoline:
-		jmp BootloaderAPI_WriteLock
-	BootloaderAPI_UNUSED1:
-		ret
-	BootloaderAPI_UNUSED2:
-		ret
-	BootloaderAPI_UNUSED3:
-		ret
-	BootloaderAPI_UNUSED4:
-		ret
-	BootloaderAPI_UNUSED5:
-		ret
-
-
-
-; API function jump table
-.section .apitable_jumptable, "ax"
-.global BootloaderAPI_JumpTable
-BootloaderAPI_JumpTable:
-
-	rjmp BootloaderAPI_ErasePage_Trampoline
-	rjmp BootloaderAPI_WritePage_Trampoline
-	rjmp BootloaderAPI_FillWord_Trampoline
-	rjmp BootloaderAPI_ReadSignature_Trampoline
-	rjmp BootloaderAPI_ReadFuse_Trampoline
-	rjmp BootloaderAPI_ReadLock_Trampoline
-	rjmp BootloaderAPI_WriteLock_Trampoline
-	rjmp BootloaderAPI_UNUSED1 ; UNUSED ENTRY 1
-	rjmp BootloaderAPI_UNUSED2 ; UNUSED ENTRY 2
-	rjmp BootloaderAPI_UNUSED3 ; UNUSED ENTRY 3
-	rjmp BootloaderAPI_UNUSED4 ; UNUSED ENTRY 4
-	rjmp BootloaderAPI_UNUSED5 ; UNUSED ENTRY 5
-
-
-
-; Bootloader table signatures and information
-.section .apitable_signatures, "ax"
-.global BootloaderAPI_Signatures
-BootloaderAPI_Signatures:
-
-	.long BOOT_START_ADDR ; Start address of the bootloader
-	.word 0xDF10 ; Signature for the DFU class bootloader, V1
-	.word 0xDCFB ; Signature for a LUFA class bootloader

+ 0 - 891
lib/lufa/Bootloaders/DFU/BootloaderDFU.c

@@ -1,891 +0,0 @@
-/*
-             LUFA Library
-     Copyright (C) Dean Camera, 2017.
-
-  dean [at] fourwalledcubicle [dot] com
-           www.lufa-lib.org
-*/
-
-/*
-  Copyright 2017  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 DFU class bootloader. This file contains the complete bootloader logic.
- */
-
-#define  INCLUDE_FROM_BOOTLOADER_C
-#include "BootloaderDFU.h"
-
-/** Flag to indicate if the bootloader is currently running in secure mode, disallowing memory operations
- *  other than erase. This is initially set to the value set by SECURE_MODE, and cleared by the bootloader
- *  once a memory erase has completed in a bootloader session.
- */
-static bool IsSecure = SECURE_MODE;
-
-/** Flag to indicate if the bootloader should be running, or should exit and allow the application code to run
- *  via a soft reset. When cleared, the bootloader will abort, the USB interface will shut down and the application
- *  jumped to via an indirect jump to location 0x0000 (or other location specified by the host).
- */
-static bool RunBootloader = true;
-
-/** Flag to indicate if the bootloader is waiting to exit. When the host requests the bootloader to exit and
- *  jump to the application address it specifies, it sends two sequential commands which must be properly
- *  acknowledged. Upon reception of the first the RunBootloader flag is cleared and the WaitForExit flag is set,
- *  causing the bootloader to wait for the final exit command before shutting down.
- */
-static bool WaitForExit = false;
-
-/** Current DFU state machine state, one of the values in the DFU_State_t enum. */
-static uint8_t DFU_State = dfuIDLE;
-
-/** Status code of the last executed DFU command. This is set to one of the values in the DFU_Status_t enum after
- *  each operation, and returned to the host when a Get Status DFU request is issued.
- */
-static uint8_t DFU_Status = OK;
-
-/** Data containing the DFU command sent from the host. */
-static DFU_Command_t SentCommand;
-
-/** Response to the last issued Read Data DFU command. Unlike other DFU commands, the read command
- *  requires a single byte response from the bootloader containing the read data when the next DFU_UPLOAD command
- *  is issued by the host.
- */
-static uint8_t ResponseByte;
-
-/** Pointer to the start of the user application. By default this is 0x0000 (the reset vector), however the host
- *  may specify an alternate address when issuing the application soft-start command.
- */
-static AppPtr_t AppStartPtr = (AppPtr_t)0x0000;
-
-/** 64-bit flash page number. This is concatenated with the current 16-bit address on USB AVRs containing more than
- *  64KB of flash memory.
- */
-static uint8_t Flash64KBPage = 0;
-
-/** Memory start address, indicating the current address in the memory being addressed (either FLASH or EEPROM
- *  depending on the issued command from the host).
- */
-static uint16_t StartAddr = 0x0000;
-
-/** Memory end address, indicating the end address to read from/write to in the memory being addressed (either FLASH
- *  of EEPROM depending on the issued command from the host).
- */
-static uint16_t EndAddr = 0x0000;
-
-/** 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_LEONARDO)
-		/* Enable pull-up on the IO13 pin so we can use it to select the mode */
-		PORTC |= (1 << 7);
-		Delay_MS(10);
-
-		/* If IO13 is not jumpered to ground, start the user application instead */
-		JumpToApplication = ((PINC & (1 << 7)) != 0);
-
-		/* Disable pull-up after the check has completed */
-		PORTC &= ~(1 << 7);
-	#elif ((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();
-	#else
-		/* Check if the device's BOOTRST fuse is set */
-		if (boot_lock_fuse_bits_get(GET_HIGH_FUSE_BITS) & FUSE_BOOTRST)
-		{
-			/* If the reset source was not an external reset or the key is correct, clear it and jump to the application */
-			//if (!(MCUSR & (1 << EXTRF)) || (MagicBootKey == MAGIC_BOOT_KEY))
-			//  JumpToApplication = true;
-
-			/* Clear reset source */
-			MCUSR &= ~(1 << EXTRF);
-		}
-		else
-		{
-			/* If the reset source was the bootloader and the key is correct, clear it and jump to the application;
-			 * this can happen in the HWBE fuse is set, and the HBE pin is low during the watchdog reset */
-			//if ((MCUSR & (1 << WDRF)) && (MagicBootKey == MAGIC_BOOT_KEY))
-			//	JumpToApplication = true;
-
-			/* Clear reset source */
-			MCUSR &= ~(1 << WDRF);
-		}
-	#endif
-
-	/* Don't run the user application if the reset vector is blank (no app loaded) */
-	bool ApplicationValid = (pgm_read_word_near(0) != 0xFFFF);
-
-	/* If a request has been made to jump to the user application, honor it */
-	if (JumpToApplication && ApplicationValid)
-	{
-		/* Turn off the watchdog */
-		MCUSR &= ~(1 << WDRF);
-		wdt_disable();
-
-		/* Clear the boot key and jump to the user application */
-		MagicBootKey = 0;
-
-		// cppcheck-suppress constStatement
-		((void (*)(void))0x0000)();
-	}
-}
-
-/** 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)
-{
-	/* Configure hardware required by the bootloader */
-	SetupHardware();
-
-	/* Turn on first LED on the board to indicate that the bootloader has started */
-	LEDs_SetAllLEDs(LEDS_LED1 | LEDS_LED2);
-
-	/* Enable global interrupts so that the USB stack can function */
-	GlobalInterruptEnable();
-
-
-	#if (BOARD == BOARD_QMK)
-		uint16_t keypress = 0;
-	#endif
-
-	/* Run the USB management task while the bootloader is supposed to be running */
-	while (RunBootloader || WaitForExit) {
-	  USB_USBTask();
-	  #if (BOARD == BOARD_QMK)
-	  	bool pressed = (PIN(QMK_ESC_INPUT) & NUM(QMK_ESC_INPUT));
-		if ((DFU_State == dfuIDLE) && (keypress > 5000) && pressed) {
-			break;
-		}
-		if (pressed) {
-		  	keypress++;
-		} else {
-		  	keypress = 0;
-		}
-
-	  #endif
-	}
-
-	/* Reset configured hardware back to their original states for the user application */
-	ResetHardware();
-
-	/* Start the user application */
-	AppStartPtr();
-}
-
-/** Configures all hardware required for the bootloader. */
-static void SetupHardware(void)
-{
-	/* Disable watchdog if enabled by bootloader/fuses */
-	MCUSR &= ~(1 << WDRF);
-	wdt_disable();
-
-	/* Disable clock division */
-	clock_prescale_set(clock_div_1);
-
-	/* Relocate the interrupt vector table to the bootloader section */
-	MCUCR = (1 << IVCE);
-	MCUCR = (1 << IVSEL);
-
-	#if (BOARD == BOARD_QMK)
-		// output setup
-		DDR(QMK_ESC_OUTPUT) |= NUM(QMK_ESC_OUTPUT);
-		PORT(QMK_ESC_OUTPUT) |= NUM(QMK_ESC_OUTPUT);
-
-		// input setup
-		DDR(QMK_ESC_INPUT) |= NUM(QMK_ESC_INPUT);
-	#endif
-
-	/* Initialize the USB and other board hardware drivers */
-	USB_Init();
-	LEDs_Init();
-
-	/* Bootloader active LED toggle timer initialization */
-	TIMSK1 = (1 << TOIE1);
-	TCCR1B = ((1 << CS11) | (1 << CS10));
-
-}	
-
-/** Resets all configured hardware required for the bootloader back to their original states. */
-static void ResetHardware(void)
-{
-	/* Shut down the USB and other board hardware drivers */
-	USB_Disable();
-	LEDs_Disable();
-
-	/* Disable Bootloader active LED toggle timer */
-	TIMSK1 = 0;
-	TCCR1B = 0;
-
-	/* Relocate the interrupt vector table back to the application section */
-	MCUCR = (1 << IVCE);
-	MCUCR = 0;
-
-	#if (BOARD == BOARD_QMK)
-		DDR(QMK_ESC_OUTPUT) = PORT(QMK_ESC_OUTPUT) = DDR(QMK_ESC_INPUT) = PORT(QMK_ESC_INPUT) = 0;
-	#endif
-}
-
-/** 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);
-}
-
-/** Event handler for the USB_ControlRequest event. This is used to catch and process control requests sent to
- *  the device from the USB host before passing along unhandled control requests to the library for processing
- *  internally.
- */
-void EVENT_USB_Device_ControlRequest(void)
-{
-	/* Ignore any requests that aren't directed to the DFU interface */
-	if ((USB_ControlRequest.bmRequestType & (CONTROL_REQTYPE_TYPE | CONTROL_REQTYPE_RECIPIENT)) !=
-	    (REQTYPE_CLASS | REQREC_INTERFACE))
-	{
-		return;
-	}
-
-	/* Activity - toggle indicator LEDs */
-	LEDs_ToggleLEDs(LEDS_LED1 | LEDS_LED2);
-
-	/* Get the size of the command and data from the wLength value */
-	SentCommand.DataSize = USB_ControlRequest.wLength;
-
-	switch (USB_ControlRequest.bRequest)
-	{
-		case DFU_REQ_DNLOAD:
-			Endpoint_ClearSETUP();
-
-			/* Check if bootloader is waiting to terminate */
-			if (WaitForExit)
-			{
-				/* Bootloader is terminating - process last received command */
-				ProcessBootloaderCommand();
-
-				/* Indicate that the last command has now been processed - free to exit bootloader */
-				WaitForExit = false;
-			}
-
-			/* If the request has a data stage, load it into the command struct */
-			if (SentCommand.DataSize)
-			{
-				while (!(Endpoint_IsOUTReceived()))
-				{
-					if (USB_DeviceState == DEVICE_STATE_Unattached)
-					  return;
-				}
-
-				/* First byte of the data stage is the DNLOAD request's command */
-				SentCommand.Command = Endpoint_Read_8();
-
-				/* One byte of the data stage is the command, so subtract it from the total data bytes */
-				SentCommand.DataSize--;
-
-				/* Load in the rest of the data stage as command parameters */
-				for (uint8_t DataByte = 0; (DataByte < sizeof(SentCommand.Data)) &&
-				     Endpoint_BytesInEndpoint(); DataByte++)
-				{
-					SentCommand.Data[DataByte] = Endpoint_Read_8();
-					SentCommand.DataSize--;
-				}
-
-				/* Process the command */
-				ProcessBootloaderCommand();
-			}
-
-			/* Check if currently downloading firmware */
-			if (DFU_State == dfuDNLOAD_IDLE)
-			{
-				if (!(SentCommand.DataSize))
-				{
-					DFU_State = dfuIDLE;
-				}
-				else
-				{
-					/* Throw away the filler bytes before the start of the firmware */
-					DiscardFillerBytes(DFU_FILLER_BYTES_SIZE);
-
-					/* Throw away the packet alignment filler bytes before the start of the firmware */
-					DiscardFillerBytes(StartAddr % FIXED_CONTROL_ENDPOINT_SIZE);
-
-					/* Calculate the number of bytes remaining to be written */
-					uint16_t BytesRemaining = ((EndAddr - StartAddr) + 1);
-
-					if (IS_ONEBYTE_COMMAND(SentCommand.Data, 0x00))        // Write flash
-					{
-						/* Calculate the number of words to be written from the number of bytes to be written */
-						uint16_t WordsRemaining = (BytesRemaining >> 1);
-
-						union
-						{
-							uint16_t Words[2];
-							uint32_t Long;
-						} CurrFlashAddress                 = {.Words = {StartAddr, Flash64KBPage}};
-
-						uint32_t CurrFlashPageStartAddress = CurrFlashAddress.Long;
-						uint8_t  WordsInFlashPage          = 0;
-
-						while (WordsRemaining--)
-						{
-							/* Check if endpoint is empty - if so clear it and wait until ready for next packet */
-							if (!(Endpoint_BytesInEndpoint()))
-							{
-								Endpoint_ClearOUT();
-
-								while (!(Endpoint_IsOUTReceived()))
-								{
-									if (USB_DeviceState == DEVICE_STATE_Unattached)
-									  return;
-								}
-							}
-
-							/* Write the next word into the current flash page */
-							boot_page_fill(CurrFlashAddress.Long, Endpoint_Read_16_LE());
-
-							/* Adjust counters */
-							WordsInFlashPage      += 1;
-							CurrFlashAddress.Long += 2;
-
-							/* See if an entire page has been written to the flash page buffer */
-							if ((WordsInFlashPage == (SPM_PAGESIZE >> 1)) || !(WordsRemaining))
-							{
-								/* Commit the flash page to memory */
-								boot_page_write(CurrFlashPageStartAddress);
-								boot_spm_busy_wait();
-
-								/* Check if programming incomplete */
-								if (WordsRemaining)
-								{
-									CurrFlashPageStartAddress = CurrFlashAddress.Long;
-									WordsInFlashPage          = 0;
-
-									/* Erase next page's temp buffer */
-									boot_page_erase(CurrFlashAddress.Long);
-									boot_spm_busy_wait();
-								}
-							}
-						}
-
-						/* Once programming complete, start address equals the end address */
-						StartAddr = EndAddr;
-
-						/* Re-enable the RWW section of flash */
-						boot_rww_enable();
-					}
-					else                                                   // Write EEPROM
-					{
-						while (BytesRemaining--)
-						{
-							/* Check if endpoint is empty - if so clear it and wait until ready for next packet */
-							if (!(Endpoint_BytesInEndpoint()))
-							{
-								Endpoint_ClearOUT();
-
-								while (!(Endpoint_IsOUTReceived()))
-								{
-									if (USB_DeviceState == DEVICE_STATE_Unattached)
-									  return;
-								}
-							}
-
-							/* Read the byte from the USB interface and write to to the EEPROM */
-							eeprom_update_byte((uint8_t*)StartAddr, Endpoint_Read_8());
-
-							/* Adjust counters */
-							StartAddr++;
-						}
-					}
-
-					/* Throw away the currently unused DFU file suffix */
-					DiscardFillerBytes(DFU_FILE_SUFFIX_SIZE);
-				}
-			}
-
-			Endpoint_ClearOUT();
-
-			Endpoint_ClearStatusStage();
-
-			break;
-		case DFU_REQ_UPLOAD:
-			Endpoint_ClearSETUP();
-
-			while (!(Endpoint_IsINReady()))
-			{
-				if (USB_DeviceState == DEVICE_STATE_Unattached)
-				  return;
-			}
-
-			if (DFU_State != dfuUPLOAD_IDLE)
-			{
-				if ((DFU_State == dfuERROR) && IS_ONEBYTE_COMMAND(SentCommand.Data, 0x01))       // Blank Check
-				{
-					/* Blank checking is performed in the DFU_DNLOAD request - if we get here we've told the host
-					   that the memory isn't blank, and the host is requesting the first non-blank address */
-					Endpoint_Write_16_LE(StartAddr);
-				}
-				else
-				{
-					/* Idle state upload - send response to last issued command */
-					Endpoint_Write_8(ResponseByte);
-				}
-			}
-			else
-			{
-				/* Determine the number of bytes remaining in the current block */
-				uint16_t BytesRemaining = ((EndAddr - StartAddr) + 1);
-
-				if (IS_ONEBYTE_COMMAND(SentCommand.Data, 0x00))            // Read FLASH
-				{
-					/* Calculate the number of words to be written from the number of bytes to be written */
-					uint16_t WordsRemaining = (BytesRemaining >> 1);
-
-					union
-					{
-						uint16_t Words[2];
-						uint32_t Long;
-					} CurrFlashAddress = {.Words = {StartAddr, Flash64KBPage}};
-
-					while (WordsRemaining--)
-					{
-						/* Check if endpoint is full - if so clear it and wait until ready for next packet */
-						if (Endpoint_BytesInEndpoint() == FIXED_CONTROL_ENDPOINT_SIZE)
-						{
-							Endpoint_ClearIN();
-
-							while (!(Endpoint_IsINReady()))
-							{
-								if (USB_DeviceState == DEVICE_STATE_Unattached)
-								  return;
-							}
-						}
-
-						/* Read the flash word and send it via USB to the host */
-						#if (FLASHEND > 0xFFFF)
-							Endpoint_Write_16_LE(pgm_read_word_far(CurrFlashAddress.Long));
-						#else
-							Endpoint_Write_16_LE(pgm_read_word(CurrFlashAddress.Long));
-						#endif
-
-						/* Adjust counters */
-						CurrFlashAddress.Long += 2;
-					}
-
-					/* Once reading is complete, start address equals the end address */
-					StartAddr = EndAddr;
-				}
-				else if (IS_ONEBYTE_COMMAND(SentCommand.Data, 0x02))       // Read EEPROM
-				{
-					while (BytesRemaining--)
-					{
-						/* Check if endpoint is full - if so clear it and wait until ready for next packet */
-						if (Endpoint_BytesInEndpoint() == FIXED_CONTROL_ENDPOINT_SIZE)
-						{
-							Endpoint_ClearIN();
-
-							while (!(Endpoint_IsINReady()))
-							{
-								if (USB_DeviceState == DEVICE_STATE_Unattached)
-								  return;
-							}
-						}
-
-						/* Read the EEPROM byte and send it via USB to the host */
-						Endpoint_Write_8(eeprom_read_byte((uint8_t*)StartAddr));
-
-						/* Adjust counters */
-						StartAddr++;
-					}
-				}
-
-				/* Return to idle state */
-				DFU_State = dfuIDLE;
-			}
-
-			Endpoint_ClearIN();
-
-			Endpoint_ClearStatusStage();
-			break;
-		case DFU_REQ_GETSTATUS:
-			Endpoint_ClearSETUP();
-
-			while (!(Endpoint_IsINReady()))
-			{
-				if (USB_DeviceState == DEVICE_STATE_Unattached)
-				  return;
-			}
-
-			/* Write 8-bit status value */
-			Endpoint_Write_8(DFU_Status);
-
-			/* Write 24-bit poll timeout value */
-			Endpoint_Write_8(0);
-			Endpoint_Write_16_LE(0);
-
-			/* Write 8-bit state value */
-			Endpoint_Write_8(DFU_State);
-
-			/* Write 8-bit state string ID number */
-			Endpoint_Write_8(0);
-
-			Endpoint_ClearIN();
-
-			Endpoint_ClearStatusStage();
-			break;
-		case DFU_REQ_CLRSTATUS:
-			Endpoint_ClearSETUP();
-
-			/* Reset the status value variable to the default OK status */
-			DFU_Status = OK;
-
-			Endpoint_ClearStatusStage();
-			break;
-		case DFU_REQ_GETSTATE:
-			Endpoint_ClearSETUP();
-
-			while (!(Endpoint_IsINReady()))
-			{
-				if (USB_DeviceState == DEVICE_STATE_Unattached)
-				  return;
-			}
-
-			/* Write the current device state to the endpoint */
-			Endpoint_Write_8(DFU_State);
-
-			Endpoint_ClearIN();
-
-			Endpoint_ClearStatusStage();
-			break;
-		case DFU_REQ_ABORT:
-			Endpoint_ClearSETUP();
-
-			/* Reset the current state variable to the default idle state */
-			DFU_State = dfuIDLE;
-
-			Endpoint_ClearStatusStage();
-			break;
-	}
-}
-
-/** Routine to discard the specified number of bytes from the control endpoint stream. This is used to
- *  discard unused bytes in the stream from the host, including the memory program block suffix.
- *
- *  \param[in] NumberOfBytes  Number of bytes to discard from the host from the control endpoint
- */
-static void DiscardFillerBytes(uint8_t NumberOfBytes)
-{
-	while (NumberOfBytes--)
-	{
-		if (!(Endpoint_BytesInEndpoint()))
-		{
-			Endpoint_ClearOUT();
-
-			/* Wait until next data packet received */
-			while (!(Endpoint_IsOUTReceived()))
-			{
-				if (USB_DeviceState == DEVICE_STATE_Unattached)
-				  return;
-			}
-		}
-		else
-		{
-			Endpoint_Discard_8();
-		}
-	}
-}
-
-/** Routine to process an issued command from the host, via a DFU_DNLOAD request wrapper. This routine ensures
- *  that the command is allowed based on the current secure mode flag value, and passes the command off to the
- *  appropriate handler function.
- */
-static void ProcessBootloaderCommand(void)
-{
-	/* Check if device is in secure mode */
-	if (IsSecure)
-	{
-		/* Don't process command unless it is a READ or chip erase command */
-		if (!(((SentCommand.Command == COMMAND_WRITE)             &&
-		        IS_TWOBYTE_COMMAND(SentCommand.Data, 0x00, 0xFF)) ||
-			   (SentCommand.Command == COMMAND_READ)))
-		{
-			/* Set the state and status variables to indicate the error */
-			DFU_State  = dfuERROR;
-			DFU_Status = errWRITE;
-
-			/* Stall command */
-			Endpoint_StallTransaction();
-
-			/* Don't process the command */
-			return;
-		}
-	}
-
-	/* Dispatch the required command processing routine based on the command type */
-	switch (SentCommand.Command)
-	{
-		case COMMAND_PROG_START:
-			ProcessMemProgCommand();
-			break;
-		case COMMAND_DISP_DATA:
-			ProcessMemReadCommand();
-			break;
-		case COMMAND_WRITE:
-			ProcessWriteCommand();
-			break;
-		case COMMAND_READ:
-			ProcessReadCommand();
-			break;
-		case COMMAND_CHANGE_BASE_ADDR:
-			if (IS_TWOBYTE_COMMAND(SentCommand.Data, 0x03, 0x00))              // Set 64KB flash page command
-			  Flash64KBPage = SentCommand.Data[2];
-
-			break;
-	}
-}
-
-/** Routine to concatenate the given pair of 16-bit memory start and end addresses from the host, and store them
- *  in the StartAddr and EndAddr global variables.
- */
-static void LoadStartEndAddresses(void)
-{
-	union
-	{
-		uint8_t  Bytes[2];
-		uint16_t Word;
-	} Address[2] = {{.Bytes = {SentCommand.Data[2], SentCommand.Data[1]}},
-	                {.Bytes = {SentCommand.Data[4], SentCommand.Data[3]}}};
-
-	/* Load in the start and ending read addresses from the sent data packet */
-	StartAddr = Address[0].Word;
-	EndAddr   = Address[1].Word;
-}
-
-/** Handler for a Memory Program command issued by the host. This routine handles the preparations needed
- *  to write subsequent data from the host into the specified memory.
- */
-static void ProcessMemProgCommand(void)
-{
-	if (IS_ONEBYTE_COMMAND(SentCommand.Data, 0x00) ||                          // Write FLASH command
-	    IS_ONEBYTE_COMMAND(SentCommand.Data, 0x01))                            // Write EEPROM command
-	{
-		/* Load in the start and ending read addresses */
-		LoadStartEndAddresses();
-
-		/* If FLASH is being written to, we need to pre-erase the first page to write to */
-		if (IS_ONEBYTE_COMMAND(SentCommand.Data, 0x00))
-		{
-			union
-			{
-				uint16_t Words[2];
-				uint32_t Long;
-			} CurrFlashAddress = {.Words = {StartAddr, Flash64KBPage}};
-
-			/* Erase the current page's temp buffer */
-			boot_page_erase(CurrFlashAddress.Long);
-			boot_spm_busy_wait();
-		}
-
-		/* Set the state so that the next DNLOAD requests reads in the firmware */
-		DFU_State = dfuDNLOAD_IDLE;
-	}
-}
-
-/** Handler for a Memory Read command issued by the host. This routine handles the preparations needed
- *  to read subsequent data from the specified memory out to the host, as well as implementing the memory
- *  blank check command.
- */
-static void ProcessMemReadCommand(void)
-{
-	if (IS_ONEBYTE_COMMAND(SentCommand.Data, 0x00) ||                          // Read FLASH command
-        IS_ONEBYTE_COMMAND(SentCommand.Data, 0x02))                            // Read EEPROM command
-	{
-		/* Load in the start and ending read addresses */
-		LoadStartEndAddresses();
-
-		/* Set the state so that the next UPLOAD requests read out the firmware */
-		DFU_State = dfuUPLOAD_IDLE;
-	}
-	else if (IS_ONEBYTE_COMMAND(SentCommand.Data, 0x01))                       // Blank check FLASH command
-	{
-		uint32_t CurrFlashAddress = 0;
-
-		while (CurrFlashAddress < (uint32_t)BOOT_START_ADDR)
-		{
-			/* Check if the current byte is not blank */
-			#if (FLASHEND > 0xFFFF)
-			if (pgm_read_byte_far(CurrFlashAddress) != 0xFF)
-			#else
-			if (pgm_read_byte(CurrFlashAddress) != 0xFF)
-			#endif
-			{
-				/* Save the location of the first non-blank byte for response back to the host */
-				Flash64KBPage = (CurrFlashAddress >> 16);
-				StartAddr     = CurrFlashAddress;
-
-				/* Set state and status variables to the appropriate error values */
-				DFU_State  = dfuERROR;
-				DFU_Status = errCHECK_ERASED;
-
-				break;
-			}
-
-			CurrFlashAddress++;
-		}
-	}
-}
-
-/** Handler for a Data Write command issued by the host. This routine handles non-programming commands such as
- *  bootloader exit (both via software jumps and hardware watchdog resets) and flash memory erasure.
- */
-static void ProcessWriteCommand(void)
-{
-	if (IS_ONEBYTE_COMMAND(SentCommand.Data, 0x03))                            // Start application
-	{
-		/* Indicate that the bootloader is terminating */
-		WaitForExit = true;
-
-		/* Check if data supplied for the Start Program command - no data executes the program */
-		if (SentCommand.DataSize)
-		{
-			if (SentCommand.Data[1] == 0x01)                                   // Start via jump
-			{
-				union
-				{
-					uint8_t  Bytes[2];
-					AppPtr_t FuncPtr;
-				} Address = {.Bytes = {SentCommand.Data[4], SentCommand.Data[3]}};
-
-				/* Load in the jump address into the application start address pointer */
-				AppStartPtr = Address.FuncPtr;
-			}
-		}
-		else
-		{
-			if (SentCommand.Data[1] == 0x00)                                   // Start via watchdog
-			{
-				/* Unlock the forced application start mode of the bootloader if it is restarted */
-				MagicBootKey = MAGIC_BOOT_KEY;
-
-				/* Start the watchdog to reset the AVR once the communications are finalized */
-				wdt_enable(WDTO_250MS);
-			}
-			else                                                               // Start via jump
-			{
-				/* Set the flag to terminate the bootloader at next opportunity if a valid application has been loaded */
-				if (pgm_read_word_near(0) == 0xFFFF)
-				  RunBootloader = false;
-			}
-		}
-	}
-	else if (IS_TWOBYTE_COMMAND(SentCommand.Data, 0x00, 0xFF))                 // Erase flash
-	{
-		uint32_t CurrFlashAddress = 0;
-
-		/* Clear the application section of flash */
-		while (CurrFlashAddress < (uint32_t)BOOT_START_ADDR)
-		{
-			boot_page_erase(CurrFlashAddress);
-			boot_spm_busy_wait();
-			boot_page_write(CurrFlashAddress);
-			boot_spm_busy_wait();
-
-			CurrFlashAddress += SPM_PAGESIZE;
-		}
-
-		/* Re-enable the RWW section of flash as writing to the flash locks it out */
-		boot_rww_enable();
-
-		/* Memory has been erased, reset the security bit so that programming/reading is allowed */
-		IsSecure = false;
-	}
-}
-
-/** Handler for a Data Read command issued by the host. This routine handles bootloader information retrieval
- *  commands such as device signature and bootloader version retrieval.
- */
-static void ProcessReadCommand(void)
-{
-	const uint8_t BootloaderInfo[3] = {BOOTLOADER_VERSION, BOOTLOADER_ID_BYTE1, BOOTLOADER_ID_BYTE2};
-	const uint8_t SignatureInfo[4]  = {0x58, AVR_SIGNATURE_1, AVR_SIGNATURE_2, AVR_SIGNATURE_3};
-
-	uint8_t DataIndexToRead    = SentCommand.Data[1];
-	bool    ReadAddressInvalid = false;
-
-	if (IS_ONEBYTE_COMMAND(SentCommand.Data, 0x00))                        // Read bootloader info
-	{
-		if (DataIndexToRead < 3)
-		  ResponseByte = BootloaderInfo[DataIndexToRead];
-		else
-		  ReadAddressInvalid = true;
-	}
-	else if (IS_ONEBYTE_COMMAND(SentCommand.Data, 0x01))                    // Read signature byte
-	{
-		switch (DataIndexToRead)
-		{
-			case 0x30:
-				ResponseByte = SignatureInfo[0];
-				break;
-			case 0x31:
-				ResponseByte = SignatureInfo[1];
-				break;
-			case 0x60:
-				ResponseByte = SignatureInfo[2];
-				break;
-			case 0x61:
-				ResponseByte = SignatureInfo[3];
-				break;
-			default:
-				ReadAddressInvalid = true;
-				break;
-		}
-	}
-
-	if (ReadAddressInvalid)
-	{
-		/* Set the state and status variables to indicate the error */
-		DFU_State  = dfuERROR;
-		DFU_Status = errADDRESS;
-	}
-}

+ 0 - 216
lib/lufa/Bootloaders/DFU/BootloaderDFU.h

@@ -1,216 +0,0 @@
-/*
-             LUFA Library
-     Copyright (C) Dean Camera, 2017.
-
-  dean [at] fourwalledcubicle [dot] com
-           www.lufa-lib.org
-*/
-
-/*
-  Copyright 2017  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 BootloaderDFU.c.
- */
-
-#ifndef _BOOTLOADER_H_
-#define _BOOTLOADER_H_
-
-	/* Includes: */
-		#include <avr/io.h>
-		#include <avr/wdt.h>
-		#include <avr/boot.h>
-		#include <avr/pgmspace.h>
-		#include <avr/eeprom.h>
-		#include <avr/power.h>
-		#include <avr/interrupt.h>
-		#include <util/delay.h>
-		#include <stdbool.h>
-
-		#include "Descriptors.h"
-		#include "BootloaderAPI.h"
-		#include "Config/AppConfig.h"
-
-		#include <LUFA/Drivers/USB/USB.h>
-		#include <LUFA/Drivers/Board/LEDs.h>
-		#include <LUFA/Platform/Platform.h>
-
-	/* 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: */
-		/** Major bootloader version number. */
-		#define BOOTLOADER_VERSION_MINOR 2
-
-		/** Minor bootloader version number. */
-		#define BOOTLOADER_VERSION_REV   0
-
-		/** Magic bootloader key to unlock forced application start mode. */
-		#define MAGIC_BOOT_KEY           0xDC42
-
-		/** Complete bootloader version number expressed as a packed byte, constructed from the
-		 *  two individual bootloader version macros.
-		 */
-		#define BOOTLOADER_VERSION       ((BOOTLOADER_VERSION_MINOR << 4) | BOOTLOADER_VERSION_REV)
-
-		/** First byte of the bootloader identification bytes, used to identify a device's bootloader. */
-		#define BOOTLOADER_ID_BYTE1      0xDC
-
-		/** Second byte of the bootloader identification bytes, used to identify a device's bootloader. */
-		#define BOOTLOADER_ID_BYTE2      0xFB
-
-		/** Convenience macro, used to determine if the issued command is the given one-byte long command.
-		 *
-		 *  \param[in] dataarr  Command byte array to check against
-		 *  \param[in] cb1      First command byte to check
-		 */
-		#define IS_ONEBYTE_COMMAND(dataarr, cb1)       (dataarr[0] == (cb1))
-
-		/** Convenience macro, used to determine if the issued command is the given two-byte long command.
-		 *
-		 *  \param[in] dataarr  Command byte array to check against
-		 *  \param[in] cb1      First command byte to check
-		 *  \param[in] cb2      Second command byte to check
-		 */
-		#define IS_TWOBYTE_COMMAND(dataarr, cb1, cb2) ((dataarr[0] == (cb1)) && (dataarr[1] == (cb2)))
-
-		/** Length of the DFU file suffix block, appended to the end of each complete memory write command.
-		 *  The DFU file suffix is currently unused (but is designed to give extra file information, such as
-		 *  a CRC of the complete firmware for error checking) and so is discarded.
-		 */
-		#define DFU_FILE_SUFFIX_SIZE     16
-
-		/** Length of the DFU file filler block, appended to the start of each complete memory write command.
-		 *  Filler bytes are added to the start of each complete memory write command, and must be discarded.
-		 */
-		#define DFU_FILLER_BYTES_SIZE    26
-
-		/** DFU class command request to detach from the host. */
-		#define DFU_REQ_DETATCH          0x00
-
-		/** DFU class command request to send data from the host to the bootloader. */
-		#define DFU_REQ_DNLOAD           0x01
-
-		/** DFU class command request to send data from the bootloader to the host. */
-		#define DFU_REQ_UPLOAD           0x02
-
-		/** DFU class command request to get the current DFU status and state from the bootloader. */
-		#define DFU_REQ_GETSTATUS        0x03
-
-		/** DFU class command request to reset the current DFU status and state variables to their defaults. */
-		#define DFU_REQ_CLRSTATUS        0x04
-
-		/** DFU class command request to get the current DFU state of the bootloader. */
-		#define DFU_REQ_GETSTATE         0x05
-
-		/** DFU class command request to abort the current multi-request transfer and return to the dfuIDLE state. */
-		#define DFU_REQ_ABORT            0x06
-
-		/** DFU command to begin programming the device's memory. */
-		#define COMMAND_PROG_START       0x01
-
-		/** DFU command to begin reading the device's memory. */
-		#define COMMAND_DISP_DATA        0x03
-
-		/** DFU command to issue a write command. */
-		#define COMMAND_WRITE            0x04
-
-		/** DFU command to issue a read command. */
-		#define COMMAND_READ             0x05
-
-		/** DFU command to issue a memory base address change command, to set the current 64KB flash page
-		 *  that subsequent flash operations should use. */
-		#define COMMAND_CHANGE_BASE_ADDR 0x06
-
-	/* Type Defines: */
-		/** Type define for a non-returning function pointer to the loaded application. */
-		typedef void (*AppPtr_t)(void) ATTR_NO_RETURN;
-
-		/** Type define for a structure containing a complete DFU command issued by the host. */
-		typedef struct
-		{
-			uint8_t  Command; /**< Single byte command to perform, one of the \c COMMAND_* macro values */
-			uint8_t  Data[5]; /**< Command parameters */
-			uint16_t DataSize; /**< Size of the command parameters */
-		} DFU_Command_t;
-
-	/* Enums: */
-		/** DFU bootloader states. Refer to the DFU class specification for information on each state. */
-		enum DFU_State_t
-		{
-			appIDLE                      = 0,
-			appDETACH                    = 1,
-			dfuIDLE                      = 2,
-			dfuDNLOAD_SYNC               = 3,
-			dfuDNBUSY                    = 4,
-			dfuDNLOAD_IDLE               = 5,
-			dfuMANIFEST_SYNC             = 6,
-			dfuMANIFEST                  = 7,
-			dfuMANIFEST_WAIT_RESET       = 8,
-			dfuUPLOAD_IDLE               = 9,
-			dfuERROR                     = 10
-		};
-
-		/** DFU command status error codes. Refer to the DFU class specification for information on each error code. */
-		enum DFU_Status_t
-		{
-			OK                           = 0,
-			errTARGET                    = 1,
-			errFILE                      = 2,
-			errWRITE                     = 3,
-			errERASE                     = 4,
-			errCHECK_ERASED              = 5,
-			errPROG                      = 6,
-			errVERIFY                    = 7,
-			errADDRESS                   = 8,
-			errNOTDONE                   = 9,
-			errFIRMWARE                  = 10,
-			errVENDOR                    = 11,
-			errUSBR                      = 12,
-			errPOR                       = 13,
-			errUNKNOWN                   = 14,
-			errSTALLEDPKT                = 15
-		};
-
-	/* Function Prototypes: */
-		static void SetupHardware(void);
-		static void ResetHardware(void);
-
-		void EVENT_USB_Device_ControlRequest(void);
-
-		#if defined(INCLUDE_FROM_BOOTLOADER_C)
-			static void DiscardFillerBytes(uint8_t NumberOfBytes);
-			static void ProcessBootloaderCommand(void);
-			static void LoadStartEndAddresses(void);
-			static void ProcessMemProgCommand(void);
-			static void ProcessMemReadCommand(void);
-			static void ProcessWriteCommand(void);
-			static void ProcessReadCommand(void);
-		#endif
-
-		void Application_Jump_Check(void) ATTR_INIT_SECTION(3);
-
-#endif
-

+ 0 - 235
lib/lufa/Bootloaders/DFU/BootloaderDFU.txt

@@ -1,235 +0,0 @@
-/** \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 DFU 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) - <i>See \ref SSec_Aux_Space</i>
- *  \li Series 2 USB AVRs (AT90USBxx2, ATMEGAxxU2) - <i>See \ref SSec_Aux_Space</i>
- *
- *  \section Sec_Info USB Information:
- *
- *  The following table gives a rundown of the USB utilization of this demo.
- *
- * <table>
- *  <tr>
- *   <td><b>USB Mode:</b></td>
- *   <td>Device</td>
- *  </tr>
- *  <tr>
- *   <td><b>USB Class:</b></td>
- *   <td>Device Firmware Update Class (DFU)</td>
- *  </tr>
- *  <tr>
- *   <td><b>USB Subclass:</b></td>
- *   <td>None</td>
- *  </tr>
- *  <tr>
- *   <td><b>Relevant Standards:</b></td>
- *   <td>USBIF DFU Class Standard, Atmel USB Bootloader Datasheet</td>
- *  </tr>
- *  <tr>
- *   <td><b>Supported USB Speeds:</b></td>
- *   <td>Low Speed Mode \n
- *       Full Speed Mode</td>
- *  </tr>
- * </table>
- *
- *  \section Sec_Description Project Description:
- *
- *  This bootloader enumerates to the host as a DFU Class device, allowing for DFU-compatible programming
- *  software to load firmware onto the AVR.
- *
- *  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.
- *
- *  \section Sec_Running Running the Bootloader
- *
- *  On the USB AVR8 devices, setting the \c HWBE device fuse will cause the bootloader to run if the \c HWB pin of
- *  the AVR is grounded when the device is reset.
- *
- *  The are two behaviours of this bootloader, depending on the device's fuses:
- *
- *  <b>If the device's BOOTRST fuse is set</b>, the bootloader will run any time the system is reset from
- *  the external reset pin, unless no valid user application has been loaded. To initiate the bootloader, the
- *  device's external reset pin should be grounded momentarily.
- *
- *  <b>If the device's BOOTRST fuse is not set</b>, the bootloader will run only if initiated via a software
- *  jump, or if the \c HWB pin was low during the last device reset (if the \c HWBE fuse is set).
- *
- *  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
- *
- *  This bootloader is designed to be compatible with Atmel's provided Windows DFU class drivers. You will need to
- *  install Atmel's DFU drivers prior to using this bootloader on Windows platforms. If you are using a 64 bit Windows
- *  OS, you will need to either disable the driver signing requirement (see online tutorials for details) or use a
- *  digitally signed version of the official Atmel driver provided by a third party AVR user at
- *  <a>http://www.avrfreaks.net/index.php?module=Freaks%20Academy&func=viewItem&item_id=2196&item_type=project</a>.
- *
- *  \note This device spoofs Atmel's DFU Bootloader USB VID and PID so that the Atmel DFU bootloader
- *        drivers included with FLIP will work. If you do not wish to use Atmel's ID codes, please
- *        manually change them in Descriptors.c and alter your driver's INF file accordingly.
- *
- *  \section Sec_HostApp Host Controller Application
- *
- *  This bootloader is compatible with Atmel's FLIP utility on Windows machines, and dfu-programmer on Linux machines.
- *
- *  \subsection SSec_FLIP FLIP (Windows)
- *
- *  FLIP (Flexible In-System Programmer) is a utility written by Atmel, and distributed for free on the Atmel website.
- *  The FLIP utility is designed to assist in the bootloader programming of a range of Atmel devices, through several
- *  popular physical interfaces including USB. It is written in Java, however makes use of native extensions for USB
- *  support and thus is only offered on Windows.
- *
- *  To program a device using FLIP, refer to the Atmel FLIP documentation.
- *
- *  \subsection SSec_DFUProgrammer dfu-programmer (Linux)
- *
- *  dfu-programmer is an open-source command line solution for the bootloader programming of Atmel devices through a
- *  USB connection, using the DFU protocol, available for download at <a>http://sourceforge.net/projects/dfu-programmer/</a>.
- *
- *  The following example loads a HEX file into the AVR's FLASH memory using dfu-programmer:
- *  \code
- *  dfu-programmer at90usb1287 erase flash Mouse.hex
- *  \endcode
- *
- *  \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.
- *
- *  \warning The APIs exposed by the DFU class bootloader are \b NOT compatible with the API exposed by the official Atmel DFU bootloader.
- *
- *  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_DFU_SIGNATURE           0xDF10
- *
- *  #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_DFU_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_AUX_SECTION_SIZE
- *  | Booloader Start Trampoline |
- *  | (Not User App. Accessible) |
- *  +----------------------------+ FLASHEND - (BOOT_AUX_SECTION_SIZE - 4)
- *  |                            |
- *  |     Auxillery Bootloader   |
- *  |  Space for Smaller Devices |
- *  | (Not User App. Accessible) |
- *  |                            |
- *  +----------------------------+ 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
- *
- *  \subsection SSec_Aux_Space Auxiliary Bootloader Section
- *  To make the bootloader function on smaller devices (those with a physical
- *  bootloader section of smaller than 6KB)
- *
- *  \section Sec_KnownIssues Known Issues:
- *
- *  \par On Linux machines, the DFU bootloader is inaccessible.
- *  On many Linux systems, non-root users do not have automatic access to newly
- *  inserted DFU devices. Root privileges or a UDEV rule is required to gain
- *  access.
- *  See <a href=https://groups.google.com/d/msg/lufa-support/CP9cy2bc8yo/kBqsOu-RBeMJ>here</a> for resolution steps.
- *
- *  \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.
- *
- *  <table>
- *   <tr>
- *    <th><b>Define Name:</b></th>
- *    <th><b>Location:</b></th>
- *    <th><b>Description:</b></th>
- *   </tr>
- *   <tr>
- *    <td>SECURE_MODE</td>
- *    <td>AppConfig.h</td>
- *    <td>If defined to \c true, the bootloader will not accept any memory commands other than a chip erase on start-up, until an
- *        erase has been performed. This can be used in conjunction with the AVR's lockbits to prevent the AVRs firmware from
- *        being dumped by unauthorized persons. When false, all memory operations are allowed at any time.</td>
- *   </tr>
- *  </table>
- */
-

+ 0 - 48
lib/lufa/Bootloaders/DFU/Config/AppConfig.h

@@ -1,48 +0,0 @@
-/*
-             LUFA Library
-     Copyright (C) Dean Camera, 2017.
-
-  dean [at] fourwalledcubicle [dot] com
-           www.lufa-lib.org
-*/
-
-/*
-  Copyright 2017  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 some of
- *  the application's compile time options, as an alternative to
- *  specifying the compile time constants supplied through a
- *  makefile or build system.
- *
- *  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 SECURE_MODE              false
-
-#endif

+ 0 - 93
lib/lufa/Bootloaders/DFU/Config/LUFAConfig.h

@@ -1,93 +0,0 @@
-/*
-             LUFA Library
-     Copyright (C) Dean Camera, 2017.
-
-  dean [at] fourwalledcubicle [dot] com
-           www.lufa-lib.org
-*/
-
-/*
-  Copyright 2017  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      32
-		#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

+ 0 - 193
lib/lufa/Bootloaders/DFU/Descriptors.c

@@ -1,193 +0,0 @@
-/*
-             LUFA Library
-     Copyright (C) Dean Camera, 2017.
-
-  dean [at] fourwalledcubicle [dot] com
-           www.lufa-lib.org
-*/
-
-/*
-  Copyright 2017  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"
-#include "Keyboard.h"
-
-#ifndef MANUFACTURER
-    #define MANUFACTURER QMK
-#endif
-#ifndef PRODUCT
-    #define PRODUCT Keyboard
-#endif
-
-/** 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                  = USB_CSCP_NoDeviceClass,
-	.SubClass               = USB_CSCP_NoDeviceSubclass,
-	.Protocol               = USB_CSCP_NoDeviceProtocol,
-
-	.Endpoint0Size          = FIXED_CONTROL_ENDPOINT_SIZE,
-
-	.VendorID               = 0x03EB,
-	.ProductID              = PRODUCT_ID_CODE,
-	.ReleaseNumber          = VERSION_BCD(0,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        = 1,
-
-			.ConfigurationNumber    = 1,
-			.ConfigurationStrIndex  = NO_DESCRIPTOR,
-
-			.ConfigAttributes       = USB_CONFIG_ATTR_RESERVED,
-
-			.MaxPowerConsumption    = USB_CONFIG_POWER_MA(100)
-		},
-
-	.DFU_Interface =
-		{
-			.Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
-
-			.InterfaceNumber        = INTERFACE_ID_DFU,
-			.AlternateSetting       = 0,
-
-			.TotalEndpoints         = 0,
-
-			.Class                  = 0xFE,
-			.SubClass               = 0x01,
-			.Protocol               = 0x02,
-
-			.InterfaceStrIndex      = NO_DESCRIPTOR
-		},
-
-	.DFU_Functional =
-		{
-			.Header                 = {.Size = sizeof(USB_Descriptor_DFU_Functional_t), .Type = DTYPE_DFUFunctional},
-
-			.Attributes             = (ATTR_CAN_UPLOAD | ATTR_CAN_DOWNLOAD),
-
-			.DetachTimeout          = 0x0000,
-			.TransferSize           = 0x0C00,
-
-			.DFUSpecification       = VERSION_BCD(1,1,0)
-		}
-};
-
-/** 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(LSTR(MANUFACTURER));
-
-/** 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(LSTR(PRODUCT));
-
-/** This function is called by the library when in device mode, and must be overridden (see 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 uint16_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;
-}
-

+ 0 - 200
lib/lufa/Bootloaders/DFU/Descriptors.h

@@ -1,200 +0,0 @@
-/*
-             LUFA Library
-     Copyright (C) Dean Camera, 2017.
-
-  dean [at] fourwalledcubicle [dot] com
-           www.lufa-lib.org
-*/
-
-/*
-  Copyright 2017  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 <LUFA/Drivers/USB/USB.h>
-
-		#include "Config/AppConfig.h"
-
-	/* Macros: */
-		/** Descriptor type value for a DFU class functional descriptor. */
-		#define DTYPE_DFUFunctional               0x21
-
-		/** DFU attribute mask, indicating that the DFU device will detach and re-attach when a DFU_DETACH
-		 *  command is issued, rather than the host issuing a USB Reset.
-		 */
-		#define ATTR_WILL_DETATCH                 (1 << 3)
-
-		/** DFU attribute mask, indicating that the DFU device can communicate during the manifestation phase
-		 *  (memory programming phase).
-		 */
-		#define ATTR_MANEFESTATION_TOLLERANT      (1 << 2)
-
-		/** DFU attribute mask, indicating that the DFU device can accept DFU_UPLOAD requests to send data from
-		 *  the device to the host.
-		 */
-		#define ATTR_CAN_UPLOAD                   (1 << 1)
-
-		/** DFU attribute mask, indicating that the DFU device can accept DFU_DNLOAD requests to send data from
-		 *  the host to the device.
-		 */
-		#define ATTR_CAN_DOWNLOAD                 (1 << 0)
-
-		#if defined(__AVR_AT90USB1287__)
-			#define PRODUCT_ID_CODE               0x2FFB
-			#define AVR_SIGNATURE_1               0x1E
-			#define AVR_SIGNATURE_2               0x97
-			#define AVR_SIGNATURE_3               0x82
-		#elif defined(__AVR_AT90USB647__)
-			#define PRODUCT_ID_CODE               0x2FF9
-			#define AVR_SIGNATURE_1               0x1E
-			#define AVR_SIGNATURE_2               0x96
-			#define AVR_SIGNATURE_3               0x82
-		#elif defined(__AVR_AT90USB1286__)
-			#define PRODUCT_ID_CODE               0x2FFB
-			#define AVR_SIGNATURE_1               0x1E
-			#define AVR_SIGNATURE_2               0x97
-			#define AVR_SIGNATURE_3               0x82
-		#elif defined(__AVR_AT90USB646__)
-			#define PRODUCT_ID_CODE               0x2FF9
-			#define AVR_SIGNATURE_1               0x1E
-			#define AVR_SIGNATURE_2               0x96
-			#define AVR_SIGNATURE_3               0x82
-		#elif defined(__AVR_ATmega32U4__)
-			#define PRODUCT_ID_CODE               0x2FF4
-			#define AVR_SIGNATURE_1               0x1E
-			#define AVR_SIGNATURE_2               0x95
-			#define AVR_SIGNATURE_3               0x87
-		#elif defined(__AVR_ATmega16U4__)
-			#define PRODUCT_ID_CODE               0x2FF3
-			#define AVR_SIGNATURE_1               0x1E
-			#define AVR_SIGNATURE_2               0x94
-			#define AVR_SIGNATURE_3               0x88
-		#elif defined(__AVR_ATmega32U2__)
-			#define PRODUCT_ID_CODE               0x2FF0
-			#define AVR_SIGNATURE_1               0x1E
-			#define AVR_SIGNATURE_2               0x95
-			#define AVR_SIGNATURE_3               0x8A
-		#elif defined(__AVR_ATmega16U2__)
-			#define PRODUCT_ID_CODE               0x2FEF
-			#define AVR_SIGNATURE_1               0x1E
-			#define AVR_SIGNATURE_2               0x94
-			#define AVR_SIGNATURE_3               0x89
-		#elif defined(__AVR_AT90USB162__)
-			#define PRODUCT_ID_CODE               0x2FFA
-			#define AVR_SIGNATURE_1               0x1E
-			#define AVR_SIGNATURE_2               0x94
-			#define AVR_SIGNATURE_3               0x82
-		#elif defined(__AVR_ATmega8U2__)
-			#define PRODUCT_ID_CODE               0x2FEE
-			#define AVR_SIGNATURE_1               0x1E
-			#define AVR_SIGNATURE_2               0x93
-			#define AVR_SIGNATURE_3               0x89
-		#elif defined(__AVR_AT90USB82__)
-			#define PRODUCT_ID_CODE               0x2FF7
-			#define AVR_SIGNATURE_1               0x1E
-			#define AVR_SIGNATURE_2               0x93
-			#define AVR_SIGNATURE_3               0x82
-		#else
-			#error The selected AVR part is not currently supported by this bootloader.
-		#endif
-
-		#if !defined(PRODUCT_ID_CODE)
-			#error Current AVR model is not supported by this bootloader.
-		#endif
-
-	/* Type Defines: */
-		/** Type define for a DFU class function descriptor. This descriptor gives DFU class information
-		 *  to the host when read, indicating the DFU device's capabilities.
-		 */
-		typedef struct
-		{
-			USB_Descriptor_Header_t Header; /**< Standard descriptor header structure */
-
-			uint8_t                 Attributes; /**< DFU device attributes, a mask comprising of the
-			                                     *  ATTR_* macros listed in this source file
-			                                     */
-			uint16_t                DetachTimeout; /**< Timeout in milliseconds between a USB_DETACH
-			                                        *  command being issued and the device detaching
-			                                        *  from the USB bus
-			                                        */
-			uint16_t                TransferSize; /**< Maximum number of bytes the DFU device can accept
-			                                       *  from the host in a transaction
-			                                       */
-			uint16_t                DFUSpecification; /**< BCD packed DFU specification number this DFU
-			                                           *  device complies with
-			                                           */
-		} USB_Descriptor_DFU_Functional_t;
-
-		/** Type define for the device configuration descriptor structure. This must be defined in the
-		 *  application code, as the configuration descriptor contains several sub-descriptors which
-		 *  vary between devices, and which describe the device's usage to the host.
-		 */
-		typedef struct
-		{
-			USB_Descriptor_Configuration_Header_t Config;
-
-			// DFU Interface
-			USB_Descriptor_Interface_t            DFU_Interface;
-			USB_Descriptor_DFU_Functional_t       DFU_Functional;
-		} 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_DFU = 0, /**< DFU 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 uint16_t wIndex,
-		                                    const void** const DescriptorAddress)
-		                                    ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);
-		// convert to L string
-		#define LSTR(s) XLSTR(s)
-		#define XLSTR(s) L ## #s
-		// convert to string
-		#define STR(s) XSTR(s)
-		#define XSTR(s) #s
-		                                    
-#endif
-

+ 0 - 156
lib/lufa/Bootloaders/DFU/asf.xml

@@ -1,156 +0,0 @@
-<asf xmlversion="1.0">
-	<project caption="DFU Bootloader - 128KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.dfu.avr8.128_4" force-caption="true" workspace-name="lufa_dfu_128kb_4kb_">
-		<require idref="lufa.bootloaders.dfu"/>
-		<require idref="lufa.boards.dummy.avr8"/>
-		<generator value="as5_8"/>
-
-		<device-support value="at90usb1287"/>
-		<config name="lufa.drivers.board.name" value="none"/>
-
-		<config name="config.compiler.optimization.level" value="size"/>
-
-		<build type="define" name="F_CPU" value="16000000UL"/>
-		<build type="define" name="F_USB" value="16000000UL"/>
-
-		<build type="define" name="BOOT_START_ADDR" value="0x1F000"/>
-		<build type="linker-config" subtype="flags" value="--section-start=.text=0x1F000"/>
-
-		<build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0x1FFA0"/>
-		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>
-		<build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0x1FFE0"/>
-		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>
-		<build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0x1FFF8"/>
-		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>
-	</project>
-
-	<project caption="DFU Bootloader - 64KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.dfu.avr8.64_4" force-caption="true" workspace-name="lufa_dfu_64kb_4kb_">
-		<require idref="lufa.bootloaders.dfu"/>
-		<require idref="lufa.boards.dummy.avr8"/>
-		<generator value="as5_8"/>
-
-		<device-support value="at90usb647"/>
-		<config name="lufa.drivers.board.name" value="none"/>
-
-		<config name="config.compiler.optimization.level" value="size"/>
-
-		<build type="define" name="F_CPU" value="16000000UL"/>
-		<build type="define" name="F_USB" value="16000000UL"/>
-
-		<build type="define" name="BOOT_START_ADDR" value="0xF000"/>
-		<build type="linker-config" subtype="flags" value="--section-start=.text=0xF000"/>
-
-		<build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0xFFA0"/>
-		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>
-		<build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0xFFE0"/>
-		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>
-		<build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0xFFF8"/>
-		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>
-	</project>
-
-	<project caption="DFU Bootloader - 32KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.dfu.avr8.32_4" force-caption="true" workspace-name="lufa_dfu_32kb_4kb_">
-		<require idref="lufa.bootloaders.dfu"/>
-		<require idref="lufa.boards.dummy.avr8"/>
-		<generator value="as5_8"/>
-
-		<device-support value="atmega32u4"/>
-		<config name="lufa.drivers.board.name" value="none"/>
-
-		<config name="config.compiler.optimization.level" value="size"/>
-
-		<build type="define" name="F_CPU" value="16000000UL"/>
-		<build type="define" name="F_USB" value="16000000UL"/>
-
-		<build type="define" name="BOOT_START_ADDR" value="0x7000"/>
-		<build type="linker-config" subtype="flags" value="--section-start=.text=0x7000"/>
-
-		<build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0x7FA0"/>
-		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>
-		<build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0x7FE0"/>
-		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>
-		<build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0x7FF8"/>
-		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>
-	</project>
-
-	<project caption="DFU Bootloader - 16KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.dfu.avr8.16_4" force-caption="true" workspace-name="lufa_dfu_16kb_4kb_">
-		<require idref="lufa.bootloaders.dfu"/>
-		<require idref="lufa.boards.dummy.avr8"/>
-		<generator value="as5_8"/>
-
-		<device-support value="atmega16u2"/>
-		<config name="lufa.drivers.board.name" value="none"/>
-
-		<build type="define" name="F_CPU" value="16000000UL"/>
-		<build type="define" name="F_USB" value="16000000UL"/>
-
-		<build type="define" name="BOOT_START_ADDR" value="0x3000"/>
-		<build type="linker-config" subtype="flags" value="--section-start=.text=0x3000"/>
-
-		<build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0x3FA0"/>
-		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>
-		<build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0x3FE0"/>
-		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>
-		<build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0x3FF8"/>
-		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>
-	</project>
-
-	<project caption="DFU Bootloader - 8KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.dfu.avr8.8_4" force-caption="true" workspace-name="lufa_dfu_8kb_4kb_">
-		<require idref="lufa.bootloaders.dfu"/>
-		<require idref="lufa.boards.dummy.avr8"/>
-		<generator value="as5_8"/>
-
-		<device-support value="atmega8u2"/>
-		<config name="lufa.drivers.board.name" value="none"/>
-
-		<build type="define" name="F_CPU" value="16000000UL"/>
-		<build type="define" name="F_USB" value="16000000UL"/>
-
-		<build type="define" name="BOOT_START_ADDR" value="0x1000"/>
-		<build type="linker-config" subtype="flags" value="--section-start=.text=0x1000"/>
-
-		<build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0x1FA0"/>
-		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>
-		<build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0x1FE0"/>
-		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>
-		<build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0x1FF8"/>
-		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>
-	</project>
-
-	<module type="application" id="lufa.bootloaders.dfu" caption="DFU Bootloader">
-		<info type="description" value="summary">
-		DFU Class Bootloader, capable of reprogramming a device using the Atmel FLIP or other AVR DFU programming software when plugged into a host.
-		</info>
-
- 		<info type="gui-flag" value="move-to-root"/>
-
-		<info type="keyword" value="Technology">
-			<keyword value="Bootloaders"/>
-			<keyword value="USB Device"/>
-		</info>
-
- 		<device-support-alias value="lufa_avr8"/>
-		<device-support-alias value="lufa_xmega"/>
-		<device-support-alias value="lufa_uc3"/>
-
-		<build type="include-path" value="."/>
-		<build type="c-source" value="BootloaderDFU.c"/>
-		<build type="header-file" value="BootloaderDFU.h"/>
-		<build type="c-source" value="Descriptors.c"/>
-		<build type="header-file" value="Descriptors.h"/>
-		<build type="c-source" value="BootloaderAPI.c"/>
-		<build type="header-file" value="BootloaderAPI.h"/>
-		<build type="asm-source" value="BootloaderAPITable.S"/>
-
-		<build type="module-config" subtype="path" value="Config"/>
-		<build type="header-file" value="Config/LUFAConfig.h"/>
-		<build type="header-file" value="Config/AppConfig.h"/>
-
-		<build type="distribute" subtype="user-file" value="doxyfile"/>
-		<build type="distribute" subtype="user-file" value="BootloaderDFU.txt"/>
-
-		<require idref="lufa.common"/>
-		<require idref="lufa.platform"/>
-		<require idref="lufa.drivers.usb"/>
-		<require idref="lufa.drivers.board"/>
-		<require idref="lufa.drivers.board.leds"/>
-	</module>
-</asf>

+ 0 - 2396
lib/lufa/Bootloaders/DFU/doxyfile

@@ -1,2396 +0,0 @@
-# Doxyfile 1.8.9
-
-# 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 - DFU 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 a logo or an 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 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. If 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 HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will
-# append additional text to a page's title, such as Class Reference. If set to
-# YES the compound reference will be hidden.
-# The default value is: NO.
-
-HIDE_COMPOUND_REFERENCE= 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 <section_label> ... \endif and \cond <section_label>
-# ... \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:
-#
-# <filter> <input-file>
-#
-# where <filter> is the value of the INPUT_FILTER tag, and <input-file> 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 therefore more robust against future updates.
-# Doxygen will copy the style sheet files to the output directory.
-# Note: The order of the extra style sheet files is of importance (e.g. the last
-# style sheet 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 style sheet 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 style sheets (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
-
-# If 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 pre-rendered 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 <access key> + S
-# (what the <access key> is depends on the OS and browser, but it is typically
-# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down
-# key> to jump into the search results window, the results can be navigated
-# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel
-# the search. The filter options can be selected when the cursor is inside the
-# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys>
-# to select a filter and <Enter> or <escape> to activate or cancel the filter
-# option.
-# The default value is: YES.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-SEARCHENGINE           = NO
-
-# When the SERVER_BASED_SEARCH tag is enabled the search engine will be
-# implemented using a web server instead of a web client using Javascript. There
-# are two flavors of web server based searching depending on the EXTERNAL_SEARCH
-# setting. When disabled, doxygen will generate a PHP script for searching and
-# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing
-# and searching needs to be provided by external tools. See the section
-# "External Indexing and Searching" for details.
-# The default value is: NO.
-# This tag requires that the tag SEARCHENGINE is set to YES.
-
-SERVER_BASED_SEARCH    = NO
-
-# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP
-# script for searching. Instead the search results are written to an XML file
-# which needs to be processed by an external indexer. Doxygen will invoke an
-# external search engine pointed to by the SEARCHENGINE_URL option to obtain the
-# search results.
-#
-# Doxygen ships with an example indexer (doxyindexer) and search engine
-# (doxysearch.cgi) which are based on the open source search engine library
-# Xapian (see: http://xapian.org/).
-#
-# See the section "External Indexing and Searching" for details.
-# The default value is: NO.
-# This tag requires that the tag SEARCHENGINE is set to YES.
-
-EXTERNAL_SEARCH        = NO
-
-# The SEARCHENGINE_URL should point to a search engine hosted by a web server
-# which will return the search results when EXTERNAL_SEARCH is enabled.
-#
-# Doxygen ships with an example indexer (doxyindexer) and search engine
-# (doxysearch.cgi) which are based on the open source search engine library
-# Xapian (see: http://xapian.org/). See the section "External Indexing and
-# Searching" for details.
-# This tag requires that the tag SEARCHENGINE is set to YES.
-
-SEARCHENGINE_URL       =
-
-# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed
-# search data is written to a file for indexing by an external tool. With the
-# SEARCHDATA_FILE tag the name of this file can be specified.
-# The default file is: searchdata.xml.
-# This tag requires that the tag SEARCHENGINE is set to YES.
-
-SEARCHDATA_FILE        = searchdata.xml
-
-# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the
-# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is
-# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple
-# projects and redirect the results back to the right project.
-# This tag requires that the tag SEARCHENGINE is set to YES.
-
-EXTERNAL_SEARCH_ID     =
-
-# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen
-# projects other than the one defined by this configuration file, but that are
-# all added to the same external search index. Each project needs to have a
-# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of
-# to a relative location where the documentation can be found. The format is:
-# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ...
-# This tag requires that the tag SEARCHENGINE is set to YES.
-
-EXTRA_SEARCH_MAPPINGS  =
-
-#---------------------------------------------------------------------------
-# Configuration options related to the LaTeX output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output.
-# The default value is: YES.
-
-GENERATE_LATEX         = NO
-
-# The LATEX_OUTPUT tag is used to specify where the LaTeX 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: latex.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_OUTPUT           = latex
-
-# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
-# invoked.
-#
-# Note that when enabling USE_PDFLATEX this option is only used for generating
-# bitmaps for formulas in the HTML output, but not in the Makefile that is
-# written to the output directory.
-# The default file is: latex.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_CMD_NAME         = latex
-
-# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate
-# index for LaTeX.
-# The default file is: makeindex.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-MAKEINDEX_CMD_NAME     = makeindex
-
-# If the COMPACT_LATEX tag is set to YES, doxygen generates more compact LaTeX
-# documents. This may be useful for small projects and may help to save some
-# trees in general.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-COMPACT_LATEX          = NO
-
-# The PAPER_TYPE tag can be used to set the paper type that is used by the
-# printer.
-# Possible values are: a4 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x
-# 14 inches) and executive (7.25 x 10.5 inches).
-# The default value is: a4.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-PAPER_TYPE             = a4wide
-
-# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names
-# that should be included in the LaTeX output. To get the times font for
-# instance you can specify
-# EXTRA_PACKAGES=times
-# If left blank no extra packages will be included.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-EXTRA_PACKAGES         =
-
-# The LATEX_HEADER tag can be used to specify a personal LaTeX header for the
-# generated LaTeX document. The header should contain everything until the first
-# chapter. If it is left blank doxygen will generate a standard header. See
-# section "Doxygen usage" for information on how to let doxygen write the
-# default header to a separate file.
-#
-# Note: Only use a user-defined header if you know what you are doing! The
-# following commands have a special meaning inside the header: $title,
-# $datetime, $date, $doxygenversion, $projectname, $projectnumber,
-# $projectbrief, $projectlogo. Doxygen will replace $title with the empty
-# string, for the replacement values of the other commands the user is referred
-# to HTML_HEADER.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_HEADER           =
-
-# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the
-# generated LaTeX document. The footer should contain everything after the last
-# chapter. If it is left blank doxygen will generate a standard footer. See
-# LATEX_HEADER for more information on how to generate a default footer and what
-# special commands can be used inside the footer.
-#
-# Note: Only use a user-defined footer if you know what you are doing!
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_FOOTER           =
-
-# The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined
-# LaTeX style sheets that are included after the standard style sheets created
-# by doxygen. Using this option one can overrule certain style aspects. Doxygen
-# will copy the style sheet files to the output directory.
-# Note: The order of the extra style sheet files is of importance (e.g. the last
-# style sheet in the list overrules the setting of the previous ones in the
-# list).
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_EXTRA_STYLESHEET =
-
-# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or
-# other source files which should be copied to the LATEX_OUTPUT output
-# directory. Note that the files will be copied as-is; there are no commands or
-# markers available.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_EXTRA_FILES      =
-
-# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is
-# prepared for conversion to PDF (using ps2pdf or pdflatex). The PDF file will
-# contain links (just like the HTML output) instead of page references. This
-# makes the output suitable for online browsing using a PDF viewer.
-# The default value is: YES.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-PDF_HYPERLINKS         = YES
-
-# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate
-# the PDF file directly from the LaTeX files. Set this option to YES, to get a
-# higher quality PDF documentation.
-# The default value is: YES.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-USE_PDFLATEX           = YES
-
-# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \batchmode
-# command to the generated LaTeX files. This will instruct LaTeX to keep running
-# if errors occur, instead of asking the user for help. This option is also used
-# when generating formulas in HTML.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_BATCHMODE        = NO
-
-# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the
-# index chapters (such as File Index, Compound Index, etc.) in the output.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_HIDE_INDICES     = NO
-
-# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source
-# code with syntax highlighting in the LaTeX output.
-#
-# Note that which sources are shown also depends on other settings such as
-# SOURCE_BROWSER.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_SOURCE_CODE      = NO
-
-# The LATEX_BIB_STYLE tag can be used to specify the style to use for the
-# bibliography, e.g. plainnat, or ieeetr. See
-# http://en.wikipedia.org/wiki/BibTeX and \cite for more info.
-# The default value is: plain.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_BIB_STYLE        = plain
-
-#---------------------------------------------------------------------------
-# Configuration options related to the RTF output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_RTF tag is set to YES, doxygen will generate RTF output. The
-# RTF output is optimized for Word 97 and may not look too pretty with other RTF
-# readers/editors.
-# The default value is: NO.
-
-GENERATE_RTF           = NO
-
-# The RTF_OUTPUT tag is used to specify where the RTF 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: rtf.
-# This tag requires that the tag GENERATE_RTF is set to YES.
-
-RTF_OUTPUT             = rtf
-
-# If the COMPACT_RTF tag is set to YES, doxygen generates more compact RTF
-# documents. This may be useful for small projects and may help to save some
-# trees in general.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_RTF is set to YES.
-
-COMPACT_RTF            = NO
-
-# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated will
-# contain hyperlink fields. The RTF file will contain links (just like the HTML
-# output) instead of page references. This makes the output suitable for online
-# browsing using Word or some other Word compatible readers that support those
-# fields.
-#
-# Note: WordPad (write) and others do not support links.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_RTF is set to YES.
-
-RTF_HYPERLINKS         = NO
-
-# Load stylesheet definitions from file. Syntax is similar to doxygen's config
-# file, i.e. a series of assignments. You only have to provide replacements,
-# missing definitions are set to their default value.
-#
-# See also section "Doxygen usage" for information on how to generate the
-# default style sheet that doxygen normally uses.
-# This tag requires that the tag GENERATE_RTF is set to YES.
-
-RTF_STYLESHEET_FILE    =
-
-# Set optional variables used in the generation of an RTF document. Syntax is
-# similar to doxygen's config file. A template extensions file can be generated
-# using doxygen -e rtf extensionFile.
-# This tag requires that the tag GENERATE_RTF is set to YES.
-
-RTF_EXTENSIONS_FILE    =
-
-# If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code
-# with syntax highlighting in the RTF output.
-#
-# Note that which sources are shown also depends on other settings such as
-# SOURCE_BROWSER.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_RTF is set to YES.
-
-RTF_SOURCE_CODE        = NO
-
-#---------------------------------------------------------------------------
-# Configuration options related to the man page output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for
-# classes and files.
-# The default value is: NO.
-
-GENERATE_MAN           = NO
-
-# The MAN_OUTPUT tag is used to specify where the man pages will be put. If a
-# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
-# it. A directory man3 will be created inside the directory specified by
-# MAN_OUTPUT.
-# The default directory is: man.
-# This tag requires that the tag GENERATE_MAN is set to YES.
-
-MAN_OUTPUT             = man
-
-# The MAN_EXTENSION tag determines the extension that is added to the generated
-# man pages. In case the manual section does not start with a number, the number
-# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is
-# optional.
-# The default value is: .3.
-# This tag requires that the tag GENERATE_MAN is set to YES.
-
-MAN_EXTENSION          = .3
-
-# The MAN_SUBDIR tag determines the name of the directory created within
-# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by
-# MAN_EXTENSION with the initial . removed.
-# This tag requires that the tag GENERATE_MAN is set to YES.
-
-MAN_SUBDIR             =
-
-# If the MAN_LINKS tag is set to YES and doxygen generates man output, then it
-# will generate one additional man file for each entity documented in the real
-# man page(s). These additional files only source the real man page, but without
-# them the man command would be unable to find the correct page.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_MAN is set to YES.
-
-MAN_LINKS              = NO
-
-#---------------------------------------------------------------------------
-# Configuration options related to the XML output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_XML tag is set to YES, doxygen will generate an XML file that
-# captures the structure of the code including all documentation.
-# The default value is: NO.
-
-GENERATE_XML           = NO
-
-# The XML_OUTPUT tag is used to specify where the XML pages 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: xml.
-# This tag requires that the tag GENERATE_XML is set to YES.
-
-XML_OUTPUT             = xml
-
-# If the XML_PROGRAMLISTING tag is set to YES, doxygen will dump the program
-# listings (including syntax highlighting and cross-referencing information) to
-# the XML output. Note that enabling this will significantly increase the size
-# of the XML output.
-# The default value is: YES.
-# This tag requires that the tag GENERATE_XML is set to YES.
-
-XML_PROGRAMLISTING     = YES
-
-#---------------------------------------------------------------------------
-# Configuration options related to the DOCBOOK output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files
-# that can be used to generate PDF.
-# The default value is: NO.
-
-GENERATE_DOCBOOK       = NO
-
-# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages 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: docbook.
-# This tag requires that the tag GENERATE_DOCBOOK is set to YES.
-
-DOCBOOK_OUTPUT         = docbook
-
-# If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the
-# program listings (including syntax highlighting and cross-referencing
-# information) to the DOCBOOK output. Note that enabling this will significantly
-# increase the size of the DOCBOOK output.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_DOCBOOK is set to YES.
-
-DOCBOOK_PROGRAMLISTING = NO
-
-#---------------------------------------------------------------------------
-# Configuration options for the AutoGen Definitions output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an
-# AutoGen Definitions (see http://autogen.sf.net) file that captures the
-# structure of the code including all documentation. Note that this feature is
-# still experimental and incomplete at the moment.
-# The default value is: NO.
-
-GENERATE_AUTOGEN_DEF   = NO
-
-#---------------------------------------------------------------------------
-# Configuration options related to the Perl module output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_PERLMOD tag is set to YES, doxygen will generate a Perl module
-# file that captures the structure of the code including all documentation.
-#
-# Note that this feature is still experimental and incomplete at the moment.
-# The default value is: NO.
-
-GENERATE_PERLMOD       = NO
-
-# If the PERLMOD_LATEX tag is set to YES, doxygen will generate the necessary
-# Makefile rules, Perl scripts and LaTeX code to be able to generate PDF and DVI
-# output from the Perl module output.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_PERLMOD is set to YES.
-
-PERLMOD_LATEX          = NO
-
-# If the PERLMOD_PRETTY tag is set to YES, the Perl module output will be nicely
-# formatted so it can be parsed by a human reader. This is useful if you want to
-# understand what is going on. On the other hand, if this tag is set to NO, the
-# size of the Perl module output will be much smaller and Perl will parse it
-# just the same.
-# The default value is: YES.
-# This tag requires that the tag GENERATE_PERLMOD is set to YES.
-
-PERLMOD_PRETTY         = YES
-
-# The names of the make variables in the generated doxyrules.make file are
-# prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. This is useful
-# so different doxyrules.make files included by the same Makefile don't
-# overwrite each other's variables.
-# This tag requires that the tag GENERATE_PERLMOD is set to YES.
-
-PERLMOD_MAKEVAR_PREFIX =
-
-#---------------------------------------------------------------------------
-# Configuration options related to the preprocessor
-#---------------------------------------------------------------------------
-
-# If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all
-# C-preprocessor directives found in the sources and include files.
-# The default value is: YES.
-
-ENABLE_PREPROCESSING   = YES
-
-# If the MACRO_EXPANSION tag is set to YES, doxygen will expand all macro names
-# in the source code. If set to NO, only conditional compilation will be
-# performed. Macro expansion can be done in a controlled way by setting
-# EXPAND_ONLY_PREDEF to YES.
-# The default value is: NO.
-# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
-
-MACRO_EXPANSION        = YES
-
-# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES then
-# the macro expansion is limited to the macros specified with the PREDEFINED and
-# EXPAND_AS_DEFINED tags.
-# The default value is: NO.
-# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
-
-EXPAND_ONLY_PREDEF     = YES
-
-# If the SEARCH_INCLUDES tag is set to YES, the include files in the
-# INCLUDE_PATH will be searched if a #include is found.
-# The default value is: YES.
-# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
-
-SEARCH_INCLUDES        = YES
-
-# The INCLUDE_PATH tag can be used to specify one or more directories that
-# contain include files that are not input files but should be processed by the
-# preprocessor.
-# This tag requires that the tag SEARCH_INCLUDES is set to YES.
-
-INCLUDE_PATH           =
-
-# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
-# patterns (like *.h and *.hpp) to filter out the header-files in the
-# directories. If left blank, the patterns specified with FILE_PATTERNS will be
-# used.
-# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
-
-INCLUDE_FILE_PATTERNS  =
-
-# The PREDEFINED tag can be used to specify one or more macro names that are
-# defined before the preprocessor is started (similar to the -D option of e.g.
-# gcc). The argument of the tag is a list of macros of the form: name or
-# name=definition (no spaces). If the definition and the "=" are omitted, "=1"
-# is assumed. To prevent a macro definition from being undefined via #undef or
-# recursively expanded use the := operator instead of the = operator.
-# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
-
-PREDEFINED             = __DOXYGEN__ \
-                         PROGMEM \
-                         ATTR_NO_INIT
-
-# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this
-# tag can be used to specify a list of macro names that should be expanded. The
-# macro definition that is found in the sources will be used. Use the PREDEFINED
-# tag if you want to use a different macro definition that overrules the
-# definition found in the source code.
-# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
-
-EXPAND_AS_DEFINED      =
-
-# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will
-# remove all references to function-like macros that are alone on a line, have
-# an all uppercase name, and do not end with a semicolon. Such function macros
-# are typically used for boiler-plate code, and will confuse the parser if not
-# removed.
-# The default value is: YES.
-# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
-
-SKIP_FUNCTION_MACROS   = YES
-
-#---------------------------------------------------------------------------
-# Configuration options related to external references
-#---------------------------------------------------------------------------
-
-# The TAGFILES tag can be used to specify one or more tag files. For each tag
-# file the location of the external documentation should be added. The format of
-# a tag file without this location is as follows:
-# TAGFILES = file1 file2 ...
-# Adding location for the tag files is done as follows:
-# TAGFILES = file1=loc1 "file2 = loc2" ...
-# where loc1 and loc2 can be relative or absolute paths or URLs. See the
-# section "Linking to external documentation" for more information about the use
-# of tag files.
-# Note: Each tag file must have a unique name (where the name does NOT include
-# the path). If a tag file is not located in the directory in which doxygen is
-# run, you must also specify the path to the tagfile here.
-
-TAGFILES               =
-
-# When a file name is specified after GENERATE_TAGFILE, doxygen will create a
-# tag file that is based on the input files it reads. See section "Linking to
-# external documentation" for more information about the usage of tag files.
-
-GENERATE_TAGFILE       =
-
-# If the ALLEXTERNALS tag is set to YES, all external class will be listed in
-# the class index. If set to NO, only the inherited external classes will be
-# listed.
-# The default value is: NO.
-
-ALLEXTERNALS           = NO
-
-# If the EXTERNAL_GROUPS tag is set to YES, all external groups will be listed
-# in the modules index. If set to NO, only the current project's groups will be
-# listed.
-# The default value is: YES.
-
-EXTERNAL_GROUPS        = YES
-
-# If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in
-# the related pages index. If set to NO, only the current project's pages will
-# be listed.
-# The default value is: YES.
-
-EXTERNAL_PAGES         = YES
-
-# The PERL_PATH should be the absolute path and name of the perl script
-# interpreter (i.e. the result of 'which perl').
-# The default file (with absolute path) is: /usr/bin/perl.
-
-PERL_PATH              = /usr/bin/perl
-
-#---------------------------------------------------------------------------
-# Configuration options related to the dot tool
-#---------------------------------------------------------------------------
-
-# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram
-# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to
-# NO turns the diagrams off. Note that this option also works with HAVE_DOT
-# disabled, but it is recommended to install and use dot, since it yields more
-# powerful graphs.
-# The default value is: YES.
-
-CLASS_DIAGRAMS         = NO
-
-# You can define message sequence charts within doxygen comments using the \msc
-# command. Doxygen will then run the mscgen tool (see:
-# http://www.mcternan.me.uk/mscgen/)) to produce the chart and insert it in the
-# documentation. The MSCGEN_PATH tag allows you to specify the directory where
-# the mscgen tool resides. If left empty the tool is assumed to be found in the
-# default search path.
-
-MSCGEN_PATH            =
-
-# You can include diagrams made with dia in doxygen documentation. Doxygen will
-# then run dia to produce the diagram and insert it in the documentation. The
-# DIA_PATH tag allows you to specify the directory where the dia binary resides.
-# If left empty dia is assumed to be found in the default search path.
-
-DIA_PATH               =
-
-# If set to YES the inheritance and collaboration graphs will hide inheritance
-# and usage relations if the target is undocumented or is not a class.
-# The default value is: YES.
-
-HIDE_UNDOC_RELATIONS   = YES
-
-# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
-# available from the path. This tool is part of Graphviz (see:
-# http://www.graphviz.org/), a graph visualization toolkit from AT&T and Lucent
-# Bell Labs. The other options in this section have no effect if this option is
-# set to NO
-# The default value is: NO.
-
-HAVE_DOT               = NO
-
-# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed
-# to run in parallel. When set to 0 doxygen will base this on the number of
-# processors available in the system. You can set it explicitly to a value
-# larger than 0 to get control over the balance between CPU load and processing
-# speed.
-# Minimum value: 0, maximum value: 32, default value: 0.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_NUM_THREADS        = 0
-
-# When you want a differently looking font in the dot files that doxygen
-# generates you can specify the font name using DOT_FONTNAME. You need to make
-# sure dot is able to find the font, which can be done by putting it in a
-# standard location or by setting the DOTFONTPATH environment variable or by
-# setting DOT_FONTPATH to the directory containing the font.
-# The default value is: Helvetica.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_FONTNAME           =
-
-# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of
-# dot graphs.
-# Minimum value: 4, maximum value: 24, default value: 10.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_FONTSIZE           = 10
-
-# By default doxygen will tell dot to use the default font as specified with
-# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set
-# the path where dot can find it using this tag.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_FONTPATH           =
-
-# If the CLASS_GRAPH tag is set to YES then doxygen will generate a graph for
-# each documented class showing the direct and indirect inheritance relations.
-# Setting this tag to YES will force the CLASS_DIAGRAMS tag to NO.
-# The default value is: YES.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-CLASS_GRAPH            = NO
-
-# If the COLLABORATION_GRAPH tag is set to YES then doxygen will generate a
-# graph for each documented class showing the direct and indirect implementation
-# dependencies (inheritance, containment, and class references variables) of the
-# class with other documented classes.
-# The default value is: YES.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-COLLABORATION_GRAPH    = NO
-
-# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for
-# groups, showing the direct groups dependencies.
-# The default value is: YES.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-GROUP_GRAPHS           = NO
-
-# If the UML_LOOK tag is set to YES, doxygen will generate inheritance and
-# collaboration diagrams in a style similar to the OMG's Unified Modeling
-# Language.
-# The default value is: NO.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-UML_LOOK               = NO
-
-# If the UML_LOOK tag is enabled, the fields and methods are shown inside the
-# class node. If there are many fields or methods and many nodes the graph may
-# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the
-# number of items for each type to make the size more manageable. Set this to 0
-# for no limit. Note that the threshold may be exceeded by 50% before the limit
-# is enforced. So when you set the threshold to 10, up to 15 fields may appear,
-# but if the number exceeds 15, the total amount of fields shown is limited to
-# 10.
-# Minimum value: 0, maximum value: 100, default value: 10.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-UML_LIMIT_NUM_FIELDS   = 10
-
-# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and
-# collaboration graphs will show the relations between templates and their
-# instances.
-# The default value is: NO.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-TEMPLATE_RELATIONS     = NO
-
-# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are set to
-# YES then doxygen will generate a graph for each documented file showing the
-# direct and indirect include dependencies of the file with other documented
-# files.
-# The default value is: YES.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-INCLUDE_GRAPH          = NO
-
-# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are
-# set to YES then doxygen will generate a graph for each documented file showing
-# the direct and indirect include dependencies of the file with other documented
-# files.
-# The default value is: YES.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-INCLUDED_BY_GRAPH      = NO
-
-# If the CALL_GRAPH tag is set to YES then doxygen will generate a call
-# dependency graph for every global function or class method.
-#
-# Note that enabling this option will significantly increase the time of a run.
-# So in most cases it will be better to enable call graphs for selected
-# functions only using the \callgraph command.
-# The default value is: NO.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-CALL_GRAPH             = NO
-
-# If the CALLER_GRAPH tag is set to YES then doxygen will generate a caller
-# dependency graph for every global function or class method.
-#
-# Note that enabling this option will significantly increase the time of a run.
-# So in most cases it will be better to enable caller graphs for selected
-# functions only using the \callergraph command.
-# The default value is: NO.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-CALLER_GRAPH           = NO
-
-# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical
-# hierarchy of all classes instead of a textual one.
-# The default value is: YES.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-GRAPHICAL_HIERARCHY    = NO
-
-# If the DIRECTORY_GRAPH tag is set to YES then doxygen will show the
-# dependencies a directory has on other directories in a graphical way. The
-# dependency relations are determined by the #include relations between the
-# files in the directories.
-# The default value is: YES.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DIRECTORY_GRAPH        = NO
-
-# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
-# generated by dot.
-# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order
-# to make the SVG files visible in IE 9+ (other browsers do not have this
-# requirement).
-# Possible values are: png, jpg, gif and svg.
-# The default value is: png.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_IMAGE_FORMAT       = png
-
-# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to
-# enable generation of interactive SVG images that allow zooming and panning.
-#
-# Note that this requires a modern browser other than Internet Explorer. Tested
-# and working are Firefox, Chrome, Safari, and Opera.
-# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make
-# the SVG files visible. Older versions of IE do not have SVG support.
-# The default value is: NO.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-INTERACTIVE_SVG        = NO
-
-# The DOT_PATH tag can be used to specify the path where the dot tool can be
-# found. If left blank, it is assumed the dot tool can be found in the path.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_PATH               =
-
-# The DOTFILE_DIRS tag can be used to specify one or more directories that
-# contain dot files that are included in the documentation (see the \dotfile
-# command).
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOTFILE_DIRS           =
-
-# The MSCFILE_DIRS tag can be used to specify one or more directories that
-# contain msc files that are included in the documentation (see the \mscfile
-# command).
-
-MSCFILE_DIRS           =
-
-# The DIAFILE_DIRS tag can be used to specify one or more directories that
-# contain dia files that are included in the documentation (see the \diafile
-# command).
-
-DIAFILE_DIRS           =
-
-# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the
-# path where java can find the plantuml.jar file. If left blank, it is assumed
-# PlantUML is not used or called during a preprocessing step. Doxygen will
-# generate a warning when it encounters a \startuml command in this case and
-# will not generate output for the diagram.
-
-PLANTUML_JAR_PATH      =
-
-# When using plantuml, the specified paths are searched for files specified by
-# the !include statement in a plantuml block.
-
-PLANTUML_INCLUDE_PATH  =
-
-# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of nodes
-# that will be shown in the graph. If the number of nodes in a graph becomes
-# larger than this value, doxygen will truncate the graph, which is visualized
-# by representing a node as a red box. Note that doxygen if the number of direct
-# children of the root node in a graph is already larger than
-# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note that
-# the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.
-# Minimum value: 0, maximum value: 10000, default value: 50.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_GRAPH_MAX_NODES    = 15
-
-# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the graphs
-# generated by dot. A depth value of 3 means that only nodes reachable from the
-# root by following a path via at most 3 edges will be shown. Nodes that lay
-# further from the root node will be omitted. Note that setting this option to 1
-# or 2 may greatly reduce the computation time needed for large code bases. Also
-# note that the size of a graph can be further restricted by
-# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.
-# Minimum value: 0, maximum value: 1000, default value: 0.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-MAX_DOT_GRAPH_DEPTH    = 2
-
-# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent
-# background. This is disabled by default, because dot on Windows does not seem
-# to support this out of the box.
-#
-# Warning: Depending on the platform used, enabling this option may lead to
-# badly anti-aliased labels on the edges of a graph (i.e. they become hard to
-# read).
-# The default value is: NO.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_TRANSPARENT        = YES
-
-# Set the DOT_MULTI_TARGETS tag to YES to allow dot to generate multiple output
-# files in one run (i.e. multiple -o and -T options on the command line). This
-# makes dot run faster, but since only newer versions of dot (>1.8.10) support
-# this, this feature is disabled by default.
-# The default value is: NO.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_MULTI_TARGETS      = NO
-
-# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page
-# explaining the meaning of the various boxes and arrows in the dot generated
-# graphs.
-# The default value is: YES.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-GENERATE_LEGEND        = YES
-
-# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot
-# files that are used to generate the various graphs.
-# The default value is: YES.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_CLEANUP            = YES

+ 0 - 62
lib/lufa/Bootloaders/DFU/makefile

@@ -1,62 +0,0 @@
-#
-#             LUFA Library
-#     Copyright (C) Dean Camera, 2017.
-#
-#  dean [at] fourwalledcubicle [dot] com
-#           www.lufa-lib.org
-#
-# --------------------------------------
-#         LUFA Project Makefile.
-# --------------------------------------
-
-# Run "make help" for target help.
-
-MCU          ?= atmega32u4
-ARCH         ?= AVR8
-BOARD        ?= QMK
-F_CPU        ?= 16000000
-F_USB        ?= $(F_CPU)
-OPTIMIZATION = s
-TARGET       = BootloaderDFU
-SRC          = $(TARGET).c Descriptors.c BootloaderAPI.c BootloaderAPITable.S $(LUFA_SRC_USB)
-LUFA_PATH    = ../../LUFA
-CC_FLAGS     = -DUSE_LUFA_CONFIG_HEADER -IConfig/ -DBOOT_START_ADDR=$(BOOT_START_OFFSET)
-LD_FLAGS     = -Wl,--section-start=.text=$(BOOT_START_OFFSET) $(BOOT_API_LD_FLAGS)
-
-# Flash size and bootloader section sizes of the target, in KB. These must
-# match the target's total FLASH size and the bootloader size set in the
-# device's fuses.
-FLASH_SIZE_KB         ?= 32
-BOOT_SECTION_SIZE_KB  ?= 4
-
-# Bootloader address calculation formulas
-# Do not modify these macros, but rather modify the dependent values above.
-CALC_ADDRESS_IN_HEX   = $(shell printf "0x%X" $$(( $(1) )) )
-BOOT_START_OFFSET     = $(call CALC_ADDRESS_IN_HEX, ($(FLASH_SIZE_KB) - $(BOOT_SECTION_SIZE_KB)) * 1024 )
-BOOT_SEC_OFFSET       = $(call CALC_ADDRESS_IN_HEX, ($(FLASH_SIZE_KB) * 1024) - ($(strip $(1))) )
-
-# Bootloader linker section flags for relocating the API table sections to
-# known FLASH addresses - these should not normally be user-edited.
-BOOT_SECTION_LD_FLAG  = -Wl,--section-start=$(strip $(1))=$(call BOOT_SEC_OFFSET, $(3)) -Wl,--undefined=$(strip $(2))
-BOOT_API_LD_FLAGS     = $(call BOOT_SECTION_LD_FLAG, .apitable_trampolines, BootloaderAPI_Trampolines, 96)
-BOOT_API_LD_FLAGS    += $(call BOOT_SECTION_LD_FLAG, .apitable_jumptable,   BootloaderAPI_JumpTable,   32)
-BOOT_API_LD_FLAGS    += $(call BOOT_SECTION_LD_FLAG, .apitable_signatures,  BootloaderAPI_Signatures,  8)
-
-# Default target
-all:
-
-# Include LUFA-specific DMBS extension modules
-DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA
-include $(DMBS_LUFA_PATH)/lufa-sources.mk
-include $(DMBS_LUFA_PATH)/lufa-gcc.mk
-
-# Include common DMBS build system modules
-DMBS_PATH      ?= $(LUFA_PATH)/Build/DMBS/DMBS
-include $(DMBS_PATH)/core.mk
-include $(DMBS_PATH)/cppcheck.mk
-include $(DMBS_PATH)/doxygen.mk
-include $(DMBS_PATH)/dfu.mk
-include $(DMBS_PATH)/gcc.mk
-include $(DMBS_PATH)/hid.mk
-include $(DMBS_PATH)/avrdude.mk
-include $(DMBS_PATH)/atprogram.mk

+ 0 - 198
lib/lufa/Bootloaders/HID/BootloaderHID.c

@@ -1,198 +0,0 @@
-/*
-             LUFA Library
-     Copyright (C) Dean Camera, 2017.
-
-  dean [at] fourwalledcubicle [dot] com
-           www.lufa-lib.org
-*/
-
-/*
-  Copyright 2017  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 HID class bootloader. This file contains the complete bootloader logic.
- */
-
-#include "BootloaderHID.h"
-
-/** Flag to indicate if the bootloader should be running, or should exit and allow the application code to run
- *  via a soft reset. When cleared, the bootloader will abort, the USB interface will shut down and the application
- *  started via a forced watchdog reset.
- */
-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)
-{
-	/* 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))
-	{
-		/* Turn off the watchdog */
-		MCUSR &= ~(1 << WDRF);
-		wdt_disable();
-
-		/* Clear the boot key and jump to the user application */
-		MagicBootKey = 0;
-
-		// cppcheck-suppress constStatement
-		((void (*)(void))0x0000)();
-	}
-}
-
-/** 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.
- */
-int main(void)
-{
-	/* Setup hardware required for the bootloader */
-	SetupHardware();
-
-	/* Enable global interrupts so that the USB stack can function */
-	GlobalInterruptEnable();
-
-	while (RunBootloader)
-	  USB_USBTask();
-
-	/* 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;
-
-	/* Enable the watchdog and force a timeout to reset the AVR */
-	wdt_enable(WDTO_250MS);
-
-	for (;;);
-}
-
-/** Configures all hardware required for the bootloader. */
-static void SetupHardware(void)
-{
-	/* Disable watchdog if enabled by bootloader/fuses */
-	MCUSR &= ~(1 << WDRF);
-	wdt_disable();
-
-	/* Disable clock division */
-	clock_prescale_set(clock_div_1);
-
-	/* Relocate the interrupt vector table to the bootloader section */
-	MCUCR = (1 << IVCE);
-	MCUCR = (1 << IVSEL);
-
-	/* Initialize USB subsystem */
-	USB_Init();
-}
-
-/** Event handler for the USB_ConfigurationChanged event. This configures the device's endpoints ready
- *  to relay data to and from the attached USB host.
- */
-void EVENT_USB_Device_ConfigurationChanged(void)
-{
-	/* Setup HID Report Endpoint */
-	Endpoint_ConfigureEndpoint(HID_IN_EPADDR, EP_TYPE_INTERRUPT, HID_IN_EPSIZE, 1);
-}
-
-/** Event handler for the USB_ControlRequest event. This is used to catch and process control requests sent to
- *  the device from the USB host before passing along unhandled control requests to the library for processing
- *  internally.
- */
-void EVENT_USB_Device_ControlRequest(void)
-{
-	/* Ignore any requests that aren't directed to the HID interface */
-	if ((USB_ControlRequest.bmRequestType & (CONTROL_REQTYPE_TYPE | CONTROL_REQTYPE_RECIPIENT)) !=
-	    (REQTYPE_CLASS | REQREC_INTERFACE))
-	{
-		return;
-	}
-
-	/* Process HID specific control requests */
-	switch (USB_ControlRequest.bRequest)
-	{
-		case HID_REQ_SetReport:
-			Endpoint_ClearSETUP();
-
-			/* Wait until the command has been sent by the host */
-			while (!(Endpoint_IsOUTReceived()));
-
-			/* Read in the write destination address */
-			#if (FLASHEND > 0xFFFF)
-			uint32_t PageAddress = ((uint32_t)Endpoint_Read_16_LE() << 8);
-			#else
-			uint16_t PageAddress = Endpoint_Read_16_LE();
-			#endif
-
-			/* Check if the command is a program page command, or a start application command */
-			#if (FLASHEND > 0xFFFF)
-			if ((uint16_t)(PageAddress >> 8) == COMMAND_STARTAPPLICATION)
-			#else
-			if (PageAddress == COMMAND_STARTAPPLICATION)
-			#endif
-			{
-				RunBootloader = false;
-			}
-			else if (PageAddress < BOOT_START_ADDR)
-			{
-				/* Erase the given FLASH page, ready to be programmed */
-				boot_page_erase(PageAddress);
-				boot_spm_busy_wait();
-
-				/* Write each of the FLASH page's bytes in sequence */
-				for (uint8_t PageWord = 0; PageWord < (SPM_PAGESIZE / 2); PageWord++)
-				{
-					/* Check if endpoint is empty - if so clear it and wait until ready for next packet */
-					if (!(Endpoint_BytesInEndpoint()))
-					{
-						Endpoint_ClearOUT();
-						while (!(Endpoint_IsOUTReceived()));
-					}
-
-					/* Write the next data word to the FLASH page */
-					boot_page_fill(PageAddress + ((uint16_t)PageWord << 1), Endpoint_Read_16_LE());
-				}
-
-				/* Write the filled FLASH page to memory */
-				boot_page_write(PageAddress);
-				boot_spm_busy_wait();
-
-				/* Re-enable RWW section */
-				boot_rww_enable();
-			}
-
-			Endpoint_ClearOUT();
-
-			Endpoint_ClearStatusStage();
-			break;
-	}
-}
-

+ 0 - 71
lib/lufa/Bootloaders/HID/BootloaderHID.h

@@ -1,71 +0,0 @@
-/*
-             LUFA Library
-     Copyright (C) Dean Camera, 2017.
-
-  dean [at] fourwalledcubicle [dot] com
-           www.lufa-lib.org
-*/
-
-/*
-  Copyright 2017  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 BootloaderHID.c.
- */
-
-#ifndef _BOOTLOADERHID_H_
-#define _BOOTLOADERHID_H_
-
-	/* Includes: */
-		#include <avr/io.h>
-		#include <avr/wdt.h>
-		#include <avr/boot.h>
-		#include <avr/power.h>
-		#include <avr/interrupt.h>
-		#include <stdbool.h>
-
-		#include "Descriptors.h"
-
-		#include <LUFA/Drivers/USB/USB.h>
-		#include <LUFA/Platform/Platform.h>
-
-	/* 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: */
-		/** Bootloader special address to start the user application */
-		#define COMMAND_STARTAPPLICATION   0xFFFF
-
-		/** Magic bootloader key to unlock forced application start mode. */
-		#define MAGIC_BOOT_KEY             0xDC42
-
-	/* Function Prototypes: */
-		static void SetupHardware(void);
-
-		void Application_Jump_Check(void) ATTR_INIT_SECTION(3);
-
-		void EVENT_USB_Device_ConfigurationChanged(void);
-
-#endif

+ 0 - 105
lib/lufa/Bootloaders/HID/BootloaderHID.txt

@@ -1,105 +0,0 @@
-/** \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 HID Class USB AVR Bootloader
- *
- *  \section SSec_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 SSec_Info USB Information:
- *
- *  The following table gives a rundown of the USB utilization of this demo.
- *
- * <table>
- *  <tr>
- *   <td><b>USB Mode:</b></td>
- *   <td>Device</td>
- *  </tr>
- *  <tr>
- *   <td><b>USB Class:</b></td>
- *   <td>Human Interface Device Class (HID)</td>
- *  </tr>
- *  <tr>
- *   <td><b>USB Subclass:</b></td>
- *   <td>N/A</td>
- *  </tr>
- *  <tr>
- *   <td><b>Relevant Standards:</b></td>
- *   <td>USBIF HID Class Standard \n
- *       Teensy Programming Protocol Specification</td>
- *  </tr>
- *  <tr>
- *   <td><b>Supported USB Speeds:</b></td>
- *   <td>Low Speed Mode \n
- *       Full Speed Mode</td>
- *  </tr>
- * </table>
- *
- *  \section SSec_Description Project Description:
- *
- *  This bootloader enumerates to the host as a HID Class device, allowing for device FLASH programming through
- *  the supplied command line software, which is a modified version of Paul's TeensyHID Command Line loader code
- *  from PJRC (used with permission). This bootloader is deliberately non-compatible with the proprietary PJRC
- *  HalfKay bootloader GUI; only the command line interface software accompanying this bootloader will work with it.
- *
- *  Out of the box this bootloader builds for the AT90USB1287 with an 8KB bootloader section size, and will fit
- *  into 2KB of bootloader space for the Series 2 USB AVRs (ATMEGAxxU2, AT90USBxx2) or 4KB of bootloader space for
- *  all other models. 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.
- *
- *  \warning <b>THIS BOOTLOADER IS NOT SECURE.</b> 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 \c HWB mechanism of the USB AVRs; ground the \c HWB pin (see device
- *  datasheet) then momentarily ground \c /RESET to start the bootloader. This assumes the \c HWBE fuse is set and the
- *  \c BOOTRST fuse is cleared.
- *
- *  \section Sec_Installation Driver Installation
- *
- *  This bootloader uses the HID class driver inbuilt into all modern operating systems, thus no additional drivers
- *  need to be supplied for correct operation.
- *
- *  \section Sec_HostApp Host Controller Application
- *
- *  Due to licensing issues, the supplied bootloader is compatible with the HalfKay bootloader protocol designed
- *  by PJRC, but is <b>not compatible with the cross-platform loader GUI</b>. A modified version of the open source
- *  cross-platform TeensyLoader application is supplied, which can be compiled under most operating systems. The
- *  command-line loader application should remain compatible with genuine Teensy boards in addition to boards using
- *  this custom bootloader.
- *
- *  Once compiled, programs can be loaded into the AVR's FLASH memory through the following example command:
- *  \code
- *  hid_bootloader_cli -mmcu=at90usb1287 Mouse.hex
- *  \endcode
- *
- *  \section Sec_KnownIssues Known Issues:
- *
- *  \par After loading an application, it is not run automatically on startup.
- *  Some USB AVR boards ship with the \c BOOTRST fuse set, causing the bootloader
- *  to run automatically when the device is reset. This booloader requires the
- *  \c BOOTRST be disabled and the HWBE fuse used instead to run the bootloader
- *  when needed.
- *
- *  \section SSec_Options Project Options
- *
- *  The following defines can be found in this demo, which can control the demo behaviour when defined, or changed in value.
- *
- *  <table>
- *   <tr>
- *    <td>
- *     None
- *    </td>
- *   </tr>
- *  </table>
- */

+ 0 - 93
lib/lufa/Bootloaders/HID/Config/LUFAConfig.h

@@ -1,93 +0,0 @@
-/*
-             LUFA Library
-     Copyright (C) Dean Camera, 2017.
-
-  dean [at] fourwalledcubicle [dot] com
-           www.lufa-lib.org
-*/
-
-/*
-  Copyright 2017  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

+ 0 - 187
lib/lufa/Bootloaders/HID/Descriptors.c

@@ -1,187 +0,0 @@
-/*
-             LUFA Library
-     Copyright (C) Dean Camera, 2017.
-
-  dean [at] fourwalledcubicle [dot] com
-           www.lufa-lib.org
-*/
-
-/*
-  Copyright 2017  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"
-
-/** HID class report descriptor. This is a special descriptor constructed with values from the
- *  USBIF HID class specification to describe the reports and capabilities of the HID device. This
- *  descriptor is parsed by the host and its contents used to determine what data (and in what encoding)
- *  the device will send, and what it may be sent back from the host. Refer to the HID specification for
- *  more details on HID report descriptors.
- */
-const USB_Descriptor_HIDReport_Datatype_t HIDReport[] =
-{
-	HID_RI_USAGE_PAGE(16, 0xFFDC), /* Vendor Page 0xDC */
-	HID_RI_USAGE(8, 0xFB), /* Vendor Usage 0xFB */
-	HID_RI_COLLECTION(8, 0x01), /* Vendor Usage 1 */
-		HID_RI_USAGE(8, 0x02), /* Vendor Usage 2 */
-		HID_RI_LOGICAL_MINIMUM(8, 0x00),
-		HID_RI_LOGICAL_MAXIMUM(8, 0xFF),
-		HID_RI_REPORT_SIZE(8, 0x08),
-		HID_RI_REPORT_COUNT(16, (sizeof(uint16_t) + SPM_PAGESIZE)),
-		HID_RI_OUTPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE | HID_IOF_NON_VOLATILE),
-	HID_RI_END_COLLECTION(0),
-};
-
-/** 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                  = USB_CSCP_NoDeviceClass,
-	.SubClass               = USB_CSCP_NoDeviceSubclass,
-	.Protocol               = USB_CSCP_NoDeviceProtocol,
-
-	.Endpoint0Size          = FIXED_CONTROL_ENDPOINT_SIZE,
-
-	.VendorID               = 0x03EB,
-	.ProductID              = 0x2067,
-	.ReleaseNumber          = VERSION_BCD(0,0,1),
-
-	.ManufacturerStrIndex   = NO_DESCRIPTOR,
-	.ProductStrIndex        = NO_DESCRIPTOR,
-	.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        = 1,
-
-			.ConfigurationNumber    = 1,
-			.ConfigurationStrIndex  = NO_DESCRIPTOR,
-
-			.ConfigAttributes       = USB_CONFIG_ATTR_RESERVED,
-
-			.MaxPowerConsumption    = USB_CONFIG_POWER_MA(100)
-		},
-
-	.HID_Interface =
-		{
-			.Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
-
-			.InterfaceNumber        = INTERFACE_ID_GenericHID,
-			.AlternateSetting       = 0x00,
-
-			.TotalEndpoints         = 1,
-
-			.Class                  = HID_CSCP_HIDClass,
-			.SubClass               = HID_CSCP_NonBootSubclass,
-			.Protocol               = HID_CSCP_NonBootProtocol,
-
-			.InterfaceStrIndex      = NO_DESCRIPTOR
-		},
-
-	.HID_VendorHID =
-		{
-			.Header                 = {.Size = sizeof(USB_HID_Descriptor_HID_t), .Type = HID_DTYPE_HID},
-
-			.HIDSpec                = VERSION_BCD(1,1,1),
-			.CountryCode            = 0x00,
-			.TotalReportDescriptors = 1,
-			.HIDReportType          = HID_DTYPE_Report,
-			.HIDReportLength        = sizeof(HIDReport)
-		},
-
-	.HID_ReportINEndpoint =
-		{
-			.Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},
-
-			.EndpointAddress        = HID_IN_EPADDR,
-			.Attributes             = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),
-			.EndpointSize           = HID_IN_EPSIZE,
-			.PollingIntervalMS      = 0x05
-		},
-};
-
-/** This function is called by the library when in device mode, and must be overridden (see 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 uint16_t wIndex,
-                                    const void** const DescriptorAddress)
-{
-	const uint8_t DescriptorType   = (wValue >> 8);
-
-	const void* Address = NULL;
-	uint16_t    Size    = NO_DESCRIPTOR;
-
-	/* If/Else If chain compiles slightly smaller than a switch case */
-	if (DescriptorType == DTYPE_Device)
-	{
-		Address = &DeviceDescriptor;
-		Size    = sizeof(USB_Descriptor_Device_t);
-	}
-	else if (DescriptorType == DTYPE_Configuration)
-	{
-		Address = &ConfigurationDescriptor;
-		Size    = sizeof(USB_Descriptor_Configuration_t);
-	}
-	else if (DescriptorType == HID_DTYPE_HID)
-	{
-		Address = &ConfigurationDescriptor.HID_VendorHID;
-		Size    = sizeof(USB_HID_Descriptor_HID_t);
-	}
-	else if (DescriptorType == HID_DTYPE_Report)
-	{
-		Address = &HIDReport;
-		Size    = sizeof(HIDReport);
-	}
-
-	*DescriptorAddress = Address;
-	return Size;
-}
-

+ 0 - 80
lib/lufa/Bootloaders/HID/Descriptors.h

@@ -1,80 +0,0 @@
-/*
-             LUFA Library
-     Copyright (C) Dean Camera, 2017.
-
-  dean [at] fourwalledcubicle [dot] com
-           www.lufa-lib.org
-*/
-
-/*
-  Copyright 2017  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 <LUFA/Drivers/USB/USB.h>
-
-	/* 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;
-
-			// Generic HID Interface
-			USB_Descriptor_Interface_t            HID_Interface;
-			USB_HID_Descriptor_HID_t              HID_VendorHID;
-			USB_Descriptor_Endpoint_t             HID_ReportINEndpoint;
-		} 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_GenericHID = 0, /**< GenericHID interface descriptor ID */
-		};
-
-	/* Macros: */
-		/** Endpoint address of the HID data IN endpoint. */
-		#define HID_IN_EPADDR                (ENDPOINT_DIR_IN | 1)
-
-		/** Size in bytes of the HID reporting IN endpoint. */
-		#define HID_IN_EPSIZE                64
-
-	/* Function Prototypes: */
-		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
-		                                    const uint16_t wIndex,
-		                                    const void** const DescriptorAddress)
-		                                    ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);
-
-#endif
-

+ 0 - 1
lib/lufa/Bootloaders/HID/HostLoaderApp/.gitignore

@@ -1 +0,0 @@
-hid_bootloader_cli

+ 0 - 40
lib/lufa/Bootloaders/HID/HostLoaderApp/Makefile

@@ -1,40 +0,0 @@
-OS ?= LINUX
-#OS ?= WINDOWS
-#OS ?= MACOSX
-#OS ?= BSD
-
-ifeq ($(OS), LINUX)  # also works on FreeBSD
-CC ?= gcc
-CFLAGS ?= -O2 -Wall
-hid_bootloader_cli: hid_bootloader_cli.c
-	$(CC) $(CFLAGS) -s -DUSE_LIBUSB -o hid_bootloader_cli hid_bootloader_cli.c -lusb
-
-
-else ifeq ($(OS), WINDOWS)
-CC = i586-mingw32msvc-gcc
-CFLAGS ?= -O2 -Wall
-LDLIB = -lsetupapi -lhid
-hid_bootloader_cli.exe: hid_bootloader_cli.c
-	$(CC) $(CFLAGS) -s -DUSE_WIN32 -o hid_bootloader_cli.exe hid_bootloader_cli.c $(LDLIB)
-
-
-else ifeq ($(OS), MACOSX)
-CC ?= gcc
-SDK ?= /Developer/SDKs/MacOSX10.5.sdk
-CFLAGS ?= -O2 -Wall
-hid_bootloader_cli: hid_bootloader_cli.c
-	$(CC) $(CFLAGS) -DUSE_APPLE_IOKIT -isysroot $(SDK) -o hid_bootloader_cli hid_bootloader_cli.c -Wl,-syslibroot,$(SDK) -framework IOKit -framework CoreFoundation
-
-
-else ifeq ($(OS), BSD)  # works on NetBSD and OpenBSD
-CC ?= gcct
-CFLAGS ?= -O2 -Wall
-hid_bootloader_cli: hid_bootloader_cli.c
-	$(CC) $(CFLAGS) -s -DUSE_UHID -o hid_bootloader_cli hid_bootloader_cli.c
-
-
-endif
-
-
-clean:
-	rm -f hid_bootloader_cli hid_bootloader_cli.exe

+ 0 - 21
lib/lufa/Bootloaders/HID/HostLoaderApp/Makefile.bsd

@@ -1,21 +0,0 @@
-OS ?= FreeBSD
-#OS ?= NetBSD
-#OS ?= OpenBSD
-
-CFLAGS ?= -O2 -Wall
-CC ?= gcc
-
-.if $(OS) == "FreeBSD"
-CFLAGS += -DUSE_LIBUSB
-LIBS =  -lusb
-.elif $(OS) == "NetBSD" || $(OS) == "OpenBSD"
-CFLAGS += -DUSE_UHID
-LIBS =
-.endif
-
-
-hid_bootloader_cli: hid_bootloader_cli.c
-	$(CC) $(CFLAGS) -s -o hid_bootloader_cli hid_bootloader_cli.c $(LIBS)
-
-clean:
-	rm -f hid_bootloader_cli

+ 0 - 674
lib/lufa/Bootloaders/HID/HostLoaderApp/gpl3.txt

@@ -1,674 +0,0 @@
-                    GNU GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                            Preamble
-
-  The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
-  The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works.  By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users.  We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors.  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
-  To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights.  Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received.  You must make sure that they, too, receive
-or can get the source code.  And you must show them these terms so they
-know their rights.
-
-  Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
-  For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software.  For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
-  Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so.  This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software.  The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable.  Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products.  If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
-  Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary.  To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                       TERMS AND CONDITIONS
-
-  0. Definitions.
-
-  "This License" refers to version 3 of the GNU General Public License.
-
-  "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
-  "The Program" refers to any copyrightable work licensed under this
-License.  Each licensee is addressed as "you".  "Licensees" and
-"recipients" may be individuals or organizations.
-
-  To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy.  The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
-  A "covered work" means either the unmodified Program or a work based
-on the Program.
-
-  To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy.  Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
-  To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies.  Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
-  An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License.  If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
-  1. Source Code.
-
-  The "source code" for a work means the preferred form of the work
-for making modifications to it.  "Object code" means any non-source
-form of a work.
-
-  A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
-  The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form.  A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
-  The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities.  However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work.  For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
-  The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
-  The Corresponding Source for a work in source code form is that
-same work.
-
-  2. Basic Permissions.
-
-  All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met.  This License explicitly affirms your unlimited
-permission to run the unmodified Program.  The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work.  This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
-  You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force.  You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright.  Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
-  Conveying under any other circumstances is permitted solely under
-the conditions stated below.  Sublicensing is not allowed; section 10
-makes it unnecessary.
-
-  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
-  No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
-  When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
-  4. Conveying Verbatim Copies.
-
-  You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
-  You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
-  5. Conveying Modified Source Versions.
-
-  You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
-    a) The work must carry prominent notices stating that you modified
-    it, and giving a relevant date.
-
-    b) The work must carry prominent notices stating that it is
-    released under this License and any conditions added under section
-    7.  This requirement modifies the requirement in section 4 to
-    "keep intact all notices".
-
-    c) You must license the entire work, as a whole, under this
-    License to anyone who comes into possession of a copy.  This
-    License will therefore apply, along with any applicable section 7
-    additional terms, to the whole of the work, and all its parts,
-    regardless of how they are packaged.  This License gives no
-    permission to license the work in any other way, but it does not
-    invalidate such permission if you have separately received it.
-
-    d) If the work has interactive user interfaces, each must display
-    Appropriate Legal Notices; however, if the Program has interactive
-    interfaces that do not display Appropriate Legal Notices, your
-    work need not make them do so.
-
-  A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit.  Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
-  6. Conveying Non-Source Forms.
-
-  You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
-    a) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by the
-    Corresponding Source fixed on a durable physical medium
-    customarily used for software interchange.
-
-    b) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by a
-    written offer, valid for at least three years and valid for as
-    long as you offer spare parts or customer support for that product
-    model, to give anyone who possesses the object code either (1) a
-    copy of the Corresponding Source for all the software in the
-    product that is covered by this License, on a durable physical
-    medium customarily used for software interchange, for a price no
-    more than your reasonable cost of physically performing this
-    conveying of source, or (2) access to copy the
-    Corresponding Source from a network server at no charge.
-
-    c) Convey individual copies of the object code with a copy of the
-    written offer to provide the Corresponding Source.  This
-    alternative is allowed only occasionally and noncommercially, and
-    only if you received the object code with such an offer, in accord
-    with subsection 6b.
-
-    d) Convey the object code by offering access from a designated
-    place (gratis or for a charge), and offer equivalent access to the
-    Corresponding Source in the same way through the same place at no
-    further charge.  You need not require recipients to copy the
-    Corresponding Source along with the object code.  If the place to
-    copy the object code is a network server, the Corresponding Source
-    may be on a different server (operated by you or a third party)
-    that supports equivalent copying facilities, provided you maintain
-    clear directions next to the object code saying where to find the
-    Corresponding Source.  Regardless of what server hosts the
-    Corresponding Source, you remain obligated to ensure that it is
-    available for as long as needed to satisfy these requirements.
-
-    e) Convey the object code using peer-to-peer transmission, provided
-    you inform other peers where the object code and Corresponding
-    Source of the work are being offered to the general public at no
-    charge under subsection 6d.
-
-  A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
-  A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling.  In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage.  For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product.  A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
-  "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source.  The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
-  If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information.  But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
-  The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed.  Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
-  Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
-  7. Additional Terms.
-
-  "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law.  If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
-  When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it.  (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.)  You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
-  Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
-    a) Disclaiming warranty or limiting liability differently from the
-    terms of sections 15 and 16 of this License; or
-
-    b) Requiring preservation of specified reasonable legal notices or
-    author attributions in that material or in the Appropriate Legal
-    Notices displayed by works containing it; or
-
-    c) Prohibiting misrepresentation of the origin of that material, or
-    requiring that modified versions of such material be marked in
-    reasonable ways as different from the original version; or
-
-    d) Limiting the use for publicity purposes of names of licensors or
-    authors of the material; or
-
-    e) Declining to grant rights under trademark law for use of some
-    trade names, trademarks, or service marks; or
-
-    f) Requiring indemnification of licensors and authors of that
-    material by anyone who conveys the material (or modified versions of
-    it) with contractual assumptions of liability to the recipient, for
-    any liability that these contractual assumptions directly impose on
-    those licensors and authors.
-
-  All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10.  If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term.  If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
-  If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
-  Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
-  8. Termination.
-
-  You may not propagate or modify a covered work except as expressly
-provided under this License.  Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
-  However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
-  Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
-  Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License.  If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
-  9. Acceptance Not Required for Having Copies.
-
-  You are not required to accept this License in order to receive or
-run a copy of the Program.  Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance.  However,
-nothing other than this License grants you permission to propagate or
-modify any covered work.  These actions infringe copyright if you do
-not accept this License.  Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
-  10. Automatic Licensing of Downstream Recipients.
-
-  Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License.  You are not responsible
-for enforcing compliance by third parties with this License.
-
-  An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations.  If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
-  You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License.  For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
-  11. Patents.
-
-  A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based.  The
-work thus licensed is called the contributor's "contributor version".
-
-  A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version.  For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
-  Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
-  In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement).  To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
-  If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients.  "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
-  If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
-  A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License.  You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
-  Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
-  12. No Surrender of Others' Freedom.
-
-  If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all.  For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
-  13. Use with the GNU Affero General Public License.
-
-  Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work.  The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
-  14. Revised Versions of this License.
-
-  The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-  Each version is given a distinguishing version number.  If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation.  If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
-  If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
-  Later license versions may give you additional or different
-permissions.  However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
-  15. Disclaimer of Warranty.
-
-  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. Limitation of Liability.
-
-  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
-  17. Interpretation of Sections 15 and 16.
-
-  If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
-                     END OF TERMS AND CONDITIONS
-
-            How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program 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.
-
-    This program 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 this program.  If not, see <http://www.gnu.org/licenses/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
-  If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
-    <program>  Copyright (C) <year>  <name of author>
-    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
-  You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<http://www.gnu.org/licenses/>.
-
-  The GNU General Public License does not permit incorporating your program
-into proprietary programs.  If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.  But first, please read
-<http://www.gnu.org/philosophy/why-not-lgpl.html>.

+ 0 - 1013
lib/lufa/Bootloaders/HID/HostLoaderApp/hid_bootloader_cli.c

@@ -1,1013 +0,0 @@
-/* Modified for the LUFA HID Bootloader by Dean Camera
- *           http://www.lufa-lib.org
- *
- *   THIS MODIFIED VERSION IS UNSUPPORTED BY PJRC.
- */
-
-/* Teensy Loader, Command Line Interface
- * Program and Reboot Teensy Board with HalfKay Bootloader
- * http://www.pjrc.com/teensy/loader_cli.html
- * Copyright 2008-2010, PJRC.COM, LLC
- *
- *
- * You may redistribute this program and/or modify it under the terms
- * of the GNU General Public License as published by the Free Software
- * Foundation, version 3 of the License.
- *
- * This program 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 this program.  If not, see http://www.gnu.org/licenses/
- */
-
-/* Want to incorporate this code into a proprietary application??
- * Just email paul@pjrc.com to ask.  Usually it's not a problem,
- * but you do need to ask to use this code in any way other than
- * those permitted by the GNU General Public License, version 3  */
-
-/* For non-root permissions on ubuntu or similar udev-based linux
- * http://www.pjrc.com/teensy/49-teensy.rules
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdint.h>
-#include <stdarg.h>
-#include <string.h>
-#include <unistd.h>
-
-void usage(void)
-{
-	fprintf(stderr, "Usage: hid_bootloader_cli -mmcu=<MCU> [-w] [-h] [-n] [-v] <file.hex>\n");
-	fprintf(stderr, "\t-w : Wait for device to appear\n");
-	fprintf(stderr, "\t-r : Use hard reboot if device not online\n");
-	fprintf(stderr, "\t-n : No reboot after programming\n");
-	fprintf(stderr, "\t-v : Verbose output\n");
-	fprintf(stderr, "\n<MCU> = atmegaXXuY or at90usbXXXY");
-
-	fprintf(stderr, "\nFor support and more information, please visit:\n");
-	fprintf(stderr, "http://www.lufa-lib.org\n");
-
-	fprintf(stderr, "\nBased on the TeensyHID command line programmer software:\n");
-	fprintf(stderr, "http://www.pjrc.com/teensy/loader_cli.html\n");
-	exit(1);
-}
-
-// USB Access Functions
-int teensy_open(void);
-int teensy_write(void *buf, int len, double timeout);
-void teensy_close(void);
-int hard_reboot(void);
-
-// Intel Hex File Functions
-int read_intel_hex(const char *filename);
-int ihex_bytes_within_range(int begin, int end);
-void ihex_get_data(int addr, int len, unsigned char *bytes);
-
-// Misc stuff
-int printf_verbose(const char *format, ...);
-void delay(double seconds);
-void die(const char *str, ...);
-void parse_options(int argc, char **argv);
-
-// options (from user via command line args)
-int wait_for_device_to_appear = 0;
-int hard_reboot_device = 0;
-int reboot_after_programming = 1;
-int verbose = 0;
-int code_size = 0, block_size = 0;
-const char *filename=NULL;
-
-
-/****************************************************************/
-/*                                                              */
-/*                       Main Program                           */
-/*                                                              */
-/****************************************************************/
-
-int main(int argc, char **argv)
-{
-	unsigned char buf[260];
-	int num, addr, r, first_block=1, waited=0;
-
-	// parse command line arguments
-	parse_options(argc, argv);
-	if (!filename) {
-		fprintf(stderr, "Filename must be specified\n\n");
-		usage();
-	}
-	if (!code_size) {
-		fprintf(stderr, "MCU type must be specified\n\n");
-		usage();
-	}
-	printf_verbose("Teensy Loader, Command Line, Version 2.0\n");
-
-	// read the intel hex file
-	// this is done first so any error is reported before using USB
-	num = read_intel_hex(filename);
-	if (num < 0) die("error reading intel hex file \"%s\"", filename);
-	printf_verbose("Read \"%s\": %d bytes, %.1f%% usage\n",
-		filename, num, (double)num / (double)code_size * 100.0);
-
-	// open the USB device
-	while (1) {
-		if (teensy_open()) break;
-		if (hard_reboot_device) {
-			if (!hard_reboot()) die("Unable to find rebootor\n");
-			printf_verbose("Hard Reboot performed\n");
-			hard_reboot_device = 0; // only hard reboot once
-			wait_for_device_to_appear = 1;
-		}
-		if (!wait_for_device_to_appear) die("Unable to open device\n");
-		if (!waited) {
-			printf_verbose("Waiting for Teensy device...\n");
-			printf_verbose(" (hint: press the reset button)\n");
-			waited = 1;
-		}
-		delay(0.25);
-	}
-	printf_verbose("Found HalfKay Bootloader\n");
-
-	// if we waited for the device, read the hex file again
-	// perhaps it changed while we were waiting?
-	if (waited) {
-		num = read_intel_hex(filename);
-		if (num < 0) die("error reading intel hex file \"%s\"", filename);
-		printf_verbose("Read \"%s\": %d bytes, %.1f%% usage\n",
-		 	filename, num, (double)num / (double)code_size * 100.0);
-	}
-
-	// program the data
-	printf_verbose("Programming");
-	fflush(stdout);
-	for (addr = 0; addr < code_size; addr += block_size) {
-		if (addr > 0 && !ihex_bytes_within_range(addr, addr + block_size - 1)) {
-			// don't waste time on blocks that are unused,
-			// but always do the first one to erase the chip
-			continue;
-		}
-		printf_verbose(".");
-		if (code_size < 0x10000) {
-			buf[0] = addr & 255;
-			buf[1] = (addr >> 8) & 255;
-		} else {
-			buf[0] = (addr >> 8) & 255;
-			buf[1] = (addr >> 16) & 255;
-		}
-		ihex_get_data(addr, block_size, buf + 2);
-		r = teensy_write(buf, block_size + 2, first_block ? 3.0 : 0.25);
-		if (!r) die("error writing to Teensy\n");
-		first_block = 0;
-	}
-	printf_verbose("\n");
-
-	// reboot to the user's new code
-	if (reboot_after_programming) {
-		printf_verbose("Booting\n");
-		buf[0] = 0xFF;
-		buf[1] = 0xFF;
-		memset(buf + 2, 0, sizeof(buf) - 2);
-		teensy_write(buf, block_size + 2, 0.25);
-	}
-	teensy_close();
-	return 0;
-}
-
-
-
-
-/****************************************************************/
-/*                                                              */
-/*             USB Access - libusb (Linux & FreeBSD)            */
-/*                                                              */
-/****************************************************************/
-
-#if defined(USE_LIBUSB)
-
-// http://libusb.sourceforge.net/doc/index.html
-#include <usb.h>
-
-usb_dev_handle * open_usb_device(int vid, int pid)
-{
-	struct usb_bus *bus;
-	struct usb_device *dev;
-	usb_dev_handle *h;
-	#ifdef LIBUSB_HAS_GET_DRIVER_NP
-	char buf[128];
-	#endif
-	int r;
-
-	usb_init();
-	usb_find_busses();
-	usb_find_devices();
-	//printf_verbose("\nSearching for USB device:\n");
-	for (bus = usb_get_busses(); bus; bus = bus->next) {
-		for (dev = bus->devices; dev; dev = dev->next) {
-			//printf_verbose("bus \"%s\", device \"%s\" vid=%04X, pid=%04X\n",
-			//	bus->dirname, dev->filename,
-			//	dev->descriptor.idVendor,
-			//	dev->descriptor.idProduct
-			//);
-			if (dev->descriptor.idVendor != vid) continue;
-			if (dev->descriptor.idProduct != pid) continue;
-			h = usb_open(dev);
-			if (!h) {
-				printf_verbose("Found device but unable to open");
-				continue;
-			}
-			#ifdef LIBUSB_HAS_GET_DRIVER_NP
-			r = usb_get_driver_np(h, 0, buf, sizeof(buf));
-			if (r >= 0) {
-				r = usb_detach_kernel_driver_np(h, 0);
-				if (r < 0) {
-					usb_close(h);
-					printf_verbose("Device is in use by \"%s\" driver", buf);
-					continue;
-				}
-			}
-			#endif
-			// Mac OS-X - removing this call to usb_claim_interface() might allow
-			// this to work, even though it is a clear misuse of the libusb API.
-			// normally Apple's IOKit should be used on Mac OS-X
-			r = usb_claim_interface(h, 0);
-			if (r < 0) {
-				usb_close(h);
-				printf_verbose("Unable to claim interface, check USB permissions");
-				continue;
-			}
-			return h;
-		}
-	}
-	return NULL;
-}
-
-static usb_dev_handle *libusb_teensy_handle = NULL;
-
-int teensy_open(void)
-{
-	teensy_close();
-	libusb_teensy_handle = open_usb_device(0x16C0, 0x0478);
-
-	if (!libusb_teensy_handle)
-		libusb_teensy_handle = open_usb_device(0x03eb, 0x2067);
-
-	if (!libusb_teensy_handle) return 0;
-	return 1;
-}
-
-int teensy_write(void *buf, int len, double timeout)
-{
-	int r;
-
-	if (!libusb_teensy_handle) return 0;
-	r = usb_control_msg(libusb_teensy_handle, 0x21, 9, 0x0200, 0, (char *)buf,
-		len, (int)(timeout * 1000.0));
-	if (r < 0) return 0;
-	return 1;
-}
-
-void teensy_close(void)
-{
-	if (!libusb_teensy_handle) return;
-	usb_release_interface(libusb_teensy_handle, 0);
-	usb_close(libusb_teensy_handle);
-	libusb_teensy_handle = NULL;
-}
-
-int hard_reboot(void)
-{
-	usb_dev_handle *rebootor;
-	int r;
-
-	rebootor = open_usb_device(0x16C0, 0x0477);
-
-	if (!rebootor)
-		rebootor = open_usb_device(0x03eb, 0x2067);
-
-	if (!rebootor) return 0;
-	r = usb_control_msg(rebootor, 0x21, 9, 0x0200, 0, "reboot", 6, 100);
-	usb_release_interface(rebootor, 0);
-	usb_close(rebootor);
-	if (r < 0) return 0;
-	return 1;
-}
-
-#endif
-
-
-/****************************************************************/
-/*                                                              */
-/*               USB Access - Microsoft WIN32                   */
-/*                                                              */
-/****************************************************************/
-
-#if defined(USE_WIN32)
-
-// http://msdn.microsoft.com/en-us/library/ms790932.aspx
-#include <windows.h>
-#include <setupapi.h>
-#include <ddk/hidsdi.h>
-#include <ddk/hidclass.h>
-
-HANDLE open_usb_device(int vid, int pid)
-{
-	GUID guid;
-	HDEVINFO info;
-	DWORD index, required_size;
-	SP_DEVICE_INTERFACE_DATA iface;
-	SP_DEVICE_INTERFACE_DETAIL_DATA *details;
-	HIDD_ATTRIBUTES attrib;
-	HANDLE h;
-	BOOL ret;
-
-	HidD_GetHidGuid(&guid);
-	info = SetupDiGetClassDevs(&guid, NULL, NULL, DIGCF_PRESENT | DIGCF_DEVICEINTERFACE);
-	if (info == INVALID_HANDLE_VALUE) return NULL;
-	for (index=0; 1 ;index++) {
-		iface.cbSize = sizeof(SP_DEVICE_INTERFACE_DATA);
-		ret = SetupDiEnumDeviceInterfaces(info, NULL, &guid, index, &iface);
-		if (!ret) {
-			SetupDiDestroyDeviceInfoList(info);
-			break;
-		}
-		SetupDiGetInterfaceDeviceDetail(info, &iface, NULL, 0, &required_size, NULL);
-		details = (SP_DEVICE_INTERFACE_DETAIL_DATA *)malloc(required_size);
-		if (details == NULL) continue;
-		memset(details, 0, required_size);
-		details->cbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA);
-		ret = SetupDiGetDeviceInterfaceDetail(info, &iface, details,
-			required_size, NULL, NULL);
-		if (!ret) {
-			free(details);
-			continue;
-		}
-		h = CreateFile(details->DevicePath, GENERIC_READ|GENERIC_WRITE,
-			FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_EXISTING,
-			FILE_FLAG_OVERLAPPED, NULL);
-		free(details);
-		if (h == INVALID_HANDLE_VALUE) continue;
-		attrib.Size = sizeof(HIDD_ATTRIBUTES);
-		ret = HidD_GetAttributes(h, &attrib);
-		if (!ret) {
-			CloseHandle(h);
-			continue;
-		}
-		if (attrib.VendorID != vid || attrib.ProductID != pid) {
-			CloseHandle(h);
-			continue;
-		}
-		SetupDiDestroyDeviceInfoList(info);
-		return h;
-	}
-	return NULL;
-}
-
-int write_usb_device(HANDLE h, void *buf, int len, int timeout)
-{
-	static HANDLE event = NULL;
-	unsigned char tmpbuf[1040];
-	OVERLAPPED ov;
-	DWORD n, r;
-
-	if (len > sizeof(tmpbuf) - 1) return 0;
-	if (event == NULL) {
-		event = CreateEvent(NULL, TRUE, TRUE, NULL);
-		if (!event) return 0;
-	}
-	ResetEvent(&event);
-	memset(&ov, 0, sizeof(ov));
-	ov.hEvent = event;
-	tmpbuf[0] = 0;
-	memcpy(tmpbuf + 1, buf, len);
-	if (!WriteFile(h, tmpbuf, len + 1, NULL, &ov)) {
-		if (GetLastError() != ERROR_IO_PENDING) return 0;
-		r = WaitForSingleObject(event, timeout);
-		if (r == WAIT_TIMEOUT) {
-			CancelIo(h);
-			return 0;
-		}
-		if (r != WAIT_OBJECT_0) return 0;
-	}
-	if (!GetOverlappedResult(h, &ov, &n, FALSE)) return 0;
-	return 1;
-}
-
-static HANDLE win32_teensy_handle = NULL;
-
-int teensy_open(void)
-{
-	teensy_close();
-	win32_teensy_handle = open_usb_device(0x16C0, 0x0478);
-
-	if (!win32_teensy_handle)
-		win32_teensy_handle = open_usb_device(0x03eb, 0x2067);
-
-	if (!win32_teensy_handle) return 0;
-	return 1;
-}
-
-int teensy_write(void *buf, int len, double timeout)
-{
-	int r;
-	if (!win32_teensy_handle) return 0;
-	r = write_usb_device(win32_teensy_handle, buf, len, (int)(timeout * 1000.0));
-	return r;
-}
-
-void teensy_close(void)
-{
-	if (!win32_teensy_handle) return;
-	CloseHandle(win32_teensy_handle);
-	win32_teensy_handle = NULL;
-}
-
-int hard_reboot(void)
-{
-	HANDLE rebootor;
-	int r;
-
-	rebootor = open_usb_device(0x16C0, 0x0477);
-
-	if (!rebootor)
-		rebootor = open_usb_device(0x03eb, 0x2067);
-
-	if (!rebootor) return 0;
-	r = write_usb_device(rebootor, "reboot", 6, 100);
-	CloseHandle(rebootor);
-	return r;
-}
-
-#endif
-
-
-
-/****************************************************************/
-/*                                                              */
-/*             USB Access - Apple's IOKit, Mac OS-X             */
-/*                                                              */
-/****************************************************************/
-
-#if defined(USE_APPLE_IOKIT)
-
-// http://developer.apple.com/technotes/tn2007/tn2187.html
-#include <IOKit/IOKitLib.h>
-#include <IOKit/hid/IOHIDLib.h>
-#include <IOKit/hid/IOHIDDevice.h>
-
-struct usb_list_struct {
-	IOHIDDeviceRef ref;
-	int pid;
-	int vid;
-	struct usb_list_struct *next;
-};
-
-static struct usb_list_struct *usb_list=NULL;
-static IOHIDManagerRef hid_manager=NULL;
-
-void attach_callback(void *context, IOReturn r, void *hid_mgr, IOHIDDeviceRef dev)
-{
-	CFTypeRef type;
-	struct usb_list_struct *n, *p;
-	int32_t pid, vid;
-
-	if (!dev) return;
-	type = IOHIDDeviceGetProperty(dev, CFSTR(kIOHIDVendorIDKey));
-	if (!type || CFGetTypeID(type) != CFNumberGetTypeID()) return;
-	if (!CFNumberGetValue((CFNumberRef)type, kCFNumberSInt32Type, &vid)) return;
-	type = IOHIDDeviceGetProperty(dev, CFSTR(kIOHIDProductIDKey));
-	if (!type || CFGetTypeID(type) != CFNumberGetTypeID()) return;
-	if (!CFNumberGetValue((CFNumberRef)type, kCFNumberSInt32Type, &pid)) return;
-	n = (struct usb_list_struct *)malloc(sizeof(struct usb_list_struct));
-	if (!n) return;
-	//printf("attach callback: vid=%04X, pid=%04X\n", vid, pid);
-	n->ref = dev;
-	n->vid = vid;
-	n->pid = pid;
-	n->next = NULL;
-	if (usb_list == NULL) {
-		usb_list = n;
-	} else {
-		for (p = usb_list; p->next; p = p->next) ;
-		p->next = n;
-	}
-}
-
-void detach_callback(void *context, IOReturn r, void *hid_mgr, IOHIDDeviceRef dev)
-{
-	struct usb_list_struct *p, *tmp, *prev=NULL;
-
-	p = usb_list;
-	while (p) {
-		if (p->ref == dev) {
-			if (prev) {
-				prev->next = p->next;
-			} else {
-				usb_list = p->next;
-			}
-			tmp = p;
-			p = p->next;
-			free(tmp);
-		} else {
-			prev = p;
-			p = p->next;
-		}
-	}
-}
-
-void init_hid_manager(void)
-{
-	CFMutableDictionaryRef dict;
-	IOReturn ret;
-
-	if (hid_manager) return;
-	hid_manager = IOHIDManagerCreate(kCFAllocatorDefault, kIOHIDOptionsTypeNone);
-	if (hid_manager == NULL || CFGetTypeID(hid_manager) != IOHIDManagerGetTypeID()) {
-		if (hid_manager) CFRelease(hid_manager);
-		printf_verbose("no HID Manager - maybe this is a pre-Leopard (10.5) system?\n");
-		return;
-	}
-	dict = CFDictionaryCreateMutable(kCFAllocatorDefault, 0,
-		&kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks);
-	if (!dict) return;
-	IOHIDManagerSetDeviceMatching(hid_manager, dict);
-	CFRelease(dict);
-	IOHIDManagerScheduleWithRunLoop(hid_manager, CFRunLoopGetCurrent(), kCFRunLoopDefaultMode);
-	IOHIDManagerRegisterDeviceMatchingCallback(hid_manager, attach_callback, NULL);
-	IOHIDManagerRegisterDeviceRemovalCallback(hid_manager, detach_callback, NULL);
-	ret = IOHIDManagerOpen(hid_manager, kIOHIDOptionsTypeNone);
-	if (ret != kIOReturnSuccess) {
-		IOHIDManagerUnscheduleFromRunLoop(hid_manager,
-			CFRunLoopGetCurrent(), kCFRunLoopDefaultMode);
-		CFRelease(hid_manager);
-		printf_verbose("Error opening HID Manager");
-	}
-}
-
-static void do_run_loop(void)
-{
-	while (CFRunLoopRunInMode(kCFRunLoopDefaultMode, 0, true) == kCFRunLoopRunHandledSource) ;
-}
-
-IOHIDDeviceRef open_usb_device(int vid, int pid)
-{
-	struct usb_list_struct *p;
-	IOReturn ret;
-
-	init_hid_manager();
-	do_run_loop();
-	for (p = usb_list; p; p = p->next) {
-		if (p->vid == vid && p->pid == pid) {
-			ret = IOHIDDeviceOpen(p->ref, kIOHIDOptionsTypeNone);
-			if (ret == kIOReturnSuccess) return p->ref;
-		}
-	}
-	return NULL;
-}
-
-void close_usb_device(IOHIDDeviceRef dev)
-{
-	struct usb_list_struct *p;
-
-	do_run_loop();
-	for (p = usb_list; p; p = p->next) {
-		if (p->ref == dev) {
-			IOHIDDeviceClose(dev, kIOHIDOptionsTypeNone);
-			return;
-		}
-	}
-}
-
-static IOHIDDeviceRef iokit_teensy_reference = NULL;
-
-int teensy_open(void)
-{
-	teensy_close();
-	iokit_teensy_reference = open_usb_device(0x16C0, 0x0478);
-
-	if (!iokit_teensy_reference)
-		iokit_teensy_reference = open_usb_device(0x03eb, 0x2067);
-
-	if (!iokit_teensy_reference) return 0;
-	return 1;
-}
-
-int teensy_write(void *buf, int len, double timeout)
-{
-	IOReturn ret;
-
-	// timeouts do not work on OS-X
-	// IOHIDDeviceSetReportWithCallback is not implemented
-	// even though Apple documents it with a code example!
-	// submitted to Apple on 22-sep-2009, problem ID 7245050
-	if (!iokit_teensy_reference) return 0;
-	ret = IOHIDDeviceSetReport(iokit_teensy_reference,
-		kIOHIDReportTypeOutput, 0, buf, len);
-	if (ret == kIOReturnSuccess) return 1;
-	return 0;
-}
-
-void teensy_close(void)
-{
-	if (!iokit_teensy_reference) return;
-	close_usb_device(iokit_teensy_reference);
-	iokit_teensy_reference = NULL;
-}
-
-int hard_reboot(void)
-{
-	IOHIDDeviceRef rebootor;
-	IOReturn ret;
-
-	rebootor = open_usb_device(0x16C0, 0x0477);
-
-	if (!rebootor)
-		rebootor = open_usb_device(0x03eb, 0x2067);
-
-	if (!rebootor) return 0;
-	ret = IOHIDDeviceSetReport(rebootor,
-		kIOHIDReportTypeOutput, 0, (uint8_t *)("reboot"), 6);
-	close_usb_device(rebootor);
-	if (ret == kIOReturnSuccess) return 1;
-	return 0;
-}
-
-#endif
-
-
-
-/****************************************************************/
-/*                                                              */
-/*              USB Access - BSD's UHID driver                  */
-/*                                                              */
-/****************************************************************/
-
-#if defined(USE_UHID)
-
-// Thanks to Todd T Fries for help getting this working on OpenBSD
-// and to Chris Kuethe for the initial patch to use UHID.
-
-#include <sys/ioctl.h>
-#include <fcntl.h>
-#include <dirent.h>
-#include <dev/usb/usb.h>
-#ifndef USB_GET_DEVICEINFO
-#include <dev/usb/usb_ioctl.h>
-#endif
-
-#ifndef USB_GET_DEVICEINFO
-# define USB_GET_DEVICEINFO 0
-# error The USB_GET_DEVICEINFO ioctl() value is not defined for your system.
-#endif
-
-int open_usb_device(int vid, int pid)
-{
-	int r, fd;
-	DIR *dir;
-	struct dirent *d;
-	struct usb_device_info info;
-	char buf[256];
-
-	dir = opendir("/dev");
-	if (!dir) return -1;
-	while ((d = readdir(dir)) != NULL) {
-		if (strncmp(d->d_name, "uhid", 4) != 0) continue;
-		snprintf(buf, sizeof(buf), "/dev/%s", d->d_name);
-		fd = open(buf, O_RDWR);
-		if (fd < 0) continue;
-		r = ioctl(fd, USB_GET_DEVICEINFO, &info);
-		if (r < 0) {
-			// NetBSD: added in 2004
-			// OpenBSD: added November 23, 2009
-			// FreeBSD: missing (FreeBSD 8.0) - USE_LIBUSB works!
-			die("Error: your uhid driver does not support"
-			  " USB_GET_DEVICEINFO, please upgrade!\n");
-			close(fd);
-			closedir(dir);
-			exit(1);
-		}
-		//printf("%s: v=%d, p=%d\n", buf, info.udi_vendorNo, info.udi_productNo);
-		if (info.udi_vendorNo == vid && info.udi_productNo == pid) {
-			closedir(dir);
-			return fd;
-		}
-		close(fd);
-	}
-	closedir(dir);
-	return -1;
-}
-
-static int uhid_teensy_fd = -1;
-
-int teensy_open(void)
-{
-	teensy_close();
-	uhid_teensy_fd = open_usb_device(0x16C0, 0x0478);
-
-	if (uhid_teensy_fd < 0)
-		uhid_teensy_fd = open_usb_device(0x03eb, 0x2067);
-
-	if (uhid_teensy_fd < 0) return 0;
-	return 1;
-}
-
-int teensy_write(void *buf, int len, double timeout)
-{
-	int r;
-
-	// TODO: implement timeout... how??
-	r = write(uhid_teensy_fd, buf, len);
-	if (r == len) return 1;
-	return 0;
-}
-
-void teensy_close(void)
-{
-	if (uhid_teensy_fd >= 0) {
-		close(uhid_teensy_fd);
-		uhid_teensy_fd = -1;
-	}
-}
-
-int hard_reboot(void)
-{
-	int r, rebootor_fd;
-
-	rebootor_fd = open_usb_device(0x16C0, 0x0477);
-
-	if (rebootor_fd < 0)
-		rebootor_fd = open_usb_device(0x03eb, 0x2067);
-
-	if (rebootor_fd < 0) return 0;
-	r = write(rebootor_fd, "reboot", 6);
-	delay(0.1);
-	close(rebootor_fd);
-	if (r == 6) return 1;
-	return 0;
-}
-
-#endif
-
-
-
-/****************************************************************/
-/*                                                              */
-/*                     Read Intel Hex File                      */
-/*                                                              */
-/****************************************************************/
-
-// the maximum flash image size we can support
-// chips with larger memory may be used, but only this
-// much intel-hex data can be loaded into memory!
-#define MAX_MEMORY_SIZE 0x10000
-
-static unsigned char firmware_image[MAX_MEMORY_SIZE];
-static unsigned char firmware_mask[MAX_MEMORY_SIZE];
-static int end_record_seen=0;
-static int byte_count;
-static unsigned int extended_addr = 0;
-static int parse_hex_line(char *line);
-
-int read_intel_hex(const char *filename)
-{
-	FILE *fp;
-	int i, lineno=0;
-	char buf[1024];
-
-	byte_count = 0;
-	end_record_seen = 0;
-	for (i=0; i<MAX_MEMORY_SIZE; i++) {
-		firmware_image[i] = 0xFF;
-		firmware_mask[i] = 0;
-	}
-	extended_addr = 0;
-
-	fp = fopen(filename, "r");
-	if (fp == NULL) {
-		//printf("Unable to read file %s\n", filename);
-		return -1;
-	}
-	while (!feof(fp)) {
-		*buf = '\0';
-		if (!fgets(buf, sizeof(buf), fp)) break;
-		lineno++;
-		if (*buf) {
-			if (parse_hex_line(buf) == 0) {
-				//printf("Warning, parse error line %d\n", lineno);
-				fclose(fp);
-				return -2;
-			}
-		}
-		if (end_record_seen) break;
-		if (feof(stdin)) break;
-	}
-	fclose(fp);
-	return byte_count;
-}
-
-
-/* from ihex.c, at http://www.pjrc.com/tech/8051/pm2_docs/intel-hex.html */
-
-/* parses a line of intel hex code, stores the data in bytes[] */
-/* and the beginning address in addr, and returns a 1 if the */
-/* line was valid, or a 0 if an error occurred.  The variable */
-/* num gets the number of bytes that were stored into bytes[] */
-
-
-int
-parse_hex_line(char *line)
-{
-	int addr, code, num;
-        int sum, len, cksum, i;
-        char *ptr;
-
-        num = 0;
-        if (line[0] != ':') return 0;
-        if (strlen(line) < 11) return 0;
-        ptr = line+1;
-        if (!sscanf(ptr, "%02x", &len)) return 0;
-        ptr += 2;
-        if ((int)strlen(line) < (11 + (len * 2)) ) return 0;
-        if (!sscanf(ptr, "%04x", &addr)) return 0;
-        ptr += 4;
-          /* printf("Line: length=%d Addr=%d\n", len, addr); */
-        if (!sscanf(ptr, "%02x", &code)) return 0;
-	if (addr + extended_addr + len >= MAX_MEMORY_SIZE) return 0;
-        ptr += 2;
-        sum = (len & 255) + ((addr >> 8) & 255) + (addr & 255) + (code & 255);
-	if (code != 0) {
-		if (code == 1) {
-			end_record_seen = 1;
-			return 1;
-		}
-		if (code == 2 && len == 2) {
-			if (!sscanf(ptr, "%04x", &i)) return 1;
-			ptr += 4;
-			sum += ((i >> 8) & 255) + (i & 255);
-        		if (!sscanf(ptr, "%02x", &cksum)) return 1;
-			if (((sum & 255) + (cksum & 255)) & 255) return 1;
-			extended_addr = i << 4;
-			//printf("ext addr = %05X\n", extended_addr);
-		}
-		if (code == 4 && len == 2) {
-			if (!sscanf(ptr, "%04x", &i)) return 1;
-			ptr += 4;
-			sum += ((i >> 8) & 255) + (i & 255);
-        		if (!sscanf(ptr, "%02x", &cksum)) return 1;
-			if (((sum & 255) + (cksum & 255)) & 255) return 1;
-			extended_addr = i << 16;
-			//printf("ext addr = %08X\n", extended_addr);
-		}
-		return 1;	// non-data line
-	}
-	byte_count += len;
-        while (num != len) {
-                if (sscanf(ptr, "%02x", &i) != 1) return 0;
-		i &= 255;
-		firmware_image[addr + extended_addr + num] = i;
-		firmware_mask[addr + extended_addr + num] = 1;
-                ptr += 2;
-                sum += i;
-                (num)++;
-                if (num >= 256) return 0;
-        }
-        if (!sscanf(ptr, "%02x", &cksum)) return 0;
-        if (((sum & 255) + (cksum & 255)) & 255) return 0; /* checksum error */
-        return 1;
-}
-
-int ihex_bytes_within_range(int begin, int end)
-{
-	int i;
-
-	if (begin < 0 || begin >= MAX_MEMORY_SIZE ||
-	   end < 0 || end >= MAX_MEMORY_SIZE) {
-		return 0;
-	}
-	for (i=begin; i<=end; i++) {
-		if (firmware_mask[i]) return 1;
-	}
-	return 0;
-}
-
-void ihex_get_data(int addr, int len, unsigned char *bytes)
-{
-	int i;
-
-	if (addr < 0 || len < 0 || addr + len >= MAX_MEMORY_SIZE) {
-		for (i=0; i<len; i++) {
-			bytes[i] = 255;
-		}
-		return;
-	}
-	for (i=0; i<len; i++) {
-		if (firmware_mask[addr]) {
-			bytes[i] = firmware_image[addr];
-		} else {
-			bytes[i] = 255;
-		}
-		addr++;
-	}
-}
-
-/****************************************************************/
-/*                                                              */
-/*                       Misc Functions                         */
-/*                                                              */
-/****************************************************************/
-
-int printf_verbose(const char *format, ...)
-{
-	va_list ap;
-	int r = 0;
-
-	va_start(ap, format);
-	if (verbose) {
-		r = vprintf(format, ap);
-		fflush(stdout);
-	}
-	va_end(ap);
-
-	return r;
-}
-
-void delay(double seconds)
-{
-	#ifdef USE_WIN32
-	sleep(seconds * 1000.0);
-	#else
-	usleep(seconds * 1000000.0);
-	#endif
-}
-
-void die(const char *str, ...)
-{
-	va_list  ap;
-
-	va_start(ap, str);
-	vfprintf(stderr, str, ap);
-	fprintf(stderr, "\n");
-	va_end(ap);
-
-	exit(1);
-}
-
-#if defined USE_WIN32
-#define strcasecmp stricmp
-#endif
-
-void parse_options(int argc, char **argv)
-{
-	int i;
-	const char *arg;
-
-	for (i=1; i<argc; i++) {
-		arg = argv[i];
-
-		if (*arg == '-') {
-			if (strcmp(arg, "-w") == 0) {
-				wait_for_device_to_appear = 1;
-			} else if (strcmp(arg, "-r") == 0) {
-				hard_reboot_device = 1;
-			} else if (strcmp(arg, "-n") == 0) {
-				reboot_after_programming = 0;
-			} else if (strcmp(arg, "-v") == 0) {
-				verbose = 1;
-			} else if (strncmp(arg, "-mmcu=", 6) == 0) {
-				arg += 6;
-
-				if (strncmp(arg, "at90usb", 7) == 0) {
-					arg += 7;
-				} else if (strncmp(arg, "atmega", 6) == 0) {
-					arg += 6;
-				} else {
-					die("Unknown MCU type\n");
-				}
-
-				if (strncmp(arg, "128", 3) == 0) {
-					code_size  = 128 * 1024;
-					block_size = 256;
-				} else if (strncmp(arg, "64", 2) == 0) {
-					code_size  = 64 * 1024;
-					block_size = 256;
-				} else if (strncmp(arg, "32", 2) == 0) {
-					code_size  = 32 * 1024;
-					block_size = 128;
-				} else if (strncmp(arg, "16", 2) == 0) {
-					code_size  = 16 * 1024;
-					block_size = 128;
-				} else if (strncmp(arg, "8", 1) == 0) {
-					code_size  = 8 * 1024;
-					block_size = 128;
-				} else {
-					die("Unknown MCU type\n");
-				}
-			}
-		} else {
-			filename = argv[i];
-		}
-	}
-}
-

+ 0 - 120
lib/lufa/Bootloaders/HID/HostLoaderApp_Python/hid_bootloader_loader.py

@@ -1,120 +0,0 @@
-"""
-             LUFA Library
-     Copyright (C) Dean Camera, 2017.
-
-  dean [at] fourwalledcubicle [dot] com
-           www.lufa-lib.org
-"""
-
-"""
-    Front-end programmer for the LUFA HID class bootloader.
-
-    Usage:
-        python hid_bootloader_loader.py <Device> <Input>.hex
-
-    Example:
-        python hid_bootloader_loader.py at90usb1287 Mouse.hex
-
-    Requires the pywinusb (https://pypi.python.org/pypi/pywinusb/) and
-    IntelHex (https://pypi.python.org/pypi/IntelHex/) libraries.
-"""
-
-import sys
-from pywinusb import hid
-from intelhex import IntelHex
-
-
-# Device information table
-device_info_map = dict()
-device_info_map['at90usb1287'] = {'page_size': 256, 'flash_kb': 128}
-device_info_map['at90usb1286'] = {'page_size': 256, 'flash_kb': 128}
-device_info_map['at90usb647']  = {'page_size': 256, 'flash_kb': 64}
-device_info_map['at90usb646']  = {'page_size': 256, 'flash_kb': 64}
-device_info_map['atmega32u4']  = {'page_size': 128, 'flash_kb': 32}
-device_info_map['atmega32u2']  = {'page_size': 128, 'flash_kb': 32}
-device_info_map['atmega16u4']  = {'page_size': 128, 'flash_kb': 16}
-device_info_map['atmega16u2']  = {'page_size': 128, 'flash_kb': 16}
-device_info_map['at90usb162']  = {'page_size': 128, 'flash_kb': 16}
-device_info_map['atmega8u2']   = {'page_size': 128, 'flash_kb': 8}
-device_info_map['at90usb82']   = {'page_size': 128, 'flash_kb': 8}
-
-
-def get_hid_device_handle():
-    hid_device_filter = hid.HidDeviceFilter(vendor_id=0x03EB,
-                                            product_id=0x2067)
-
-    valid_hid_devices = hid_device_filter.get_devices()
-
-    if len(valid_hid_devices) is 0:
-        return None
-    else:
-        return valid_hid_devices[0]
-
-
-def send_page_data(hid_device, address, data):
-    # Bootloader page data should be the HID Report ID (always zero) followed
-    # by the starting address to program, then one device's flash page worth
-    # of data
-    output_report_data = [0]
-    output_report_data.extend([address & 0xFF, address >> 8])
-    output_report_data.extend(data)
-
-    hid_device.send_output_report(output_report_data)
-
-
-def program_device(hex_data, device_info):
-    hid_device = get_hid_device_handle()
-
-    if hid_device is None:
-        print("No valid HID device found.")
-        sys.exit(1)
-
-    try:
-        hid_device.open()
-        print("Connected to bootloader.")
-
-        # Program in all data from the loaded HEX file, in a number of device
-        # page sized chunks
-        for addr in range(0, hex_data.maxaddr(), device_info['page_size']):
-            # Compute the address range of the current page in the device
-            current_page_range = range(addr, addr+device_info['page_size'])
-
-            # Extract the data from the hex file at the specified start page
-            # address and convert it to a regular list of bytes
-            page_data = [hex_data[i] for i in current_page_range]
-
-            print("Writing address 0x%04X-0x%04X" % (current_page_range[0], current_page_range[-1]))
-
-            # Devices with more than 64KB of flash should shift down the page
-            # address so that it is 16-bit (page size is guaranteed to be
-            # >= 256 bytes so no non-zero address bits are discarded)
-            if device_info['flash_kb'] < 64:
-                send_page_data(hid_device, addr, page_data)
-            else:
-                send_page_data(hid_device, addr >> 8, page_data)
-
-        # Once programming is complete, start the application via a dummy page
-        # program to the page address 0xFFFF
-        print("Programming complete, starting application.")
-        send_page_data(hid_device, 0xFFFF, [0] * device_info['page_size'])
-
-    finally:
-        hid_device.close()
-
-
-if __name__ == '__main__':
-    # Load the specified HEX file
-    try:
-        hex_data = IntelHex(sys.argv[2])
-    except:
-        print("Could not open the specified HEX file.")
-        sys.exit(1)
-
-    # Retrieve the device information entry for the specified device
-    try:
-        device_info = device_info_map[sys.argv[1]]
-    except:
-        print("Unknown device name specified.")
-        sys.exit(1)
-
-    program_device(hex_data, device_info)

+ 0 - 123
lib/lufa/Bootloaders/HID/asf.xml

@@ -1,123 +0,0 @@
-<asf xmlversion="1.0">
-	<project caption="HID Bootloader - 128KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.hid.avr8.128_4" force-caption="true" workspace-name="lufa_hid_128kb_4kb_">
-		<require idref="lufa.bootloaders.hid"/>
-		<require idref="lufa.boards.dummy.avr8"/>
-		<generator value="as5_8"/>
-
-		<device-support value="at90usb1287"/>
-		<config name="lufa.drivers.board.name" value="none"/>
-
-		<config name="config.compiler.optimization.level" value="size"/>
-
-		<build type="define" name="F_CPU" value="16000000UL"/>
-		<build type="define" name="F_USB" value="16000000UL"/>
-
-		<build type="define" name="BOOT_START_ADDR" value="0x1F000"/>
-		<build type="linker-config" subtype="flags" value="--section-start=.text=0x1F000"/>
-	</project>
-
-	<project caption="HID Bootloader - 64KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.hid.avr8.64_4" force-caption="true" workspace-name="lufa_hid_64kb_4kb_">
-		<require idref="lufa.bootloaders.hid"/>
-		<require idref="lufa.boards.dummy.avr8"/>
-		<generator value="as5_8"/>
-
-		<device-support value="at90usb647"/>
-		<config name="lufa.drivers.board.name" value="none"/>
-
-		<config name="config.compiler.optimization.level" value="size"/>
-
-		<build type="define" name="F_CPU" value="16000000UL"/>
-		<build type="define" name="F_USB" value="16000000UL"/>
-
-		<build type="define" name="BOOT_START_ADDR" value="0xF000"/>
-		<build type="linker-config" subtype="flags" value="--section-start=.text=0xF000"/>
-	</project>
-
-	<project caption="HID Bootloader - 32KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.hid.avr8.32_4" force-caption="true" workspace-name="lufa_hid_32kb_4kb_">
-		<require idref="lufa.bootloaders.hid"/>
-		<require idref="lufa.boards.dummy.avr8"/>
-		<generator value="as5_8"/>
-
-		<device-support value="atmega32u4"/>
-		<config name="lufa.drivers.board.name" value="none"/>
-
-		<config name="config.compiler.optimization.level" value="size"/>
-
-		<build type="define" name="F_CPU" value="16000000UL"/>
-		<build type="define" name="F_USB" value="16000000UL"/>
-
-		<build type="define" name="BOOT_START_ADDR" value="0x7000"/>
-		<build type="linker-config" subtype="flags" value="--section-start=.text=0x7000"/>
-	</project>
-
-	<project caption="HID Bootloader - 16KB FLASH / 2KB Boot - AVR8 Architecture" id="lufa.bootloaders.hid.avr8.16_2" force-caption="true" workspace-name="lufa_hid_16kb_2kb_">
-		<require idref="lufa.bootloaders.hid"/>
-		<require idref="lufa.boards.dummy.avr8"/>
-		<generator value="as5_8"/>
-
-		<device-support value="atmega16u2"/>
-		<config name="lufa.drivers.board.name" value="none"/>
-
-		<config name="config.compiler.optimization.level" value="size"/>
-
-		<build type="define" name="F_CPU" value="16000000UL"/>
-		<build type="define" name="F_USB" value="16000000UL"/>
-
-		<build type="define" name="BOOT_START_ADDR" value="0x3800"/>
-		<build type="linker-config" subtype="flags" value="--section-start=.text=0x3800"/>
-	</project>
-
-	<project caption="HID Bootloader - 8KB FLASH / 2KB Boot - AVR8 Architecture" id="lufa.bootloaders.hid.avr8.8_2" force-caption="true" workspace-name="lufa_hid_8kb_2kb_">
-		<require idref="lufa.bootloaders.hid"/>
-		<require idref="lufa.boards.dummy.avr8"/>
-		<generator value="as5_8"/>
-
-		<device-support value="atmega8u2"/>
-		<config name="lufa.drivers.board.name" value="none"/>
-
-		<config name="config.compiler.optimization.level" value="size"/>
-
-		<build type="define" name="F_CPU" value="16000000UL"/>
-		<build type="define" name="F_USB" value="16000000UL"/>
-
-		<build type="define" name="BOOT_START_ADDR" value="0x1800"/>
-		<build type="linker-config" subtype="flags" value="--section-start=.text=0x1800"/>
-	</project>
-
-	<module type="application" id="lufa.bootloaders.hid" caption="HID Bootloader">
-		<info type="description" value="summary">
-		HID Class Bootloader, capable of reprogramming a device via a custom cross-platform command line utility when plugged into a host.
-		</info>
-
- 		<info type="gui-flag" value="move-to-root"/>
-
-		<info type="keyword" value="Technology">
-			<keyword value="Bootloaders"/>
-			<keyword value="USB Device"/>
-		</info>
-
-		<device-support-alias value="lufa_avr8"/>
-		<device-support-alias value="lufa_xmega"/>
-		<device-support-alias value="lufa_uc3"/>
-
-		<build type="include-path" value="."/>
-		<build type="c-source" value="BootloaderHID.c"/>
-		<build type="header-file" value="BootloaderHID.h"/>
-		<build type="c-source" value="Descriptors.c"/>
-		<build type="header-file" value="Descriptors.h"/>
-
-		<build type="module-config" subtype="path" value="Config"/>
-		<build type="header-file" value="Config/LUFAConfig.h"/>
-
-		<build type="distribute" subtype="user-file" value="doxyfile"/>
-		<build type="distribute" subtype="user-file" value="BootloaderHID.txt"/>
-		<build type="distribute" subtype="directory" value="HostLoaderApp"/>
-		<build type="distribute" subtype="directory" value="HostLoaderApp_Python"/>
-
-		<require idref="lufa.common"/>
-		<require idref="lufa.platform"/>
-		<require idref="lufa.drivers.usb"/>
-		<require idref="lufa.drivers.board"/>
-		<require idref="lufa.drivers.board.leds"/>
-	</module>
-</asf>

+ 0 - 2398
lib/lufa/Bootloaders/HID/doxyfile

@@ -1,2398 +0,0 @@
-# Doxyfile 1.8.9
-
-# 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 - HID 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 a logo or an 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 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. If 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 HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will
-# append additional text to a page's title, such as Class Reference. If set to
-# YES the compound reference will be hidden.
-# The default value is: NO.
-
-HIDE_COMPOUND_REFERENCE= 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 <section_label> ... \endif and \cond <section_label>
-# ... \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/ \
-                         HostLoaderApp/ \
-                         HostLoaderApp_Python/
-
-# 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:
-#
-# <filter> <input-file>
-#
-# where <filter> is the value of the INPUT_FILTER tag, and <input-file> 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 therefore more robust against future updates.
-# Doxygen will copy the style sheet files to the output directory.
-# Note: The order of the extra style sheet files is of importance (e.g. the last
-# style sheet 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 style sheet 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 style sheets (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
-
-# If 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 pre-rendered 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 <access key> + S
-# (what the <access key> is depends on the OS and browser, but it is typically
-# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down
-# key> to jump into the search results window, the results can be navigated
-# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel
-# the search. The filter options can be selected when the cursor is inside the
-# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys>
-# to select a filter and <Enter> or <escape> to activate or cancel the filter
-# option.
-# The default value is: YES.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-SEARCHENGINE           = NO
-
-# When the SERVER_BASED_SEARCH tag is enabled the search engine will be
-# implemented using a web server instead of a web client using Javascript. There
-# are two flavors of web server based searching depending on the EXTERNAL_SEARCH
-# setting. When disabled, doxygen will generate a PHP script for searching and
-# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing
-# and searching needs to be provided by external tools. See the section
-# "External Indexing and Searching" for details.
-# The default value is: NO.
-# This tag requires that the tag SEARCHENGINE is set to YES.
-
-SERVER_BASED_SEARCH    = NO
-
-# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP
-# script for searching. Instead the search results are written to an XML file
-# which needs to be processed by an external indexer. Doxygen will invoke an
-# external search engine pointed to by the SEARCHENGINE_URL option to obtain the
-# search results.
-#
-# Doxygen ships with an example indexer (doxyindexer) and search engine
-# (doxysearch.cgi) which are based on the open source search engine library
-# Xapian (see: http://xapian.org/).
-#
-# See the section "External Indexing and Searching" for details.
-# The default value is: NO.
-# This tag requires that the tag SEARCHENGINE is set to YES.
-
-EXTERNAL_SEARCH        = NO
-
-# The SEARCHENGINE_URL should point to a search engine hosted by a web server
-# which will return the search results when EXTERNAL_SEARCH is enabled.
-#
-# Doxygen ships with an example indexer (doxyindexer) and search engine
-# (doxysearch.cgi) which are based on the open source search engine library
-# Xapian (see: http://xapian.org/). See the section "External Indexing and
-# Searching" for details.
-# This tag requires that the tag SEARCHENGINE is set to YES.
-
-SEARCHENGINE_URL       =
-
-# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed
-# search data is written to a file for indexing by an external tool. With the
-# SEARCHDATA_FILE tag the name of this file can be specified.
-# The default file is: searchdata.xml.
-# This tag requires that the tag SEARCHENGINE is set to YES.
-
-SEARCHDATA_FILE        = searchdata.xml
-
-# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the
-# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is
-# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple
-# projects and redirect the results back to the right project.
-# This tag requires that the tag SEARCHENGINE is set to YES.
-
-EXTERNAL_SEARCH_ID     =
-
-# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen
-# projects other than the one defined by this configuration file, but that are
-# all added to the same external search index. Each project needs to have a
-# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of
-# to a relative location where the documentation can be found. The format is:
-# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ...
-# This tag requires that the tag SEARCHENGINE is set to YES.
-
-EXTRA_SEARCH_MAPPINGS  =
-
-#---------------------------------------------------------------------------
-# Configuration options related to the LaTeX output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output.
-# The default value is: YES.
-
-GENERATE_LATEX         = NO
-
-# The LATEX_OUTPUT tag is used to specify where the LaTeX 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: latex.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_OUTPUT           = latex
-
-# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
-# invoked.
-#
-# Note that when enabling USE_PDFLATEX this option is only used for generating
-# bitmaps for formulas in the HTML output, but not in the Makefile that is
-# written to the output directory.
-# The default file is: latex.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_CMD_NAME         = latex
-
-# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate
-# index for LaTeX.
-# The default file is: makeindex.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-MAKEINDEX_CMD_NAME     = makeindex
-
-# If the COMPACT_LATEX tag is set to YES, doxygen generates more compact LaTeX
-# documents. This may be useful for small projects and may help to save some
-# trees in general.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-COMPACT_LATEX          = NO
-
-# The PAPER_TYPE tag can be used to set the paper type that is used by the
-# printer.
-# Possible values are: a4 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x
-# 14 inches) and executive (7.25 x 10.5 inches).
-# The default value is: a4.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-PAPER_TYPE             = a4wide
-
-# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names
-# that should be included in the LaTeX output. To get the times font for
-# instance you can specify
-# EXTRA_PACKAGES=times
-# If left blank no extra packages will be included.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-EXTRA_PACKAGES         =
-
-# The LATEX_HEADER tag can be used to specify a personal LaTeX header for the
-# generated LaTeX document. The header should contain everything until the first
-# chapter. If it is left blank doxygen will generate a standard header. See
-# section "Doxygen usage" for information on how to let doxygen write the
-# default header to a separate file.
-#
-# Note: Only use a user-defined header if you know what you are doing! The
-# following commands have a special meaning inside the header: $title,
-# $datetime, $date, $doxygenversion, $projectname, $projectnumber,
-# $projectbrief, $projectlogo. Doxygen will replace $title with the empty
-# string, for the replacement values of the other commands the user is referred
-# to HTML_HEADER.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_HEADER           =
-
-# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the
-# generated LaTeX document. The footer should contain everything after the last
-# chapter. If it is left blank doxygen will generate a standard footer. See
-# LATEX_HEADER for more information on how to generate a default footer and what
-# special commands can be used inside the footer.
-#
-# Note: Only use a user-defined footer if you know what you are doing!
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_FOOTER           =
-
-# The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined
-# LaTeX style sheets that are included after the standard style sheets created
-# by doxygen. Using this option one can overrule certain style aspects. Doxygen
-# will copy the style sheet files to the output directory.
-# Note: The order of the extra style sheet files is of importance (e.g. the last
-# style sheet in the list overrules the setting of the previous ones in the
-# list).
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_EXTRA_STYLESHEET =
-
-# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or
-# other source files which should be copied to the LATEX_OUTPUT output
-# directory. Note that the files will be copied as-is; there are no commands or
-# markers available.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_EXTRA_FILES      =
-
-# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is
-# prepared for conversion to PDF (using ps2pdf or pdflatex). The PDF file will
-# contain links (just like the HTML output) instead of page references. This
-# makes the output suitable for online browsing using a PDF viewer.
-# The default value is: YES.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-PDF_HYPERLINKS         = YES
-
-# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate
-# the PDF file directly from the LaTeX files. Set this option to YES, to get a
-# higher quality PDF documentation.
-# The default value is: YES.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-USE_PDFLATEX           = YES
-
-# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \batchmode
-# command to the generated LaTeX files. This will instruct LaTeX to keep running
-# if errors occur, instead of asking the user for help. This option is also used
-# when generating formulas in HTML.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_BATCHMODE        = NO
-
-# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the
-# index chapters (such as File Index, Compound Index, etc.) in the output.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_HIDE_INDICES     = NO
-
-# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source
-# code with syntax highlighting in the LaTeX output.
-#
-# Note that which sources are shown also depends on other settings such as
-# SOURCE_BROWSER.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_SOURCE_CODE      = NO
-
-# The LATEX_BIB_STYLE tag can be used to specify the style to use for the
-# bibliography, e.g. plainnat, or ieeetr. See
-# http://en.wikipedia.org/wiki/BibTeX and \cite for more info.
-# The default value is: plain.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_BIB_STYLE        = plain
-
-#---------------------------------------------------------------------------
-# Configuration options related to the RTF output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_RTF tag is set to YES, doxygen will generate RTF output. The
-# RTF output is optimized for Word 97 and may not look too pretty with other RTF
-# readers/editors.
-# The default value is: NO.
-
-GENERATE_RTF           = NO
-
-# The RTF_OUTPUT tag is used to specify where the RTF 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: rtf.
-# This tag requires that the tag GENERATE_RTF is set to YES.
-
-RTF_OUTPUT             = rtf
-
-# If the COMPACT_RTF tag is set to YES, doxygen generates more compact RTF
-# documents. This may be useful for small projects and may help to save some
-# trees in general.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_RTF is set to YES.
-
-COMPACT_RTF            = NO
-
-# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated will
-# contain hyperlink fields. The RTF file will contain links (just like the HTML
-# output) instead of page references. This makes the output suitable for online
-# browsing using Word or some other Word compatible readers that support those
-# fields.
-#
-# Note: WordPad (write) and others do not support links.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_RTF is set to YES.
-
-RTF_HYPERLINKS         = NO
-
-# Load stylesheet definitions from file. Syntax is similar to doxygen's config
-# file, i.e. a series of assignments. You only have to provide replacements,
-# missing definitions are set to their default value.
-#
-# See also section "Doxygen usage" for information on how to generate the
-# default style sheet that doxygen normally uses.
-# This tag requires that the tag GENERATE_RTF is set to YES.
-
-RTF_STYLESHEET_FILE    =
-
-# Set optional variables used in the generation of an RTF document. Syntax is
-# similar to doxygen's config file. A template extensions file can be generated
-# using doxygen -e rtf extensionFile.
-# This tag requires that the tag GENERATE_RTF is set to YES.
-
-RTF_EXTENSIONS_FILE    =
-
-# If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code
-# with syntax highlighting in the RTF output.
-#
-# Note that which sources are shown also depends on other settings such as
-# SOURCE_BROWSER.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_RTF is set to YES.
-
-RTF_SOURCE_CODE        = NO
-
-#---------------------------------------------------------------------------
-# Configuration options related to the man page output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for
-# classes and files.
-# The default value is: NO.
-
-GENERATE_MAN           = NO
-
-# The MAN_OUTPUT tag is used to specify where the man pages will be put. If a
-# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
-# it. A directory man3 will be created inside the directory specified by
-# MAN_OUTPUT.
-# The default directory is: man.
-# This tag requires that the tag GENERATE_MAN is set to YES.
-
-MAN_OUTPUT             = man
-
-# The MAN_EXTENSION tag determines the extension that is added to the generated
-# man pages. In case the manual section does not start with a number, the number
-# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is
-# optional.
-# The default value is: .3.
-# This tag requires that the tag GENERATE_MAN is set to YES.
-
-MAN_EXTENSION          = .3
-
-# The MAN_SUBDIR tag determines the name of the directory created within
-# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by
-# MAN_EXTENSION with the initial . removed.
-# This tag requires that the tag GENERATE_MAN is set to YES.
-
-MAN_SUBDIR             =
-
-# If the MAN_LINKS tag is set to YES and doxygen generates man output, then it
-# will generate one additional man file for each entity documented in the real
-# man page(s). These additional files only source the real man page, but without
-# them the man command would be unable to find the correct page.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_MAN is set to YES.
-
-MAN_LINKS              = NO
-
-#---------------------------------------------------------------------------
-# Configuration options related to the XML output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_XML tag is set to YES, doxygen will generate an XML file that
-# captures the structure of the code including all documentation.
-# The default value is: NO.
-
-GENERATE_XML           = NO
-
-# The XML_OUTPUT tag is used to specify where the XML pages 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: xml.
-# This tag requires that the tag GENERATE_XML is set to YES.
-
-XML_OUTPUT             = xml
-
-# If the XML_PROGRAMLISTING tag is set to YES, doxygen will dump the program
-# listings (including syntax highlighting and cross-referencing information) to
-# the XML output. Note that enabling this will significantly increase the size
-# of the XML output.
-# The default value is: YES.
-# This tag requires that the tag GENERATE_XML is set to YES.
-
-XML_PROGRAMLISTING     = YES
-
-#---------------------------------------------------------------------------
-# Configuration options related to the DOCBOOK output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files
-# that can be used to generate PDF.
-# The default value is: NO.
-
-GENERATE_DOCBOOK       = NO
-
-# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages 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: docbook.
-# This tag requires that the tag GENERATE_DOCBOOK is set to YES.
-
-DOCBOOK_OUTPUT         = docbook
-
-# If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the
-# program listings (including syntax highlighting and cross-referencing
-# information) to the DOCBOOK output. Note that enabling this will significantly
-# increase the size of the DOCBOOK output.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_DOCBOOK is set to YES.
-
-DOCBOOK_PROGRAMLISTING = NO
-
-#---------------------------------------------------------------------------
-# Configuration options for the AutoGen Definitions output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an
-# AutoGen Definitions (see http://autogen.sf.net) file that captures the
-# structure of the code including all documentation. Note that this feature is
-# still experimental and incomplete at the moment.
-# The default value is: NO.
-
-GENERATE_AUTOGEN_DEF   = NO
-
-#---------------------------------------------------------------------------
-# Configuration options related to the Perl module output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_PERLMOD tag is set to YES, doxygen will generate a Perl module
-# file that captures the structure of the code including all documentation.
-#
-# Note that this feature is still experimental and incomplete at the moment.
-# The default value is: NO.
-
-GENERATE_PERLMOD       = NO
-
-# If the PERLMOD_LATEX tag is set to YES, doxygen will generate the necessary
-# Makefile rules, Perl scripts and LaTeX code to be able to generate PDF and DVI
-# output from the Perl module output.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_PERLMOD is set to YES.
-
-PERLMOD_LATEX          = NO
-
-# If the PERLMOD_PRETTY tag is set to YES, the Perl module output will be nicely
-# formatted so it can be parsed by a human reader. This is useful if you want to
-# understand what is going on. On the other hand, if this tag is set to NO, the
-# size of the Perl module output will be much smaller and Perl will parse it
-# just the same.
-# The default value is: YES.
-# This tag requires that the tag GENERATE_PERLMOD is set to YES.
-
-PERLMOD_PRETTY         = YES
-
-# The names of the make variables in the generated doxyrules.make file are
-# prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. This is useful
-# so different doxyrules.make files included by the same Makefile don't
-# overwrite each other's variables.
-# This tag requires that the tag GENERATE_PERLMOD is set to YES.
-
-PERLMOD_MAKEVAR_PREFIX =
-
-#---------------------------------------------------------------------------
-# Configuration options related to the preprocessor
-#---------------------------------------------------------------------------
-
-# If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all
-# C-preprocessor directives found in the sources and include files.
-# The default value is: YES.
-
-ENABLE_PREPROCESSING   = YES
-
-# If the MACRO_EXPANSION tag is set to YES, doxygen will expand all macro names
-# in the source code. If set to NO, only conditional compilation will be
-# performed. Macro expansion can be done in a controlled way by setting
-# EXPAND_ONLY_PREDEF to YES.
-# The default value is: NO.
-# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
-
-MACRO_EXPANSION        = YES
-
-# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES then
-# the macro expansion is limited to the macros specified with the PREDEFINED and
-# EXPAND_AS_DEFINED tags.
-# The default value is: NO.
-# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
-
-EXPAND_ONLY_PREDEF     = YES
-
-# If the SEARCH_INCLUDES tag is set to YES, the include files in the
-# INCLUDE_PATH will be searched if a #include is found.
-# The default value is: YES.
-# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
-
-SEARCH_INCLUDES        = YES
-
-# The INCLUDE_PATH tag can be used to specify one or more directories that
-# contain include files that are not input files but should be processed by the
-# preprocessor.
-# This tag requires that the tag SEARCH_INCLUDES is set to YES.
-
-INCLUDE_PATH           =
-
-# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
-# patterns (like *.h and *.hpp) to filter out the header-files in the
-# directories. If left blank, the patterns specified with FILE_PATTERNS will be
-# used.
-# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
-
-INCLUDE_FILE_PATTERNS  =
-
-# The PREDEFINED tag can be used to specify one or more macro names that are
-# defined before the preprocessor is started (similar to the -D option of e.g.
-# gcc). The argument of the tag is a list of macros of the form: name or
-# name=definition (no spaces). If the definition and the "=" are omitted, "=1"
-# is assumed. To prevent a macro definition from being undefined via #undef or
-# recursively expanded use the := operator instead of the = operator.
-# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
-
-PREDEFINED             = __DOXYGEN__ \
-                         PROGMEM \
-                         ATTR_NO_INIT
-
-# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this
-# tag can be used to specify a list of macro names that should be expanded. The
-# macro definition that is found in the sources will be used. Use the PREDEFINED
-# tag if you want to use a different macro definition that overrules the
-# definition found in the source code.
-# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
-
-EXPAND_AS_DEFINED      =
-
-# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will
-# remove all references to function-like macros that are alone on a line, have
-# an all uppercase name, and do not end with a semicolon. Such function macros
-# are typically used for boiler-plate code, and will confuse the parser if not
-# removed.
-# The default value is: YES.
-# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
-
-SKIP_FUNCTION_MACROS   = YES
-
-#---------------------------------------------------------------------------
-# Configuration options related to external references
-#---------------------------------------------------------------------------
-
-# The TAGFILES tag can be used to specify one or more tag files. For each tag
-# file the location of the external documentation should be added. The format of
-# a tag file without this location is as follows:
-# TAGFILES = file1 file2 ...
-# Adding location for the tag files is done as follows:
-# TAGFILES = file1=loc1 "file2 = loc2" ...
-# where loc1 and loc2 can be relative or absolute paths or URLs. See the
-# section "Linking to external documentation" for more information about the use
-# of tag files.
-# Note: Each tag file must have a unique name (where the name does NOT include
-# the path). If a tag file is not located in the directory in which doxygen is
-# run, you must also specify the path to the tagfile here.
-
-TAGFILES               =
-
-# When a file name is specified after GENERATE_TAGFILE, doxygen will create a
-# tag file that is based on the input files it reads. See section "Linking to
-# external documentation" for more information about the usage of tag files.
-
-GENERATE_TAGFILE       =
-
-# If the ALLEXTERNALS tag is set to YES, all external class will be listed in
-# the class index. If set to NO, only the inherited external classes will be
-# listed.
-# The default value is: NO.
-
-ALLEXTERNALS           = NO
-
-# If the EXTERNAL_GROUPS tag is set to YES, all external groups will be listed
-# in the modules index. If set to NO, only the current project's groups will be
-# listed.
-# The default value is: YES.
-
-EXTERNAL_GROUPS        = YES
-
-# If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in
-# the related pages index. If set to NO, only the current project's pages will
-# be listed.
-# The default value is: YES.
-
-EXTERNAL_PAGES         = YES
-
-# The PERL_PATH should be the absolute path and name of the perl script
-# interpreter (i.e. the result of 'which perl').
-# The default file (with absolute path) is: /usr/bin/perl.
-
-PERL_PATH              = /usr/bin/perl
-
-#---------------------------------------------------------------------------
-# Configuration options related to the dot tool
-#---------------------------------------------------------------------------
-
-# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram
-# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to
-# NO turns the diagrams off. Note that this option also works with HAVE_DOT
-# disabled, but it is recommended to install and use dot, since it yields more
-# powerful graphs.
-# The default value is: YES.
-
-CLASS_DIAGRAMS         = NO
-
-# You can define message sequence charts within doxygen comments using the \msc
-# command. Doxygen will then run the mscgen tool (see:
-# http://www.mcternan.me.uk/mscgen/)) to produce the chart and insert it in the
-# documentation. The MSCGEN_PATH tag allows you to specify the directory where
-# the mscgen tool resides. If left empty the tool is assumed to be found in the
-# default search path.
-
-MSCGEN_PATH            =
-
-# You can include diagrams made with dia in doxygen documentation. Doxygen will
-# then run dia to produce the diagram and insert it in the documentation. The
-# DIA_PATH tag allows you to specify the directory where the dia binary resides.
-# If left empty dia is assumed to be found in the default search path.
-
-DIA_PATH               =
-
-# If set to YES the inheritance and collaboration graphs will hide inheritance
-# and usage relations if the target is undocumented or is not a class.
-# The default value is: YES.
-
-HIDE_UNDOC_RELATIONS   = YES
-
-# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
-# available from the path. This tool is part of Graphviz (see:
-# http://www.graphviz.org/), a graph visualization toolkit from AT&T and Lucent
-# Bell Labs. The other options in this section have no effect if this option is
-# set to NO
-# The default value is: NO.
-
-HAVE_DOT               = NO
-
-# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed
-# to run in parallel. When set to 0 doxygen will base this on the number of
-# processors available in the system. You can set it explicitly to a value
-# larger than 0 to get control over the balance between CPU load and processing
-# speed.
-# Minimum value: 0, maximum value: 32, default value: 0.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_NUM_THREADS        = 0
-
-# When you want a differently looking font in the dot files that doxygen
-# generates you can specify the font name using DOT_FONTNAME. You need to make
-# sure dot is able to find the font, which can be done by putting it in a
-# standard location or by setting the DOTFONTPATH environment variable or by
-# setting DOT_FONTPATH to the directory containing the font.
-# The default value is: Helvetica.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_FONTNAME           =
-
-# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of
-# dot graphs.
-# Minimum value: 4, maximum value: 24, default value: 10.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_FONTSIZE           = 10
-
-# By default doxygen will tell dot to use the default font as specified with
-# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set
-# the path where dot can find it using this tag.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_FONTPATH           =
-
-# If the CLASS_GRAPH tag is set to YES then doxygen will generate a graph for
-# each documented class showing the direct and indirect inheritance relations.
-# Setting this tag to YES will force the CLASS_DIAGRAMS tag to NO.
-# The default value is: YES.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-CLASS_GRAPH            = NO
-
-# If the COLLABORATION_GRAPH tag is set to YES then doxygen will generate a
-# graph for each documented class showing the direct and indirect implementation
-# dependencies (inheritance, containment, and class references variables) of the
-# class with other documented classes.
-# The default value is: YES.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-COLLABORATION_GRAPH    = NO
-
-# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for
-# groups, showing the direct groups dependencies.
-# The default value is: YES.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-GROUP_GRAPHS           = NO
-
-# If the UML_LOOK tag is set to YES, doxygen will generate inheritance and
-# collaboration diagrams in a style similar to the OMG's Unified Modeling
-# Language.
-# The default value is: NO.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-UML_LOOK               = NO
-
-# If the UML_LOOK tag is enabled, the fields and methods are shown inside the
-# class node. If there are many fields or methods and many nodes the graph may
-# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the
-# number of items for each type to make the size more manageable. Set this to 0
-# for no limit. Note that the threshold may be exceeded by 50% before the limit
-# is enforced. So when you set the threshold to 10, up to 15 fields may appear,
-# but if the number exceeds 15, the total amount of fields shown is limited to
-# 10.
-# Minimum value: 0, maximum value: 100, default value: 10.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-UML_LIMIT_NUM_FIELDS   = 10
-
-# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and
-# collaboration graphs will show the relations between templates and their
-# instances.
-# The default value is: NO.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-TEMPLATE_RELATIONS     = NO
-
-# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are set to
-# YES then doxygen will generate a graph for each documented file showing the
-# direct and indirect include dependencies of the file with other documented
-# files.
-# The default value is: YES.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-INCLUDE_GRAPH          = NO
-
-# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are
-# set to YES then doxygen will generate a graph for each documented file showing
-# the direct and indirect include dependencies of the file with other documented
-# files.
-# The default value is: YES.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-INCLUDED_BY_GRAPH      = NO
-
-# If the CALL_GRAPH tag is set to YES then doxygen will generate a call
-# dependency graph for every global function or class method.
-#
-# Note that enabling this option will significantly increase the time of a run.
-# So in most cases it will be better to enable call graphs for selected
-# functions only using the \callgraph command.
-# The default value is: NO.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-CALL_GRAPH             = NO
-
-# If the CALLER_GRAPH tag is set to YES then doxygen will generate a caller
-# dependency graph for every global function or class method.
-#
-# Note that enabling this option will significantly increase the time of a run.
-# So in most cases it will be better to enable caller graphs for selected
-# functions only using the \callergraph command.
-# The default value is: NO.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-CALLER_GRAPH           = NO
-
-# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical
-# hierarchy of all classes instead of a textual one.
-# The default value is: YES.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-GRAPHICAL_HIERARCHY    = NO
-
-# If the DIRECTORY_GRAPH tag is set to YES then doxygen will show the
-# dependencies a directory has on other directories in a graphical way. The
-# dependency relations are determined by the #include relations between the
-# files in the directories.
-# The default value is: YES.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DIRECTORY_GRAPH        = NO
-
-# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
-# generated by dot.
-# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order
-# to make the SVG files visible in IE 9+ (other browsers do not have this
-# requirement).
-# Possible values are: png, jpg, gif and svg.
-# The default value is: png.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_IMAGE_FORMAT       = png
-
-# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to
-# enable generation of interactive SVG images that allow zooming and panning.
-#
-# Note that this requires a modern browser other than Internet Explorer. Tested
-# and working are Firefox, Chrome, Safari, and Opera.
-# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make
-# the SVG files visible. Older versions of IE do not have SVG support.
-# The default value is: NO.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-INTERACTIVE_SVG        = NO
-
-# The DOT_PATH tag can be used to specify the path where the dot tool can be
-# found. If left blank, it is assumed the dot tool can be found in the path.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_PATH               =
-
-# The DOTFILE_DIRS tag can be used to specify one or more directories that
-# contain dot files that are included in the documentation (see the \dotfile
-# command).
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOTFILE_DIRS           =
-
-# The MSCFILE_DIRS tag can be used to specify one or more directories that
-# contain msc files that are included in the documentation (see the \mscfile
-# command).
-
-MSCFILE_DIRS           =
-
-# The DIAFILE_DIRS tag can be used to specify one or more directories that
-# contain dia files that are included in the documentation (see the \diafile
-# command).
-
-DIAFILE_DIRS           =
-
-# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the
-# path where java can find the plantuml.jar file. If left blank, it is assumed
-# PlantUML is not used or called during a preprocessing step. Doxygen will
-# generate a warning when it encounters a \startuml command in this case and
-# will not generate output for the diagram.
-
-PLANTUML_JAR_PATH      =
-
-# When using plantuml, the specified paths are searched for files specified by
-# the !include statement in a plantuml block.
-
-PLANTUML_INCLUDE_PATH  =
-
-# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of nodes
-# that will be shown in the graph. If the number of nodes in a graph becomes
-# larger than this value, doxygen will truncate the graph, which is visualized
-# by representing a node as a red box. Note that doxygen if the number of direct
-# children of the root node in a graph is already larger than
-# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note that
-# the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.
-# Minimum value: 0, maximum value: 10000, default value: 50.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_GRAPH_MAX_NODES    = 15
-
-# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the graphs
-# generated by dot. A depth value of 3 means that only nodes reachable from the
-# root by following a path via at most 3 edges will be shown. Nodes that lay
-# further from the root node will be omitted. Note that setting this option to 1
-# or 2 may greatly reduce the computation time needed for large code bases. Also
-# note that the size of a graph can be further restricted by
-# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.
-# Minimum value: 0, maximum value: 1000, default value: 0.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-MAX_DOT_GRAPH_DEPTH    = 2
-
-# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent
-# background. This is disabled by default, because dot on Windows does not seem
-# to support this out of the box.
-#
-# Warning: Depending on the platform used, enabling this option may lead to
-# badly anti-aliased labels on the edges of a graph (i.e. they become hard to
-# read).
-# The default value is: NO.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_TRANSPARENT        = YES
-
-# Set the DOT_MULTI_TARGETS tag to YES to allow dot to generate multiple output
-# files in one run (i.e. multiple -o and -T options on the command line). This
-# makes dot run faster, but since only newer versions of dot (>1.8.10) support
-# this, this feature is disabled by default.
-# The default value is: NO.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_MULTI_TARGETS      = NO
-
-# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page
-# explaining the meaning of the various boxes and arrows in the dot generated
-# graphs.
-# The default value is: YES.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-GENERATE_LEGEND        = YES
-
-# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot
-# files that are used to generate the various graphs.
-# The default value is: YES.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_CLEANUP            = YES

+ 0 - 55
lib/lufa/Bootloaders/HID/makefile

@@ -1,55 +0,0 @@
-#
-#             LUFA Library
-#     Copyright (C) Dean Camera, 2017.
-#
-#  dean [at] fourwalledcubicle [dot] com
-#           www.lufa-lib.org
-#
-# --------------------------------------
-#         LUFA Project Makefile.
-# --------------------------------------
-
-# Run "make help" for target help.
-
-MCU          = at90usb1287
-ARCH         = AVR8
-BOARD        = USBKEY
-F_CPU        = 8000000
-F_USB        = $(F_CPU)
-OPTIMIZATION = s
-TARGET       = BootloaderHID
-SRC          = $(TARGET).c Descriptors.c $(LUFA_SRC_USB)
-LUFA_PATH    = ../../LUFA
-CC_FLAGS     = -DUSE_LUFA_CONFIG_HEADER -DBOOT_START_ADDR=$(BOOT_START_OFFSET) -IConfig/
-LD_FLAGS     = -Wl,--section-start=.text=$(BOOT_START_OFFSET)
-
-# Flash size and bootloader section sizes of the target, in KB. These must
-# match the target's total FLASH size and the bootloader size set in the
-# device's fuses.
-FLASH_SIZE_KB        := 128
-BOOT_SECTION_SIZE_KB := 8
-
-# Bootloader address calculation formulas
-# Do not modify these macros, but rather modify the dependent values above.
-CALC_ADDRESS_IN_HEX   = $(shell printf "0x%X" $$(( $(1) )) )
-BOOT_START_OFFSET     = $(call CALC_ADDRESS_IN_HEX, ($(FLASH_SIZE_KB) - $(BOOT_SECTION_SIZE_KB)) * 1024 )
-BOOT_SEC_OFFSET       = $(call CALC_ADDRESS_IN_HEX, ($(FLASH_SIZE_KB) * 1024) - ($(strip $(1))) )
-
-# Default target
-all:
-
-# Include LUFA-specific DMBS extension modules
-DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA
-include $(DMBS_LUFA_PATH)/lufa-sources.mk
-include $(DMBS_LUFA_PATH)/lufa-gcc.mk
-
-# Include common DMBS build system modules
-DMBS_PATH      ?= $(LUFA_PATH)/Build/DMBS/DMBS
-include $(DMBS_PATH)/core.mk
-include $(DMBS_PATH)/cppcheck.mk
-include $(DMBS_PATH)/doxygen.mk
-include $(DMBS_PATH)/dfu.mk
-include $(DMBS_PATH)/gcc.mk
-include $(DMBS_PATH)/hid.mk
-include $(DMBS_PATH)/avrdude.mk
-include $(DMBS_PATH)/atprogram.mk

+ 0 - 76
lib/lufa/Bootloaders/MassStorage/BootloaderAPI.c

@@ -1,76 +0,0 @@
-/*
-             LUFA Library
-     Copyright (C) Dean Camera, 2017.
-
-  dean [at] fourwalledcubicle [dot] com
-           www.lufa-lib.org
-*/
-
-/*
-  Copyright 2017  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);
-}
-

+ 0 - 63
lib/lufa/Bootloaders/MassStorage/BootloaderAPI.h

@@ -1,63 +0,0 @@
-/*
-             LUFA Library
-     Copyright (C) Dean Camera, 2017.
-
-  dean [at] fourwalledcubicle [dot] com
-           www.lufa-lib.org
-*/
-
-/*
-  Copyright 2017  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 <avr/io.h>
-		#include <avr/boot.h>
-		#include <stdbool.h>
-
-		#include <LUFA/Common/Common.h>
-
-	/* Macros: */
-		#if AUX_BOOT_SECTION_SIZE > 0
-			#define AUX_BOOT_SECTION       __attribute__((section(".boot_aux")))
-		#else
-			#define AUX_BOOT_SECTION
-		#endif
-
-	/* 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
-

+ 0 - 102
lib/lufa/Bootloaders/MassStorage/BootloaderAPITable.S

@@ -1,102 +0,0 @@
-/*
-             LUFA Library
-     Copyright (C) Dean Camera, 2017.
-
-  dean [at] fourwalledcubicle [dot] com
-           www.lufa-lib.org
-*/
-
-/*
-  Copyright 2017  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.
-*/
-
-#if AUX_BOOT_SECTION_SIZE > 0
-#warning Using a AUX bootloader section in addition to the defined bootloader space (see documentation).
-
-; Trampoline to jump over the AUX bootloader section to the start of the bootloader,
-; on devices where an AUX bootloader section is used.
-.section .boot_aux_trampoline, "ax"
-.global Boot_AUX_Trampoline
-Boot_AUX_Trampoline:
-	jmp BOOT_START_ADDR
-#endif
-
-; Trampolines to actual API implementations if the target address is outside the
-; range of a rjmp instruction (can happen with large bootloader sections)
-.section .apitable_trampolines, "ax"
-.global BootloaderAPI_Trampolines
-BootloaderAPI_Trampolines:
-
-	BootloaderAPI_ErasePage_Trampoline:
-		jmp BootloaderAPI_ErasePage
-	BootloaderAPI_WritePage_Trampoline:
-		jmp BootloaderAPI_WritePage
-	BootloaderAPI_FillWord_Trampoline:
-		jmp BootloaderAPI_FillWord
-	BootloaderAPI_ReadSignature_Trampoline:
-		jmp BootloaderAPI_ReadSignature
-	BootloaderAPI_ReadFuse_Trampoline:
-		jmp BootloaderAPI_ReadFuse
-	BootloaderAPI_ReadLock_Trampoline:
-		jmp BootloaderAPI_ReadLock
-	BootloaderAPI_WriteLock_Trampoline:
-		jmp BootloaderAPI_WriteLock
-	BootloaderAPI_UNUSED1:
-		ret
-	BootloaderAPI_UNUSED2:
-		ret
-	BootloaderAPI_UNUSED3:
-		ret
-	BootloaderAPI_UNUSED4:
-		ret
-	BootloaderAPI_UNUSED5:
-		ret
-
-
-
-; API function jump table
-.section .apitable_jumptable, "ax"
-.global BootloaderAPI_JumpTable
-BootloaderAPI_JumpTable:
-
-	rjmp BootloaderAPI_ErasePage_Trampoline
-	rjmp BootloaderAPI_WritePage_Trampoline
-	rjmp BootloaderAPI_FillWord_Trampoline
-	rjmp BootloaderAPI_ReadSignature_Trampoline
-	rjmp BootloaderAPI_ReadFuse_Trampoline
-	rjmp BootloaderAPI_ReadLock_Trampoline
-	rjmp BootloaderAPI_WriteLock_Trampoline
-	rjmp BootloaderAPI_UNUSED1 ; UNUSED ENTRY 1
-	rjmp BootloaderAPI_UNUSED2 ; UNUSED ENTRY 2
-	rjmp BootloaderAPI_UNUSED3 ; UNUSED ENTRY 3
-	rjmp BootloaderAPI_UNUSED4 ; UNUSED ENTRY 4
-	rjmp BootloaderAPI_UNUSED5 ; UNUSED ENTRY 5
-
-
-
-; Bootloader table signatures and information
-.section .apitable_signatures, "ax"
-.global BootloaderAPI_Signatures
-BootloaderAPI_Signatures:
-
-	.long BOOT_START_ADDR ; Start address of the bootloader
-	.word 0xDF30 ; Signature for the MS class bootloader, V1
-	.word 0xDCFB ; Signature for a LUFA class bootloader

+ 0 - 263
lib/lufa/Bootloaders/MassStorage/BootloaderMassStorage.c

@@ -1,263 +0,0 @@
-/*
-             LUFA Library
-     Copyright (C) Dean Camera, 2017.
-
-  dean [at] fourwalledcubicle [dot] com
-           www.lufa-lib.org
-*/
-
-/*
-  Copyright 2017  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 Mass Storage class bootloader. This file contains the complete bootloader logic.
- */
-
-#define  INCLUDE_FROM_BOOTLOADER_MASSSTORAGE_C
-#include "BootloaderMassStorage.h"
-
-/** LUFA Mass Storage Class driver interface configuration and state information. This structure is
- *  passed to all Mass Storage Class driver functions, so that multiple instances of the same class
- *  within a device can be differentiated from one another.
- */
-USB_ClassInfo_MS_Device_t Disk_MS_Interface =
-	{
-		.Config =
-			{
-				.InterfaceNumber           = INTERFACE_ID_MassStorage,
-				.DataINEndpoint            =
-					{
-						.Address           = MASS_STORAGE_IN_EPADDR,
-						.Size              = MASS_STORAGE_IO_EPSIZE,
-						.Banks             = 1,
-					},
-				.DataOUTEndpoint           =
-					{
-						.Address           = MASS_STORAGE_OUT_EPADDR,
-						.Size              = MASS_STORAGE_IO_EPSIZE,
-						.Banks             = 1,
-					},
-				.TotalLUNs                 = 1,
-			},
-	};
-
-/** Flag to indicate if the bootloader should be running, or should exit and allow the application code to run
- *  via a soft reset. When cleared, the bootloader will abort, the USB interface will shut down and the application
- *  started via a forced watchdog reset.
- */
-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;
-
-/** Indicates if the bootloader is allowed to exit immediately if \ref RunBootloader is \c false. During shutdown all
- *  pending commands must be processed before jumping to the user-application, thus this tracks the main program loop
- *  iterations since a SCSI command from the host was received.
- */
-static uint8_t TicksSinceLastCommand = 0;
-
-
-/** 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_LEONARDO)
-		/* Enable pull-up on the IO13 pin so we can use it to select the mode */
-		PORTC |= (1 << 7);
-		Delay_MS(10);
-
-		/* If IO13 is not jumpered to ground, start the user application instead */
-		JumpToApplication = ((PINC & (1 << 7)) != 0);
-
-		/* Disable pull-up after the check has completed */
-		PORTC &= ~(1 << 7);
-	#elif ((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();
-	#else
-		/* Check if the device's BOOTRST fuse is set */
-		if (boot_lock_fuse_bits_get(GET_HIGH_FUSE_BITS) & FUSE_BOOTRST)
-		{
-			/* If the reset source was not an external reset or the key is correct, clear it and jump to the application */
-			if (!(MCUSR & (1 << EXTRF)) || (MagicBootKey == MAGIC_BOOT_KEY))
-			  JumpToApplication = true;
-
-			/* Clear reset source */
-			MCUSR &= ~(1 << EXTRF);
-		}
-		else
-		{
-			/* If the reset source was the bootloader and the key is correct, clear it and jump to the application;
-			 * this can happen in the HWBE fuse is set, and the HBE pin is low during the watchdog reset */
-			if ((MCUSR & (1 << WDRF)) && (MagicBootKey == MAGIC_BOOT_KEY))
-				JumpToApplication = true;
-
-			/* Clear reset source */
-			MCUSR &= ~(1 << WDRF);
-		}
-	#endif
-
-	/* Don't run the user application if the reset vector is blank (no app loaded) */
-	bool ApplicationValid = (pgm_read_word_near(0) != 0xFFFF);
-
-	/* If a request has been made to jump to the user application, honor it */
-	if (JumpToApplication && ApplicationValid)
-	{
-		/* Turn off the watchdog */
-		MCUSR &= ~(1 << WDRF);
-		wdt_disable();
-
-		/* Clear the boot key and jump to the user application */
-		MagicBootKey = 0;
-
-		// cppcheck-suppress constStatement
-		((void (*)(void))0x0000)();
-	}
-}
-
-/** Main program entry point. This routine configures the hardware required by the application, then
- *  enters a loop to run the application tasks in sequence.
- */
-int main(void)
-{
-	SetupHardware();
-
-	LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);
-	GlobalInterruptEnable();
-
-	while (RunBootloader || TicksSinceLastCommand++ < 0xFF)
-	{
-		MS_Device_USBTask(&Disk_MS_Interface);
-		USB_USBTask();
-	}
-
-	/* 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;
-
-	/* Enable the watchdog and force a timeout to reset the AVR */
-	wdt_enable(WDTO_250MS);
-
-	for (;;);
-}
-
-/** Configures the board hardware and chip peripherals for the demo's functionality. */
-static void SetupHardware(void)
-{
-	/* Disable watchdog if enabled by bootloader/fuses */
-	MCUSR &= ~(1 << WDRF);
-	wdt_disable();
-
-	/* Disable clock division */
-	clock_prescale_set(clock_div_1);
-
-	/* Relocate the interrupt vector table to the bootloader section */
-	MCUCR = (1 << IVCE);
-	MCUCR = (1 << IVSEL);
-
-	/* Hardware Initialization */
-	LEDs_Init();
-	USB_Init();
-
-	/* Bootloader active LED toggle timer initialization */
-	TIMSK1 = (1 << TOIE1);
-	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)
-{
-	LEDs_ToggleLEDs(LEDS_LED1 | LEDS_LED2);
-}
-
-/** Event handler for the USB_Connect event. This indicates that the device is enumerating via the status LEDs. */
-void EVENT_USB_Device_Connect(void)
-{
-	/* Indicate USB enumerating */
-	LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING);
-}
-
-/** Event handler for the USB_Disconnect event. This indicates that the device is no longer connected to a host via
- *  the status LEDs and stops the Mass Storage management task.
- */
-void EVENT_USB_Device_Disconnect(void)
-{
-	/* Indicate USB not ready */
-	LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);
-}
-
-/** Event handler for the library USB Configuration Changed event. */
-void EVENT_USB_Device_ConfigurationChanged(void)
-{
-	bool ConfigSuccess = true;
-
-	/* Setup Mass Storage Data Endpoints */
-	ConfigSuccess &= MS_Device_ConfigureEndpoints(&Disk_MS_Interface);
-
-	/* Indicate endpoint configuration success or failure */
-	LEDs_SetAllLEDs(ConfigSuccess ? LEDMASK_USB_READY : LEDMASK_USB_ERROR);
-}
-
-/** Event handler for the library USB Control Request reception event. */
-void EVENT_USB_Device_ControlRequest(void)
-{
-	MS_Device_ProcessControlRequest(&Disk_MS_Interface);
-}
-
-/** Mass Storage class driver callback function the reception of SCSI commands from the host, which must be processed.
- *
- *  \param[in] MSInterfaceInfo  Pointer to the Mass Storage class interface configuration structure being referenced
- */
-bool CALLBACK_MS_Device_SCSICommandReceived(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo)
-{
-	bool CommandSuccess;
-
-	LEDs_SetAllLEDs(LEDMASK_USB_BUSY);
-	CommandSuccess = SCSI_DecodeSCSICommand(MSInterfaceInfo);
-	LEDs_SetAllLEDs(LEDMASK_USB_READY);
-
-	/* Signal that a command was processed, must not exit bootloader yet */
-	TicksSinceLastCommand = 0;
-
-	return CommandSuccess;
-}

+ 0 - 99
lib/lufa/Bootloaders/MassStorage/BootloaderMassStorage.h

@@ -1,99 +0,0 @@
-/*
-             LUFA Library
-     Copyright (C) Dean Camera, 2017.
-
-  dean [at] fourwalledcubicle [dot] com
-           www.lufa-lib.org
-*/
-
-/*
-  Copyright 2017  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 BootloaderMassStorage.c.
- */
-
-#ifndef _BOOTLOADER_MASS_STORAGE_H_
-#define _BOOTLOADER_MASS_STORAGE_H_
-
-	/* Includes: */
-		#include <avr/io.h>
-		#include <avr/wdt.h>
-		#include <avr/power.h>
-		#include <avr/interrupt.h>
-		#include <string.h>
-
-		#include "Descriptors.h"
-		#include "Config/AppConfig.h"
-
-		#include "Lib/SCSI.h"
-
-		#include <LUFA/Drivers/Board/LEDs.h>
-		#include <LUFA/Drivers/USB/USB.h>
-		#include <LUFA/Platform/Platform.h>
-
-	/* 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: */
-		/** LED mask for the library LED driver, to indicate that the USB interface is not ready. */
-		#define LEDMASK_USB_NOTREADY      LEDS_LED1
-
-		/** LED mask for the library LED driver, to indicate that the USB interface is enumerating. */
-		#define LEDMASK_USB_ENUMERATING  (LEDS_LED2 | LEDS_LED3)
-
-		/** LED mask for the library LED driver, to indicate that the USB interface is ready. */
-		#define LEDMASK_USB_READY        (LEDS_LED2 | LEDS_LED4)
-
-		/** LED mask for the library LED driver, to indicate that an error has occurred in the USB interface. */
-		#define LEDMASK_USB_ERROR        (LEDS_LED1 | LEDS_LED3)
-
-		/** LED mask for the library LED driver, to indicate that the USB interface is busy. */
-		#define LEDMASK_USB_BUSY          LEDS_LED2
-
-		/** Magic bootloader key to unlock forced application start mode. */
-		#define MAGIC_BOOT_KEY             0xDC42
-
-	/* Global Variables: */
-		extern bool RunBootloader;
-
-	/* Function Prototypes: */
-		int main(void) AUX_BOOT_SECTION;
-
-		void Application_Jump_Check(void) ATTR_INIT_SECTION(3);
-
-		void EVENT_USB_Device_Connect(void) AUX_BOOT_SECTION;
-		void EVENT_USB_Device_Disconnect(void) AUX_BOOT_SECTION;
-		void EVENT_USB_Device_ConfigurationChanged(void) AUX_BOOT_SECTION;
-		void EVENT_USB_Device_ControlRequest(void) AUX_BOOT_SECTION;
-
-		bool CALLBACK_MS_Device_SCSICommandReceived(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo) AUX_BOOT_SECTION;
-
-		#if defined(INCLUDE_FROM_BOOTLOADER_MASSSTORAGE_C)
-			static void SetupHardware(void) AUX_BOOT_SECTION;
-		#endif
-
-#endif
-

+ 0 - 240
lib/lufa/Bootloaders/MassStorage/BootloaderMassStorage.txt

@@ -1,240 +0,0 @@
-/** \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 Mass Storage 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) - <i>See \ref SSec_Aux_Space</i>
- *  \li ATMEGA32U2 - <i>See \ref SSec_Aux_Space</i>
- *
- *  \section Sec_Info USB Information:
- *
- *  The following table gives a rundown of the USB utilization of this demo.
- *
- *  <table>
- *   <tr>
- *    <td><b>USB Mode:</b></td>
- *    <td>Device</td>
- *   </tr>
- *   <tr>
- *    <td><b>USB Class:</b></td>
- *    <td>Mass Storage Device</td>
- *   </tr>
- *   <tr>
- *    <td><b>USB Subclass:</b></td>
- *    <td>Bulk-Only Transport</td>
- *   </tr>
- *   <tr>
- *    <td><b>Relevant Standards:</b></td>
- *    <td>USBIF Mass Storage Standard \n
- *        USB Bulk-Only Transport Standard \n
- *        SCSI Primary Commands Specification \n
- *        SCSI Block Commands Specification</td>
- *   </tr>
- *   <tr>
- *    <td><b>Supported USB Speeds:</b></td>
- *    <td>Full Speed Mode</td>
- *   </tr>
- *  </table>
- *
- *  \section Sec_Description Project Description:
- *
- *  This bootloader enumerates to the host as a Mass Storage device, capable of reading and writing a new binary
- *  firmware image file, 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 6KB 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 <b>THIS BOOTLOADER IS NOT SECURE.</b> Malicious entities can recover written data, even if the device
- *           lockbits are set.
- *
- *  \section Sec_Running Running the Bootloader
- *
- *  On the USB AVR8 devices, setting the \c HWBE device fuse will cause the bootloader to run if the \c HWB pin of
- *  the AVR is grounded when the device is reset.
- *
- *  The are two behaviours of this bootloader, depending on the device's fuses:
- *
- *  <b>If the device's BOOTRST fuse is set</b>, the bootloader will run any time the system is reset from
- *  the external reset pin, unless no valid user application has been loaded. To initiate the bootloader, the
- *  device's external reset pin should be grounded momentarily.
- *
- *  <b>If the device's BOOTRST fuse is not set</b>, the bootloader will run only if initiated via a software
- *  jump, or if the \c HWB pin was low during the last device reset (if the \c HWBE fuse is set).
- *
- *  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
- *
- *  This bootloader uses the Mass Storage drivers inbuilt into all modern operating systems, thus no additional
- *  drivers need to be supplied for correct operation.
- *
- *  \section Sec_HostApp Host Controller Application
- *
- *  This bootloader is compatible with all operating systems that support the FAT12 file system format. To reprogram the
- *  device, overwrite a file stored on the virtual FAT filesystem with a new binary (BIN format) image. Remember to safely
- *  remove your device from the host using the host OS's ejection APIs, to ensure all data is correctly flushed to the
- *  bootloader's virtual filesystem and not cached in the OS's file system driver.
- *
- *  The current device firmware can be read from the device by reading a file from the virtual FAT filesystem. Two files will
- *  be present:
- *    - <b>FLASH.BIN</b>, representing the AVR's internal flash memory
- *    - <b>EEPROM.BIN</b>, representing the AVR's internal EEPROM memory
- *
- *  To convert an existing Intel HEX (.HEX) program file to a binary (.BIN) file suitable for this bootloader, run:
- *    \code
- *		avr-objcopy -O binary -R .eeprom -R .fuse -R .lock -R .signature input.hex output.bin
- *    \endcode
- *  From a terminal, replacing <tt>input.hex</tt> and <tt>output.bin</tt> with the respective input and output filenames.
- *  AVR EEPROM data files in Intel HEX format (.EEP) uses a similar technique:
- *    \code
- *		avr-objcopy -O binary input.eep output.bin
- *    \endcode
- *
- *  \warning This bootloader is currently <b>incompatible with the Apple MacOS X OS Finder GUI</b>, due to the
- *           large amount of meta files this OS attempts to write to the disk along with the new binaries. On
- *           this platform, firmwares must be copied to the disk via the Terminal application only to prevent
- *           firmware corruption.
- *
- *  \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_MASS_STORAGE_SIGNATURE  0xDF30
- *
- *  #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_MASS_STORAGE_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_Aux_Space Auxiliary Bootloader Section
- *  To make the bootloader function on smaller devices (those with a physical bootloader section of smaller than 6KB) a second
- *  section of memory (called the <i>Auxiliary Bootloader Section</i>) is added before the start of the real bootloader section,
- *  and is filled with a portion of the bootloader code. This allows smaller devices to run the bootloader, at the cost of an
- *  additional portion of the device's FLASH (the bootloader section size in KB subtracted from the 6KB total size). A small
- *  trampoline is inserted at the start of the auxiliary section so that the bootloader will run normally in the case of a blank
- *  application section.
- *
- *  On devices supporting a 8KB bootloader section size, the AUX section is not created in the final binary.
- *
- *  \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 - BOOT_AUX_SECTION_SIZE
- *  | Booloader Start Trampoline |
- *  | (Not User App. Accessible) |
- *  +----------------------------+ FLASHEND - BOOT_SECTION_SIZE - BOOT_AUX_SECTION_SIZE + 4
- *  |                            |
- *  |     Auxiliary Bootloader   |
- *  |  Space for Smaller Devices |
- *  | (Not User App. Accessible) |
- *  |                            |
- *  +----------------------------+ 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 In some cases, the application is not fully loaded into the device.
- *  Write-caching on some operating systems may interfere with the normal
- *  operation of the bootloader. Write caching should be disabled when using the
- *  Mass Storage bootloader, or the file system synced via an appropriate command
- *  (such as the OS's normal disk ejection command) before disconnecting the device.
- *
- *  \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.
- *
- *  <table>
- *   <tr>
- *    <th><b>Define Name:</b></th>
- *    <th><b>Location:</b></th>
- *    <th><b>Description:</b></th>
- *   </tr>
- *   <tr>
- *    <td>NO_APP_START_ON_EJECT</td>
- *    <td>AppConfig.h</td>
- *    <td>Define to disable automatic start of the loaded application when the virtual
- *        Mass Storage disk is ejected on the host.</td>
- *   </tr>
- *  </table>
- */
-

+ 0 - 47
lib/lufa/Bootloaders/MassStorage/Config/AppConfig.h

@@ -1,47 +0,0 @@
-/*
-             LUFA Library
-     Copyright (C) Dean Camera, 2017.
-
-  dean [at] fourwalledcubicle [dot] com
-           www.lufa-lib.org
-*/
-
-/*
-  Copyright 2017  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_APP_START_ON_EJECT
-
-#endif

+ 0 - 93
lib/lufa/Bootloaders/MassStorage/Config/LUFAConfig.h

@@ -1,93 +0,0 @@
-/*
-             LUFA Library
-     Copyright (C) Dean Camera, 2017.
-
-  dean [at] fourwalledcubicle [dot] com
-           www.lufa-lib.org
-*/
-
-/*
-  Copyright 2017  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

+ 0 - 157
lib/lufa/Bootloaders/MassStorage/Descriptors.c

@@ -1,157 +0,0 @@
-/*
-             LUFA Library
-     Copyright (C) Dean Camera, 2017.
-
-  dean [at] fourwalledcubicle [dot] com
-           www.lufa-lib.org
-*/
-
-/*
-  Copyright 2017  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                  = USB_CSCP_NoDeviceClass,
-	.SubClass               = USB_CSCP_NoDeviceSubclass,
-	.Protocol               = USB_CSCP_NoDeviceProtocol,
-
-	.Endpoint0Size          = FIXED_CONTROL_ENDPOINT_SIZE,
-
-	.VendorID               = 0x03EB,
-	.ProductID              = 0x2045,
-	.ReleaseNumber          = VERSION_BCD(0,0,1),
-
-	.ManufacturerStrIndex   = NO_DESCRIPTOR,
-	.ProductStrIndex        = NO_DESCRIPTOR,
-	.SerialNumStrIndex      = NO_DESCRIPTOR,
-
-	.NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS
-};
-
-/** Configuration descriptor structure. This descriptor, located in FLASH 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        = 1,
-
-			.ConfigurationNumber    = 1,
-			.ConfigurationStrIndex  = NO_DESCRIPTOR,
-
-			.ConfigAttributes       = USB_CONFIG_ATTR_RESERVED,
-
-			.MaxPowerConsumption    = USB_CONFIG_POWER_MA(100)
-		},
-
-	.MS_Interface =
-		{
-			.Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
-
-			.InterfaceNumber        = INTERFACE_ID_MassStorage,
-			.AlternateSetting       = 0,
-
-			.TotalEndpoints         = 2,
-
-			.Class                  = MS_CSCP_MassStorageClass,
-			.SubClass               = MS_CSCP_SCSITransparentSubclass,
-			.Protocol               = MS_CSCP_BulkOnlyTransportProtocol,
-
-			.InterfaceStrIndex      = NO_DESCRIPTOR
-		},
-
-	.MS_DataInEndpoint =
-		{
-			.Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},
-
-			.EndpointAddress        = MASS_STORAGE_IN_EPADDR,
-			.Attributes             = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),
-			.EndpointSize           = MASS_STORAGE_IO_EPSIZE,
-			.PollingIntervalMS      = 0x05
-		},
-
-	.MS_DataOutEndpoint =
-		{
-			.Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},
-
-			.EndpointAddress        = MASS_STORAGE_OUT_EPADDR,
-			.Attributes             = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),
-			.EndpointSize           = MASS_STORAGE_IO_EPSIZE,
-			.PollingIntervalMS      = 0x05
-		}
-};
-
-/** This function is called by the library when in device mode, and must be overridden (see 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 uint16_t wIndex,
-                                    const void** const DescriptorAddress)
-{
-	const uint8_t DescriptorType = (wValue >> 8);
-
-	const void* Address = NULL;
-	uint16_t    Size    = NO_DESCRIPTOR;
-
-	/* If/Else If chain compiles slightly smaller than a switch case */
-	if (DescriptorType == DTYPE_Device)
-	{
-		Address = &DeviceDescriptor;
-		Size    = sizeof(USB_Descriptor_Device_t);
-	}
-	else if (DescriptorType == DTYPE_Configuration)
-	{
-		Address = &ConfigurationDescriptor;
-		Size    = sizeof(USB_Descriptor_Configuration_t);
-	}
-
-	*DescriptorAddress = Address;
-	return Size;
-}
-

+ 0 - 88
lib/lufa/Bootloaders/MassStorage/Descriptors.h

@@ -1,88 +0,0 @@
-/*
-             LUFA Library
-     Copyright (C) Dean Camera, 2017.
-
-  dean [at] fourwalledcubicle [dot] com
-           www.lufa-lib.org
-*/
-
-/*
-  Copyright 2017  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 <avr/pgmspace.h>
-
-		#include <LUFA/Drivers/USB/USB.h>
-
-		#include "BootloaderAPI.h"
-
-	/* Macros: */
-		/** Endpoint address of the Mass Storage device-to-host data IN endpoint. */
-		#define MASS_STORAGE_IN_EPADDR         (ENDPOINT_DIR_IN  | 3)
-
-		/** Endpoint address of the Mass Storage host-to-device data OUT endpoint. */
-		#define MASS_STORAGE_OUT_EPADDR        (ENDPOINT_DIR_OUT | 4)
-
-		/** Size in bytes of the Mass Storage data endpoints. */
-		#define MASS_STORAGE_IO_EPSIZE         64
-
-	/* 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;
-
-			// Mass Storage Interface
-			USB_Descriptor_Interface_t            MS_Interface;
-			USB_Descriptor_Endpoint_t             MS_DataInEndpoint;
-			USB_Descriptor_Endpoint_t             MS_DataOutEndpoint;
-		} 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_MassStorage = 0, /**< Mass storage interface descriptor ID */
-		};
-
-	/* Function Prototypes: */
-		uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
-		                                    const uint16_t wIndex,
-		                                    const void** const DescriptorAddress)
-		                                    ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3) AUX_BOOT_SECTION;
-
-#endif
-

+ 0 - 294
lib/lufa/Bootloaders/MassStorage/Lib/SCSI.c

@@ -1,294 +0,0 @@
-/*
-             LUFA Library
-     Copyright (C) Dean Camera, 2017.
-
-  dean [at] fourwalledcubicle [dot] com
-           www.lufa-lib.org
-*/
-
-/*
-  Copyright 2017  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
- *
- *  SCSI command processing routines, for SCSI commands issued by the host. Mass Storage
- *  devices use a thin "Bulk-Only Transport" protocol for issuing commands and status information,
- *  which wrap around standard SCSI device commands for controlling the actual storage medium.
- */
-
-#define  INCLUDE_FROM_SCSI_C
-#include "SCSI.h"
-
-/** Structure to hold the SCSI response data to a SCSI INQUIRY command. This gives information about the device's
- *  features and capabilities.
- */
-static const SCSI_Inquiry_Response_t InquiryData =
-	{
-		.DeviceType          = DEVICE_TYPE_BLOCK,
-		.PeripheralQualifier = 0,
-
-		.Removable           = true,
-
-		.Version             = 0,
-
-		.ResponseDataFormat  = 2,
-		.NormACA             = false,
-		.TrmTsk              = false,
-		.AERC                = false,
-
-		.AdditionalLength    = 0x1F,
-
-		.SoftReset           = false,
-		.CmdQue              = false,
-		.Linked              = false,
-		.Sync                = false,
-		.WideBus16Bit        = false,
-		.WideBus32Bit        = false,
-		.RelAddr             = false,
-
-		.VendorID            = "LUFA",
-		.ProductID           = "Bootloader",
-		.RevisionID          = {'0','.','0','0'},
-	};
-
-/** Structure to hold the sense data for the last issued SCSI command, which is returned to the host after a SCSI REQUEST SENSE
- *  command is issued. This gives information on exactly why the last command failed to complete.
- */
-static SCSI_Request_Sense_Response_t SenseData =
-	{
-		.ResponseCode        = 0x70,
-		.AdditionalLength    = 0x0A,
-	};
-
-
-/** Main routine to process the SCSI command located in the Command Block Wrapper read from the host. This dispatches
- *  to the appropriate SCSI command handling routine if the issued command is supported by the device, else it returns
- *  a command failure due to a ILLEGAL REQUEST.
- *
- *  \param[in] MSInterfaceInfo  Pointer to the Mass Storage class interface structure that the command is associated with
- *
- *  \return Boolean \c true if the command completed successfully, \c false otherwise
- */
-bool SCSI_DecodeSCSICommand(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo)
-{
-	bool CommandSuccess = false;
-
-	/* Run the appropriate SCSI command hander function based on the passed command */
-	switch (MSInterfaceInfo->State.CommandBlock.SCSICommandData[0])
-	{
-		case SCSI_CMD_INQUIRY:
-			CommandSuccess = SCSI_Command_Inquiry(MSInterfaceInfo);
-			break;
-		case SCSI_CMD_REQUEST_SENSE:
-			CommandSuccess = SCSI_Command_Request_Sense(MSInterfaceInfo);
-			break;
-		case SCSI_CMD_READ_CAPACITY_10:
-			CommandSuccess = SCSI_Command_Read_Capacity_10(MSInterfaceInfo);
-			break;
-		case SCSI_CMD_WRITE_10:
-			CommandSuccess = SCSI_Command_ReadWrite_10(MSInterfaceInfo, DATA_WRITE);
-			break;
-		case SCSI_CMD_READ_10:
-			CommandSuccess = SCSI_Command_ReadWrite_10(MSInterfaceInfo, DATA_READ);
-			break;
-		case SCSI_CMD_MODE_SENSE_6:
-			CommandSuccess = SCSI_Command_ModeSense_6(MSInterfaceInfo);
-			break;
-		case SCSI_CMD_START_STOP_UNIT:
-#if !defined(NO_APP_START_ON_EJECT)
-			/* If the user ejected the volume, signal bootloader exit at next opportunity. */
-			RunBootloader = ((MSInterfaceInfo->State.CommandBlock.SCSICommandData[4] & 0x03) != 0x02);
-#endif
-		case SCSI_CMD_SEND_DIAGNOSTIC:
-		case SCSI_CMD_TEST_UNIT_READY:
-		case SCSI_CMD_PREVENT_ALLOW_MEDIUM_REMOVAL:
-		case SCSI_CMD_VERIFY_10:
-			/* These commands should just succeed, no handling required */
-			CommandSuccess = true;
-			MSInterfaceInfo->State.CommandBlock.DataTransferLength = 0;
-			break;
-		default:
-			/* Update the SENSE key to reflect the invalid command */
-			SCSI_SET_SENSE(SCSI_SENSE_KEY_ILLEGAL_REQUEST,
-		                   SCSI_ASENSE_INVALID_COMMAND,
-		                   SCSI_ASENSEQ_NO_QUALIFIER);
-			break;
-	}
-
-	/* Check if command was successfully processed */
-	if (CommandSuccess)
-	{
-		SCSI_SET_SENSE(SCSI_SENSE_KEY_GOOD,
-		               SCSI_ASENSE_NO_ADDITIONAL_INFORMATION,
-		               SCSI_ASENSEQ_NO_QUALIFIER);
-
-		return true;
-	}
-
-	return false;
-}
-
-/** Command processing for an issued SCSI INQUIRY command. This command returns information about the device's features
- *  and capabilities to the host.
- *
- *  \param[in] MSInterfaceInfo  Pointer to the Mass Storage class interface structure that the command is associated with
- *
- *  \return Boolean \c true if the command completed successfully, \c false otherwise.
- */
-static bool SCSI_Command_Inquiry(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo)
-{
-	uint16_t AllocationLength  = SwapEndian_16(*(uint16_t*)&MSInterfaceInfo->State.CommandBlock.SCSICommandData[3]);
-	uint16_t BytesTransferred  = MIN(AllocationLength, sizeof(InquiryData));
-
-	/* Only the standard INQUIRY data is supported, check if any optional INQUIRY bits set */
-	if ((MSInterfaceInfo->State.CommandBlock.SCSICommandData[1] & ((1 << 0) | (1 << 1))) ||
-	     MSInterfaceInfo->State.CommandBlock.SCSICommandData[2])
-	{
-		/* Optional but unsupported bits set - update the SENSE key and fail the request */
-		SCSI_SET_SENSE(SCSI_SENSE_KEY_ILLEGAL_REQUEST,
-		               SCSI_ASENSE_INVALID_FIELD_IN_CDB,
-		               SCSI_ASENSEQ_NO_QUALIFIER);
-
-		return false;
-	}
-
-	Endpoint_Write_Stream_LE(&InquiryData, BytesTransferred, NULL);
-
-	/* Pad out remaining bytes with 0x00 */
-	Endpoint_Null_Stream((AllocationLength - BytesTransferred), NULL);
-
-	/* Finalize the stream transfer to send the last packet */
-	Endpoint_ClearIN();
-
-	/* Succeed the command and update the bytes transferred counter */
-	MSInterfaceInfo->State.CommandBlock.DataTransferLength -= BytesTransferred;
-
-	return true;
-}
-
-/** Command processing for an issued SCSI REQUEST SENSE command. This command returns information about the last issued command,
- *  including the error code and additional error information so that the host can determine why a command failed to complete.
- *
- *  \param[in] MSInterfaceInfo  Pointer to the Mass Storage class interface structure that the command is associated with
- *
- *  \return Boolean \c true if the command completed successfully, \c false otherwise.
- */
-static bool SCSI_Command_Request_Sense(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo)
-{
-	uint8_t AllocationLength = MSInterfaceInfo->State.CommandBlock.SCSICommandData[4];
-	uint8_t BytesTransferred = MIN(AllocationLength, sizeof(SenseData));
-
-	Endpoint_Write_Stream_LE(&SenseData, BytesTransferred, NULL);
-	Endpoint_Null_Stream((AllocationLength - BytesTransferred), NULL);
-	Endpoint_ClearIN();
-
-	/* Succeed the command and update the bytes transferred counter */
-	MSInterfaceInfo->State.CommandBlock.DataTransferLength -= BytesTransferred;
-
-	return true;
-}
-
-/** Command processing for an issued SCSI READ CAPACITY (10) command. This command returns information about the device's capacity
- *  on the selected Logical Unit (drive), as a number of OS-sized blocks.
- *
- *  \param[in] MSInterfaceInfo  Pointer to the Mass Storage class interface structure that the command is associated with
- *
- *  \return Boolean \c true if the command completed successfully, \c false otherwise.
- */
-static bool SCSI_Command_Read_Capacity_10(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo)
-{
-	Endpoint_Write_32_BE(LUN_MEDIA_BLOCKS - 1);
-	Endpoint_Write_32_BE(SECTOR_SIZE_BYTES);
-	Endpoint_ClearIN();
-
-	/* Succeed the command and update the bytes transferred counter */
-	MSInterfaceInfo->State.CommandBlock.DataTransferLength -= 8;
-
-	return true;
-}
-
-/** Command processing for an issued SCSI READ (10) or WRITE (10) command. This command reads in the block start address
- *  and total number of blocks to process, then calls the appropriate low-level Dataflash routine to handle the actual
- *  reading and writing of the data.
- *
- *  \param[in] MSInterfaceInfo  Pointer to the Mass Storage class interface structure that the command is associated with
- *  \param[in] IsDataRead  Indicates if the command is a READ (10) command or WRITE (10) command (DATA_READ or DATA_WRITE)
- *
- *  \return Boolean \c true if the command completed successfully, \c false otherwise.
- */
-static bool SCSI_Command_ReadWrite_10(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo,
-                                      const bool IsDataRead)
-{
-	uint16_t BlockAddress;
-	uint16_t TotalBlocks;
-
-	/* Load in the 32-bit block address (SCSI uses big-endian, so have to reverse the byte order) */
-	BlockAddress = SwapEndian_32(*(uint32_t*)&MSInterfaceInfo->State.CommandBlock.SCSICommandData[2]);
-
-	/* Load in the 16-bit total blocks (SCSI uses big-endian, so have to reverse the byte order) */
-	TotalBlocks  = SwapEndian_16(*(uint16_t*)&MSInterfaceInfo->State.CommandBlock.SCSICommandData[7]);
-
-	/* Check if the block address is outside the maximum allowable value for the LUN */
-	if (BlockAddress >= LUN_MEDIA_BLOCKS)
-	{
-		/* Block address is invalid, update SENSE key and return command fail */
-		SCSI_SET_SENSE(SCSI_SENSE_KEY_ILLEGAL_REQUEST,
-		               SCSI_ASENSE_LOGICAL_BLOCK_ADDRESS_OUT_OF_RANGE,
-		               SCSI_ASENSEQ_NO_QUALIFIER);
-
-		return false;
-	}
-
-	/* Determine if the packet is a READ (10) or WRITE (10) command, call appropriate function */
-	for (uint16_t i = 0; i < TotalBlocks; i++)
-	{
-		if (IsDataRead == DATA_READ)
-		  VirtualFAT_ReadBlock(BlockAddress + i);
-		else
-		  VirtualFAT_WriteBlock(BlockAddress + i);
-	}
-
-	/* Update the bytes transferred counter and succeed the command */
-	MSInterfaceInfo->State.CommandBlock.DataTransferLength -= ((uint32_t)TotalBlocks * SECTOR_SIZE_BYTES);
-
-	return true;
-}
-
-/** Command processing for an issued SCSI MODE SENSE (6) command. This command returns various informational pages about
- *  the SCSI device, as well as the device's Write Protect status.
- *
- *  \param[in] MSInterfaceInfo  Pointer to the Mass Storage class interface structure that the command is associated with
- *
- *  \return Boolean \c true if the command completed successfully, \c false otherwise.
- */
-static bool SCSI_Command_ModeSense_6(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo)
-{
-	/* Send an empty header response indicating Write Protect flag is off */
-	Endpoint_Write_32_LE(0);
-	Endpoint_ClearIN();
-
-	/* Update the bytes transferred counter and succeed the command */
-	MSInterfaceInfo->State.CommandBlock.DataTransferLength -= 4;
-
-	return true;
-}
-

+ 0 - 84
lib/lufa/Bootloaders/MassStorage/Lib/SCSI.h

@@ -1,84 +0,0 @@
-/*
-             LUFA Library
-     Copyright (C) Dean Camera, 2017.
-
-  dean [at] fourwalledcubicle [dot] com
-           www.lufa-lib.org
-*/
-
-/*
-  Copyright 2017  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 SCSI.c.
- */
-
-#ifndef _SCSI_H_
-#define _SCSI_H_
-
-	/* Includes: */
-		#include <avr/io.h>
-		#include <avr/pgmspace.h>
-
-		#include <LUFA/Drivers/USB/USB.h>
-
-		#include "../BootloaderMassStorage.h"
-		#include "../Descriptors.h"
-		#include "VirtualFAT.h"
-
-	/* Macros: */
-		/** Macro to set the current SCSI sense data to the given key, additional sense code and additional sense qualifier. This
-		 *  is for convenience, as it allows for all three sense values (returned upon request to the host to give information about
-		 *  the last command failure) in a quick and easy manner.
-		 *
-		 *  \param[in] Key    New SCSI sense key to set the sense code to
-		 *  \param[in] Acode  New SCSI additional sense key to set the additional sense code to
-		 *  \param[in] Aqual  New SCSI additional sense key qualifier to set the additional sense qualifier code to
-		 */
-		#define SCSI_SET_SENSE(Key, Acode, Aqual)  do { SenseData.SenseKey                 = (Key);   \
-		                                                SenseData.AdditionalSenseCode      = (Acode); \
-		                                                SenseData.AdditionalSenseQualifier = (Aqual); } while (0)
-
-		/** Macro for the \ref SCSI_Command_ReadWrite_10() function, to indicate that data is to be read from the storage medium. */
-		#define DATA_READ           true
-
-		/** Macro for the \ref SCSI_Command_ReadWrite_10() function, to indicate that data is to be written to the storage medium. */
-		#define DATA_WRITE          false
-
-		/** Value for the DeviceType entry in the SCSI_Inquiry_Response_t enum, indicating a Block Media device. */
-		#define DEVICE_TYPE_BLOCK   0x00
-
-	/* Function Prototypes: */
-		bool SCSI_DecodeSCSICommand(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo) AUX_BOOT_SECTION;
-
-		#if defined(INCLUDE_FROM_SCSI_C)
-			static bool SCSI_Command_Inquiry(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo) AUX_BOOT_SECTION;
-			static bool SCSI_Command_Request_Sense(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo) AUX_BOOT_SECTION;
-			static bool SCSI_Command_Read_Capacity_10(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo) AUX_BOOT_SECTION;
-			static bool SCSI_Command_ReadWrite_10(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo,
-			                                      const bool IsDataRead) AUX_BOOT_SECTION;
-			static bool SCSI_Command_ModeSense_6(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo) AUX_BOOT_SECTION;
-		#endif
-
-#endif
-

+ 0 - 482
lib/lufa/Bootloaders/MassStorage/Lib/VirtualFAT.c

@@ -1,482 +0,0 @@
-/*
-             LUFA Library
-     Copyright (C) Dean Camera, 2017.
-
-  dean [at] fourwalledcubicle [dot] com
-           www.lufa-lib.org
-*/
-
-/*
-  Copyright 2017  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
- *
- *  Virtualized FAT12 filesystem implementation, to perform self-programming
- *  in response to read and write requests to the virtual filesystem by the
- *  host PC.
- */
-
-#define  INCLUDE_FROM_VIRTUAL_FAT_C
-#include "VirtualFAT.h"
-
-/** FAT filesystem boot sector block, must be the first sector on the physical
- *  disk so that the host can identify the presence of a FAT filesystem. This
- *  block is truncated; normally a large bootstrap section is located near the
- *  end of the block for booting purposes however as this is not meant to be a
- *  bootable disk it is omitted for space reasons.
- *
- *  \note When returning the boot block to the host, the magic signature 0xAA55
- *        must be added to the very end of the block to identify it as a boot
- *        block.
- */
-static const FATBootBlock_t BootBlock =
-	{
-		.Bootstrap               = {0xEB, 0x3C, 0x90},
-		.Description             = "mkdosfs",
-		.SectorSize              = SECTOR_SIZE_BYTES,
-		.SectorsPerCluster       = SECTOR_PER_CLUSTER,
-		.ReservedSectors         = 1,
-		.FATCopies               = 2,
-		.RootDirectoryEntries    = (SECTOR_SIZE_BYTES / sizeof(FATDirectoryEntry_t)),
-		.TotalSectors16          = LUN_MEDIA_BLOCKS,
-		.MediaDescriptor         = 0xF8,
-		.SectorsPerFAT           = 1,
-		.SectorsPerTrack         = (LUN_MEDIA_BLOCKS % 64),
-		.Heads                   = (LUN_MEDIA_BLOCKS / 64),
-		.HiddenSectors           = 0,
-		.TotalSectors32          = 0,
-		.PhysicalDriveNum        = 0,
-		.ExtendedBootRecordSig   = 0x29,
-		.VolumeSerialNumber      = 0x12345678,
-		.VolumeLabel             = "LUFA BOOT  ",
-		.FilesystemIdentifier    = "FAT12   ",
-	};
-
-/** FAT 8.3 style directory entry, for the virtual FLASH contents file. */
-static FATDirectoryEntry_t FirmwareFileEntries[] =
-	{
-		/* Root volume label entry; disk label is contained in the Filename and
-		 * Extension fields (concatenated) with a special attribute flag - other
-		 * fields are ignored. Should be the same as the label in the boot block.
-		 */
-		[DISK_FILE_ENTRY_VolumeID] =
-		{
-			.MSDOS_Directory =
-				{
-					.Name            = "LUFA BOOT  ",
-					.Attributes      = FAT_FLAG_VOLUME_NAME,
-					.Reserved        = {0},
-					.CreationTime    = 0,
-					.CreationDate    = 0,
-					.StartingCluster = 0,
-					.Reserved2       = 0,
-				}
-		},
-
-		/* VFAT Long File Name entry for the virtual firmware file; required to
-		 * prevent corruption from systems that are unable to detect the device
-		 * as being a legacy MSDOS style FAT12 volume. */
-		[DISK_FILE_ENTRY_FLASH_LFN] =
-		{
-			.VFAT_LongFileName =
-				{
-					.Ordinal         = 1 | FAT_ORDINAL_LAST_ENTRY,
-					.Attribute       = FAT_FLAG_LONG_FILE_NAME,
-					.Reserved1       = 0,
-					.Reserved2       = 0,
-
-					.Checksum        = FAT_CHECKSUM('F','L','A','S','H',' ',' ',' ','B','I','N'),
-
-					.Unicode1        = 'F',
-					.Unicode2        = 'L',
-					.Unicode3        = 'A',
-					.Unicode4        = 'S',
-					.Unicode5        = 'H',
-					.Unicode6        = '.',
-					.Unicode7        = 'B',
-					.Unicode8        = 'I',
-					.Unicode9        = 'N',
-					.Unicode10       = 0,
-					.Unicode11       = 0,
-					.Unicode12       = 0,
-					.Unicode13       = 0,
-				}
-		},
-
-		/* MSDOS file entry for the virtual Firmware image. */
-		[DISK_FILE_ENTRY_FLASH_MSDOS] =
-		{
-			.MSDOS_File =
-				{
-					.Filename        = "FLASH   ",
-					.Extension       = "BIN",
-					.Attributes      = 0,
-					.Reserved        = {0},
-					.CreationTime    = FAT_TIME(1, 1, 0),
-					.CreationDate    = FAT_DATE(14, 2, 1989),
-					.StartingCluster = 2,
-					.FileSizeBytes   = FLASH_FILE_SIZE_BYTES,
-				}
-		},
-
-		[DISK_FILE_ENTRY_EEPROM_LFN] =
-		{
-			.VFAT_LongFileName =
-				{
-					.Ordinal         = 1 | FAT_ORDINAL_LAST_ENTRY,
-					.Attribute       = FAT_FLAG_LONG_FILE_NAME,
-					.Reserved1       = 0,
-					.Reserved2       = 0,
-
-					.Checksum        = FAT_CHECKSUM('E','E','P','R','O','M',' ',' ','B','I','N'),
-
-					.Unicode1        = 'E',
-					.Unicode2        = 'E',
-					.Unicode3        = 'P',
-					.Unicode4        = 'R',
-					.Unicode5        = 'O',
-					.Unicode6        = 'M',
-					.Unicode7        = '.',
-					.Unicode8        = 'B',
-					.Unicode9        = 'I',
-					.Unicode10       = 'N',
-					.Unicode11       = 0,
-					.Unicode12       = 0,
-					.Unicode13       = 0,
-				}
-		},
-
-		[DISK_FILE_ENTRY_EEPROM_MSDOS] =
-		{
-			.MSDOS_File =
-				{
-					.Filename        = "EEPROM  ",
-					.Extension       = "BIN",
-					.Attributes      = 0,
-					.Reserved        = {0},
-					.CreationTime    = FAT_TIME(1, 1, 0),
-					.CreationDate    = FAT_DATE(14, 2, 1989),
-					.StartingCluster = 2 + FILE_CLUSTERS(FLASH_FILE_SIZE_BYTES),
-					.FileSizeBytes   = EEPROM_FILE_SIZE_BYTES,
-				}
-		},
-	};
-
-/** Starting cluster of the virtual FLASH.BIN file on disk, tracked so that the
- *  offset from the start of the data sector can be determined. On Windows
- *  systems files are usually replaced using the original file's disk clusters,
- *  while Linux appears to overwrite with an offset which must be compensated for.
- */
-static const uint16_t* FLASHFileStartCluster  = &FirmwareFileEntries[DISK_FILE_ENTRY_FLASH_MSDOS].MSDOS_File.StartingCluster;
-
-/** Starting cluster of the virtual EEPROM.BIN file on disk, tracked so that the
- *  offset from the start of the data sector can be determined. On Windows
- *  systems files are usually replaced using the original file's disk clusters,
- *  while Linux appears to overwrite with an offset which must be compensated for.
- */
-static const uint16_t* EEPROMFileStartCluster = &FirmwareFileEntries[DISK_FILE_ENTRY_EEPROM_MSDOS].MSDOS_File.StartingCluster;
-
-/** Reads a byte of EEPROM out from the EEPROM memory space.
- *
- *  \note This function is required as the avr-libc EEPROM functions do not cope
- *        with linker relaxations, and a jump longer than 4K of FLASH on the
- *        larger USB AVRs will break the linker. This function is marked as
- *        never inlinable and placed into the normal text segment so that the
- *        call to the EEPROM function will be short even if the AUX boot section
- *        is used.
- *
- *  \param[in]  Address   Address of the EEPROM location to read from
- *
- *  \return Read byte of EEPROM data.
- */
-static uint8_t ReadEEPROMByte(const uint8_t* const Address)
-{
-	return eeprom_read_byte(Address);
-}
-
-/** Writes a byte of EEPROM out to the EEPROM memory space.
- *
- *  \note This function is required as the avr-libc EEPROM functions do not cope
- *        with linker relaxations, and a jump longer than 4K of FLASH on the
- *        larger USB AVRs will break the linker. This function is marked as
- *        never inlinable and placed into the normal text segment so that the
- *        call to the EEPROM function will be short even if the AUX boot section
- *        is used.
- *
- *  \param[in]  Address   Address of the EEPROM location to write to
- *  \param[in]  Data      New data to write to the EEPROM location
- */
-static void WriteEEPROMByte(uint8_t* const Address,
-                            const uint8_t Data)
-{
-	 eeprom_update_byte(Address, Data);
-}
-
-/** Updates a FAT12 cluster entry in the FAT file table with the specified next
- *  chain index. If the cluster is the last in the file chain, the magic value
- *  \c 0xFFF should be used.
- *
- *  \note FAT data cluster indexes are offset by 2, so that cluster 2 is the
- *        first file data cluster on the disk. See the FAT specification.
- *
- *  \param[out]  FATTable    Pointer to the FAT12 allocation table
- *  \param[in]   Index       Index of the cluster entry to update
- *  \param[in]   ChainEntry  Next cluster index in the file chain
- */
-static void UpdateFAT12ClusterEntry(uint8_t* const FATTable,
-                                    const uint16_t Index,
-                                    const uint16_t ChainEntry)
-{
-	/* Calculate the starting offset of the cluster entry in the FAT12 table */
-	uint8_t FATOffset   = (Index + (Index >> 1));
-	bool    UpperNibble = ((Index & 1) != 0);
-
-	/* Check if the start of the entry is at an upper nibble of the byte, fill
-	 * out FAT12 entry as required */
-	if (UpperNibble)
-	{
-		FATTable[FATOffset]     = (FATTable[FATOffset] & 0x0F) | ((ChainEntry & 0x0F) << 4);
-		FATTable[FATOffset + 1] = (ChainEntry >> 4);
-	}
-	else
-	{
-		FATTable[FATOffset]     = ChainEntry;
-		FATTable[FATOffset + 1] = (FATTable[FATOffset] & 0xF0) | (ChainEntry >> 8);
-	}
-}
-
-/** Updates a FAT12 cluster chain in the FAT file table with a linear chain of
- *  the specified length.
- *
- *  \note FAT data cluster indexes are offset by 2, so that cluster 2 is the
- *        first file data cluster on the disk. See the FAT specification.
- *
- *  \param[out]  FATTable     Pointer to the FAT12 allocation table
- *  \param[in]   Index        Index of the start of the cluster chain to update
- *  \param[in]   ChainLength  Length of the chain to write, in clusters
- */
-static void UpdateFAT12ClusterChain(uint8_t* const FATTable,
-                                    const uint16_t Index,
-                                    const uint8_t ChainLength)
-{
-	for (uint8_t i = 0; i < ChainLength; i++)
-	{
-		uint16_t CurrentCluster = Index + i;
-		uint16_t NextCluster    = CurrentCluster + 1;
-
-		/* Mark last cluster as end of file */
-		if (i == (ChainLength - 1))
-		  NextCluster = 0xFFF;
-
-		UpdateFAT12ClusterEntry(FATTable, CurrentCluster, NextCluster);
-	}
-}
-
-/** Reads or writes a block of data from/to the physical device FLASH using a
- *  block buffer stored in RAM, if the requested block is within the virtual
- *  firmware file's sector ranges in the emulated FAT file system.
- *
- *  \param[in]      BlockNumber  Physical disk block to read from/write to
- *  \param[in,out]  BlockBuffer  Pointer to the start of the block buffer in RAM
- *  \param[in]      Read         If \c true, the requested block is read, if
- *                               \c false, the requested block is written
- */
-static void ReadWriteFLASHFileBlock(const uint16_t BlockNumber,
-                                    uint8_t* BlockBuffer,
-                                    const bool Read)
-{
-	uint16_t FileStartBlock = DISK_BLOCK_DataStartBlock + (*FLASHFileStartCluster - 2) * SECTOR_PER_CLUSTER;
-	uint16_t FileEndBlock   = FileStartBlock + (FILE_SECTORS(FLASH_FILE_SIZE_BYTES) - 1);
-
-	/* Range check the write request - abort if requested block is not within the
-	 * virtual firmware file sector range */
-	if (!((BlockNumber >= FileStartBlock) && (BlockNumber <= FileEndBlock)))
-	  return;
-
-	#if (FLASHEND > 0xFFFF)
-	uint32_t FlashAddress = (uint32_t)(BlockNumber - FileStartBlock) * SECTOR_SIZE_BYTES;
-	#else
-	uint16_t FlashAddress = (uint16_t)(BlockNumber - FileStartBlock) * SECTOR_SIZE_BYTES;
-	#endif
-
-	if (Read)
-	{
-		/* Read out the mapped block of data from the device's FLASH */
-		for (uint16_t i = 0; i < SECTOR_SIZE_BYTES; i++)
-		{
-			#if (FLASHEND > 0xFFFF)
-			  BlockBuffer[i] = pgm_read_byte_far(FlashAddress++);
-			#else
-			  BlockBuffer[i] = pgm_read_byte(FlashAddress++);
-			#endif
-		}
-	}
-	else
-	{
-		/* Write out the mapped block of data to the device's FLASH */
-		for (uint16_t i = 0; i < SECTOR_SIZE_BYTES; i += 2)
-		{
-			if ((FlashAddress % SPM_PAGESIZE) == 0)
-			{
-				/* Erase the given FLASH page, ready to be programmed */
-				BootloaderAPI_ErasePage(FlashAddress);
-			}
-
-			/* Write the next data word to the FLASH page */
-			BootloaderAPI_FillWord(FlashAddress, (BlockBuffer[i + 1] << 8) | BlockBuffer[i]);
-			FlashAddress += 2;
-
-			if ((FlashAddress % SPM_PAGESIZE) == 0)
-			{
-				/* Write the filled FLASH page to memory */
-				BootloaderAPI_WritePage(FlashAddress - SPM_PAGESIZE);
-			}
-		}
-	}
-}
-
-/** Reads or writes a block of data from/to the physical device EEPROM using a
- *  block buffer stored in RAM, if the requested block is within the virtual
- *  firmware file's sector ranges in the emulated FAT file system.
- *
- *  \param[in]      BlockNumber  Physical disk block to read from/write to
- *  \param[in,out]  BlockBuffer  Pointer to the start of the block buffer in RAM
- *  \param[in]      Read         If \c true, the requested block is read, if
- *                               \c false, the requested block is written
- */
-static void ReadWriteEEPROMFileBlock(const uint16_t BlockNumber,
-                                     uint8_t* BlockBuffer,
-                                     const bool Read)
-{
-	uint16_t FileStartBlock = DISK_BLOCK_DataStartBlock + (*EEPROMFileStartCluster - 2) * SECTOR_PER_CLUSTER;
-	uint16_t FileEndBlock   = FileStartBlock + (FILE_SECTORS(EEPROM_FILE_SIZE_BYTES) - 1);
-
-	/* Range check the write request - abort if requested block is not within the
-	 * virtual firmware file sector range */
-	if (!((BlockNumber >= FileStartBlock) && (BlockNumber <= FileEndBlock)))
-	  return;
-
-	uint16_t EEPROMAddress = (uint16_t)(BlockNumber - FileStartBlock) * SECTOR_SIZE_BYTES;
-
-	if (Read)
-	{
-		/* Read out the mapped block of data from the device's EEPROM */
-		for (uint16_t i = 0; i < SECTOR_SIZE_BYTES; i++)
-		  BlockBuffer[i] = ReadEEPROMByte((uint8_t*)EEPROMAddress++);
-	}
-	else
-	{
-		/* Write out the mapped block of data to the device's EEPROM */
-		for (uint16_t i = 0; i < SECTOR_SIZE_BYTES; i++)
-		  WriteEEPROMByte((uint8_t*)EEPROMAddress++, BlockBuffer[i]);
-	}
-}
-
-/** Writes a block of data to the virtual FAT filesystem, from the USB Mass
- *  Storage interface.
- *
- *  \param[in]  BlockNumber  Index of the block to write.
- */
-void VirtualFAT_WriteBlock(const uint16_t BlockNumber)
-{
-	uint8_t BlockBuffer[SECTOR_SIZE_BYTES];
-
-	/* Buffer the entire block to be written from the host */
-	Endpoint_Read_Stream_LE(BlockBuffer, sizeof(BlockBuffer), NULL);
-	Endpoint_ClearOUT();
-
-	switch (BlockNumber)
-	{
-		case DISK_BLOCK_BootBlock:
-		case DISK_BLOCK_FATBlock1:
-		case DISK_BLOCK_FATBlock2:
-			/* Ignore writes to the boot and FAT blocks */
-
-			break;
-
-		case DISK_BLOCK_RootFilesBlock:
-			/* Copy over the updated directory entries */
-			memcpy(FirmwareFileEntries, BlockBuffer, sizeof(FirmwareFileEntries));
-
-			break;
-
-		default:
-			ReadWriteFLASHFileBlock(BlockNumber, BlockBuffer, false);
-			ReadWriteEEPROMFileBlock(BlockNumber, BlockBuffer, false);
-
-			break;
-	}
-}
-
-/** Reads a block of data from the virtual FAT filesystem, and sends it to the
- *  host via the USB Mass Storage interface.
- *
- *  \param[in]  BlockNumber  Index of the block to read.
- */
-void VirtualFAT_ReadBlock(const uint16_t BlockNumber)
-{
-	uint8_t BlockBuffer[SECTOR_SIZE_BYTES];
-	memset(BlockBuffer, 0x00, sizeof(BlockBuffer));
-
-	switch (BlockNumber)
-	{
-		case DISK_BLOCK_BootBlock:
-			memcpy(BlockBuffer, &BootBlock, sizeof(FATBootBlock_t));
-
-			/* Add the magic signature to the end of the block */
-			BlockBuffer[SECTOR_SIZE_BYTES - 2] = 0x55;
-			BlockBuffer[SECTOR_SIZE_BYTES - 1] = 0xAA;
-
-			break;
-
-		case DISK_BLOCK_FATBlock1:
-		case DISK_BLOCK_FATBlock2:
-			/* Cluster 0: Media type/Reserved */
-			UpdateFAT12ClusterEntry(BlockBuffer, 0, 0xF00 | BootBlock.MediaDescriptor);
-
-			/* Cluster 1: Reserved */
-			UpdateFAT12ClusterEntry(BlockBuffer, 1, 0xFFF);
-
-			/* Cluster 2 onwards: Cluster chain of FLASH.BIN */
-			UpdateFAT12ClusterChain(BlockBuffer, *FLASHFileStartCluster, FILE_CLUSTERS(FLASH_FILE_SIZE_BYTES));
-
-			/* Cluster 2+n onwards: Cluster chain of EEPROM.BIN */
-			UpdateFAT12ClusterChain(BlockBuffer, *EEPROMFileStartCluster, FILE_CLUSTERS(EEPROM_FILE_SIZE_BYTES));
-
-			break;
-
-		case DISK_BLOCK_RootFilesBlock:
-			memcpy(BlockBuffer, FirmwareFileEntries, sizeof(FirmwareFileEntries));
-
-			break;
-
-		default:
-			ReadWriteFLASHFileBlock(BlockNumber, BlockBuffer, true);
-			ReadWriteEEPROMFileBlock(BlockNumber, BlockBuffer, true);
-
-			break;
-	}
-
-	/* Write the entire read block Buffer to the host */
-	Endpoint_Write_Stream_LE(BlockBuffer, sizeof(BlockBuffer), NULL);
-	Endpoint_ClearIN();
-}

+ 0 - 302
lib/lufa/Bootloaders/MassStorage/Lib/VirtualFAT.h

@@ -1,302 +0,0 @@
-/*
-             LUFA Library
-     Copyright (C) Dean Camera, 2017.
-
-  dean [at] fourwalledcubicle [dot] com
-           www.lufa-lib.org
-*/
-
-/*
-  Copyright 2017  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.
-*/
-
-#ifndef _VIRTUALFAT_H_
-#define _VIRTUALFAT_H_
-
-	/* Includes: */
-		#include <avr/io.h>
-		#include <avr/pgmspace.h>
-
-		#include <LUFA/Drivers/USB/USB.h>
-
-		#include "../BootloaderAPI.h"
-
-	/* Macros: */
-		/** Size of the virtual FLASH.BIN file in bytes. */
-		#define FLASH_FILE_SIZE_BYTES     (FLASHEND - (FLASHEND - BOOT_START_ADDR) - AUX_BOOT_SECTION_SIZE)
-
-		/** Size of the virtual EEPROM.BIN file in bytes. */
-		#define EEPROM_FILE_SIZE_BYTES    E2END
-
-		/** Number of sectors that comprise a single logical disk cluster. */
-		#define SECTOR_PER_CLUSTER        4
-
-		/** Size of a single logical sector on the disk. */
-		#define SECTOR_SIZE_BYTES         512
-
-		/** Size of a logical cluster on the disk, in bytes */
-		#define CLUSTER_SIZE_BYTES        (SECTOR_PER_CLUSTER * SECTOR_SIZE_BYTES)
-
-		/** Number of sectors required to store a given size in bytes.
-		 *
-		 *  \param[in] size  Size of the data that needs to be stored
-		 *
-		 *  \return Number of sectors required to store the given data on the disk.
-		 */
-		#define FILE_SECTORS(size)        ((size / SECTOR_SIZE_BYTES)  + ((size % SECTOR_SIZE_BYTES)  ? 1 : 0))
-
-		/** Number of clusters required to store a given size in bytes.
-		 *
-		 *  \param[in] size  Size of the data that needs to be stored
-		 *
-		 *  \return Number of clusters required to store the given data on the disk.
-		 */
-		#define FILE_CLUSTERS(size)       ((size / CLUSTER_SIZE_BYTES) + ((size % CLUSTER_SIZE_BYTES) ? 1 : 0))
-
-		/** Total number of logical sectors/blocks on the disk. */
-		#define LUN_MEDIA_BLOCKS          (FILE_SECTORS(FLASH_FILE_SIZE_BYTES) + FILE_SECTORS(EEPROM_FILE_SIZE_BYTES) + 32)
-
-		/** Converts a given time in HH:MM:SS format to a FAT filesystem time.
-		 *
-		 *  \note The minimum seconds resolution of FAT is 2, thus odd seconds
-		 *        will be truncated to the previous integer multiple of 2 seconds.
-		 *
-		 *  \param[in] hh  Hours (0-23)
-		 *  \param[in] mm  Minutes (0-59)
-		 *  \param[in] ss  Seconds (0-59)
-		 *
-		 *  \return Given time encoded as a FAT filesystem timestamp
-		 */
-		#define FAT_TIME(hh, mm, ss)      ((hh << 11) | (mm << 5) | (ss >> 1))
-
-		/** Converts a given date in DD/MM/YYYY format to a FAT filesystem date.
-		 *
-		 *  \param[in] dd    Days in the month (1-31)
-		 *  \param[in] mm    Months in the year (1-12)
-		 *  \param[in] yyyy  Year (1980 - 2107)
-		 *
-		 *  \return Given date encoded as a FAT filesystem datestamp
-		 */
-		#define FAT_DATE(dd, mm, yyyy)    (((yyyy - 1980) << 9) | (mm << 5) | (dd << 0))
-
-		/** Bit-rotates a given 8-bit value once to the right.
-		 *
-		 *  \param[in] x  Value to rotate right once
-		 *
-		 *  \return Bit-rotated input value, rotated once to the right.
-		 */
-		#define ROT8(x)                   ((((x) & 0xFE) >> 1) | (((x) & 1) ? 0x80 : 0x00))
-
-		/** Computes the LFN entry checksum of a MSDOS 8.3 format file entry,
-		 *  to associate a LFN entry with its short file entry.
-		 *
-		 *  \param[in] n0  MSDOS Filename character 1
-		 *  \param[in] n1  MSDOS Filename character 2
-		 *  \param[in] n2  MSDOS Filename character 3
-		 *  \param[in] n3  MSDOS Filename character 4
-		 *  \param[in] n4  MSDOS Filename character 5
-		 *  \param[in] n5  MSDOS Filename character 6
-		 *  \param[in] n6  MSDOS Filename character 7
-		 *  \param[in] n7  MSDOS Filename character 8
-		 *  \param[in] e0  MSDOS Extension character 1
-		 *  \param[in] e1  MSDOS Extension character 2
-		 *  \param[in] e2  MSDOS Extension character 3
-		 *
-		 *  \return LFN checksum of the given MSDOS 8.3 filename.
-		 */
-		#define FAT_CHECKSUM(n0, n1, n2, n3, n4, n5, n6, n7, e0, e1, e2) \
-		   (uint8_t)(ROT8(ROT8(ROT8(ROT8(ROT8(ROT8(ROT8(ROT8(ROT8(ROT8(n0)+n1)+n2)+n3)+n4)+n5)+n6)+n7)+e0)+e1)+e2)
-
-		/** \name FAT Filesystem Flags */
-		//@{
-		/** FAT attribute flag to indicate a read-only file. */
-		#define FAT_FLAG_READONLY         (1 << 0)
-
-		/** FAT attribute flag to indicate a hidden file. */
-		#define FAT_FLAG_HIDDEN           (1 << 1)
-
-		/** FAT attribute flag to indicate a system file. */
-		#define FAT_FLAG_SYSTEM           (1 << 2)
-
-		/** FAT attribute flag to indicate a Volume name entry. */
-		#define FAT_FLAG_VOLUME_NAME      (1 << 3)
-
-		/** FAT attribute flag to indicate a directory entry. */
-		#define FAT_FLAG_DIRECTORY        (1 << 4)
-
-		/** FAT attribute flag to indicate a file ready for archiving. */
-		#define FAT_FLAG_ARCHIVE          (1 << 5)
-
-		/** FAT pseudo-attribute flag to indicate a Long File Name entry. */
-		#define FAT_FLAG_LONG_FILE_NAME   0x0F
-
-		/** Ordinal flag marker for FAT Long File Name entries to mark the last entry. */
-		#define FAT_ORDINAL_LAST_ENTRY    (1 << 6)
-		//@}
-
-	/* Enums: */
-		/** Enum for the Root FAT file entry indexes on the disk. This can be used
-		 *  to retrieve the current contents of a known directory entry.
-		 */
-		enum
-		{
-			/** Volume ID directory entry, giving the name of the virtual disk. */
-			DISK_FILE_ENTRY_VolumeID      = 0,
-			/** Long File Name FAT file entry of the virtual FLASH.BIN image file. */
-			DISK_FILE_ENTRY_FLASH_LFN     = 1,
-			/** Legacy MSDOS FAT file entry of the virtual FLASH.BIN image file. */
-			DISK_FILE_ENTRY_FLASH_MSDOS   = 2,
-			/** Long File Name FAT file entry of the virtual EEPROM.BIN image file. */
-			DISK_FILE_ENTRY_EEPROM_LFN    = 3,
-			/** Legacy MSDOS FAT file entry of the virtual EEPROM.BIN image file. */
-			DISK_FILE_ENTRY_EEPROM_MSDOS  = 4,
-		};
-
-		/** Enum for the physical disk blocks of the virtual disk. */
-		enum
-		{
-			/** Boot sector disk block. */
-			DISK_BLOCK_BootBlock          = 0,
-			/** First copy of the FAT table block. */
-			DISK_BLOCK_FATBlock1          = 1,
-			/** Second copy of the FAT table block. */
-			DISK_BLOCK_FATBlock2          = 2,
-			/** Root file and directory entries block. */
-			DISK_BLOCK_RootFilesBlock     = 3,
-			/** Start block of the disk data section. */
-			DISK_BLOCK_DataStartBlock     = 4,
-		};
-
-	/* Type Definitions: */
-		/** FAT boot block structure definition, used to identify the core
-		 *  parameters of a FAT file system stored on a disk.
-		 *
-		 *  \note This definition is truncated to save space; the magic signature
-		 *        \c 0xAA55 must be appended to the very end of the block for it
-		 *        to be detected by the host as a valid boot block.
-		 */
-		typedef struct
-		{
-			uint8_t  Bootstrap[3];
-			uint8_t  Description[8];
-			uint16_t SectorSize;
-			uint8_t  SectorsPerCluster;
-			uint16_t ReservedSectors;
-			uint8_t  FATCopies;
-			uint16_t RootDirectoryEntries;
-			uint16_t TotalSectors16;
-			uint8_t  MediaDescriptor;
-			uint16_t SectorsPerFAT;
-			uint16_t SectorsPerTrack;
-			uint16_t Heads;
-			uint32_t HiddenSectors;
-			uint32_t TotalSectors32;
-			uint16_t PhysicalDriveNum;
-			uint8_t  ExtendedBootRecordSig;
-			uint32_t VolumeSerialNumber;
-			uint8_t  VolumeLabel[11];
-			uint8_t  FilesystemIdentifier[8];
-			/* uint8_t  BootstrapProgram[448]; */
-			/* uint16_t MagicSignature; */
-		} FATBootBlock_t;
-
-		/** FAT directory entry structure, for the various kinds of File and
-		 *  directory descriptors on a FAT disk.
-		 */
-		typedef union
-		{
-			/** VFAT Long File Name file entry. */
-			struct
-			{
-				uint8_t  Ordinal;
-				uint16_t Unicode1;
-				uint16_t Unicode2;
-				uint16_t Unicode3;
-				uint16_t Unicode4;
-				uint16_t Unicode5;
-				uint8_t  Attribute;
-				uint8_t  Reserved1;
-				uint8_t  Checksum;
-				uint16_t Unicode6;
-				uint16_t Unicode7;
-				uint16_t Unicode8;
-				uint16_t Unicode9;
-				uint16_t Unicode10;
-				uint16_t Unicode11;
-				uint16_t Reserved2;
-				uint16_t Unicode12;
-				uint16_t Unicode13;
-			} VFAT_LongFileName;
-
-			/** Legacy FAT MSDOS 8.3 file entry. */
-			struct
-			{
-				uint8_t  Filename[8];
-				uint8_t  Extension[3];
-				uint8_t  Attributes;
-				uint8_t  Reserved[10];
-				uint16_t CreationTime;
-				uint16_t CreationDate;
-				uint16_t StartingCluster;
-				uint32_t FileSizeBytes;
-			} MSDOS_File;
-
-			/** Legacy FAT MSDOS (sub-)directory entry. */
-			struct
-			{
-				uint8_t  Name[11];
-				uint8_t  Attributes;
-				uint8_t  Reserved[10];
-				uint16_t CreationTime;
-				uint16_t CreationDate;
-				uint16_t StartingCluster;
-				uint32_t Reserved2;
-			} MSDOS_Directory;
-		} FATDirectoryEntry_t;
-
-	/* Function Prototypes: */
-		#if defined(INCLUDE_FROM_VIRTUAL_FAT_C)
-			static uint8_t ReadEEPROMByte(const uint8_t* const Address) ATTR_NO_INLINE;
-
-			static void WriteEEPROMByte(uint8_t* const Address,
-			                            const uint8_t Data) ATTR_NO_INLINE;
-
-			static void UpdateFAT12ClusterEntry(uint8_t* const FATTable,
-			                                    const uint16_t Index,
-			                                    const uint16_t ChainEntry) AUX_BOOT_SECTION;
-
-			static void UpdateFAT12ClusterChain(uint8_t* const FATTable,
-			                                    const uint16_t StartIndex,
-			                                    const uint8_t ChainLength) AUX_BOOT_SECTION;
-
-			static void ReadWriteFLASHFileBlock(const uint16_t BlockNumber,
-			                                    uint8_t* BlockBuffer,
-			                                    const bool Read) AUX_BOOT_SECTION;
-
-			static void ReadWriteEEPROMFileBlock(const uint16_t BlockNumber,
-			                                     uint8_t* BlockBuffer,
-			                                     const bool Read) AUX_BOOT_SECTION;
-		#endif
-
-		void VirtualFAT_WriteBlock(const uint16_t BlockNumber) AUX_BOOT_SECTION;
-		void VirtualFAT_ReadBlock(const uint16_t BlockNumber) AUX_BOOT_SECTION;
-
-#endif

+ 0 - 156
lib/lufa/Bootloaders/MassStorage/asf.xml

@@ -1,156 +0,0 @@
-<asf xmlversion="1.0">
-	<project caption="Mass Storage Bootloader - 128KB FLASH / 8KB Boot - AVR8 Architecture" id="lufa.bootloaders.mass_storage.avr8.128_8" force-caption="true" workspace-name="lufa_ms_128kb_8kb_">
-		<require idref="lufa.bootloaders.mass_storage"/>
-		<require idref="lufa.boards.dummy.avr8"/>
-		<generator value="as5_8"/>
-
-		<device-support value="at90usb1287"/>
-		<config name="lufa.drivers.board.name" value="none"/>
-
-		<config name="config.compiler.optimization.level" value="size"/>
-
-		<build type="define" name="F_CPU" value="16000000UL"/>
-		<build type="define" name="F_USB" value="16000000UL"/>
-
-		<build type="define" name="BOOT_START_ADDR" value="0x1E000"/>
-		<build type="linker-config" subtype="flags" value="--section-start=.text=0x1E000"/>
-
-		<build type="define" name="AUX_BOOT_SECTION_SIZE" value="0"/>
-
-		<build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0x1FFA0"/>
-		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>
-		<build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0x1FFE0"/>
-		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>
-		<build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0x1FFF8"/>
-		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>
-	</project>
-
-	<project caption="Mass Storage Bootloader - 64KB FLASH / 8KB Boot - AVR8 Architecture" id="lufa.bootloaders.mass_storage.avr8.64_8" force-caption="true" workspace-name="lufa_ms_64kb_8kb_">
-		<require idref="lufa.bootloaders.mass_storage"/>
-		<require idref="lufa.boards.dummy.avr8"/>
-		<generator value="as5_8"/>
-
-		<device-support value="at90usb647"/>
-		<config name="lufa.drivers.board.name" value="none"/>
-
-		<config name="config.compiler.optimization.level" value="size"/>
-
-		<build type="define" name="F_CPU" value="16000000UL"/>
-		<build type="define" name="F_USB" value="16000000UL"/>
-
-		<build type="define" name="BOOT_START_ADDR" value="0xE000"/>
-		<build type="linker-config" subtype="flags" value="--section-start=.text=0xE000"/>
-
-		<build type="define" name="AUX_BOOT_SECTION_SIZE" value="0"/>
-
-		<build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0xFFA0"/>
-		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>
-		<build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0xFFE0"/>
-		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>
-		<build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0xFFF8"/>
-		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>
-	</project>
-
-	<project caption="Mass Storage Bootloader - 32KB FLASH / 4KB Boot (2KB AUX) - AVR8 Architecture" id="lufa.bootloaders.mass_storage.avr8.32_4" force-caption="true" workspace-name="lufa_ms_32kb_4kb_">
-		<require idref="lufa.bootloaders.mass_storage"/>
-		<require idref="lufa.boards.dummy.avr8"/>
-		<generator value="as5_8"/>
-
-		<device-support value="atmega32u4"/>
-		<config name="lufa.drivers.board.name" value="none"/>
-
-		<config name="config.compiler.optimization.level" value="size"/>
-
-		<build type="define" name="F_CPU" value="16000000UL"/>
-		<build type="define" name="F_USB" value="16000000UL"/>
-
-		<build type="define" name="BOOT_START_ADDR" value="0x7000"/>
-		<build type="linker-config" subtype="flags" value="--section-start=.text=0x7000"/>
-
-		<build type="define" name="AUX_BOOT_SECTION_SIZE" value="2048"/>
-		<build type="linker-config" subtype="flags" value="--section-start=.boot_aux=0x6810"/>
-		<build type="linker-config" subtype="flags" value="--section-start=.boot_aux_trampoline=0x6800"/>
-		<build type="linker-config" subtype="flags" value="--undefined=Boot_AUX_Trampoline"/>
-
-		<build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0x7FA0"/>
-		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>
-		<build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0x7FE0"/>
-		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>
-		<build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0x7FF8"/>
-		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>
-	</project>
-
-	<project caption="Mass Storage Bootloader - 16KB FLASH / 4KB Boot (2KB AUX) - AVR8 Architecture" id="lufa.bootloaders.mass_storage.avr8.16_4" force-caption="true" workspace-name="lufa_ms_16kb_4kb_">
-		<require idref="lufa.bootloaders.mass_storage"/>
-		<require idref="lufa.boards.dummy.avr8"/>
-		<generator value="as5_8"/>
-
-		<device-support value="atmega16u2"/>
-		<config name="lufa.drivers.board.name" value="none"/>
-
-		<config name="config.compiler.optimization.level" value="size"/>
-
-		<build type="define" name="F_CPU" value="16000000UL"/>
-		<build type="define" name="F_USB" value="16000000UL"/>
-
-		<build type="define" name="BOOT_START_ADDR" value="0x3000"/>
-		<build type="linker-config" subtype="flags" value="--section-start=.text=0x3000"/>
-
-		<build type="define" name="AUX_BOOT_SECTION_SIZE" value="2048"/>
-		<build type="linker-config" subtype="flags" value="--section-start=.boot_aux=0x2810"/>
-		<build type="linker-config" subtype="flags" value="--section-start=.boot_aux_trampoline=0x2800"/>
-		<build type="linker-config" subtype="flags" value="--undefined=Boot_AUX_Trampoline"/>
-
-		<build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0x3FA0"/>
-		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>
-		<build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0x3FE0"/>
-		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>
-		<build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0x3FF8"/>
-		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>
-	</project>
-
-	<module type="application" id="lufa.bootloaders.mass_storage" caption="Mass Storage Bootloader">
-		<info type="description" value="summary">
-		Mass Storage Class Bootloader, capable of reprogramming a device via binary BIN files copied to the virtual FAT12 file-system it creates when plugged into a host.
-		</info>
-
- 		<info type="gui-flag" value="move-to-root"/>
-
-		<info type="keyword" value="Technology">
-			<keyword value="Bootloaders"/>
-			<keyword value="USB Device"/>
-		</info>
-
-		<device-support-alias value="lufa_avr8"/>
-		<device-support-alias value="lufa_xmega"/>
-		<device-support-alias value="lufa_uc3"/>
-
-		<build type="include-path" value="."/>
-		<build type="c-source" value="BootloaderMassStorage.c"/>
-		<build type="header-file" value="BootloaderMassStorage.h"/>
-		<build type="c-source" value="Descriptors.c"/>
-		<build type="header-file" value="Descriptors.h"/>
-		<build type="c-source" value="BootloaderAPI.c"/>
-		<build type="header-file" value="BootloaderAPI.h"/>
-		<build type="asm-source" value="BootloaderAPITable.S"/>
-
-		<build type="module-config" subtype="path" value="Config"/>
-		<build type="header-file" value="Config/LUFAConfig.h"/>
-		<build type="header-file" value="Config/AppConfig.h"/>
-
-		<build type="include-path" value="Lib"/>
-		<build type="header-file" value="Lib/VirtualFAT.h"/>
-		<build type="c-source" value="Lib/VirtualFAT.c"/>
-		<build type="header-file" value="Lib/SCSI.h"/>
-		<build type="c-source" value="Lib/SCSI.c"/>
-
-		<build type="distribute" subtype="user-file" value="doxyfile"/>
-		<build type="distribute" subtype="user-file" value="BootloaderMassStorage.txt"/>
-
-		<require idref="lufa.common"/>
-		<require idref="lufa.platform"/>
-		<require idref="lufa.drivers.usb"/>
-		<require idref="lufa.drivers.board"/>
-		<require idref="lufa.drivers.board.leds"/>
-	</module>
-</asf>

+ 0 - 2396
lib/lufa/Bootloaders/MassStorage/doxyfile

@@ -1,2396 +0,0 @@
-# Doxyfile 1.8.9
-
-# 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 - Mass Storage 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 a logo or an 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 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. If 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 HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will
-# append additional text to a page's title, such as Class Reference. If set to
-# YES the compound reference will be hidden.
-# The default value is: NO.
-
-HIDE_COMPOUND_REFERENCE= 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 <section_label> ... \endif and \cond <section_label>
-# ... \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:
-#
-# <filter> <input-file>
-#
-# where <filter> is the value of the INPUT_FILTER tag, and <input-file> 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 therefore more robust against future updates.
-# Doxygen will copy the style sheet files to the output directory.
-# Note: The order of the extra style sheet files is of importance (e.g. the last
-# style sheet 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 style sheet 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 style sheets (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
-
-# If 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 pre-rendered 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 <access key> + S
-# (what the <access key> is depends on the OS and browser, but it is typically
-# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down
-# key> to jump into the search results window, the results can be navigated
-# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel
-# the search. The filter options can be selected when the cursor is inside the
-# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys>
-# to select a filter and <Enter> or <escape> to activate or cancel the filter
-# option.
-# The default value is: YES.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-SEARCHENGINE           = NO
-
-# When the SERVER_BASED_SEARCH tag is enabled the search engine will be
-# implemented using a web server instead of a web client using Javascript. There
-# are two flavors of web server based searching depending on the EXTERNAL_SEARCH
-# setting. When disabled, doxygen will generate a PHP script for searching and
-# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing
-# and searching needs to be provided by external tools. See the section
-# "External Indexing and Searching" for details.
-# The default value is: NO.
-# This tag requires that the tag SEARCHENGINE is set to YES.
-
-SERVER_BASED_SEARCH    = NO
-
-# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP
-# script for searching. Instead the search results are written to an XML file
-# which needs to be processed by an external indexer. Doxygen will invoke an
-# external search engine pointed to by the SEARCHENGINE_URL option to obtain the
-# search results.
-#
-# Doxygen ships with an example indexer (doxyindexer) and search engine
-# (doxysearch.cgi) which are based on the open source search engine library
-# Xapian (see: http://xapian.org/).
-#
-# See the section "External Indexing and Searching" for details.
-# The default value is: NO.
-# This tag requires that the tag SEARCHENGINE is set to YES.
-
-EXTERNAL_SEARCH        = NO
-
-# The SEARCHENGINE_URL should point to a search engine hosted by a web server
-# which will return the search results when EXTERNAL_SEARCH is enabled.
-#
-# Doxygen ships with an example indexer (doxyindexer) and search engine
-# (doxysearch.cgi) which are based on the open source search engine library
-# Xapian (see: http://xapian.org/). See the section "External Indexing and
-# Searching" for details.
-# This tag requires that the tag SEARCHENGINE is set to YES.
-
-SEARCHENGINE_URL       =
-
-# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed
-# search data is written to a file for indexing by an external tool. With the
-# SEARCHDATA_FILE tag the name of this file can be specified.
-# The default file is: searchdata.xml.
-# This tag requires that the tag SEARCHENGINE is set to YES.
-
-SEARCHDATA_FILE        = searchdata.xml
-
-# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the
-# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is
-# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple
-# projects and redirect the results back to the right project.
-# This tag requires that the tag SEARCHENGINE is set to YES.
-
-EXTERNAL_SEARCH_ID     =
-
-# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen
-# projects other than the one defined by this configuration file, but that are
-# all added to the same external search index. Each project needs to have a
-# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of
-# to a relative location where the documentation can be found. The format is:
-# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ...
-# This tag requires that the tag SEARCHENGINE is set to YES.
-
-EXTRA_SEARCH_MAPPINGS  =
-
-#---------------------------------------------------------------------------
-# Configuration options related to the LaTeX output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output.
-# The default value is: YES.
-
-GENERATE_LATEX         = NO
-
-# The LATEX_OUTPUT tag is used to specify where the LaTeX 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: latex.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_OUTPUT           = latex
-
-# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
-# invoked.
-#
-# Note that when enabling USE_PDFLATEX this option is only used for generating
-# bitmaps for formulas in the HTML output, but not in the Makefile that is
-# written to the output directory.
-# The default file is: latex.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_CMD_NAME         = latex
-
-# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate
-# index for LaTeX.
-# The default file is: makeindex.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-MAKEINDEX_CMD_NAME     = makeindex
-
-# If the COMPACT_LATEX tag is set to YES, doxygen generates more compact LaTeX
-# documents. This may be useful for small projects and may help to save some
-# trees in general.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-COMPACT_LATEX          = NO
-
-# The PAPER_TYPE tag can be used to set the paper type that is used by the
-# printer.
-# Possible values are: a4 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x
-# 14 inches) and executive (7.25 x 10.5 inches).
-# The default value is: a4.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-PAPER_TYPE             = a4wide
-
-# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names
-# that should be included in the LaTeX output. To get the times font for
-# instance you can specify
-# EXTRA_PACKAGES=times
-# If left blank no extra packages will be included.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-EXTRA_PACKAGES         =
-
-# The LATEX_HEADER tag can be used to specify a personal LaTeX header for the
-# generated LaTeX document. The header should contain everything until the first
-# chapter. If it is left blank doxygen will generate a standard header. See
-# section "Doxygen usage" for information on how to let doxygen write the
-# default header to a separate file.
-#
-# Note: Only use a user-defined header if you know what you are doing! The
-# following commands have a special meaning inside the header: $title,
-# $datetime, $date, $doxygenversion, $projectname, $projectnumber,
-# $projectbrief, $projectlogo. Doxygen will replace $title with the empty
-# string, for the replacement values of the other commands the user is referred
-# to HTML_HEADER.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_HEADER           =
-
-# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the
-# generated LaTeX document. The footer should contain everything after the last
-# chapter. If it is left blank doxygen will generate a standard footer. See
-# LATEX_HEADER for more information on how to generate a default footer and what
-# special commands can be used inside the footer.
-#
-# Note: Only use a user-defined footer if you know what you are doing!
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_FOOTER           =
-
-# The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined
-# LaTeX style sheets that are included after the standard style sheets created
-# by doxygen. Using this option one can overrule certain style aspects. Doxygen
-# will copy the style sheet files to the output directory.
-# Note: The order of the extra style sheet files is of importance (e.g. the last
-# style sheet in the list overrules the setting of the previous ones in the
-# list).
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_EXTRA_STYLESHEET =
-
-# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or
-# other source files which should be copied to the LATEX_OUTPUT output
-# directory. Note that the files will be copied as-is; there are no commands or
-# markers available.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_EXTRA_FILES      =
-
-# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is
-# prepared for conversion to PDF (using ps2pdf or pdflatex). The PDF file will
-# contain links (just like the HTML output) instead of page references. This
-# makes the output suitable for online browsing using a PDF viewer.
-# The default value is: YES.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-PDF_HYPERLINKS         = YES
-
-# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate
-# the PDF file directly from the LaTeX files. Set this option to YES, to get a
-# higher quality PDF documentation.
-# The default value is: YES.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-USE_PDFLATEX           = YES
-
-# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \batchmode
-# command to the generated LaTeX files. This will instruct LaTeX to keep running
-# if errors occur, instead of asking the user for help. This option is also used
-# when generating formulas in HTML.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_BATCHMODE        = NO
-
-# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the
-# index chapters (such as File Index, Compound Index, etc.) in the output.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_HIDE_INDICES     = NO
-
-# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source
-# code with syntax highlighting in the LaTeX output.
-#
-# Note that which sources are shown also depends on other settings such as
-# SOURCE_BROWSER.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_SOURCE_CODE      = NO
-
-# The LATEX_BIB_STYLE tag can be used to specify the style to use for the
-# bibliography, e.g. plainnat, or ieeetr. See
-# http://en.wikipedia.org/wiki/BibTeX and \cite for more info.
-# The default value is: plain.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_BIB_STYLE        = plain
-
-#---------------------------------------------------------------------------
-# Configuration options related to the RTF output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_RTF tag is set to YES, doxygen will generate RTF output. The
-# RTF output is optimized for Word 97 and may not look too pretty with other RTF
-# readers/editors.
-# The default value is: NO.
-
-GENERATE_RTF           = NO
-
-# The RTF_OUTPUT tag is used to specify where the RTF 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: rtf.
-# This tag requires that the tag GENERATE_RTF is set to YES.
-
-RTF_OUTPUT             = rtf
-
-# If the COMPACT_RTF tag is set to YES, doxygen generates more compact RTF
-# documents. This may be useful for small projects and may help to save some
-# trees in general.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_RTF is set to YES.
-
-COMPACT_RTF            = NO
-
-# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated will
-# contain hyperlink fields. The RTF file will contain links (just like the HTML
-# output) instead of page references. This makes the output suitable for online
-# browsing using Word or some other Word compatible readers that support those
-# fields.
-#
-# Note: WordPad (write) and others do not support links.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_RTF is set to YES.
-
-RTF_HYPERLINKS         = NO
-
-# Load stylesheet definitions from file. Syntax is similar to doxygen's config
-# file, i.e. a series of assignments. You only have to provide replacements,
-# missing definitions are set to their default value.
-#
-# See also section "Doxygen usage" for information on how to generate the
-# default style sheet that doxygen normally uses.
-# This tag requires that the tag GENERATE_RTF is set to YES.
-
-RTF_STYLESHEET_FILE    =
-
-# Set optional variables used in the generation of an RTF document. Syntax is
-# similar to doxygen's config file. A template extensions file can be generated
-# using doxygen -e rtf extensionFile.
-# This tag requires that the tag GENERATE_RTF is set to YES.
-
-RTF_EXTENSIONS_FILE    =
-
-# If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code
-# with syntax highlighting in the RTF output.
-#
-# Note that which sources are shown also depends on other settings such as
-# SOURCE_BROWSER.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_RTF is set to YES.
-
-RTF_SOURCE_CODE        = NO
-
-#---------------------------------------------------------------------------
-# Configuration options related to the man page output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for
-# classes and files.
-# The default value is: NO.
-
-GENERATE_MAN           = NO
-
-# The MAN_OUTPUT tag is used to specify where the man pages will be put. If a
-# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
-# it. A directory man3 will be created inside the directory specified by
-# MAN_OUTPUT.
-# The default directory is: man.
-# This tag requires that the tag GENERATE_MAN is set to YES.
-
-MAN_OUTPUT             = man
-
-# The MAN_EXTENSION tag determines the extension that is added to the generated
-# man pages. In case the manual section does not start with a number, the number
-# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is
-# optional.
-# The default value is: .3.
-# This tag requires that the tag GENERATE_MAN is set to YES.
-
-MAN_EXTENSION          = .3
-
-# The MAN_SUBDIR tag determines the name of the directory created within
-# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by
-# MAN_EXTENSION with the initial . removed.
-# This tag requires that the tag GENERATE_MAN is set to YES.
-
-MAN_SUBDIR             =
-
-# If the MAN_LINKS tag is set to YES and doxygen generates man output, then it
-# will generate one additional man file for each entity documented in the real
-# man page(s). These additional files only source the real man page, but without
-# them the man command would be unable to find the correct page.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_MAN is set to YES.
-
-MAN_LINKS              = NO
-
-#---------------------------------------------------------------------------
-# Configuration options related to the XML output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_XML tag is set to YES, doxygen will generate an XML file that
-# captures the structure of the code including all documentation.
-# The default value is: NO.
-
-GENERATE_XML           = NO
-
-# The XML_OUTPUT tag is used to specify where the XML pages 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: xml.
-# This tag requires that the tag GENERATE_XML is set to YES.
-
-XML_OUTPUT             = xml
-
-# If the XML_PROGRAMLISTING tag is set to YES, doxygen will dump the program
-# listings (including syntax highlighting and cross-referencing information) to
-# the XML output. Note that enabling this will significantly increase the size
-# of the XML output.
-# The default value is: YES.
-# This tag requires that the tag GENERATE_XML is set to YES.
-
-XML_PROGRAMLISTING     = YES
-
-#---------------------------------------------------------------------------
-# Configuration options related to the DOCBOOK output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files
-# that can be used to generate PDF.
-# The default value is: NO.
-
-GENERATE_DOCBOOK       = NO
-
-# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages 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: docbook.
-# This tag requires that the tag GENERATE_DOCBOOK is set to YES.
-
-DOCBOOK_OUTPUT         = docbook
-
-# If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the
-# program listings (including syntax highlighting and cross-referencing
-# information) to the DOCBOOK output. Note that enabling this will significantly
-# increase the size of the DOCBOOK output.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_DOCBOOK is set to YES.
-
-DOCBOOK_PROGRAMLISTING = NO
-
-#---------------------------------------------------------------------------
-# Configuration options for the AutoGen Definitions output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an
-# AutoGen Definitions (see http://autogen.sf.net) file that captures the
-# structure of the code including all documentation. Note that this feature is
-# still experimental and incomplete at the moment.
-# The default value is: NO.
-
-GENERATE_AUTOGEN_DEF   = NO
-
-#---------------------------------------------------------------------------
-# Configuration options related to the Perl module output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_PERLMOD tag is set to YES, doxygen will generate a Perl module
-# file that captures the structure of the code including all documentation.
-#
-# Note that this feature is still experimental and incomplete at the moment.
-# The default value is: NO.
-
-GENERATE_PERLMOD       = NO
-
-# If the PERLMOD_LATEX tag is set to YES, doxygen will generate the necessary
-# Makefile rules, Perl scripts and LaTeX code to be able to generate PDF and DVI
-# output from the Perl module output.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_PERLMOD is set to YES.
-
-PERLMOD_LATEX          = NO
-
-# If the PERLMOD_PRETTY tag is set to YES, the Perl module output will be nicely
-# formatted so it can be parsed by a human reader. This is useful if you want to
-# understand what is going on. On the other hand, if this tag is set to NO, the
-# size of the Perl module output will be much smaller and Perl will parse it
-# just the same.
-# The default value is: YES.
-# This tag requires that the tag GENERATE_PERLMOD is set to YES.
-
-PERLMOD_PRETTY         = YES
-
-# The names of the make variables in the generated doxyrules.make file are
-# prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. This is useful
-# so different doxyrules.make files included by the same Makefile don't
-# overwrite each other's variables.
-# This tag requires that the tag GENERATE_PERLMOD is set to YES.
-
-PERLMOD_MAKEVAR_PREFIX =
-
-#---------------------------------------------------------------------------
-# Configuration options related to the preprocessor
-#---------------------------------------------------------------------------
-
-# If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all
-# C-preprocessor directives found in the sources and include files.
-# The default value is: YES.
-
-ENABLE_PREPROCESSING   = YES
-
-# If the MACRO_EXPANSION tag is set to YES, doxygen will expand all macro names
-# in the source code. If set to NO, only conditional compilation will be
-# performed. Macro expansion can be done in a controlled way by setting
-# EXPAND_ONLY_PREDEF to YES.
-# The default value is: NO.
-# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
-
-MACRO_EXPANSION        = YES
-
-# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES then
-# the macro expansion is limited to the macros specified with the PREDEFINED and
-# EXPAND_AS_DEFINED tags.
-# The default value is: NO.
-# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
-
-EXPAND_ONLY_PREDEF     = YES
-
-# If the SEARCH_INCLUDES tag is set to YES, the include files in the
-# INCLUDE_PATH will be searched if a #include is found.
-# The default value is: YES.
-# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
-
-SEARCH_INCLUDES        = YES
-
-# The INCLUDE_PATH tag can be used to specify one or more directories that
-# contain include files that are not input files but should be processed by the
-# preprocessor.
-# This tag requires that the tag SEARCH_INCLUDES is set to YES.
-
-INCLUDE_PATH           =
-
-# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
-# patterns (like *.h and *.hpp) to filter out the header-files in the
-# directories. If left blank, the patterns specified with FILE_PATTERNS will be
-# used.
-# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
-
-INCLUDE_FILE_PATTERNS  =
-
-# The PREDEFINED tag can be used to specify one or more macro names that are
-# defined before the preprocessor is started (similar to the -D option of e.g.
-# gcc). The argument of the tag is a list of macros of the form: name or
-# name=definition (no spaces). If the definition and the "=" are omitted, "=1"
-# is assumed. To prevent a macro definition from being undefined via #undef or
-# recursively expanded use the := operator instead of the = operator.
-# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
-
-PREDEFINED             = __DOXYGEN__ \
-                         PROGMEM \
-                         ATTR_NO_INIT
-
-# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this
-# tag can be used to specify a list of macro names that should be expanded. The
-# macro definition that is found in the sources will be used. Use the PREDEFINED
-# tag if you want to use a different macro definition that overrules the
-# definition found in the source code.
-# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
-
-EXPAND_AS_DEFINED      =
-
-# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will
-# remove all references to function-like macros that are alone on a line, have
-# an all uppercase name, and do not end with a semicolon. Such function macros
-# are typically used for boiler-plate code, and will confuse the parser if not
-# removed.
-# The default value is: YES.
-# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
-
-SKIP_FUNCTION_MACROS   = YES
-
-#---------------------------------------------------------------------------
-# Configuration options related to external references
-#---------------------------------------------------------------------------
-
-# The TAGFILES tag can be used to specify one or more tag files. For each tag
-# file the location of the external documentation should be added. The format of
-# a tag file without this location is as follows:
-# TAGFILES = file1 file2 ...
-# Adding location for the tag files is done as follows:
-# TAGFILES = file1=loc1 "file2 = loc2" ...
-# where loc1 and loc2 can be relative or absolute paths or URLs. See the
-# section "Linking to external documentation" for more information about the use
-# of tag files.
-# Note: Each tag file must have a unique name (where the name does NOT include
-# the path). If a tag file is not located in the directory in which doxygen is
-# run, you must also specify the path to the tagfile here.
-
-TAGFILES               =
-
-# When a file name is specified after GENERATE_TAGFILE, doxygen will create a
-# tag file that is based on the input files it reads. See section "Linking to
-# external documentation" for more information about the usage of tag files.
-
-GENERATE_TAGFILE       =
-
-# If the ALLEXTERNALS tag is set to YES, all external class will be listed in
-# the class index. If set to NO, only the inherited external classes will be
-# listed.
-# The default value is: NO.
-
-ALLEXTERNALS           = NO
-
-# If the EXTERNAL_GROUPS tag is set to YES, all external groups will be listed
-# in the modules index. If set to NO, only the current project's groups will be
-# listed.
-# The default value is: YES.
-
-EXTERNAL_GROUPS        = YES
-
-# If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in
-# the related pages index. If set to NO, only the current project's pages will
-# be listed.
-# The default value is: YES.
-
-EXTERNAL_PAGES         = YES
-
-# The PERL_PATH should be the absolute path and name of the perl script
-# interpreter (i.e. the result of 'which perl').
-# The default file (with absolute path) is: /usr/bin/perl.
-
-PERL_PATH              = /usr/bin/perl
-
-#---------------------------------------------------------------------------
-# Configuration options related to the dot tool
-#---------------------------------------------------------------------------
-
-# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram
-# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to
-# NO turns the diagrams off. Note that this option also works with HAVE_DOT
-# disabled, but it is recommended to install and use dot, since it yields more
-# powerful graphs.
-# The default value is: YES.
-
-CLASS_DIAGRAMS         = NO
-
-# You can define message sequence charts within doxygen comments using the \msc
-# command. Doxygen will then run the mscgen tool (see:
-# http://www.mcternan.me.uk/mscgen/)) to produce the chart and insert it in the
-# documentation. The MSCGEN_PATH tag allows you to specify the directory where
-# the mscgen tool resides. If left empty the tool is assumed to be found in the
-# default search path.
-
-MSCGEN_PATH            =
-
-# You can include diagrams made with dia in doxygen documentation. Doxygen will
-# then run dia to produce the diagram and insert it in the documentation. The
-# DIA_PATH tag allows you to specify the directory where the dia binary resides.
-# If left empty dia is assumed to be found in the default search path.
-
-DIA_PATH               =
-
-# If set to YES the inheritance and collaboration graphs will hide inheritance
-# and usage relations if the target is undocumented or is not a class.
-# The default value is: YES.
-
-HIDE_UNDOC_RELATIONS   = YES
-
-# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
-# available from the path. This tool is part of Graphviz (see:
-# http://www.graphviz.org/), a graph visualization toolkit from AT&T and Lucent
-# Bell Labs. The other options in this section have no effect if this option is
-# set to NO
-# The default value is: NO.
-
-HAVE_DOT               = NO
-
-# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed
-# to run in parallel. When set to 0 doxygen will base this on the number of
-# processors available in the system. You can set it explicitly to a value
-# larger than 0 to get control over the balance between CPU load and processing
-# speed.
-# Minimum value: 0, maximum value: 32, default value: 0.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_NUM_THREADS        = 0
-
-# When you want a differently looking font in the dot files that doxygen
-# generates you can specify the font name using DOT_FONTNAME. You need to make
-# sure dot is able to find the font, which can be done by putting it in a
-# standard location or by setting the DOTFONTPATH environment variable or by
-# setting DOT_FONTPATH to the directory containing the font.
-# The default value is: Helvetica.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_FONTNAME           =
-
-# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of
-# dot graphs.
-# Minimum value: 4, maximum value: 24, default value: 10.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_FONTSIZE           = 10
-
-# By default doxygen will tell dot to use the default font as specified with
-# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set
-# the path where dot can find it using this tag.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_FONTPATH           =
-
-# If the CLASS_GRAPH tag is set to YES then doxygen will generate a graph for
-# each documented class showing the direct and indirect inheritance relations.
-# Setting this tag to YES will force the CLASS_DIAGRAMS tag to NO.
-# The default value is: YES.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-CLASS_GRAPH            = NO
-
-# If the COLLABORATION_GRAPH tag is set to YES then doxygen will generate a
-# graph for each documented class showing the direct and indirect implementation
-# dependencies (inheritance, containment, and class references variables) of the
-# class with other documented classes.
-# The default value is: YES.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-COLLABORATION_GRAPH    = NO
-
-# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for
-# groups, showing the direct groups dependencies.
-# The default value is: YES.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-GROUP_GRAPHS           = NO
-
-# If the UML_LOOK tag is set to YES, doxygen will generate inheritance and
-# collaboration diagrams in a style similar to the OMG's Unified Modeling
-# Language.
-# The default value is: NO.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-UML_LOOK               = NO
-
-# If the UML_LOOK tag is enabled, the fields and methods are shown inside the
-# class node. If there are many fields or methods and many nodes the graph may
-# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the
-# number of items for each type to make the size more manageable. Set this to 0
-# for no limit. Note that the threshold may be exceeded by 50% before the limit
-# is enforced. So when you set the threshold to 10, up to 15 fields may appear,
-# but if the number exceeds 15, the total amount of fields shown is limited to
-# 10.
-# Minimum value: 0, maximum value: 100, default value: 10.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-UML_LIMIT_NUM_FIELDS   = 10
-
-# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and
-# collaboration graphs will show the relations between templates and their
-# instances.
-# The default value is: NO.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-TEMPLATE_RELATIONS     = NO
-
-# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are set to
-# YES then doxygen will generate a graph for each documented file showing the
-# direct and indirect include dependencies of the file with other documented
-# files.
-# The default value is: YES.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-INCLUDE_GRAPH          = NO
-
-# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are
-# set to YES then doxygen will generate a graph for each documented file showing
-# the direct and indirect include dependencies of the file with other documented
-# files.
-# The default value is: YES.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-INCLUDED_BY_GRAPH      = NO
-
-# If the CALL_GRAPH tag is set to YES then doxygen will generate a call
-# dependency graph for every global function or class method.
-#
-# Note that enabling this option will significantly increase the time of a run.
-# So in most cases it will be better to enable call graphs for selected
-# functions only using the \callgraph command.
-# The default value is: NO.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-CALL_GRAPH             = NO
-
-# If the CALLER_GRAPH tag is set to YES then doxygen will generate a caller
-# dependency graph for every global function or class method.
-#
-# Note that enabling this option will significantly increase the time of a run.
-# So in most cases it will be better to enable caller graphs for selected
-# functions only using the \callergraph command.
-# The default value is: NO.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-CALLER_GRAPH           = NO
-
-# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical
-# hierarchy of all classes instead of a textual one.
-# The default value is: YES.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-GRAPHICAL_HIERARCHY    = NO
-
-# If the DIRECTORY_GRAPH tag is set to YES then doxygen will show the
-# dependencies a directory has on other directories in a graphical way. The
-# dependency relations are determined by the #include relations between the
-# files in the directories.
-# The default value is: YES.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DIRECTORY_GRAPH        = NO
-
-# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
-# generated by dot.
-# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order
-# to make the SVG files visible in IE 9+ (other browsers do not have this
-# requirement).
-# Possible values are: png, jpg, gif and svg.
-# The default value is: png.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_IMAGE_FORMAT       = png
-
-# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to
-# enable generation of interactive SVG images that allow zooming and panning.
-#
-# Note that this requires a modern browser other than Internet Explorer. Tested
-# and working are Firefox, Chrome, Safari, and Opera.
-# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make
-# the SVG files visible. Older versions of IE do not have SVG support.
-# The default value is: NO.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-INTERACTIVE_SVG        = NO
-
-# The DOT_PATH tag can be used to specify the path where the dot tool can be
-# found. If left blank, it is assumed the dot tool can be found in the path.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_PATH               =
-
-# The DOTFILE_DIRS tag can be used to specify one or more directories that
-# contain dot files that are included in the documentation (see the \dotfile
-# command).
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOTFILE_DIRS           =
-
-# The MSCFILE_DIRS tag can be used to specify one or more directories that
-# contain msc files that are included in the documentation (see the \mscfile
-# command).
-
-MSCFILE_DIRS           =
-
-# The DIAFILE_DIRS tag can be used to specify one or more directories that
-# contain dia files that are included in the documentation (see the \diafile
-# command).
-
-DIAFILE_DIRS           =
-
-# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the
-# path where java can find the plantuml.jar file. If left blank, it is assumed
-# PlantUML is not used or called during a preprocessing step. Doxygen will
-# generate a warning when it encounters a \startuml command in this case and
-# will not generate output for the diagram.
-
-PLANTUML_JAR_PATH      =
-
-# When using plantuml, the specified paths are searched for files specified by
-# the !include statement in a plantuml block.
-
-PLANTUML_INCLUDE_PATH  =
-
-# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of nodes
-# that will be shown in the graph. If the number of nodes in a graph becomes
-# larger than this value, doxygen will truncate the graph, which is visualized
-# by representing a node as a red box. Note that doxygen if the number of direct
-# children of the root node in a graph is already larger than
-# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note that
-# the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.
-# Minimum value: 0, maximum value: 10000, default value: 50.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_GRAPH_MAX_NODES    = 15
-
-# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the graphs
-# generated by dot. A depth value of 3 means that only nodes reachable from the
-# root by following a path via at most 3 edges will be shown. Nodes that lay
-# further from the root node will be omitted. Note that setting this option to 1
-# or 2 may greatly reduce the computation time needed for large code bases. Also
-# note that the size of a graph can be further restricted by
-# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.
-# Minimum value: 0, maximum value: 1000, default value: 0.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-MAX_DOT_GRAPH_DEPTH    = 2
-
-# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent
-# background. This is disabled by default, because dot on Windows does not seem
-# to support this out of the box.
-#
-# Warning: Depending on the platform used, enabling this option may lead to
-# badly anti-aliased labels on the edges of a graph (i.e. they become hard to
-# read).
-# The default value is: NO.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_TRANSPARENT        = YES
-
-# Set the DOT_MULTI_TARGETS tag to YES to allow dot to generate multiple output
-# files in one run (i.e. multiple -o and -T options on the command line). This
-# makes dot run faster, but since only newer versions of dot (>1.8.10) support
-# this, this feature is disabled by default.
-# The default value is: NO.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_MULTI_TARGETS      = NO
-
-# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page
-# explaining the meaning of the various boxes and arrows in the dot generated
-# graphs.
-# The default value is: YES.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-GENERATE_LEGEND        = YES
-
-# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot
-# files that are used to generate the various graphs.
-# The default value is: YES.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_CLEANUP            = YES

+ 0 - 75
lib/lufa/Bootloaders/MassStorage/makefile

@@ -1,75 +0,0 @@
-#
-#             LUFA Library
-#     Copyright (C) Dean Camera, 2017.
-#
-#  dean [at] fourwalledcubicle [dot] com
-#           www.lufa-lib.org
-#
-# --------------------------------------
-#         LUFA Project Makefile.
-# --------------------------------------
-
-# Run "make help" for target help.
-
-MCU          = at90usb1287
-ARCH         = AVR8
-BOARD        = USBKEY
-F_CPU        = 8000000
-F_USB        = $(F_CPU)
-OPTIMIZATION = s
-TARGET       = BootloaderMassStorage
-SRC          = $(TARGET).c Descriptors.c BootloaderAPI.c BootloaderAPITable.S Lib/SCSI.c Lib/VirtualFAT.c $(LUFA_SRC_USB) $(LUFA_SRC_USBCLASS)
-LUFA_PATH    = ../../LUFA
-CC_FLAGS     = -DUSE_LUFA_CONFIG_HEADER -IConfig/ -DBOOT_START_ADDR=$(BOOT_START_OFFSET)
-LD_FLAGS     = -Wl,--section-start=.text=$(BOOT_START_OFFSET) $(BOOT_API_LD_FLAGS)
-
-# Flash size and bootloader section sizes of the target, in KB. These must
-# match the target's total FLASH size and the bootloader size set in the
-# device's fuses.
-FLASH_SIZE_KB         = 128
-BOOT_SECTION_SIZE_KB  = 8
-
-# Bootloader address calculation formulas
-# Do not modify these macros, but rather modify the dependent values above.
-CALC_ADDRESS_IN_HEX   = $(shell printf "0x%X" $$(( $(1) )) )
-BOOT_START_OFFSET     = $(call CALC_ADDRESS_IN_HEX, ($(FLASH_SIZE_KB) - $(BOOT_SECTION_SIZE_KB)) * 1024 )
-BOOT_SEC_OFFSET       = $(call CALC_ADDRESS_IN_HEX, ($(FLASH_SIZE_KB) * 1024) - ($(strip $(1))) )
-
-# Bootloader linker section flags for relocating the API table sections to
-# known FLASH addresses - these should not normally be user-edited.
-BOOT_SECTION_LD_FLAG  = -Wl,--section-start=$(strip $(1))=$(call BOOT_SEC_OFFSET, $(3)) -Wl,--undefined=$(strip $(2))
-BOOT_API_LD_FLAGS     = $(call BOOT_SECTION_LD_FLAG, .apitable_trampolines, BootloaderAPI_Trampolines, 96)
-BOOT_API_LD_FLAGS    += $(call BOOT_SECTION_LD_FLAG, .apitable_jumptable,   BootloaderAPI_JumpTable,   32)
-BOOT_API_LD_FLAGS    += $(call BOOT_SECTION_LD_FLAG, .apitable_signatures,  BootloaderAPI_Signatures,  8)
-
-# Check if the bootloader needs an AUX section, located before the real bootloader section to store some of the
-# bootloader code. This is required for 32KB and smaller devices, where the actual bootloader is 6KB but the maximum
-# bootloader section size is 4KB. The actual usable application space will be reduced by 6KB for these devices.
-ifeq ($(BOOT_SECTION_SIZE_KB),8)
-  CC_FLAGS           += -DAUX_BOOT_SECTION_SIZE=0
-else
-  AUX_BOOT_SECTION_SIZE_KB = (6 - $(BOOT_SECTION_SIZE_KB))
-
-  CC_FLAGS           += -DAUX_BOOT_SECTION_SIZE='($(AUX_BOOT_SECTION_SIZE_KB) * 1024)'
-  LD_FLAGS           += -Wl,--section-start=.boot_aux=$(call BOOT_SEC_OFFSET, (($(BOOT_SECTION_SIZE_KB) + $(AUX_BOOT_SECTION_SIZE_KB)) * 1024 - 16))
-  LD_FLAGS           += $(call BOOT_SECTION_LD_FLAG, .boot_aux_trampoline, Boot_AUX_Trampoline, ($(BOOT_SECTION_SIZE_KB) + $(AUX_BOOT_SECTION_SIZE_KB)) * 1024)
-endif
-
-# Default target
-all:
-
-# Include LUFA-specific DMBS extension modules
-DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA
-include $(DMBS_LUFA_PATH)/lufa-sources.mk
-include $(DMBS_LUFA_PATH)/lufa-gcc.mk
-
-# Include common DMBS build system modules
-DMBS_PATH      ?= $(LUFA_PATH)/Build/DMBS/DMBS
-include $(DMBS_PATH)/core.mk
-include $(DMBS_PATH)/cppcheck.mk
-include $(DMBS_PATH)/doxygen.mk
-include $(DMBS_PATH)/dfu.mk
-include $(DMBS_PATH)/gcc.mk
-include $(DMBS_PATH)/hid.mk
-include $(DMBS_PATH)/avrdude.mk
-include $(DMBS_PATH)/atprogram.mk

+ 0 - 75
lib/lufa/Bootloaders/Printer/BootloaderAPI.c

@@ -1,75 +0,0 @@
-/*
-             LUFA Library
-     Copyright (C) Dean Camera, 2017.
-
-  dean [at] fourwalledcubicle [dot] com
-           www.lufa-lib.org
-*/
-
-/*
-  Copyright 2017  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);
-}

+ 0 - 56
lib/lufa/Bootloaders/Printer/BootloaderAPI.h

@@ -1,56 +0,0 @@
-/*
-             LUFA Library
-     Copyright (C) Dean Camera, 2017.
-
-  dean [at] fourwalledcubicle [dot] com
-           www.lufa-lib.org
-*/
-
-/*
-  Copyright 2017  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 <avr/io.h>
-		#include <avr/boot.h>
-		#include <stdbool.h>
-
-		#include <LUFA/Common/Common.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
-

+ 0 - 91
lib/lufa/Bootloaders/Printer/BootloaderAPITable.S

@@ -1,91 +0,0 @@
-/*
-             LUFA Library
-     Copyright (C) Dean Camera, 2017.
-
-  dean [at] fourwalledcubicle [dot] com
-           www.lufa-lib.org
-*/
-
-/*
-  Copyright 2017  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.
-*/
-
-; Trampolines to actual API implementations if the target address is outside the
-; range of a rjmp instruction (can happen with large bootloader sections)
-.section .apitable_trampolines, "ax"
-.global BootloaderAPI_Trampolines
-BootloaderAPI_Trampolines:
-
-	BootloaderAPI_ErasePage_Trampoline:
-		jmp BootloaderAPI_ErasePage
-	BootloaderAPI_WritePage_Trampoline:
-		jmp BootloaderAPI_WritePage
-	BootloaderAPI_FillWord_Trampoline:
-		jmp BootloaderAPI_FillWord
-	BootloaderAPI_ReadSignature_Trampoline:
-		jmp BootloaderAPI_ReadSignature
-	BootloaderAPI_ReadFuse_Trampoline:
-		jmp BootloaderAPI_ReadFuse
-	BootloaderAPI_ReadLock_Trampoline:
-		jmp BootloaderAPI_ReadLock
-	BootloaderAPI_WriteLock_Trampoline:
-		jmp BootloaderAPI_WriteLock
-	BootloaderAPI_UNUSED1:
-		ret
-	BootloaderAPI_UNUSED2:
-		ret
-	BootloaderAPI_UNUSED3:
-		ret
-	BootloaderAPI_UNUSED4:
-		ret
-	BootloaderAPI_UNUSED5:
-		ret
-
-
-
-; API function jump table
-.section .apitable_jumptable, "ax"
-.global BootloaderAPI_JumpTable
-BootloaderAPI_JumpTable:
-
-	rjmp BootloaderAPI_ErasePage_Trampoline
-	rjmp BootloaderAPI_WritePage_Trampoline
-	rjmp BootloaderAPI_FillWord_Trampoline
-	rjmp BootloaderAPI_ReadSignature_Trampoline
-	rjmp BootloaderAPI_ReadFuse_Trampoline
-	rjmp BootloaderAPI_ReadLock_Trampoline
-	rjmp BootloaderAPI_WriteLock_Trampoline
-	rjmp BootloaderAPI_UNUSED1 ; UNUSED ENTRY 1
-	rjmp BootloaderAPI_UNUSED2 ; UNUSED ENTRY 2
-	rjmp BootloaderAPI_UNUSED3 ; UNUSED ENTRY 3
-	rjmp BootloaderAPI_UNUSED4 ; UNUSED ENTRY 4
-	rjmp BootloaderAPI_UNUSED5 ; UNUSED ENTRY 5
-
-
-
-; Bootloader table signatures and information
-.section .apitable_signatures, "ax"
-.global BootloaderAPI_Signatures
-BootloaderAPI_Signatures:
-
-	.long BOOT_START_ADDR ; Start address of the bootloader
-	.word 0xDF20 ; Signature for the Printer class bootloader
-	.word 0xDCFB ; Signature for a LUFA class bootloader

+ 0 - 487
lib/lufa/Bootloaders/Printer/BootloaderPrinter.c

@@ -1,487 +0,0 @@
-/*
-             LUFA Library
-     Copyright (C) Dean Camera, 2017.
-
-  dean [at] fourwalledcubicle [dot] com
-           www.lufa-lib.org
-*/
-
-/*
-  Copyright 2017  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 Printer class bootloader. This file contains the complete bootloader logic.
- */
-
-#include "BootloaderPrinter.h"
-
-/** LUFA Printer Class driver interface configuration and state information. This structure is
- *  passed to all Printer Class driver functions, so that multiple instances of the same class
- *  within a device can be differentiated from one another.
- */
-USB_ClassInfo_PRNT_Device_t TextOnly_Printer_Interface =
-	{
-		.Config =
-			{
-				.InterfaceNumber          = INTERFACE_ID_Printer,
-				.DataINEndpoint           =
-					{
-						.Address          = PRINTER_IN_EPADDR,
-						.Size             = PRINTER_IO_EPSIZE,
-						.Banks            = 1,
-					},
-				.DataOUTEndpoint =
-					{
-						.Address          = PRINTER_OUT_EPADDR,
-						.Size             = PRINTER_IO_EPSIZE,
-						.Banks            = 1,
-					},
-				.IEEE1284String =
-					"MFG:Generic;"
-					"MDL:Generic_/_Text_Only;"
-					"CMD:1284.4;"
-					"CLS:PRINTER",
-			},
-	};
-
-/** Intel HEX parser state machine state information, to track the contents of
- *  a HEX file streamed in as a sequence of arbitrary bytes.
- */
-struct
-{
-	/** Current HEX parser state machine state. */
-	uint8_t  ParserState;
-	/** Previously decoded numerical byte of data. */
-	uint8_t  PrevData;
-	/** Currently decoded numerical byte of data. */
-	uint8_t  Data;
-	/** Indicates if both bytes that correspond to a single decoded numerical
-	 *  byte of data (HEX encodes values in ASCII HEX, two characters per byte)
-	 *  have been read.
-	 */
-	bool     ReadMSB;
-	/** Intel HEX record type of the current Intel HEX record. */
-	uint8_t  RecordType;
-	/** Numerical bytes of data remaining to be read in the current record. */
-	uint8_t  DataRem;
-	/** Checksum of the current record received so far. */
-	uint8_t  Checksum;
-	/** Starting address of the last addressed FLASH page. */
-	uint32_t PageStartAddress;
-	/** Current 32-bit byte extended base address in FLASH being targeted. */
-	uint32_t CurrBaseAddress;
-	/** Current 32-bit byte address in FLASH being targeted. */
-	uint32_t CurrAddress;
-} HEXParser;
-
-/** Indicates if there is data waiting to be written to a physical page of
- *  memory in FLASH.
- */
-static bool PageDirty = false;
-
-/** Flag to indicate if the bootloader should be running, or should exit and allow the application code to run
- *  via a soft reset. When cleared, the bootloader will abort, the USB interface will shut down and the application
- *  started via a forced watchdog reset.
- */
-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_LEONARDO)
-		/* Enable pull-up on the IO13 pin so we can use it to select the mode */
-		PORTC |= (1 << 7);
-		Delay_MS(10);
-
-		/* If IO13 is not jumpered to ground, start the user application instead */
-		JumpToApplication = ((PINC & (1 << 7)) != 0);
-
-		/* Disable pull-up after the check has completed */
-		PORTC &= ~(1 << 7);
-	#elif ((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();
-	#else
-		/* Check if the device's BOOTRST fuse is set */
-		if (boot_lock_fuse_bits_get(GET_HIGH_FUSE_BITS) & FUSE_BOOTRST)
-		{
-			/* If the reset source was not an external reset or the key is correct, clear it and jump to the application */
-			if (!(MCUSR & (1 << EXTRF)) || (MagicBootKey == MAGIC_BOOT_KEY))
-			  JumpToApplication = true;
-
-			/* Clear reset source */
-			MCUSR &= ~(1 << EXTRF);
-		}
-		else
-		{
-			/* If the reset source was the bootloader and the key is correct, clear it and jump to the application;
-			 * this can happen in the HWBE fuse is set, and the HBE pin is low during the watchdog reset */
-			if ((MCUSR & (1 << WDRF)) && (MagicBootKey == MAGIC_BOOT_KEY))
-				JumpToApplication = true;
-
-			/* Clear reset source */
-			MCUSR &= ~(1 << WDRF);
-		}
-	#endif
-
-	/* Don't run the user application if the reset vector is blank (no app loaded) */
-	bool ApplicationValid = (pgm_read_word_near(0) != 0xFFFF);
-
-	/* If a request has been made to jump to the user application, honor it */
-	if (JumpToApplication && ApplicationValid)
-	{
-		/* Turn off the watchdog */
-		MCUSR &= ~(1 << WDRF);
-		wdt_disable();
-
-		/* Clear the boot key and jump to the user application */
-		MagicBootKey = 0;
-
-		// cppcheck-suppress constStatement
-		((void (*)(void))0x0000)();
-	}
-}
-
-/**
- * Converts a given input byte of data from an ASCII encoded HEX value to an integer value.
- *
- * \note Input HEX bytes are expected to be in uppercase only.
- *
- * \param[in] Byte  ASCII byte of data to convert
- *
- * \return Integer converted value of the input ASCII encoded HEX byte of data, or -1 if the
- *         input is not valid ASCII encoded HEX.
- */
-static int8_t HexToDecimal(const char Byte)
-{
-	if ((Byte >= 'A') && (Byte <= 'F'))
-	  return (10 + (Byte - 'A'));
-	else if ((Byte >= '0') && (Byte <= '9'))
-	  return (Byte - '0');
-
-	return -1;
-}
-
-/**
- * Flushes a partially written page of data to physical FLASH, if a page
- * boundary has been crossed.
- *
- * \note If a page flush occurs the global HEX parser state is updated.
- */
-static void FlushPageIfRequired(void)
-{
-	/* Abort if no data has been buffered for writing to the current page */
-	if (!PageDirty)
-	  return;
-
-	/* Flush the FLASH page to physical memory if we are crossing a page boundary */
-	uint32_t NewPageStartAddress = (HEXParser.CurrAddress & ~(SPM_PAGESIZE - 1));
-	if (HEXParser.PageStartAddress != NewPageStartAddress)
-	{
-		boot_page_write(HEXParser.PageStartAddress);
-		boot_spm_busy_wait();
-
-		HEXParser.PageStartAddress = NewPageStartAddress;
-
-		PageDirty = false;
-	}
-}
-
-/**
- * Parses an input Intel HEX formatted stream one character at a time, loading
- * the data contents into the device's internal FLASH memory.
- *
- * \param[in] ReadCharacter  Next input ASCII byte of data to parse
- */
-static void ParseIntelHEXByte(const char ReadCharacter)
-{
-	/* Reset the line parser while waiting for a new line to start */
-	if ((HEXParser.ParserState == HEX_PARSE_STATE_WAIT_LINE) || (ReadCharacter == ':'))
-	{
-		HEXParser.Checksum     = 0;
-		HEXParser.CurrAddress  = HEXParser.CurrBaseAddress;
-		HEXParser.ReadMSB      = false;
-
-		/* ASCII ':' indicates the start of a new HEX record */
-		if (ReadCharacter == ':')
-		  HEXParser.ParserState = HEX_PARSE_STATE_BYTE_COUNT;
-
-		return;
-	}
-
-	/* Only allow ASCII HEX encoded digits, ignore all other characters */
-	int8_t ReadCharacterDec = HexToDecimal(ReadCharacter);
-	if (ReadCharacterDec < 0)
-	  return;
-
-	/* Read and convert the next nibble of data from the current character */
-	HEXParser.Data    = (HEXParser.Data << 4) | ReadCharacterDec;
-	HEXParser.ReadMSB = !HEXParser.ReadMSB;
-
-	/* Only process further when a full byte (two nibbles) have been read */
-	if (HEXParser.ReadMSB)
-	  return;
-
-	/* Intel HEX checksum is for all fields except starting character and the
-	 * checksum itself
-	 */
-	if (HEXParser.ParserState != HEX_PARSE_STATE_CHECKSUM)
-	  HEXParser.Checksum += HEXParser.Data;
-
-	switch (HEXParser.ParserState)
-	{
-		case HEX_PARSE_STATE_BYTE_COUNT:
-			HEXParser.DataRem      = HEXParser.Data;
-			HEXParser.ParserState  = HEX_PARSE_STATE_ADDRESS_HIGH;
-			break;
-
-		case HEX_PARSE_STATE_ADDRESS_HIGH:
-			HEXParser.CurrAddress += ((uint16_t)HEXParser.Data << 8);
-			HEXParser.ParserState  = HEX_PARSE_STATE_ADDRESS_LOW;
-			break;
-
-		case HEX_PARSE_STATE_ADDRESS_LOW:
-			HEXParser.CurrAddress += HEXParser.Data;
-			HEXParser.ParserState  = HEX_PARSE_STATE_RECORD_TYPE;
-			break;
-
-		case HEX_PARSE_STATE_RECORD_TYPE:
-			HEXParser.RecordType   = HEXParser.Data;
-			HEXParser.ParserState  = (HEXParser.DataRem ? HEX_PARSE_STATE_READ_DATA : HEX_PARSE_STATE_CHECKSUM);
-			break;
-
-		case HEX_PARSE_STATE_READ_DATA:
-			/* Track the number of read data bytes in the record */
-			HEXParser.DataRem--;
-
-			/* Protect the bootloader against being written to */
-			if (HEXParser.CurrAddress >= BOOT_START_ADDR)
-			{
-				HEXParser.ParserState = HEX_PARSE_STATE_WAIT_LINE;
-				PageDirty = false;
-				return;
-			}
-
-			/* Wait for a machine word (two bytes) of data to be read */
-			if (HEXParser.DataRem & 0x01)
-			{
-				HEXParser.PrevData = HEXParser.Data;
-				break;
-			}
-
-			/* Convert the last two received data bytes into a 16-bit word */
-			uint16_t NewDataWord = ((uint16_t)HEXParser.Data << 8) | HEXParser.PrevData;
-
-			switch (HEXParser.RecordType)
-			{
-				case HEX_RECORD_TYPE_Data:
-					/* If we are writing to a new page, we need to erase it first */
-					if (!(PageDirty))
-					{
-						boot_page_erase(HEXParser.PageStartAddress);
-						boot_spm_busy_wait();
-
-						PageDirty = true;
-					}
-
-					/* Fill the FLASH memory buffer with the new word of data */
-					boot_page_fill(HEXParser.CurrAddress, NewDataWord);
-					HEXParser.CurrAddress += 2;
-
-					/* Flush the FLASH page to physical memory if we are crossing a page boundary */
-					FlushPageIfRequired();
-					break;
-
-				case HEX_RECORD_TYPE_ExtendedSegmentAddress:
-					/* Extended address data - store the upper 12-bits of the new address */
-					HEXParser.CurrBaseAddress = ((uint32_t)NewDataWord << 4);
-					break;
-
-				case HEX_RECORD_TYPE_ExtendedLinearAddress:
-					/* Extended address data - store the upper 16-bits of the new address */
-					HEXParser.CurrBaseAddress = ((uint32_t)NewDataWord << 16);
-					break;
-			}
-
-			if (!HEXParser.DataRem)
-			  HEXParser.ParserState = HEX_PARSE_STATE_CHECKSUM;
-			break;
-
-		case HEX_PARSE_STATE_CHECKSUM:
-			/* Verify checksum of the completed record */
-			if (HEXParser.Data != ((~HEXParser.Checksum + 1) & 0xFF))
-			  break;
-
-			/* Flush the FLASH page to physical memory if we are crossing a page boundary */
-			FlushPageIfRequired();
-
-			/* If end of the HEX file reached, the bootloader should exit at next opportunity */
-			if (HEXParser.RecordType == HEX_RECORD_TYPE_EndOfFile)
-			  RunBootloader = false;
-
-			break;
-
-		default:
-			HEXParser.ParserState = HEX_PARSE_STATE_WAIT_LINE;
-			break;
-	}
-}
-
-/** Main program entry point. This routine configures the hardware required by the application, then
- *  enters a loop to run the application tasks in sequence.
- */
-int main(void)
-{
-	SetupHardware();
-
-	LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);
-	GlobalInterruptEnable();
-
-	while (RunBootloader)
-	{
-		uint8_t BytesReceived = PRNT_Device_BytesReceived(&TextOnly_Printer_Interface);
-
-		if (BytesReceived)
-		{
-			LEDs_SetAllLEDs(LEDMASK_USB_BUSY);
-
-			while (BytesReceived--)
-			{
-				int16_t ReceivedByte = PRNT_Device_ReceiveByte(&TextOnly_Printer_Interface);
-
-				/* Feed the next byte of data to the HEX parser */
-				ParseIntelHEXByte(ReceivedByte);
-			}
-
-			LEDs_SetAllLEDs(LEDMASK_USB_READY);
-		}
-
-		PRNT_Device_USBTask(&TextOnly_Printer_Interface);
-		USB_USBTask();
-	}
-
-	/* 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;
-
-	/* Enable the watchdog and force a timeout to reset the AVR */
-	wdt_enable(WDTO_250MS);
-
-	for (;;);
-}
-
-/** Configures the board hardware and chip peripherals for the demo's functionality. */
-static void SetupHardware(void)
-{
-	/* Disable watchdog if enabled by bootloader/fuses */
-	MCUSR &= ~(1 << WDRF);
-	wdt_disable();
-
-	/* Disable clock division */
-	clock_prescale_set(clock_div_1);
-
-	/* Relocate the interrupt vector table to the bootloader section */
-	MCUCR = (1 << IVCE);
-	MCUCR = (1 << IVSEL);
-
-	/* Hardware Initialization */
-	LEDs_Init();
-	USB_Init();
-
-	/* Bootloader active LED toggle timer initialization */
-	TIMSK1 = (1 << TOIE1);
-	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)
-{
-	LEDs_ToggleLEDs(LEDS_LED1 | LEDS_LED2);
-}
-
-/** Event handler for the USB_Connect event. This indicates that the device is enumerating via the status LEDs. */
-void EVENT_USB_Device_Connect(void)
-{
-	/* Indicate USB enumerating */
-	LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING);
-}
-
-/** Event handler for the USB_Disconnect event. This indicates that the device is no longer connected to a host via
- *  the status LEDs and stops the Printer management task.
- */
-void EVENT_USB_Device_Disconnect(void)
-{
-	/* Indicate USB not ready */
-	LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);
-}
-
-/** Event handler for the USB_ConfigurationChanged event. This is fired when the host set the current configuration
- *  of the USB device after enumeration - the device endpoints are configured and the Mass Storage management task started.
- */
-void EVENT_USB_Device_ConfigurationChanged(void)
-{
-	bool ConfigSuccess = true;
-
-	/* Setup Printer Data Endpoints */
-	ConfigSuccess &= PRNT_Device_ConfigureEndpoints(&TextOnly_Printer_Interface);
-
-	/* Reset the HEX parser upon successful connection to a host */
-	HEXParser.ParserState = HEX_PARSE_STATE_WAIT_LINE;
-
-	/* Indicate endpoint configuration success or failure */
-	LEDs_SetAllLEDs(ConfigSuccess ? LEDMASK_USB_READY : LEDMASK_USB_ERROR);
-}
-
-/** 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)
-{
-	PRNT_Device_ProcessControlRequest(&TextOnly_Printer_Interface);
-}

+ 0 - 108
lib/lufa/Bootloaders/Printer/BootloaderPrinter.h

@@ -1,108 +0,0 @@
-/*
-             LUFA Library
-     Copyright (C) Dean Camera, 2017.
-
-  dean [at] fourwalledcubicle [dot] com
-           www.lufa-lib.org
-*/
-
-/*
-  Copyright 2017  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 BootloaderPrinter.c.
- */
-
-#ifndef _BOOTLOADER_PRINTER_H_
-#define _BOOTLOADER_PRINTER_H_
-
-	/* Includes: */
-		#include <avr/io.h>
-		#include <avr/wdt.h>
-		#include <avr/power.h>
-		#include <avr/interrupt.h>
-
-		#include "Descriptors.h"
-
-		#include <LUFA/Drivers/Board/LEDs.h>
-		#include <LUFA/Drivers/USB/USB.h>
-		#include <LUFA/Platform/Platform.h>
-
-	/* 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: */
-		/** LED mask for the library LED driver, to indicate that the USB interface is not ready. */
-		#define LEDMASK_USB_NOTREADY       LEDS_LED1
-
-		/** LED mask for the library LED driver, to indicate that the USB interface is enumerating. */
-		#define LEDMASK_USB_ENUMERATING   (LEDS_LED2 | LEDS_LED3)
-
-		/** LED mask for the library LED driver, to indicate that the USB interface is ready. */
-		#define LEDMASK_USB_READY         (LEDS_LED2 | LEDS_LED4)
-
-		/** LED mask for the library LED driver, to indicate that an error has occurred in the USB interface. */
-		#define LEDMASK_USB_ERROR         (LEDS_LED1 | LEDS_LED3)
-
-		/** LED mask for the library LED driver, to indicate that the USB interface is busy. */
-		#define LEDMASK_USB_BUSY           LEDS_LED2
-
-		/** Magic bootloader key to unlock forced application start mode. */
-		#define MAGIC_BOOT_KEY             0xDC42
-
-	/* Enums: */
-		/** Intel HEX parser state machine states. */
-		enum HEX_Parser_States_t
-		{
-			HEX_PARSE_STATE_WAIT_LINE,    /**< Parser is waiting for a HEX Start of Line character. */
-			HEX_PARSE_STATE_BYTE_COUNT,   /**< Parser is waiting for a record byte count. */
-			HEX_PARSE_STATE_ADDRESS_HIGH, /**< Parser is waiting for the MSB of a record address. */
-			HEX_PARSE_STATE_ADDRESS_LOW,  /**< Parser is waiting for the LSB of a record address. */
-			HEX_PARSE_STATE_RECORD_TYPE,  /**< Parser is waiting for the record type. */
-			HEX_PARSE_STATE_READ_DATA,    /**< Parser is waiting for more data in the current record. */
-			HEX_PARSE_STATE_CHECKSUM,     /**< Parser is waiting for the checksum of the current record. */
-		};
-
-		/** Intel HEX record types, used to indicate the type of record contained in a line of a HEX file. */
-		enum HEX_Record_Types_t
-		{
-			HEX_RECORD_TYPE_Data                   = 0, /**< Record contains loadable data. */
-			HEX_RECORD_TYPE_EndOfFile              = 1, /**< End of file record. */
-			HEX_RECORD_TYPE_ExtendedSegmentAddress = 2, /**< Extended segment start record. */
-			HEX_RECORD_TYPE_StartSegmentAddress    = 3, /**< Normal segment start record. */
-			HEX_RECORD_TYPE_ExtendedLinearAddress  = 4, /**< Extended linear address start record. */
-			HEX_RECORD_TYPE_StartLinearAddress     = 5, /**< Linear address start record. */
-		};
-
-	/* Function Prototypes: */
-		static void SetupHardware(void);
-
-		void EVENT_USB_Device_Connect(void);
-		void EVENT_USB_Device_Disconnect(void);
-		void EVENT_USB_Device_ConfigurationChanged(void);
-		void EVENT_USB_Device_ControlRequest(void);
-
-#endif
-

+ 0 - 202
lib/lufa/Bootloaders/Printer/BootloaderPrinter.txt

@@ -1,202 +0,0 @@
-/** \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 Printer 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.
- *
- *  <table>
- *   <tr>
- *    <td><b>USB Mode:</b></td>
- *    <td>Device</td>
- *   </tr>
- *   <tr>
- *    <td><b>USB Class:</b></td>
- *    <td>Printer Class</td>
- *   </tr>
- *   <tr>
- *    <td><b>USB Subclass:</b></td>
- *    <td>Printer Subclass</td>
- *   </tr>
- *   <tr>
- *    <td><b>Relevant Standards:</b></td>
- *    <td>USBIF Printer Class Standard</td>
- *   </tr>
- *   <tr>
- *    <td><b>Supported USB Speeds:</b></td>
- *    <td>Full Speed Mode</td>
- *   </tr>
- *  </table>
- *
- *  \section Sec_Description Project Description:
- *
- *  This bootloader enumerates to the host as a Generic Text Only Printer device, capable of reading and parsing
- *  "printed" plain-text Intel HEX files 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.
- *
- *  \section Sec_Running Running the Bootloader
- *
- *  On the USB AVR8 devices, setting the \c HWBE device fuse will cause the bootloader to run if the \c HWB pin of
- *  the AVR is grounded when the device is reset.
- *
- *  The are two behaviours of this bootloader, depending on the device's fuses:
- *
- *  <b>If the device's BOOTRST fuse is set</b>, the bootloader will run any time the system is reset from
- *  the external reset pin, unless no valid user application has been loaded. To initiate the bootloader, the
- *  device's external reset pin should be grounded momentarily.
- *
- *  <b>If the device's BOOTRST fuse is not set</b>, the bootloader will run only if initiated via a software
- *  jump, or if the \c HWB pin was low during the last device reset (if the \c HWBE fuse is set).
- *
- *  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
- *
- *  This bootloader uses the Generic Text-Only printer drivers inbuilt into all modern operating systems, thus no
- *  additional drivers need to be supplied for correct operation.
- *
- *  \section Sec_HostApp Host Controller Application
- *
- *  This bootloader is compatible with Notepad under Windows, and the command line \c lpr utility under Linux.
- *
- *  \subsection SSec_Notepad Notepad (Windows)
- *
- *  While most text applications under Windows will be compatible with the bootloader, the inbuilt Notepad utility
- *  is recommended as it will introduce minimal formatting changes to the output stream. To program with Notepad,
- *  open the target HEX file and print it to the Generic Text Only printer device the bootloader creates.
- *
- *  \subsection SSec_LPR LPR (Linux)
- *
- *  While the CUPS framework under Linux will enumerate the bootloader as a Generic Text-Only printer, many
- *  applications will refuse to print to the device due to the lack of rich formatting options available. As a result,
- *  under Linux HEX files must be printed via the low level \c lpr utility instead.
- *
- *  \code
- *  cat Mouse.hex | lpr
- *  \endcode
- *
- *  \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_PRINTER_SIGNATURE       0xDF20
- *
- *  #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_PRINTER_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, new firmware fails to be sent to the device via CUPS.
- *  Only a limited subset of normal printer functionality is exposed via the
- *  bootloader, causing CUPS to reject print requests from applications that
- *  are unable to handle true plain-text printing. For best results, the low
- *  level \c lpr command should be used to print new firmware to the bootloader.
- *
- *  \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.
- *
- *  <table>
- *   <tr>
- *    <td>
- *     None
- *    </td>
- *   </tr>
- *  </table>
- */
-

+ 0 - 93
lib/lufa/Bootloaders/Printer/Config/LUFAConfig.h

@@ -1,93 +0,0 @@
-/*
-             LUFA Library
-     Copyright (C) Dean Camera, 2017.
-
-  dean [at] fourwalledcubicle [dot] com
-           www.lufa-lib.org
-*/
-
-/*
-  Copyright 2017  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

+ 0 - 194
lib/lufa/Bootloaders/Printer/Descriptors.c

@@ -1,194 +0,0 @@
-/*
-             LUFA Library
-     Copyright (C) Dean Camera, 2017.
-
-  dean [at] fourwalledcubicle [dot] com
-           www.lufa-lib.org
-*/
-
-/*
-  Copyright 2017  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                  = USB_CSCP_NoDeviceClass,
-	.SubClass               = USB_CSCP_NoDeviceSubclass,
-	.Protocol               = USB_CSCP_NoDeviceProtocol,
-
-	.Endpoint0Size          = FIXED_CONTROL_ENDPOINT_SIZE,
-
-	.VendorID               = 0x03EB,
-	.ProductID              = 0x206B,
-	.ReleaseNumber          = VERSION_BCD(0,0,1),
-
-	.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        = 1,
-
-			.ConfigurationNumber    = 1,
-			.ConfigurationStrIndex  = NO_DESCRIPTOR,
-
-			.ConfigAttributes       = USB_CONFIG_ATTR_RESERVED,
-
-			.MaxPowerConsumption    = USB_CONFIG_POWER_MA(100)
-		},
-
-	.Printer_Interface =
-		{
-			.Header                 = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface},
-
-			.InterfaceNumber        = INTERFACE_ID_Printer,
-			.AlternateSetting       = 0,
-
-			.TotalEndpoints         = 2,
-
-			.Class                  = PRNT_CSCP_PrinterClass,
-			.SubClass               = PRNT_CSCP_PrinterSubclass,
-			.Protocol               = PRNT_CSCP_BidirectionalProtocol,
-
-			.InterfaceStrIndex      = NO_DESCRIPTOR
-		},
-
-	.Printer_DataInEndpoint =
-		{
-			.Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},
-
-			.EndpointAddress        = PRINTER_IN_EPADDR,
-			.Attributes             = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),
-			.EndpointSize           = PRINTER_IO_EPSIZE,
-			.PollingIntervalMS      = 0x05
-		},
-
-	.Printer_DataOutEndpoint =
-		{
-			.Header                 = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint},
-
-			.EndpointAddress        = PRINTER_OUT_EPADDR,
-			.Attributes             = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),
-			.EndpointSize           = PRINTER_IO_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 Printer Bootloader");
-
-/** This function is called by the library when in device mode, and must be overridden (see 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 uint16_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:
-			switch (DescriptorNumber)
-			{
-				case STRING_ID_Language:
-					Address = &LanguageString;
-					Size    = LanguageString.Header.Size;
-					break;
-				case STRING_ID_Manufacturer:
-					Address = &ManufacturerString;
-					Size    = ManufacturerString.Header.Size;
-					break;
-				case STRING_ID_Product:
-					Address = &ProductString;
-					Size    = ProductString.Header.Size;
-					break;
-			}
-
-			break;
-	}
-
-	*DescriptorAddress = Address;
-	return Size;
-}
-

+ 0 - 96
lib/lufa/Bootloaders/Printer/Descriptors.h

@@ -1,96 +0,0 @@
-/*
-             LUFA Library
-     Copyright (C) Dean Camera, 2017.
-
-  dean [at] fourwalledcubicle [dot] com
-           www.lufa-lib.org
-*/
-
-/*
-  Copyright 2017  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 <LUFA/Drivers/USB/USB.h>
-
-		#include <avr/pgmspace.h>
-
-	/* Macros: */
-		/** Endpoint address of the Printer device-to-host data IN endpoint. */
-		#define PRINTER_IN_EPADDR         (ENDPOINT_DIR_IN  | 3)
-
-		/** Endpoint address of the Printer host-to-device data OUT endpoint. */
-		#define PRINTER_OUT_EPADDR        (ENDPOINT_DIR_OUT | 4)
-
-		/** Size in bytes of the Printer data endpoints. */
-		#define PRINTER_IO_EPSIZE         64
-
-	/* 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;
-
-			// Printer Interface
-			USB_Descriptor_Interface_t            Printer_Interface;
-			USB_Descriptor_Endpoint_t             Printer_DataInEndpoint;
-			USB_Descriptor_Endpoint_t             Printer_DataOutEndpoint;
-		} USB_Descriptor_Configuration_t;
-
-		/** Enum for the device interface 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
-		 *  interface from other descriptors.
-		 */
-		enum InterfaceDescriptors_t
-		{
-			INTERFACE_ID_Printer = 0, /**< Printer 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 uint16_t wIndex,
-		                                    const void** const DescriptorAddress)
-		                                    ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3);
-
-#endif
-

+ 0 - 159
lib/lufa/Bootloaders/Printer/asf.xml

@@ -1,159 +0,0 @@
-<asf xmlversion="1.0">
-	<project caption="Printer Bootloader - 128KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.printer.avr8.128_4" force-caption="true" workspace-name="lufa_printer_128kb_4kb_">
-		<require idref="lufa.bootloaders.printer"/>
-		<require idref="lufa.boards.dummy.avr8"/>
-		<generator value="as5_8"/>
-
-		<device-support value="at90usb1287"/>
-		<config name="lufa.drivers.board.name" value="none"/>
-
-		<config name="config.compiler.optimization.level" value="size"/>
-
-		<build type="define" name="F_CPU" value="16000000UL"/>
-		<build type="define" name="F_USB" value="16000000UL"/>
-
-		<build type="define" name="BOOT_START_ADDR" value="0x1F000"/>
-		<build type="linker-config" subtype="flags" value="--section-start=.text=0x1F000"/>
-
-		<build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0x1FFA0"/>
-		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>
-		<build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0x1FFE0"/>
-		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>
-		<build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0x1FFF8"/>
-		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>
-	</project>
-
-	<project caption="Printer Bootloader - 64KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.printer.avr8.64_4" force-caption="true" workspace-name="lufa_printer_64kb_4kb_">
-		<require idref="lufa.bootloaders.printer"/>
-		<require idref="lufa.boards.dummy.avr8"/>
-		<generator value="as5_8"/>
-
-		<device-support value="at90usb647"/>
-		<config name="lufa.drivers.board.name" value="none"/>
-
-		<config name="config.compiler.optimization.level" value="size"/>
-
-		<build type="define" name="F_CPU" value="16000000UL"/>
-		<build type="define" name="F_USB" value="16000000UL"/>
-
-		<build type="define" name="BOOT_START_ADDR" value="0xF000"/>
-		<build type="linker-config" subtype="flags" value="--section-start=.text=0xF000"/>
-
-		<build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0xFFA0"/>
-		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>
-		<build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0xFFE0"/>
-		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>
-		<build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0xFFF8"/>
-		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>
-	</project>
-
-	<project caption="Printer Bootloader - 32KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.printer.avr8.32_4" force-caption="true" workspace-name="lufa_printer_32kb_4kb_">
-		<require idref="lufa.bootloaders.printer"/>
-		<require idref="lufa.boards.dummy.avr8"/>
-		<generator value="as5_8"/>
-
-		<device-support value="atmega32u4"/>
-		<config name="lufa.drivers.board.name" value="none"/>
-
-		<config name="config.compiler.optimization.level" value="size"/>
-
-		<build type="define" name="F_CPU" value="16000000UL"/>
-		<build type="define" name="F_USB" value="16000000UL"/>
-
-		<build type="define" name="BOOT_START_ADDR" value="0x7000"/>
-		<build type="linker-config" subtype="flags" value="--section-start=.text=0x7000"/>
-
-		<build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0x7FA0"/>
-		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>
-		<build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0x7FE0"/>
-		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>
-		<build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0x7FF8"/>
-		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>
-	</project>
-
-	<project caption="Printer Bootloader - 16KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.printer.avr8.16_4" force-caption="true" workspace-name="lufa_printer_16kb_4kb_">
-		<require idref="lufa.bootloaders.printer"/>
-		<require idref="lufa.boards.dummy.avr8"/>
-		<generator value="as5_8"/>
-
-		<device-support value="atmega16u2"/>
-		<config name="lufa.drivers.board.name" value="none"/>
-
-		<config name="config.compiler.optimization.level" value="size"/>
-
-		<build type="define" name="F_CPU" value="16000000UL"/>
-		<build type="define" name="F_USB" value="16000000UL"/>
-
-		<build type="define" name="BOOT_START_ADDR" value="0x3000"/>
-		<build type="linker-config" subtype="flags" value="--section-start=.text=0x3000"/>
-
-		<build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0x3FA0"/>
-		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>
-		<build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0x3FE0"/>
-		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>
-		<build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0x3FF8"/>
-		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>
-	</project>
-
-	<project caption="Printer Bootloader - 8KB FLASH / 4KB Boot - AVR8 Architecture" id="lufa.bootloaders.printer.avr8.8_4" force-caption="true" workspace-name="lufa_printer_8kb_4kb_">
-		<require idref="lufa.bootloaders.printer"/>
-		<require idref="lufa.boards.dummy.avr8"/>
-		<generator value="as5_8"/>
-
-		<device-support value="atmega8u2"/>
-		<config name="lufa.drivers.board.name" value="none"/>
-
-		<config name="config.compiler.optimization.level" value="size"/>
-
-		<build type="define" name="F_CPU" value="16000000UL"/>
-		<build type="define" name="F_USB" value="16000000UL"/>
-
-		<build type="define" name="BOOT_START_ADDR" value="0x1000"/>
-		<build type="linker-config" subtype="flags" value="--section-start=.text=0x1000"/>
-
-		<build type="linker-config" subtype="flags" value="--section-start=.apitable_trampolines=0x1FA0"/>
-		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Trampolines"/>
-		<build type="linker-config" subtype="flags" value="--section-start=.apitable_jumptable=0x1FE0"/>
-		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_JumpTable"/>
-		<build type="linker-config" subtype="flags" value="--section-start=.apitable_signatures=0x1FF8"/>
-		<build type="linker-config" subtype="flags" value="--undefined=BootloaderAPI_Signatures"/>
-	</project>
-
-	<module type="application" id="lufa.bootloaders.printer" caption="Printer Bootloader">
-		<info type="description" value="summary">
-		Printer Class Bootloader, capable of reprogramming a device by "printing" new HEX files to the virtual Plain-Text printer it creates when plugged into a host.
-		</info>
-
- 		<info type="gui-flag" value="move-to-root"/>
-
-		<info type="keyword" value="Technology">
-			<keyword value="Bootloaders"/>
-			<keyword value="USB Device"/>
-		</info>
-
-		<device-support-alias value="lufa_avr8"/>
-		<device-support-alias value="lufa_xmega"/>
-		<device-support-alias value="lufa_uc3"/>
-
-		<build type="include-path" value="."/>
-		<build type="c-source" value="BootloaderPrinter.c"/>
-		<build type="header-file" value="BootloaderPrinter.h"/>
-		<build type="c-source" value="Descriptors.c"/>
-		<build type="header-file" value="Descriptors.h"/>
-		<build type="c-source" value="BootloaderAPI.c"/>
-		<build type="header-file" value="BootloaderAPI.h"/>
-		<build type="asm-source" value="BootloaderAPITable.S"/>
-
-		<build type="module-config" subtype="path" value="Config"/>
-		<build type="header-file" value="Config/LUFAConfig.h"/>
-
-		<build type="distribute" subtype="user-file" value="doxyfile"/>
-		<build type="distribute" subtype="user-file" value="BootloaderPrinter.txt"/>
-
-		<require idref="lufa.common"/>
-		<require idref="lufa.platform"/>
-		<require idref="lufa.drivers.usb"/>
-		<require idref="lufa.drivers.board"/>
-		<require idref="lufa.drivers.board.leds"/>
-	</module>
-</asf>

+ 0 - 2396
lib/lufa/Bootloaders/Printer/doxyfile

@@ -1,2396 +0,0 @@
-# Doxyfile 1.8.9
-
-# 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 - Printer 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 a logo or an 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 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. If 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 HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will
-# append additional text to a page's title, such as Class Reference. If set to
-# YES the compound reference will be hidden.
-# The default value is: NO.
-
-HIDE_COMPOUND_REFERENCE= 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 <section_label> ... \endif and \cond <section_label>
-# ... \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:
-#
-# <filter> <input-file>
-#
-# where <filter> is the value of the INPUT_FILTER tag, and <input-file> 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 therefore more robust against future updates.
-# Doxygen will copy the style sheet files to the output directory.
-# Note: The order of the extra style sheet files is of importance (e.g. the last
-# style sheet 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 style sheet 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 style sheets (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
-
-# If 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 pre-rendered 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 <access key> + S
-# (what the <access key> is depends on the OS and browser, but it is typically
-# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down
-# key> to jump into the search results window, the results can be navigated
-# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel
-# the search. The filter options can be selected when the cursor is inside the
-# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys>
-# to select a filter and <Enter> or <escape> to activate or cancel the filter
-# option.
-# The default value is: YES.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-SEARCHENGINE           = NO
-
-# When the SERVER_BASED_SEARCH tag is enabled the search engine will be
-# implemented using a web server instead of a web client using Javascript. There
-# are two flavors of web server based searching depending on the EXTERNAL_SEARCH
-# setting. When disabled, doxygen will generate a PHP script for searching and
-# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing
-# and searching needs to be provided by external tools. See the section
-# "External Indexing and Searching" for details.
-# The default value is: NO.
-# This tag requires that the tag SEARCHENGINE is set to YES.
-
-SERVER_BASED_SEARCH    = NO
-
-# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP
-# script for searching. Instead the search results are written to an XML file
-# which needs to be processed by an external indexer. Doxygen will invoke an
-# external search engine pointed to by the SEARCHENGINE_URL option to obtain the
-# search results.
-#
-# Doxygen ships with an example indexer (doxyindexer) and search engine
-# (doxysearch.cgi) which are based on the open source search engine library
-# Xapian (see: http://xapian.org/).
-#
-# See the section "External Indexing and Searching" for details.
-# The default value is: NO.
-# This tag requires that the tag SEARCHENGINE is set to YES.
-
-EXTERNAL_SEARCH        = NO
-
-# The SEARCHENGINE_URL should point to a search engine hosted by a web server
-# which will return the search results when EXTERNAL_SEARCH is enabled.
-#
-# Doxygen ships with an example indexer (doxyindexer) and search engine
-# (doxysearch.cgi) which are based on the open source search engine library
-# Xapian (see: http://xapian.org/). See the section "External Indexing and
-# Searching" for details.
-# This tag requires that the tag SEARCHENGINE is set to YES.
-
-SEARCHENGINE_URL       =
-
-# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed
-# search data is written to a file for indexing by an external tool. With the
-# SEARCHDATA_FILE tag the name of this file can be specified.
-# The default file is: searchdata.xml.
-# This tag requires that the tag SEARCHENGINE is set to YES.
-
-SEARCHDATA_FILE        = searchdata.xml
-
-# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the
-# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is
-# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple
-# projects and redirect the results back to the right project.
-# This tag requires that the tag SEARCHENGINE is set to YES.
-
-EXTERNAL_SEARCH_ID     =
-
-# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen
-# projects other than the one defined by this configuration file, but that are
-# all added to the same external search index. Each project needs to have a
-# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of
-# to a relative location where the documentation can be found. The format is:
-# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ...
-# This tag requires that the tag SEARCHENGINE is set to YES.
-
-EXTRA_SEARCH_MAPPINGS  =
-
-#---------------------------------------------------------------------------
-# Configuration options related to the LaTeX output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output.
-# The default value is: YES.
-
-GENERATE_LATEX         = NO
-
-# The LATEX_OUTPUT tag is used to specify where the LaTeX 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: latex.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_OUTPUT           = latex
-
-# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
-# invoked.
-#
-# Note that when enabling USE_PDFLATEX this option is only used for generating
-# bitmaps for formulas in the HTML output, but not in the Makefile that is
-# written to the output directory.
-# The default file is: latex.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_CMD_NAME         = latex
-
-# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate
-# index for LaTeX.
-# The default file is: makeindex.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-MAKEINDEX_CMD_NAME     = makeindex
-
-# If the COMPACT_LATEX tag is set to YES, doxygen generates more compact LaTeX
-# documents. This may be useful for small projects and may help to save some
-# trees in general.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-COMPACT_LATEX          = NO
-
-# The PAPER_TYPE tag can be used to set the paper type that is used by the
-# printer.
-# Possible values are: a4 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x
-# 14 inches) and executive (7.25 x 10.5 inches).
-# The default value is: a4.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-PAPER_TYPE             = a4wide
-
-# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names
-# that should be included in the LaTeX output. To get the times font for
-# instance you can specify
-# EXTRA_PACKAGES=times
-# If left blank no extra packages will be included.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-EXTRA_PACKAGES         =
-
-# The LATEX_HEADER tag can be used to specify a personal LaTeX header for the
-# generated LaTeX document. The header should contain everything until the first
-# chapter. If it is left blank doxygen will generate a standard header. See
-# section "Doxygen usage" for information on how to let doxygen write the
-# default header to a separate file.
-#
-# Note: Only use a user-defined header if you know what you are doing! The
-# following commands have a special meaning inside the header: $title,
-# $datetime, $date, $doxygenversion, $projectname, $projectnumber,
-# $projectbrief, $projectlogo. Doxygen will replace $title with the empty
-# string, for the replacement values of the other commands the user is referred
-# to HTML_HEADER.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_HEADER           =
-
-# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the
-# generated LaTeX document. The footer should contain everything after the last
-# chapter. If it is left blank doxygen will generate a standard footer. See
-# LATEX_HEADER for more information on how to generate a default footer and what
-# special commands can be used inside the footer.
-#
-# Note: Only use a user-defined footer if you know what you are doing!
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_FOOTER           =
-
-# The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined
-# LaTeX style sheets that are included after the standard style sheets created
-# by doxygen. Using this option one can overrule certain style aspects. Doxygen
-# will copy the style sheet files to the output directory.
-# Note: The order of the extra style sheet files is of importance (e.g. the last
-# style sheet in the list overrules the setting of the previous ones in the
-# list).
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_EXTRA_STYLESHEET =
-
-# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or
-# other source files which should be copied to the LATEX_OUTPUT output
-# directory. Note that the files will be copied as-is; there are no commands or
-# markers available.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_EXTRA_FILES      =
-
-# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is
-# prepared for conversion to PDF (using ps2pdf or pdflatex). The PDF file will
-# contain links (just like the HTML output) instead of page references. This
-# makes the output suitable for online browsing using a PDF viewer.
-# The default value is: YES.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-PDF_HYPERLINKS         = YES
-
-# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate
-# the PDF file directly from the LaTeX files. Set this option to YES, to get a
-# higher quality PDF documentation.
-# The default value is: YES.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-USE_PDFLATEX           = YES
-
-# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \batchmode
-# command to the generated LaTeX files. This will instruct LaTeX to keep running
-# if errors occur, instead of asking the user for help. This option is also used
-# when generating formulas in HTML.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_BATCHMODE        = NO
-
-# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the
-# index chapters (such as File Index, Compound Index, etc.) in the output.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_HIDE_INDICES     = NO
-
-# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source
-# code with syntax highlighting in the LaTeX output.
-#
-# Note that which sources are shown also depends on other settings such as
-# SOURCE_BROWSER.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_SOURCE_CODE      = NO
-
-# The LATEX_BIB_STYLE tag can be used to specify the style to use for the
-# bibliography, e.g. plainnat, or ieeetr. See
-# http://en.wikipedia.org/wiki/BibTeX and \cite for more info.
-# The default value is: plain.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_BIB_STYLE        = plain
-
-#---------------------------------------------------------------------------
-# Configuration options related to the RTF output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_RTF tag is set to YES, doxygen will generate RTF output. The
-# RTF output is optimized for Word 97 and may not look too pretty with other RTF
-# readers/editors.
-# The default value is: NO.
-
-GENERATE_RTF           = NO
-
-# The RTF_OUTPUT tag is used to specify where the RTF 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: rtf.
-# This tag requires that the tag GENERATE_RTF is set to YES.
-
-RTF_OUTPUT             = rtf
-
-# If the COMPACT_RTF tag is set to YES, doxygen generates more compact RTF
-# documents. This may be useful for small projects and may help to save some
-# trees in general.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_RTF is set to YES.
-
-COMPACT_RTF            = NO
-
-# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated will
-# contain hyperlink fields. The RTF file will contain links (just like the HTML
-# output) instead of page references. This makes the output suitable for online
-# browsing using Word or some other Word compatible readers that support those
-# fields.
-#
-# Note: WordPad (write) and others do not support links.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_RTF is set to YES.
-
-RTF_HYPERLINKS         = NO
-
-# Load stylesheet definitions from file. Syntax is similar to doxygen's config
-# file, i.e. a series of assignments. You only have to provide replacements,
-# missing definitions are set to their default value.
-#
-# See also section "Doxygen usage" for information on how to generate the
-# default style sheet that doxygen normally uses.
-# This tag requires that the tag GENERATE_RTF is set to YES.
-
-RTF_STYLESHEET_FILE    =
-
-# Set optional variables used in the generation of an RTF document. Syntax is
-# similar to doxygen's config file. A template extensions file can be generated
-# using doxygen -e rtf extensionFile.
-# This tag requires that the tag GENERATE_RTF is set to YES.
-
-RTF_EXTENSIONS_FILE    =
-
-# If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code
-# with syntax highlighting in the RTF output.
-#
-# Note that which sources are shown also depends on other settings such as
-# SOURCE_BROWSER.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_RTF is set to YES.
-
-RTF_SOURCE_CODE        = NO
-
-#---------------------------------------------------------------------------
-# Configuration options related to the man page output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for
-# classes and files.
-# The default value is: NO.
-
-GENERATE_MAN           = NO
-
-# The MAN_OUTPUT tag is used to specify where the man pages will be put. If a
-# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
-# it. A directory man3 will be created inside the directory specified by
-# MAN_OUTPUT.
-# The default directory is: man.
-# This tag requires that the tag GENERATE_MAN is set to YES.
-
-MAN_OUTPUT             = man
-
-# The MAN_EXTENSION tag determines the extension that is added to the generated
-# man pages. In case the manual section does not start with a number, the number
-# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is
-# optional.
-# The default value is: .3.
-# This tag requires that the tag GENERATE_MAN is set to YES.
-
-MAN_EXTENSION          = .3
-
-# The MAN_SUBDIR tag determines the name of the directory created within
-# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by
-# MAN_EXTENSION with the initial . removed.
-# This tag requires that the tag GENERATE_MAN is set to YES.
-
-MAN_SUBDIR             =
-
-# If the MAN_LINKS tag is set to YES and doxygen generates man output, then it
-# will generate one additional man file for each entity documented in the real
-# man page(s). These additional files only source the real man page, but without
-# them the man command would be unable to find the correct page.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_MAN is set to YES.
-
-MAN_LINKS              = NO
-
-#---------------------------------------------------------------------------
-# Configuration options related to the XML output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_XML tag is set to YES, doxygen will generate an XML file that
-# captures the structure of the code including all documentation.
-# The default value is: NO.
-
-GENERATE_XML           = NO
-
-# The XML_OUTPUT tag is used to specify where the XML pages 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: xml.
-# This tag requires that the tag GENERATE_XML is set to YES.
-
-XML_OUTPUT             = xml
-
-# If the XML_PROGRAMLISTING tag is set to YES, doxygen will dump the program
-# listings (including syntax highlighting and cross-referencing information) to
-# the XML output. Note that enabling this will significantly increase the size
-# of the XML output.
-# The default value is: YES.
-# This tag requires that the tag GENERATE_XML is set to YES.
-
-XML_PROGRAMLISTING     = YES
-
-#---------------------------------------------------------------------------
-# Configuration options related to the DOCBOOK output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files
-# that can be used to generate PDF.
-# The default value is: NO.
-
-GENERATE_DOCBOOK       = NO
-
-# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages 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: docbook.
-# This tag requires that the tag GENERATE_DOCBOOK is set to YES.
-
-DOCBOOK_OUTPUT         = docbook
-
-# If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the
-# program listings (including syntax highlighting and cross-referencing
-# information) to the DOCBOOK output. Note that enabling this will significantly
-# increase the size of the DOCBOOK output.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_DOCBOOK is set to YES.
-
-DOCBOOK_PROGRAMLISTING = NO
-
-#---------------------------------------------------------------------------
-# Configuration options for the AutoGen Definitions output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an
-# AutoGen Definitions (see http://autogen.sf.net) file that captures the
-# structure of the code including all documentation. Note that this feature is
-# still experimental and incomplete at the moment.
-# The default value is: NO.
-
-GENERATE_AUTOGEN_DEF   = NO
-
-#---------------------------------------------------------------------------
-# Configuration options related to the Perl module output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_PERLMOD tag is set to YES, doxygen will generate a Perl module
-# file that captures the structure of the code including all documentation.
-#
-# Note that this feature is still experimental and incomplete at the moment.
-# The default value is: NO.
-
-GENERATE_PERLMOD       = NO
-
-# If the PERLMOD_LATEX tag is set to YES, doxygen will generate the necessary
-# Makefile rules, Perl scripts and LaTeX code to be able to generate PDF and DVI
-# output from the Perl module output.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_PERLMOD is set to YES.
-
-PERLMOD_LATEX          = NO
-
-# If the PERLMOD_PRETTY tag is set to YES, the Perl module output will be nicely
-# formatted so it can be parsed by a human reader. This is useful if you want to
-# understand what is going on. On the other hand, if this tag is set to NO, the
-# size of the Perl module output will be much smaller and Perl will parse it
-# just the same.
-# The default value is: YES.
-# This tag requires that the tag GENERATE_PERLMOD is set to YES.
-
-PERLMOD_PRETTY         = YES
-
-# The names of the make variables in the generated doxyrules.make file are
-# prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. This is useful
-# so different doxyrules.make files included by the same Makefile don't
-# overwrite each other's variables.
-# This tag requires that the tag GENERATE_PERLMOD is set to YES.
-
-PERLMOD_MAKEVAR_PREFIX =
-
-#---------------------------------------------------------------------------
-# Configuration options related to the preprocessor
-#---------------------------------------------------------------------------
-
-# If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all
-# C-preprocessor directives found in the sources and include files.
-# The default value is: YES.
-
-ENABLE_PREPROCESSING   = YES
-
-# If the MACRO_EXPANSION tag is set to YES, doxygen will expand all macro names
-# in the source code. If set to NO, only conditional compilation will be
-# performed. Macro expansion can be done in a controlled way by setting
-# EXPAND_ONLY_PREDEF to YES.
-# The default value is: NO.
-# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
-
-MACRO_EXPANSION        = YES
-
-# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES then
-# the macro expansion is limited to the macros specified with the PREDEFINED and
-# EXPAND_AS_DEFINED tags.
-# The default value is: NO.
-# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
-
-EXPAND_ONLY_PREDEF     = YES
-
-# If the SEARCH_INCLUDES tag is set to YES, the include files in the
-# INCLUDE_PATH will be searched if a #include is found.
-# The default value is: YES.
-# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
-
-SEARCH_INCLUDES        = YES
-
-# The INCLUDE_PATH tag can be used to specify one or more directories that
-# contain include files that are not input files but should be processed by the
-# preprocessor.
-# This tag requires that the tag SEARCH_INCLUDES is set to YES.
-
-INCLUDE_PATH           =
-
-# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
-# patterns (like *.h and *.hpp) to filter out the header-files in the
-# directories. If left blank, the patterns specified with FILE_PATTERNS will be
-# used.
-# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
-
-INCLUDE_FILE_PATTERNS  =
-
-# The PREDEFINED tag can be used to specify one or more macro names that are
-# defined before the preprocessor is started (similar to the -D option of e.g.
-# gcc). The argument of the tag is a list of macros of the form: name or
-# name=definition (no spaces). If the definition and the "=" are omitted, "=1"
-# is assumed. To prevent a macro definition from being undefined via #undef or
-# recursively expanded use the := operator instead of the = operator.
-# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
-
-PREDEFINED             = __DOXYGEN__ \
-                         PROGMEM \
-                         ATTR_NO_INIT
-
-# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this
-# tag can be used to specify a list of macro names that should be expanded. The
-# macro definition that is found in the sources will be used. Use the PREDEFINED
-# tag if you want to use a different macro definition that overrules the
-# definition found in the source code.
-# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
-
-EXPAND_AS_DEFINED      =
-
-# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will
-# remove all references to function-like macros that are alone on a line, have
-# an all uppercase name, and do not end with a semicolon. Such function macros
-# are typically used for boiler-plate code, and will confuse the parser if not
-# removed.
-# The default value is: YES.
-# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
-
-SKIP_FUNCTION_MACROS   = YES
-
-#---------------------------------------------------------------------------
-# Configuration options related to external references
-#---------------------------------------------------------------------------
-
-# The TAGFILES tag can be used to specify one or more tag files. For each tag
-# file the location of the external documentation should be added. The format of
-# a tag file without this location is as follows:
-# TAGFILES = file1 file2 ...
-# Adding location for the tag files is done as follows:
-# TAGFILES = file1=loc1 "file2 = loc2" ...
-# where loc1 and loc2 can be relative or absolute paths or URLs. See the
-# section "Linking to external documentation" for more information about the use
-# of tag files.
-# Note: Each tag file must have a unique name (where the name does NOT include
-# the path). If a tag file is not located in the directory in which doxygen is
-# run, you must also specify the path to the tagfile here.
-
-TAGFILES               =
-
-# When a file name is specified after GENERATE_TAGFILE, doxygen will create a
-# tag file that is based on the input files it reads. See section "Linking to
-# external documentation" for more information about the usage of tag files.
-
-GENERATE_TAGFILE       =
-
-# If the ALLEXTERNALS tag is set to YES, all external class will be listed in
-# the class index. If set to NO, only the inherited external classes will be
-# listed.
-# The default value is: NO.
-
-ALLEXTERNALS           = NO
-
-# If the EXTERNAL_GROUPS tag is set to YES, all external groups will be listed
-# in the modules index. If set to NO, only the current project's groups will be
-# listed.
-# The default value is: YES.
-
-EXTERNAL_GROUPS        = YES
-
-# If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in
-# the related pages index. If set to NO, only the current project's pages will
-# be listed.
-# The default value is: YES.
-
-EXTERNAL_PAGES         = YES
-
-# The PERL_PATH should be the absolute path and name of the perl script
-# interpreter (i.e. the result of 'which perl').
-# The default file (with absolute path) is: /usr/bin/perl.
-
-PERL_PATH              = /usr/bin/perl
-
-#---------------------------------------------------------------------------
-# Configuration options related to the dot tool
-#---------------------------------------------------------------------------
-
-# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram
-# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to
-# NO turns the diagrams off. Note that this option also works with HAVE_DOT
-# disabled, but it is recommended to install and use dot, since it yields more
-# powerful graphs.
-# The default value is: YES.
-
-CLASS_DIAGRAMS         = NO
-
-# You can define message sequence charts within doxygen comments using the \msc
-# command. Doxygen will then run the mscgen tool (see:
-# http://www.mcternan.me.uk/mscgen/)) to produce the chart and insert it in the
-# documentation. The MSCGEN_PATH tag allows you to specify the directory where
-# the mscgen tool resides. If left empty the tool is assumed to be found in the
-# default search path.
-
-MSCGEN_PATH            =
-
-# You can include diagrams made with dia in doxygen documentation. Doxygen will
-# then run dia to produce the diagram and insert it in the documentation. The
-# DIA_PATH tag allows you to specify the directory where the dia binary resides.
-# If left empty dia is assumed to be found in the default search path.
-
-DIA_PATH               =
-
-# If set to YES the inheritance and collaboration graphs will hide inheritance
-# and usage relations if the target is undocumented or is not a class.
-# The default value is: YES.
-
-HIDE_UNDOC_RELATIONS   = YES
-
-# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
-# available from the path. This tool is part of Graphviz (see:
-# http://www.graphviz.org/), a graph visualization toolkit from AT&T and Lucent
-# Bell Labs. The other options in this section have no effect if this option is
-# set to NO
-# The default value is: NO.
-
-HAVE_DOT               = NO
-
-# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed
-# to run in parallel. When set to 0 doxygen will base this on the number of
-# processors available in the system. You can set it explicitly to a value
-# larger than 0 to get control over the balance between CPU load and processing
-# speed.
-# Minimum value: 0, maximum value: 32, default value: 0.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_NUM_THREADS        = 0
-
-# When you want a differently looking font in the dot files that doxygen
-# generates you can specify the font name using DOT_FONTNAME. You need to make
-# sure dot is able to find the font, which can be done by putting it in a
-# standard location or by setting the DOTFONTPATH environment variable or by
-# setting DOT_FONTPATH to the directory containing the font.
-# The default value is: Helvetica.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_FONTNAME           =
-
-# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of
-# dot graphs.
-# Minimum value: 4, maximum value: 24, default value: 10.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_FONTSIZE           = 10
-
-# By default doxygen will tell dot to use the default font as specified with
-# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set
-# the path where dot can find it using this tag.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_FONTPATH           =
-
-# If the CLASS_GRAPH tag is set to YES then doxygen will generate a graph for
-# each documented class showing the direct and indirect inheritance relations.
-# Setting this tag to YES will force the CLASS_DIAGRAMS tag to NO.
-# The default value is: YES.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-CLASS_GRAPH            = NO
-
-# If the COLLABORATION_GRAPH tag is set to YES then doxygen will generate a
-# graph for each documented class showing the direct and indirect implementation
-# dependencies (inheritance, containment, and class references variables) of the
-# class with other documented classes.
-# The default value is: YES.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-COLLABORATION_GRAPH    = NO
-
-# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for
-# groups, showing the direct groups dependencies.
-# The default value is: YES.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-GROUP_GRAPHS           = NO
-
-# If the UML_LOOK tag is set to YES, doxygen will generate inheritance and
-# collaboration diagrams in a style similar to the OMG's Unified Modeling
-# Language.
-# The default value is: NO.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-UML_LOOK               = NO
-
-# If the UML_LOOK tag is enabled, the fields and methods are shown inside the
-# class node. If there are many fields or methods and many nodes the graph may
-# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the
-# number of items for each type to make the size more manageable. Set this to 0
-# for no limit. Note that the threshold may be exceeded by 50% before the limit
-# is enforced. So when you set the threshold to 10, up to 15 fields may appear,
-# but if the number exceeds 15, the total amount of fields shown is limited to
-# 10.
-# Minimum value: 0, maximum value: 100, default value: 10.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-UML_LIMIT_NUM_FIELDS   = 10
-
-# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and
-# collaboration graphs will show the relations between templates and their
-# instances.
-# The default value is: NO.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-TEMPLATE_RELATIONS     = NO
-
-# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are set to
-# YES then doxygen will generate a graph for each documented file showing the
-# direct and indirect include dependencies of the file with other documented
-# files.
-# The default value is: YES.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-INCLUDE_GRAPH          = NO
-
-# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are
-# set to YES then doxygen will generate a graph for each documented file showing
-# the direct and indirect include dependencies of the file with other documented
-# files.
-# The default value is: YES.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-INCLUDED_BY_GRAPH      = NO
-
-# If the CALL_GRAPH tag is set to YES then doxygen will generate a call
-# dependency graph for every global function or class method.
-#
-# Note that enabling this option will significantly increase the time of a run.
-# So in most cases it will be better to enable call graphs for selected
-# functions only using the \callgraph command.
-# The default value is: NO.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-CALL_GRAPH             = NO
-
-# If the CALLER_GRAPH tag is set to YES then doxygen will generate a caller
-# dependency graph for every global function or class method.
-#
-# Note that enabling this option will significantly increase the time of a run.
-# So in most cases it will be better to enable caller graphs for selected
-# functions only using the \callergraph command.
-# The default value is: NO.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-CALLER_GRAPH           = NO
-
-# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical
-# hierarchy of all classes instead of a textual one.
-# The default value is: YES.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-GRAPHICAL_HIERARCHY    = NO
-
-# If the DIRECTORY_GRAPH tag is set to YES then doxygen will show the
-# dependencies a directory has on other directories in a graphical way. The
-# dependency relations are determined by the #include relations between the
-# files in the directories.
-# The default value is: YES.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DIRECTORY_GRAPH        = NO
-
-# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
-# generated by dot.
-# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order
-# to make the SVG files visible in IE 9+ (other browsers do not have this
-# requirement).
-# Possible values are: png, jpg, gif and svg.
-# The default value is: png.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_IMAGE_FORMAT       = png
-
-# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to
-# enable generation of interactive SVG images that allow zooming and panning.
-#
-# Note that this requires a modern browser other than Internet Explorer. Tested
-# and working are Firefox, Chrome, Safari, and Opera.
-# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make
-# the SVG files visible. Older versions of IE do not have SVG support.
-# The default value is: NO.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-INTERACTIVE_SVG        = NO
-
-# The DOT_PATH tag can be used to specify the path where the dot tool can be
-# found. If left blank, it is assumed the dot tool can be found in the path.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_PATH               =
-
-# The DOTFILE_DIRS tag can be used to specify one or more directories that
-# contain dot files that are included in the documentation (see the \dotfile
-# command).
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOTFILE_DIRS           =
-
-# The MSCFILE_DIRS tag can be used to specify one or more directories that
-# contain msc files that are included in the documentation (see the \mscfile
-# command).
-
-MSCFILE_DIRS           =
-
-# The DIAFILE_DIRS tag can be used to specify one or more directories that
-# contain dia files that are included in the documentation (see the \diafile
-# command).
-
-DIAFILE_DIRS           =
-
-# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the
-# path where java can find the plantuml.jar file. If left blank, it is assumed
-# PlantUML is not used or called during a preprocessing step. Doxygen will
-# generate a warning when it encounters a \startuml command in this case and
-# will not generate output for the diagram.
-
-PLANTUML_JAR_PATH      =
-
-# When using plantuml, the specified paths are searched for files specified by
-# the !include statement in a plantuml block.
-
-PLANTUML_INCLUDE_PATH  =
-
-# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of nodes
-# that will be shown in the graph. If the number of nodes in a graph becomes
-# larger than this value, doxygen will truncate the graph, which is visualized
-# by representing a node as a red box. Note that doxygen if the number of direct
-# children of the root node in a graph is already larger than
-# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note that
-# the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.
-# Minimum value: 0, maximum value: 10000, default value: 50.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_GRAPH_MAX_NODES    = 15
-
-# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the graphs
-# generated by dot. A depth value of 3 means that only nodes reachable from the
-# root by following a path via at most 3 edges will be shown. Nodes that lay
-# further from the root node will be omitted. Note that setting this option to 1
-# or 2 may greatly reduce the computation time needed for large code bases. Also
-# note that the size of a graph can be further restricted by
-# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.
-# Minimum value: 0, maximum value: 1000, default value: 0.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-MAX_DOT_GRAPH_DEPTH    = 2
-
-# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent
-# background. This is disabled by default, because dot on Windows does not seem
-# to support this out of the box.
-#
-# Warning: Depending on the platform used, enabling this option may lead to
-# badly anti-aliased labels on the edges of a graph (i.e. they become hard to
-# read).
-# The default value is: NO.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_TRANSPARENT        = YES
-
-# Set the DOT_MULTI_TARGETS tag to YES to allow dot to generate multiple output
-# files in one run (i.e. multiple -o and -T options on the command line). This
-# makes dot run faster, but since only newer versions of dot (>1.8.10) support
-# this, this feature is disabled by default.
-# The default value is: NO.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_MULTI_TARGETS      = NO
-
-# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page
-# explaining the meaning of the various boxes and arrows in the dot generated
-# graphs.
-# The default value is: YES.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-GENERATE_LEGEND        = YES
-
-# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot
-# files that are used to generate the various graphs.
-# The default value is: YES.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_CLEANUP            = YES

+ 0 - 62
lib/lufa/Bootloaders/Printer/makefile

@@ -1,62 +0,0 @@
-#
-#             LUFA Library
-#     Copyright (C) Dean Camera, 2017.
-#
-#  dean [at] fourwalledcubicle [dot] com
-#           www.lufa-lib.org
-#
-# --------------------------------------
-#         LUFA Project Makefile.
-# --------------------------------------
-
-# Run "make help" for target help.
-
-MCU          = at90usb1287
-ARCH         = AVR8
-BOARD        = USBKEY
-F_CPU        = 8000000
-F_USB        = $(F_CPU)
-OPTIMIZATION = s
-TARGET       = BootloaderPrinter
-SRC          = $(TARGET).c Descriptors.c BootloaderAPI.c BootloaderAPITable.S $(LUFA_SRC_USB) $(LUFA_SRC_USBCLASS)
-LUFA_PATH    = ../../LUFA
-CC_FLAGS     = -DUSE_LUFA_CONFIG_HEADER -IConfig/ -DBOOT_START_ADDR=$(BOOT_START_OFFSET)
-LD_FLAGS     = -Wl,--section-start=.text=$(BOOT_START_OFFSET) $(BOOT_API_LD_FLAGS)
-
-# Flash size and bootloader section sizes of the target, in KB. These must
-# match the target's total FLASH size and the bootloader size set in the
-# device's fuses.
-FLASH_SIZE_KB         = 128
-BOOT_SECTION_SIZE_KB  = 8
-
-# Bootloader address calculation formulas
-# Do not modify these macros, but rather modify the dependent values above.
-CALC_ADDRESS_IN_HEX   = $(shell printf "0x%X" $$(( $(1) )) )
-BOOT_START_OFFSET     = $(call CALC_ADDRESS_IN_HEX, ($(FLASH_SIZE_KB) - $(BOOT_SECTION_SIZE_KB)) * 1024 )
-BOOT_SEC_OFFSET       = $(call CALC_ADDRESS_IN_HEX, ($(FLASH_SIZE_KB) * 1024) - ($(strip $(1))) )
-
-# Bootloader linker section flags for relocating the API table sections to
-# known FLASH addresses - these should not normally be user-edited.
-BOOT_SECTION_LD_FLAG  = -Wl,--section-start=$(strip $(1))=$(call BOOT_SEC_OFFSET, $(3)) -Wl,--undefined=$(strip $(2))
-BOOT_API_LD_FLAGS     = $(call BOOT_SECTION_LD_FLAG, .apitable_trampolines, BootloaderAPI_Trampolines, 96)
-BOOT_API_LD_FLAGS    += $(call BOOT_SECTION_LD_FLAG, .apitable_jumptable,   BootloaderAPI_JumpTable,   32)
-BOOT_API_LD_FLAGS    += $(call BOOT_SECTION_LD_FLAG, .apitable_signatures,  BootloaderAPI_Signatures,  8)
-
-# Default target
-all:
-
-# Include LUFA-specific DMBS extension modules
-DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA
-include $(DMBS_LUFA_PATH)/lufa-sources.mk
-include $(DMBS_LUFA_PATH)/lufa-gcc.mk
-
-# Include common DMBS build system modules
-DMBS_PATH      ?= $(LUFA_PATH)/Build/DMBS/DMBS
-include $(DMBS_PATH)/core.mk
-include $(DMBS_PATH)/cppcheck.mk
-include $(DMBS_PATH)/doxygen.mk
-include $(DMBS_PATH)/dfu.mk
-include $(DMBS_PATH)/gcc.mk
-include $(DMBS_PATH)/hid.mk
-include $(DMBS_PATH)/avrdude.mk
-include $(DMBS_PATH)/atprogram.mk

+ 0 - 46
lib/lufa/Bootloaders/makefile

@@ -1,46 +0,0 @@
-#
-#             LUFA Library
-#     Copyright (C) Dean Camera, 2017.
-#
-#  dean [at] fourwalledcubicle [dot] com
-#           www.lufa-lib.org
-#
-
-# Makefile to build all the LUFA USB Bootloaders. Call with "make all" to
-# rebuild all bootloaders.
-
-# Bootloaders are pre-cleaned before each one is built, to ensure any
-# custom LUFA library build options are reflected in the compiled
-# code.
-
-PROJECT_DIRECTORIES := $(shell ls -d */)
-
-# This makefile is potentially infinitely recursive if something really bad
-# happens when determining the set of project directories - hard-abort if
-# more than 10 levels deep to avoid angry emails.
-ifeq ($(MAKELEVEL), 10)
-   $(error EMERGENCY ABORT: INFINITE RECURSION DETECTED)
-endif
-
-# Need to special-case building without a per-project object directory
-ifeq ($(OBJDIR),)
-   # If no target specified, force "clean all" and disallow parallel build
-   ifeq ($(MAKECMDGOALS),)
-      MAKECMDGOALS := clean all
-      .NOTPARALLEL:
-   endif
-
-   # If one of the targets is to build, force "clean" beforehand and disallow parallel build
-   ifneq ($(findstring all, $(MAKECMDGOALS)),)
-      MAKECMDGOALS := clean $(MAKECMDGOALS)
-      .NOTPARALLEL:
-   endif
-endif
-
-%: $(PROJECT_DIRECTORIES)
-	@echo . > /dev/null
-
-$(PROJECT_DIRECTORIES):
-	@$(MAKE) -C $@ $(MAKECMDGOALS)
-
-.PHONY: $(PROJECT_DIRECTORIES)

+ 0 - 82
lib/lufa/BuildTests/BoardDriverTest/Board/Board.h

@@ -1,82 +0,0 @@
-/*
-             LUFA Library
-     Copyright (C) Dean Camera, 2017.
-
-  dean [at] fourwalledcubicle [dot] com
-           www.lufa-lib.org
-*/
-
-/*
-  Copyright 2017  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 Custom Board Hardware Information Driver (Template)
- *
- *  This is a stub driver header file, for implementing custom board
- *  layout hardware with compatible LUFA board specific drivers. If
- *  the library is configured to use the BOARD_USER board mode, this
- *  driver file should be completed and copied into the "/Board/" folder
- *  inside the application's folder.
- *
- *  This stub is for the board-specific component of the LUFA Board Hardware
- *  information driver.
- */
-
-#ifndef __BOARD_USER_H__
-#define __BOARD_USER_H__
-
-	/* Includes: */
-		// TODO: Add any required includes here
-
-	/* 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 a hardware Buttons mounted if defined. */
-//			#define BOARD_HAS_BUTTONS
-
-			/** Indicates the board has a hardware Dataflash mounted if defined. */
-//			#define BOARD_HAS_DATAFLASH
-
-			/** Indicates the board has a hardware Joystick mounted if defined. */
-//			#define BOARD_HAS_JOYSTICK
-
-			/** Indicates the board has a hardware LEDs mounted if defined. */
-//			#define BOARD_HAS_LEDS
-
-	/* Disable C linkage for C++ Compilers: */
-		#if defined(__cplusplus)
-			}
-		#endif
-
-#endif
-
-/** @} */
-

+ 0 - 92
lib/lufa/BuildTests/BoardDriverTest/Board/Buttons.h

@@ -1,92 +0,0 @@
-/*
-             LUFA Library
-     Copyright (C) Dean Camera, 2017.
-
-  dean [at] fourwalledcubicle [dot] com
-           www.lufa-lib.org
-*/
-
-/*
-  Copyright 2017  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 Custom Board Button Hardware Driver (Template)
- *
- *  This is a stub driver header file, for implementing custom board
- *  layout hardware with compatible LUFA board specific drivers. If
- *  the library is configured to use the BOARD_USER board mode, this
- *  driver file should be completed and copied into the "/Board/" folder
- *  inside the application's folder.
- *
- *  This stub is for the board-specific component of the LUFA Buttons driver,
- *  for the control of physical board-mounted GPIO pushbuttons.
- */
-
-#ifndef __BUTTONS_USER_H__
-#define __BUTTONS_USER_H__
-
-	/* Includes: */
-		// TODO: Add any required includes here
-
-	/* 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 BOARD_DUMMY_BUTTONS_IMPLEMENTATION
-
-	/* Public Interface - May be used in end-application: */
-		/* Macros: */
-			/** Button mask for the first button on the board. */
-			#define BUTTONS_BUTTON1          (1 << 0)
-
-		/* Inline Functions: */
-		#if !defined(__DOXYGEN__)
-			static inline void Buttons_Init(void)
-			{
-
-			}
-
-			static inline void Buttons_Disable(void)
-			{
-
-			}
-
-			static inline uint8_t Buttons_GetStatus(void) ATTR_WARN_UNUSED_RESULT;
-			static inline uint8_t Buttons_GetStatus(void)
-			{
-				return 0;
-			}
-		#endif
-
-	/* Disable C linkage for C++ Compilers: */
-		#if defined(__cplusplus)
-			}
-		#endif
-
-#endif
-

+ 0 - 197
lib/lufa/BuildTests/BoardDriverTest/Board/Dataflash.h

@@ -1,197 +0,0 @@
-/*
-             LUFA Library
-     Copyright (C) Dean Camera, 2017.
-
-  dean [at] fourwalledcubicle [dot] com
-           www.lufa-lib.org
-*/
-
-/*
-  Copyright 2017  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 Custom Board Dataflash Hardware Driver (Template)
- *
- *  This is a stub driver header file, for implementing custom board
- *  layout hardware with compatible LUFA board specific drivers. If
- *  the library is configured to use the BOARD_USER board mode, this
- *  driver file should be completed and copied into the "/Board/" folder
- *  inside the application's folder.
- *
- *  This stub is for the board-specific component of the LUFA Dataflash
- *  driver.
-*/
-
-#ifndef __DATAFLASH_USER_H__
-#define __DATAFLASH_USER_H__
-
-	/* Includes: */
-		// TODO: Add any required includes here
-
-	/* Preprocessor Checks: */
-		#if !defined(__INCLUDE_FROM_DATAFLASH_H)
-			#error Do not include this file directly. Include LUFA/Drivers/Board/Dataflash.h instead.
-		#endif
-
-		#define BOARD_DUMMY_DATAFLASH_IMPLEMENTATION
-
-	/* Private Interface - For use in library only: */
-	#if !defined(__DOXYGEN__)
-		/* Macros: */
-			#define DATAFLASH_CHIPCS_MASK                0
-			#define DATAFLASH_CHIPCS_DDR                 0
-			#define DATAFLASH_CHIPCS_PORT                0
-	#endif
-
-	/* Public Interface - May be used in end-application: */
-		/* Macros: */
-			/** Constant indicating the total number of dataflash ICs mounted on the selected board. */
-			#define DATAFLASH_TOTALCHIPS                 1
-
-			/** Mask for no dataflash chip selected. */
-			#define DATAFLASH_NO_CHIP                    0
-
-			/** Mask for the first dataflash chip selected. */
-			#define DATAFLASH_CHIP1                      0
-
-			/** Mask for the second dataflash chip selected. */
-			#define DATAFLASH_CHIP2                      0
-
-			/** Internal main memory page size for the board's dataflash ICs. */
-			#define DATAFLASH_PAGE_SIZE                  0
-
-			/** Total number of pages inside each of the board's dataflash ICs. */
-			#define DATAFLASH_PAGES                      0
-
-		/* Inline Functions: */
-			/** Initializes the dataflash driver so that commands and data may be sent to an attached dataflash IC.
-			 *  The microcontroller's SPI driver MUST be initialized before any of the dataflash commands are used.
-			 */
-			static inline void Dataflash_Init(void)
-			{
-
-			}
-
-			/** Sends a byte to the currently selected dataflash IC, and returns a byte from the dataflash.
-			 *
-			 *  \param[in] Byte  Byte of data to send to the dataflash
-			 *
-			 *  \return Last response byte from the dataflash
-			 */
-			static inline uint8_t Dataflash_TransferByte(const uint8_t Byte) ATTR_ALWAYS_INLINE;
-			static inline uint8_t Dataflash_TransferByte(const uint8_t Byte)
-			{
-				return 0;
-			}
-
-			/** Sends a byte to the currently selected dataflash IC, and ignores the next byte from the dataflash.
-			 *
-			 *  \param[in] Byte  Byte of data to send to the dataflash
-			 */
-			static inline void Dataflash_SendByte(const uint8_t Byte) ATTR_ALWAYS_INLINE;
-			static inline void Dataflash_SendByte(const uint8_t Byte)
-			{
-
-			}
-
-			/** Sends a dummy byte to the currently selected dataflash IC, and returns the next byte from the dataflash.
-			 *
-			 *  \return Last response byte from the dataflash
-			 */
-			static inline uint8_t Dataflash_ReceiveByte(void) ATTR_ALWAYS_INLINE ATTR_WARN_UNUSED_RESULT;
-			static inline uint8_t Dataflash_ReceiveByte(void)
-			{
-				return 0;
-			}
-
-			/** Determines the currently selected dataflash chip.
-			 *
-			 *  \return Mask of the currently selected Dataflash chip, either \ref DATAFLASH_NO_CHIP if no chip is selected
-			 *          or a DATAFLASH_CHIPn mask (where n is the chip number).
-			 */
-			static inline uint8_t Dataflash_GetSelectedChip(void) ATTR_ALWAYS_INLINE ATTR_WARN_UNUSED_RESULT;
-			static inline uint8_t Dataflash_GetSelectedChip(void)
-			{
-				return 0;
-			}
-
-			/** Selects the given dataflash chip.
-			 *
-			 *  \param[in]  ChipMask  Mask of the Dataflash IC to select, in the form of a \c DATAFLASH_CHIPn mask (where n is
-			 *              the chip number).
-			 */
-			static inline void Dataflash_SelectChip(const uint8_t ChipMask) ATTR_ALWAYS_INLINE;
-			static inline void Dataflash_SelectChip(const uint8_t ChipMask)
-			{
-
-			}
-
-			/** Deselects the current dataflash chip, so that no dataflash is selected. */
-			static inline void Dataflash_DeselectChip(void) ATTR_ALWAYS_INLINE;
-			static inline void Dataflash_DeselectChip(void)
-			{
-
-			}
-
-			/** Selects a dataflash IC from the given page number, which should range from 0 to
-			 *  ((DATAFLASH_PAGES * DATAFLASH_TOTALCHIPS) - 1). For boards containing only one
-			 *  dataflash IC, this will select DATAFLASH_CHIP1. If the given page number is outside
-			 *  the total number of pages contained in the boards dataflash ICs, all dataflash ICs
-			 *  are deselected.
-			 *
-			 *  \param[in] PageAddress  Address of the page to manipulate, ranging from
-			 *                          0 to ((DATAFLASH_PAGES * DATAFLASH_TOTALCHIPS) - 1).
-			 */
-			static inline void Dataflash_SelectChipFromPage(const uint16_t PageAddress)
-			{
-
-			}
-
-			/** Toggles the select line of the currently selected dataflash IC, so that it is ready to receive
-			 *  a new command.
-			 */
-			static inline void Dataflash_ToggleSelectedChipCS(void)
-			{
-
-			}
-
-			/** Spin-loops while the currently selected dataflash is busy executing a command, such as a main
-			 *  memory page program or main memory to buffer transfer.
-			 */
-			static inline void Dataflash_WaitWhileBusy(void)
-			{
-
-			}
-
-			/** Sends a set of page and buffer address bytes to the currently selected dataflash IC, for use with
-			 *  dataflash commands which require a complete 24-bit address.
-			 *
-			 *  \param[in] PageAddress  Page address within the selected dataflash IC
-			 *  \param[in] BufferByte   Address within the dataflash's buffer
-			 */
-			static inline void Dataflash_SendAddressBytes(uint16_t PageAddress, const uint16_t BufferByte)
-			{
-
-			}
-
-#endif
-

+ 0 - 104
lib/lufa/BuildTests/BoardDriverTest/Board/Joystick.h

@@ -1,104 +0,0 @@
-/*
-             LUFA Library
-     Copyright (C) Dean Camera, 2017.
-
-  dean [at] fourwalledcubicle [dot] com
-           www.lufa-lib.org
-*/
-
-/*
-  Copyright 2017  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 Custom Board Joystick Hardware Driver (Template)
- *
- *  This is a stub driver header file, for implementing custom board
- *  layout hardware with compatible LUFA board specific drivers. If
- *  the library is configured to use the BOARD_USER board mode, this
- *  driver file should be completed and copied into the "/Board/" folder
- *  inside the application's folder.
- *
- *  This stub is for the board-specific component of the LUFA Joystick
- *  driver, for a digital four-way (plus button) joystick.
-*/
-
-#ifndef __JOYSTICK_USER_H__
-#define __JOYSTICK_USER_H__
-
-	/* Includes: */
-		// TODO: Add any required includes here
-
-	/* Enable C linkage for C++ Compilers: */
-		#if defined(__cplusplus)
-			extern "C" {
-		#endif
-
-	/* Preprocessor Checks: */
-		#if !defined(__INCLUDE_FROM_JOYSTICK_H)
-			#error Do not include this file directly. Include LUFA/Drivers/Board/Joystick.h instead.
-		#endif
-
-		#define BOARD_DUMMY_JOYSTICK_IMPLEMENTATION
-
-	/* Public Interface - May be used in end-application: */
-		/* Macros: */
-			/** Mask for the joystick being pushed in the left direction. */
-			#define JOY_LEFT                  0
-
-			/** Mask for the joystick being pushed in the right direction. */
-			#define JOY_RIGHT                 0
-
-			/** Mask for the joystick being pushed in the upward direction. */
-			#define JOY_UP                    0
-
-			/** Mask for the joystick being pushed in the downward direction. */
-			#define JOY_DOWN                  0
-
-			/** Mask for the joystick being pushed inward. */
-			#define JOY_PRESS                 0
-
-		/* Inline Functions: */
-		#if !defined(__DOXYGEN__)
-			static inline void Joystick_Init(void)
-			{
-
-			}
-
-			static inline void Joystick_Disable(void)
-			{
-
-			}
-
-			static inline uint8_t Joystick_GetStatus(void) ATTR_WARN_UNUSED_RESULT;
-			static inline uint8_t Joystick_GetStatus(void)
-			{
-				return 0;
-			}
-		#endif
-
-	/* Disable C linkage for C++ Compilers: */
-		#if defined(__cplusplus)
-			}
-		#endif
-
-#endif
-

+ 0 - 132
lib/lufa/BuildTests/BoardDriverTest/Board/LEDs.h

@@ -1,132 +0,0 @@
-/*
-             LUFA Library
-     Copyright (C) Dean Camera, 2017.
-
-  dean [at] fourwalledcubicle [dot] com
-           www.lufa-lib.org
-*/
-
-/*
-  Copyright 2017  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 Custom Board LED Hardware Driver (Template)
- *
- *  This is a stub driver header file, for implementing custom board
- *  layout hardware with compatible LUFA board specific drivers. If
- *  the library is configured to use the BOARD_USER board mode, this
- *  driver file should be completed and copied into the "/Board/" folder
- *  inside the application's folder.
- *
- *  This stub is for the board-specific component of the LUFA LEDs driver,
- *  for the LEDs (up to four) mounted on most development boards.
-*/
-
-#ifndef __LEDS_USER_H__
-#define __LEDS_USER_H__
-
-	/* Includes: */
-		// TODO: Add any required includes here
-
-/* 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
-
-		#define BOARD_DUMMY_LEDS_IMPLEMENTATION
-
-	/* Public Interface - May be used in end-application: */
-		/* Macros: */
-			/** LED mask for the first LED on the board. */
-			#define LEDS_LED1        (1 << 0)
-
-			/** LED mask for the second LED on the board. */
-			#define LEDS_LED2        (1 << 1)
-
-			/** LED mask for the third LED on the board. */
-			#define LEDS_LED3        (1 << 2)
-
-			/** LED mask for the fourth LED on the board. */
-			#define LEDS_LED4        (1 << 3)
-
-			/** LED mask for all the LEDs on the board. */
-			#define LEDS_ALL_LEDS    (LEDS_LED1 | LEDS_LED2 | LEDS_LED3 | LEDS_LED4)
-
-			/** LED mask for none of the board LEDs. */
-			#define LEDS_NO_LEDS     0
-
-		/* Inline Functions: */
-		#if !defined(__DOXYGEN__)
-			static inline void LEDs_Init(void)
-			{
-
-			}
-
-			static inline void LEDs_Disable(void)
-			{
-
-			}
-
-			static inline void LEDs_TurnOnLEDs(const uint8_t LEDMask)
-			{
-
-			}
-
-			static inline void LEDs_TurnOffLEDs(const uint8_t LEDMask)
-			{
-
-			}
-
-			static inline void LEDs_SetAllLEDs(const uint8_t LEDMask)
-			{
-
-			}
-
-			static inline void LEDs_ChangeLEDs(const uint8_t LEDMask, const uint8_t ActiveMask)
-			{
-
-			}
-
-			static inline void LEDs_ToggleLEDs(const uint8_t LEDMask)
-			{
-
-			}
-
-			static inline uint8_t LEDs_GetLEDs(void) ATTR_WARN_UNUSED_RESULT;
-			static inline uint8_t LEDs_GetLEDs(void)
-			{
-				return 0;
-			}
-		#endif
-
-	/* Disable C linkage for C++ Compilers: */
-		#if defined(__cplusplus)
-			}
-		#endif
-
-#endif
-

+ 0 - 89
lib/lufa/BuildTests/BoardDriverTest/BoardDeviceMap.cfg

@@ -1,89 +0,0 @@
-#
-#             LUFA Library
-#     Copyright (C) Dean Camera, 2017.
-#
-#  dean [at] fourwalledcubicle [dot] com
-#           www.lufa-lib.org
-#
-#
-# =============================================================================
-# Board configuration map script, processed with the "BoardDriverTest"
-# makefile. This script file maps the possible LUFA target BOARD makefile
-# values in user projects to a specific architecture and device. This mapping is
-# then used by the makefile to build all possible drivers for that board, to
-# detect any missing or erroneous functions. To add a new board mapping, use
-# the syntax:
-#
-#    BOARD DEFINE = {ARCH} : {MCU} :
-#
-# And re-run the makefile. Note that each board may have only one target.
-# =============================================================================
-#
-#
-# ----------------- AVR8 Boards ------------------
-BOARD_ADAFRUITU4        = AVR8  : atmega32u4     :
-BOARD_ATAVRUSBRF01      = AVR8  : at90usb1287    :
-BOARD_BENITO            = AVR8  : at90usb162     :
-BOARD_BIGMULTIO         = AVR8  : atmega32u4     :
-BOARD_BLACKCAT          = AVR8  : at90usb162     :
-BOARD_BUI               = AVR8  : at90usb646     :
-BOARD_BUMBLEB           = AVR8  : at90usb162     :
-BOARD_CULV3             = AVR8  : atmega32u4     :
-BOARD_DUCE              = AVR8  : atmega32u2     :
-BOARD_EVK527            = AVR8  : atmega32u4     :
-BOARD_JMDBU2            = AVR8  : atmega32u2     :
-BOARD_LEONARDO          = AVR8  : atmega32u4     :
-BOARD_MAXIMUS           = AVR8  : at90usb162     :
-BOARD_MICROPENDOUS_32U2 = AVR8  : atmega32u2     :
-BOARD_MICROPENDOUS_A    = AVR8  : at90usb1287    :
-BOARD_MICROPENDOUS_1    = AVR8  : at90usb162     :
-BOARD_MICROPENDOUS_2    = AVR8  : atmega32u4     :
-BOARD_MICROPENDOUS_3    = AVR8  : at90usb1287    :
-BOARD_MICROPENDOUS_4    = AVR8  : at90usb1287    :
-BOARD_MICROPENDOUS_DIP  = AVR8  : at90usb1287    :
-BOARD_MICROPENDOUS_REV1 = AVR8  : at90usb1287    :
-BOARD_MICROPENDOUS_REV2 = AVR8  : at90usb1287    :
-BOARD_MICROSIN162       = AVR8  : atmega162      :
-BOARD_MINIMUS           = AVR8  : atmega32u2     :
-BOARD_MULTIO            = AVR8  : at90usb162     :
-BOARD_NONE              = AVR8  : at90usb1287    :
-BOARD_OLIMEX162         = AVR8  : at90usb162     :
-BOARD_OLIMEX32U4        = AVR8  : atmega32u4     :
-BOARD_OLIMEXT32U4       = AVR8  : atmega32u4     :
-BOARD_OLIMEXISPMK2      = AVR8  : at90usb162     :
-BOARD_RZUSBSTICK        = AVR8  : at90usb1287    :
-BOARD_SPARKFUN8U2       = AVR8  : atmega8u2      :
-BOARD_STK525            = AVR8  : at90usb647     :
-BOARD_STK526            = AVR8  : at90usb162     :
-BOARD_TEENSY            = AVR8  : at90usb162     :
-BOARD_TEENSY2           = AVR8  : at90usb646     :
-BOARD_TUL               = AVR8  : atmega32u4     :
-BOARD_UDIP              = AVR8  : atmega32u2     :
-BOARD_UNO               = AVR8  : atmega8u2      :
-BOARD_USB2AX            = AVR8  : atmega32u2     :
-BOARD_USB2AX_V3         = AVR8  : atmega32u2     :
-BOARD_USB2AX_V31        = AVR8  : atmega32u2     :
-BOARD_USBFOO            = AVR8  : atmega162      :
-BOARD_USBKEY            = AVR8  : at90usb1287    :
-BOARD_USBTINYMKII       = AVR8  : at90usb162     :
-BOARD_USER              = AVR8  : at90usb1287    :
-BOARD_XPLAIN            = AVR8  : at90usb1287    :
-BOARD_XPLAIN_REV1       = AVR8  : at90usb1287    :
-BOARD_STANGE_ISP        = AVR8  : at90usb162     :
-BOARD_U2S               = AVR8  : atmega32u2     :
-BOARD_YUN               = AVR8  : atmega32u4     :
-BOARD_MICRO             = AVR8  : atmega32u4     :
-BOARD_POLOLUMICRO       = AVR8  : atmega32u4     :
-BOARD_XPLAINED_MINI     = AVR8  : atmega32u4     :
-#
-# ----------------- XMEGA Boards -----------------
-BOARD_A3BU_XPLAINED     = XMEGA : atxmega256a3bu :
-BOARD_B1_XPLAINED       = XMEGA : atxmega128b1   :
-BOARD_C3_XPLAINED       = XMEGA : atxmega384c3   :
-#
-# ------------------ UC3 Boards ------------------
-BOARD_EVK1100           = UC3   : uc3a0512       :
-BOARD_EVK1101           = UC3   : uc3b0256       :
-BOARD_EVK1104           = UC3   : uc3a3256       :
-BOARD_UC3A3_XPLAINED    = UC3   : uc3a3256       :
-#

+ 0 - 115
lib/lufa/BuildTests/BoardDriverTest/Test.c

@@ -1,115 +0,0 @@
-/*
-             LUFA Library
-     Copyright (C) Dean Camera, 2017.
-
-  dean [at] fourwalledcubicle [dot] com
-           www.lufa-lib.org
-*/
-
-/*
-  Copyright 2017  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.
-*/
-
-#include <LUFA/Common/Common.h>
-#include <LUFA/Drivers/Board/Board.h>
-#include <LUFA/Drivers/Board/Buttons.h>
-#include <LUFA/Drivers/Board/Dataflash.h>
-#include <LUFA/Drivers/Board/LEDs.h>
-#include <LUFA/Drivers/Board/Joystick.h>
-
-#if defined(BOARD_HAS_BUTTONS) == defined(BOARD_DUMMY_BUTTONS_IMPLEMENTATION)
-	#error Mismatch between BOARD_HAS_BUTTONS and implementation.
-#endif
-
-#if defined(BOARD_HAS_DATAFLASH) == defined(BOARD_DUMMY_DATAFLASH_IMPLEMENTATION)
-	#error Mismatch between BOARD_HAS_DATAFLASH and implementation.
-#endif
-
-#if defined(BOARD_HAS_LEDS) == defined(BOARD_DUMMY_LEDS_IMPLEMENTATION)
-	#error Mismatch between BOARD_HAS_LEDS and implementation.
-#endif
-
-#if defined(BOARD_HAS_JOYSTICK) == defined(BOARD_DUMMY_JOYSTICK_IMPLEMENTATION)
-	#error Mismatch between BOARD_HAS_JOYSTICK and implementation.
-#endif
-
-int main(void)
-{
-	uint_reg_t Dummy;
-
-	/* =============================
-	 *     Buttons Compile Check
-	 * ============================= */
-	// cppcheck-suppress redundantAssignment
-	Dummy = BUTTONS_BUTTON1;
-	Buttons_Init();
-	// cppcheck-suppress redundantAssignment
-	Dummy = Buttons_GetStatus();
-	Buttons_Disable();
-
-	/* =============================
-	 *    Dataflash Compile Check
-	 * ============================= */
-	// cppcheck-suppress redundantAssignment
-	Dummy = DATAFLASH_TOTALCHIPS + DATAFLASH_NO_CHIP + DATAFLASH_CHIP1 + DATAFLASH_PAGE_SIZE + DATAFLASH_PAGES;
-	Dataflash_Init();
-	Dataflash_TransferByte(0);
-	Dataflash_SendByte(0);
-	// cppcheck-suppress redundantAssignment
-	Dummy = Dataflash_ReceiveByte();
-	// cppcheck-suppress redundantAssignment
-	Dummy = Dataflash_GetSelectedChip();
-	Dataflash_SelectChip(DATAFLASH_CHIP1);
-	Dataflash_DeselectChip();
-	Dataflash_SelectChipFromPage(0);
-	Dataflash_ToggleSelectedChipCS();
-	Dataflash_WaitWhileBusy();
-	Dataflash_SendAddressBytes(0, 0);
-
-	/* =============================
-	 *       LEDs Compile Check
-	 * ============================= */
-	// cppcheck-suppress redundantAssignment
-	Dummy = LEDS_LED1 + LEDS_LED2 + LEDS_LED3 + LEDS_LED4;
-	LEDs_Init();
-	LEDs_TurnOnLEDs(LEDS_ALL_LEDS);
-	LEDs_TurnOffLEDs(LEDS_ALL_LEDS);
-	LEDs_SetAllLEDs(LEDS_ALL_LEDS);
-	LEDs_ChangeLEDs(LEDS_ALL_LEDS, LEDS_NO_LEDS);
-	LEDs_ToggleLEDs(LEDS_ALL_LEDS);
-	// cppcheck-suppress redundantAssignment
-	Dummy = LEDs_GetLEDs();
-	LEDs_Disable();
-
-	/* =============================
-	 *     Joystick Compile Check
-	 * ============================= */
-	// cppcheck-suppress redundantAssignment
-	Dummy = JOY_LEFT + JOY_RIGHT + JOY_UP + JOY_DOWN + JOY_PRESS;
-	Joystick_Init();
-	// cppcheck-suppress redundantAssignment
-	Dummy = Joystick_GetStatus();
-	Joystick_Disable();
-
-	(void)Dummy;
-}
-
-

+ 0 - 69
lib/lufa/BuildTests/BoardDriverTest/makefile

@@ -1,69 +0,0 @@
-#
-#             LUFA Library
-#     Copyright (C) Dean Camera, 2017.
-#
-#  dean [at] fourwalledcubicle [dot] com
-#           www.lufa-lib.org
-#
-
-# Makefile for the board driver build test. This
-# test attempts to build a dummy project with all
-# possible board targets using their respective
-# compiler.
-
-# Path to the LUFA library core
-LUFA_PATH := ../../LUFA/
-
-# Build test cannot be run with multiple parallel jobs
-.NOTPARALLEL:
-
-all: begin makeboardlist testboards clean end
-
-begin:
-	@echo Executing build test "BoardDriverTest".
-	@echo
-
-end:
-	@echo Build test "BoardDriverTest" complete.
-	@echo
-
-makeboardlist:
-	@grep "BOARD_" $(patsubst %/,%,$(LUFA_PATH))/Common/BoardTypes.h | cut -d'#' -f2 | cut -d' ' -f2 | grep "BOARD_" > BoardList.txt
-
-testboards:
-	@echo "buildtest:" > BuildMakefile
-
-	@while read line;                                                                               \
-	 do                                                                                             \
-	   build_cfg=`grep "$$line " BoardDeviceMap.cfg | grep -v "#" | cut -d'=' -f2- | sed 's/ //g'`; \
-	                                                                                                \
-	   build_board=$$line;                                                                          \
-	   build_arch=`echo $$build_cfg | cut -d':' -f1`;                                               \
-	   build_mcu=`echo $$build_cfg | cut -d':' -f2`;                                                \
-	                                                                                                \
-	   if ( test -z "$$build_cfg" ); then                                                           \
-	     echo "No matching information set for board $$build_board";                                \
-	   else                                                                                         \
-	     echo "Found board configuration for $$build_board - $$build_arch, $$build_mcu";            \
-		                                                                                            \
-		 printf "\t@echo Building dummy project for $$build_board...\n" >> BuildMakefile;           \
-		 printf "\t$(MAKE) -f makefile.test clean elf MCU=%s ARCH=%s BOARD=%s\n\n" $$build_mcu $$build_arch $$build_board >> BuildMakefile; \
-	   fi;                                                                                          \
-	 done < BoardList.txt
-
-	 $(MAKE) -f BuildMakefile buildtest
-
-clean:
-	rm -f BuildMakefile
-	rm -f BoardList.txt
-	$(MAKE) -f makefile.test clean BOARD=NONE ARCH=AVR8 MCU=at90usb1287
-	$(MAKE) -f makefile.test clean BOARD=NONE ARCH=XMEGA MCU=atxmega128a1u
-	$(MAKE) -f makefile.test clean BOARD=NONE ARCH=UC3 MCU=uc3a0256
-
-%:
-
-.PHONY: all begin end makeboardlist testboards clean
-
-# Include common DMBS build system modules
-DMBS_PATH      ?= $(LUFA_PATH)/Build/DMBS/DMBS
-include $(DMBS_PATH)/core.mk

+ 0 - 35
lib/lufa/BuildTests/BoardDriverTest/makefile.test

@@ -1,35 +0,0 @@
-#
-#             LUFA Library
-#     Copyright (C) Dean Camera, 2017.
-#
-#  dean [at] fourwalledcubicle [dot] com
-#           www.lufa-lib.org
-#
-# --------------------------------------
-#         LUFA Project Makefile.
-# --------------------------------------
-
-# Run "make help" for target help.
-
-MCU          =
-ARCH         =
-BOARD        =
-F_CPU        = $(F_USB)
-F_USB        = 8000000
-OPTIMIZATION = 1
-TARGET       = Test
-SRC          = $(TARGET).c
-LUFA_PATH    = ../../LUFA
-CC_FLAGS     = -Werror
-DEBUG_LEVEL  = 0
-
-
-# Include LUFA-specific DMBS extension modules
-DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA
-include $(DMBS_LUFA_PATH)/lufa-sources.mk
-include $(DMBS_LUFA_PATH)/lufa-gcc.mk
-
-# Include common DMBS build system modules
-DMBS_PATH      ?= $(LUFA_PATH)/Build/DMBS/DMBS
-include $(DMBS_PATH)/core.mk
-include $(DMBS_PATH)/gcc.mk

+ 0 - 167
lib/lufa/BuildTests/BootloaderTest/BootloaderDeviceMap.cfg

@@ -1,167 +0,0 @@
-#
-#             LUFA Library
-#     Copyright (C) Dean Camera, 2017.
-#
-#  dean [at] fourwalledcubicle [dot] com
-#           www.lufa-lib.org
-#
-#
-# =============================================================================
-# Bootloader configuration map script, processed with the "BootloaderTest"
-# makefile. This script file defines the targets for each LUFA bootloader,
-# which are then built as part of the build test to ensure that there are no
-# failures on all standard configurations. To add a new build target for a
-# bootloader to this script, use the format:
-#
-#    BOOTLOADER = {ARCH} : {MCU} : {BOARD} : {FLASH SIZE KB} : {BOOT SIZE KB} : {F_USB MHZ}
-#
-# And re-run the makefile.
-# =============================================================================
-#
-#
-# ------------ CDC Bootloader --------------------
-CDC         = AVR8 : at90usb1287 : XPLAIN   : 128 : 8 :  8 :
-CDC         = AVR8 : at90usb1287 : NONE     : 128 : 8 :  8 :
-CDC         = AVR8 : at90usb1287 : NONE     : 128 : 4 :  8 :
-CDC         = AVR8 : at90usb647  : NONE     :  64 : 4 :  8 :
-CDC         = AVR8 : at90usb1286 : NONE     : 128 : 8 :  8 :
-CDC         = AVR8 : at90usb1286 : NONE     : 128 : 4 :  8 :
-CDC         = AVR8 : at90usb646  : NONE     :  64 : 4 :  8 :
-CDC         = AVR8 : atmega32u4  : NONE     :  32 : 4 :  8 :
-CDC         = AVR8 : atmega16u4  : NONE     :  16 : 4 :  8 :
-CDC         = AVR8 : atmega32u2  : NONE     :  32 : 4 :  8 :
-CDC         = AVR8 : atmega16u2  : NONE     :  16 : 4 :  8 :
-CDC         = AVR8 : atmega8u2   : NONE     :   8 : 4 :  8 :
-CDC         = AVR8 : at90usb162  : NONE     :  16 : 4 :  8 :
-CDC         = AVR8 : at90usb82   : NONE     :   8 : 4 :  8 :
-CDC         = AVR8 : at90usb1287 : NONE     : 128 : 8 : 16 :
-CDC         = AVR8 : at90usb1287 : NONE     : 128 : 4 : 16 :
-CDC         = AVR8 : at90usb647  : NONE     :  64 : 4 : 16 :
-CDC         = AVR8 : at90usb1286 : NONE     : 128 : 8 : 16 :
-CDC         = AVR8 : at90usb1286 : NONE     : 128 : 4 : 16 :
-CDC         = AVR8 : at90usb646  : NONE     :  64 : 4 : 16 :
-CDC         = AVR8 : atmega32u4  : NONE     :  32 : 4 : 16 :
-CDC         = AVR8 : atmega16u4  : NONE     :  16 : 4 : 16 :
-CDC         = AVR8 : atmega32u2  : NONE     :  32 : 4 : 16 :
-CDC         = AVR8 : atmega16u2  : NONE     :  16 : 4 : 16 :
-CDC         = AVR8 : atmega8u2   : NONE     :   8 : 4 : 16 :
-CDC         = AVR8 : at90usb162  : NONE     :  16 : 4 : 16 :
-CDC         = AVR8 : at90usb82   : NONE     :   8 : 4 : 16 :
-#
-# ------------ DFU Bootloader --------------------
-DFU         = AVR8 : at90usb1287 : XPLAIN   : 128 : 8 :  8 :
-DFU         = AVR8 : at90usb1287 : NONE     : 128 : 8 :  8 :
-DFU         = AVR8 : at90usb1287 : NONE     : 128 : 4 :  8 :
-DFU         = AVR8 : at90usb647  : NONE     :  64 : 4 :  8 :
-DFU         = AVR8 : at90usb1286 : NONE     : 128 : 8 :  8 :
-DFU         = AVR8 : at90usb1286 : NONE     : 128 : 4 :  8 :
-DFU         = AVR8 : at90usb646  : NONE     :  64 : 4 :  8 :
-DFU         = AVR8 : atmega32u4  : NONE     :  32 : 4 :  8 :
-DFU         = AVR8 : atmega16u4  : NONE     :  16 : 4 :  8 :
-DFU         = AVR8 : atmega32u2  : NONE     :  32 : 4 :  8 :
-DFU         = AVR8 : atmega16u2  : NONE     :  16 : 4 :  8 :
-DFU         = AVR8 : atmega8u2   : NONE     :   8 : 4 :  8 :
-DFU         = AVR8 : at90usb162  : NONE     :  16 : 4 :  8 :
-DFU         = AVR8 : at90usb82   : NONE     :   8 : 4 :  8 :
-DFU         = AVR8 : at90usb1287 : NONE     : 128 : 8 : 16 :
-DFU         = AVR8 : at90usb1287 : NONE     : 128 : 4 : 16 :
-DFU         = AVR8 : at90usb647  : NONE     :  64 : 4 : 16 :
-DFU         = AVR8 : at90usb1286 : NONE     : 128 : 8 : 16 :
-DFU         = AVR8 : at90usb1286 : NONE     : 128 : 4 : 16 :
-DFU         = AVR8 : at90usb646  : NONE     :  64 : 4 : 16 :
-DFU         = AVR8 : atmega32u4  : NONE     :  32 : 4 : 16 :
-DFU         = AVR8 : atmega16u4  : NONE     :  16 : 4 : 16 :
-DFU         = AVR8 : atmega32u2  : NONE     :  32 : 4 : 16 :
-DFU         = AVR8 : atmega16u2  : NONE     :  16 : 4 : 16 :
-DFU         = AVR8 : atmega8u2   : NONE     :   8 : 4 : 16 :
-DFU         = AVR8 : at90usb162  : NONE     :  16 : 4 : 16 :
-DFU         = AVR8 : at90usb82   : NONE     :   8 : 4 : 16 :
-#
-# ------------ HID Bootloader --------------------
-HID         = AVR8 : at90usb1287 : NONE     : 128 : 8 :  8 :
-HID         = AVR8 : at90usb1287 : NONE     : 128 : 4 :  8 :
-HID         = AVR8 : at90usb647  : NONE     :  64 : 4 :  8 :
-HID         = AVR8 : at90usb1286 : NONE     : 128 : 8 :  8 :
-HID         = AVR8 : at90usb1286 : NONE     : 128 : 4 :  8 :
-HID         = AVR8 : at90usb646  : NONE     :  64 : 4 :  8 :
-HID         = AVR8 : atmega32u4  : NONE     :  32 : 4 :  8 :
-HID         = AVR8 : atmega16u4  : NONE     :  16 : 4 :  8 :
-HID         = AVR8 : atmega32u2  : NONE     :  32 : 2 :  8 :
-HID         = AVR8 : atmega32u2  : NONE     :  32 : 4 :  8 :
-HID         = AVR8 : atmega16u2  : NONE     :  16 : 2 :  8 :
-HID         = AVR8 : atmega16u2  : NONE     :  16 : 4 :  8 :
-HID         = AVR8 : atmega8u2   : NONE     :   8 : 2 :  8 :
-HID         = AVR8 : atmega8u2   : NONE     :   8 : 4 :  8 :
-HID         = AVR8 : at90usb162  : NONE     :  16 : 2 :  8 :
-HID         = AVR8 : at90usb162  : NONE     :  16 : 4 :  8 :
-HID         = AVR8 : at90usb162  : NONE     :  16 : 2 :  8 :
-HID         = AVR8 : at90usb162  : NONE     :  16 : 4 :  8 :
-HID         = AVR8 : at90usb1287 : NONE     : 128 : 8 :  8 :
-HID         = AVR8 : at90usb1287 : NONE     : 128 : 4 :  8 :
-HID         = AVR8 : at90usb647  : NONE     :  64 : 4 :  8 :
-HID         = AVR8 : at90usb1286 : NONE     : 128 : 8 : 16 :
-HID         = AVR8 : at90usb1286 : NONE     : 128 : 4 : 16 :
-HID         = AVR8 : at90usb646  : NONE     :  64 : 4 : 16 :
-HID         = AVR8 : atmega32u4  : NONE     :  32 : 4 : 16 :
-HID         = AVR8 : atmega16u4  : NONE     :  16 : 4 : 16 :
-HID         = AVR8 : atmega32u2  : NONE     :  32 : 2 : 16 :
-HID         = AVR8 : atmega32u2  : NONE     :  32 : 4 : 16 :
-HID         = AVR8 : atmega16u2  : NONE     :  16 : 2 : 16 :
-HID         = AVR8 : atmega16u2  : NONE     :  16 : 4 : 16 :
-HID         = AVR8 : atmega8u2   : NONE     :   8 : 2 : 16 :
-HID         = AVR8 : atmega8u2   : NONE     :   8 : 4 : 16 :
-HID         = AVR8 : at90usb162  : NONE     :  16 : 2 : 16 :
-HID         = AVR8 : at90usb162  : NONE     :  16 : 4 : 16 :
-HID         = AVR8 : at90usb162  : NONE     :  16 : 2 : 16 :
-HID         = AVR8 : at90usb162  : NONE     :  16 : 4 : 16 :
-#
-# ---------- Printer Bootloader ------------------
-Printer     = AVR8 : at90usb1287 : NONE     : 128 : 8 :  8 :
-Printer     = AVR8 : at90usb1287 : NONE     : 128 : 4 :  8 :
-Printer     = AVR8 : at90usb647  : NONE     :  64 : 4 :  8 :
-Printer     = AVR8 : at90usb1286 : NONE     : 128 : 8 :  8 :
-Printer     = AVR8 : at90usb1286 : NONE     : 128 : 4 :  8 :
-Printer     = AVR8 : at90usb646  : NONE     :  64 : 4 :  8 :
-Printer     = AVR8 : atmega32u4  : NONE     :  32 : 4 :  8 :
-Printer     = AVR8 : atmega16u4  : NONE     :  16 : 4 :  8 :
-Printer     = AVR8 : atmega32u2  : NONE     :  32 : 4 :  8 :
-Printer     = AVR8 : atmega16u2  : NONE     :  16 : 4 :  8 :
-Printer     = AVR8 : atmega8u2   : NONE     :   8 : 4 :  8 :
-Printer     = AVR8 : at90usb162  : NONE     :  16 : 4 :  8 :
-Printer     = AVR8 : at90usb82   : NONE     :   8 : 4 :  8 :
-Printer     = AVR8 : at90usb1287 : NONE     : 128 : 8 : 16 :
-Printer     = AVR8 : at90usb1287 : NONE     : 128 : 4 : 16 :
-Printer     = AVR8 : at90usb647  : NONE     :  64 : 4 : 16 :
-Printer     = AVR8 : at90usb1286 : NONE     : 128 : 8 : 16 :
-Printer     = AVR8 : at90usb1286 : NONE     : 128 : 4 : 16 :
-Printer     = AVR8 : at90usb646  : NONE     :  64 : 4 : 16 :
-Printer     = AVR8 : atmega32u4  : NONE     :  32 : 4 : 16 :
-Printer     = AVR8 : atmega16u4  : NONE     :  16 : 4 : 16 :
-Printer     = AVR8 : atmega32u2  : NONE     :  32 : 4 : 16 :
-Printer     = AVR8 : atmega16u2  : NONE     :  16 : 4 : 16 :
-Printer     = AVR8 : atmega8u2   : NONE     :   8 : 4 : 16 :
-Printer     = AVR8 : at90usb162  : NONE     :  16 : 4 : 16 :
-Printer     = AVR8 : at90usb82   : NONE     :   8 : 4 : 16 :
-#
-# ---------- Mass Storage Bootloader -----------------
-MassStorage = AVR8 : at90usb1287 : XPLAIN   : 128 : 8 :  8 :
-MassStorage = AVR8 : at90usb1287 : NONE     : 128 : 8 :  8 :
-MassStorage = AVR8 : at90usb1287 : NONE     : 128 : 4 :  8 :
-MassStorage = AVR8 : at90usb647  : NONE     :  64 : 4 :  8 :
-MassStorage = AVR8 : at90usb1286 : NONE     : 128 : 8 :  8 :
-MassStorage = AVR8 : at90usb1286 : NONE     : 128 : 4 :  8 :
-MassStorage = AVR8 : at90usb646  : NONE     :  64 : 4 :  8 :
-MassStorage = AVR8 : atmega32u4  : LEONARDO :  32 : 4 : 16 :
-MassStorage = AVR8 : atmega32u4  : NONE     :  32 : 4 :  8 :
-MassStorage = AVR8 : atmega16u4  : NONE     :  16 : 4 :  8 :
-MassStorage = AVR8 : atmega32u2  : NONE     :  32 : 4 :  8 :
-MassStorage = AVR8 : at90usb1287 : NONE     : 128 : 8 : 16 :
-MassStorage = AVR8 : at90usb1287 : NONE     : 128 : 4 : 16 :
-MassStorage = AVR8 : at90usb647  : NONE     :  64 : 4 : 16 :
-MassStorage = AVR8 : at90usb1286 : NONE     : 128 : 8 : 16 :
-MassStorage = AVR8 : at90usb1286 : NONE     : 128 : 4 : 16 :
-MassStorage = AVR8 : at90usb646  : NONE     :  64 : 4 : 16 :
-MassStorage = AVR8 : atmega32u4  : NONE     :  32 : 4 : 16 :
-MassStorage = AVR8 : atmega16u4  : NONE     :  16 : 4 : 16 :
-MassStorage = AVR8 : atmega32u2  : NONE     :  32 : 4 : 16 :
-#

+ 0 - 65
lib/lufa/BuildTests/BootloaderTest/makefile

@@ -1,65 +0,0 @@
-#
-#             LUFA Library
-#     Copyright (C) Dean Camera, 2017.
-#
-#  dean [at] fourwalledcubicle [dot] com
-#           www.lufa-lib.org
-#
-
-# Makefile for the bootloader build test. This
-# test attempts to build all the bootloaders
-# with all supported device configurations.
-
-# Path to the LUFA library core
-LUFA_PATH := ../../LUFA/
-
-# Build test cannot be run with multiple parallel jobs
-.NOTPARALLEL:
-
-all: begin testbootloaders clean end
-
-begin:
-	@echo Executing build test "BootloaderTest".
-	@echo
-
-end:
-	@echo Build test "BootloaderTest" complete.
-	@echo
-
-testbootloaders:
-	@echo "buildtest:" > BuildMakefile
-
-	@while read line;                                         \
-	 do                                                       \
-	   build_cfg=`echo $$line | grep -v "#" | sed 's/ //g'`;  \
-	                                                          \
-	   if ( test -n "$$build_cfg" ); then                     \
-	     build_bootloader=`echo $$build_cfg | cut -d'=' -f1`; \
-		 build_cfg=`echo $$build_cfg | cut -d'=' -f2-`;       \
-		                                                      \
-	     build_arch=`echo $$build_cfg | cut -d':' -f1`;       \
-	     build_mcu=`echo $$build_cfg | cut -d':' -f2`;        \
-	     build_board=`echo $$build_cfg | cut -d':' -f3`;      \
-	     build_flashsize=`echo $$build_cfg | cut -d':' -f4`;  \
-	     build_bootsize=`echo $$build_cfg | cut -d':' -f5`;   \
-	     build_fusb=`echo $$build_cfg | cut -d':' -f6`;       \
-	                                                          \
-	     printf "Found '%s' bootloader configuration (FLASH: %3s KB | BOOT: %3s KB | MCU: %12s / %4s | BOARD: %s | F_USB: %sMHz)\n" $$build_bootloader $$build_flashsize $$build_bootsize $$build_mcu $$build_arch $$build_board $$build_fusb; \
-	                                                          \
-	     printf "\t@echo Building bootloader %s - %s - FLASH: %s KB, BOOT: %s KB, BOARD: %s, F_USB: %sMHz\n" $$build_bootloader $$build_mcu $$build_flashsize $$build_bootsize $$build_board $$build_fusb >> BuildMakefile; \
-	     printf "\t$(MAKE) -C $(patsubst %/,%,$(LUFA_PATH))/../Bootloaders/%s/ clean elf ARCH=%s MCU=%s BOARD=%s FLASH_SIZE_KB=%s BOOT_SECTION_SIZE_KB=%s F_USB=%s000000 DEBUG_LEVEL=0\n\n" $$build_bootloader $$build_arch $$build_mcu $$build_board $$build_flashsize $$build_bootsize $$build_fusb >> BuildMakefile; \
-	   fi;                                                    \
-	 done < BootloaderDeviceMap.cfg
-
-	 $(MAKE) -f BuildMakefile buildtest
-
-clean:
-	rm -f BuildMakefile
-
-%:
-
-.PHONY: all begin end testbootloaders clean
-
-# Include common DMBS build system modules
-DMBS_PATH      ?= $(LUFA_PATH)/Build/DMBS/DMBS
-include $(DMBS_PATH)/core.mk

+ 0 - 41
lib/lufa/BuildTests/ModuleTest/Dummy.S

@@ -1,41 +0,0 @@
-/*
-             LUFA Library
-     Copyright (C) Dean Camera, 2017.
-
-  dean [at] fourwalledcubicle [dot] com
-           www.lufa-lib.org
-*/
-
-/*
-  Copyright 2017  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.
-*/
-
-.section .text
-
-
-# Mandatory entry point for successful compilation and link
-.global main
-main:
-
-
-# Mandatory callback needed for base compile of the USB driver
-.global CALLBACK_USB_GetDescriptor
-CALLBACK_USB_GetDescriptor:

+ 0 - 56
lib/lufa/BuildTests/ModuleTest/Modules.h

@@ -1,56 +0,0 @@
-/*
-             LUFA Library
-     Copyright (C) Dean Camera, 2017.
-
-  dean [at] fourwalledcubicle [dot] com
-           www.lufa-lib.org
-*/
-
-/*
-  Copyright 2017  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.
-*/
-
-#include <LUFA/Common/Common.h>
-
-#include <LUFA/Platform/Platform.h>
-
-#include <LUFA/Drivers/USB/USB.h>
-#include <LUFA/Drivers/Misc/RingBuffer.h>
-#include <LUFA/Drivers/Misc/TerminalCodes.h>
-
-#if (ARCH == ARCH_AVR8)
-	#if defined(ADC)
-		#include <LUFA/Drivers/Peripheral/ADC.h>
-	#endif
-
-	#include <LUFA/Drivers/Peripheral/Serial.h>
-	#include <LUFA/Drivers/Peripheral/SerialSPI.h>
-	#include <LUFA/Drivers/Peripheral/SPI.h>
-
-	#if defined(TWCR)
-		#include <LUFA/Drivers/Peripheral/TWI.h>
-	#endif
-#elif (ARCH == ARCH_XMEGA)
-	#include <LUFA/Drivers/Peripheral/Serial.h>
-	#include <LUFA/Drivers/Peripheral/SerialSPI.h>
-	#include <LUFA/Drivers/Peripheral/SPI.h>
-	#include <LUFA/Drivers/Peripheral/TWI.h>
-#endif

+ 0 - 31
lib/lufa/BuildTests/ModuleTest/Test_C.c

@@ -1,31 +0,0 @@
-/*
-             LUFA Library
-     Copyright (C) Dean Camera, 2017.
-
-  dean [at] fourwalledcubicle [dot] com
-           www.lufa-lib.org
-*/
-
-/*
-  Copyright 2017  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.
-*/
-
-#include "Modules.h"

+ 0 - 31
lib/lufa/BuildTests/ModuleTest/Test_CPP.cpp

@@ -1,31 +0,0 @@
-/*
-             LUFA Library
-     Copyright (C) Dean Camera, 2017.
-
-  dean [at] fourwalledcubicle [dot] com
-           www.lufa-lib.org
-*/
-
-/*
-  Copyright 2017  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.
-*/
-
-#include "Modules.h"

+ 0 - 67
lib/lufa/BuildTests/ModuleTest/makefile

@@ -1,67 +0,0 @@
-#
-#             LUFA Library
-#     Copyright (C) Dean Camera, 2017.
-#
-#  dean [at] fourwalledcubicle [dot] com
-#           www.lufa-lib.org
-#
-
-# Makefile for the module build test. This test
-# attempts to build as many modules as possible
-# under all supported architectures, and include
-# all module headers in a simple C and C++
-# application.
-
-# Path to the LUFA library core
-LUFA_PATH := ../../LUFA/
-
-# Build test cannot be run with multiple parallel jobs
-.NOTPARALLEL:
-
-# List of device families per architecture, one device per architecture sub-family
-AVR8_FAMILIES   := at90usb1287 at90usb1286 atmega16u4 atmega16u2 at90usb162
-XMEGA_FAMILIES  := atxmega128a1u atxmega128a3u atxmega256a3bu atxmega128a4u atxmega128b1 atxmega128b3 atxmega128c3 atxmega32c4
-UC3_FAMILIES    := uc3a0256 uc3a1256 uc3a3256 uc3a4256 uc3b0256 uc3b1256
-
-# List of all device families, with a family postfix
-DEVICE_FAMILIES := $(AVR8_FAMILIES:%=%.avr8) $(XMEGA_FAMILIES:%=%.xmega) $(UC3_FAMILIES:%=%.uc3)
-
-
-all: begin $(DEVICE_FAMILIES) clean end
-
-arch_avr8:  begin $(AVR8_FAMILIES:%=%.avr8) end
-arch_xmega: begin $(XMEGA_FAMILIES:%=%.xmega) end
-arch_uc3:   begin $(UC3_FAMILIES:%=%.uc3) end
-
-begin:
-	@echo Executing build test "ModuleTest".
-	@echo
-
-end:
-	@echo Build test "ModuleTest" complete.
-	@echo
-
-%.avr8:
-	@echo Building ModuleTest for ARCH=AVR8 MCU=$(@:%.avr8=%)...
-	$(MAKE) -f makefile.test clean elf ARCH=AVR8 MCU=$(@:%.avr8=%)
-
-%.xmega:
-	@echo Building ModuleTest for ARCH=XMEGA MCU=$(@:%.xmega=%)...
-	$(MAKE) -f makefile.test clean elf ARCH=XMEGA MCU=$(@:%.xmega=%)
-
-%.uc3:
-	@echo Building ModuleTest for ARCH=UC3 MCU=$(@:%.uc3=%)...
-	$(MAKE) -f makefile.test clean elf ARCH=UC3 MCU=$(@:%.uc3=%)
-
-clean:
-	$(MAKE) -f makefile.test clean ARCH=AVR8 MCU=$(firstword $(AVR8_FAMILIES))
-	$(MAKE) -f makefile.test clean ARCH=XMEGA MCU=$(firstword $(XMEGA_FAMILIES))
-	$(MAKE) -f makefile.test clean ARCH=UC3 MCU=$(firstword $(UC3_FAMILIES))
-
-%:
-
-.PHONY: all arch_avr8 arch_xmega arch_uc3 begin end
-
-# Include common DMBS build system modules
-DMBS_PATH      ?= $(LUFA_PATH)/Build/DMBS/DMBS
-include $(DMBS_PATH)/core.mk

+ 0 - 94
lib/lufa/BuildTests/ModuleTest/makefile.test

@@ -1,94 +0,0 @@
-#
-#             LUFA Library
-#     Copyright (C) Dean Camera, 2017.
-#
-#  dean [at] fourwalledcubicle [dot] com
-#           www.lufa-lib.org
-#
-# --------------------------------------
-#         LUFA Project Makefile.
-# --------------------------------------
-
-# Run "make help" for target help.
-
-MCU          =
-ARCH         =
-BOARD        = NONE
-F_CPU        = $(F_USB)
-OPTIMIZATION = 1
-TARGET       = Test
-SRC          = $(TARGET)_C.c $(TARGET)_CPP.cpp Dummy.S $(LUFA_SRC_USB)
-LUFA_PATH    = ../../LUFA
-DEBUG_LEVEL  = 0
-
-ifeq ($(ARCH), AVR8)
-  F_USB        = 8000000
-else ifeq ($(ARCH), XMEGA)
-  F_USB        = 48000000
-else ifeq ($(ARCH), UC3)
-  F_USB        = 48000000
-endif
-
-# Generic C/C++ compiler flags
-CC_FLAGS  = -Wextra
-CC_FLAGS += -Werror
-CC_FLAGS += -Wformat=2
-CC_FLAGS += -Winit-self
-CC_FLAGS += -Wswitch-enum
-CC_FLAGS += -Wunused
-CC_FLAGS += -Wundef
-CC_FLAGS += -Wpointer-arith
-CC_FLAGS += -Wcast-align
-CC_FLAGS += -Wwrite-strings
-CC_FLAGS += -Wlogical-op
-CC_FLAGS += -Wmissing-declarations
-CC_FLAGS += -Wmissing-field-initializers
-CC_FLAGS += -Wmissing-format-attribute
-CC_FLAGS += -Woverlength-strings
-CC_FLAGS += -Wswitch-default
-CC_FLAGS += -Wfloat-equal
-CC_FLAGS += -Waggregate-return
-CC_FLAGS += -Wmissing-include-dirs
-
-# Disable warnings not supported by the version of GCC used for UC3 targets (FIXME)
-ifneq ($(ARCH), UC3)
-  CC_FLAGS += -Wdouble-promotion
-endif
-
-# Only enable redundant declaration warnings for AVR8 target (FIXME)
-ifeq ($(ARCH), AVR8)
-  CC_FLAGS += -Wredundant-decls
-endif
-
-# C compiler only flags
-C_FLAGS += -Wmissing-parameter-type
-C_FLAGS += -Wmissing-prototypes
-C_FLAGS += -Wnested-externs
-C_FLAGS += -Wbad-function-cast
-C_FLAGS += -Wstrict-prototypes
-C_FLAGS += -Wold-style-definition
-
-# Disable warnings not supported by the version of GCC used for UC3 targets (FIXME)
-ifneq ($(ARCH), UC3)
-  C_FLAGS += -Wunsuffixed-float-constants
-  C_FLAGS += -Wjump-misses-init
-endif
-
-# Only check C++ compatibility on the build files, to ensure headers are C++ compatible
-Test_C.c Test_CPP.cpp: CC_FLAGS += -Wc++-compat
-
-# Potential additional warnings to enable in the future (FIXME)
-#CC_FLAGS += -Wcast-qual
-#CC_FLAGS += -Wconversion
-#CC_FLAGS += -Wsign-conversion
-#CC_FLAGS += -pedantic
-
-# Include LUFA-specific DMBS extension modules
-DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA
-include $(DMBS_LUFA_PATH)/lufa-sources.mk
-include $(DMBS_LUFA_PATH)/lufa-gcc.mk
-
-# Include common DMBS build system modules
-DMBS_PATH      ?= $(LUFA_PATH)/Build/DMBS/DMBS
-include $(DMBS_PATH)/core.mk
-include $(DMBS_PATH)/gcc.mk

+ 0 - 42
lib/lufa/BuildTests/SingleUSBModeTest/Dummy.S

@@ -1,42 +0,0 @@
-/*
-             LUFA Library
-     Copyright (C) Dean Camera, 2017.
-
-  dean [at] fourwalledcubicle [dot] com
-           www.lufa-lib.org
-*/
-
-/*
-  Copyright 2017  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.
-*/
-
-.section .text
-
-
-# Mandatory entry point for successful compilation and link
-.global main
-main:
-	# Force code generation of the base USB stack
-	call USB_Init
-
-# Mandatory callback needed for base compile of the USB driver
-.global CALLBACK_USB_GetDescriptor
-CALLBACK_USB_GetDescriptor:

+ 0 - 32
lib/lufa/BuildTests/SingleUSBModeTest/Test.c

@@ -1,32 +0,0 @@
-/*
-             LUFA Library
-     Copyright (C) Dean Camera, 2017.
-
-  dean [at] fourwalledcubicle [dot] com
-           www.lufa-lib.org
-*/
-
-/*
-  Copyright 2017  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.
-*/
-
-#include <LUFA/Common/Common.h>
-#include <LUFA/Drivers/USB/USB.h>

+ 0 - 57
lib/lufa/BuildTests/SingleUSBModeTest/makefile

@@ -1,57 +0,0 @@
-#
-#             LUFA Library
-#     Copyright (C) Dean Camera, 2017.
-#
-#  dean [at] fourwalledcubicle [dot] com
-#           www.lufa-lib.org
-#
-
-# Makefile for the single USB mode build test.
-# This test attempts to build the USB module
-# under fixed device and fixed host modes under
-# all supported architectures
-
-# Path to the LUFA library core
-LUFA_PATH := ../../LUFA/
-
-# Build test cannot be run with multiple parallel jobs
-.NOTPARALLEL:
-
-all: begin compile clean end
-
-begin:
-	@echo Executing build test "SingleUSBModeTest".
-	@echo
-
-end:
-	@echo Build test "SingleUSBModeTest" complete.
-	@echo
-
-compile:
-	@echo Building SingleUSBModeTest for ARCH=AVR8 in device only mode...
-	$(MAKE) -f makefile.test clean elf ARCH=AVR8 MCU=at90usb1287 CC_FLAGS='-D USB_DEVICE_ONLY'
-
-	@echo Building SingleUSBModeTest for ARCH=AVR8 in host only mode...
-	$(MAKE) -f makefile.test clean elf ARCH=AVR8 MCU=at90usb1287 CC_FLAGS='-D USB_HOST_ONLY'
-
-	@echo Building SingleUSBModeTest for ARCH=XMEGA in device only mode...
-	$(MAKE) -f makefile.test clean elf ARCH=XMEGA MCU=atxmega128a1u CC_FLAGS='-D USB_DEVICE_ONLY'
-
-	@echo Building SingleUSBModeTest for ARCH=UC3 in device only mode...
-	$(MAKE) -f makefile.test clean elf ARCH=UC3 MCU=uc3a0256 CC_FLAGS='-D USB_DEVICE_ONLY'
-
-	@echo Building SingleUSBModeTest for ARCH=UC3 in host only mode...
-	$(MAKE) -f makefile.test clean elf ARCH=UC3 MCU=uc3a0256 CC_FLAGS='-D USB_HOST_ONLY'
-
-clean:
-	$(MAKE) -f makefile.test clean ARCH=AVR8 MCU=at90usb1287
-	$(MAKE) -f makefile.test clean ARCH=XMEGA MCU=atxmega128a1u
-	$(MAKE) -f makefile.test clean ARCH=UC3 MCU=uc3a0256
-
-%:
-
-.PHONY: begin end compile clean
-
-# Include common DMBS build system modules
-DMBS_PATH      ?= $(LUFA_PATH)/Build/DMBS/DMBS
-include $(DMBS_PATH)/core.mk

+ 0 - 75
lib/lufa/BuildTests/SingleUSBModeTest/makefile.test

@@ -1,75 +0,0 @@
-#
-#             LUFA Library
-#     Copyright (C) Dean Camera, 2017.
-#
-#  dean [at] fourwalledcubicle [dot] com
-#           www.lufa-lib.org
-#
-# --------------------------------------
-#         LUFA Project Makefile.
-# --------------------------------------
-
-# Run "make help" for target help.
-
-MCU          =
-ARCH         =
-BOARD        = NONE
-F_CPU        = $(F_USB)
-DEBUG_LEVEL  = 0
-
-ifeq ($(ARCH), AVR8)
-  F_USB      = 8000000
-else ifeq ($(ARCH), XMEGA)
-  F_USB      = 48000000
-else ifeq ($(ARCH), UC3)
-  F_USB      = 48000000
-endif
-
-OPTIMIZATION = 1
-TARGET       = Test
-SRC          = Test.c Dummy.S $(LUFA_SRC_USB)
-LUFA_PATH    = ../../LUFA
-
-# Generic C/C++ compiler flags
-CC_FLAGS  = -Wextra
-CC_FLAGS += -Werror
-CC_FLAGS += -Wformat=2
-CC_FLAGS += -Winit-self
-CC_FLAGS += -Wswitch-enum
-CC_FLAGS += -Wunused
-CC_FLAGS += -Wundef
-CC_FLAGS += -Wpointer-arith
-CC_FLAGS += -Wcast-align
-CC_FLAGS += -Wwrite-strings
-CC_FLAGS += -Wlogical-op
-CC_FLAGS += -Wmissing-declarations
-CC_FLAGS += -Wmissing-field-initializers
-CC_FLAGS += -Wmissing-format-attribute
-CC_FLAGS += -Woverlength-strings
-
-# Only enable rendundant declaration warnings for AVR8 target (FIXME)
-ifeq ($(ARCH), AVR8)
-  CC_FLAGS += -Wredundant-decls
-endif
-
-# C compiler only flags
-C_FLAGS += -Wmissing-parameter-type
-C_FLAGS += -Wnested-externs
-
-# Potential additional warnings to enable in the future (FIXME)
-#CC_FLAGS += -Wswitch-default
-#CC_FLAGS += -Wc++-compat
-#CC_FLAGS += -Wcast-qual
-#CC_FLAGS += -Wconversion
-#CC_FLAGS += -Wjump-misses-init
-#CC_FLAGS += -pedantic
-
-# Include LUFA-specific DMBS extension modules
-DMBS_LUFA_PATH ?= $(LUFA_PATH)/Build/LUFA
-include $(DMBS_LUFA_PATH)/lufa-sources.mk
-include $(DMBS_LUFA_PATH)/lufa-gcc.mk
-
-# Include common DMBS build system modules
-DMBS_PATH      ?= $(LUFA_PATH)/Build/DMBS/DMBS
-include $(DMBS_PATH)/core.mk
-include $(DMBS_PATH)/gcc.mk

+ 0 - 47
lib/lufa/BuildTests/StaticAnalysisTest/makefile

@@ -1,47 +0,0 @@
-#
-#             LUFA Library
-#     Copyright (C) Dean Camera, 2017.
-#
-#  dean [at] fourwalledcubicle [dot] com
-#           www.lufa-lib.org
-#
-
-# Static anlysis of the entire LUFA source tree, using the free cross-platform "cppcheck" tool.
-
-# Path to the LUFA library core
-LUFA_PATH := ../../LUFA/
-
-CPPCHECK_EXCLUDES := FATFs/            \
-                     PetiteFATFs/      \
-                     uip/
-
-CPPCHECK_INCLUDES := $(patsubst %/,%,$(LUFA_PATH))/CodeTemplates/               \
-                     $(patsubst %/,%,$(LUFA_PATH))/../Projects/AVRISP-MKII/
-
-CPPCHECK_FLAGS    := -U TEMPLATE_FUNC_NAME -U __GNUC__ -U __DOXYGEN__
-
-CPPCHECK_SUPPRESS := variableScope missingInclude unusedFunction
-
-SRC               := $(patsubst %/,%,$(LUFA_PATH))/..
-
-# Build test cannot be run with multiple parallel jobs
-.NOTPARALLEL:
-
-all: begin cppcheck end
-
-begin:
-	@echo Executing build test "StaticAnalysisTest".
-	@echo
-
-end:
-	@echo Build test "StaticAnalysisTest" complete.
-	@echo
-
-%:
-
-.PHONY: all begin end
-
-# Include common DMBS build system modules
-DMBS_PATH      ?= $(LUFA_PATH)/Build/DMBS/DMBS
-include $(DMBS_PATH)/core.mk
-include $(DMBS_PATH)/cppcheck.mk

+ 0 - 24
lib/lufa/BuildTests/makefile

@@ -1,24 +0,0 @@
-#
-#             LUFA Library
-#     Copyright (C) Dean Camera, 2017.
-#
-#  dean [at] fourwalledcubicle [dot] com
-#           www.lufa-lib.org
-#
-
-# Makefile to build all the LUFA Build Tests. Build Tests are
-# used to verify the correctness of the LUFA library, and are
-# not intended to be modified or compiled by non-developers.
-
-all:
-
-%:
-	@echo Executing \"make $@\" on all LUFA build tests.
-	@echo
-	$(MAKE) -C BoardDriverTest $@
-	$(MAKE) -C BootloaderTest $@
-	$(MAKE) -C ModuleTest $@
-	$(MAKE) -C SingleUSBModeTest $@
-	$(MAKE) -C StaticAnalysisTest $@
-	@echo
-	@echo LUFA build test \"make $@\" operation complete.

+ 0 - 274
lib/lufa/Demos/Device/ClassDriver/AudioInput/AudioInput.c

@@ -1,274 +0,0 @@
-/*
-             LUFA Library
-     Copyright (C) Dean Camera, 2017.
-
-  dean [at] fourwalledcubicle [dot] com
-           www.lufa-lib.org
-*/
-
-/*
-  Copyright 2017  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 AudioInput demo. This file contains the main tasks of
- *  the demo and is responsible for the initial application hardware configuration.
- */
-
-#include "AudioInput.h"
-
-/** LUFA Audio Class driver interface configuration and state information. This structure is
- *  passed to all Audio Class driver functions, so that multiple instances of the same class
- *  within a device can be differentiated from one another.
- */
-USB_ClassInfo_Audio_Device_t Microphone_Audio_Interface =
-	{
-		.Config =
-			{
-				.ControlInterfaceNumber   = INTERFACE_ID_AudioControl,
-				.StreamingInterfaceNumber = INTERFACE_ID_AudioStream,
-				.DataINEndpoint           =
-					{
-						.Address          = AUDIO_STREAM_EPADDR,
-						.Size             = AUDIO_STREAM_EPSIZE,
-						.Banks            = 2,
-					},
-			},
-	};
-
-/** Current audio sampling frequency of the streaming audio endpoint. */
-static uint32_t CurrentAudioSampleFrequency = 48000;
-
-
-/** Main program entry point. This routine contains the overall program flow, including initial
- *  setup of all components and the main program loop.
- */
-int main(void)
-{
-	SetupHardware();
-
-	LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);
-	GlobalInterruptEnable();
-
-	for (;;)
-	{
-		Audio_Device_USBTask(&Microphone_Audio_Interface);
-		USB_USBTask();
-	}
-}
-
-/** Configures the board hardware and chip peripherals for the demo's functionality. */
-void SetupHardware(void)
-{
-#if (ARCH == ARCH_AVR8)
-	/* Disable watchdog if enabled by bootloader/fuses */
-	MCUSR &= ~(1 << WDRF);
-	wdt_disable();
-
-	/* Disable clock division */
-	clock_prescale_set(clock_div_1);
-#endif
-
-	/* Hardware Initialization */
-	LEDs_Init();
-	Buttons_Init();
-	ADC_Init(ADC_FREE_RUNNING | ADC_PRESCALE_32);
-	ADC_SetupChannel(MIC_IN_ADC_CHANNEL);
-	USB_Init();
-
-	/* Start the ADC conversion in free running mode */
-	ADC_StartReading(ADC_REFERENCE_AVCC | ADC_RIGHT_ADJUSTED | ADC_GET_CHANNEL_MASK(MIC_IN_ADC_CHANNEL));
-}
-
-/** ISR to handle the reloading of the data endpoint with the next sample. */
-ISR(TIMER0_COMPA_vect, ISR_BLOCK)
-{
-	uint8_t PrevEndpoint = Endpoint_GetCurrentEndpoint();
-
-	/* Check that the USB bus is ready for the next sample to write */
-	if (Audio_Device_IsReadyForNextSample(&Microphone_Audio_Interface))
-	{
-		int16_t AudioSample;
-
-		#if defined(USE_TEST_TONE)
-			static uint8_t SquareWaveSampleCount;
-			static int16_t CurrentWaveValue;
-
-			/* In test tone mode, generate a square wave at 1/256 of the sample rate */
-			if (SquareWaveSampleCount++ == 0xFF)
-			  CurrentWaveValue ^= 0x8000;
-
-			/* Only generate audio if the board button is being pressed */
-			AudioSample = (Buttons_GetStatus() & BUTTONS_BUTTON1) ? CurrentWaveValue : 0;
-		#else
-			/* Audio sample is ADC value scaled to fit the entire range */
-			AudioSample = ((SAMPLE_MAX_RANGE / ADC_MAX_RANGE) * ADC_GetResult());
-
-			#if defined(MICROPHONE_BIASED_TO_HALF_RAIL)
-			/* Microphone is biased to half rail voltage, subtract the bias from the sample value */
-			AudioSample -= (SAMPLE_MAX_RANGE / 2);
-			#endif
-		#endif
-
-		Audio_Device_WriteSample16(&Microphone_Audio_Interface, AudioSample);
-	}
-
-	Endpoint_SelectEndpoint(PrevEndpoint);
-}
-
-/** Event handler for the library USB Connection event. */
-void EVENT_USB_Device_Connect(void)
-{
-	LEDs_SetAllLEDs(LEDMASK_USB_ENUMERATING);
-
-	/* Sample reload timer initialization */
-	TIMSK0  = (1 << OCIE0A);
-	OCR0A   = ((F_CPU / 8 / CurrentAudioSampleFrequency) - 1);
-	TCCR0A  = (1 << WGM01);  // CTC mode
-	TCCR0B  = (1 << CS01);   // Fcpu/8 speed
-}
-
-/** Event handler for the library USB Disconnection event. */
-void EVENT_USB_Device_Disconnect(void)
-{
-	/* Stop the sample reload timer */
-	TCCR0B = 0;
-
-	LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);
-}
-
-/** Event handler for the library USB Configuration Changed event. */
-void EVENT_USB_Device_ConfigurationChanged(void)
-{
-	bool ConfigSuccess = true;
-
-	ConfigSuccess &= Audio_Device_ConfigureEndpoints(&Microphone_Audio_Interface);
-
-	LEDs_SetAllLEDs(ConfigSuccess ? LEDMASK_USB_READY : LEDMASK_USB_ERROR);
-}
-
-/** Event handler for the library USB Control Request reception event. */
-void EVENT_USB_Device_ControlRequest(void)
-{
-	Audio_Device_ProcessControlRequest(&Microphone_Audio_Interface);
-}
-
-/** Audio class driver callback for the setting and retrieval of streaming endpoint properties. This callback must be implemented
- *  in the user application to handle property manipulations on streaming audio endpoints.
- *
- *  When the DataLength parameter is NULL, this callback should only indicate whether the specified operation is valid for
- *  the given endpoint index, and should return as fast as possible. When non-NULL, this value may be altered for GET operations
- *  to indicate the size of the retrieved data.
- *
- *  \note The length of the retrieved data stored into the Data buffer on GET operations should not exceed the initial value
- *        of the \c DataLength parameter.
- *
- *  \param[in,out] AudioInterfaceInfo  Pointer to a structure containing an Audio Class configuration and state.
- *  \param[in]     EndpointProperty    Property of the endpoint to get or set, a value from Audio_ClassRequests_t.
- *  \param[in]     EndpointAddress     Address of the streaming endpoint whose property is being referenced.
- *  \param[in]     EndpointControl     Parameter of the endpoint to get or set, a value from Audio_EndpointControls_t.
- *  \param[in,out] DataLength          For SET operations, the length of the parameter data to set. For GET operations, the maximum
- *                                     length of the retrieved data. When NULL, the function should return whether the given property
- *                                     and parameter is valid for the requested endpoint without reading or modifying the Data buffer.
- *  \param[in,out] Data                Pointer to a location where the parameter data is stored for SET operations, or where
- *                                     the retrieved data is to be stored for GET operations.
- *
- *  \return Boolean \c true if the property get/set was successful, \c false otherwise
- */
-bool CALLBACK_Audio_Device_GetSetEndpointProperty(USB_ClassInfo_Audio_Device_t* const AudioInterfaceInfo,
-                                                  const uint8_t EndpointProperty,
-                                                  const uint8_t EndpointAddress,
-                                                  const uint8_t EndpointControl,
-                                                  uint16_t* const DataLength,
-                                                  uint8_t* Data)
-{
-	/* Check the requested endpoint to see if a supported endpoint is being manipulated */
-	if (EndpointAddress == Microphone_Audio_Interface.Config.DataINEndpoint.Address)
-	{
-		/* Check the requested control to see if a supported control is being manipulated */
-		if (EndpointControl == AUDIO_EPCONTROL_SamplingFreq)
-		{
-			switch (EndpointProperty)
-			{
-				case AUDIO_REQ_SetCurrent:
-					/* Check if we are just testing for a valid property, or actually adjusting it */
-					if (DataLength != NULL)
-					{
-						/* Set the new sampling frequency to the value given by the host */
-						CurrentAudioSampleFrequency = (((uint32_t)Data[2] << 16) | ((uint32_t)Data[1] << 8) | (uint32_t)Data[0]);
-
-						/* Adjust sample reload timer to the new frequency */
-						OCR0A = ((F_CPU / 8 / CurrentAudioSampleFrequency) - 1);
-					}
-
-					return true;
-				case AUDIO_REQ_GetCurrent:
-					/* Check if we are just testing for a valid property, or actually reading it */
-					if (DataLength != NULL)
-					{
-						*DataLength = 3;
-
-						Data[2] = (CurrentAudioSampleFrequency >> 16);
-						Data[1] = (CurrentAudioSampleFrequency >> 8);
-						Data[0] = (CurrentAudioSampleFrequency &  0xFF);
-					}
-
-					return true;
-			}
-		}
-	}
-
-	return false;
-}
-
-/** Audio class driver callback for the setting and retrieval of streaming interface properties. This callback must be implemented
- *  in the user application to handle property manipulations on streaming audio interfaces.
- *
- *  When the DataLength parameter is NULL, this callback should only indicate whether the specified operation is valid for
- *  the given entity and should return as fast as possible. When non-NULL, this value may be altered for GET operations
- *  to indicate the size of the retrieved data.
- *
- *  \note The length of the retrieved data stored into the Data buffer on GET operations should not exceed the initial value
- *        of the \c DataLength parameter.
- *
- *  \param[in,out] AudioInterfaceInfo  Pointer to a structure containing an Audio Class configuration and state.
- *  \param[in]     Property            Property of the interface to get or set, a value from Audio_ClassRequests_t.
- *  \param[in]     EntityAddress       Address of the audio entity whose property is being referenced.
- *  \param[in]     Parameter           Parameter of the entity to get or set, specific to each type of entity (see USB Audio specification).
- *  \param[in,out] DataLength          For SET operations, the length of the parameter data to set. For GET operations, the maximum
- *                                     length of the retrieved data. When NULL, the function should return whether the given property
- *                                     and parameter is valid for the requested endpoint without reading or modifying the Data buffer.
- *  \param[in,out] Data                Pointer to a location where the parameter data is stored for SET operations, or where
- *                                     the retrieved data is to be stored for GET operations.
- *
- *  \return Boolean \c true if the property GET/SET was successful, \c false otherwise
- */
-bool CALLBACK_Audio_Device_GetSetInterfaceProperty(USB_ClassInfo_Audio_Device_t* const AudioInterfaceInfo,
-                                                   const uint8_t Property,
-                                                   const uint8_t EntityAddress,
-                                                   const uint16_t Parameter,
-                                                   uint16_t* const DataLength,
-                                                   uint8_t* Data)
-{
-	/* No audio interface entities in the device descriptor, thus no properties to get or set. */
-	return false;
-}

+ 0 - 94
lib/lufa/Demos/Device/ClassDriver/AudioInput/AudioInput.h

@@ -1,94 +0,0 @@
-/*
-             LUFA Library
-     Copyright (C) Dean Camera, 2017.
-
-  dean [at] fourwalledcubicle [dot] com
-           www.lufa-lib.org
-*/
-
-/*
-  Copyright 2017  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 AudioInput.c.
- */
-
-#ifndef _AUDIO_INPUT_H_
-#define _AUDIO_INPUT_H_
-
-	/* Includes: */
-		#include <avr/io.h>
-		#include <avr/wdt.h>
-		#include <avr/power.h>
-		#include <avr/interrupt.h>
-
-		#include <LUFA/Drivers/Board/LEDs.h>
-		#include <LUFA/Drivers/Board/Buttons.h>
-		#include <LUFA/Drivers/Peripheral/ADC.h>
-		#include <LUFA/Drivers/USB/USB.h>
-		#include <LUFA/Platform/Platform.h>
-
-		#include "Descriptors.h"
-		#include "Config/AppConfig.h"
-
-	/* Macros: */
-		/** Maximum audio sample value for the microphone input. */
-		#define SAMPLE_MAX_RANGE          0xFFFF
-
-		/** Maximum ADC range for the microphone input. */
-		#define ADC_MAX_RANGE             0x3FF
-
-		/** LED mask for the library LED driver, to indicate that the USB interface is not ready. */
-		#define LEDMASK_USB_NOTREADY      LEDS_LED1
-
-		/** LED mask for the library LED driver, to indicate that the USB interface is enumerating. */
-		#define LEDMASK_USB_ENUMERATING  (LEDS_LED2 | LEDS_LED3)
-
-		/** LED mask for the library LED driver, to indicate that the USB interface is ready. */
-		#define LEDMASK_USB_READY        (LEDS_LED2 | LEDS_LED4)
-
-		/** LED mask for the library LED driver, to indicate that an error has occurred in the USB interface. */
-		#define LEDMASK_USB_ERROR        (LEDS_LED1 | LEDS_LED3)
-
-	/* Function Prototypes: */
-		void SetupHardware(void);
-
-		void EVENT_USB_Device_Connect(void);
-		void EVENT_USB_Device_Disconnect(void);
-		void EVENT_USB_Device_ConfigurationChanged(void);
-		void EVENT_USB_Device_ControlRequest(void);
-
-		bool CALLBACK_Audio_Device_GetSetEndpointProperty(USB_ClassInfo_Audio_Device_t* const AudioInterfaceInfo,
-		                                                  const uint8_t EndpointProperty,
-		                                                  const uint8_t EndpointAddress,
-		                                                  const uint8_t EndpointControl,
-		                                                  uint16_t* const DataLength,
-		                                                  uint8_t* Data) ATTR_NON_NULL_PTR_ARG(1);
-		bool CALLBACK_Audio_Device_GetSetInterfaceProperty(USB_ClassInfo_Audio_Device_t* const AudioInterfaceInfo,
-		                                                   const uint8_t Property,
-		                                                   const uint8_t EntityAddress,
-		                                                   const uint16_t Parameter,
-		                                                   uint16_t* const DataLength,
-		                                                   uint8_t* Data);
-#endif
-

Энэ ялгаанд хэт олон файл өөрчлөгдсөн тул зарим файлыг харуулаагүй болно