NuttX-7.14 Release Notes

The 114th release of NuttX, Version 7.14, was made on January 28, 2016, and is available for download from the website. Note that release consists of two tarballs: nuttx-7.14.tar.gz and apps-7.14.tar.gz. These are available from:

Both may be needed (see the top-level nuttx/README.txt file for build information).

Additional new features and extended functionality:

* Core OS:

  - modules:  Add support for kernel modules:  insmod, rmmod, support
    functions.  procfs support for user lsmod functioniality.
  - SIGEV_THREAD:  Add support for the SIGEV_THREAD notification method
    in struct sigevent.  This initial implementation will only work in
    the FLAT build since it utilizes the work queue for signal
    callbacks.  See the top-level TODO file for additional details.
  - 64-Bit Timer:  If the 64-bit timer is selected, then use it whenever
    clock_systimer() is called rather then chopping the 64-bit timer
    down to 32-bits.  Add a new type, systime_t to represent the 32- or
    64-bit system timer. This eliminates clock_systimer32() and
    clock_systime64(); there is now only clock_systimer().

* Common Device Drivers:

  - Telnet Driver: Move the Telnet driver from apps/ to
    nuttx/drivers/net.  It is a driver a belongs in the OS.   Now works
    like the loop device:  A new interface called telnet_initialize()
    registers a telnet session "factory" device at /dev/telnet.  Via
    ioctl, the factory device can create instances of the telnet
    character devices at /dev/telnetN to support Telnet sessions.
  - PCA9635PW:  Add a driver for the PCA9635PW I2C LED driver IC which
    can be used to control the intensity of up to 16 LEDs.  From
    Alexander Entinger.
  - MCP9844: Driver for the MCP9844 I2C digital temperature sensor with
    a selectable resolution.  From Alexander Entinger.
  - PN532: Add driver for the NXP PN532 NFC-chip.  From Janne Rosberg
    and others at Offcode Ltd.
  - LSM9DS1:  Add driver for the STMicro LSM9DS1 chip. The LSM9DS1 is a
    system-in-package featuring a 3D digital linear acceleration sensor,
    a 3D digital angular rate sensor, and a 3D digital magnetic sensor.
    From Paul Alexander Patience.
  - CAN Interface:  Add more extensive error reporting capaibility to
    the CAN interface definitions.  From Frank Benkert.
  - SPI Interface:  Add an optional hwfeatures() method to the SPI

* Simulation Platform:

  - NSH configuration uses the custom start up scriptwith a read-only
    passwd file.  Includes hooks for an MOTD message.

* ARMv7-R

  - ARMv7-R:  Add basic architecture support for the ARMv7-R processor

* Atmel AVR:

  - Atmega2560:  Add support for the Atmega2560.  From Dimitry Kloper.
  - debug.h: Add an AVR-specific header file used when the AVR MEMX
    pointer is used.  From Dimitri Kloper.

* Atmel AVR Boards:

  - Arduino-Mega2560: Add support for the Arduino-Mega2560.  From
    Dimitry Koper.

* Atmel SAMV7 Drivers:

  - Port the TRNG driver from the SAMA5D3/4 to the SAMV7.
  - Port the WDT driver from the SAMA5D3/4 to the SAMV7.
  - Add an RSWDT driver.

* Atmel SAMV7 Boards:

  - SAMV71-XULT:  Add configuration for testing OS modules.

* Freescale Kinetis:

  - MK60N512VLL100: Add support for the MK60N512VLL100 Kinetis part.
    From Andrew Webster.

* Freescale Kinetis Boards:

  - ENET:  Numerous updates to the Kinetis ENET driver. That driver is
    now functional. From Andrew Webster.

* NXP LPC43xx Boards:

  - WaveShare LPC4337-WS:  Support for the WaveShare LPC4337-WS board.
    From Lok Tep.

* STMicro STM32 Drivers:

  - Timer Capture:  Add timer input capture driver.  From Pierre-Noel

* STMicro STM32 Boards:

  - Olimex STM32 H407:  Added a port to the Olimex STM32 H407 board.
    This board features the STMicro STM32F407ZGT6 (144 pins).
    Contributed by Neil Hancock.

* TI TMS550 Boards:

  - TI LaunchXL-TMS57004:  Add basic board support for TI LaunchXL-
    TMS57004.  Still a work in progress.

