ChangeLog.txt 57.7 KB
Newer Older
1
2
3
4
5
/** \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.
 */
6

7
 /** \page Page_ChangeLog Project Changelog
8
9
10
11
  *
  *  \section Sec_ChangeLogXXXXXX Version XXXXXX
  *
  *  <b>New:</b>
12
  *  - Added new host mode class drivers and matching demos to the library for rapid application development
13
  *  - Added flag to the HID report parser to indicate if a device has multiple reports
14
15
  *  - Added new EVENT_USB_Device_StartOfFrame() event, controlled by the new USB_Device_EnableSOFEvents() and
  *    USB_Device_DisableSOFEvents() macros to give bus-synchronised millisecond interrupts when in USB device mode
16
  *  - Added new Endpoint_SetEndpointDirection() macro for bidirectional endpoints
17
  *  - Added new AVRISP project, a LUFA powered clone of the Atmel AVRISP-MKII programmer
18
  *  - Added ShutDown() functions for all hardware peripheral drivers, so that peripherals can be turned off after use
19
20
  *  - Added new CDC_Device_Flush() command to the device mode CDC Class driver to flush Device->Host data
  *  - Added extra masks to the SPI driver, changed SPI_Init() so that the clock polarity and sample modes can be set
21
22
  *  - Added new callback to the HID report parser, so that the user application can filter only the items it is interested
  *    in to be stored into the HIDReportInfo structure to save RAM
23
  *  
24
  *  <b>Changed:</b>
25
  *  - SetIdle requests to the HID device driver with a 0 idle period (send changes only) now only affect the requested
26
27
  *    HID interface within the device, not all HID interfaces
  *  - Added explicit attribute masks to the device mode demos' descriptors
28
  *  - Added return values to the CDC and MIDI class driver transmit functions
29
  *  - Optimized Endpoint_Read_Word_* and Pipe_Read_Word_* macros to reduce compiled size
30
  *  - Added non-null function parameter pointer restrictions to USB Class drivers to improve user code reliability
31
32
  *  - Added new "Common" section to the class drivers, to hold all mode-independant definitions for clarity
  *  - Moved SCSI command/sense constants into the Mass Storage Class driver, instead of the user-code
33
  *  - Altered the SCSI commands in the LowLevel Mass Storage Host to save on FLASH space by reducing function calls
34
35
  *  - Changed the parameters and behaviour of the USB_GetDeviceConfigDescriptor() function so that it now performs size checks
  *    and data validations internally, to simplify user code
36
  *  - Changed HIDParser to only zero out important values in the Parsed HID Report Item Information structure to save cycles
37
38
  *  - The HID report parser now always processed FEATURE items - HID_ENABLE_FEATURE_PROCESSING token now has no effect
  *  - The HID report parser now always ignores constant-data items, HID_INCLUDE_CONSTANT_DATA_ITEMS token now has no effect
39
  *  - The Benito Programmer project now has its own unique VID/PID pair allocated from the Atmel donated LUFA VID/PID pool
40
41
  *  - Add in new invalid event hook check targets to project makefiles to produce compilation errors when invalid event names
  *    are used in a project
42
43
44
45
  *
  *  <b>Fixed:</b>
  *  - Fixed possible lockup in the CDC device class driver, when the host sends data that is a multiple of the
  *    endpoint's bank
46
47
  *  - Fixed swapped paremeters in the HID state memory copy call while processing a HID PUSH item in the HID report parser
  *  - Fixed memory corruption HID report parser when too many COLLECTION or PUSH items were processed
48
  *  - Fixed HID report parser not resetting the FEATURE item count when a REPORT ID item is encountered
49
50
51
  *  - Fixed USBtoSerial demos not reading in UDR1 when the USART receives data but the USB interface is not enumerated,
  *    causing continuous USART receive interrupts
  *  - Fixed misspelt event name in the Class driver USBtoSerial demo, preventing correct operation
52
  *  - Fixed invalid data being returned when a GetStatus request is issued in Device mode with an unhandled data recipient
53
54
  *  - Added hardware USART receive interrupt and software buffering to the Benito project to ensure received data is not
  *    missed or corrupted
55
  *  - Fixed Device mode HID Class driver always sending IN packets, even when nothing to report
56
57
  *  - Fixed Device mode HID Class driver not explicitly initializing the ReportSize parameter to zero before calling callback
  *    routine, so that ignored callbacks don't cause incorrect data to be sent
58
  *  - Fixed StillImageHost not correctly freezing and unfreezing data pipes while waiting for a response block header
59
  *  - Fixed error in PrinterHost preventing the full page data from being sent to the attached device
60
  *  - CDC based demos and project now work under 64 bit versions of Windows (thanks to Ronny Hanson, Thomas Bleeker)
61
62
  *  - Re-add in flip, flip-ee, dfu and dfu-ee targets to project makefiles (thanks to Opendous Inc.)
  *  - Fix allowable F_CPU values comment in project makefiles
63
  *  - Fixed DFU and CDC class bootloaders on the AT90USBXXX2 series USB AVRs
64
  *
Dean Camera's avatar
Dean Camera committed
65
  *
Dean Camera's avatar
Dean Camera committed
66
  *  \section Sec_ChangeLog090810 Version 090810
67
  *
68
  *  <b>New:</b>
69
  *  - Added new device class drivers and matching demos to the library for rapid application development
70
71
72
  *  - Added new PrinterHost demo (thanks to John Andrews)
  *  - Added USB Missle Launcher project, submitted by Dave Fletcher
  *  - Added new Benito Arduino Programmer project
73
  *  - Added incomplete device and host mode demos for later enhancement
74
  *  - Updated MassStorage device block write routines to use ping-pong Dataflash buffering to increase throughput by around 30%
75
  *  - Error status LEDs shown when device endpoint configuration fails to complete in all demos and projects
76
77
  *  - Added new USB_Host_SetDeviceConfiguration() convenience function for easy configuration selection of devices while in USB
  *    host mode
78
79
  *  - Added new USB_Host_ClearPipeStall() convenience function to clear a stall condition on an attached device's endpoint
  *  - Added new USB_Host_GetDeviceDescriptor() convenience function to retrieve the attached device's Device descriptor
80
  *  - Added new Endpoint_ClearStatusStage() convenience function to assist with the status stages of control transfers
81
82
83
  *  - Added new USE_INTERNAL_SERIAL define for using the unique serial numbers in some AVR models as the USB device's serial number,
  *    added NO_INTERNAL_SERIAL compile time option to turn off new serial number reading code
  *  - Added new DATAFLASH_CHIP_MASK() macro to the Dataflash driver, which returns the Dataflash select mask for the given chip index
84
85
  *  - Added new HOST_STATE_WaitForDeviceRemoval host state machine state for non-blocking disabling of device communications until the
  *    device has been removed (for use when an error occurs or communications with the device have completed)
86
  *  - Added new FAST_STREAM_TRANSFERS compile time option for faster stream transfers via multiple bytes copied per stream loop
87
  *  - Added stdio stream demo code to the CDC device demos, to show how to create standard streams out of the virtual serial ports
88
  *  - Added new EEPROM and FLASH buffer versions of the Endpoint and Pipe stream functions
89
  *  - Added new USE_FLASH_DESCRIPTORS and FIXED_NUM_CONFIGURATIONS compile time options
90
  *  - Added support for the new ATMEGA32U2, ATMEGA16U2 and ATMEGA8U2 AVR models
91
  *  - Added new USB_DeviceState variable to keep track of the current Device mode USB state
92
  *  - Added new LEDs_ToggleLEDs() function to the LEDs driver
93
  *  - Added new Pipe_BoundEndpointNumber() and Pipe_IsEndpointBound() functions
94
  *  - Added new DEVICE_STATE_AS_GPIOR and HOST_STATE_AS_GPIOR compile time options
95
  *  - Added 404 Not Found errors to the webserver in the RNDIS demos to indicate invalid URLs
96
97
98
  *  
  *  <b>Changed:</b>
  *  - Deprecated psuedo-scheduler and removed dynamic memory allocator from the library (first no longer needed and second unused)
99
100
101
102
103
104
105
  *  - The device-mode CALLBACK_USB_GetDescriptor() function now has an extra parameter so that the memory space in which the requested
  *    descriptor is located can be specified. This means that descriptors can now be located in multiple memory spaces within a device.
  *  - Removed vague USB_IsConnected global - test USB_DeviceState or USB_HostState explicitly to gain previous functionality
  *  - Removed USB_IsSuspended global - test USB_DeviceState against DEVICE_STATE_Suspended instead
  *  - Extended USB_GetDeviceConfigDescriptor() routine to require the configuration number within the device to fetch
  *  - Dataflash_WaitWhileBusy() now always ensures that the dataflash is ready for the next command immediately after returning,
  *    no need to call Dataflash_ToggleSelectedChipCS() afterwards
106
  *  - Low level API MIDI device demo no longer blocks if a note change event is sent while the endpoint is not ready
107
  *  - Pipe_GetErrorFlags() now returns additional error flags for overflow and underflow errors
108
109
110
111
  *  - Pipe stream functions now automatically set the correct pipe token, so that bidirectional pipes can be used
  *  - Pipe_ConfigurePipe() now automatically defaults IN pipes to accepting infinite IN requests, this can still be changed by calling
  *    the existing Pipe_SetFiniteINRequests() function
  *  - Changed F_CLOCK entries in project makefiles to alias to F_CPU by default, as this is the most common case
112
113
  *  - Host mode demos now use sane terminal escape codes, so that text is always readable and events/program output is visually distinguished
  *    from oneanother using foreground colours
114
115
  *  - Internal per-device preprocessing conditions changed to per-device series rather than per-controller group for finer-grain
  *    internal control
116
  *  - Interrupts are no longer disabled during the processing of Control Requests on the default endpoint while in device mode
117
  *  - AudioOutput demos now always output to board LEDs, regardless of output mode (removed AUDIO_OUT_LEDS project option)
118
119
  *  - Removed SINGLE_DEVICE_CONFIGURATION compile time option in favour of the new FIXED_NUM_CONFIGURATIONS option so that the exact number
  *    of device configurations can be defined statically
120
121
  *  - Removed VBUS events, as they are already exposed to the user application via the regular device connection and disconnection events
  *  - Renamed and altered existing events to properly seperate out Host and Device mode events
122
123
124
125
126
  *
  *  <b>Fixed:</b>
  *  - Changed bootloaders to use FLASHEND rather than the existence of RAMPZ to determine if far FLASH pointers are needed to fix
  *    bootloaders on some of the USB AVR devices where avr-libc erronously defines RAMPZ
  *  - Fixes to MassStorageHost for better device compatibility (increase command timeout, change MassStore_WaitForDataReceived()
127
  *    to only unfreeze and check one data pipe at a time) to prevent incorrect device enumerations and freezes while trasferring data
128
129
  *  - Make Pipe_ConfigurePipe() mask the given endpoint number against PIPE_EPNUM_MASK to ensure the endpoint IN direction bit is
  *    cleared to prevent endpoint type corruption
130
  *  - Fixed issue opening CDC-ACM ports on hosts when the CDC device tries to send data before the host has set the line encoding
131
  *  - Fixed USB_OPT_MANUAL_PLL option being ignored during device disconnects on some models (thanks to Brian Dickman)
132
  *  - Fixed documentation mentioning Pipe_GetCurrentToken() function when correct function name is Pipe_GetPipeToken()
133
  *  - Fixed ADC driver for the ATMEGA32U4 and ATMEGA16U4 (thanks to Opendous Inc.)
134
135
  *  - Fixed CDCHost demo unfreezing the pipes at the point of configuration, rather than use
  *  - Fixed MassStorage demo not clearing the reset flag when a Mass Storage Reset is issued while not processing a command
136
137
  *  - Fixed USB_Host_SendControlRequest() not re-suspending the USB bus when initial device ready-wait fails
  *  - Fixed USB Pad regulator not being disabled on some AVR models when the USB_OPT_REG_DISABLED option is used
138
  *  - Fixed Host mode to Device mode UID change not causing a USB Disconnect event when a device was connected
139
  *  - Fixed Mouse/Keyboard demos not performing the correct arithmetic on the Idle period at the right times (thanks to Brian Dickman)
140
  *  - Fixed GenericHID failing HID class tests due to incorrect Logical Minimum and Logical Maximum values (thanks to Søren Greiner)
141
  *  - Fixed incorrect PIPE_EPNUM_MASK mask causing pipe failures on devices with endpoint addresses of 8 and above (thanks to John Andrews)
142
143
  *  - Fixed report data alignment issues in the MouseHostWithParser demo when X and Y movement data size is not a multiple of 8 bits
  *  - Fixed HID Report Descriptor Parser not correctly resetting internal states when a REPORT ID element is encountered
144
  *  - Fixed incorrect BUTTONS_BUTTON1 for the STK526 target
145
  *  - Fixed RNDIS demos freezing when more than one connection was attempted simultaneously, causing memory corruption
146
  *  - Fixed USBtoSerial demo receiving noise from the USART due to pullup not being enabled
147
  *
148
149
150
  *
  *  \section Sec_ChangeLog090605 Version 090605
  *
151
152
  *  - Fixed bug in RNDISEthernet and DualCDC demos not using the correct USB_ControlRequest structure for control request data
  *  - Fixed documentation showing incorrect USB mode support on the supported AVRs list
153
  *  - Fixed RNDISEthernet not working under Linux due to Linux requiring an "optional" RNDIS request which was unhandled
154
155
  *  - Fixed Mouse and Keyboard device demos not acting in accordance with the HID specification for idle periods (thanks to Brian Dickman)
  *  - Removed support for endpoint/pipe non-control interrupts; these did not act in the way users expected, and had many subtle issues
156
  *  - Fixed Device Mode not handling Set Feature and Clear Feature Chapter 9 requests that are addressed to the device (thanks to Brian Dickman)
157
  *  - Moved control endpoint interrupt handling into the library itself, enable via the new INTERRUPT_CONTROL_ENDPOINT token
158
  *  - Fixed CDCHost not clearing configured pipes and resetting configured pipes mask when a partially enumerated invalid CDC
159
  *    interface is skipped
160
161
  *  - Clarified the size of library tokens which accept integer values in the Compile Time Tokens page, values now use the smallest datatype
  *    inside the library that is able to hold their defined value to save space
162
  *  - Removed DESCRIPTOR_ADDRESS() macro as it was largely supurflous and only served to obfuscate code
163
164
165
166
  *  - Rewritten event system to remove all macros, to make user code clearer
  *  - Fixed incorrect ENDPOINT_EPNUM_MASK mask preventing endpoints above EP3 from being selected (thanks to Jonathan Oakley)
  *  - Removed STREAM_CALLBACK() macro - callbacks now use regular function definitions to clarify user code
  *  - Removed DESCRIPTOR_COMPARATOR() macro - comparators should now use regular function definitions to clarify user code
167
  *  - USB_IsConnected is now cleared before the USB_Disconnect() event is fired in response to VBUS being removed
168
  *  - Fixed incorrect PID value being used in the USBtoSerial project (thanks to Phill)
169
170
  *  - Deleted StdDescriptors.c, renamed USB_GetDescriptor() to CALLBACK_USB_GetDescriptor, moved ConfigDescriptor.c/.h from the
  *    LUFA/Drivers/USB/Class/ directory to LUFA/Drivers/USB/HighLevel/ in preperation for the new USB class APIs
171
  *  - Moved out each demos' functionality library files (e.g. Ring Buffer library) to /Lib directories for a better directory structure
172
  *  - Removed Tx interrupt from the USBtoSerial demo; now sends characters via polling to ensure more time for the Rx interrupt
173
174
  *  - Fixed possible enumeration errors from spinloops which may fail to exit if the USB connection is severed before the exit condition
  *    becomes true
175
  *
176
177
178
  *
  *  \section Sec_ChangeLog090510 Version 090510
  *
Dean Camera's avatar
Dean Camera committed
179
180
  *  - Added new GenericHIDHost demo
  *  - Corrections to the KeyboardHost and MouseHost demos' pipe handling to freeze and unfreeze the data pipes at the point of use
181
182
183
  *  - KeyboardHost, MouseHost and GenericHIDHost demos now save and restore the currently selected pipe inside the pipe ISR
  *  - Changed GenericHID device demo to use the LUFA scheduler, added INTERRUPT_DATA_ENDPOINT and INTERRUPT_CONTROL_ENDPOINT compile
  *    time options
184
  *  - All comments in the library, bootloaders, demos and projects have now been spell-checked and spelling mistakes/typos corrected
185
  *  - Added new PIMA_DATA_SIZE() define to the Still Image Host demo
186
187
  *  - Add call to MassStore_WaitForDataReceived() in MassStore_GetReturnedStatus() to ensure that the CSW has been received in the
  *    extended MSC timeout period before continuing, to prevent long processing delays from causing the MassStore_GetReturnedStatus()
188
  *    to early-abort (thanks to Dmitry Maksimov)
189
190
  *  - Move StdRequestType.h, StreamCallbacks.h, USBMode.h from the LowLevel USB driver directory to the HighLevel USB driver directory,
  *    where they are more suited
191
192
  *  - Removed all binary constants and replaced with decimal or hexadecimal constants so that unpatched GCC compilers can still build the
  *    code without having to be itself patched and recompiled first
193
194
  *  - Added preprocessor checks and documentation to the bootloaders giving information about missing SIGNATURE_x defines due to
  *    outdated avr-libc versions.
195
  *  - Added support to the CDCHost demo for devices with multiple CDC interfaces which are not the correct ACM type preceding the desired
196
  *    ACM CDC interface
197
  *  - Fixed GenericHID demo not starting USB and HID management tasks when not using interrupt driven modes (thanks to Carl Kjeldsen)
198
  *  - Fixed RNDISEthenet demo checking the incorrect message field for packet size constraints (thanks to Jonathan Oakley)
199
  *  - Fixed WriteNextReport code in the GenericHIDHost demo using incorrect parameter types and not selecting the correct endpoint
200
201
  *  - Adjusted sample CTC timer calculations in the AudioOutput and AudioInput demos to match the CTC calculations in the AVR datasheet,
  *    and to fix instances where rounding caused the endpoint to underflow (thanks to Robin Theunis)
202
203
204
  *  - The USB_Host_SendControlRequest() function no longer automatically selects the Control pipe (pipe 0), so that other control type
  *    pipes can be used with the function
  *  - The USB Host management task now saves and restores the currently selected pipe before and after the task completes
205
206
  *  - Fixed GenericHIDHost demo report write routine incorrect for control type requests (thanks to Andrei Krainev)
  *  - Removed Endpoint_ClearCurrentBank() and Pipe_ClearCurrentBank() in favour of new Endpoint_ClearIN(), Endpoint_ClearOUT(),
207
  *    Pipe_ClearIN() and Pipe_ClearOUT() macros (done to allow for the detection of packets of zero length)
208
209
  *  - Renamed *_ReadWriteAllowed() macros to *_IsReadWriteAllowed() to remain consistent with the rest of the LUFA API
  *  - Endpoint_IsSetupReceived() macro has been renamed to Endpoint_IsSETUPReceived(), Endpoint_ClearSetupReceived() macro has been
210
  *    renamed to Endpoint_ClearSETUP(), the Pipe_IsSetupSent() macro has been renamed to Pipe_IsSETUPSent() and the
211
212
  *    Pipe_ClearSetupSent() macro is no longer applicable and should be removed - changes made to compliment the new endpoint and pipe
  *    bank management API
213
  *  - Updated all demos, bootloaders and projects to use the new endpoint and pipe management APIs (thanks to Roman Thiel from Curetis AG)
214
215
216
  *  - Updated library doxygen documentation, added groups, changed documentation macro functions to real functions for clarity
  *  - Removed old endpoint and pipe aliased read/write/discard routines which did not have an explicit endian specifier for clarity
  *  - Removed the ButtLoadTag.h header file, as no one used for its intended purpose anyway
217
  *  - Renamed the main Drivers/AT90USBXXX directory to Drivers/Peripheral, renamed the Serial_Stream driver to SerialStream
218
  *  - Fixed CDC and USBtoSerial demos freezing where buffers were full while still transmitting or receiving (thanks to Peter Hand)
219
220
221
  *  - Removed "Host_" section of the function names in ConfigDescriptor.h, as most of the routines can now be used in device mode on the
  *    device descriptor
  *  - Renamed functions in the HID parser to have a "USB_" prefix and the acronym "HID" in the name
222
  *  - Fixed incorrect HID interface class and subclass values in the Mouse and KeyboardMouse demos (thanks to Brian Dickman)
223
  *  - Capitalised the "Descriptor_Search" and "Descriptor_Search_Comp" prefixes of the values in the DSearch_Return_ErrorCodes_t and
224
  *    DSearch_Comp_Return_ErrorCodes_t enums
225
226
227
228
  *  - Removed "ERROR" from the enum names in the endpoint and pipe stream error code enums
  *  - Renamed the USB_PowerOnErrorCodes_t enum to USB_InitErrorCodes_t, renamed the POWERON_ERROR_NoUSBModeSpecified enum value to
  *    USB_INITERROR_NoUSBModeSpecified
  *  - Renamed USB_PowerOnFail event to USB_InitFailure
229
  *  - Renamed OTG.h header functions to be more consistent with the rest of the library API
230
  *  - Changed over all deprecated GCC structure tag initializers to the standardized C99 format (thanks to Mike Alexander)
231
232
233
234
  *  - USB_HostRequest renamed to USB_ControlRequest, entire control request header is now read into USB_ControlRequest in Device mode
  *    rather than having the library pass only partially read header data to the application
  *  - The USB_UnhandledControlPacket event has had its parameters removed, in favour of accessing the new USB_ControlRequest structure
  *  - The Endpoint control stream functions now correctly send a ZLP to the host when less data than requested is sent
235
  *  - Fixed USB_RemoteWakeupEnabled flag never being set (the REMOTE WAKEUP Set Feature request was not being handled)
236
237
238
  *  - Renamed the FEATURELESS_CONTROL_ONLY_DEVICE compile-time token to CONTROL_ONLY_DEVICE
  *  - Endpoint configuration is now refined to give better output when all configurations have static inputs - removed the now useless
  *    STATIC_ENDPOINT_CONFIGURATION compile time token
239
240
241
  *  - Fixed SPI driver init function not clearing SPI2X bit when not needed
  *  - Fixed PREVENT ALLOW MEDIUM REMOVAL command issuing in the MassStorageHost demo using incorrect parameters (thanks to Mike Alex)
  *  - Fixed MassStorageHost demo broken due to an incorrect if statement test in MassStore_GetReturnedStatus()
242
  *  - Fixed reversed signature byte ordering in the CDC bootloader (thanks to Johannes Raschke)
243
244
  *  - Changed PIPE_CONTROLPIPE_DEFAULT_SIZE from 8 to 64 to try to prevent problems with faulty devices which do not respect the given
  *    wLength value when reading in the device descriptor
245
246
247
  *  - Fixed missing semicolon in the ATAVRUSBRF01 LED board driver code (thanks to Morten Lund)
  *  - Changed LED board driver code to define dummy LED masks for the first four board LEDs, so that user code can be compiled for boards
  *    with less than four LEDs without code modifications (thanks to Morten Lund)
248
  *  - Changed HWB board driver to Buttons driver, to allow for the support of future boards with more than one mounted GPIO button
249
250
  *  - Serial driver now correctly calculates the baud register value when in double speed mode
  *  - Init function of the Serial driver is now static inline to product smaller code for the common-case of static init values
251
  *    
252
  *
Dean Camera's avatar
Dean Camera committed
253
  *  \section Sec_ChangeLog090401 Version 090401
254
255
256
257
258
  *
  *  - Fixed MagStripe project configuration descriptor containing an unused (blank) endpoint descriptor
  *  - Incorporated makefile changes by Denver Gingerich to retain compatibility with stock (non-WinAVR) AVR-GCC installations
  *  - Fixed makefile EEPROM programming targets programming FLASH data in addition to EEPROM data
  *  - LUFA devices now enumerate correctly with LUFA hosts
259
  *  - Fixed Configuration Descriptor search routine freezing when a comparator returned a failure
260
261
  *  - Removed HID report item serial dump in the MouseHostWithParser and KeyboardHostWithParser - useful only for debugging, and
  *    slowed down the enumeration of HID devices too much
262
  *  - Increased the number of bits per track which can be read in the MagStripe project to 8192 when compiled for the AT90USBXXX6/7
263
  *  - Fixed KeyboardMouse demo discarding the wIndex value in the REQ_GetReport request
264
265
  *  - USBtoSerial demo now discards all Rx data when not connected to a USB host, rather than buffering characters for transmission
  *    next time the device is attached to a host.
266
267
  *  - Added new F_CLOCK compile time constant to the library and makefiles, to give the raw input clock (used to feed the PLL before any
  *    clock prescaling is performed) frequency, so that the PLL prescale mask can be determined
268
269
270
  *  - Changed stream wait timeout counter to be 16-bit, so that very long timeout periods can be set for correct communications with
  *    badly designed hosts or devices which greatly exceed the USB specification limits
  *  - Mass Storage Host demo now uses a USB_STREAM_TIMEOUT_MS of two seconds to maintain compatibility with poorly designed devices
271
272
  *  - Function attribute ATTR_ALWAYSINLINE renamed to ATTR_ALWAYS_INLINE to match other function attribute macro naming conventions
  *  - Added ATTR_ALWAYS_INLINE attribute to several key inlined library components, to ensure they are inlined in all circumstances
273
  *  - Removed SetSystemClockPrescaler() macro, the clock_prescale_set() avr-libc macro has been corrected in recent avr-libc versions
274
  *  - Fixed incorrect/missing control status stage transfers on demos, bootloaders and applications (thanks to Nate Lawson)
275
  *  - The NO_CLEARSET_FEATURE_REQUEST compile time token has been renamed to FEATURELESS_CONTROL_ONLY_DEVICE, and its function expanded
276
  *    to also remove parts of the Get Status chapter 9 request to further reduce code usage
277
  *  - Makefile updated to include output giving the currently selected BOARD parameter value
278
279
  *  - Board Dataflash driver now allows for dataflash ICs which use different shifts for setting the current page/byte address (thanks
  *    to Kenneth Clubb)
280
281
  *  - Added DataflashManager_WriteBlocks_RAM() and DataflashManager_ReadBlocks_RAM() functions to the MassStorage demo, to allow for easy
  *    interfacing with a FAT library for dataflash file level access
282
  *  - Corrected CDC class bootloader to fix a few bugs, changed address counter to store x2 addresses for convenience
283
  *  - Fixed typos in the SPI driver SPI_SPEED_FCPU_DIV_64 and SPI_SPEED_FCPU_DIV_128 masks (thanks to Markus Zocholl)
284
285
  *  - Keyboard and Mouse device demos (normal, data interrupt and fully interrupt driven) combined into unified keyboard and mouse demos
  *  - Keyboard and Mouse host demos (normal and data interrupt driven) combined into unified keyboard and mouse demos
286
  *  - Removed AVRISP_Programmer project due to code quality concerns
287
  *  - Fixed CDC demo not sending an empty packet after each transfer to prevent the host from buffering incoming data
288
  *  - Fixed documentation typos and preprocessor checks relating to misspellings of the USE_RAM_DESCRIPTORS token (thanks to Ian Gregg)
289
  *  - Fixed USBTask.h not conditionally including HostChapter9.h only when USB_CAN_BE_HOST is defined (thanks to Ian Gregg)
290
  *  - Fixed incorrect ADC driver init register manipulation (thanks to Tobias)
291
  *  - Added new GenericHID device demo application
292
  *  - Fixed Still Image Host SImage_SendData() function not clearing the pipe bank after sending data
293
  *
294
295
296
297
298
299
  *
  *  \section Sec_ChangeLog090209 Version 090209
  *
  *  - PWM timer mode in AudioOut demo changed to Fast PWM for speed
  *  - Updated Magstripe project to work with the latest hardware revision
  *  - Fixed library not responding to the BCERRI flag correctly in host mode, leading to device lockups
300
301
  *  - Fixed library handling Get Descriptor requests when not addressed as standard requests to the device or interface (thanks to
  *    Nate Lawson)
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
  *  - Fixed serious data corruption issue in MassStorage demo dataflash write routine
  *  - Added new NO_CLEARSET_FEATURE_REQUEST compile time token
  *  - USB task now restores previous global interrupt state after execution, rather than forcing global interrupts to be enabled
  *  - Fixed USB_DeviceEnumerationComplete event firing after each configuration change, rather than once after the initial configuration
  *  - Added ENDPOINT_DOUBLEBANK_SUPPORTED() macros to Endpoint.h, altered ENDPOINT_MAX_SIZE() to allow user to specify endpoint
  *  - ENDPOINT_MAX_ENDPOINTS changed to ENDPOINT_TOTAL_ENDPOINTS, PIPE_MAX_PIPES changed to PIPE_TOTAL_PIPES
  *  - Endpoint and Pipe non-control stream functions now ensure endpoint or pipe is ready before reading or writing
  *  - Changed Teensy bootloader to use a watchdog reset when exiting rather than a software jump
  *  - Fixed integer promotion error in MassStorage and MassStorageHost demos, corrupting read/write transfers
  *  - SPI_SendByte is now SPI_TransferByte, added new SPI_SendByte and SPI_ReceiveByte functions for fast one-way transfer
  *  - MassStorage demo changed to use new fast one-way SPI transfers to increase throughput
  *  - MassStorage handling of Mass Storage Reset class request improved
  *  - Altered MassStorage demo dataflash block read code for speed
  *  - Added USB_IsSuspended global flag
  *  - Simplified internal Dual Mode (OTG) USB library code to reduce code size
  *  - Extended stream timeout period to 100ms from 50ms
  *  - Mass Storage Host demo commands now all return an error code from the Pipe_Stream_RW_ErrorCodes_t enum
  *  - Added SubErrorCode parameter to the USB_DeviceEnumerationFailed event
  *  - VBUS drop interrupt now disabled during the manual-to-auto VBUS delivery handoff
  *  - Simplified low level backend so that device/host mode initialization uses the same code paths
  *  - Added workaround for faulty Mass Storage devices which do not implement the required GET_MAX_LUN request
  *  - Removed buggy Telnet application from the RNDIS demo
  *  - Moved Mass Storage class requests in the Mass Storage Host demo to wrapper functions in MassStoreCommands.c
  *  - Fixed incorrect SCSI command size value in the Request Sense command in MassStoreCommands.c
  *  - Added SetProtocol request to HID class non-parser Mouse and Keyboard demos to force devices to use the correct Boot Protocol
  *  - Added new "dfu" and "flip" programming targets to project makefiles
  *  - HID_PARSE_Sucessful enum member typo corrected to HID_PARSE_Successful
329
  *  - Changed COLLECTION item structures in the HID descriptor parser to include the collection's Usage Page value
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
  *  - Serial driver now sets Tx line as output, enables pullup on Rx line
  *  - Fixed smaller USB AVRs raising multiple connection and disconnection events when NO_LIMITED_CONTROLLER_CONNECT is disabled
  *  - Added HOST_DEVICE_SETTLE_DELAY_MS to give the host delay after a device is connected before it is enumerated
  *  - Fixed KeyboardHostWithParser demo linking against the wrong global variables
  *  - Completed doxygen documentation of remaining library bootloaders, demos and projects
  *  - Fixed incorrect bootloader start address in the TeensyHID bootloader
  *  - Added HWB button whole-disk ASCII dump functionality to MassStoreHost demo
  *  - Replaced printf_P(PSTR("%c"), {Variable}) calls with putchar(<Variable>) for speed and size savings
  *  - Serial driver now accepts baud rates over 16-bits in size, added double speed flag option
  *  - Fixed incorrect callback abort return value in Pipe.c
  *  - Added new flip-ee and dfu-ee makefile targets (courtesy of Opendous Inc.)
  *  - Removed reboot-on-disconnect code from the TeensyHID bootloader, caused problems on some systems
  *  - Fixed AudioOutput and AudioInput demos looping on the endpoint data, rather than processing a sample at a time and returning
  *    each time the task runs to allow for other tasks to execute
  *  - Added support for the Atmel ATAVRUSBRF01 board
  *  - Added AVRISP Programmer Project, courtesy of Opendous Inc.
  *  - Fixed CDC Host demo not searching through both CDC interfaces for endpoints
  *  - Fixed incorrect Product String descriptor length in the DFU class bootloader
  *
349
  *
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
  *  \section Sec_ChangeLog081224 Version 081224
  *
  *  - MyUSB name changed to LUFA, the Lightweight USB Framework for AVRs
  *  - Fixed Mass Storage Host demo's MassStore_SendCommand() delay in the incorrect place
  *  - Fixed USBtoSerial demo not calling ReconfigureUSART() after a change in the line encoding
  *  - Fixed infinite loop in host mode Host-to-Device control transfers with data stages
  *  - HID report parser now supports devices with multiple reports in one interface via Report IDs
  *  - Fixed RZUSBSTICK board LED driver header incorrect macro definition order causing compile errors
  *  - Calling USB_Init() when the USB interface is already configured now forces a complete interface reset
  *    and re-enumeration - fixes MyUSB DFU bootloader not switching to app code correctly when soft reset used
  *  - Fixed "No newline at end of file" warning when stream callbacks are enabled
  *  - DFU bootloader now uses fixed signature bytes per device, rather than reading them out dynamically for size
  *  - Added new FIXED_CONTROL_ENDPOINT_SIZE and USE_SINGLE_DEVICE_CONFIGURATION switches to statically define certain values to
  *    reduce compiled binary size
  *  - Added new NO_LIMITED_CONTROLLER_CONNECT switch to prevent the library from trying to determine bus connection
  *    state from the suspension and wake up events on the smaller USB AVRs
  *  - Added summary of all library compile time tokens to the documentation
  *  - Added overview of the LUFA scheduler to the documentation
  *  - Removed MANUAL_PLL_CONTROL compile time token, replaced with a mask for the USB_Init() Options parameter
  *  - CDC bootloader now uses the correct non-far or far versions of the pgm_* functions depending on if RAMPZ is defined
  *  - Doxygen documentation now contains documentation on all the projects, bootloaders and most demos included with the library
  *  - CDC bootloader now runs user application when USB disconnected rather than waiting for a hard reset
  *  - MouseHostWithParser and KeyboardHostWithParser now support multiple-report devices
  *  - RNDIS demo can now close connections correctly using the new TCP_APP_CLOSECONNECTION() macro - used in Webserver  
  *  - Fixed the DFU bootloader, no longer freezes up when certain files are programmed into an AVR, made reading/writing faster
  *  - Fixed mouse/joystick up/down movements reversed - HID mouse X/Y coordinates use a left-handed coordinate system, not a normal 
  *    right-handed system
  *  - Added stub code to the CDC and USBtoSerial demos showing how to read and set the RS-232 handshake lines - not currently used in
  *    the demos, but the example code and supporting defines are now in place
  *  - Interrupts are now disabled when processing a control request in device mode, to avoid exceeding the strict control request
  *    timing requirements.
  *  - All demos now use a central StatusUpdate() function rather than direct calls to the board LED functions, so that the demos can
  *    easily be altered to show different LED combinations (or do something else entirely) as the demo's status changes
  *  - Removed LED commands from the CDC bootloader, unused by most AVR910 programming software
  *  - Fixed RNDIS demo ICMP ping requests echoing back incorrect data
385
  *  - Added DHCP server code to RNDIS demo, allowing for hands-free auto configuration on any PC
386
387
388
389
390
391
392
  *  - Fixed DFU bootloader PID value for the ATMEGA16U4 AVR
  *  - Endpoint and Pipe configuration functions now return an error code indicating success or failure
  *  - USB Reset in device mode now resets and disables all device endpoints
  *  - Added intermediate states to the host mode state machine, reducing the USB task blocking time to no more than 1ms explicitly per
  *    invocation when in host mode
  *  - Added support for the ATMEGA32U6 microcontroller
  *  - Added STATIC_ENDPOINT_CONFIGURATION compile time option, enabled in the bootloaders to minimize space usage
393
  *  - Removed redundant code from the USB device GetStatus() chapter 9 processing routine
394
395
396
397
398
399
  *  - Added new TeensyHID bootloader, compatible with the Teensy HID protocol (http://www.pjrc.com/teensy/)
  *  - Versions are now numbered by release dates, rather than arbitrary major/minor revision numbers
  *  - USB_RemoteWakeupEnabled is now correctly set and cleared by SetFeature and ClearFeature requests from the host
  *  - Changed prototype of GetDescriptor, so that it now returns the descriptor size (or zero if the descriptor doesn't exist)
  *    rather than passing the size back to the caller through a parameter and returning a boolean
  *
400
  *
401
402
403
404
405
406
  *  \section Sec_ChangeLog153 Version 1.5.3 - Released 2nd October, 2008
  *
  *  - Fixed CDC bootloader using pgmspace macros for some descriptors inappropriately
  *  - Updated all Mouse and Keyboard device demos to include boot protocol support (now works in BIOS)
  *  - Renamed bootloader directories to remove spaces, which were causing build problems on several OSes
  *  - Removed serial number strings from all but the MassStore demo where it is required - users were not
407
  *    modifying the code to either omit the descriptor or use a unique serial per device causing problems
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
  *    when multiple units of the same device were plugged in at the same time
  *  - AudioOutput and AudioInput demos now correctly silence endpoints when not enabled by the host
  *  - Added KeyboardMouse demo (Keyboard and Mouse functionality combined into a single demo)
  *  - Added DriverStubs directory to house board level driver templates, to make MyUSB compatible custom board
  *    driver creation easier
  *  - Extended MassStorage demo to support multiple LUNs, 2 by default
  *  - Fixed incorrect device address mask, preventing the device from enumerating with addresses larger than 63
  *  - Fixed incorrect data direction mask in the GetStatus standard request, preventing it from being handled
  *  - Fixed incorrect GetStatus standard request for endpoints, now returns the endpoint STALL status correctly
  *  - Added in new USB_RemoteWakeupEnabled and USB_CurrentlySelfPowered flags rather than using fixed values
  *  - Added DualCDC demo to demonstrate the use of Interface Association Descriptors
  *  - Added pipe NAK detection and clearing API
  *  - Added pipe status change (NAK, STALL, etc.) interrupt API
  *  - Fixed MassStorageHost demo so that it no longer freezes randomly when issuing several commands in a row
  *  - Host demos configuration descriptor routines now return a unique error code when the returned data does
  *    not have a valid configuration descriptor header
  *  - Added Endpoint_WaitUntilReady() and Pipe_WaitUntilReady() functions
  *  - Stream functions now have software timeouts, timeout period can be set by the USB_STREAM_TIMEOUT_MS token
  *  - All demos now pass the USB.org automated Chapter 9 device compliance tests
  *  - All HID demos now pass the USB.org automated HID compliance tests
  *  - Polling interval of the interrupt endpoint in the CDC based demos changed to 0xFF to fix problems on Linux systems
  *  - Changed stream functions to accept a new callback function, with NO_STREAM_CALLBACKS used to disable all callbacks
  *  - Mass Storage demo dataflash management routines changed to use the endpoint stream functions		
  *  - Added AVRStudio project files for each demo in addition to the existing Programmer's Notepad master project file
  *  - Re-added call to ReconfigureUSART() in USBtoSerial SetLineCoding request, so that baud rate changes
  *    are reflected in the hardware (change was previously lost)
  *
  *
  *  \section Sec_ChangeLog152 Version 1.5.2 - Released 31st July, 2008
  *
  *  - Fixed SwapEndian_32() function in Common.h so that it now works correctly (wrong parameter types)
  *  - Updated RNDIS demo - notification endpoint is no longer blocking so that it works with faulty Linux RNDIS
  *    implementations (where the notification endpoint is ignored in favour of polling the control endpoint)
  *  - Fixed incorrect Vendor Description string return size in RNDIS demo for the OID_GEN_VENDOR_DESCRIPTION OID token
  *  - Added very basic TCP/IP stack and HTTP/TELNET servers to RNDIS demo
  *  - Fixed DFU bootloader exit causing programming software to complain about failed writes
  *  - Fixed DFU bootloader EEPROM programming mode wiping first flash page
  *  - Fixed Clear/Set Feature device standard request processing code (fixing MassStorage demo in the process)
  *  - Added support for the ATMEGA16U4 AVR microcontroller
  *  - Library licence changed from LGPLv3 to MIT license
  *
  *
  *  \section Sec_ChangeLog151 Version 1.5.1 - Released 31st July, 2008
  *
  *  - Changed host demos to enable the host function task on the firing of the USB_DeviceEnumerationComplete event
  *    rather than the USB_DeviceAttached event
  *  - HID Usage Stack now forcefully cleared after an IN/OUT/FEATURE item has been completely processed to remove
  *    any referenced but not created usages
  *  - Changed USB_INT_DisableAllInterrupts() and USB_INT_ClearAllInterrupts(), USB_Host_GetNextDescriptorOfType(),
  *    USB_Host_GetNextDescriptorOfTypeBefore(), USB_Host_GetNextDescriptorOfTypeAfter() to normal functions (from inline)
  *  - Fixed USBtoSerial demo not sending data, only receiving
  *  - Fixed main makefile to make all by default, fixed MagStripe directory case to prevent case-sensitive path problems
  *  - ConfigDescriptor functions made normal, instead of static inline
  *  - Pipe/Endpoint *_Ignore_* functions changed to *_Discard_*, old names still present as aliases
  *  - Fixed ENDPOINT_MAX_SIZE define to be correct on limited USB controller AVRs
  *  - Changed endpoint and pipe size translation routines to use previous IF/ELSE IF cascade code, new algorithmic
  *    approach was buggy and caused problems
  *  - Bootloaders now compile with -fno-inline-small-functions option to reduce code size
  *  - Audio demos now use correct endpoint sizes for full and limited controller USB AVRs, double banking in all cases
  *    to be in line with the specification (isochronous endpoints MUST be double banked)
  *  - Added Interface Association descriptor to StdDescriptors.h, based on the relevant USB2.0 ECN
  *  - Fixed MIDI demo, corrected Audio Streaming descriptor to follow the MIDI-specific AS structure
  *  - Fixed HID class demo descriptors so that the HID interface's protocol is 0x00 (required for non-boot protocol HID
  *    devices) to prevent problems on hosts expecting the boot protocol functions to be supported
  *  - Added read/write control stream functions to Endpoint.h
  *  - Fixed AudioOut demo not setting port pins to inputs on USB disconnect properly
  *  - Added RNDISEthernet demo application
  *
  *
  *  \section Sec_ChangeLog150 Version 1.5.0 - Released 10 June, 2008
  *
  *  - Fixed MIDI demo, now correctly waits for the endpoint to be ready between multiple note messages
  *  - Added CDC Host demo application
  *  - Added KeyboardFullInt demo application
  *  - Endpoint and Pipe creation routines now mask endpoint/pipe size with the size mask, to remove transaction
  *    size bits not required for the routines (improves compatibility with devices)
  *  - Fixed AudioInput demo - now correctly sends sampled audio to the host PC
485
  *  - Fixed AudioOutput demo once more -- apparently Windows requires endpoint packets to be >=192 bytes
486
487
488
489
490
491
492
493
  *  - Shrunk round-robbin scheduler code slightly via the use of struct pointers rather than array indexes
  *  - Fixed off-by-one error when determining if the Usage Stack is full inside the HID Report parser
  *  - Renamed Magstripe.h to MagstripeHW.h and moved driver out of the library and into the MagStripe demo folder
  *  - Added preprocessor checks to enable C linkage on the library components when used with a C++ compiler
  *  - Added Still Image Host demo application
  *  - The USB device task now restores the previously selected endpoint, allowing control requests to be transparently
  *    handled via interrupts while other endpoints are serviced through polling
  *  - Fixed device signature being sent in reverse order in the CDC bootloader
494
495
  *  - Host demos now have a separate ConfigDescriptor.c/.h file for configuration descriptor processing
  *  - HostWithParser demos now have a separate HIDReport.c/.h file for HID report processing and dumping
496
497
498
499
  *  - Removed non-mandatory commands from MassStorage demo to save space, fixed SENSE ResponseCode value
  *  - CDC demos now send empty packets after sending a full one to prevent buffering issues on the host
  *  - Updated demo descriptors to use VID/PID values donated by Atmel
  *  - Added DoxyGen documentation to the source files
500
  *  - Fixed Serial_IsCharReceived() definition, was previously reversed
501
  *  - Removed separate USB_Descriptor_Language_t descriptor, USB_Descriptor_String_t is used instead
502
503
504
  *  - Removed unused Device Qualifier descriptor structure
  *  - Renamed the USB_CreateEndpoints event to the more appropriate USB_ConfigurationChanged
  *  - Fixed MassStorageHost demo reading in the block data in reverse
505
  *  - Removed outdated typedefs in StdRequestType.h, superseded by the macro masks
506
507
508
509
510
511
  *  - Corrected OTG.h is now included when the AVR supports both Host and Device modes, for creating OTG products
  *  - USB_DeviceEnumerationComplete event is now also fired when in device mode and the host has finished its enumeration
  *  - Interrupt driven demos now properly restore previously selected endpoint when ISR is complete
  *  - USB_HOST_TIMEOUT_MS is now overridable in the user project makefile to a custom fixed timeout value
  *  - Renamed USB_Host_SOFGeneration_* macros to more friendly USB_Host_SuspendBus(), USB_Host_ResumeBus()
  *    and USB_Host_IsBusSuspended()
512
  *  - Renamed *_*_Is* macros to *_Is* to make all flag checking macros consistent, Pipe_SetInterruptFreq() is now
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
  *    Pipe_SetInterruptPeriod() to use the correct terminology
  *  - UnicodeString member of USB_Descriptor_String_t struct changed to an ordinary int array type, so that the GCC
  *    Unicode strings (prefixed with an L before the opening quotation mark) can be used instead of explicit arrays
  *    of ASCII characters
  *  - Fixed Endpoint/Pipes being configured incorrectly if the maximum endpoint/pipe size for the selected USB AVR
  *    model was given as the bank size
  *  - HID device demos now use a true raw array for the HID report descriptor rather than a struct wrapped array
  *  - Added VERSION_BCD() macro, fixed reported HID and USB version numbers in demo descriptors
  *  - Cleaned up GetDescriptor device chapter 9 handler function
  *  - Added GET_REPORT class specific request to HID demos to make them complaint to the HID class
  *  - Cleaned up setting of USB_IsInitialized and USB_IsConnected values to only when needed
  *  - Removed Atomic.c and ISRMacro.h; the library was already only compatible with recent avr-lib-c for other reasons
  *  - All demos and library functions now use USB standardized names for the USB data (bRequest, wLength, etc.)
  *  - Added USE_NONSTANDARD_DESCRIPTOR_NAMES token to switch back to the non-standard descriptor element names
  *
  *
  *  \section Sec_ChangeLog141 Version 1.4.1 - Released 5 May, 2008
  *
  *  - Enhanced KeyboardWithParser demo, now prints out pressed alphanumeric characters like the standard demo
  *  - Fixed MassStorage demo, read/writes using non mode-10 commands now work correctly
  *  - Corrected version number in Version.h
  *
  *
  *  \section Sec_ChangeLog140 Version 1.4.0 - Released 5 May, 2008
  *
  *  - Added HID Report Parser API to the library
  *  - Added Mouse and Keyboard host demo applications, using the new HID report parser engine
  *  - Added MouseFullInt demo, which demonstrates a fully interrupt (including control requests) mouse device
  *  - Fixed incorrect length value in the audio control descriptor of the AudioOutput and AudioInput demos
  *  - Added MIDI device demo application to the library
  *  - Fixed problem preventing USB devices from being resumed from a suspended state
  *  - Added new CDC class bootloader to the library, based on the AVR109 bootloader protocol
  *  - Added header to each demo application indicating the mode, class, subclass, standards used and supported speed
  *  - Functions expecting endpoint/pipe numbers are no longer automatically masked against ENDPOINT_EPNUM_MASK or
  *    PIPE_PIPENUM_MASK - this should be manually added to code which requires it
  *  - Fixed DFU class bootloader - corrected frequency of flash page writes, greatly reducing programming time
  *  - Renamed AVR_HOST_GetDeviceConfigDescriptor() to USB_Host_GetDeviceConfigDescriptor() and AVR_HOST_GetNextDescriptor()
  *    to USB_Host_GetNextDescriptor()
  *  - Added new USB_Host_GetNextDescriptorOfTypeBefore() and USB_Host_GetNextDescriptorOfTypeAfter() routines
  *  - Moved configuration descriptor routines to MyUSB/Drivers/USB/Class/, new accompanying ConfigDescriptors.c file
  *  - Added new configuration descriptor comparator API for more powerful descriptor parsing, updated host demos to use the
  *    new comparator API
  *  - Fixed MassStorageHost demo capacity printout, and changed data read/write mode from little-endian to the correct
  *    big-endian for SCSI devices
557
  *  - Fixed macro/function naming consistency; USB_HOST is now USB_Host, USB_DEV is now USB_Device
558
559
560
561
562
563
564
565
566
567
568
569
  *  - Added better error reporting to host demos
  *  - Added 10 microsecond delay after addressing devices in host mode, to prevent control stalls
  *
  *
  *  \section Sec_ChangeLog132 Version 1.3.2 - Released April 1st, 2008
  *
  *  - Added call to ReconfigureUSART() in USBtoSerial SetLineCoding request, so that baud rate changes
  *    are reflected in the hardware
  *  - Fixed CDC and USBtoSerial demos - Stream commands do not work for control endpoints, and the 
  *    GetLineCoding request had an incorrect RequestType mask preventing it from being processed
  *  - Improved reliability of the USBtoSerial demo, adding a busy wait while the buffer is full
  *  - Device control endpoint size is now determined from the device's descriptors rather than being fixed
570
  *  - Separated out SPI code into new SPI driver in AT90USBXXX driver directory
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
  *  - Bootloader now returns correct PID for the selected USB AVR model, not just the AT90USB128X PID
  *  - Added support for the RZUSBSTICK board
  *  - Bicolour driver removed in favour of generic LEDs driver
  *  - Added support for the ATMEGA32U4 AVR
  *  - Added MANUAL_PLL_CONTROL compile time option to prevent the USB library from manipulating the PLL
  *
  *
  *  \section Sec_ChangeLog131 Version 1.3.1 - Released March 19th 2008
  *
  *  - Fixed USB to Serial demo - class value in the descriptors was incorrect
  *  - Control endpoint size changed from 64 bytes to 8 bytes to save on USB FIFO RAM and to allow low
  *    speed mode devices to enumerate properly
  *  - USB to Serial demo data endpoints changed to dual-banked 16 byte to allow the demo to work
  *    on USB AVRs with limited USB FIFO RAM
  *  - Changed demo endpoint numbers to use endpoints 3 and 4 for double banking, to allow limited
  *    USB device controller AVRs (AT90USB162, AT90USB82) to function correctly
  *  - Updated Audio Out demo to use timer 1 for AVRs lacking a timer 3 for the PWM output
  *  - Fixed incorrect USB_DEV_OPT_HIGHSPEED entry in the Mass Storage device demo makefile
  *  - Optimized Mass Storage demo for a little extra transfer speed
  *  - Added LED indicators to the Keyboard demo for Caps Lock, Num Lock and Scroll Lock
  *  - Added Endpoint_Read_Stream, Endpoint_Write_Stream, Pipe_Read_Stream and Pipe_Write_Stream functions
  *    (including Big and Little Endian variants)
  *  - Made Dataflash functions inline for speed, removed now empty Dataflash.c driver file
594
  *  - Added new SetSystemClockPrescaler() macro (thanks to Joerg Wunsch)
595
596
597
598
599
600
601
602
603
604
605
606
607
  *  - Fixed Endpoint_ClearStall() to function correctly on full USB controller AVRs (AT90USBXXX6/7)
  *  - Endpoint_Setup_In_Clear() and Endpoint_Setup_Out_Clear() no longer set FIFOCON, in line with the
  *    directives in the datasheet
  *  - Fixed PLL prescaler defines for all AVR models and frequencies
  *  - Fixed ENDPOINT_INT_IN and ENDPOINT_INT_OUT definitions
  *  - Added interrupt driven keyboard and mouse device demos
  *  - Combined USB_Device_ClearFeature and USB_Device_SetFeature requests into a single routine for code
  *    size savings
  *  - Added missing Pipe_GetCurrentPipe() macro to Pipe.h
  *
  *
  *  \section Sec_ChangeLog130 Version 1.3.0 - Released March 7th 2008
  *
608
  *  - Unnecessary control endpoint config removed from device mode
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
  *  - Fixed device standard request interpreter accidentally processing some class-specific requests
  *  - Added USE_RAM_DESCRIPTORS and USE_EEPROM_DESCRIPTORS compile time options to instruct the library
  *    to use descriptors stored in RAM or EEPROM rather than flash memory
  *  - All demos now disable watchdog on startup, in case it has been enabled by fuses or the bootloader
  *  - USB_DEV_OPT_LOWSPEED option now works correctly
  *  - Added ability to set the USB options statically for a binary size reduction via the USE_STATIC_OPTIONS
  *    compile time define
  *  - USB_Init no longer takes a Mode parameter if compiled for a USB device with no host mode option, or
  *    if forced to a particular mode via the USB_HOST_ONLY or USB_DEVICE_ONLY compile time options
  *  - USB_Init no longer takes an Options parameter if options statically configured by USE_STATIC_OPTIONS
  *  - Endpoint_Ignore_* and Pipe_Ignore_* made smaller by making the dummy variable non-volatile so that the
  *    compiler can throw away the result more efficiently
  *  - Added in an optional GroupID value to each scheduler entry, so that groups of tasks can once again be
  *    controlled by the new Scheduler_SetGroupTaskMode() routine
  *  - Added support for AT90USB162 and AT90USB82 AVR models
  *  - Added support for the STK525 and STK526 boards
  *  - Added support for custom board drivers to be supplied by selecting the board type as BOARD_USER, and
  *    placing board drivers in {Application Directory}/Board/
627
  *  - PLL is now stopped and USB clock is frozen when detached from host in device mode, to save power
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
  *  - Joystick defines are now in synch with the schematics - orientation will be rotated for the USBKEY
  *  - Fixed USB_DEV_IsUSBSuspended() - now checks the correct register
  *  - Fixed data transfers to devices when in host mode
  *  - Renamed USB_DEV_OPT_HIGHSPEED to USB_DEV_OPT_FULLSPEED and USB_HOST_IsDeviceHighSpeed() to
  *    USB_HOST_IsDeviceFullSpeed() to be in line with the official USB speed names (to avoid confusion with
  *    the real high speed mode, which is unavailable on the USB AVRs)
  *
  *
  *  \section Sec_ChangeLog120 Version 1.2.0 - Released February 4th, 2008
  *
  *  - Added USB_DeviceEnumerationComplete event for host mode
  *  - Added new Scheduler_Init routine to preprepare the scheduler, so that tasks can be started and
  *    stopped before the scheduler has been started (via Scheduler_Start)
  *  - Connection events in both Device and Host mode are now interrupt-driven, allowing the USB management
  *    task to be stopped when the USB is not connected to a host or device
  *  - All demos updated to stop the USB task when not in use via the appropriate USB events
  *  - Mass Storage Host demo application updated to function correctly with all USB flash disks
  *  - Mass Storage Host demo application now prints out the capacity and number of LUNs in the attached
  *    device, and prints the first block as hexadecimal numbers rather than ASCII characters
  *  - Endpoint and Pipe clearing routines now clear the Endpoint/Pipe interrupt and status flags
  *  - Shifted error handling code in the host enum state machine to a single block, to reduce code complexity
  *  - Added in DESCRIPTOR_TYPE, DESCRIPTOR_SIZE and DESCRIPTOR_CAST macros to make config descriptor processing
  *    clearer in USB hosts and DESCRIPTOR_ADDRESS for convenience in USB devices
  *  - Added in alloca macro to common.h, in case the user is using an old version of avr-lib-c missing the macro
  *
  *
  *  \section Sec_ChangeLog130 Version 1.1.0 - Released January 25th 2008
  *
  *  - Fixed DCONNI interrupt being enabled accidentally after a USB reset
  *  - Fixed DDISCI interrupt not being disabled when a device is not connected
  *  - Added workaround for powerless pullup devices causing false disconnect interrupts
  *  - Added USB_DeviceEnumerationFailed event for Host mode
  *  - AVR_HOST_GetDeviceConfigDescriptor routine no longer modifies ConfigSizePtr if a valid buffer
  *    pointer is passed
  *  - Added ALLOCABLE_BYTES to DynAlloc, and added code to make the size of key storage variables
  *    dependant on size of memory parameters passed in via the user project's makefile
  *  - Fixed incorrect device reset routine being called in USBTask
  *  - Devices which do not connect within the standard 300mS are now supported
  *  - Removed incorrect ATTR_PURE from Scheduler_SetTaskMode(), which was preventing tasks from being
  *    started/stopped, as well as USB_InitTaskPointer(), which was breaking dual device/host USB projects
  *  - Changed scheduler to use the task name rather than IDs for setting the task mode, eliminating the
  *    need to have a task ID list
  *  - ID transistion interrupt now raises the appropriate device/host disconnect event if device attached
  *  - Fixed double VBUS change (and VBUS -) event when detatching in device mode
  *  - Added ability to disable ANSI terminal codes by the defining of DISABLE_TERMINAL_CODES in makefile
  *  - Removed return from ConfigurePipe and ConfigureEndpoint functions - use Pipe_IsConfigured() and 
  *    Endpoint_IsConfigured() after calling the config functions to determine success
675
  */