LUFA 110528 BETA Released

Just a quick announcement: I’ve just released the BETA of LUFA110528, the first for this year.

This new release contains many notable improvements, including experimental support in the core for the AVR32 UC3 line of microcontrollers, new HID device report templates, new KeyboardMouseMultiReport and VirtualSerialMassStorage combination device demos, an experimental HID class bootloader using PJRC’s TeensyHID bootloader protocol and a custom command line client modified from Paul’s reference code, partial stream callbacks and more, not to mention the usual pile of bug fixes.

Please test this release out and report back ASAP, so that any issues present can be corrected before the final release date. Thank you to all who have contributed towards this release!

Download Link

Link to Prebuilt Documentation Download

Online Documentation


Version 110528

New:

  • Core:
    • Added new ORDERED_EP_CONFIG compile time option to restrict endpoint/pipe configuration to ascending order in exchange for a smaller compiled program binary size
    • Added a new general RingBuff.h miscellaneous ring buffer library driver header
    • Added new GCC_FORCE_POINTER_ACCESS() macro to correct GCC’s mishandling of struct pointer accesses
    • Added new GCC_MEMORY_BARRIER() macro to prevent instruction reordering across boundaries
    • Added basic driver example use code to the library documentation
    • Added new Endpoint_Null_Stream() and Pipe_Null_Stream() functions
    • Added new ADC_GET_CHANNEL_MASK() convenience macro
    • Added new HID report item macros (with HID_RI_ prefix) to allow for easy creation and editing of HID report descriptors
    • Added new HID_DESCRIPTOR_MOUSE, HID_DESCRIPTOR_KEYBOARD, HID_DESCRIPTOR_JOYSTICK and HID_DESCRIPTOR_VENDOR macros for easy automatic creation of basic USB HID device reports
    • Added new MAX() and MIN() convenience macros
    • Added new Serial_SendData() function to the Serial driver
    • Added board driver support for the Sparkfun ATMEGA8U2 breakout board
    • Added TWI baud rate prescaler and bit length parameters to the TWI_Init() function (thanks to Thomas Herlinghaus)
    • Internal restructuring for eventual multiple architecture ports
    • Added AVR32 UC3 architecture port (currently incomplete/experimental)
    • Added new architecture independant functions to enable, disable, save and restore the Global Interrupt Enable flags
  • Library Applications:
    • Added ability to write protect Mass Storage disk write operations from the host OS
    • Added new MIDIToneGenerator project
    • Added new KeyboardMouseMultiReport Device ClassDriver demo
    • Added new VirtualSerialMassStorage Device ClassDriver demo
    • Added HID class bootloader, compatible with a modified version of the command line Teensy loader from PJRC.com

Changed:

  • Core:
    • Unordered Endpoint/Pipe configuration is now allowed once again by default via the previous reconfig workaround
    • Refactored Host mode Class Driver *_Host_ConfigurePipes() routines to be more space efficient when compiled
    • Added new *_ENUMERROR_PipeConfigurationFailed error codes for the *_Host_ConfigurePipes() routines
    • The USARTStream global is now public and documented in the SerialStream module, allowing for the serial USART stream to be accessed via its handle rather than via the implicit stdout and stdin streams
    • The FAST_STREAM_TRANSFERS compile time option has been removed due to lack of use and low cost/benefit ratio
    • Altered all endpoint/pipe stream transfers so that the new BytesProcessed parameter now points to a location where the number of bytes in the transfer that have been completed can be stored (or NULL if entire transaction should be performed in one chunk)
    • The NO_STREAM_CALLBACKS compile time option has now been removed due to the new partial stream transfer feature
    • Changed over all project and demo HID report descriptors to use the new HID report item macros
    • Moved the HIDParser.c source file to the LUFA/Drivers/USB/Class/Common/ directory from the LUFA/Drivers/USB/Class/Host/
    • Added support to the HID parser for extended USAGE items that contain the usage page as well as the usage index
    • Removed the SerialStream driver, rolled functionality into the regular Serial peripheral driver via the new Serial_CreateStream() and Serial_CreateBlockingStream() functions
    • Renamed the low level Serial byte send/receive functions, to be consistent with the CDC class driver byte functions
    • Altered the behaviour of the serial byte reception function so that is is non-blocking, and now returns a negative value if no character is received (to remain consistent with the CDC class driver byte reception routines)
    • Renamed the PRNT_Host_SendString(), CDC_Host_SendString() and CDC_Device_SendString() functions to *_SendData(), and added new versions of the *_SendString() routines that expect a null terminated string instead
    • Renamed all driver termination *_ShutDown() functions to the more logical name *_Disable()
    • Reduced latency for executing the Start-Of-Frame events (if enabled in the user application)
    • Removed Pipe_ClearErrorFlags(), pipe error flags are now automatically cleared when Pipe_ClearError() is called
    • Endpoint_ResetFIFO() renamed to Endpoint_ResetEndpoint(), to be consistent with the Pipe_ResetPipe() function name
    • Implemented on-demand PLL clock generation for the U4, U6 and U7 series USB AVRs when automatic PLL mode is specified
    • F_CLOCK changed to F_USB to be more descriptive, and applicable on future architecture ports
    • Renamed all low level Endpoint_Read_*, Endpoint_Write_* and Endpoint_Discard_* functions to use the number of bits instead of a symbolic size (Byte, Word, DWord) so that the function names are applicable and correct across all architectures
    • Renamed all low level Pipe_Read_*, Pipe_Write_* and Pipe_Discard_* functions to use the number of bits instead of a symbolic size (Byte, Word, DWord) so that the function names are applicable and correct across all architectures
  • Library Applications:
    • Changed the XPLAINBridge software UART to use the regular timer CTC mode instead of the alternative CTC mode via the Input Capture register, to reduce user confusion
    • Combined page and word ISP programming mode code in the AVRISP-MKII clone project to reduce compiled size and increase maintainability of the code
    • Changed over library projects to use the new general ring buffer library driver module
    • Added new high level TWI packet read/write commands, altered behaviour of the TWI_StartTransmission() function
    • Changed TempDataLogger project’s DS1307 driver to simplify the function interface and prevent a possible race condition
    • Changed AVRISP-MKII project to use the Watchdog interrupt for command timeouts, to reduce CPU usage and free timer 0 for other uses
    • Updated the software USART code in the XPLAIN Bridge application so that the incomming bits are sampled at their mid-point instead of starting point, to give maximum reliability (thanks to Anton Staaf)

