NuttX-7.15 ---------- The 115th release of NuttX, Version 7.15, was made on March 27, 2016, and is available for download from the Bitbucket.org website. Note that release consists of two tarballs: nuttx-7.15.tar.gz and apps-7.15.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: * Core OS: - Add a state variable that provides the current level of OS initialization. This is needed by some logic that may attempt to run early in the start-up sequence but cannot run if a sufficient level of initialization has not yet occurred. - Spinlocks: Add interface definitions for to support spinlocks as needed for multi-CPU configurations. - SMP support. Support for Symmetric Multi-Processing (SMP) added. This affects many internal data structures, spinlock extensions and renaming of interrupt enable/disable interfaces, new platform interfaces to support CPU initialization and inter-actions, and new application interfaces to manage CPU affinity. The changes are too extensive to summarize here; see the SMP Wiki page at https://cwiki.apache.org/confluence/display/NUTTX/SMP. The new platform interfaces are also described in the NuttX porting guide: https://nuttx.apache.org/docs/latest/quickstart/organization.html. Only partially verified; awaiting hardware for the complete verification. - TLS: Basic definitions needed to support thread local storage (TLS). TLS is not used anywhere yet (and may not be used in the near future either). - Performance Monitoring: Add a configuration option to buffer RTOS instrumentation data in an in-memory buffer. - boardctl(): Add boardctl() support that will permit applications to control USB devices. * File Systems/Block Drivers: - procfs: Add /proc/kmm entry that shows that state of the kernel heap. Only useful in PROTECTED and KERNEL build modes where there is a kernel heap. - procfs: Add support for showing CPU in the taste status if SMP is enabled. * Networking: - ARP: Add support for IOCTL commands to manage the ARP table. - IEEE 802.15.4 and 6LowPAN: There are some radio drivers and a directory structure is in place. However, most of this development is occurring on a fork and is not yet available in the NuttX repositories. Hopefully in NuttX-7.16. * Common Device Drivers: - ADS1242: Driver for the 24-Bit Differential Input ADC ADS1242 that communicates via SPI with a MCU. Reading the ADC conversion result as well as configuring the ADC, setting the input channel, etc. is implemented via ioctl calls. However, it does not yet implement the standard ADC interface. From Alexander Entinger. - U-Blox Modem: Add an upper half driver for the U-Blox Modem. From Vladimir Komendantskiy. - I2C: Add an I2C, "upper half", character drivers to support raw I2C data transfers for test applications. - RGB LED: Add a driver to manage a RGB LED via PWM. From Alan Carvalho de Assis. - Performance Monitoring: Add a character driver that will allow an application to read buffered scheduler instrumentation data. * Simulation Platform: - SMP: Add multi-CPU support to the simulation to support SMP investigation. There are issues with the simulation and it is less than perfect but sufficient for some very preliminary testing of the core SMP feature. * ARMv7-A, ARMv7-R, and ARMv7-M: - ARMv7-A, ARMv7-R, and ARMv7-M: Add test-and-set logic and definitions needed to supports spinlocks. - ARMv7-A: Added MPCOre Generic Interrupt Controller (GICv2) and Global Timer support - ARMv7-A: Now includes in MCU-specific hooks needed for SMP support. * Atmel SAMV7 Drivers: - HSMSI: HSMCI driver can now be configured to handle unaligned data buffers. * NXP Freescale LPC11xx/17xx/43xx and LPC2378 Drivers: - I2C: Backported the LPC43XX I2C driver, replacing the LPC11XX, LPC17XX, and LPC2378 I2C drivers. This gives us the I2C_TRANSFER method in all I2C drivers. * NXP Freescale LPC17xx Boards: - Support for the u-blox GSM and GPS module evaluation board with NXP LPCExpresso LPC1768. The GSM module is one of LISA-C200, LISA-U200 or SARA-G350. The GPS module is one of MAX-M7 or MAX-M8. From Vladimir Komendantskiy. * NXP Freescale i.MX6: - Basic support is in place for the i.MX6 Quad/Dual MCUs. Verification is, however, waiting for the receipt of hardware. * NXP Freescale i.MX6 Boards: - Sabre-6Quad: Basic support for the NXP/Freescale Sabre 6Quad board is in place but waiting for hardware for verification. * STMicro STM32: - STM32F46xx: Support for STM32F46xx from Paul Alexander Patience - STM32L4: Add support for the STM32L4 family. From Sebastien Lorquet. * STMicro STM32 Boards: - STM32F4 Discovery: Add PWM support for the onboard RGB LED. From Alan Carvalho de Assis. - Nucleo-L476: Add support for the Nucleo-L476 board. From Sebastien Lorquet. - STM32L476VG Discovery: Add support for the STM32L476VG Discovery board. From Dave. * Tools: - tools/refresh.sh now has a --silent option so that it can be used in batch modes without human input. * Build System: - Added a 'make olddefconfig' target that will refresh a .config file without interaction. * Applications: NSH - 'arp': Add an 'arp' command that will support access to the OS ARP table. - 'ps': The 'ps' command will show CPU if SMP is enabled. * Applications: apps/netutils: - apps/netutils/chat: Chat logic contributed by Vladimir Komendantskiy. - apps/netutils/netlib: Add utility functions to support accesses to the ARP table. * Applications: apps/examples: - apps/examples/chat: Chat example contributed by Vladimir Komendantskiy. - apps/system/ubloxmodem: Example to control the power state of the modem in nsh. From Vladimir Komendantskiy. - apps/examples/leds: An example to demonstrate use of LED driver. - apps/examples/smp: Add a test to verify SMP configurations. - apps/examples/rgbled: Example using the RGB LED driver to drive an RGB LED via PWM. From Alan Carvalho de Assis. - apps/examples/ostest: Add a test of TLS. - apps/examples/sched_note: Add a simple example to exercise the scheduler instrumentation logic. 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: - Signals: Move the list of signal actions from the TCB to the group structure. Signal handlers are not per thread but, rather, per task group. I know, I preferred it the other way too, but this is more compliant with POSIX. - Semaphores: Add an internal, non-standard interface to reset a semaphore count. This is sometimes needed by drivers in order to recover from error conditions. Were previously using sem_init() which is both inappropriate and incorrect if the semaphore count is negative. - Low-Priority Work Queue: Fix logic to find an IDLE worker thread; the test for busy was backward. From Linfei Chen. * File System/Block Drivers: - FAT: Add an option to force all transfers to be performed indirectly using the FAT file system's internal sector buffers. This is a fix for the case where the user provided buffers are not properly aligned for DMA (as with THTTPD). - MTD: Increase block size in mtd_geometry_s to 32-bits. * Common Drivers: - I2C: Restructured the I2C interface as necessary to eliminate some thread-safety issues inherent in the legacy I2C interface design. This effects the interface definition, all I2C clients, and all low- level I2C drivers. I have used caution, but I still expect a change of this magnitude to introduce some errors. Any bug reports of bug fixes will be much appreciated. - I2C_RESET: Eliminate up_i2creset(). It should not be a global function; Now it is an I2C interface method. - PCA555: Add logic to make the PCA555 driver thread safe. - syslog: If syslog timestamping is enabled, don't try to get the time if the timer hardware has not yet been initialized. - AT24xx driver: Correct missing address calculation logic. From Frank Benkert. * Networking: - Networking drivers that support CONFIG_NET_NOINTS: Fix a race condition that can cause the TX poll timer to stop running. From Manuel Stuhn. - Timer Poll: Fix some logic when there are multiple network interfaces. In this case, TCP timeout events can really only being processed when the poll from the correct device is received. * Atmel SAMV7 Drivers: - SAMV7 USB HS device: The USB driver has had some issue that would occasionally cause loss of packets. Back last December, a fix was put in for this but the fix apparently worsens the problem; now causing hangs. The basic problem is that the number of busy banks (NBUSYBKS) status is not real time but is delayed. This was fixed; now when the DMA completes and NBUSYBKS > 0, the NBUSYBK is interrupt is enabled and the operations are deferred until NBUSYBKS is truly zero. * Tools: - tools/testbuild.sh: .config files were not being updated because (a) kconfig-conf was being called in the wrong directory and (b) apps/Kconfig had not yet been created. Now uses 'make olddefconfig'. * Applications: apps/system: - apps/system/i2c: The I2C tool now obeys it OS interfacing: it now uses an I2C character driver to access the I2C bus. - apps/system/cdcacm, usbmsc, and composite: Use new boardctl() instead of calling directly in the OS when possible. * Applications: apps/netutils: - apps/netutils/dhcpd: DHCPD no longer calls directly into the OS but uses the new network IOCTL commands to modify the ARP table. * Applications: apps/modbus: - apps/modbus/nuttx/portserial.c: Was not returning an error on failure to open the device driver. From Olololshka kokoko. * Applications: apps/examples: - apps/examples/usbserial, composite, usbterm: Use new boardctl() instead of calling directly in the OS when possible. There are still a few bad OS calls for USB device interfaces that do not yet have boardctl() commands. * Applications: apps/platform: - Moved C++ initialization logic out of the RTOS and into the application space, specifically to apps/platform/board, where it belongs.