Skip to content
ReleaseNotes 415 KiB
Newer Older
Gregory Nutt's avatar
Gregory Nutt committed
      - Granule allocator: Fixes some issues found by the PX4 team using
        Coverity.  From Pavel Krienko

    * Networking:

      - Several fixes correcting issues with the CC3000 networking.  From
        Jussi  Kivilinna
      - CC3000 Fix: Data can be unaligned.  When dereferenced as an input
        ntosh(), a bad value is returned.  Reported by Alan Carvalho de
        Assis
      - Correct naming of fields in struct sockaddr_in6:  sin6_port and
        sin6_family, not sin_port and sin_family.
      - accept(): Correct the value returned by accept() in the case where
        net_lockingwait() is called.  It was returning -1 and losing the
        errno value.  Noted by Rony Xln

    * Common Drivers:

      - Loop device should return -EINTR is interrupted by a signal.
Gregory Nutt's avatar
Gregory Nutt committed
      - M25P serial flash driver:  Add subsector size of the M24P16 part.
Gregory Nutt's avatar
Gregory Nutt committed
        From Lazlo
      - Common serial driver: In case a thread is doing a blocking operation
        (e.g. read()) on a serial device, while it is being terminated by
        pthread_cancel(), then uart_close() gets called, but the semaphore
        is still blocked. This means that once the serial device is opened
        next time, data will arrive on the serial port (and driver
        interrupts handled as normal), but the received characters never
        arrive in the reader thread.  The problem was fixed by re-
        initializing the semaphores on the last uart_close() on the device.
        From Harald Welte
      - Pipes: Fixes some issues found by the PX4 team using Coverity.  From
        Pavel Krienko
      - CDC/ACM driver: Fixes some issues found by the PX4 team using
        Coverity.  From Pavel Krienko

    * NXP LPC43xx Drivers:

      - LPC4357: Changes required to get USART 2 & 3 working on the
        lpc4357-evb.  From Toby Duckworth.

    * STMicro STM32:

      - Several fixes correcting issues with the STM32 header files from
        Jussi Kivilinna

    * STMicro STM32 Drivers:

      - Ported Tridge's STM32 I2C noise resilience logic from the PX4
        repository.
      - STM32 F2 and F4:  Set the GPIO_SPEED_50MHz on all F2 and F4 SPI pin
        configurations.  This is based on an F411 SPI1 errata but the fixed
        is generalized to all SPI and all F2 and F4.  Discovered and fixed
        by Sebastien Lorquet.
      - Fix for STM32 OTGHS device driver working in FS mode.  From Ken
        Pettit.
      - For STM32 OTG HS DEV (in FS mode): Disable ULPI clock enable in RCC
        AHB1 Register.  If Both ULPI and the FS clock enable bits are set in
        FS mode, then the ARM never awakens from WFI due to a chip issue.
        This is only an issue if you are using the internal PHY.  From Ken
        Pettit.
      - STM32 F429 LTDC: Add missing clut register definition. From Marco
        Krahl
      - STM32 serial: fix declaration and definition of up_receive() and
        up_dma_receive() to match fields in the interface definition of
        struct uart_ops_s.  From Freddie Chopin.

    * TI Tiva Drivers:

      - Fix Tiva IRQ control logic; was limited to only 64 IRQs.  That is a
        problem for higher numbered IRQs on many platforms

    * C Library/Header Files:

      - avsprintf():  Fix a bug in usage of va_list on x86.  On x86,
        va_list is a pointer to a single copy on the stack.  avsprintf()
        calls lib_vsprintf() twice and so traverses the va_list twice using
        va_start.  va_start modifies that single copy on the stack so that
        the second call to lib_vsprintf() fails.  This appears to be an
        issue with x86 only so far.
      - stdint.h:  Don't use hex values to specify minimum values of fixed
        width, signed values.  Hex values are inherently unsigned and not
        usable for this purpose in all contexts.
      - strncpy():  Would trash a lot of memory if n == 0.  From Yasuhiro
        Osaki.
      - sscanf().  Accept %X and %F as well as %x %f as a format specifiers.
        From Sébastien Lorquet

    * Applications:

      - apps/examples/romfs: fix romfs example builtin app registry issue.
        From Librae
      - apps/system/cdcacm, composite and usbmsc:  Fix some strangely placed
        conditional compilation.  Looks like an automated update went awry
      - apps/netutils/telnetd:  Add protection when CONFIG_SCHED_HAVE_PARENT
        is enabled:  Call sigaction with SA_NOCLDWAIT so that exit status is
        not retained (no zombies) and block receipt of SIGCHLD so that
        accept is not awakened by a signal.  If accept() is awakened by a
        signal, do not do anything crazy like exit.  Most from Rony Xln
      - apps/nshlib/: NSH TFTP get command:  Wrong file name used for the
        destination.  From Lazlo
Gregory Nutt's avatar
Gregory Nutt committed

NuttX-7.8
---------

The 108th release of NuttX, Version 7.8, was made on February 11, 2015,
and is available for download from the SourceForge website.  Note
that release consists of two tarballs:  nuttx-7.8.tar.gz and
apps-7.8.tar.gz.  Both may be needed (see the top-level nuttx/README.txt
file for build information).

This release is primarily a bugfix release for the NuttX-7.7 version that
was release just two weeks prior.  That release included substantial
modifications in the NuttX networking to accommodate support for IPv6.  This
release follows close behind NuttX-7.7 in order to correct some the problems
discovered in that networking code.  This release does, however, include a
small number of new features and bug fixes unrelated to NuttX networking.