Fixed:

  • Core:
    • Fixed broken USBFOO board drivers due to missing BOARD_USBFOO define
    • Fixed HID host class driver incorrectly binding to HID devices that do not have an OUT endpoint
    • Fixed incorrect definition of the HID_KEYBOARD_SC_D constant in the HID class driver (thanks to Opendous Inc.)
    • Fixed incorrect definition of the HID_KEYBOARD_SC_RIGHT_ARROW constant in the HID class driver (thanks to Joby Taffey)
    • Fixed incorrect endpoint initialisation order in the several device demos (thanks to Rick Drolet)
    • Fixed inverted Minimum board LEDs
    • Fixed incorrect byte ordering in the Audio_Device_WriteSample24 function (thanks to WZab)
    • Fixed several functions in the Host mode Still Image Class driver returning an error code from the incorrect error code enum (thanks to Daniel Seibert)
    • Fixed ReportID not being removed from the feature/out report data array in the HID class driver when Report IDs are used
    • Fixed incorect BUTTONS_BUTTON1 definition for the Minimus board
    • Fixed Still Image Host class driver exiting the descriptor search routine prematurely if the data pipes (but not event pipe) is found
    • Fixed missing call to Pipe_SetInfiniteINRequests() in the Pipe_ConfigurePipe() routine
    • Fixed Remote Wakeup broken on the AVRs due to the mechanism only operating when the SUSPI bit is set (thanks to Holger Steinhaus)
  • Library Applications:
    • Fixed Benito project discarding incoming data from the USB virtual serial port when the USART is busy
    • Fixed broken DFU bootloader, added XPLAIN support for bootloader start when XCK jumpered to ground
    • Fixed broken HID_REQ_GetReport request handler in the Low Level GenericHID demo
    • Fixed possible lost data in the XPLAINBridge, USBtoSerial and Benito projects when the host exceeds the packet timeout period on received packets as set by USB_STREAM_TIMEOUT_MS (thanks to Justin Rajewski)
    • Fixed possible programming problem in the AVRISP-MKII clone project when programming specific patterns into a target memory space that is only byte (not page) addressable
    • Fixed errors in the incomplete Test and Measurement device demo preventing proper operation (thanks to Pavel Plotnikov)
    • Fixed programming errors in the AVRISP-MKII project when the programming packet is a round multiple of the endpoint bank size under avrdude (thanks to Steffan Woltjer)
 

Comments: 5

Leave a reply »

 
 
 

sweet! I’m liking the new online documentation too.

 

What’s the story behind the Teensy bootloader? I thought you took it out of LUFA a while back? It’s back now?

 

I’ve been talking to Paul about it, and he’s fine with me putting it back in as long as I make it incompatible with the nice GUI he’s made (and thus only compatible with a modified version of his command line bootloader application). Probably the best compromise, so he doesn’t lose customers and I don’t get into any legal troubles, so everyone wins in the end.

– Dean

 

Hi, did you mean 110428? Or you plan to publish this version in May? LOL

 

I originally meant 110428, but when I uploaded it I mistyped and called it 110528. Since it’s a big update, I ended up deciding to keep the later release date, to give people a longer time to properly test it, so it’ll be out officially four week from now. That happens to suit me well, since right now I’m completely snowed under with University work.

– Dean

 

Leave a Reply

 
(will not be published)
 
 
Comment
 
 

 

Vital Stats

  • 35 Years Old
  • Australian
  • Lover of embedded systems
  • Firmware engineer
  • Self-Proclaimed Geek

Latest Blog Posts

RSS