Skip to content
ReleaseNotes 791 KiB
Newer Older
Gregory Nutt's avatar
Gregory Nutt committed
      - dev/smart:  Added support for a /dev/smart loop device. From Ken
        Pettit.

    * Networking:

      - Driver Statistics: Most network drivers do not support statistics.
        Those that do only supported them when DEBUG is enabled.  Each
        driver collected an architecture specific set of statistics and
        there was no common mechanism to view those statistics.  Thus,
        the driver feature was mostly useless.  This release standardizes
        the driver statistics and puts the definition in the common network
        device structure defined in netdev.h where they can be accessed by
        network applications.  All Ethernet drivers that collect statistics
        have been adapted to use these common statistics.

    * Simulation Platform:

      - W25 FLASH:  Added support for W25 FLASH simulation. From Ken Pettit.
      - HOSTFS: Added support for the HOSTFS file system (see "File Systems",
        above).

    * Atmel SAMV7:

      - SAME70:  Added support for the SAME70 family of chips.
      - Tickless: SAMV7 now supports the tickless mode of operation.

    * Atmel SAMV7 Drivers:

      - MPU:  Added MPU and protected build support.
      - QSPI:  Added a QuadSPI FLASH driver.  This driver operates in the
        memory-mapped, Serial Memory Mode (SMM).
      - FLASH:  Added support to write on-chip FLASH.
      - Timer/Counter:  TC driver ported to SAMV7 from the SAMA5.  Free-running
        and one-short timer logic also ported.
      - PCK: Brought programmable clock (PCK) logic from SAMA5 into SAMV7.
      - Timer/Counter:  Support PCK6 as an optional source for the timer/
        counter clock.

    * Atmel SAMV7 Boards:

      - SAME70-Xplained:  Add NSH and networking configurations for the
        SAME70 Xplained board.  Includes verified support for serial console,
        LEDs, buttons, SDRAM, HSMCI SD card, and networking.
      - SAMV7-XULT and SAME70-Xplained: If Tickless mode is selected then
        enable PCK6 as a timer/counter clock source

    * STMicro STM32:

      - CCM PROCFS: Is no longer a part of the 'base' procfs entries and can
        now only be supported via run time registration with
        CONFIG_FS_PROCFS_REGISTER=y.

    * STMicro STM32 Drivers:

      - Timers:  Add a compatible lower-half timer driver for use with the
        common timer upper-half driver.  From Wail Khemir.

    * STMicro STM32 Boards:

      - STM32F4-Discovery: Add low level support for the Zero Cross driver
        for the STM32F4-Discovery.  From Alan Carvalho de Assis.
      - STM32F4-Discovery: Add board config to support for the MAX6675. From
        Alan Carvalho de Assis.

    * C Library/Header Files:

      - bsearch():  Added the bsearch() function from NetBSD.
      - freopen():  Added support for freopen().
      - strftime():  Added day-of-week support (when avaialable).

    * Tools:

      - nxstyle: Add crappy style checking tool nxstyle.c.  See thee tools/
        README file for more info.

    * Applications: NSH

      - mksmartfs command: Add configuration option to supported multiple
        rootdirectories. From Ken Pettit.
      - Add support for 'basename' and 'dirname' commands.
      - set command:  Like bash, NSH set command now strips off any leading
        or trailing whitespace.
      - mount command: The mount commands now accepts mount options
        (currently needed only for the hostfs file system).  From Ken
        Pettit.
      - losetup command:  NSH no longer calls losetup() and loteardown
        directly. Now it opens /dev/loop and accomplishes these things
        using ioctl() calls.
      - ifconfig command:  If CONFIG_NETDEV_STATISTICS=y, then print the
        network driver statistics in the ifconfig.
      - ifconfig, ifup, and ifdown:  These commands now uses /proc/net/<dev>
        to view network device configuration and status and /proc/net/stat
        to show network statistics.  A consequence of this is that you
        cannot view this network information if the procfs is not enabled
        and mounted at /proc.
      - losmart command:  Added a new NSH losmart command.  losmart setups
        up a loop device for the smart MTD driver similar to losetup but
        with different syntax.  From Ken Pettit.
      - ps command:  The 'ps' command now uses /proc/<pid>/ to obtain task
        status information.  A consequence of this is that you cannot use
        the 'ps' command if the procfs is not enabled and mounted at /proc.