Additional new features and extended functionality:

    * Core OS:

      - Tickless Mode:  added limit of maximum delay that can be request
        by the scheduler tickless logic.  This is necessary so that the
        tickless logic does not request a delay beyond the capability of the
        underlying hardware.  From Macs Neklyudov.

    * Common Drivers:

      - VFS Unlink: Add an unlink method to both the character and block
        driver interface.  This is important because if the driver inode is
        unlinked and there are no open references to the driver, then the
        driver resources will be stranded.  On the unlink call, the driver
        has the opportunity (1) check if there an any open references, and
        if not, (2) free the driver resources.
      - Pipes and FIFOs:  Implement the unlink method.  If the pipe/FIFO is
        unlinked, it will marked the pipe/FIFO as unlinked.  If/when all
        open references to the driver are closed, all of the driver
        resources will be freed.
      - Added an option to use the syslog'ing device as the system console.
        This option enables a low-level, write-only console device at
        /dev/console (similar to the low-level UART console device).  From
        Pierre-noel Bouteville.

    * File Systems/Block Drivers/MTD:

      - RAM/ROM disk:  Add logic to dispose of the driver and RAM buffer
        when the RAM disk has been unlinked and all open references to the
        RAM disk have been closed.  Add new parameters to romdisk() to
        specify what should be done with the RAM/ROM buffer in this case --
        Should it be freed or not?  Changed all calls to ramdisk() to use
        these new parameters.

    * Networking:

      - Add support for local, Unix domain sockets.  Support included for
        both SOCK_STREAM and SOCK_DGRAM style local socket.
      - UDP enhancement:  Add UDP read-ahead support.  In addition to
        eliminating the main reason for lost UDP packets, then change
        enables support for for poll/select on UDP sockets and also non-
        blocking UDP sockets.  From Macs Neklyudov.
      - SLIP interface improvements.  From Macs Neklyudov.
      - IPv6 Neighbor Solicitation: Added logic to support verification
        that we have the IPv6 address in the Neighbor Table before sending
        any packets.  If not, then the Neighbor Solicitation message is
        sent.  This feature is important because otherwise the first packet
        sent to a remote peer will fail (it would have been replaced with a
        Neighbor Solicitation).
      - IPv6 Autonomous Auto-Configuration:  Added support for sending
        ICMPv6 Router Solicitation and receiving Router advertisement.  The
        local IPv6 address, mask, and router address are then auto-configured
        from the response..
      - IPv6 Router Support:  Add logic to behave like a router (if so
        configured) only in the sense that NuttX will send the router
        advertisement message in response to any received router solicitation
        messages.  Thus, one NuttX node in a network can configure the IPv6
        addresses of all other nodes in the network.
      - Optional IPv6 address filtering added to all Ethernet drivers for
Gregory Nutt's avatar
Gregory Nutt committed
        the all-routers multicast address.