* C Library/Header Files:

  - sys/time.h: Add timeradd(), timersub(), timerclear(), timerisset(),
    and timercmp() as macros. These are non-POSIX interfaces, but
    included in most BSD deriviatives, including Linux.  From Manuel St𨮊.
  - AVR support: Introduce support for Atmel toolchain in-flash strings.
    Atmel toolchain AVR compiler provides a transparent in-flash object
    support using __flash and __memx symbols. The former indicates to
    compiler that this is a flash-based object.  The later used with
    pointer indicates that the referenced object may reside either in
    flash or in RAM. The compiler automatically makes 32-bit pointer
    with flag indicating whether referenced object is in flash or RAM
    and generates code to access either in run-time. Thus, any function 
    hat accepts __memx object can transparently work with RAM and flash
    For platforms with a Harvard architecture and a very small RAM like
    AVR this allows to move all constant strings used in trace messages
    to flash in the instruction address space, releasing resources for
    other things. This change introduces IOBJ and IPTR type qualifiers.
    The 'I' indicates that the object may lie in instruction space on a
    Harvard architecture machine. For platforms that do not have __flash
    and __memx or similar symbols IOBJ and IPTR are empty, making the
    types equivalent to, for example, 'const char' and 'const char*'.
    For Atmel compiler these will become 'const __flash char' and
    'const __memx char*'.  All printf() functions and syslog() functions
    are changed so that the qualifier is used with the format parameter.
    From Dimitry Kloper.
  - debug.h:  Add configuration to support an architecture-specific
    debug.h header file. From Dimitri Kloper.
  - netdb:  Add support for the use of a DNS resolver file like
  - TEA:  Add an implementation of the Tiny Encryption Algorithm.
  - math32.h:  Add some utilities to support 64-bit arithmetic
    operations for platforms that do not support long long types.

* Tools:

  - tools/cnvwindeps.c:  Add a tool that will convert paths in
    dependencies generated by a Windows compiler so that they can be
    used with the Cygwin make.
  - tools/ A script that coordinates use of cnvwindeps.exe.
    Dependencies now work on the Cygwin platform when using a Windows 
    ative toolchain.

* Applications: NSH

  - Module Commands:  Add module commands: insmod, rmmod, and lsmod.
  - Time Command:  Add a 'time' command that may be used to time the
    execution of other commands.
  - Password Commands:  Add useradd, userdel, and passwd commands.
  - MOTD:  Now supports a Message of the Day (MOTD) that will be
    presented after the NSH greeting.
  - Session Logins:  All sessions may be protected with logins using the
    encrypted password in /etc/passwd.
  - Extended Logins.  Added optional platform-specific function to
    perform password verification and optional delay after each failed
    login attempt.

* Applications: apps/fsutils:

  - apps/fsutils/passwd: Utility library for accessing a password file
    like /etc/passwd.

* Applications: apps/netutils:

  - apps/netutils/telnetd:  Now creates Telnet sessions by opening a new
    factory device at /dev/telnet and then using ioctl calls to create
    the session character drivers at /dev/telnetN.
  - apps/netutils/netlib:  Add netlib_get_dripv4addr() and
    netlib_get_ipv4netmask().  From Pelle Windestam.

* Applications: apps/examples:

  - apps/examples/module:  Add a test harness for verifying NuttX kernel
  - apps/examples/pca9635:  Add a simple test of PCA9635PW PWM LED driver.
    From Alan Carvalho de Assis.
  - apps/examples/ostest:  Add a test of POSIX timers using SIGEV_THREAD.

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:

  - pthreads: CRITICAL BUGFIX: Logic was wiping out the indication that
    of the type of a pthread.  Hence, it could be confused as a task.
  - waitpid:  CRITICAL BUGFIX.  Add a reference count to prevent waitpid
    from using stale memory released by the waited-for task group.
  - clock_systimespec():  Fix an error in a time conversion.

* File System/Block Drivers:

  - poll(): Fix handling of sem_tickwait() return value sem_tickwait()
    does not return an -1+errno, it returns a negated errno value.
    Noted by Freddie Chopin.

* Common Drivers:

  - TUN Driver:  Fix a compile time error in the TUN driver.  From
    Vladimir Komendantskiy.
  - USB Host HID Parser:  Wrong size used in memcpy().  From Hang Xu.
  - PCA9555: Fixed a bug in the function pca9555_setbit which occurs if
    someone tries to set one of the pins 8-15. The problem is that
    after the check if the pin is greater than 7 the variable addr is
    incremented and used in the Call I2C_WRITEREAD. But later in the
    call to the I2C_WRITE buf[0] is used as address but this address is
    not incremented as it should be. Note address does mean the address
    to the register in the ioexpander and not the I2C address.  From
    Stefan Kolb.

* Networking:

  - TCP/IOB:  Numerous fixes, mostly relate to TCP and IOB buffering
    and race conditions.  These were necessary for for the NuttX
    networking later to be stable in some stress testing.  From Andrew

* Atmel SAMV7 Drivers:

  - USBHS Device: In USBHS device driver, fix check if zero length
    packet is needed.

* STMicro STM32 Drivers:

  - OTG FS Host:  Fix some backward arguments to stm32_putreg().  Note
    by Hang Xu.

* Tools:

  - tools/mkdeps.c:  Extended/fixed support for --winpath option.
    Dependencies now work under Cygwin with a native Windows toolchain.

* Build System:

  - apps/platform/Makefile:  Use a relative path to the board directory
    link rather than the absolute path.  For Cygwin, the absolute would
    would need converted with cygpath.  But just using the relative path
    is a simpler solution.