/** \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 MyUSB Library
 *
 *  Written by Dean Camera, 2008.
 *
 *  \section Sec_About About this library
 *
 *  Originally based on the AT90USBKEY from Atmel, it is an open-source, driver for the USB-enabled AVR
 *  microcontrollers, released under the Lesser GNU Public Licence, Version 3. Currently, the AT90USB1286,
 *  AT90USB1287, AT90USB646, AT90USB647, AT90USB162, AT90USB82, ATMEGA16U4 and ATMEGA32U4 AVR microcontrollers are supported
 *  by the library. Supported premade boards are the USBKEY, STK525, STK526 and RZUSBSTICK.
 *
 *  The library is currently in a stable release, suitable for download and incorporation into user projects for
 *  both host and device modes. For information about the project progression, check out my blog.
 *
 *  MyUSB is written specifically for the free AVR-GCC compiler, and uses several GCC-only extensions to make the
 *  library API more streamlined and robust. You can download AVR-GCC for free in a convenient windows package, 
 *  from the the WinAVR website.
 *
 *  \section Sec_Links Library Links
 *  Project Homepage: http://www.fourwalledcubicle.com/MyUSB.php \n
 *  Development Blog: http://www.fourwalledcubicle.com/blog \n
 *  Discussion Group: http://groups.google.com/group/myusb-support-list \n
 *  Bugs and Feature Requests: http://code.google.com/p/myusb-issues/issues/ \n
 *  Author's Website: http://www.fourwalledcubicle.com \n
 *
 *  WinAVR Website: http://winavr.sourceforge.net \n
 *  avr-libc Website: http://www.nongnu.org/avr-libc/ \n
 *
 *  USB-IF Website: http://www.usb.org \n
 *
 *  \section Sec_License License
 *  The MyUSB library is currently released under the MIT licence, included below.
 *
 *  \verbatim
 *  Permission to use, copy, modify, and distribute this software
 *  and its documentation for any purpose and without fee is hereby
 *  granted, provided that the above copyright notice appear in all
 *  copies and that both that the copyright notice and this
 *  permission notice and warranty disclaimer appear in supporting
 *  documentation, and that the name of the author not be used in
 *  advertising or publicity pertaining to distribution of the
 *  software without specific, written prior permission.
 *
 *  The author disclaim all warranties with regard to this
 *  software, including all implied warranties of merchantability
 *  and fitness.  In no event shall the author be liable for any
 *  special, indirect or consequential damages or any damages
 *  whatsoever resulting from loss of use, data or profits, whether
 *  in an action of contract, negligence or other tortious action,
 *  arising out of or in connection with the use or performance of
 *  this software.
 *  \endverbatim
 *
 *  \section Sec_Demos Demos and Bootloaders
 *  The MyUSB library ships with several different host and device demos, located in the /Demos/ subdirectory.
 *  If this directory is missing, please re-download the project from the project homepage.
 *
 *  Also included with the library are two fully functional bootloaders, loacated in the /Bootloaders/ subdirectory.
 *  The DFU class bootloader is compatible with Atmel's FLIP software or the open source dfu-programmer project, and
 *  the CDC class (AVR109 protocol) is compatible with such open source software as AVRDUDE and AVR-OSP.
 *
 *  \section Sec_Donations Donate
 *  I am a 19 year old University student studying for a double degree in Computer Science and Electronics
 *  Engineering. This leaves little time for any sort of work or leisure. Please consider donating a small amount
 *  to myself to support this and my future Open Source projects. You can donate any amount via PayPal on my
 *  website, http://www.fourwalledcubicle.com . All donations are greatly appreciated.
 */