Gregory Nutt's avatar
Gregory Nutt committed

    * Atmel AVR:

      - Added architecture support for the Atmel AVR ATMega1284P MCU.  From
        Jedi Tek'Unum.

    * Atmel AVR Boards:

      - Added support for the LowPowerLab MoteinoMEGA that is based on the
        Atmel AVR ATMega1284P MCU.  From Jedi Tek'Unum.

    * Atmel SAMA4:

      - Add support for Tickless mode of operation for the SAM4CM platform.
        From Macs Neklyudov.

    * Atmel SAMA4 Drivers:

      - Ethernet: The SAM4E Ethernet driver can now be configuration to
        perform all network processing on the work queue.  This greatly
        reduces the amount of interrupt level processing to service Ethernet
        packets.
      - SAM4E Ethernet: Add support multicast address matching and IPv6.

    * Atmel SAMA4 Boards:

      - SAM4E-EK: The nsh configuration now configures the Ethernet driver
        for execution on the work thread.

    * Atmel SAMA5D Drivers:

      - SAMA5D4 Ethernet: The SAMA5D4 Ethernet driver can now be configuration
        to  perform all network processing on the work queue.  This greatly
        reduces the amount of interrupt level processing to service Ethernet
        packets.
      - SAMA5D3 and SAMA5D4 Ethernet: Add support multicast address matching
        and IPv6.

    * Atmel SAMA5D Boards:

      - SAMA5D4-EK;  Added a configuration to testing IPv6.
      - SAMA5D4-EK:  Converted the nsh and ipv6 configurations to configure
        the Ethernet driver to use the work queue (vs. interrupt level
        processing).

    * Freescale KL:

      - Add architectural support for the K26Z128VLH4 chip.  From Derek B. Noonburg.

    * Freescale KL Boards:

      - Add board support for the Freedom KL26Z board.  From Derek B. Noonburg.

    * NXP LPC17xx Drivers:

      - Ethernet: Add support multicast address matching and IPv6.

    * SiLabs EFM32:

      - Add configurable option to unconditionally enable LE clocking. Even
        you don't use core clock LE as source for LFA or LFB, to read are
        write any register not clocked by HFPERCLK or HFCORECLK,  HFCORECLKLE
        should be enabled.  From Pierre-noel Bouteville.

    * SiLabs EFM32 Drivers:

      - EFM32 RTC:  RTC driver using BURTC. From Pierre-Noel Bouteville.

    * STMicro STM32 Drivers:

      - AES: Add driver for STM32L162XX AES peripheral.  From Juha Niskanen.
      - Ethernet: The STM32 Ethernet driver can now be configuration to
        perform all network processing on the work queue.  This greatly
        reduces the amount of interrupt level processing to service Ethernet
        packets.
      - Ethernet: Add support multicast address matching and IPv6.

    * STMicro STM32 Boards:

      - Added an IPv6 configuration for the STM32F4-Discovery board (with the
        STM32-DISCO_BB base board).
      - Converted all STM32F4-Discovery configurations (with base board) to
        configure the Ethernet driver to use the work queue (vs. interrupt
        level processing).

    * TI Tiva Drivers:

      - Added support for TM4C123G timers.  From Calvin Maguranis.
      - Added a Tiva ADC driver.  From Calvin Maguranis.

    * TI Tiva Boards:

      - Added TM4C123G timers on the TM4C123G Launchpad.  From Calvin Maguranis.
      - Added Tiva ADC support to the TM4C123G-Launchpad.  From Calvin Maguranis.

    * C Library/Header Files:

      - Math Library: Added support for inverse hyperbolic functions,
        isfinite(), error functions, nan(), copysign(), and trunc()
        functions.  From Brennan Ashton.

    * Applications:

      - apps/examples/ustream:  Add a simple test of Unix domain stream
        sockets.
      - apps/examples/udgram:  Add a simple test of Unix domain datagram
        sockets.
      - apps/netutils/netlib:  Add utilities to convert to/from prefix
        lengths from/to 128-bit network masks.
      - apps/nshlib: Modify the NSH IPv6 ifconfig command to show the more
        standard post-pended prefix value, rather than the full 128-bit
        netmask.

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:
      http://www.nuttx.org/doku.php?id=wiki:nxinternal:memconfigs#the_roadmap_toward_processes

    * XMega:  There are some fragments in place for an XMega port.  That
      port has not really started, however.

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:

      - Work Queues:  Fix a backward calculation when determining the time
        to the next interesting event. .  From Liio Chen via the PX4
        repository.
      - clock_systimespec():  Fixes for compilation errors in certain
        configurations.  From Macs Neklyudov.

    * Graphics

      - Fixed a problem with one of the font files.  From Pierre-noel Bouteville.

    * Networking:

      - IOB Deadlock: There were issues with the TCP write-ahead buffering
        if CONFIG_NET_NOINTS was enabled:  There is a possibility of
        deadlocks in certain timing conditions:  The network should never
        wait for TCP read-ahead buffering space to be available.  It should
        drop the packets immediately if no buffering is available. This was
        fixed by duplicating most of the IOB interfaces:  The versions that
        waited are still present (like iob_alloc()), but now there are non-
        waiting versions of the same interfaces (like iob_tryalloc()).  The
        TCP read-ahead logic now uses only these non-waiting interfaces.
      - TCP Deadlock: Fix another deadlock when CONFIG_NET_NOINTS is enabled.
        tcp_write_buffer_alloc() calls sem_wait() with network locked.  That
        worked if CONFIG_NET_NOINTS was not defined because interrupts are
        automatically restored when the wait happens.  But with
        CONFIG_NET_NOINTS=y, the wait blocks with the network locked -- bad
        style and also can lead to a deadlock condition.
      - ARP response waiting: Fixes another CONFIG_NET_NOINTS issue.  When
        called sem_timedwait() with the network locked, the network stays
        locked while we wait which is not what we want (without CONFIG_NET_NOINTS,
        interrupts are re-enabled while we wait and all is well).
      - TCP accept():  Fix a major TCP bug introduced with the NuttX-7.7
        IPv6 changes:   Some connection logic was reordered; setting the
        socket as 'connected' got moved to BEFORE the point where the check
        was made if the socket was already connected.  The resulting behavior
        was odd:  Telnet would connect, but then when you exit and reconnect,
        it would fail to connect.  But then if try again, it would connect
        okay. So the symptom was connect-fail-connect-fail-...
      - Lots of build problems introduced into multiple NIC support with the
        IPv6 changes of NuttX-7.7.   Many places where conditional logic based
        on CONFIG_NETDEV_MULTINIC is  confused with CONFIG_NET_MULTILINK.
        Lots of code changed with IPv6 that was never compiled with MULTINIC
        enabled.

    * Common Drivers:

      - Pipes and FIFOs: Fix a race condition between FIFO buffer operations
        and the opening and closing of FIFOs which necessary when the FIFOs
        are used to support Unix domain, datagram sockets.  The default
        policy is the deallocate FIFO buffering when the last client closes
        the pipe.  When when used for datagram communications, packets left
        in the FIFO will be lost. Some like UDP read-ahead is needed:  The
        buffered data in the FIFO needs to be retained until the reader gets
        a chance to re-open the FIFO.  Added an ioctl (PIPEIOC_POLICY) to
        control the buffer policy.  Default (0) is the legacy behavior; Unix
        domain datagram logic sets the alternative policy so that the packet
        data persists after the FIFO is closed.
      - RAMTRON:  Table of parts is not terminated properly if
        CONFIG_RAMTRON_FRAM_NON_JEDEC is not defined.  Noted by David
        Sidrane.

Gregory Nutt's avatar
Gregory Nutt committed
    * All Architectures:
