NuttX-7.12 ---------- The 112th release of NuttX, Version 7.12, was made on October 1, 2015, and is available for download from the Bitbucket.org website. Note that release consists of two tarballs: nuttx-7.12.tar.gz and apps-7.12.tar.gz. These are available from: https://bitbucket.org/patacongo/nuttx/downloads https://bitbucket.org/nuttx/apps/downloads Both may be needed (see the top-level nuttx/README.txt file for build information). Additional new features and extended functionality: * Graphics/Graphic Drivers: - Added SSD1351 OLED controller support. Contributed by Paul Alexander Patience. * Common Device Drivers: - MS58xx: Generalize the MS5805 altimeter driver to support other family members. From Paul Alexander Patience. - CAN driver interface: Add an error indication bit to the CAN message report. - Developed a new interface for QSPI. Most QSPI hardware (such as the SAMV71) used a programmed interface to access the QuadSPI FLASH. That programmed interface is no compatible with the simpler NuttX SPI data transfer interface. - Added a driver for ST25L1*K QuadSPI parts. - Renamed the battery driver interface to battery_gauge since it really only implements a battery fuel gauge. From Alan Carvalho de Assis. - Added a new framework to support a batter charger interface. From Alan Carvalho de Assis. - Added a BQ24250 battery charger driver. From Alan Carvalho de Assis. * Networking: - Added support for the local loopback device (dev lo, hostname localhost). - Added NetDB support for the local loopback device. - Network initialization: Automatically initialize all the TUN and loopback devices if they arein the configuration. * Simulation Platform: - The simulation now runs under Cygwin64. Modern Cygwin X86_64 machines follow the Microsoft ABI for parameter passing. The Linux System 5 ABI would not work on X86_64-based Cygwin machines. Newer Cygwin tool chains do nor pre-pend symbol names with the underscore character. * Atmel SAMA5Dx: - Added architectural support for the Atmel SAMA5D2 parts. Not fully verified in this NuttX release. * Atmel SAMA5Dx Boards: - Added support for the Atmel SAMA45D2 Xplained Ultra board. Not fully verified in this NuttX release. * Atmel SAMV7 Drivers: - SAMV7 USBHS DCD: The device controller driver is (finally) functional. * NXP LPC17xx: - Implement options to use external SDRAM and or SRAM for the heap. From Pavel Pisa. * NXP LPC43x: - Added architectural support for the LPC4370. From Lok Tep. * NXP LPC43xx Drivers: - Added Ethernet support. From Ilya Averyanov. - Added LPC43xx EHCI driver from Ilya Averyanov. * NXP LPC43xx Drivers: - Added support for the NXP LPC4370-Link2 development board from Lok Tep. * STMicro STM32: - Added architectural for STM32F303K6, STM32F303K8, STM32F303C6, STM32F303C8, STM32F303RD, and STM32F303RE devices. From Paul Alexander Patience. * STMicro STM32 Drivers: - Added OTG support for STM32F44x. From David Sidrane. * STMicro STM32 Boards: - Added support for the STMicro Nucleo F303ERE board from Paul Alexander Patience. * C Library/Header Files: - stdlib: Add support for div() to the C library. From OrbitalFox. Also added ldiv() and lldiv() which are equivalent to div() with long and long long types, respectively, instead of int. - Added an implementation of the standard shutdown function. * Tools: - tools/mksymtab: declare g_symtab array as const to occupy RO section (Flash). From Pavel Pisa. * Build/Configuration System: - Simplify configs/ Makefiles by combining common logic into a new Board.mk Makefile fragment. From Paul Alexander Patience. * Applications: apps/system: - apps/system/symtab: Optional canned symtab inclusion to the build. When option CONFIG_SYSTEM_SYMTAB is selected and symbol table file libc/symtab/canned_symtab.inc is prepared then application can use system provided complete symbol table. The option has substantial effect on system image size. Mainly code/text. If loading of applications at runtime is not planned do not select this. From Pavel Pisa. * Applications: apps/canutils: - apps/canutils/uavcan: Add support for libuavcan. From Paul Alexander Patience. * Applications: apps/examples: - apps/examples/can: Extend the CAN loopback test by adding more command line options. - apps/examples/usbserial: Can now be run as an NSH builtin-function. Now uses a configurable IO buffer size. - apps/examples/nettest: Add option to suppress network initialization. This is necessary if the nettest is run from NSH which has already initialized the network. - apps/examples/nettest: Extend test so that can be performed using the local loopback device. - apps/examples/netloop: Add a test of the local loopback device. - apps/examples/udpblaster: Add a test to stress the network by sending UDP packets at a very high rate. . - apps/examples/uavcan: libuavcan example from Paul Alexander Patience. Bugfixes. Only the most critical bugfixes are listed here (see the ChangeLog for the complete list of bugfixes and for additional, more detailed bugfix information): * Core OS: - wd_create(): Correct a counting error in the number of available watchdog timers. When the number of free timers is low, the counter could be incremented below zero. - mq_open(): When message queue is opened, inode_reserve() leaves the reference count at zero. mq_open() logic must assure that the reference count of the newly created inode is one. - work_queue(): Logic that sets the queued indication and the logic that does the actual queuing must be atomic. * Binary Loader: - Fix a memory leak in the built-in application logic: File was not being closed. From Bruno Herrera. * File System/Block Drivers: - poll(): If we fail to setup the poll for any file descriptor, for any reason, set the POLLERR bit. - rwbuffer: Fix some logic errors. From Dmitry Nikolaev via Juha Niskanen. - ROMFS: One allocation was not being freed if there was a subsequent failure to allocation I/O buffers resulting in a memory leak on certain error conditions. From Bruno Herrera. * Networking/Network Drivers: - Fix a bug in tun interface driver. From Max Neklyudov. - recvfrom(): Correct wait for new data when NET_UDP_READAHEAD is enabled. Fix size accounting when recvfrom_udpreadahead() sets state.rf_recvlen == -1. I have not checked if data are accumulated to the right position in the buffer however. From Pavel Pisa. - networking: Correct return value from psock_tcp_accept(). From SaeHie Park. - TCP: Fix a problem in when there are multiple network devices. Polls were being sent to all TCP sockets before. This is not good because it means that packets may sometimes be sent out on the wrong device. That is inefficient because it will cause retransmissions and bad performance. But, worse, when one of the devices is not Ethernet, it will have a different MSS and, as a result, incorrect data transfers can cause crashes. The fix is to lock into a single device once the MSS is locked locked down. - net/tcp: The logic that binds a specific network device to a connection was faulty for the case of multiple network devices. On bind(), the local address should be used to associate a device with the connection (if the local address is not INADDR_ANY); On connect(), the remote address should be used (in case the local address is INADDR_ANY). On accept(), it does not matter but the remote address is the one guaranteed to be available. - net/tcp: Fix unbuffered send compilation error when Ethernet is not enabled. From Alan Cavalho de Assis. * ARMv7-M: - All ARMV7-M IRQ setup: Always set the NVIC vector table address unconditionally. This is needed in cases where the code is running with a bootload and when the code is running from RAM. It is also needed by the logic of up_ramvec_initialize() which gets the vector base address from the NVIC. Suggested by Pavel Pisa. - Fix some H/W floating point logic: In the original implementation, !defined(CONFIG_ARMV7M_CMNVECTOR) was a sufficient test to determine if lazy floating point register saving was being used. But recents changes added common lazy register as well so now that test must be (!defined(CONFIG_ARMV7M_CMNVECTOR) || defined(CONFIG_ARMV7M_LAZYFPU)). - ARMv7-M, all "lazy" interrupt stack logic. Assembly instruction that fetches the saved value is incorrect; replace with more traditional push and pop. This is an important fix. Noted by Stefan Kolb. - All ARMV7-M: Force 8-byte stack alignment when calling from assembly to C to interrupt handling. - up_schedulesigaction(): Fix logic that determines if there is a pending signal action before scheduling the next signal action. Both the test and the scheduling action need to be atomic. This problem was fixed on the ARMv7-M but also ported to other architectures that had the same issue. * NXP LPC43xx: - LPC43xx: Fix NVIC_SYSH_PRIORITY_STEP define. From Ilya Averyanov. - LPC43xx: Fix missing #define in eeprom. From Ilya Averyanov. * NXP LPC43xx Drivers: - Fixed the SPI driver. From Ilya Averyanov. * Atmel SAMA5 Drivers: - LPC31 and SAMA5D EHCI: Fix qh_ioccheck to move bp to next QH. From Ilya Averyanov. - LPC31 and SAMA5D EHCI: Performance improvement: Do not disable the asynchronous queue when adding a new QH structure. From Ilya Averyanov. * C Library/Header Files: - gethostbyname(): correct returned address format when DNS is used. The hostent.h_addr_list should point to raw in_addr or in6_addr as defined in the standard. Original implementation used that for numeric addresses but for DNS lookup returned pointer to whole sockaddr_in or sockaddr_in6. From Pavel Pisa . - asin(): The function did not convert for some input values. asing() did not convert for values which do not belong to the domain of the function. But aside of that the function also did not converge for allowed values. I achieved a conversion of the function by reducing the DBL_EPSION and by checking if the input value is in the domain of the function. This is a fix for the problem but the function should always terminate after a given number of iterations. From Stefan Kolb. - Change all references from avsprintf to vasprintf. From Sebastien Lorquet. * Applications: apps/nshlib: - Fix error handling in 'cat' command. On a failure to allocate memory, a file was not being closed. From Bruno Herrera. - Fix error handling in 'mv' command. On a failure to expand the second path, the memory allocated for the expansion of the first path was not being freed. From Bruno Herrera. * Applications: apps/system: - apps/system/netdb: Failed to build if CONFIG_NET_HOSTFILE was not defined because gethostbyaddr() was not available. Noted by OrbitalFox. * Applications: apps/netutils: - Various Kconfig files in netutils: Fix some changes from from NETUTILS_DNSCLIENT to NETDB_DNSCLIENT. From Pavel Pisa. * Applications: apps/modbus: - Macros PR_BEGIN_EXTERN_C and PR_END_EXTERN_C were not defined in all contexts. Replace with explicit expansion in all cases. From Stefan Kolb.