/** \page Page_GettingStarted Getting Started
 *
 *  Out of the box, MyUSB contains a large number of pre-made class demos for you to test, experiment with and
 *  ultimately build upon for your own projects. All the demos come pre-configured to build and run correctly
 *  on the AT90USB1287 AVR microcontroller, mounted on the Atmel USBKEY board and running at an 8MHz master clock.
 *  This is due to two reasons; one, it is the hardware the author posesses, and two, it is the most popular Atmel
 *  USB demonstration board to date.
 *
 *  \section Sec_Prerequisites Prerequisites
 *  Before you can compile any of the MyUSB library code or demos, you will need a recent distribution of avr-libc (1.6.2+)
 *  and the AVR-GCC (4.2+) compiler. For Windows users, the best way to obtain these is the WinAVR project
 *  (http://winavr.sourceforge.net) as this provides a single-file setup for everything required to compile your
 *  own AVR projects.
 *
 *  \section Sec_Configuring Configuring the Demos, Bootloaders and Projects
 *  If the target AVR model, clock speed, board or other settings are different to the current settings, they must be changed
 *  and the project recompiled from the source code before being programmed into the AVR microcontroller. Most project
 *  configuration options are located in the "makefile" build script inside each MyUSB application's folder, however some
 *  demo or application-specific configuration settings (such as the output format in the AudioOut demo) are located in the
 *  main .c source file of the project.
 *
 *  Each project "makefile" contains all the script and configuration data required to compile each project. When opened with
 *  any regular basic text editor such as Notepad or Wordpad (ensure that the save format is a pure ASCII text format) the
 *  build configuration settings may be altered.
 *
 *  Inside each makefile, a number of configuration variables are located, with the format "<VARIABLE NAME> = <VALUE>". For
 *  each application, the important variables which should be altered are:
 *
 *    - <b>MCU</b>, the target AVR processor.
 *    - <b>BOARD</b>, the target board hardware
 *    - <b>F_CPU</b>, the target AVR master clock frequency
 *    - <b>CDEFS</b>, the C preprocessor defines which configure the source code
 *
 *  These values should be changed to reflect the build hardware.
 *
 *  \subsection SSec_MCU The MCU Parameter
 *  This parameter indicates the target AVR model for the compiled application. This should be set to the model of the target AVR
 *  (such as the AT90USB1287, or the ATMEGA32U4), in all lower-case (e.g. "at90usb1287"). Note that not all demos support all the
 *  USB AVR models, as they may make use of peripherals or modes only present in some devices.
 *
 *  For supported library AVR models, see main documentation page.
 *
 *  \subsection SSec_BOARD The BOARD Parameter
 *  This parameter indicates the target AVR board hardware for the compiled application. Some MyUSB library drivers are board-specific,
 *  such as the LED driver, and the library needs to know the layout of the target board. If you are using one of the board models listed
 *  on the main library page, change this parameter to the board name in all UPPER-case.
 *
 *  If you are not using any board-specific drivers in the MyUSB library, or you are using a custom board layout, change this to read
 *  "USER" (no quotes) instead of a standard board name. If the USER board type is selected and the application makes use of one or more
 *  board-specific hardware drivers inside the MyUSB library, then the appropriate stub drives files should be copied from the /BoardStubs/
 *  directory into a /Board/ folder inside the application directory, and the stub driver completed with the appropriate code to drive the
 *  custom board's hardware.
 *
 *  \subsection SSec_F_CPU The F_CPU Parameter
 *  This parameter indicates the target AVR's master clock frequency, in Hz. Consult your AVR model's datasheet for allowable clock frequencies
 *  if the USB interface is to be operational.
 *
 *  <b>Note that this value does not actually *alter* the AVR's clock frequency</b>, it is just a way to indicate to the library the clock frequency
 *  of the AVR as set by the AVR's fuses. If this value does not reflect the actual running frequency of the AVR, incorrect operation of one of more
 *  library components will ocurr.
 *
 *  \subsection SSec_CDEFS The CDEFS Parameter
 *  Most applications will actually have multiple CDEF lines, which are concatenated together with the "+=" operator. This ensures that large
 *  numbers of configuration options remain readable by splitting up groups of options into seperate lines.
 *
 *  Normally, these options do not need to be altered to allow an application to compile and run correctly on a different board or AVR to the
 *  current configuration - if the options are incorrect, then the demo is most likely incompatible with the chosen USB AVR model and cannot be
 *  made to function through the altering of the makefile settings alone (or at all). Settings such as the USB mode (device, host or both), the USB
 *  interface speed (Low or Full speed) and other MyUSB configuration options can be set here - refer to the library documentation for details on the
 *  configuration parameters.
 *
 *  \section Sec_Compiling Compiling a MyUSB Application
 *  Compiling the MyUSB demos, applications and/or bootloaders is very simple. MyUSB comes with makefile scripts for
 *  each individual demo, bootloader and project folder, as well as scripts in the /Demos/, /Bootloaders/, /Projects/
 *  and the MyUSB root directory. This means that compilation can be started from any of the above directories, with
 *  a build started from an upper directory in the directory structure executing build of all child directories under it.
 *  This means that while a build inside a particular demo directory will build only that particular demo, a build stated
 *  from the /Demos/ directory will build all MyUSB demo projects sequentially.
 *
 *  \subsection SSec_CommandLine Via the Command Line
 *  To build a project from the source via the command line, the command <b>"make all"</b> should be executed from the command line in the directory
 *  of interest. To remove compiled files (including the binary output, all intermediatary files and all diagnostic output
 *  files), execute <b>"make clean"</b>. Once a "make all" has been run and no errors were encountered, the resulting binary will
 *  be located in the generated ".HEX" file. If your project makes use of pre-initialized EEPROM variables, the generated ".EEP"
 *  file will contain the project's EEPROM data.
 *
 *  \subsection SSec_AVRStudio Via AVRStudio
 *  Each demo, project and bootloader contains an AVRStudio project (.aps) which can be used to build each project. Once opened
 *  in AVRStudio, the project can be built and cleaned using the GUI buttons or menus. Note that the AVRStudio project files make
 *  use of the external project makefile, thus the procedure for configuring a demo remains the same regardless of the build environment.
 *
 *  \section Sec_Programming Programming a USB AVR
 *  Once you have built an application, you will need a way to program in the resulting ".HEX" file (and, if your
 *  application uses EEPROM variables with initial values, also a ".EEP" file) into your USB AVR. Normally, the
 *  reprogramming an AVR device must be performed using a special piece of programming hardware, through one of the
 *  supported AVR programming protocols - ISP, HVSP, HVPP, JTAG or dW. This can be done through a custom programmer,
 *  a third party programmer, or an official Atmel AVR tool - for more information, see the Atmel.com website.
 *
 *  Alternatively, you can use the bootloader. From the Atmel factory, each USB AVR comes preloaded with the Atmel
 *  DFU (Device Firmware Update) class bootloader, a small piece of AVR firmware which allows the remainder of the
 *  AVR to be programmed through a non-standard interface such as the serial USART port, SPI, or (in this case) USB.
 *  Bootloaders have the advantage of not requiring any special hardware for programming, and cannot usually be erased
 *  or broken without an external programming device. They have disadvantages however; they cannot change the fuses of
 *  the AVR (special configuration settings that control the operation of the chip itself) and a small portion of the
 *  AVR's FLASH program memory must be reserved to contain the bootloader firmware, and thus cannot be used by the
 *  loaded application. Atmel's DFU bootloader is either 4KB (for the smaller USB AVRs) or 8KB (for the larger USB AVRs).
 *
 *  If you wish to use the DFU bootloader to program in your application, refer to your DFU programmer's documentation.
 *  Atmel provides a free utility called FLIP which is USB AVR compatible, and an open source (Linux compatible)
 *  alternative exists called "dfu-programmer".
 */
 