Gregory Nutt's avatar
Gregory Nutt committed

      - Removed all occurrences of up_maskack_irq() that disables interrupts
        with up_ack_irq() that only acknowledges the interrupts.  This is only
        used in interrupt decoding logic.  Also remove the logic that
        unconditionally re-enables interrupts with the interrupt exits.  This
        interferes with the drivers ability to control the interrupt state.
        This is a necessary, sweeping, global change and unfortunately
        impossible to test.

    * ARM

      - ARMv7-A and ARMv7-M memcpy(): Optimized ARM assembly language
        memcpy's were not returning a value in R0 they are required to do.
        From David Sidrane.
      - ARMv7-A interrupt handler should not automatically re-enable interrupts
        on interrupt return.  That interferes with the driver's ability to
        manage interrupts.  Analogous change made to all other architectures
        as well (ARM7, ARM9, HC, SH, x86, z16, z80, etc,.  See above.).

    * STMicro STM32:

      - GPIO Interrupts: Disabling any of EXTI 5-9 interrupts was disabling
        interrupts for all EXTI 5-9. Same issue with EXTI 10-15.  From Jussi
        Kivilinna.

    * STMicro STM32 Drivers:

      - RTCC:  Fix for recent changes that caused compilation failrues with
        STM32L15XX configurations.  From Jussi Kivilinna.
      - SPI: The source clock for SPI 4,5, and 6 should be PCLK2, not PCLK1
        (for F411, F427, and F429).  Per David Sidrane.

    * C Library/Header Files:

Gregory Nutt's avatar
Gregory Nutt committed
      - execl():   Fix bad logic in counting the number of arguments.
Gregory Nutt's avatar
Gregory Nutt committed
        execl() parameter passing could never have worked.  Noted by
        Pierre-noel Bouteville.

    * Applications:

      - Fix for building with parallel make. Build-server sometimes failed
        'make -j24' with errors in the builtin line or or sometimes silently
        succeeds but generated builds that contain a random subset of
        configured NuttX applications. There are two root causes for this:
        (1) Recipes for building builtin_list.h and builtin_proto.h are
        not linearizable, and (2) Nothing ensures that 'make context' is run
        first for apps/builtin.  This change address both issues. From Juha
        Niskanen.
Gregory Nutt's avatar
Gregory Nutt committed

NuttX-7.9
---------

The 109th release of NuttX, Version 7.9, was made on April 14, 2015,
and is available for download from the SourceForge website.  Note
that release consists of two tarballs:  nuttx-7.9.tar.gz and
apps-7.9.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:
Gregory Nutt's avatar
Gregory Nutt committed

      - Assertions: Add support for dumping board-specific information on
        assertions. From David Sidrane.
      - boardctl(): :  Add a new non-standard OS interface called boardctl().
        This is similar to a driver IOCTL call.  But this is an IOCTL call
        directly on the board logic.  This function will eventually replace
        all of the ad hoc OS interfaces that are current used to perform
        application specific initialization and application driver test
        configuration.  It essentially formalizes and institutionalizes
        these rogue interface in to at least a single crazy call.

    * Graphics:

      - Line Joins:  Line drawing graphic functions now take an argument that
        will draw a circular "cap" on the ends of lines to support cleaner
        joining of lines segments..

    * Common Drivers:

      - SPI iInterface:  Add an SPIDEV_USER so that there can be board-
        specific definitions of SPI devices.
      - I2C Interface:  Add a user provided void * argument to the I2C
        callback method for the I2C slave interface.  Suggested by Nate
        Weibley.
      - AT24 EEPROM Driver: Add support for (1) the byte-oriented read()
        method, (2) devices that have extended memory regions, and (3)
        devices that use 8-bit addressing.
      - Freescale MPL115A barometer: Add driver for the Freescale MPL115A
        barometer.  From Alan Carvalho de Assis.
      - CS2100-CP: Add a driver for the CS2100-CP Fractional-N Multipler
        chip.
      - RTC IOCTls:  Added the definitions of a driver based RTC interfaces
        and RTC upper half driver.

    * File Systems/Block Drivers/MTD:

      - umount2():  Added to support un-mount flags. umount() is now a macro
        that just calls umount2() with flags = 0.
      - File system interface: Pass the umount2() flags to every unbind()
        implementation.  That is where the decision to umount or not and how
        to umount will be made.
      - FAT unbind: Add support for umount2(target, MNT_FORCE) in the FAT
        file system.

    * Networking:

      - netdev_register(): Improve the network device registration logic.
        When multiple link types are used, modify how each interface number
        is assigned to the device name by incrementing the device number
        individually for each interface link type.  From Max Neklyudov.
      - Add TUN network device.  Used to support the Netutils PPPD
        implementation. From Max Neklyudov.

    * ARMv7-M

Gregory Nutt's avatar
Gregory Nutt committed
      - ARM Cortex-M7:  Add basic support for the Cortex-M7 architecture.
Gregory Nutt's avatar
Gregory Nutt committed
      - ARMv7 Common Lazy Exception handling. Add common support for lazy
        FPU state saving.  MCU-specific lazy FPU saving was already in place.
        This change just makes the code share-able.

    * Atmel SAMA5D3/4 Drivers:

      - SAMA5 Serial:  Backport support for flowcontrol and termios from
        SAM3/4.

    * Atmel SAMV7:

Gregory Nutt's avatar
Gregory Nutt committed
      - Atmel SAMV7:  Add architecture support for the Atmel SAMV7 family
