NuttX-7.6 --------- The 106th release of NuttX, Version 7.6, was made on November 26, 2014, and is available for download from the SourceForge website. Note that release consists of two tarballs: nuttx-7.6.tar.gz and apps-7.6.tar.gz. Both may be needed (see the top-level nuttx/README.txt file for build information). Additional new features and extended functionality: * Core OS: - Moved name semaphore and message queue support out of the OS and into the VFS. These improves the architecture by unifying the management of named resources, removes redundant resource management logic, and makes named semaphores and message queues visible in the file system. By default, these are visible at /var/lock and /var/mqueue. - Add SIGPOLL for use as part of the AIO implementation. - Remove CONFIG_MAX_TASK_ARGS configuration. There is now no predetermined limit on the number of arguments that may be passed to a new task on start-up. * Work queues: - Add support for priority inheritance on the low priority worker queue. That is, if a higher priority thread has scheduled work, the priority of the low priority worker thread(s) will be boost to the priority of the queuing thread. At work is performed at at least thread priority of the scheduling thread. If there are multiple worker threads, then all threads get reprioritized. Currently only implemented for AIO. - Add support for multiple low-priority work queue threads. This allows individual worker threads to block indefinitely for I/O as necessary without halting the entire work queue. * VFS/General Drivers: - Implement create() (as a macro). - Add pread() and pwrite(). Also added pread() and pwrite() system calls. - AIO: Add aio_read(), aio_write(), aio_return(), aio_error(), aio_suspend(), aio_canel(), lio_listio(), and aio_fsync(). This logic minimizes the creation of new threads by using the new features also added to the low priority work queue with this release. It uses the new low priority worker thread interface to adjust the priority of the worker thread according to the priority of the AIO client thread - Implement standard syslogmask() to control logging (also removing the non-standard syslog_enable()). * File Systems/Block Drivers/MTD: - Extend MTD support to the M25P16. From Sébastien Lorquet. * Drivers: - BCH (Block-to-Character): Add support for seeking in BCH. From Sébastien Lorquet. * Graphics Support/Graphics-Related Drivers: - Add support for a generic ILI9341 LCD driver. From Marco Krahl. - Add ANSI/VT100 foreground and background color commands. - Add driver for ST7565 LCD that works with NHD-C12864KGZ display. From Pierre-noel Bouteville. * Networking: - Verify that multiple networks can be supported. - Add support for the case where there are multiple networks: One being Ethernet and the other not (SLIP, PPP, ...). The primary difference from the standpoint of the stack is that (1) ARP may or may not be necessary, (2) the size of the link layer header will vary, and (3) different MTUs and TCP receive windows may be used with each link. Suggested by Brennan Ashton. - Extensions to UDP and TCP connection structures for the case of multiple networks. In this case, assigned port numbers only have to be unique with respect to the IP address. So, for example, you could have multiple port 80's, one on each network. * Host Simulation: - Removed the old, strange up_stdio.c and implemented a simulated UART driver to provide the console input. The new logic starts a separate, Linux domain pthread to read the console input in raw mode and provides the incoming data to NuttX via standard NuttX domain IPCs. - Add support for 64-bit longjmp/setjmp in simulator platform. This will permit operation of the simulation natively on a 64-bit platform. * ARMv7-M: - Add ARMv7-M CMSIS ITM header file and library. From Pierre-noel Bouteville. - Add ARMv7-M CMSIS DWT and TPI header files. From Pierre-noel Bouteville. - Add ARMv7-M support to use ITM for SYSLOG debug output. Includes logic from Pierre-noel Bouteville. * Atmel SAM3/4 Drivers: - Add support for SAM3/4 basic serial TERMIOS and flow control. There are issues with IFLOW control: PDC or DMAC support is required. * Atmel SAM3/4 Boards: - SAM4E-EK: Add support for PHY interrupt. * Atmel SAMA5D Boards: - SAMA5D3-Xplained: Add a configuration that provides a simple test for the EMAC and GMAC on the SAMA5D3 working together. - SAMA5D4-EK: Add a configuration that provides a simple test for the EMAC0 and EMAC1 on the SAMA5D4 working together. * Freescale KL: - Add an I2C header file for the Freescale KL family. From Alan Carvalho de Assis. * NXP LPC32xx: - Add support for tickless operation using the NXP LPC43xx. From Brandon Warhurst. * SiLabs EFM32: - Add a basic port for the SiLabs EFM32 family. Includes many files contributed by Pierre-noel Bouteville . * SiLabs EFM32 Boards: - Add board support for the EFM32 Gecko Starter Kit. - Add board support for the Olimex EFM32G8809128 STK. NOTE: I am unable to test this configuration due to tool-related issues. - Add board support for the SiLbas EFM32GG Giant Gecko Starter kit. * STMicro STM32: - Add support for the STM32 F411RE from Serg Podtynnyi. - Add support for the STM32F103RG. From Murilo Ponte. * STMicro STM32 Drivers: - STM32 F4: Add logic that implement true high speed support for the STM32 OTGHS peripheral and concurrent support for both LS and HS OTG. New OTGHS drivers provided for both device and host. From Brennan Ashton. * STMicro STM32 Boards: - STM32 Nucleo-F411RE: Extend this board configuration to also support the Nucleo-F411RE. From Serg Podtynnyi. - Add support for the STM32F429i Discovery's LCD (SPI based). From Marco Krahl. - configs/stm32f100rc_generic: Removed this generic board configuration. I have decided to stop support of generic board configurations. Generic board configurations do not provide support for any specific hardware but can be useful only if there are not other examples for the setup for a particular architecture. Not the case here. * C Library: - Add a mostly bogus wchar.h header file. This file is mostly bogus because none of the wide character operations are currently supported in the NuttX C library. The file does provide the wchar_t types needed by some software, however. - Add isatty() function. From Alan Carvalho de Assis. - Add mktemp(), mkstemp(), tmpnam() and tempnam(). * Configuration/Build System: - Add a PRELINK macro to Config.mk. From Kriegleder. - compiler.h: Defines inline functions as not instrumented - this is relevant for anyone using instrumentation. From Lorenz Meier. * Applications: - apps/interpreter/bas: Added in the Michael Haardt's BAS 2.4 adapted for use by NuttX by Alan Carvalho de Assis. Includes support for VT100 terminals and color commands. - Examples: Added bastest/ which holds a special version of Michael Haardt's BAS 2.4 test files adapted for use by NuttX on a ROMFS file system. - Examples: Add a simple UDP relay bridge for testing configurations with multiple networks. Includes a host-side test driver for testing the bridge. - Netutils: Add implementation of timeouts for the netutils webclient. From Brennan Ashton - NSH: Add support for a custom NSH ROMFS startup image header file location. From Martin Lederhilger. - OS test: Add a simple test of named semaphores. - OS test: Add AIO test case in OS test. Efforts In Progress. The following are features that are partially implemented but present in this release. They are not likely to be completed soon. * Processes. Much of the work in this release is focused on the realization of Unix-style user processes in NuttX. There is more to be done, however. The full roadmap and status is available at: https://cwiki.apache.org/confluence/display/NUTTX/Memory+Configurations * XMega: There are some fragments in place for an XMega port. That port has not really started, however. * Galileo: Similarly, there are fragments in place for an Intel Galileo port. The port not been started in earnest either. 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): I ran cppcheck against the entire code base and correct many latent bugs including things as serious as memory leaks, two locations where interrupts were be disabled but never re-enabled, and errors in the Tickless mode of operation. My thanks to the developers of cppcheck! I am impressed! * Core OS: - vfork(): Now that arguments are kept on the stack, the way that arguments are passed from parent to child in vfork() must change. This bug has always been present, but was not visible with the old strdup() way of passing arguments. - vfork() problem: If we get to vfork() via system call, then we need to clone some system call information so that the return form the cloned system call works correctly. - Fixes to tickless operation code, especially in alarm mode. From Brandon Warhurst. - Fix an important bug in the watchdog timer creation logic. - Calling mq_timedreceived() with immediate timeout was getting stuck and not timing out. Immediate timeout is achieved by setting absolute timeout value to past time, for example abstime={ .tv_sec=0, .tv_nsec=0 }. However absolute time was converted to relative time using unsigned integer arithmetic and resulted large ticks count by clock_abstime2ticks, instead of expected negative ticks value. Change corrects clock_abstime2ticks() to return negative ticks, if absolute time is in the past. From Jussi Kivilinna. * Memory Management: - Fix a place in the memory manager where it explicitly assumed that the size of a pointer is 4 bytes. That assumption was OK if the actual size is smaller but made the heap unstable when used with the x86_64 host simulation. - Granule Allocator: If the INTR granule allocator mode is enabled, there is no semaphore to destroy. From Lorenz Meier. * Networking: - Network routing: I don't think that the net_route() function has ever worked correctly. The source IP was updated in the match struct instead of the route IP. From Brennan Ashton. - Move and rename IP header flag definitions. The problem fixed here is that there IP header flag definitions were not available when TCP was disabled. The IP flags are used in ICMP and IGMP. - Network routing: Refuse to perform routing table lookups for the Broadcast IP address. From Brennan Ashton. - Network routing: Add logic to netdev_findbyaddr() to return the correct network device for the case where a broadcast address is used. This change caused trivial ripples through other files because additional parameters are required for netdev_findbyaddr() when CONFIG_NET_MULTINIC. * File Systems/Block Drivers/MTD: - NXFFS Dump: Fix problems with redefinitions of fdbg macro. With the fix to the syslog prototype, a LOG priority must now be the first parameter. Fixed by replacing all occurrences of fdbg with syslog(LOG_DEBUG, and eliminating the macro redefinitions. Noted by Sebastien Lorquet. - poll() was not waking up from signals (for example mq_notify() events). From Jussi Kivilinna. - poll(): Add proper handling for sem_timedwait errnos. From Jussi Kivilinna. - include/nuttx/fs/fs.h: Fix typo in conditional compilation. From Alan Carvalho de Assis. * Graphics/Graphic-Related Drivers: - Remove warnings when CONFIG_NXTK_BORDERWIDTH is set to zero. From Pierre-Noel Bouteville. * Common Drivers: - Make standard syslog and vsyslog POSIX compliant (also modify non-standard syslog functions for compatibility). - R/W buffering: Fix typo that can cause compilation error. * Atmel SAM3/4: - SAM4S: Add missing SPI0 clock configuration macro for the SAM4S. From spasbyspas. * Atmel SAM3/4 Drivers: - SAM4E-EK: Fix an error in a USART1 pin number. * Atmel SAMA5D3/4 Drivers: - SAMA5DF4: Fix several typos that will prevented EMAC1 from initializing properly. * NXP LPC43xx: - Fixes to allow compile of lpc43_gpioint.c. From Brandon Warhurst. * STMicro STM32: - Add missing ADC pinmap definitions for the STM32 F103R from Martin Lederhilger. * STMicro STM32 Drivers: - STM32 EXTI: Correct STM32 RTC EXTI bit definition. From Lazlo. - STM32 IWDG, WWDG, DBGMCU: Fix watchdog stop bit usage. From Lazlo. - STM32 OTGFS: Correct a typo in the STM32 OTGFS register bit definitions. * ARM: - ARM up_internal.h: Add protection from C++ name mangling in the ARM up_internal.h. From Lorenz Meier. * MicroChip PIC32MX: - PIC32MX7: DEVCFG0 bit 2 must be set. Writing bit 2 as zero can brick the CPU on some versions. From Cris Kvist. * C Library: - The implementation of access() as vararg macro has the issue that any function call with the same name (even in a C++ class) will match with it and result in a compile error. Replaced with a small function. This resolves the compile issue, and shouldn't have negative side effects for users of the function. From Lorenz Meier. - The definition of strncpy() is that empty space should be zero- filled, the change adds the zero filling (See the POSIX spec here: http://pubs.opengroup.org/onlinepubs/7908799/xsh/strncpy.html). From Lorenz Meier. - limits.h: Remove the definition of INT_FAST32_MIN which is already defined in stdint.h (the correct location). From Lorenz Meier. * Applications: - apps/: Correct everything under apps to use the corrected syslog interfaces. Remove any non-portable uses of syslog. - NSH: Fix ls -l output for regular files. - NSH: Fix reversed in/out file closing in DD command when an error occurs. From Ken Pettit. - NSH: Add logic to restart the console wait if an error occurs while reading from the console. In USB console startup, the logic must be able to open the USB serial and receive 3 newlines. However, it the USB driver is disconnected or otherwise fails before the 3 newlines are received, the receive loop becomes a killer, infinite loop, CPU hog. Noted by spasbyspas. - Netutils: Fix memcpy of host address in netlib_gethostaddr(). From Brennan Ashton. - Netutils: If you make a DNS request before the DNS address it would cause an assertion. The state of the IP setting is not something the application should be aware of, it should only be concerned with whether or not the name was resolved. From Brennan Ashton. - Netutils: Fix md5 hashing when digest[$i] islower that 16. From Sergey. - Stack Monitor: Fix compile problems introduced when the syslog() prototype changed; Also update Makefile for kernel build From Radoslaw Adamczyk. - Examples: Update NxTerm makefile for kernel-build issues. From Radoslaw Adamczyk. - Examples: Fixes to keypadtest from Pierre-Noel Bouteville. - Examples: These examples all set the IP address of eth1 but the netmask and gateway of eth0 if DHCP is enabled: discover, tcpecho, webserver, xmlrpc. That can't be right.