summaryrefslogtreecommitdiffstats
path: root/lib/lufa/LUFA/DoxygenPages/MigrationInformation.txt
blob: 7efb312ea8a390c8b43b21ea7699710951a9979d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
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
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
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
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
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
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
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
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
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
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
/** \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.
 */

/** \page Page_Migration Migrating from Older Versions
 *
 *  Below is migration information for updating existing projects based on previous versions of the LUFA library
 *  to the next version released. It does not indicate all new additions to the library in each version change, only
 *  areas relevant to making older projects compatible with the API changes of each new release.
 *
 *  \section Sec_Migration170418 Version 170418
 *  <b>Device Mode</b>
 *   - The \c CALLBACK_USB_GetDescriptor() callback function into the user application's \c wIndex parameter is now \c uint16_t, not \c uint8_t.
 *
 *  \section Sec_Migration151115 Migrating from 140928 to 151115
 *  <b>Non-USB Library Components</b>
 *    - The ATPROGRAM LUFA build system module now defaults to the Atmel ICE debugger tool, instead of the Atmel JTAG ICE3.
 *    - The \c Serial_CreateStream() and \c Serial_CreateBlockingStream() functions now require a USART base pointer for XMEGA devices as the first parameter.
 *
 *  \section Sec_Migration140928 Migrating from 140302 to 140928
 *  <b>Device Mode</b>
 *    - The device mode RNDIS class driver now requires a user-supplied buffer and buffer length to operate, rather
 *      than allocating this buffer internally.
 *
 *  \section Sec_Migration140302 Migrating from 130901 to 140302
 *  <b>USB Core</b>
 *    - The \c VERSION_BCD() macro has changed from accepting one floating point parameter to taking three distinct major/minor/revision integer parameters, as
 *      some edge cases caused incorrect parsing of the input float into the final integer BCD encoded value.
 *
 *  <b>Non-USB Library Components</b>
 *    - The \c ATTR_NEVER_INLINE macro, erroneously introduced in a previous release has been removed, as it duplicates the existing \c ATTR_NO_INLINE macro.
 *
 *  <b>Build System</b>
 *    - The default configuration file for Doxygen is now "doxyfile" rather than "Doxygen.conf", to conform to the Doxygen project's own default file name.
 *      Set \c DOXYGEN_CONF to override the new default file name.
 *
 *  \section Sec_Migration130901 Migrating from 130303 to 130901
 *  <b>Non-USB Library Components</b>
 *    - The Board Dataflash \c Dataflash_Init() function now automatically configures the appropriate communication interface.
 *
 *  \section Sec_Migration130303 Migrating from 120730 to 130303
 *  <b>Device Mode</b>
 *    - The \ref HID_KEYBOARD_LED_KANA macro was previously misspelled as \c HID_KEYBOARD_LED_KATANA, and had an incorrect value. User applications requiring this
 *      constant should use the new name, and remove any workarounds for the previously incorrect macro definition.
 *    - The \c HID_KEYBOARD_SC_EQUAL_SIGN macro has been renamed to \ref HID_KEYBOARD_SC_KEYPAD_EQUAL_SIGN, and the previous definition of
 *      \c HID_KEYBOARD_SC_KEYPAD_EQUAL_SIGN has been renamed \ref HID_KEYBOARD_SC_KEYPAD_EQUAL_SIGN_AS400 to conform to the definitions in the HID specification.
 *
 *  <b>Host Mode</b>
 *    - The \ref HID_KEYBOARD_LED_KANA macro was previously misspelled as \c HID_KEYBOARD_LED_KATANA, and had an incorrect value. User applications requiring this
 *      constant should use the new name, and remove any workarounds for the previously incorrect macro definition.
 *    - The \c HID_KEYBOARD_SC_EQUAL_SIGN macro has been renamed to \ref HID_KEYBOARD_SC_KEYPAD_EQUAL_SIGN, and the previous definition of
 *      \c HID_KEYBOARD_SC_KEYPAD_EQUAL_SIGN has been renamed \ref HID_KEYBOARD_SC_KEYPAD_EQUAL_SIGN_AS400 to conform to the definitions in the HID specification.
 *
 *  \section Sec_Migration120730 Migrating from 120219 to 120730
 *  <b>Device Mode</b>
 *    - The device mode Audio Class driver now requires an additional configuration parameter, the Audio Control interface index. Existing applications should
 *      be adjusted to specify the additional configuration parameter.
 *    - The HID_DESCRIPTOR_JOYSTICK() macro no longer takes a variable number of axis as a parameter, due to OS incompatibilities; this macro now uses a fixed
 *      3 axis of data. User applications should update their calls to this macro and their report structures to suit a fixed 3-axis joystick report. If a user
 *      application requires more than 3 axis' of data, a custom report descriptor will need to be constructed by hand.
 *    - The \ref Endpoint_ConfigureEndpoint() function no longer takes in masks for the banks and direction; the number of banks is now an integer argument, and
 *      the direction is obtained from the full endpoint address within the device. Applications calling Endpoint_ConfigureEndpoint() should update their API
 *      call to use a full endpoint address (including ENDPOINT_DIR_IN or ENDPOINT_DIR_OUT direction in the MSB of the endpoint address) and an integer number
 *      of banks.
 *    - All endpoint functions now operate on full endpoint addresses within the device, rather than a directionless endpoint index. Applications should update
 *      their API calls to use full endpoint addresses when required within the device.
 *    - All device mode class drivers have been updated to use a new unified endpoint description structure for all endpoints; existing applications will need
 *      to update their class driver struct instantiation to match the new scheme (see \ref USB_Endpoint_Table_t).
 *    - The \c ENDPOINT_BANKS_SUPPORTED() and \c ENDPOINT_MAX_ENDPOINT_SIZE() macros have been removed, as these do not function correctly with the new addressing
 *      scheme for the endpoint APIs. Please refer to the target device's datasheet for the maximum bank size of each endpoint.
 *    - The MIDI class driver \ref MIDI_EventPacket_t event packet no longer contains separate \c CableIndex and \c Command entries; these have been combined
 *      into a single \c Event element which can be constructed using the new macro \ref MIDI_EVENT(). Existing applications should use the new macro and structure
 *      element name.
 *
 *  <b>Host Mode</b>
 *    - The Android Accessory Host class driver property strings are now a array of \c char* rather than a struct of named pointers. Existing applications
 *      should use C99 Designated Initializers with the property string indexes located in \ref AOA_Strings_t instead.
 *    - The \ref Pipe_ConfigurePipe() function no longer takes in masks for the banks and token; the number of banks is now an integer argument, and the token
 *      is now inferred from the full pipe address within the device, and the pipe type. Applications calling Pipe_ConfigurePipe() should update their API
 *      call to use a full pipe address (including PIPE_DIR_IN or PIPE_DIR_OUT direction in the MSB of the pipe address) and an integer number of banks.
 *    - All pipe functions now operate on full pipe addresses within the device, rather than a directionless pipe index. Applications should update their API
 *      calls to use full pipe addresses when required within the device.
 *    - All host mode class drivers have been updated to use a new unified pipe description structure for all pipes; existing applications will need to update
 *      their class driver struct instantiation to match the new scheme (see \ref USB_Pipe_Table_t).
 *    - The MIDI class driver \ref MIDI_EventPacket_t event packet no longer contains seperate \c CableIndex and \c Command entries; these have been combined
 *      into a single \c Event element which can be constructed using the new macro \ref MIDI_EVENT(). Existing applications should use the new macro and structure
 *      element name.
 *    - The library "LUFA/Drivers/USB/Core/ConfigDescriptor.c" source file has been renamed "LUFA/Drivers/USB/Core/ConfigDescriptors.c" as this was clashing with
 *      files in some low level host mode demo applications, preventing parallel project builds. If you are referencing the project source files directly instead
 *      of using the makefile module names, you will need to adjust your project makefile.
 *
 *  \section Sec_Migration120219 Migrating from 111009 to 120219
 *  <b>USB Core</b>
 *    - The HID_KEYBOARD_MODIFER_* macros in the HID class driver have been corrected to HID_KEYBOARD_MODIFIER_* (note the spelling of "modifier").
 *      Existing applications should switch over to the correctly spelled macro names.
 *    - The names of the USB Device and USB Host class driver files have changed; a new "ClassDevice" and "ClassHost" postfix has been added to the
 *      respective class driver files. Projects referencing the class driver source files by filename rather than the LUFA_SRC_USBCLASS makefile
 *      variable should append these postfixes to the source file names. Projects including the USB class driver dispatch headers directly should either
 *      switch to including the main USB driver header instead, or use the updated header filenames.
 *    - The USB_CONFIG_ATTR_BUSPOWERED constant has been renamed to USB_CONFIG_ATTR_RESERVED, as this was misnamed. All devices must set this bit in
 *      the Configuration descriptor's attributes field. As all devices are assumed to be bus-powered unless stated otherwise with the
 *      USB_CONFIG_ATTR_SELFPOWERED flag a replacement constant for bus powered devices is not provided.
 *
 *  <b>Device Mode</b>
 *    - The device mode Audio class driver now requires a new user application callback, \ref CALLBACK_Audio_Device_GetSetInterfaceProperty().
 *      Existing applications must implement this new callback, however if no audio entities are defined in the audio device's descriptors,
 *      this function may be hard-coded to always return false for previous behaviour to be retained.
 *
 *  \section Sec_Migration111009 Migrating from 110528 to 111009
 *  <b>Non-USB Library Components</b>
 *    - The \c JTAG_DEBUG_ASSERT() macro has been renamed \ref JTAG_ASSERT() to be consistent with \ref STDOUT_ASSERT().
 *
 *  <b>USB Core</b>
 *    - By default, unordered Endpoint and Pipe configuration is now allowed once again, via the previous workaround of
 *      reconfiguring all Endpoints/Pipes in order each time a new Endpoint/Pipe is created. To minimize the compiled program
 *      size, the new \c ORDERED_EP_CONFIG compile time option may be defined in the project makefile to restrict the ordering
 *      in exchange for a smaller compiled binary size.
 *    - The previous \c F_CLOCK symbol, required in the project makefile, has been renamed to \c F_USB. This is due to the previous name
 *      being far too generic for use in future architecture ports, where multiple clock domains are used.
 *
 *  <b>Device Mode</b>
 *    - The Endpoint stream functions now all require a \c BytesProcessed parameter instead of the previous callback parameter.
 *      This should be set to \c NULL to retain previous behaviour of the functions, or point to a location where the number of bytes
 *      processed in the current transaction can be stored. If the \c BytesProcessed parameter is non \c NULL, each time the endpoint
 *      bank becomes full and the packet is sent, the routine will exit with the new \ref ENDPOINT_RWSTREAM_IncompleteTransfer
 *      error code to allow the user application to determine when to send the next chunk of data.
 *    - The \ref CDC_Device_SendString() function now expects a null terminated string instead of an explicit length. Existing code
 *      should use the new \ref CDC_Device_SendData() function, or remove the length parameter from the function call.
 *    - The \c Endpoint_ResetFIFO() function has been renamed to \ref Endpoint_ResetEndpoint(), to make the API function names more
 *      consistent. Existing applications using the old function name should simply replace it with a call to the new function name.
 *    - The \c Endpoint_*_Byte() functions have been renamed Endpoint_*_8() to ensure they are correct across all architectures. Existing
 *      code using these functions should replace the previous function names with the new function names.
 *    - The \c Endpoint_*_Word() functions have been renamed Endpoint_*_16() to ensure they are correct across all architectures. Existing
 *      code using these functions should replace the previous function names with the new function names.
 *    - The \c Endpoint_*_DWord() functions have been renamed Endpoint_*_32() to ensure they are correct across all architectures. Existing
 *      code using these functions should replace the previous function names with the new function names.
 *    - The Device mode RNDIS class driver no longer stores the incoming and outgoing packets in the class driver instance; the user is
 *      now expected to manually define a storage location for the packet data. Packets must now be sent and received manually via a call
 *      to \ref RNDIS_Device_ReadPacket() and/or \ref RNDIS_Device_SendPacket().
 *    - The definition of the Audio class \ref USB_Audio_Descriptor_Format_t has been altered, to remove the fixed singular
 *      audio sample rate in the descriptor definition, and to rename the \c SampleFrequencyType to the more appropriate
 *      \c TotalDiscreteSampleRates. Existing applications will need to add an array of \ref USB_Audio_SampleFreq_t elements
 *      immediately following any \ref USB_Audio_Descriptor_Format_t descriptors, and insert the appropriate sampling rates
 *      supported by the device, as well as rename the descriptor elements to match the updated element names.
 *    - The device mode Audio class driver now requires a new user application callback, \ref CALLBACK_Audio_Device_GetSetEndpointProperty().
 *      Existing applications must implement this new callback, however if multiple sample rates or pitch control is not used,
 *      this function may be hard-coded to always return false for previous behaviour to be retained.
 *    - The \c USB_ConfigurationNumber, \c USB_RemoteWakeupEnabled and \c USB_CurrentlySelfPowered globals have been renamed to
 *      \ref USB_Device_ConfigurationNumber, \ref USB_Device_RemoteWakeupEnabled and \ref USB_Device_CurrentlySelfPowered to clearly indicate
 *      the USB mode they relate to. Existing applications using these variables should rename all references to the previous names.
 *    - The \c ENDPOINT_DESCRIPTOR_DIR_IN and \c ENDPOINT_DESCRIPTOR_DIR_OUT macros have now been replaced by \ref ENDPOINT_DIR_IN and
 *      \ref ENDPOINT_DIR_OUT to improve code clarity.
 *    - The \ref HID_DESCRIPTOR_JOYSTICK() macro now takes an additional (first) parameter indicating the number of axis in the joystick.
 *
 *  <b>Host Mode</b>
 *    - The Pipe stream functions now all require a \c BytesProcessed parameter instead of the previous callback parameter.
 *      This should be set to \c NULL to retain previous behaviour of the functions, or point to a location where the number of bytes
 *      processed in the current transaction can be stored. If the BytesProcessed parameter is non \c NULL, each time the pipe
 *      bank becomes full and the packet is sent, the routine will exit with the new \ref PIPE_RWSTREAM_IncompleteTransfer
 *      error code to allow the user application to determine when to send the next chunk of data.
 *    - The \ref PRNT_Host_SendString() and \ref CDC_Host_SendString() functions now expect a null terminated string instead of an explicit
 *      length. Existing code should use the new \ref PRNT_Host_SendData() and \ref CDC_Host_SendData() functions, or remove the
 *      length parameter from the function call.
 *    - The \c Pipe_ClearErrorFlags() function has been removed, as the pipe error flags are now automatically cleared when the
 *      \ref Pipe_ClearError() function is called.
 *    - The \c Pipe_*_Byte() functions have been renamed Pipe_*_8() to ensure they are correct across all architectures. Existing code using
 *      these functions should replace the previous function names with the new function names.
 *    - The \c Pipe_*_Word() functions have been renamed Pipe_*_16() to ensure they are correct across all architectures. Existing code using
 *      these functions should replace the previous function names with the new function names.
 *    - The \c Pipe_*_DWord() functions have been renamed Pipe_*_32() to ensure they are correct across all architectures. Existing code using
 *      these functions should replace the previous function names with the new function names.
 *    - The \c USB_Host_ClearPipeStall() function has been renamed to USB_Host_ClearEndpointStall(), as it operates on a full endpoint address
 *      within the attached device and not a pipe within the host. Existing code using the old function name should update the function calls and
 *      check for correct usage.
 *
 *  \section Sec_Migration101122 Migrating from 100807 to 101122
 *  <b>USB Core</b>
 *    - A new USB driver source file, \c Drivers/USB/HighLevel/EndpointStream.c now exists. This source file should be added
 *      to all project makefiles using the USB driver of LUFA, or the makefile should be updated to use the new module source
 *      variables.
 *    - A new USB driver source file, \c Drivers/USB/HighLevel/PipeStream.c now exists. This source file should be added to all
 *      project makefiles using the USB driver of LUFA, or the makefile should be updated to use the new module source variables.
 *    - The \c EVENT_USB_InitFailure() event has been removed, as the \ref USB_Init() function will no longer fail; if not USB mode is
 *      specified, the controller will default to UID selection mode.
 *    - The USB mode specifier constants have been moved into a new enum and renamed. Existing projects should use the equivalent
 *      value in the new \ref USB_Modes_t enum.
 *    - All class driver headers are now included as part of the standard \c LUFA/Drivers/USB/USB.h master dispatch header, and should
 *      no longer be included separately. Class driver module source files must still be added as a separate module in the project's
 *      makefile if used.
 *
 *  <b>Device Mode</b>
 *    - Endpoints MUST be allocated in ascending order to ensure that bank corruption does not occur. Ensure that your user application
 *      allocated endpoints in ascending order - or if your application uses the USB device mode class drivers, ensure that each instance's
 *      endpoint indexes are not overlapped with other interface's endpoints.
 *    - The signature for the \ref CALLBACK_USB_GetDescriptor() callback has changed, the \c void** \c const \c DescriptorAddress parameter is
 *      now \c const \c void** \c const \c DescriptorAddress. Existing applications should update their callback signatures to match this, and
 *      eliminate any casting of descriptor pointers to a non \c const pointer.
 *    - The names of the class specific descriptor type defines in the USB Class drivers have changed - refer to the driver documentation
 *      for each class driver for the new class specific descriptor type names.
 *    - The \c ENDPOINT_DOUBLEBANK_SUPPORTED() macro is has been renamed \c ENDPOINT_BANKS_SUPPORTED() and now returns the total number of
 *      banks supported by the given endpoint. Existing code should switch to the new naming scheme, and test that the return value of the
 *      macro is equal to or greater than 2 to regain the previous functionality.
 *    - The \c EVENT_USB_Device_UnhandledControlRequest() event is now named \ref EVENT_USB_Device_ControlRequest() and fires before (not after)
 *      the internal library event handlers. Existing code should rename the event handlers in the user application to match the new event
 *      name, and should ensure that the new execution order does not affect the application's operation.
 *
 *  <b>Host Mode</b>
 *    - Pipes MUST be allocated in ascending order to ensure that bank corruption does not occur. Ensure that your user application
 *      allocated pipes in ascending order - or if your application uses the USB host mode class drivers, ensure that each instance's
 *      pipe indexes are not overlapped with other interface's pipes.
 *    - The \c PRNT_Host_SendData() function has been renamed to \ref PRNT_Host_SendString(). Existing applications should simply
 *      replace all references to the obsolete function name with the new function name.
 *    - The names of the class specific descriptor type defines in the USB Class drivers have changed - refer to the driver documentation
 *      for each class driver for the new class specific descriptor type names.
 *    - The Still Image Host class' function prefix has been changed from \c SImage_ to  \c SI_, to remain consistent with the rest of the
 *      driver's enums, type defines and constants.
 *
 *  \section Sec_Migration100807 Migrating from 100513 to 100807
 *
 *  <b>Non-USB Library Components</b>
 *    - The Dataflash board driver stub file has changed, as dataflash functions previously located in the internal
 *      Dataflash driver of the library have now been moved to the individual board files. Existing drivers can
 *      copy-paste the new functions from the board Dataflash stub driver.
 *
 *  <b>USB Core</b>
 *    - A new USB driver source file, \c Drivers/USB/LowLevel/Device.c now exists. This source file should be added to all project
 *      makefiles using the USB driver of LUFA, or the makefile should be updated to use the new module source variables.
 *    - The \c Drivers/USB/LowLevel/DevChapter9.c source file has moved to \c Drivers/USB/HighLevel/DeviceStandardReq.c - this should
 *      be updated in all project makefiles, or the makefile should be updated to use the new module source variables.
 *    - The \c Drivers/USB/LowLevel/HostChapter9.h source file has moved to \c Drivers/USB/HighLevel/HostStandardReq.c - this should
 *      be updated in all project makefiles, or the makefile should be updated to use the new module source variables.
 *    - The \c Drivers/USB/LowLevel/LowLevel.c source file has moved to \c Drivers/LowLevel/USBController.c - this should be updated
 *      in all project makefiles, or the makefile should be updated to use the new module source variables.
 *
 *  <b>Device Mode</b>
 *    - The \c USB_Device_IsRemoteWakeupSent() macro has been removed, as the remote wakeup request is now fully handled by the
 *      enhanced \ref USB_Device_SendRemoteWakeup() function. Existing code may now discard any checks to \c USB_Device_IsRemoteWakeupSent().
 *    - The \c USB_Device_IsUSBSuspended() macro has been removed, as it is obsolete. Existing code should compare \ref USB_DeviceState
 *      to see if it the device is in the \ref DEVICE_STATE_Suspended state instead.
 *    - The \ref CDC_Device_ReceiveByte() function has changed, and now returns a signed 16-bit integer, with -1 indicating no data was
 *      received. This allows for more efficient coding, as a call to \ref CDC_Device_BytesReceived() is no longer needed if the exact
 *      number of queued bytes received is not needed.
 *
 *  <b>Host Mode</b>
 *    - The \ref CDC_Host_ReceiveByte() function has changed, and now returns a signed 16-bit integer, with -1 indicating no data was
 *      received. This allows for more efficient coding, as a call to \ref CDC_Host_BytesReceived() is no longer needed if the exact
 *      number of queued bytes received is not needed.
 *    - The \ref CDC_Host_USBTask() now calls \ref CDC_Host_Flush() automatically, flushing any queued data to the attached device. Manual
 *      flushing of the interface is no longer needed if the flushes should be in sync with calls to \ref CDC_Host_USBTask().
 *
 *  \section Sec_Migration100513 Migrating from 100219 to 100513
 *
 *  <b>Non-USB Library Components</b>
 *    - The \ref TWI_StartTransmission() function now takes in a timeout period, expressed in milliseconds, within which the addressed
 *      device must respond or the function will abort.
 *
 *  <b>Device Mode</b>
 *    - The \ref USB_Init() function no longer calls \c sei() to enable global interrupts, as the user application may need
 *      to perform other initialization before it is ready to handle global interrupts. The user application is now responsible
 *      for enabling global interrupts before or shortly after calling \ref USB_Init() to ensure that the enumeration process
 *      functions correctly.
 *    - The \c USBInterrupt.c USB driver source file has been relocated from \c LUFA/Drivers/USB/HighLevel/ to \c LUFA/Drivers/USB/LowLevel.
 *      Projects must update their makefile SRC values accordingly.
 *    - The HID Device Class driver's function signature for the \ref CALLBACK_HID_Device_ProcessHIDReport() function has been changed, to
 *      allow for a new \c ReportType parameter. This new parameter must be added in all user applications using the Device mode HID Class
 *      Driver, but may be ignored unless Host-to-Device FEATURE HID reports are used.
 *
 *  <b>Host Mode</b>
 *    - The \ref USB_Init() function no longer calls \c sei() to enable global interrupts, as the user application may need
 *      to perform other initialization before it is ready to handle global interrupts. The user application is now responsible
 *      for enabling global interrupts before or shortly after calling \ref USB_Init() to ensure that the enumeration process
 *      functions correctly.
 *    - The \c USBInterrupt.c USB driver source file has been relocated from \c LUFA/Drivers/USB/HighLevel/ to \c LUFA/Drivers/USB/LowLevel.
 *      Projects must update their makefile \c SRC values accordingly.
 *    - The HID Host Class driver's function signature for the \ref HID_Host_SendReportByID() function has been changed, to allow for a new
 *      ReportType parameter. Existing calls to this function should substitute \c REPORT_ITEM_TYPE_Out as this parameter's value.
 *
 *  \section Sec_Migration100219 Migrating from 091223 to 100219
 *
 *  <b>Non-USB Library Components</b>
 *    - Due to some ADC channels not being identical to their ADC MUX selection masks for single-ended conversions on some AVR models,
 *      the ADC driver now has explicit masks for each of the standard ADC channels (see \ref Group_ADC). These masks should be used
 *      when calling the ADC functions to ensure proper operation across all AVR models. Note that the \ref ADC_SetupChannel() function
 *      is an exception, and should always be called with a channel number rather than a channel mask.
 *
 *  <b>Host Mode</b>
 *    - The MIDI Host Class driver send and receive routines now operate on packed events, where multiple MIDI events may be
 *      packed into a single USB packet. This means that the sending of MIDI events will now be delayed until the MIDI send
 *      pipe bank is full. To override this new behaviour and revert to the previous behaviour, the user application may manually
 *      flush the queued event(s) to the device by calling \ref MIDI_Host_Flush().
 *    - The \ref Pipe_IsEndpointBound() function now takes the endpoint's direction into account, by checking if the MSB of the endpoint's address
 *      is set to denote IN endpoints. If the previous functionality where the direction is to be discounted is required, mask the endpoint
 *      address against the \ref PIPE_EPNUM_MASK token before calling \ref Pipe_IsEndpointBound().
 *
 *  <b>Device Mode</b>
 *    - The MIDI Device Class driver send and receive routines now operate on packed events, where multiple MIDI events may be
 *      packed into a single USB packet. This means that the sending of MIDI events will now be delayed until the MIDI send
 *      endpoint bank is full. To override this new behaviour and revert to the previous behaviour, the user application may manually
 *      flush the queued event(s) to the host by calling \ref MIDI_Device_Flush().
 *
 *  \section Sec_Migration091223 Migrating from 091122 to 091223
 *
 *  <b>Host Mode</b>
 *    - The Still Image Host Class driver \ref SI_Host_USBTask() and \ref SI_Host_ConfigurePipes() functions were misnamed, and are
 *      now named \c SImage_Host_USBTask() and \c SImage_Host_ConfigurePipes() respectively.
 *    - The \c HOST_SENDCONTROL_DeviceDisconnect enum value has been renamed to \ref HOST_SENDCONTROL_DeviceDisconnected to be in
 *      line with the rest of the library error codes.
 *    - The HID Parser item usages no longer contain separate minimum and maximum values, as this was a violation of the HID
 *      specification. Instead, the values are distributed evenly across each item as its usage value, to ensure that all items
 *      can be distinguished from one-another.
 *
 *  <b>Device Mode</b>
 *    - The \ref CALLBACK_HID_Device_CreateHIDReport() HID Device Class driver callback now has a new \c ReportType parameter to
 *      indicate the report type to generate. Existing applications may simply add and ignore this additional parameter.
 *
 *  \section Sec_Migration091122 Migrating from 090924 to 091122
 *
 *  <b>Host Mode</b>
 *    - The \c HID_PARSE_UsageStackOverflow HID parser error constant is now named \ref HID_PARSE_UsageListOverflow
 *    - The \ref CALLBACK_HIDParser_FilterHIDReportItem() HID Parser callback now passes a complete \ref HID_ReportItem_t to the
 *      user application, instead of just its attributes.
 *    - The \c USB_GetDeviceConfigDescriptor() function was incorrectly named and is now called \ref USB_Host_GetDeviceConfigDescriptor().
 *
 *  \section Sec_Migration090924 Migrating from 090810 to 090924
 *
 *  <b>Non-USB Library Components</b>
 *    - The \c ADC_Off() function has been renamed to \c ADC_ShutDown() to be consistent with the rest of the library.
 *    - The \ref SPI_Init() routine's parameters have changed, so that the clock polarity and data sampling modes can be set. See
 *      the \ref SPI_Init() function documentation for more details
 *    - The \ref Dataflash_Init() routine no longer initializes the SPI bus - the SPI bus should be initialized manually via a
 *      call to \ref SPI_Init() before using the Dataflash driver
 *
 *  <b>Host Mode</b>
 *    - The \c USB_GetDeviceConfigDescriptor() function's parameters and behaviour has changed; the user is required to
 *      preallocate the largest allowable buffer, and pass the size of the buffer to the function. This allows for a single
 *      call to the function to retrieve, size check and validate the Configuration Descriptor rather than having the user
 *      application perform these intermediary steps.
 *    - The HID report parser now requires a mandatory callback in the user code, to filter only the items the application
 *      is interested in into the processed HID report item structure to save RAM. See \ref CALLBACK_HIDParser_FilterHIDReportItem().
 *    - The HID report parser now always parses FEATURE and always ignores constant-data items - the \c HID_ENABLE_FEATURE_PROCESSING
 *      and \c HID_INCLUDE_CONSTANT_DATA_ITEMS compile time tokens now have no effect.
 *    - The \c USE_NONSTANDARD_DESCRIPTOR_NAMES compile time token has been removed - there are now separate \c USB_Descriptor_*
 *      and \c USB_StdDescriptor_* structures for both the LUFA and standardized element naming conventions so that both may be used in
 *      the one project. For existing projects using the standardized names, change all code to use the \c USB_StdDescriptor_* variants.
 *
 *  <b>Device Mode</b>
 *    - The \c USE_NONSTANDARD_DESCRIPTOR_NAMES compile time token has been removed - there are now separate \c USB_Descriptor_*
 *      and \c USB_StdDescriptor_* structures for both the LUFA and standardized element naming conventions so that both may be used in
 *      the one project. For existing projects using the standardized names, change all code to use the \c USB_StdDescriptor_* variants.
 *
 *  \section Sec_Migration090810 Migrating from 090605 to 090810
 *
 *  <b>All</b>
 *    - The "Simple Scheduler" has been <i>deprecated</i>, as it was little more than an abstracted loop and caused much confusion.
 *      User applications using the scheduler should switch to regular loops instead. The scheduler code will be removed in a future
 *      release.
 *    - The "Dynamic Memory Block Allocator" has been removed, as it was unused in (and unrelated to) the LUFA library and never
 *      used in user applications.
 *
 *  <b>Non-USB Library Components</b>
 *    - The \c ATTR_NOINLINE function attribute macro has been renamed to \ref ATTR_NO_INLINE to be in line with the rest of the function attribute
 *      macro names.
 *
 *  <b>Library Demos</b>
 *    - Most demos now have a corresponding Class Driver implementation, which uses the new internal library class drivers for the standard
 *      USB classes. This allows for more rapid device and host development, and so should be used in preference to the low level APIs where
 *      possible so that fixes to the class drivers propagate to all applications which use them automatically with each new LUFA release.
 *
 *  <b>Host Mode</b>
 *    - The \c HIDParser.c module has moved from \c LUFA/Drivers/USB/Class/ to \c LUFA/Drivers/USB/Class/Host/.
 *    - The \c USB_GetDeviceConfigDescriptor() function now requires the desired configuration index within the device as its first
 *      parameter, to add support for multi-configuration devices. Existing code should use a configuration index of 1 to indicate the
 *      first configuration descriptor within the device.
 *    - The non-standard "Ready" host state has been removed. Existing \ref HOST_STATE_Configured code should be moved to the end of
 *      the existing \ref HOST_STATE_Addressed state, and the existing HOST_STATE_Ready state code should be moved to the \ref HOST_STATE_Configured
 *      state.
 *    - The \c USB_IsConnected global has been removed, as it is too vague for general use. Test \ref USB_HostState explicitly to ensure the host is
 *      in the desired state instead.
 *    - The USB event names have been changed and their firing conditions changed to properly separate out Host mode events from Device mode
 *      events. See the \ref Group_Events page for details on the new event names and firing conditions.
 *
 *  <b>Device Mode</b>
 *    - The \ref CALLBACK_USB_GetDescriptor() function now takes an extra parameter to specify the descriptor's memory space so that
 *      descriptors in mixed memory spaces can be used. The previous functionality can be returned by defining the \c USE_FLASH_DESCRIPTORS
 *      token in the project makefile to fix all descriptors into FLASH space and remove the extra function parameter.
 *    - The \c USB_IsSuspended global has been removed - test \ref USB_DeviceState against \ref DEVICE_STATE_Suspended instead.
 *    - The \c USB_IsConnected global has been removed, as it is too vague for general use. Test \ref USB_DeviceState explicitly to ensure the device
 *      is in the desired state instead.
 *    - The VBUS events have been removed, as they are already exposed to the user via the \c USB_Connect and \c USB_Disconnect events.
 *    - The USB event names have been changed and their firing conditions changed to properly separate out Host mode events from Device mode
 *      events. See the \ref Group_Events page for details on the new event names and firing conditions.
 *
 *  \section Sec_Migration090605 Migrating from 090510 to 090605
 *
 *  <b>Device Mode</b>
 *    - Support for non-control data endpoint interrupts has been dropped due to many issues in the implementation. All existing
 *      projects using interrupts on non-control endpoints should switch to polling. For control interrupts, the library can
 *      manage the control endpoint via interrupts automatically by compiling with the \c INTERRUPT_CONTROL_ENDPOINT token defined.
 *    - The \c DESCRIPTOR_ADDRESS() macro has been removed. User applications should use normal casts to obtain a descriptor's memory
 *      address.
 *    - The library events system has been rewritten, so that all macros have been removed to allow for clearer user code. See
 *      \ref Group_Events for new API details.
 *    - The \c STREAM_CALLBACK() macro has been removed. User applications should replace all instances of the macro with regular
 *      function signatures of a function accepting no arguments and returning a \c uint8_t value.
 *    - The \c Event_DeviceError() event no longer exists, as its sole caller (unlinked \c USB_GetDescriptor() function) now produces a
 *      compilation error rather than a runtime error. The \c StdDescriptors.c file no longer exists as a result, and should be removed
 *      from project makefiles.
 *    - The \c USB_GetDescriptor() function has been renamed to \ref CALLBACK_USB_GetDescriptor() to be in line with the new \c CALLBACK_
 *      function prefixes for functions which <i>must</i> be implemented in the user application.
 *
 *  <b>Host Mode</b&g