Gregory Nutt's avatar
Gregory Nutt committed
        (Cortex-M7)

    * Atmel SAMV7 Boards:

      - Atmel SAMV71 Xplained Ultra:  Add board support for this SAMV7 board.
        This initialize release includes support for: SDRAM, TWI/I2C, SPI,
        Ethernet, HSMCI, DMA, GPIOs, UARTs, AT24 EEPROM and the maXTouch
        Xplained Pro LCD.  Drivers are available for SSC/I2C, the WM8904,
        the maXTouch trouchscreen, and USB device but have not yet been
        fully integrated in this release.

    * SiLabs EFM32 Drivers:

      - EFM32 USB Device is now functional with the efforts of From Pierre-
        noel Bouteville.
      - EFM32 I2C:  Add I2C driver.  From Pierre-noel Bouteville.

    * STMicro STM32:

      - STM32F372/F373: Adds architecture support for this STM32 parts.
        Tested on STM32F373CC.  Contributed by  Marten Svanfeldt.

    * STMicro STM32 Drivers:

      - STM32 RTCC: Break out a new internal interface, stm32_rtc_setdatetime().
        This eliminates some un-necessary time conversions.  From Freddie Chopin.
      - STM32 RTCC: Add an implementation of the RTC lower half interface
        for the STM32.
      - STM32 RTCC: Extend the RTC interface to support reading subseconds.
        From Jussi Kivilinna.
      - STM32 BBSRAM: Adds the ability to use the STM32F2 and STM32F4 Battery
        Backed SRAM in the file system. With an option to Save Panic context
        to one of the files. From David Sidrane.

    * STMicro STM32 Boards:

      - Olimexino-STM32: Board support for the Olimexino STM32 board from David
        Sidrane.
      - Viewtool-STM32F107:  Add support for an optional, add-on Freescale
        MPL115A baramoter.  From Alan Carvalho de Assis.

    * TI Tiva:

      - TM4C1294:  Add support for the TM4C1294.  Contributed by Frank Sautter.

    * TI Tiva Drivers:

      - Tiva ADC:  Updated files to allow for ADC and PWM triggering by a
        timer.  Refactoring of ADC implementation.  From Calvin Maguranis.
      - Tiva Timer: Refactoring by Calvin Maguranis

    * TI Tiva Boards:

      - TM4C123G-launchpad: Add ADC support.  From Calvin Maguranis.
      - TM4C123G-launchpad: Add board button interrupt support.  From Calvin
        Maguranis.
      - TM4C1294 Launchpad:  Add support for the TM4C1294 Launchpad.
        Contributed by Frank Sautter.

    * Microchip PIC32

      - PIC32MZ:  Add architectural support for the PIC32MZ (MIPS32 M14k).
        Includes contributions from Kristopher Tate.

    * Microchip PIC32MZ Boards

      - PIC32MZ Starter Kit: Add basic board support for the PIC32MZ.
        Includes contributions from David Sidrane.

    * C Library/Header Files:

      - gettimeofday():  This function is no longer a core OS interface.  It
        is only a wrapper around clock_settime().
Gregory Nutt's avatar
Gregory Nutt committed
      - settimeofday(): Added. gettimeofday has been deprecated in POSIX
Gregory Nutt's avatar
Gregory Nutt committed
        2008. settimeofday() was never part of POSIX, but I decided to add
        it to libc as well just for symmetry.
      - Day-of-Week: Add CONFIG_TIME_EXTENDED to support the last 3 members
        of the tm struct and support for filling them in with the day of the
        week. From David Sidrane.
      - sighold(), sigrelse(), sigignore(), sigset() and sigpause():  New
        signal handling functions.
      - sys/select.h: Extend the fd_set type definition so that it can
        handle more than 32 descriptors (if so configured).  From Max
        Neklyudov.
      - netdb.h:  Add a mostly-commented-out version of the standard netdb.h
        header file.
      - include/nuttx/board.h:  Remove common board function prototypes from
        other files and consolidate them in this new header file.

    * Applications:

      - OS test: Improved error checking for sem_timedwait() from Juha
        Niskanen.
      - OS test: Add a simple test of sigprocmask, sighold, and sigrelse.
      - PPPD test:  Add PPPD test case.  Split out from the PPPD daemon by
        Brennan Ashton.
      - Netutils: Add a PPP daemon.  From Max Neklyudov.
      - NSH:  NSH initialization now calls boardctl(BOARDIOC_INIT) instead
        of nsh_archinitialize().   Remove support for CONFIG_NSH_ARCHMAC.
        It is not used and there are better ways to do that operation.
      - NSH:  Allow NSH 'date' command with no hardware RTC.  This command
        is useful without an RTC too.  Also, this permits testing on the
        simulator which never has an RTC.
Gregory Nutt's avatar
Gregory Nutt committed
      - apps/examples/:  Several tests changed (touchscreen adc, pwm,
Gregory Nutt's avatar
Gregory Nutt committed
        graphics).  No longer call directly into the OS, but rather
        indirectly via boardctl().
      - Modbus: Includes extensions to support RTU master mode by
        Armink(383016632@qq.com): https://github.com/armink/FreeModbus_Slave-Master-RTT-STM32.
        Ported to NuttX by Darcy Gong.
      - TZ database:  All logic to build timezone database needed for
        localtime() support.  Does not do much else yet.

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:
      http://www.nuttx.org/doku.php?id=wiki:nxinternal:memconfigs#the_roadmap_toward_processes

    * XMega:  There are some fragments in place for an XMega port.  That
      port has not really started, however.

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:

      - atexit(): Fix compile failure due to reference to undefined variable
        in certain configurations.  From Juha Niskanen.
      - syscalls: Last changes to message queue prototypes did not make it
        into call gate logic.  Some additional errors had crept as well since
        the system calls are seldom used.
      - waitpid(): Do not use uninitialized boolean in waitpid().  From Juha
        Niskanen.
      - Timing functions:  Fix some nanosecond comparisons.  Comparisons should
        be greater than OR EQUAL TO 1000000000 for maximum value of nanoseconds
        in struct tm.  From Juha Niskanen.
      - Time initialization: Fix an error in time initialization when there