/** \dir MyUSB
 *  
 *  This is the main MyUSB library folder, containing all the library code including drivers and utility functions. For
 *  an application to be built on top of MyUSB, it must be able to access the files within this folder.
 */

/** \dir Bootloaders
 *  
 *  This contains all the MyUSB example bootloaders in several different USB classes. Bootloaders are a way to reprogram
 *  an AVR microcontroller without dedicated external hardware. Atmel programs all USB AVR ICs with their own DFU (Device
 *  Firmware Update) class bootloader from the factory, but an open source MyUSB-based DFU bootloader is included here
 *  in addition to several other USB classes of bootloader for completeness.
 */

/** \dir Demos
 *  
 *  This contains all the example MyUSB demo applications, each with various USB modes (device, host or dual role), USB speeds,
 *  USB classes and purposes. Each demo is designed to show off a particular USB class, or piece of MyUSB library functionality
 *  as well as serve as a base for custom user applications built on a standard USB class specification.
 */

/** \dir Projects
 *  
 *  This contains submitted MyUSB based complete projects, including source code and (optionally) any documentation or other
 *  related files. Each project has a specific, real-world purpose instead of a contrived example as with the MyUSB class demos
 *  located in the /Demos/ directory.
 */

/** \dir Documentation
 *  
 *  This contains the library documentation, if generated using the DoxyGen tool. The project documentation is automatically created
 *  from specially written comments in the library source files and provides an up-to-date, feature rich reference for the library.
 */