Gregory Nutt's avatar
Gregory Nutt committed
    * Applications: apps/system:

      - apps/system/hexed:  Port the hexed command line hexadeciamal editor
         to Nuttx.  See http://apps.venomdev.net/hexed/.

    * Applications: apps/fsutils:

      - apps/fsutils/smartfs: Move into apps/fsutils from kernel, now uses
        only open and ioctl.  From Ken Pettit.

    * Applications: apps/examples:

      - apps/examples/fstest:  Add a generic file system test.  This is
        essentially the same as examples/smart, but has all of the SmartFS
        specific logic ripped out.  This was created for testing the new
        TMPFS.
      - apps/examples/zerocross: Add a Zero Cross application example. From
        Alan Carvalho de Assis.
      - apps/examples/media:  Add a simple test for access of media via a
        block driver or MTD driver.

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:

      - Fixed an error in clock_timespec_subtract().  Found by Lok.
      - pthreads: CRITICAL BUGFIX: Logic was wiping out the indication that
        of the type of a pthread.  Hence, it could be confused as a task.
        Found because this was causing a crash when /proc/nnn/cmdline was
        printed.

    * File System/Block Drivers:

      - SMART MTD: Fix some Smart wear-leveling bugs.  Fixed SmartFS wear
        level error that occurs when the logical sector size is too small to
        save all wear level status bytes in a single sector.  Logical
        sectors 1 and 2 were simply not being allocated and then the
        read_sector and write_sector routines were failing.  From Ken
        Pettit.

    * Graphics/Graphic Drivers:

      - ILI9432:  Fixed errors in orientation. Portrait, RPortrait, and
Gregory Nutt's avatar
Gregory Nutt committed
        Landscript should work correly now.  They were displayed mirrored.
        From  Marco Krahl.

    * Common Drivers:

      - CAN:  Fix a problem in the CAN upper-half driver that occurs only
        for CAN hardware that support a H/W FIFO of outgoing CAN messages.
        In this case, there can be a hang condition if both the H/W and
        S/W FIFOs are both full.  In that case, there may be no event to
        awaken the upper half driver.  Add a new (conditional) CAN upper
        half interface called can_txready() that can be used by the lower
        half driver to avoid this hang condition.
      - MS58xx:  Fix some issues with initialization and with CRC
        calculation.  From Karim Keddam.
      - W25: Fixed W25 FLASH driver page read/write logic. From Ken Pettit.

    * Atmel SAMV7 Drivers:

      - USART1 pin configuration: Reconfigure System I/O when using USART1.
        From Frank Benkert.
      - MCAN:  Added a call to can_txready() to the MCAN driver.

    * STMicro STM32 Drivers:

      - stm32 F4:  Fix some TIM12 pin mappings.  From Max Kriegleder.

    * STMicro STM32 Boards:

      - STM32F429i-Disco:  Calculated partition boundries based on page
        block sizes but mtd_partition() is expecting calculations based on
        erase block size. From Alan Carvalho de Assis.

    * C Library/Header Files:

      - sys/types.h: When building on a 64-bit machine, the size of size_t
        should be 64-bits. In general, I believe that sizeof(size_t) should
        be the same as sizeof(uinptr_t).  mmsize_t should always be 32-bits
        in any event.  The last change to stddef has been backed out.  With
        these changes, the simulator builds without errors or warnings an a
        64-bit machine.

    * Applications: apps/nshlib:

      - The I/O buffer, g_iobuffer, should not be a global buffer.  That
        will not work in an environment where there are multiple NSH
        sessions.  The I/O buffer must, instead, be a part part of the
        session-specific data defined in nsh_console.h.

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 Bitbucket.org website.  Note
that release consists of two tarballs:  nuttx-7.14.tar.gz and
apps-7.14.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:

      - 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
        interface.

    * 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
        family.

    * 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
        Bouteville.

    * 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
        objects.
        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
        /etc/resolv.conf.
      - 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/mkwindeps.sh: 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
        modules.
      - 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
        Webster.

    * 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.