Gregory Nutt's avatar
Gregory Nutt committed
        is no RTC and the time is initialized from a fixed configured value.
Gregory Nutt's avatar
Gregory Nutt committed
        The call to clock_calendar2utc() was returning the time in units of
        seconds.  The initialization logic, however, was expecting to get
        time in units of days.  This problem has been there forever but
        obviously has not significant impact to behavior in systems where
        time is not visible.
      - mq_timedsend():  Should not check for valid time if there is space
        in the message queue.  Noted by Freddie Chopin.
      - select() and sem_timedwait(): Fix places where the errno value was
        being overwritten by subsequent actions so that the returned errno
        value was incorrect.  From Max Neklyudov.
      - clock_systimer64(): Fix a problem in clock_systimer64 that occurs
        when (1) the 64-bit system time is enabled, and (2) the value of
        CONFIG_USEC_PER_TICK is less than 1 milliseconds (such as when using
        the tickless mode of operation).  In that case, the conversion of
        time to 64-bit millisecond value in clock_systmer64() causes some
        bad times to be returned.  Time was converted to milliseconds, then
        to configured ticks.  Precision was lost in the millisecond
        conversion. The fix is to first convert time to a 64-bit microsecond
        value, then to the configured tick value. Noted by David Sidrane.
      - clock_systimespec():  When an RTC is used clock_systimespec() must
        subtract the basetime from the returned time.  It needs to return
        the time since power up, no the current time.  Issue noted by Max
        Neklyudov.
      - AIO: correct some backward tests in aio_read() and aio_write():
        Socket descriptors have higher numbers than file descriptors.  In
        aio_contain(),  Copy u.ptr (void *) when initializing aioc and not
        the case specific u.aioc_filep.  From Michal Ulianko.

    * File Systems/Block Drivers/MTD:

      - procfs:  Fix potential NULL pointer dereference of 'node'.  From
        Juha Niskanen.
      - FAT: fat_unbind() was accessing 'fs->fs_sem' after freeing the 'fs'
        struct. From Juha Niskanen.
      - mkfatfs:  Use DMA memory for mkfatfs when needed. This makes mkfatfs
        use fat_dma_alloc() when CONFIG_FAT_DMAMEMORY is set. This is needed
        to ensure mkfatfs operates with boards that use DMA for microSD.
        From Andrew Tridgell via the PX4/NuttX repository.
      - FAT unmount: Fix a bug in the FAT unbind() logic.  There were
        problems with the way certain internal list handling was
        implemented. The end result is that newly opened or cloned file
        structures were never being added to the list of open files.  So
        when the unmount() happens, it always looked like there were not
        open files and a crash could ensue.
      - FAT mounting:  Fix misthink when CONFIG_ENDIAN_BIG=y.  From Lwazi Dube.

    * Common Drivers:

      - CAN upper half driver: Some lines had to be reordered in the can_open
        function otherwise the open count will only be incremented from 0 to
        1. This caused problems when trying to open the can bus from two
        different tasks. SourceForge Patch #46.

    * Crypto:

      - crypto:  Fix issues when AES support was added for the STM32L1.
        From Juha Niskanen.

    * Networking:

      - Network initialization: Divide net_intiialize() into net_setup() and
        net_initialize() to solve a chicken-and-egg problem.  net_setup()
        must be called before up_initialize() is called so that networking
        data structures are ready to register new network devices.
        net_initialize() now does only timer related operations and is
        called AFTER up_initialize() where the timers are configured.
        Problem noted by Max Neklyudov.
      - netdev_unregister():  Fix a list handling error.  From Max Neklyudov.
      - Socket dup: Do not call sockfd_socket() twice.  From Juha Niskanen.

    * Common Drivers:

      - max11802 touchscreen:  Fix possible unmatched IRQ restore (not
        normally a problem, but could happen in certain configurations).
        Noted by Juha Niskanen.
      - MMCSD SPI Multi-block transfers: ACMD23 must be preceded with CMD55
        command as any other ACMD commands. Also, after the block reading
        wait loop must be inserted before writing the next block of data to
        the sd card.  From Dmitry Nikolaev via Jussi Kivilinna.
      - MMCSD SDIO:  Fix some bad logic when file system debug is turned on:
        Arguments to syslog were missing so that garbage was being printed.
      - Common upper-half serial driver: Report correct number of bytes free
        in serial buffer with FIONWRITE.  From Sami Pelkonen via Jussi Kivilinna.
      - Pipes/Fifos: Fix zero-lenth writes to pipes/FIFOs. From Jussi Kivilinna.
      - USB device MSC: Add NULL pointer check.  From Juha Niskanen.
      - BCH driver: Avoid NULL pointer dereference when bch->refs  == 255.
        From Juha Niskanen.
      - Various drivers: The inode unlink method should not be support if
        operations on the root pseudo-filesystem are disabled.

    * ARMv7-M

      - ARMv7M MPU:  Bad syntax in ARMv7-M MPU logic would cause failure to
        write the correct value to the MPU_RASR register. From Juha Niskanen.

    * Atmel SAM3/4 Drivers:

      - SAM3/4 Serial TERMIOS:  A side-effect of changing serial settings
        via TERMIOS (such as tcsetattr) is that serial interrupts were being
        left disabled.  This is not a problem if the serial configuration is
        changed when there are no open references to the serial device.  In
        that case, serial interrupts are disabled and will not be enabled
        enabled until the serial device is first opened.  But it is fatal if
        the serial device is already opened and if there is a task waiting
        to receive data.  In that case, the side-effect of disabling
        interrupts is fatal:  That task is then left hanging with interrupts
        disabled.
      - SAM3/4 Serial: The IMR register is read-only.  This means that
        sam_restoreints() did not actually re-enable UART interrupts
        (Fortunately, that function was not being used up to this point).
      - SAMA5 HSMCI:  Fix a bug in SAMA5 HSMCI.  The bitfield mask and shift
        values were reversed resulting in a trashed value for the number of
        blocks in the BLOCKR register.  This was sufficient to prevent DMA
        writes from working.

    * Atmel SAMA5 Drivers:

      - SAMA5 Timer/Counter: Fix typos in timer/counter header file.  From
        Bob Doiron.

    * STMicro STM32 Drivers:

      - STM32 PWR and RTC: Changes to support fully write protecting the
        backup domain. N.B. stm32_pwr_enablebkp did not account for the delay
        from enable to the domain being writable. The KISS solution is a
        up_udelay. A more complex solution would be a negated write test
        with restore.  From David Sidrane.
      - STM32 SPI:  Add missing SPI callback functions to the STM32 SPI
        driver.  From Freddie Chopin.
      - STM32 I2C: Add missing NULL check.  From Juha Niskanen.
      - STM32 USB device: Fix stale initialization invalidating later NULL
        check.  From Juha Niskanen.
      - STM32 UART: Fix RX DMA setup for UART5.  From  Jussi Kivilinna.
      - STM32 UART: Make input hardware flow-control work with RX DMA.  From
        Jussi Kivilinna.
      - STM32 RTC and clock control:  The STM32F4Discovery board doesn't
        come with a Low speed external oscillator so the default LSE source
        for the RTC doesn't work. In stm32_rtcc.c the up_rtcinitialize()
        logic doesn't work with the LSI. The check on RTC_MAGIC on the BK0R
        register lead to rtc_setup() call that rightfully enables the LSI
        clock; but the next times, when the rtc is already setup, the
        rtc_resume() call does NOT start the LSI clock! The right place to
        put LSE/LSI initialisation is inside stm32_stdclockconfig() in
        stm32fxxxxx_rcc.c.  Doing this I checked the possible uses of the
        LSI and the LSE sources: the LSI can be used for RTC and/or the
        IWDG, while the LSE only for the RTC (and to output the MCO1 pin).
        This change is not verifed for any other platforms.  From Leo
        Aloe3132

    * Tiva Drivers:

      - Tiva GPIO driver needed small fixes in the configuration routines and
        discovered false-positive bugs in interrupt testing: interrupts are
        now verified to actually be working reliably. From Calvin Maguranis .

    * MIPS32:

      - mips32/Toolchain.mk: Current Pinguino toolchain uses the prefix p32-
        instead of mips-.

    * C Library/Header Files:

      - sigaddset() and sigdelset(): Need to set errno if a bad signal
        number is received.
      - sfrtime():  Missing implementation of %C in sfrtime() C (was being
        treated as %y).  From Freddie Chopin.
      - pthread.h: Fix PTHREAD_COND_INITIALIZER.
      - ungetc.c: Fix NULL pointer dereference in ungetc() if 'stream' was
        NULL, 'stream->fs_oflags' was evaluated.  From Juha Niskanen.
      - Fixes to asinh(), atanh(), and sinh():  The 'basic' expansions all
        exhibited bad cancellation errors near zero (<= 1E-10). This can be
        easily seen e.g. with x = 1E-30, the results are all zero though they
        should be extremely close to x. The cutoff values (1E-5, 1E-9) are
        chosen so that the next term in the Taylor series is negligible (for
        double). Functions could maybe be optimized to use only first term (x)
        and a smaller cutoff, just bigger than where the cancellation occurs
      - localtime(): Inconsistent configuration name: CONFIG_LIBC_TZDIR vs
        CONFIG_LIBC_TZ_TZDIR.  Former wins.

    * Applications:

      - Modbus:  Fix some compile problems when TCP is enabled.