/** \dir DriverStubs
 *  
 *  This contains stub files for the MyUSB board drivers. If the MyUSB board drivers are used with board hardare other than those
 *  directly supported by the library, the BOARD parameter of the application's makefile can be set to "USER", and these stub files
 *  copied to the "/Board/" directory of the application's folder. When fleshed out with working driver code for the custom board,
 *  the corresponding MyUSB board APIs will work correctly with the non-standard board hardware.
 */

/** \page Page_VIDPID VID and PID values
 *
 *  The MyUSB library uses VID/PID combinations generously donated by Atmel. The following VID/PID combinations
 *  are used within the MyUSB demos, and thus may be re-used by derivations of each demo. Free PID values may be
 *  used by future MyUSB demo projects.
 *
 *  These VID/PID values should not be used in commercial designs under any circumstances. Private projects may
 *  use the following values freely, but must accept any collisions due to other MyUSB derived private projects
 *  sharing identical values. It is suggested that private projects using interfaces compatible with existing
 *  demos share the save VID/PID value.
 *
 *  <table>
 *
 *   <tr>
 *    <td>
 *     VID
 *    </td>
 *    <td>
 *     PID
 *    </td>
 *    <td>
 *     Usage
 *    </td>
 *   </tr>
 *
 *   <tr>
 *    <td>
 *     0x03EB
 *    </td>
 *    <td>
 *     0x2040
 *    </td>
 *    <td>
 *     Test Application
 *    </td>
 *
 *   <tr>
 *    <td>
 *     0x03EB
 *    </td>
 *    <td>
 *     0x2041
 *    </td>
 *    <td>
 *     Mouse Demo Application (and derivatives)
 *    </td>
 *   </tr>
 *
 *   <tr>
 *    <td>
 *     0x03EB
 *    </td>
 *    <td>
 *     0x2042
 *    </td>
 *    <td>
 *     Keyboard Demo Application (and derivatives)
 *    </td>
 *   </tr>
 *
 *   <tr>
 *    <td>
 *     0x03EB
 *    </td>
 *    <td>
 *     0x2043
 *    </td>
 *    <td>
 *     Joystick Demo Application
 *    </td>
 *   </tr>
 *
 *   <tr>
 *    <td>
 *     0x03EB
 *    </td>
 *    <td>
 *     0x2044
 *    </td>
 *    <td>
 *     CDC Demo Application
 *    </td>
 *   </tr>
 *
 *   <tr>
 *    <td>
 *     0x03EB
 *    </td>
 *    <td>
 *     0x2045
 *    </td>
 *    <td>
 *     Mass Storage Demo Application
 *    </td>
 *   </tr>
 *
 *   <tr>
 *    <td>
 *     0x03EB
 *    </td>
 *    <td>
 *     0x2046
 *    </td>
 *    <td>
 *     Audio Output Demo Application
 *    </td>
 *   </tr>
 *
 *   <tr>
 *    <td>
 *     0x03EB
 *    </td>
 *    <td>
 *     0x2047
 *    </td>
 *    <td>
 *     Audio Input Demo Application
 *    </td>
 *   </tr>
 *
 *   <tr>
 *    <td>
 *     0x03EB
 *    </td>
 *    <td>
 *     0x2048
 *    </td>
 *    <td>
 *     MIDI Demo Application
 *    </td>
 *   </tr>
 *
 *   <tr>
 *    <td>
 *     0x03EB
 *    </td>
 *    <td>
 *     0x2049
 *    </td>
 *    <td>
 *     MagStripe Project
 *    </td>
 *   </tr>
 *
 *   <tr>
 *    <td>
 *     0x03EB
 *    </td>
 *    <td>
 *     0x204A
 *    </td>
 *    <td>
 *     CDC Bootloader
 *    </td>
 *   </tr>
 *
 *   <tr>
 *    <td>
 *     0x03EB
 *    </td>
 *    <td>
 *     0x204B
 *    </td>
 *    <td>
 *     USB to Serial Demo Application
 *    </td>
 *   </tr>
 *
 *   <tr>
 *    <td>
 *     0x03EB
 *    </td>
 *    <td>
 *     0x204C
 *    </td>
 *    <td>
 *     RNDIS Demo Application
 *    </td>
 *   </tr>
 *
 *   <tr>
 *    <td>
 *     0x03EB
 *    </td>
 *    <td>
 *     0x204D
 *    </td>
 *    <td>
 *     Keyboard and Mouse Combination Demo Application
 *    </td>
 *   </tr>
 *
 *   <tr>
 *    <td>
 *     0x03EB
 *    </td>
 *    <td>
 *     0x204E
 *    </td>
 *    <td>
 *     Dual CDC Demo Application
 *    </td>
 *   </tr>
 *
 *   <tr>
 *    <td>
 *     0x03EB
 *    </td>
 *    <td>
 *     0x204F
 *    </td>
 *    <td>
 *     * UNUSED - FREE FOR PRIVATE HOBBYIST PROJECTS UNTIL ALLOCATED *
 *    </td>
 *   </tr>
 *
 *  </table>
 */