Gregory Nutt's avatar
Gregory Nutt committed

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/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
        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.
Gregory Nutt's avatar
Gregory Nutt committed
      - 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.

NuttX-7.16 Release Notes
------------------------

The 116th release of NuttX, Version 7.16, was made on June 1, 2016,
and is available for download from the Bitbucket.org website.  Note
that release consists of two tarballs:  nuttx-7.16.tar.gz and
apps-7.16.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:

      - Power Management: Add activity domain to all PM interfaces and
        driver callbacks.  If CONFIG_PM_NDOMAINS == 1, then the legacy
        behavior is preserved.  If CONFIG_PM_NDOMAINS > 1, then multiple
        PM domains are supported.  This will allow separate control for
        certain power management groups.  For example, a network can be
        shut down without affect an ongoing UI (and vice versa).
      - board_app_initialize():  board_app_initialize() now accepts an
        argument that may be used to support initialization in different
        configurations.

    * File System and Block and MTD Drivers:

      - N25Qxxx: Add MTD support for Micron N25Qxxx family of QSPI flash.
        From Dave (ziggurat29).
      - SST26F:  Add an MTD driver for SST26F spi/qspi flash devices (SPI
        mode only).  From Sebastien Lorquet.
      - File Descriptor Detach: Add logic to detach a file structure from a
        file descriptor. This is for use only within the OS.  It permits an
        open file or driver to be used across multiple threads.

   * Networking and Network Drivers:

      - listen()/accept():  Separate out psock_listen() and psock_accepti()
        for internal, thread independent OS usage (i.e., without a socket
        descriptor).
      - VNC Server:  Add support for a VNC server.  This logic is code
        complete and functional, but not well tested.

    * Graphics and Graphic Drivers:

      - Framebuffer driver:  Add a display number to each interface in order
        to support multiple display devices.
      - VNC Server:  Add support for a VNC server.  This logic is code
        complete and functional, but not well tested.
      - LCD Backpack: Add support for PCF8574 LCD Backpack driver. This
        driver supports an interface board that is based on the PCF8574 I/O
        expander and supports the HD44780-based (or compatible) LCD modules.
        There are a myriad of different vendors of such, but they are
        principally the same, save wiring and minor features like jumpers
        for I2C addresses. This driver supports known and unknown variants.
        From Dave (ziggurat29).

    * Common Device Drivers:

      - RTC:  Simplify the RTC interface.  The old interface was way too
        complex and was not fully implemented anywhere.
      - BH1750FVI:  Add a character driver for Rohm Ambient Light Sensor
        BH1750FVI.  From Alan Carvalho de Assis.
      - CAN:  Improve CAN error reporting. From Frank Benkert.
      - aes.h:  Modifications to the crypto API needed for LPC43xx.  From
        Alexander Vasiljev.
      - ADC:  Interface no longer uses global adc_receive() call.  Added a
        new bind() method to the ADC interface.  Now the ADC upper half
        driver will register its receipt-of-data callback.  This change
        allows the ADC lower half driver to be used with a differ ADC upper
        half.

     * Simulation Platform:

      - Linux Host Networking:  Enhance networking support for the
        simulation under Linux. Includes updated support for Linux TUN/TAP,
        and the addition of support for Linux bridge devices.  From Steve.

    * ARMv7-A, ARMv7-R, and ARMv7-M:

      - ARMv7-M:  Convert more assembly language files for use with the IAR
        toolchain.  From Kha Vo.
      - ARMv7-A:  Complete re-design of SMP-related logic to initialize each
        CPUn, n > 0, when CONFIG_SMP=y.

    * Atmel SAMV7:

      - Add a JTAG config and ERASE config to Kconfig to set the
        CCFG_SYSIO SYSIO Pins.  From David Sidrane.
      - System Reset: Add the up_systemreset interface to the samv7 arch.  The
        approach is slightly different in that: 1) It enables ARCH_HAVE_RESET
        and allows the user to set if, and for how long, to drive External
        nRST signal. It also does not contain a default board_reset, as that
        really should be done in the config's src if CONFIG_BOARDCTL_RESET
        is defined.  From David Sidrane.

    * Atmel SAMV7 Boards:

      - SAMV71-XULT: Add configuration(s) that were be used to verify VNC
        graphics output as well as mouse and keyboard input.

    * NXP Freescale i.MX6 Boards:

      - Sabre-6Quad:  The basic i.MX6 port is complete.  This is a minimal
        port at present and probably still has some as-of-yet-undiscovered
        issues.
      - Sabre-6Quad: Basic SMP NSH configuration is now working.  But this
        is probably only because the SMP test case does not stress the
        logic.  There are know outstanding SMP issues as noted in the
        Sabre-6Quad README.txt file.

    * NXP Freescale LPC43xx:

      - LPC4337jet100: Add definitions for the LPC4337jet100 chip.  From
        Alexander Vasiljev.

    * NXP Freescale LPC43xx Drivers:

      - AES:  Add AES support.  From Alexander Vasiljev.

    * STMicro STM32:

      - STM32 L4: Add configuration options to allow SRAM2 to be used for
        heap, or not at all, and to zero-initialize it on OS start, or not
        at all. From Dave dev@ziggurat29.com.
      - STM32 L4: Add support for HSE and MSI clocks, and auto trim of MSI
        to LSE (needed for USB).  From Dave (ziggurat29)
      - STM32 L4: Add support for unique id function to arch; modified board
        to support unique id boardctl.  From Dave (ziggurat29)

    * STMicro STM32 Drivers:

      - STM32 F4 RTC: Add a custom RTC driver with support for alarms.  From
        Neil Hancock.
      - STM32 L4 QSPI: Add a QSPI driver with DMA support and (optional
        memory mapped mode support. From Dave ziggurat29).
      - STM32, STM32 L4, and STM32 F7 Serial:  Add support for compliant
        SD-style breaks. From David Sidrane.
      - STM32 L4 CAN: Add CAN support for STM32L4.  From Sebastien Lorquet.
      - STM32 1-Wire:  Add support for a custom 1-wire driver.  The serial
        driver already supports a 1-wire interface, but this driver uses the
        same serial logic to implement a lower half driver much like the
        I2C lower half driver.  From Aleksandr Vyhovanec.
      - STM32 L4 SPI: Add support for SPI 4 and 5 on stm32f411 chips. From
        Konstantin Berezenko.
      - STM32 ADC: Allow omitting use of channels in a lower part of PWM.
        From Pierre-noel Bouteville.
      - STM32 L4 I2C: Get I2C working for STM32L4.  From Dave (ziggurat29).

    * STMicro STM32 Boards:

      - STM3220G-EVAL:  Add support for both the IAR and uVision GCC IDEs.
        From Kha Vo.
      - STM32F429I Discovery:  Add support for the uVision GCC IDE.   From
        Kha Vo.
      - STM32F4 Discovery: Integrate BH1750FVI driver in the STM32F4 Discovery
        board.  From Alan Carvalho de Assis.
      - STM32L476VG Discovery:  Add support for QSPI based N25Qxxx flash.
        From Dave (ziggurat29)
      - STM32L476VG Discovery: Add board ioctls for allowing user application
        to cause QSPI memory mapped mode to be engaged and disengaged.  Also
        partitioned QSPI flash for file system and other (eventually xip).
        From Dave (ziggurat29)
      - Nucleo-144: Basic port for the Nucleo-144 board with the STM32F746ZG
        MCU.  From Kconstantin Berezenko.
      - STM32F103 Minimum: Add support for this minimual STM32F103CBT6 "blue"
        board.  From Alan Carvalho de Assis.
      - STM32F411E Discovery:  Add basic configuration for stm32f411e-disco
        board with STM32F411VE chip.  From Konstantin Berezenko.

    * Build/Configuration System:

      - Moved NuttX repository to https://bitbucket.org/nuttx/nuttx.
        Eliminated use of sub-modules.
      - Add support for the IAR toolchain for the limited case of the ARMv7-M
        architecture and the STM32 chip.  From Aleksandr Vyhovanec.
      - make export: Pass top-level make to the script to allow -j greater
        than 1.  From David Sidrane.
      - fs/Kconfig:  Allow CONFIG_FS_WRITABLE to be manually selectable. This
        is needed when there are no writable file systems, but write support
        is still needed in BCH or FTL.
      - arch/*/Makefile: Add definitions that can be overrided to use GCC
        instead of LD in the final link.  From Paul Alexander Patience .

    * Applications: apps/netutils:

      - apps/netutils/esp8266:  ESP8266 driver application.  From Pierre-noel
        Bouteville.

    * Applications: apps/examples:

      - apps/examples/alarm:  Add a simple test of the ALARM iotcl calls of
        the RTC driver.
      - apps/examples/nximage:  Add a configuration option to select
        greyscale.

    * Platforms: apps/platform:

      - apps/platform/nucleo-144: Add platform files for NUCLEO-144
        (NUCLEO-F746ZG).  From Mark Olsson.
      - apps/examples/media:  You can now override the default device driver
        path by providing an alternal path on the command line.  From
        Sébastien Lorquet.

Works-In-Progress:

    * IEEE802.14.5/6LowPAN.  Hooks and framework for this effort were
      introduced in NuttX-7.15.  Work has continued on this effort on
      forks from the main repositories, albeit with many interruptions.
      The completion of this wireless feature will postponed until at
      least NuttX-7.17.

    * i.MX6 SMP.  Partially functional, but there is more that still
      needs to be done.

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:

      - Various places:  Search for places where a stray semicolon following
        an if condition cause the if body to be executed unconditionally.
        Fixes in all SAM DMA logic, unionfs, OS signalling logic, and others.
      - enter/leave_critical_section() may attempt to access task lists
        before they have been initialized in the SMP configuration.

    * File System/Block Drivers:

      - SMART MTD:  Return code of smart_scan not checked, can cause success
        result in failure case, leading to 'dev' pointer being invalid. From
        Dave (ziggurat29)
      - mount: Fix a backward debug assertion.  Noted by David Sidrane.

    * Common Drivers:

      - NRF24L01: Fix backward calculation of relative frequency.  Noted by
        Henry Zhang.
      - PCA9555 I/O expander: Fix an error in the PCA9555 driver: Under
        certain error conditions, interrupts were not being re-enabled.
        Sebastien Lorquet.
      - ADS1255: Must not do SPI access from interrupt handler.  Use the
        worker thread instead.  Must also lock the SPI bus before using it.
      - Several SPI-based drivers modified.  All drivers that use SPI must
        call SPI_LOCK and SPI_UNLOCK.  This is not optional.
      - MS583730:  Fix a bug in crc computation for ms583730. Implement
        POSIX read.

    * Atmel SAMV7:

      - Fix typo in MATRIX register definitions.  From Stefan Kolb.
      - SAMV7 Tickless Mode: This is a fix to a problem in the handling of
        the oneshot timer. Due to a wrong assumption concerning the behavior
        directly after the start of the timer/counter the function
        sam_oneshot_cancel(…) calculates the wrong remaining time. The code
        assumes that the counter register is zero directly after the start
        of the timer, but this is not true. To start the time/counter a
        software trigger is invoked, this trigger starts the timer/count and
        sets the counter register to zero, but the reset of the counter
        register is not performed instantly. According to the datasheet:
        "The counter can be reset by a trigger. In this case, the counter
        value passes to zero on the next valid edge of the selected clock."
        Thus the counter is set to zero between 0 and USEC_PER_TICK
        microseconds after the clock was started.
        In my fix I use the freerun count value to determine if at least one
        tick passed since the start of the timer and thus if the value of
        the oneshot counter is correct. I also tried to use the function
        up_timer_gettime(…) to achieve this but, at least if compiled with
        no optimization the problem vanishes without using the value of the
        function, the function call takes too long.
        Another problem treated in the fix is that if the oneshot timer/counter
        is canceled, we only know the remaining time with a precision of
        USEC_PER_TICK microseconds. This means the calculated remaining time
        is between 0 and USEC_PER_TICK microseconds  too long. To fix this I
        subtract one tick if the calculated remaining time is greater than
        one tick and otherwise set the remaining time to zero. By doing so
        the measured times are much more precise as without it.  From Stefan