LUFA 100807 BETA is out!

I finally feel the time is right to release the next public beta version of LUFA, scheduled for a full release on the 7th of next month – giving two whole weeks for me to complete the USB Test and Measurement Class code I’ve started (special thanks to Peter Lawrence for his amazing research into it) and for everyone else to download, test, and report back any problems.

This new beta contains a large number of internal changes, as well as the usual user visible improvements to the APIs, demos, projects and bootloaders. Bugs have been fixed, but I’ve also gone to a lot of effort to clean up sections of the internal library core code, so that (in theory, at least) ports to different architectures will be less difficult to achieve. There’s still some work to be done there, but the groundwork I’ve laid so far will mean that if the library does become targeted to multiple platforms, it shouldn’t become an (even bigger) gigantic pile of preprocessor macros.

Notably, I’ve converted over all the pseudo-functions used heavily in the library to real static inline functions. That gives several benefits – the documentation and code is now always in-sync, the static inline functions are properly type-checked and syntax checked at compile time, and the functions can be extended with more complicated implementations as needed when and if the library is ported to different architectures. Overall I’m quite happy with this, as it has already uncovered a fault in an obscure pipe interrupt macro, which has apparently been there since the dawn of time.

I implore everyone to please, please download, test and report back on the new beta version. The more issues that are uncovered now, the less issues that will be in the official release in two weeks. I hate seeing bugs in the release packages, as it means the fixed version won’t enter wide circulation until the following release, since most sane people don’t pull straight from the repository mirrors in production project code. I’ve uploaded the beta downloads and documentation to the regular LUFA project page, so that it will get maximum exposure throughout the beta testing window.

If you uncover any issue with the beta release, please let me know as soon as possible so that I have as long as possible to correct it.

Direct download of the 100807 BETA package

Direct download of the 100807 prebuilt documentation package


New:

  • Added new ADC_DisableChannel() function (thanks to Mich Davis)
  • Added new VTARGET_REF_VOLTS and VTARGET_SCALE_FACTOR compile time defines to the AVRISP-MKII programmer project to set the VTARGET reference voltage and scale factor
  • Added new pgm_read_ptr() macro to Common.h for reading of pointers out of flash memory space
  • Added new SWAPENDIAN_16() and SWAPENDIAN_32() macros to Common.h for statically initialized variables at compile time
  • Added new Drivers/USB/LowLevel/Device.c file to house Device mode specific functions that are more complicated than simple macros
  • Added new AVRStudio 4 project files for all library demos, projects and bootloaders
  • Added ability to set the serial baud rate via the user’s terminal in the XPLAINBridge project
  • Added new LUFA module variables for the different source modules in the core library makefile to simplify project makefiles
  • Added start of a new Test and Measurement class demo (thanks to Peter Lawrence)

Changed:

  • The RingBuff library code has been replaced in the XPLAINBridge, Benito and USBtoSerial projects with an ultra lightweight ring buffer to help improve the reliability of the projects
  • The EEPROM stream read/write functions now use eeprom_update_byte() instead of eeprom_write_byte(), so that only changed bytes are written to EEPROM to preserve its lifespan
  • Changed over the AVRISP-MKII and TemperatureDataLogger projects to use eeprom_update_byte() when writing non-volatile parameters to EEPROM to preserve its lifespan
  • Removed unused line encoding data and control requests from the CDC Bootloader code, to save space
  • Renamed SERIAL_STREAM_ASSERT() macro to STDOUT_ASSERT()
  • The USB_Device_IsRemoteWakeupSent() and USB_Device_IsUSBSuspended() macros have been deleted, as they are now obsolete
  • Rewrote the implementation of the SwapEndian_16() and SwapEndian_32() functions so that they compile down in most instances to minimal loads and stores rather than complicated shifts
  • The software UART in the XPLAINBridge has been largely altered to try to improve upon its performance and reliability
  • The USBtoSerial project now flushes received data via a flush timer, so that several bytes can be transmitted at once
  • Removed the automated checking of event names in the demo, project and bootloader makefiles due to inconsistancies between the behaviour of the command line tools used to perform the check on each platform
  • Internal USB driver source files renamed and moved to ease future possible architecture ports
  • All internal pseudo-function macros have been converted to true inline functions for type-safety and readability

Fixed:

  • Fixed AVRISP project sending a LOAD EXTENDED ADDRESS command to 128KB AVRs after programming or reading from the last page of FLASH (thanks to Gerard Sexton)
  • Fixed AVRISP project not sending a full erase-and-write EEPROM command to XMEGA targets when writing to the EEPROM instead of the split write-only command (thanks to Tim Margush)
  • Fixed RNDISEthernet demos crashing when calculating checksums for Ethernet/TCP packets of more than ~500 bytes due to an overflow in the checksum calculation loop (thanks to Kevin Malec)
  • Fixed XPLAINBridge project not correctly reading the XMEGA’s supply voltage when reporting back to the host
  • Fixed incorrect signature for the ATMEGA32U2 in the DFU bootloader (thanks to Axel Rohde)
  • Fixed internal device serial not being accessible on the ATMEGAXXU2 AVRs (thanks to Axel Rohde)
  • Fixed void pointer arithmetic in ConfigDescriptor.h breaking C++ compatibility (thanks to Michael Hennebry)
  • Fixed broken PDI EEPROM Section Erase functionality in the AVRISP-MKII project
  • Fixed USB_Device_SendRemoteWakeup() not working when the USB clock was frozen during USB bus suspend (thanks to Brian Dickman)
  • Fixed occasional lockup of the AVRISP project due to the timeout extension code incorrectly extending the timeout in PDI and TPI programming modes infinitely
  • Fixed HID device class driver still using PrevReportINBuffer for GetReport control requests even when it has been set to NULL by the user application (thanks to Axel Rohde)
  • Fixed MIDI_Device_SendEventPacket() not correctly waiting for the endpoint to become ready (thanks to Robin Green)
 

Comments: 1

Leave a reply »

 
 
 

[…] This post was mentioned on Twitter by KnurdStuff, Dean Camera. Dean Camera said: New LUFA BETA version is ready for public testing: http://fourwalledcubicle.com/blog/2010/07/lufa-100807-beta-is-out/ […]

 

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