/** \page Page_BuildLibrary Building as a Linkable Library
 *
 *  The MyUSB library can be built as a proper linkable library (with the extention .a) under AVR-GCC, so that
 *  the library does not need to be recompiled with each revision of a user project. Instructions for creating
 *  a library from a given source tree can be found in the AVR-GCC user manual included in the WinAVR install
 *  /Docs/ directory.
 *
 *  However, building the library is <b>not recommended</b>, as the static (compile-time) options will be
 *  unable to be changed without a recompilation of the MyUSB code. Therefore, if the library is to be built
 *  from the MyUSB source, it should be made to be application-specific and compiled with the static options
 *  that are required for each project (which should be recorded along with the library).
 *
 *  Normal library use has the library components compiled in at the same point as the application code, as
 *  demonstrated in the library demos and applications. This is the preferred method, as the library is recompiled
 *  each time to ensure that all static options for a particular application are applied.
 */
 
 /** \page Page_Migration152 Migrating from V1.5.2 to 1.5.3
 *
 *  Below is migration information for updating existing projects based on the MyUSB library version 1.5.2 to
 *  the 1.5.3 API. It does not indicate all new additions to the library, only areas relevant to making older
 *  projects compatible with the new API.
 *
 *  <b>Library Demos</b>
 *    - Previously, all demos contained a serial number string descriptor, filled with all zeros. A serial number
 *      string is required in Mass Storage devices, or devices which are to retain settings when moved between
 *      ports on a machine. As people were not changing the serial number value, this was causing conflicts and so
 *      the serial number descriptor has been removed from all but the Mass Storage demo, which requires it.
 *    - The AudioOut and AudioIn demos did not previously silence their endpoints when the host has deactivated
 *      them. Projects built upon either demo should upgrade to the latest code.
 *    - The FEATURE_ENDPOINT macro has been renamed FEATURE_ENDPOINT_HALT, and is now correctly documented.
 *    - The MassStoreHost demo contained errors which caused it to lock up randomly on certain devices. Projects built
 *      on the MassStoreDemo code should update to the latest version.
 *    - The Interrupt type endpoint in the CDC based demos previously had a polling interval of 0x02, which caused
 *      problems on some Linux systems. This has been changed to 0xFF, projects built on the CDC demos should upgrade
 *      to the latest code.
 *    - The HID keyboard and mouse demos were not previously boot mode compatible. To enable boot mode support, projects
 *      built on the keyboard or mouse demos (or derivatives) should upgrade to the latest code.
 *    - The Mass Storage demo was not previously standards compliant. Projects built on the Mass Storage demo should
 *      upgrade to the latest code.
 *    - The USART was not being reconfigured after the host sent new encoding settings in the USBtoSerial demo. This was
 *      previously discovered and fixed, but the change was lost. Projects built on the USBtoSerial demo should update
 *      to the latest code.
 *
 *  <b>Device Mode</b>
 *    - The endpoint non-control stream functions now have a default timeout of 50ms between packets in the stream.
 *      If this timeout is exceeded, the function returns the new ENDPOINT_RWSTREAM_ERROR_Timeout error value. The
 *      timeout value can be overridden by defining the USB_STREAM_TIMEOUT_MS in the project makefile to the desired
 *      timeout duration in ms.
 *    - Rather than returning fixed values, the flags indicating if the device has Remote Wakeup currently enabled
 *      and/or is self-powered are now accessed and set through the new USB_RemoteWakeupEnabled and
 *      USB_CurrentlySelfPowered macros. See the DevChapter9.h documentation for more details.
 *    - All endpoint stream functions now require an extra Callback function parameter. Existing code may be updated
 *      to either supply NO_STREAM_CALLBACK as the extra parameter, or disable stream callbacks altogether by pasing
 *      the token NO_STREAM_CALLBACKS to the compiler using the -D switch.
 *
 *  <b>Host Mode</b>
 *    - The pipe non-control stream functions now have a default timeout of 50ms between packets in the stream.
 *      If this timeout is exceeded, the function returns the new PIPE_RWSTREAM_ERROR_Timeout error value. The
 *      timeout value can be overridden by defining the USB_STREAM_TIMEOUT_MS in the project makefile to the desired
 *      timeout duration in ms.
 *    - CollectionPath_t has been renamed to HID_CollectionPath_t to be more in line with the other HID parser structures.
 *    - All pipe stream functions now require an extra Callback function parameter. Existing code may be updated
 *      to either supply NO_STREAM_CALLBACK as the extra parameter, or disable stream callbacks altogether by pasing
 *      the token NO_STREAM_CALLBACKS to the compiler using the -D switch.
 */
 