NuttX-7.10
----------

The 110th release of NuttX, Version 7.10, was made on June 9, 2015,
and is available for download from the SourceForge website.  Note
that release consists of two tarballs:  nuttx-7.10.tar.gz and
apps-7.10.tar.gz.  Both may be needed (see the top-level nuttx/README.txt
file for build information).

Additional new features and extended functionality:

    * Binary Loader:

      - ARMv-7M, binfmt/, STM32: Add support uClibc++ exceptions.  This
        involved additional handling for relative relation types, additional
        support for unwinding, as well as additional changes.  The
        culmination of a big effort from Leo Aloe3132.

    * Graphics/Graphic Drivers:

      - RA8875 LCD driver contributed by Marten Svanfeldt.

    * File Systems/Block Drivers/MTD:

      - Union File System: Add support for a union file system that can be
        used to overlay and merge the content of two mounted file systems.

    * USB Host:

      - USB Hub Support: Bring in USB hub-related files from
        https://github.com/kaushalparikh/nuttx.  This is the work of Kaushal
        Parikh.  This is quite a bit more hub logic was needed in before the
        USB hub support was fully functional.  This involved changing many
        USB host controller driver interfaces and modifications to many
        drivers.
      - USB host CDC/ACM class driver:  Added initial implementation of a
        host-side CDC/ACM driver.  Initial version was a great learning
        experience, but probably should be partially redesigned (as
        discussed in the top-level TODO file).
      - IPv6 Routing: Complete implementation of the IPv6 routing logic.
        From Max Neklyudov.

    * Networking:

      - Local Sockets: Add poll support for Unix stream sockets.  From Jussi
        Kivilinna.
      - net/: ARP, ICMP, ICMPv6, PKT, TCP, and UDP now all receive event
        notifications from both network device packet processing, but now
        also from Device-specific events such as when the network goes down.
        The device notification callback structure is now supports dual
        linkages so that the client can receive notifications from both
        source; The device structure now includes a list of clients that
        want to receive device related notifications.  This prevents network
        actions from hanging when the device goes down and will be an
        essential part of future support for removable network devices.
        Some of the core logic was contributed by Max Neklyudov.
      - TUN: Misc. improvements to the TUN driver, mostly related to poll().
        Also several bugfixes. From Max Neklyudov.

    * Simulation Platform:

      - Simulator: Add logic to test localtime and TZ database.  See
        apps/system/README.txt for info.
      - Simulation:  Add a configuration for testing the Union File System.

    * Calypso:

      - Calypso Compal-E86: Updates for execution out of FLASH on the C139
        phone.  From Craig Comstock.

    * Atmel SAMD/L:

      - SAML21 Support: And chip definitions, configuration framework,
        memory map and pin configuration files for SAML21 support.

    * Atmel SAMD/L Boards:

      - SAML21-Xplained:  Add a board support for the SAML21 Xplained Pro.
        This is based on the similar SAMD20 Xplained Pro board.

    * Freescale/NXP KL:
  
      - KL25Z64: Added support for the KL25Z64.  The KL25Z64 is a lower
        memory variant of the KL25Z128 and is used on the Teensy LC.  From
        Michael as SourceForge patch 50.

    * Freescale/NXP KL Boards:
  
      - Teensy-LC: Add board support for the Teensy LC board.  Support is
        based off the Freedom KL25Z board.  LED, PWM, and UART0 have been
        tested. The SPI pins are mapped correctly but have not yet been
        tested.  From Michael Hope as SourceForge patch 51.

    * NXP LPC111x:
    
      - LPC111x:  Support for the LPC11xx family (the LPC1115 MCU in
        particular).  Contributed by Alan Carvalho de Assis.

    * NXP LPC111x Boards:
    
      - LPCXpresso LPC1115:  Support for the LPCXpression LPC1115
        board.  Contributed by Alan Carvalho de Assis.

    * NXP LPC17xx Drivers:

      - LPC17xx Ethernet: Add support for the Micrel KSZ8041 PHY to the
        LPC17xx Ethernet driver.

    * NXP LPC17xx Boards:

      - Lincoln60:  Add a network enabled configuration for the Lincoln60
        board.

    * Atmel SAM3/4 Drivers:

      - SAM4CM:  Add support for optical mode for the SAM4CM UART1.  From
        Max Neklyudov.

    * Freescale (NXP) Kinetis:

      - Kinetis K20: Basic support for the Kinetis K20 architecture.  Taken
        from PX4.  This is the work of Jakob Odersky.

    * Atmel SAMV7 Boards:

      - SAMV71-Xplained w/maXTouch Xplained Pro:  A TWIHS fix was the last
        barrier to getting the touchscreen working in the maXTouch Xplained
        Pro LCD.  Added the NxWM integrated graphics demonstration
        configuration.

    * STMicro STM32:

      - STM32: Added support for STM32F302K8 and STM32F302K6.  From Ben Dyer
        via PX4/David Sidrane.
      - STM32F205RG: Add basic support for the STM32F205RG.  From SourceForge
        Ticket 40 (anonymous, 2015-05-31).
      - STM32 F3:  Add DBGMCU register definitions for the F3 family.  From
        Greg Meiste.

    * STMicro STM32 Drivers:

      - STM32 LCDC: Defined a second interface for the dma2d controller.
        LTDC only controls the display visibility but the DMA2D controller
        changes the content of the frame buffer (buffer of the layer). From
        Marco Krahl.
      - STM32 PVD: Added support for STM32's Programmable Voltage Detector
        (PVD) feature. By Dmitry Nikolaev, submitted by Juha Niskanen.

    * STMicro STM32 Boards:

      - STM32F429i-Disco: Add support for the new DMA2D features to the LTDC
        configuration.  From Marco Krahl.

    * TI Tiva Boards:

      - TM4C1294 Launchpad:  Added TM4C1294NCPDT EN0_LED2 (10/100-Base-Tx);
        removed all booster pack pin definitions. From Frank Sautter.

    * C Library/Header Files:

      - libc:  Add an option to disable support for long long formats in
        lib_vsprintf().  On very tiny platforms, this reduces the footprint
        by omitting large libgcc.a libraries to perform the 64-bit
        arithmetic operations. From Alan Carvalho de Assis.

    * Applications: apps/system:

      - apps/system/zoneinfo:  Add logic to build a ROMFS file system
        containing the timezone data.

    * Applications: apps/nshlib:

      - Add poll support for Unix stream sockets.  From Jussi Kivilinna.
      - Enhancements to NSH ifconfig for case of multi-link operation, TUN
        device and local connections.  From Max Neklyudov.