NuttX-7.15 Release Notes

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/nuttx/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
    http://www.nuttx.org/doku.php?id=wiki:nxinternal:smp.  The
    new platform interfaces are also described in the NuttX porting
    guide: http://www.nuttx.org/doku.php?id=documentation:portingguide.
    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 tast 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/refesh.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/sysem/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.