/** \page Page_Migration151 Migrating from V1.5.1 to 1.5.2
 *
 *  Below is migration information for updating existing projects based on the MyUSB library version 1.5.1 to
 *  the 1.5.2 API. It does not indicate all new additions to the library, only areas relevant to making older
 *  projects compatible with the new API.
 *
 *  <b>Library Demos</b>
 *    - The RNDIS demo application has been updated so that it is functional on Linux under earlier implementations
 *      of the RNDIS specification, which had non-standard behaviour. Projects built upon the demo should upgrade
 *      to the latest code.
 *    - The DFU class bootloader has had several bugs corrected in this release. It is recommended that where
 *      possible any existing devices upgrade to the latest bootloader code.
 */

/** \page Page_Migration150 Migrating from V1.5.0 to 1.5.1
 *
 *  Below is migration information for updating existing projects based on the MyUSB library version 1.5.0 to
 *  the 1.5.1 API. It does not indicate all new additions to the library, only areas relevant to making older
 *  projects compatible with the new API.
 *
 *  <b>Library Demos</b>
 *    - The USBtoSerial demo was broken in the 1.5.0 release, due to incorrect register polling in place of the
 *      global "Transmitting" flag. The change has been reverted in this release. Projects built upon the demo
 *      should upgrade to the latest code.
 *    - The HID class demos did not implement the mandatory GetReport HID class request. Projects built upon the HID
 *      demos should upgrade to the latest code.
 *    - The HID class demos incorrectly reported themselves as boot-protocol enabled HID devices in their descriptors.
 *      Projects built upon the HID demos should upgrade to the latest code.
 *    - The MIDI device demo had incorrect AudioStreaming interface descriptors. Projects built upon the MIDI demo
 *      should upgrade to the latest code.
 *    - The AudioOut demo did not correctly tristate the speaker pins when USB was disconnected, wasting power.
 *      Projects built upon the AudioOut demo should upgrade to the latest code.
 */
  
/** \page Page_Migration141 Migrating from V1.4.1 to 1.5.0
 *
 *  Below is migration information for updating existing projects based on the MyUSB library version 1.4.1 to
 *  the 1.5.0 API. It does not indicate all new additions to the library, only areas relevant to making older
 *  projects compatible with the new API.
 *
 *  <b>Library Demos</b>
 *    - Previous versions of the library demos had incorrectly encoded BCD version numbers in the descriptors. To
 *      avoid such mistakes in the future, the VERSION_BCD macro has been added to StdDescriptors.h. Existing
 *      projects should at least manually correct the BCD version numbers, or preferably update the descriptors to
 *      encode the version number in BCD format using the new macro.
 *    - The mandatory GetReport class-specific request was accidentally ommitted from previous versions of the demos
 *      based on the Human Interface Device (HID) class. This has been corrected, and any user projects based on the
 *      HID demos should also be updated accordingly.
 *    - The CDC demos now correctly send an empty packet directly after a full packet, to end the transmission.
 *      Failure to do this on projects which always or frequently send full packets will cause buffering issues on
 *      the host OS. All CDC user projects are advised to update their transmission routines in the same manner as
 *      the library CDC demos.
 *    - The previous interrupt-driven Endpoint/Pipe demos did not properly save and restore the currently selected
 *      Endpoint/Pipe when the ISR fired. This has been corrected - user projects based on the interrupt driven
 *      demos should also update to properly save and restore the selected Endpoint/Pipe.
 *
 *  <b>Non-USB Library Components</b>
 *    - The Atomic.h and ISRMacro.h header files in MyUSB/Common have been removed, as the library is now only
 *      compatible with avr-libc library versions newer than the time before the functionality of the deleted
 *      headers was available.
 *
 *  <b>Device Mode</b>
 *    - The GetDescriptor function (see StdDescriptors.h) now has a new prototype, with altered parameter names and
 *      functions. Existing projects will need to update the GetDescriptor implementation to reflect the new API.
 *      The previously split Type and Index parameters are now passed as the original wValue parameter to the
 *      function, to make way for the USB specification wIndex parameter which is <i>not</i> the same as the
 *      previous Index parameter.
 *    - The USB_UnhandledControlPacket event (see Events.h) now has new parameter names, to be in line with the
 *      official USB specification. Existing code will need to be altered to use the new parameter names.
 *    - The USB_CreateEndpoints event (see Events.h) has been renamed to USB_ConfigurationChanged, which is more
 *      appropriate. It fires in an identical manner to the previously named event, thus the only change to be made
 *      is the event name itself in the user project.
 *    - The USB_Descriptor_Language_t structure no longer exists in StdDescriptors.h, as this was a
 *      psudo-descriptor modelled on the string descriptor. It is replaced by the true USB_Descriptor_String_t type
 *      descriptor as indicated in the USB specification, thus all device code must be updated accordingly.
 *    - The names of several Endpoint macros have been changed to be more consistant with the rest of the library,
 *      with no implementation changes. This means that existing code can be altered to use the new macro names
 *      with no other considerations required. See Endpoint.h for the new macro names.
 *    - The previous version of the MassStorage demo had an incorrect value in the SCSI_Request_Sense_Response_t
 *      strucuture named SenseData in SCSI.c which caused some problems with some hosts. User projects based on this
 *      demo should correct the structure value to maintain compatibility across multiple OS platforms.
 *    - By default, the descriptor structures use the official USB specification names for the elements. Previous
 *      versions of the library used non-standard (but more verbose) names, which are still usable in the current
 *      and future releases when the correct compile time option is enabled. See the StdDescriptors.h file
 *      documentation for more details.
 *
 *  <b>Host Mode</b>
 *    - The USB_Host_Request_Header_t structure in HostChapter9.h (used for issuing control requests) has had its
 *      members renamed to the official USB specification names for requests. Existing code will need to be updated
 *      to use the new names.
 *    - The names of several Pipe macros have been changed to be more consistant with the rest of the library,
 *      with no implementation changes. This means that existing code can be altered to use the new macro names
 *      with no other considerations required. See Pipe.h for the new macro names.
 *    - By default, the descriptor structures use the official USB specification names for the elements. Previous
 *      versions of the library used non-standard (but more verbose) names, which are still usable in the current
 *      and future releases when the correct compile time option is enabled. See the StdDescriptors.h file
 *      documentation for more details.
 *    - The names of the macros in Host.h for controlling the SOF generation have been renamed, see the Host.h
 *      module documentation for the new macro names.
 *
 *  <b>Dual Role Mode</b>
 *    - The OTG.h header file has been corrected so that the macros now perform their stated functions. Any existing
 *      projects using custom headers to fix the broken OTG header should now be altered to once again use the OTG
 *      header inside the library.
 *    - The USB_DeviceEnumerationComplete event (see Events.h) now also fires in Device mode, when the host has
 *      finished enumerating the device. Projects relying on the event only firing in Host mode should be updated
 *      so that the event action only ocurrs when the USB_Mode global is set to USB_MODE_HOST.
 */
