NuttX-7.23 Release Notes

The 123rd release of NuttX, Version 7.23, was made on December 4, 2017, and is available for download from the website. Note that release consists of two tarballs: nuttx-7.23.tar.gz and apps-7.23.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:

  - sem_open() should return SEM_FAILED on any failures.  This is change
    in the POSIX specification since the original sem_open() was written
    so many years ago.
  - exec():  The non-standard interface exec() is now enshrined as a
    official NuttX API.  I really dislike doing this but I think that
    this is probably the only want to load programs in the protected
    mode.  It is currently used by some example code under apps/ that
    generate their own symbol tables for linking.  Other file execution
    APIs relay on a symbol table provided by the OS.  In the protected
    mode, the OS cannot provide any meaning symbol table for execution
    of code in the user-space blob so that is they exec() is really
    needed in that build case.  And, finally, the interface is
    completely useless and will not be supported in the KERNEL build
    mode where the contrary is true:  An application process cannot
    provide any meaning symbolic information for use in linking a
    different process.
  - OS Internal Functions:  Rename many OS internal functions so it is
    clear that they are not part of the application interface.  All
    internal functions with the sem_* prefix became nxsem_*, sig* become
    nxsig_*, mq_* become nxmq_*, etc.
  - Cancellation Points:  Add new cancellation point interface,
  - Signals:  Add logic to wake up a thread that is waiting on a signal
    if it is canceled.
  - sigtimedwait():  Add logic to suppress the wait if there is a
    pending cancellation.
  - clock_nanosleep():  Implement clock_nanosleep().  nanosleep() is now
    reduced to a libc wrapper around clock_nanosleep().
  - task_delete():  Do not permit user applications to delete kernel
  - kthread_create():  Rename kernel_thread() to kthread_create() for
    better naming consistency with task_create() and kthread_delete().
  - boardctl():  Remove the BOARDIOC_GRAPHICS_SETUP command.
  - TCB:  Move POSIX thread specific data from pthread TCB to common TCB
    structure.  This change allows using pthread_getspecific and
    pthread_setspecific from main thread. Patch also enables using
    pthread data with config option CONFIG_DISABLE_PTHREAD=y. From Jussi
  - mm:  Remove the CONFIG_GRAN_SINGLE configuration option.  It adds no
    technical benefit (other than some minor reduction in the number of
    interface arguments) but adds a lot of code complexity.  Better
    without it.
  - mm:  Add a function to get information about the state of the
    granule allocator.  This is the moral equivalent of mallinfo().

* File Systems/Block and MTD Drivers

  - MT25Q Serial FLASH:  Add support for Micron MT25Q series MT25Q128.
    From Sebastien Lorquet.
  - MX35LFxGE4AB:  Add an MTD driver for Macronix MX35LFxGE4AB serial
    NAND flash.  From Ekaterina Kovylova.
  - FileMTD:  Add block device MTD interface.  Block MTD interface
    allows using block device directly as MTD instead of having to use
    file-system in between.  NOTE that this provides the opposite
    capability of FTL which will let you use an MTD interface directly
    as a block device.  From Jussi Kivilinna.
  - BCH:  The character driver to block device access now supports an
    IOCTL to get the geomtry of the underlying block device.
  - mkfatfs:  Remove mkfatfs from the OS.  This is a user-space
    application and belongs in apps, not in the OS.
  - procfs:  Implements procfs /proc/fs/blocks and /proc/fs/usage files,
    replacing the NSH df command.  Also implements procfs /proc/fs/mount
    file, replacing the NSH mount command when there are no arguments.
  - procfs:  Add /proc/meminfo.  This is an alternative way to get the
    information that was previoulsy available in apps/system/free.
    apps/system/free was removed beause it made illegal calls into the
    OS violating the portable interface.  This new procfs entry provides
    the same information with no such violation.  it also provides
    information about the kernel heap (formerly /proc/kmm), about the
    use of program memory(formerly /proc/progmem).  And also information
    for the page table usage in the KERNEL build.
  - UserFS:  Adds the UserFS client and of the UserFS feature in
    general.  Initially used Unix domain local sockets instead of
    message queues.  Easier to transfer big data in local sockets than
    message queues.  However, that lead to certain inescapable deadlock
    conditions So the IPC was converted to UDP LocalHost loopback
    sockets.  The problem with the local sockets is that they do require
    operations on the top level psuedo-file system inode tree.  That
    tree must be locked during certain traversals such as enumerate
    mountpoints or enumerating directory entries.  This conversion is
    unfortunate in the sense that Unix local domain sockets are
    relatively lightweight.  LocalHost UDP sockets are much heavier
    weight since they rely on the full UDP stack.

* Graphics/Display Drivers:

  - Framebufer character driver:  Add framebuffer character device driver.
  - LCD Framebuffer:  Add support for a generic front-end that will
    convert any LCD driver into a framebuffer driver.
  - Framebufer character driver:  Include support for LCD drivers that
    use a simulated framebuffer and must receive explicit notification
    when there is an update to a region in the framebuffer.
  - LCD:  Make LCD driver configuration indepently selected from NX
    graphics configuration.  This makes things awkward and loses some
    error checking but is a necessary step in order to make LCD drivers
    usable when the NX graphics system is disabled.

* Networking/Network Drivers:

  - Networking:   Add implementation of logic for SIOCGIFCONF and
  - Network IOCTLs:  Add support for the SIOCGIFBRDADDR ioctl() command.
  - Routing Tables:  Permit IPv4 and IPv6 routing tables to be of
    different sizes.
  - Routing Tables:  Adds support for read-only routing tables.  Prior
    to this change, routing tables were only support in RAM and had to
    be initialized with explicit logic to add the necessary routes to
    the routing table.  With this change, routes may be defined in the
    pre-initialized, read-only routing table provided by the
    board-specific logic.
    This would be particularly useful, for example, in the case where
    there is only a single network adaptor and you want all output
    packets to go to the single adaptor in all cases.  So for that
    behavior you could add a read-only routing table to the
    board-specific long that contains a single entry, the default route:
  - Routing Tables.  Added support for routing tables in files in a file
    system.  This might be useful for customized, per-unit routing
    tables. There are two issues with it however:
     1. Reading from file system on a per packet basis could be slow.  I
        think it probably should have a small, in-memory cache of most
        frequently used routes for good problem.
     2. Currently the delroute logic is disabled due to a problem with
        the design.  NuttX does not currently support truncate().
        Therefore, it is not possible to delete entries from the routing
        table file. In this current implementation, that leaves the last
        entry intact at the end of the file.  An alternative design
        might include a tag on each record to indicate if the record is
        valid or not.  That would work but would add complexity to the
        other routing table functions.
  - Routing Tables:  Add support for an in-memory routing table cache in
    order to improve performance when the routing table is retained in a
    file. The cache holds the most recently used routing table entries
    and so can eliminate some file access.  Flush the in-memory cache
    when any entry is deleted from the routing table.  When a router
    matching an IP address is found, add the routing table entry to the
  - Routing Tables:  Add logic to mark a route as most-recently-used in
    the route cache.
  - ICMP:  This change adds support for semi-standard IPPROTO_ICMP
    AF_INET datagram sockets.  This replaces the old ad hoc, nonstandard
    way of implementing ping with a more standard, socket interface.
  - ICMPV6: This commit adds support for semi-standard IPPROTO_ICMP6
    sockets.  This is a replacement for the non-standard ICMPv6 ping
    support that violated the portable POSIX OS interface.
  - ICMPv6:  Add option to manually specify router prefix in router
    advertisement message.  From Sakari Kapanen.
  - Local Sockets:  This commit modifies the Unix domain local socket
    design. Local sockets are built on top of pipes.  The Local socket
    implementation maintained file descriptors to interrupt with the
    pipes. File descriptors have the bad property that they are valid
    only while running on the thread within the task that created the
    local socket.
    As a policy, all internal OS implementations must use "detached"
    files which are valid in any context and do not depend on the
    validity of a file descriptor at any point in time.  This commit
    converts the usage of file descriptors to detached files throughout
    the local socket implementation.

* Wireless Networking/Wireless Drivers:

  - IEEE-802154:  Adds support for receiving MAC events via IOCTL through
    socket interface.  From Anthony Merlino.
  - IEEE-802154:  Simplifies notify() and rxframe() calls to a single
    notify() call. dataind's and all other "notifs" are now "primitives"
    which aligns with standard terminology  From Anthony Merlino.
  - MAC802154:  Add support for getting promiscuous mode state From
    Anthony Merlino.
  - MAC802154 Character Driver: When in promiscuous mode, the char
    driver sends the entire frame, including the MAC header.  This
    change adds an offset field indicating the header-payload boundary.
    It is set to 0 when not in promiscuous mode as the header is not
    passed to the application
  - 6LoWPAN: Remove CONFIG_NET_6LOWPAN_FRAMELEN.  In this case where
    multiple radios are supported, this may not be a constant.  6LoWPAN
    now always queries the driver to get the maximum frame length.
  - 6LoWPAN:  Support sending to a router that is on-link and may be
    able to forward the packet for us if the destination is not
    reachable directly.  From Anthony Merlino.
  - XBee:  Adds XBee S2C (802.15.4 firmware) support. XBee driver
    emulates mac802154 interface.  From Anthony Merlino.

* Other Common Device Drivers:

  - PowerLED:  Add upper-half driver for high power LED driver (powerled)
    From Mateusz Szafoni.
  - RTC Driver:  Add periodic alarms to upper and lower halves.  From
    Juha Niskanen.
  - Pipes:  Fix writing large buffers not triggering POLLIN for reader
    poll.  From Jussi Kivilinna.
  - USB CDC/ACM Device:  Add support for RX flow control to the CDC/ACM
  - USB CDC/ACM Device:  Add support for flow control TERMIOs in CDC/ACM
  - USB RNDIS Device:  Add RNDIS-over-USB driver.  From Sakari Kapanen
    with added Hi-Speed support from Masayuki Ishikawa.
  - Loop Driver:  Don't use file descriptors... Use the internal file
    system interfaces so that the loop device can be shared across
  - APA102 LED controller:  Add driver for APA102 LED controller.  These
    LEDs are used on LED Strips and are controlled over SPI.
  - INA219.  Add INA219 Driver.  The INA219 is a combined voltage and
    current sensor that can measure up to 26 volts and a current that
    depends on an external shunt resistor.  Connection happens via
    i2c/smbus and the chip features a power supply rail that is
    independent from the measured voltage, so it can measure low
    voltages.  Right now it measures bus voltage and current, and does
    not use the internal calibrated current reading, nor the available
    power measurement.  From Sebastien Lorquet.
  - PCA9555:  The IRQ subsystem now supports passing a void * parameter
    to IRQ handlers.  Use that method to support multiple PCA9555
    devices, by passing a pointer to the device to the board defined irq
    handler.  Now the CONFIG_ for multiple PCA devices just allocates
    device structures dynamically instead of statically when not enabled.
    The same interrupt handler is entered with the device structure
    parameter in all situations, multiple or single PCA. One should
    still be careful if multiple PCA devices share the same IRQ.  From
    Sebastien Lorquet.
  - APDS-9960:  Add driver for the APDS-9960 gesture sensor.  From Alan
    Carvalho de Assis.
  - MAX7219:  Add support to MAX7219 LED Matrix as LCD interface.  From
    Alan Carvalho de Assis.
  - WM8774:  Add WM8774 audio DAC support.  From Masayuki Ishikawa.
  - Nunchuck:  Add Nintendo Wii Nunchuck driver.  From Alan Carvalho de

* Simulation

  - Simulation:  Add a configuration for non-graphical testing of the
    frambuffer character driver using apps/example/fb.
  - Simulation:  Add a configuration for testing the UserFS using

* Broadcom BCM2708:

  - BCM2708:  Add enough infrastructrue (more stubs) to get a clean
    compilation of the Pi Zero configuration (with many undefined things
    at link time).   This includes several register definition header
    files (some from Alan Carvalho de Assis), basic interrupt handling
    logic, boot-up files, GPIO support, tickless timer, build and
    configuration logic

* Broadcom BCM2708 Boards:

  - Raspberry Pi Zero.  Basic board support at configs/pizero.  Untested
    in this release and still some remaining issues.

* Infineon XMC4xxx Boards:

  - XMC4500-Relax:  Add config for UART3 on RXD P0.0 and TXD P0.1 pins.
    From Alan Carvalho de Assis.

* NXP Freescale LPC17xx Boards:

  - Open1788:  Add initialization of Framebuffer driver.  Add
    configuration for testing the framebuffer driver.

* NXP Freescale LPC43xx Drivers:

  - LPC43xx:  Add LPC43xx CAN driver.  From Alexander Vasiljev.

* NXP Freescale LPC43xx Boards:

  - MCB1700:  Add support for Keil MCB1700 board.  From Alan Carvalho de
  - Open1788:  Add support for the discrete joystick driver.
  - Open1788:  Add a configuration for testing pdcurses with discrete

* On Semiconductor LC823450

  - LC823450:  Add ADC driver and watchdog drivers.  From Masayuki
  - LC823450:  Add IPL2 support.  From Masayuki Ishikawa.
  - LC823450:  Add I2S support. From Masayuki Ishikawa.
  - LC823450:  Add auto LED for CPU activity.  From Masayuki Ishikawa.

* On Semiconductor LC823450 Boards

  - LC823450-XGEVK:  Enable ADC and watchdog driver.  From Masayuki
  - LC823450-XGEVK:  Add IPL2 support.  From Masayuki Ishikawa.
  - LC823450-XGEVK:  Add WM8774 support. From Masayuki Ishikawa.
  - LC823450-XGEVK:  Add auto LED support.  From Masayuki Ishikawa.
  - LC823450-XGEVK:  Enable CONFIG_SMP for audio. From Masayuki Ishikawa.
  - LC823450-XGEVK:  Add rndis configuration.  From Masayuki Ishikawa.

* STMicro STM32:

  - ARM Kconfig:  Add support for classic ARM11 architecture selections.
  - STM32 Tickless:  Removes the restriction to 16-bit counts when a
    32-bit timer is used for tickless operation on the stm32.  As it
    was, the restriction is very limiting, especially if one wants high
    granularity and large achievable intervals and has the hardware
    (namely the 32bit timers) available.  From Rajan Gill.
  - STM32 L4 Kconfig:  Add some L486 and L496 chips.  From Juha Niskanen
  - STM32 F7:  Adds architecture support for the STM32 F72x and F73x
    families.  From Bob Feretich.
  - STM32 F7:  Allow changing voltage output scaling setting and
    prevents enabling over-drive mode for low frequencies (STM32 F74xx,
    75xx, 76xx, 77xx). From Jussi Kivilinna.  Changes replicated for
    the 72xx and 73xx families.

* STMicro STM32 Drivers:

  - STM32 ADC:  Added support for ADC's IO_ENABLE_TEMPER_VOLT_CH ioctl
    on STM32F10XX and STM32F20XX.  From Dmitriy Linikov.
  - STM32 Wakeup:  Add logic for enabling wakeup pins.  From Oleg Evseev.
  - STM32 PWR:  Adds stm32_pwr_getsbf and stm32_pwr_getwuf functions
    that return the standby flag and the wakeup flag PWR power
    control/status register.  From Oleg Evseev.
  - STM32 HRTIM:  Sdd support for capture, chopper, deadtime and dump
    registers.  From Mateusz Szafoni.
  - STM32 RTC:  Canceling an alarm marks it as inactive.  From Juha
  - STM32 Serial:  Add interface to get uart_dev_t by USART number,
    stm32_serial_get_uart().  From Juha Niskanen.
  - STM32 F33xx ADC:  Initial ADC support for the STM32F33XX.  From
    Mateusz Szafoni.
  - STM32 F33xx ADC:  Add ADC DMA support to STM32F33 configuration.  From
    Mateusz Szafoni.
  - STM32 L4 ADC:  Port analog watchdog ioctl commands from the Motorola
    MDK.  From Juha Niskanen
  - STM32 L4 ADC:  Add option for routing ADC data to DFSDM, fix DFSDM
    DMA. From Juha Niskanen
  - STM32 L4 ADC:  Add PM hooks from Motorola MDK
  - STM32 L4 FLASH:  Add function for modifying device option bytes,
    From Juha Niskanen.
  - STM32 L4 DFSDM:  Add peripheral support for digital filters for
    sigma-delta ADCs.  Initial version.  Timer trigger support is not
    completed and there is some issue with DMA.  From Juha Niskanen.
  - STM32 L4 I2C:  Port then STM32 F7 I2C driver to STM32 L4.  STM32L4 I2C
    driver is in work-in-progress state (plentiful of TODOs and
    #warnings) and lags many features found in more up-to-date STM32 I2C
    drivers.  The peripheral on STM32F7 and STM32L4 are identical except
    for L4's 'wakeup from stop mode' flag and STM32F7's I2C driver is in
    more 'ready to use' state.  The I2C clock configuration is kept the
    same as before (I2CCLK = PCLK1 80 Mhz) instead of switching to
    STM32F7 arch default that is I2CCLK=HSI. Further work would be to
    add configuration option for choosing I2C clock source instead of
    current hard-coded default.  From Jussi Kivilinna.
  - STM32 L4 RTC:  Add up_rtc_getdatetime_with_subseconds
  - STM32 L4 RTC:  Change maximum alarm time from 24h to one month.  From
    Juha Niskanen.
  - STM32 L4 RTC:  Add support for periodic interrupts with
    (experimental) CONFIG_RTC_PERIODIC.   From Juha Niskanen.
  - STM32 L4 SDMMC:  Add support for an SDMMC driver.  From Miha Vrhovnik.
  - STM32 L4 Serial:  Suspend serial for Stop mode.  From Juha Niskanen.
  - STM32 L4 Serial/PM:  STM32L4 serial PM interface improvements:
    Check rx/tx buffers for pending data in pmprepare.  Remove adhoc PM
    interfaces and move serial suspend functionality behind CONFIG_PM.
    From Jussi Kivilinna.

* STMicro STM32 Boards:

  - STM32F103-Minimum:  Add board support for APA102 driver.  From Alan
    Carvalho de Assis.
  - STM32F103-Minimum:  Add ADC support on stm32f103-minimum board.
    From Alan Carvalho de Assis.
  - STM32F103-Minimum:  Add support for LM75 in the stm32f103-minimum
    board.  From Alan Carvalho de Assis.
  - STM32F103-Minimum:  Add an ADPS-9960 example configuration.  From
    Alan Carvalho de Assis.
  - STM32F103-Minimum:  Add board support for MAX7219 LED Matrix
    controller.  From Alan Carvalho de Assis.
  - STM32F103-Minimum:  Add USB MSC device initialzation to
    stm32f103-minimum.  From Alan Carvalho de Assis.
  - STM32F103-Minimum:  Add framebuffer driver initialization for
    stm32f103-minimum board.  From Alan Carvalho de Assis.
  - STM32F103-Minimum:  Add Nunchuck board support for
    stm32f103-minimum board.  From Alan Carvalho de Assis.
  - STM32F4 Discovery:  Add support for JLX12864G display on STM32F4
    Discovery board.  From Alan Carvalho de Assis.
  - Viewtool-STM32F107:  Add support to auto-mount the procfs file system.
  - Photon:  Support SPI1 and SPI3.  From Anthony Merlino.
  - STM32F334-DISCO:  Add lower half driver for high power LED
    (powerled).  From Mateusz Szafoni.
  - STM32F334-DISCO:  Add flash mode support for powerled driver. From
    Mateusz Szafoni.
  - STM32F334-DISCO:  Add powerled example configuration.  From Mateusz
  - STM32F334-DISCO:  Add lower-half driver for SMPS (buck-boost onboard
    converter).  From Mateusz Szafoni
  - Nucleo-F334R8:  Add logic for zero latency high priority interrupts
    example.  From Mateusz Szafoni.
  - Nucleo-F334R8:  Add highpri example configuration.  From Mateusz
  - STM32 F4 Discovery:  Added support for the LIS3DSH accelerometer on
    the STM32F4 Discovery rev. C boards.  From Florian Olbrich.
  - STM32 F4 Discovery: ROMFS for STM32F4 Discovery board.  From Tomasz
  - STM32 F4 Discovery:  Add a USB MSC configuration.  From Alan Carvalho
    de Assis.
  - STM32 F4 Discovery:  RNDIS support on STM32F4Discovery + DM-STF4BB.
    NOTE: MAC address for the host side starts 0xaa.  This assignment
    scheme should be fixed later.  From Masayuki Ishikawa.
  - STM32 F4 Discovery:  Add STM32F4 Discovery board support for
    Nunchuck joystick.  From Alan Carvalho de Assis.
  - STM3240G-EVAL:  Add a configuration for testing the Framebuffer
    character driver using the LCD framebuffer front.
  - STM3240G-EVAL:  Mount procfs if enabled.
  - STM3240G-EVAL:  Add support for pdcurses and the pdcurses demo
    programs in the 'fb' configuration.
  - Clicker2-STM32:  Adds SD card, automount, and syslog file
    support and fixes a few minor issues.  From Anthony Merlino.
  - Clicker2-STM32:  Adds support for USB RNDIS device.  From Anthony
  - Olimex STM32-H407:  Add serial support on the on-board UEXT
    connector.  Add USART6 for UEXT connector.   Add nsh_uext
    configuration and README update.  From Jan Pobříslo.
  - Nucleo-F410RB:  Add support for the nucleo-F410RB board.  From
    Gwenhael Goavec-Merou.
  - STM32F429i-DISCO:  Add framebuffer driver initialization.  Add a
    framebuffer (fb) configuration.
  - STM32F429i-DISCO:  Add logic to auto-mount procfs.  Enable procfs in
    all configurations that use NSH.
  - STM32F429i-DISCO:  Enable support for the STMPE811 touchscreen
    controller.  Enable touchscreen and also the touchscreen testa at
    apps/examples/touchscreen in the fb configuration.
  - STM32F429i-DISCO:  Convert NxWM configuration to use LTDC
    framebuffer driver instead of SPI serial.  Also reduce number of
    layers from 4 to 1 in fb configuration.  Only one layer is used.
  - STM32L476-MDK:  Add support for the on-board LEDs.
  - Nucleo-L496ZG:  Add DFSDM initialization.  From Juha Niskanen
  - Nucleo-L496ZG:  Add support for SDMMC driver.  From Miha Vrhovnik.
  - Nucleo-L496ZG:  Enable I2C4 bus with i2ctool in NSH configuration.
    From Jussi Kivilinna.
  - Nucleo-L496ZG:  Make HSE on Nucleo-L496ZG default to enable USB.
    From Miha Vrhovnik.
  - Nucleo-F746ZG:  Use the serial console over /dev/ttyACM0 by default.
    The Nucleo-F746ZG doesn't come with Arduio RS-232 shield, then it is
    better to use the serial over the /dev/ttyACM0 that is created
    automatically when the board is plugged in the computer.  From Alan
    Carvalho de Assis.
  - Nucleo-144:  Adds support for the Nucleo-144 boards with
    STM32F722ZE.  From Bob Feretich.

* ZiLOG Z80

  - z80/include: compiler.h, limits.h, types.h:  Update SDCC/z80 files
    to include support for long long, inline, __FILE__, and __func__.

* C Library/Header Files:

  - include/:  Add stdnoreturn.h.  Holds definitions for the C11
    noreturn keyword.  Applies to C too.
  - include/netinet/tcp.h:  Add trivial standard tcp.h header file.
  - libc:  Add support for readv() and writev().
  - libc:  Adds tcflow().
  - libc:  Add support for sigwait().
  - libnx:  Changes to allow the font subsystem to be built without
    enabling the entire graphics system (CONFIG_NX).  Adds
    CONFIG_NXFONTS and CONFIG_NXGLIB.  Needed to duplicate some Kconfig
    setting for NXFONTs if it can be configured and built independently
    of NX.

* Tools:

  - tools/  Add special support so that you can start with a
    windows native configuration and install on a different host (and
    vice versa).
  - tools/configure.c:  Duplicate new functionaity added to
  - tools/  This commit adds a -m option for macOS. For
    anyone not aware, Apple renamed OSX to macOS recently; thus the 'm'
    instead of 'o'. This does not change the other uses of *_OSX to
    macOS. From jeditekunum.
  - tools/configure.c:  Update functionality to match last change to

* NSH: apps/nshlib:

  - apps/nshlib:  mount command no long uses the non-standard OS
    interface foreach_mountpoint().  Now simply cats /proc/fs/mount
    when there are no arguments to the mount command.
  - apps/nshlib:  df command no long uses the non-standard OS interface
    foreach_mountpoint().  Now simply cats /proc/fs/blocks or
  - apps/nshlib:  The free commands no longer used mallinfo() to get
    the state of the use heap.  Two reasons:  That is not useful
    information in the kernel build.  And (2) there are other memory
    resources of interest in other configurations such as the Kernel
    heap in PROTECTED and KERNEL builds, and the prog mem uses when
    FLASH is used to hold modifiable data.  The free command has been
    extended to just dump the content of procfs entries and to include
    all of these other memory resources of the procfs entries are

* Examples/Tests: apps/examples:

  - apps/examples/fb:  Add a simple test for the framebuffer character
  - apps/examples/ostest: sem_open() now returns SEM_FAILED in the
    event of a failure.
  - examples/ostest:  Extend cancellation test to make sure that
    cancelable threads waiting on a message queue or on a signal can be
  - Added a simple reader example for the LIS3DSH acceleration sensor
    on STM32F4Discovery.  From Florian Olbrich.
  - apps/examples/apa102:  Add a Rainbow example for APA102 LED Strip.
    From Alan Carvalho de Assis.
  - apps/examples/flowc:  Add a simple test of serial hardware flow
  - Add powerled driver example.  From Mateusz Szafoni.
  - apps/examples/ina219: A simple infinite loop that polls the INA219
    sensor and displays the measurements.  From Sebastien Lorquet.
  - apps/examples/alarm:  Add options for reading alarm value and
    canceling it.  From Juha Niskanen.
  - Add -n samples to lm75 app and replace Centigrade with Celsius.
    From Alan Carvalho de Assis.
  - apps/examples/adps9960:  Add ADPS-9960 example.  From Alan Carvalho
    de Assis.
  - apps/examples/obd2:  Add OBD2 example application.  From Alan
    Carvalho de Assis.
  - apps/examples/userfs:  Add a test case for verifying UserFS.
  - apps/examples/smps: add SMPS driver example.  From Mateusz Szafoni.
  - apps/examples/pdcurses:  Bring in pdcurses demos and make them
    conform to the NuttX coding style.
  - apps/examples/pdcurses:  Add a very simple example that just shows
    the entire character set (7-bit only).  It adapts to the size of
    the framebuffer and, hence, can be used with very tiny displays.
    In fact it looks really dumb on big displays.
  - apps/examples/nunchuck:  Add Nunchuck example application.  From
    Alan Carvalho de Assis.

* File System Utilies: apps/fsutils:

  - apps/fsutils/mkfatfs:  Move mkfatfs from the OS to here.

* Network Utilities: apps/netutils:

  - apps/netutils/netlib:  Add netlib_ipv6adaptor() and
  - apps/netutils/netlib:  Add helpers for reading the routing table:
    netlib_read_ipv4route() and netlib_read_ipv6route().
  - apps/netutils/netlib:  Add new utilities netlib_ipv[4|6]router()
    that can be used to determine the IP address of a router that would
    be used some some destination IP address that is not locally
  - apps/netutils/ftpc:  Adds support for IPv6 and fixes various
    transfer issues.   From Anthony Merlino.

* CANUtilities: apps/canutils:

  - apps/canutils/libobd2:  Add libobd2 for NuttX.  From Alan Carvalho
    de Assis.

* Graphics: apps/graphics:

  - graphics/traveler:  Convert to use the framebuffer driver.
  - apps/graphics/pdcurs34:  This commit brings the public domain
    pdcurses library into NuttX.  NuttX graphics support based on the
    framebuffer character drivers has been integrated.  Input is
    currently limited to a discrete joystick driver.

* Wireless Utilities: apps/wireless:

  - apps/wireless/ieee802154/i8sak:  Adds socket interface support. You
    can now use both socket or char driver to control the MAC layer.
    From Anthony Merlino.
  - apps/wireless/ieee802154/i8sak:  Adds sniffer port option and a few
    other get/set parameters.  From Anthony Merlino.
  - apps/wireless/ieee802154/i8sak: Changes 'notif' to 'primitive'
    corresponding to the changes in the Kernel.  From Anthony Merlino.
  - apps/wireless/ieee802154/i8sak: Channel setting is now saved
    locally, so when performing a startpan or assoc, the channel
    previously set is still used, even though the MAC layer gets reset.
    From Anthony Merlino.
  - apps/wireless/ieee802154/i8sak:  Adds ability to get/set rxonidle
    setting for MAC layer. From Anthony Merlino.
  - apps/wireless/ieee802154/i8shark:  Adds i8shark, a sniffer "adapter"
    that captures all 802.15.4 traffic, packages it into a Wireshark ZEP
    packet, and sends it to a host running Wireshark  From Anthony

* System Utilities (apps/system)

  - apps/system/ping and ping6:  This commit removes the ping and ping6
    commands from NSH and replaces then with the apps/system/ping and
    apps/system/ping6 built-in commands.  The NSH ping[6] commands had
    to be removed because they violated the portable POSIX OS interface.
    The apps/system/png and ping6 command uses the sem-standard
    IPPROTO_ICMP and IPPROTO_ICMP6 socket interfaces.

* Platform-Specific Support (apps/platform)

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:

  - Task Environment Creation:  Fix an error in the duplication of the
    child tasks environment in the special case where the parent's
    environment was created, but then all of the variables were unset.
    In that case, there is still an allocation in place but the size of
    the allocation is zero. This case was not being handled correctly
    when a child task attempts to create its environment and inherit the
    zero-size partent environment. Noted by Anthony Merlino.
  - timer_create():  Fix watchdog resource leak if cannot allocate a new
    timer. From Bruno Herrera.
  - OS Internal Functions: Internal OS functions should not return error
    information via the user errno variable:  This includes functions
    like file_seek(), file_read(), file_write(), etc.  The complete list
    is too long to duplicate here (please refer to the ChangeLog for
  - OS Internal Functions:  Not only should internal OS functions not
    modify the errno variable, they should never introduce cancellation
    points:  psock_connect(), psock_listen(), psock_getsockopt(), etc.
    The list is too long to duplicate here (please refer to the
    ChangeLog for details).
  - OS Internal Functions:  Create OS internal versions of many
    applications functions that were used by the OS.  The new versions
    differ from the application interfaces in that (1) they do not
    return error information via the errno variable, and (2) they never
    create cancellation points.  This includes new internal interfaces
    like nxsem_init() that is like sem_init(), etc.  There are too many
    to list here (see the ChangeLog for details).
  - Task Exit:  task_exithook.c fails to link if signals are disabled
    because was unconditionally trying to send the SIGCHLD signal to the
    parent in certain configurations.  Noted by Jeongchan Kim.
  - memalign():  Fix heap corruption caused by using unaligned chunk
    size.  Unaligned nodes generated by memalign later cause heap
    corruptions when nodes are shrink further (for example, 24 bytes ->
    8 bytes, when alignment is 16 bytes).  From Jussi Kivilinna.
  - SMP:  In sched/sched/sched_cpuselect.c, in order to find the cpu
    with the lowest priority thread, we have to remember the already
    found lowest priority.  Noted by Anonymous in Issue #75.
  - spinlocks:  Disable local interrupts in spin_setbit() and
    spin_clrbit() in order to avoid a deadlock condition.  From Masayuki
  - atexit()/on_exit():  Clear atexit()/on_exit() function pointer
    before calling it.  On most archs, up_assert() calls exit() so
    without this change, if atexit() function triggers an assertion we
    are in endless loop.  From Juha Niskanen.

* File System/Block and MTD Drivers:

  - tmpfs:  Fixed directory unlocking in tmpfs_opendir.   From Dmitriy
  - fcntl():  fcntl() did not return success fail for F_SETFL.  Reported
    by Jussi Kivilinna.
  - tcdrain():  tcdrain() was recently added to the NuttX C library.
    But there is a problem.  The specification of tcdrain() requires
    that it be a cancellation point.  In order to do this, tcdrain was
    moved from the C library into the OS and the addition cancellation
    point hooks were added.  In non-FLAT builds, access via system calls
    is also now supported.
  - FS FAT:  Fix hard-fault when listing contents of FAT root.  From
    Jussi Kivilinna.
  - procfs: Correct a problem that was causing an apparent directory to
    be reported as a file instead of a directory by opendir.  This
    happened after adding these three new procfs entries: fs/block,
    fs/mount, and fs/usage.  Of course, there is no directory fs in this
    case, only three files that have fs/ in their relative pathnames.
    The logic was detecting that fs was the name of the enty to report,
    but it was then declaring that fs was a file (because fs/block is of
    type file).  This was fixed by adding a check for matching lenghts.
    i.e., if strlen(fs) != strlen(fs/block), then report fs as a
    directory instead of a file.
  - procfs:  Fix uptime being clse to maximum 32-bit value in certain
    config.  From Juha Niskanen.

* Binary Loader:

  - binfmt/:  Don't schedule starthook if there are no constructors.

* Graphics/Display Drivers:

  - LCD: ILI9341 initialize method not permitted to set errno.

* Networking/Network Drivers:

  - Networking:  net/netdev/netdev_ifconfig.c: Was not returning all of
    the address info.
  - Networking: In some cases, packets are still not sent behind the
    router. I found that NuttX sends the ARP requests not to the router
    but to the target. Mistake in file net/route/netdev_router.c.  From
    Aleksandr Kazantsev.
  - SIOCGIFCONF and SIOCGLIFCONF IOCTL commands should only report on
    network adatpors in the UP state.
  - recvfrom():  Fix double leave_cancellation_point on error path.
    From Jussi Kivilinna.
  - send():  Verify that sock descriptor is valid.  Fixes assertion when
    using send on closed socket.  From Jussi Kivilinna.
  - sendto():  Remove assert check for null psock and buf input
    pointers.  Removes check as 'psock == NULL' altogether because that
    checked for later in psock_send and psock_sendto. Change null check
    for 'buf' so that it is handled same as in recvfrom.c (return
    -EINVAL instead of assert).  From Jussi Kivilinna.
  - sockgetname() files need to include udp/udp.h and tcp/tcp.h or
    otherwise NET_UDP_HAVE_STACK and NET_TCP_HAVE_STACK are undefined
    and the logic is never compiled.  Noted by Anthony Merlino.
  - dup()/dup2():  There was a reference counting problem in the TPC
    logic of net_clone().  net_clone() which is the common logic
    underlying dup() and dup2() for sockets.  When net_clone() calls
    net_start_monitor() and net_start_monitor() returns a failure
    (because the underlying TCP connection) then net_clone() must back
    out the reference count on the structure.  Problem noted by Pascal
    Speck and this implementation of the solution is based on his
  - close():  There was a possible recursion that could eventually
    overflow the stack.  The error occurred when closing the socket with
    inet_close() while a socket callback was still queued.  When the
    socket callback was executed by devif_conn_event(), this resulted in
    a call to psock_send_eventhandler() with TCP_CLOSE flag set which
    then called tcp_lost_connection().  tcp_shutdown_monitor() then
    called tcp_callback() again, which again called
    psock_send_eventhandler(), and so on....  Noted by Pascal Speck.
    Solution is also similar to a solution proposed by Pascal Speck.
  - inet:  Add check for protocol before handing out TCP and UDP sockets.
  - IP Forwarding:  Fixes typo that caused build error when IP
    forwarding was enabled with CONFIG_NET_ICMPv6_NEIGHBOR enabled as
    well.  From Anthony Merlino.
  - IP Forwarding:  Do not add link layer header size to d_len inside
    devif_forward().  From Anthony Merlino.
  - TCP Networking:  When CONFIG_NET_TCP_WRITE_BUFF=y there is a
    situation where a NULL pointer may be dereferenced.  In this
    configuration, the TCP connection's 'semi-permanent' callback,
    s_sndcb was nullified in tcp_close_disconnect.  However, other logic
    in tcp_lost_connection() attempt to use that callback reference
    after it was nullifed.  Fixed in tcp_lost_connectino() by adding a
    NULL pointer change before the access.  This was reported by Dmitriy
    Linikov in Bitbucket Issue 72.
  - UDP Broadcat:  Fix some issues with regard to UDP broadcast
    handling.  This is Bitbucket Issue #77.
  - ICMP:  Fix an error in the poll logic.  It was assumed that the
    input parmeter pvconn was valid.  It was not.  Instead, the poll
    logic must work like the sendto() and recvfrom() logic:  It must
    keep a copy of the conn structure in the private data.
  - ICMPv6: Fixes several errors preventing icmpv6_radvertise.c from
    being compiled. Fixes conversions to network byte order (namely
    vlifetime, plifetime, mtu).  IPv6 source address is set to
    link-local IP address instead of the address in the netdev
    structure. This is in compliance to RFC 4861. RA didn't work on
    Linux before this change.  Finally, router prefix and prefix length
    are derived from the IPv6 address and netmask in the netdev
    structure. This seems to make more sense than using a predefined,
    separate prefix from the config.  From Sakari Kapanen.
  - ICMPV6:  icmpv6_input() needs to set d_len to 0 after consuming echo
    reply, otherwise, garbage will get sent out.  From Anthony Merlino.
  - ICMPV6:  Fix an error in the poll logic.  It was assumed that the
    input parmeter pvconn was valid.  It was not.  Instead, the poll
    logic must work like the sendto() and recvfrom() logic:  It must
    keep a copy of the conn structure in the private data.
  - IGMPv2 Send:  Fix incoming IGMP checksum calculation.  From Louis
  - ARP:  Fix IGMP Ethernet address computation.  From Louis Mayencourt.

* Wireless/Wireless Drivers:

  - CC1101:  CC1101 driver not permitted to set errno.
  - 6LoWPAN:  Correct an error in uncompressing multicast address.
  - 6LoWPAN:  Correct a bug in handling uncompressed frames (IPv6
    dispatch).  Adds a separate local variable, protosize, to keep track
    of the size of thep protocol header.
  - 6LoWPAN:  Fix an endian-ness problem in 6LoWPAN address
    decompression.  From Anthony Merlino.
  - 6LoWPAN:  The logic that extracts interface identifier from the IP
    address needs to be generalized to handle cases where the address is
    not a link local address.  From Anthony Merlino.

* Common Drivers:

  - Serial: 16550 UART driver IOCTL method must not set errno; it must
    return a negated errno value.
  - LIS3DSH:  Added the argument parameter (FAR void *arg) to the
    interrupt handler provided by the LIS3DSH driver to fit the
    definition for ISRs in xcpt_t.  Changed the check for working queue
    availability in lis3dsh interrupt handler to use work_available()
    and not crash in case of an overrun.  From Florian Olbrich.
  - LIS2DH:  Fixes for self-test.  From Jussi Kivilinna.
  - LIS2DH:  Fix use of obsolete dbg macro.  From Jussi Kivilinna.
  - LIS331DL:  LIS331DL driver not permitted to set errno.
  - HTS221:  Power-on sensor for loading calibration data. From Jussi
  - MCP2515:  Fix the MCP2515 Bit Rate Prescale calculation.   Fix BRP
    for SET_BITTIMING ioctl as well.  From Alan Carvalho de Assis.
  - STMPE811: Fix GPIO operation of STMPE811 driver.
    1. STMPE811_GPIO_DIR was defined for register name and later was
      redefined to be the pin direction mask for `stmpe811_gpioconfig`.
      I decided to change register name to be STMPE811_GPIO_DIR_REG, and
      keep pin direction mask STMPE811_GPIO_DIR, so that any external
      code that already use this driver will be unchanged.
    2. The STMPE811 register GPIO_DIR uses bit value 1 for output and 0
      for input, but `stmpe811_gpioconfig` set the opposite.
    3. The call to `stmpe811_gpiowrite` from inside of
      `stmpe811_gpioconfig` leaded to deadlock.
    From Dmitriy Linikov.
  - BQ2429X:  Add BATIO_OPRTN_SYSON for enabling BATFET after SYSOFF.
    From Jussi Kivilinna.

* Simulation:

  - Simulation:  Serial and console drivers are not permitted to set
    the errno.

* ARMv7-M:

  - ARM Stack Check:  Fix assert panic when both TLS and interrupt stack
    are enable.  From Jussi Kivilinna.

* Expressif ESP32:

* Infineon XMC4xxx Drivers:

  - XMC4 USIC: Kconfig was not selecting XMC4_USIC for USIC1. From Alan
    Carvalho de Assis.
  - XMC4 UART: Fix XMC4xxx USIC UART sginal to be high level when in idle.
    From Alan Carvalho de Assis.
  - XMC4 UART:xmc4_uart_configure() expects the channel# not uartbase as
    an input parameter.  From Alan Carvalho de Assis.
  - XMC4 UART:  Enable RX/TX status.  From Alan Carvalho de Assis.
  - XMC4 UART:  The Alternative Receive Interrupt was not being

* Infineon XMC4xxx Boards:

  - XMC4500-Relax:  Setup max. freq. 120MHz and setup pull-up to UART
    RXD pin.  From Alan Carvalho de Assis.

* Microchip/Atmel SAMv7 Drivers:

  - SAMv7:  DAC and ADC drivers are not permitted to set the errno.
  - SAMv7:  Correct an error in RX DMA setup.  From Manish Kumar Sharma.
  - SAMv7 USB:  It is necessary to disable pre-emption and interrupts
    around a loop that copies TX data into the hardware in order to
    avoid a TX data underrun condition.  From Anthony Merlino.

* NXP/Freescale LPC31xx Drivers:

  - LPC31xx:  Serial and console drivers are not permitted to set
    the errno.

* NXP/Freescale LPC43xx:

  - lpc43xx:  lpc43_adc.c was being selected by the build system wehn
    DAC was selected.

* NXP/Freescale LPC43xx Drivers:

  - LPC43xx Ethernet:  Fix some backward logic setting full-duplex and
    100mbps when autoconfiguration is disabled.  Noted by Anonymous in
    Issue #76.
  - lpc43xx: UART_RX pins should be configured with input buffers
    enabled. Otherwise it cannot be read.  From Alexander Vasiljev.

* STMicro STM32:

  - STM32 F2:  Fixed build for STM32F20XX platforms when
    CONFIG_STM32_DMACAPABLE is enabled.  From Dmitriy Linikov.
  - STM32 F4:  Remove ltdc.h and dma2d.h. Those header files in that
    location permitted inclusion into application space logic and,
    hence, facilitated and encouraged calling into the OS and violating
    the portable POSIX OS interface.  The definitions in those header
    files were move the appropriate location in the counterpart,
    architecture specific files at arch/arm/src/stm32/dma2d.h and ltdc.h.
  - STM32 L4:  Build stm32l4_idle.c only if  CONFIG_ARCH_IDLE_CUSTOM is
    not enabled.  From Jussi Kivilinna.
  - STM32 F7:  Remove ltdc.h and dma2d.h. Those header files in that
    location permitted inclusion into application space logic and,
    hence, facilitated and encouraged calling into the OS and violating
    the portable POSIX OS interface.  The definitions in those header
    files were move the appropriate location in the counterpart,
    architecture specific files at arch/arm/src/stm32f7/dma2d.h and

* STMicro STM32 Drivers:

  - STM32:  DAC and ADC drivers are not permitted to set the errno.
  - STM32 ADC:  Clear pending interrupts.  From Mateusz Szafoni.
  - STM32 CAN:  Lower part of STM32 CAN driver
    arch/arm/src/stm32/stm32_can.c uses all three hw tx mailboxes and
    clears TXFP bit in the CAN_MCR register (it means transmission order
    is defined by identifier and mailbox number).
    This creates situation when order frames are put in upper part of
    CAN driver (via can_write) and order frames are sent on bus can be
    different (and I experience this in wild).  Since CAN driver API
    pretends to be "file like" I expect data to be read from fd the same
    order it is written. So I consider described behaviour to be a bug.
    Fixed by settin the TXFP bit in the CAN_MCR register (FIFO
    transmit order).  From comments by Alexey T, in Bitbucket Issue 73.
  - STM32 HRTIM:  Fix pclk calculation.  From Mateusz Szafoni.
  - STM32 HRTIM:  Fix burst mode prescaler update. From Mateusz Szafoni.
  - STM32 (alt) I2C:  Ensure proper error handling. Injecting data
    errors would cause the driver to continually reenter the isr with
    BERR an RxNE.  This fix allows the error to be cleared and
    propagated to the waiting task.  From David Sidrane.
  - STM32:  LTDC and DMA2D drivers are not permitted to set the errno.
  - STM32 RTC:  Workaround for potential subseconds race condition.  In
    all recent STM32 chips reading either RTC_SSR or RTC_TR is supposed
    to lock the values in the higher-order calendar shadow registers
    until RTC_DR is read. However many old chips have in their errata
    this silicon bug (at least F401xB/C, F42xx, F43xx, L15xxE, L15xVD
    and likely others):  "When reading the calendar registers with
    BYPSHAD=0, the RTC_TR and RTC_DR registers may not be locked after
    reading the RTC_SSR register. This happens if the read operation is
    initiated one APB clock period before the shadow registers are
    updated. This can result in a non-consistency of the three
    registers. Similarly, RTC_DR register can be updated after reading
    the RTC_TR register instead of being locked."
  - STM32 Serial:  Do not stop processing input in SW flow-control
    mode.  From Juha Niskanen.
  - STM32F33xxx ADC:  Add some publicly visable interfaces and some
    code to support injected channels.  From Mateusz Szafoni.
  - STM32F33xxx DMA:  Add public interface to handle with DMA
    interrupts.  From Mateusz Szafoni.
  - STM32F33xxx RCC:  Fix CAN clock enable.  From Mateusz Szafoni.
  - stm32 F4 I2C:  Ensure proper interrupt handling.  Injecting data
    errors that causes a STOP to be perceived by the driver, will
    continually re-enter the isr with SB not set and BTF and RxNE set.
    This changes allows the interrupts to be cleared and propagates a
    I2C_SR1_TIMEOUT to the waiting task.  From David Sidrane.
  - STM32 L4 Serial:  Do not stop processing input in SW flow-control
    mode.  From Juha Niskanen.
  - STM32 F7:  LTDC and DMA2D drivers are not permitted to set the errno.
  - STM32 L4:  DAC and ADC drivers are not permitted to set the errno.
  - STM32 L4 DAC:  Do not configure output pin if it is not used.  From
    Juha Niskanen.
  - STM32 L4 RTC, PM:  Small fixes to subseconds handling, ADC
    power-management hooks
  - STM32 F4 RTC:  Fix reading alarm value that is more than 24h in
    future.  From Juha Niskanen
  - STM32 L4 RTC:  Fix reading alarm value that is more than 24h in
    future.  From Juha Niskanen
  - STM32 L4 TIM:  Fix compilation of timers with complementary outputs
    when not PWM_MULTICHAN.  From Juha Niskanen.
  - STM32 L4 RCC:  Restore backup-registers after backup-domain reset.
    From Jussi Kivilinna.
  - STM32 L4 RTC:  Correct RTC_SSR and RTC_TR read ordering.  In all
    recent STM32 chips reading either RTC_SSR or RTC_TR is supposed to
    lock the values in the higher-order calendar shadow registers until
    RTC_DR is read. Change the register read ordering to match this and
    don't keep a workaround for a hypothetical race condition (not in
    any L4 errata, lets for once assume ST's silicon works as it is
  - STM32 L4 RTC:  Init mode was never exited because nested locking in
    rtc_synchwait() disabled backup domain access.  From Juha Niskanen.
  - STM32 L4 RTC:  Use backup register magic value instead of INITS
    bit.  The INITS (bit 4) of RTC_ISR register cannot be used to
    reliably detect backup domain reset. This is because we can operate
    our device without ever initializing the year field in the RTC
    calendar if our application does not care about correct date being
    set.  Hardware also clears the bit when RTC date is set back to year
    2000.  From Juha Niskanen.
  - STM32 L4 RTC:  Put back the SSR race condition workaround.  ST has
    confirmed that the issue has not been fixed, and that it applies to
    STM32 L4 too (was not in errata sheets due to documentation bug) See
    discussion: .
    From Juha Niskanen.
  - STM32 F7 BBSRAM:  Avoid assert in stm32_bbsram_savepanic. If panic
    happens before stm32_bbsram is initialized, stm32_bbsram_savepanic
    caused additional assert panic. Function has null pointer check, so
    drop DEBUGASSERT.  From Jussi Kivilinna.
  - STM32 F7 I2C: fix I2C_M_NORESTART handling.  From Jussi Kivilinna.
  - STM32 F7 I2C:  Restore bus frequency after I2C reset.  Copy
    frequency restoration fix from STM32L4 I2C driver to STM32F7 I2C
    driver.  From Jussi Kivilinna.
  - STM32 F7 RTC:  Fix reading alarm value that is more than 24h in
    future.  From Juha Niskanen

* STMicro STM32 Boards:

  - STM32F334-DISCO:  Add missing ram_vectors configuration in linker
    script.  From Mateusz Szafoni.
  - Nucleo-F334R8:  Add missing ram_vectors configuration in linker
    script.  From Mateusz Szafoni.
  - Nucleo-F334R8:  Add Missing ADC trigger configuration tot he highpri
    configuration.  From Mateusz Szafoni.
  - STM3240G-EVAL:  The timer frequencies (BOARD_TIMx_FREQUENCY) are
    incorrectly defined in board.h.  Since the APB prescalers are set to
    divide by 4 and 2 respectively, the frequencies should be "2xAPBx"
    as said in the comment.  The correct frequencies are already defined
    but as STM32_APBx_TIMx_CLKIN.  From Mattias Edlund.
  - STM32F429i-DISCO:  The ltdc configuration has been deleted because
    it violated the portable POSIX OS interface.  It used
    apps/examples/ltdc and include ltdc.h and dma2d.h which were also
    removed for the same reason.

* ZiLOG Z80

  - configs/z80sim and xtrs:  Serial driver lower halfs ioctl methods
    should return a negated errno value, not set the errno variable.
  - z80 Make.defs:  Fixes dependency generation with newest SDCC
  - configs/z80sim:  Fix a naming problem.  Also, don't try to build the
    serial driver if CONFIG_NFILE_DESCRIPTOR=0.
  - Z80:  Makefile fix for use with current SDCC.

* Build System

  - configs/:  All defconfig filess that include
    CONFIG_NET_ICMPv6_SOCKET=y need to select CONFIG_SYSTEM_PING6=y and
  - configs/:  All NX configuration... Because of recent changes to
    libnx/nxfonts, Supported bit per pixel must be separated specified
    for NXFONTs too and need to match the select BPP for NX.
  - Build system:  Fix CONFIG_BUILD_KERNEL logic directories that have
    ubin and kbin subdirectories.  Conditional logic was fine for
    CONFIG_BUILD_FLAT and CONFIG_BUILD_PROTECTED but generated useless
    dependencies if CONFIG_BUILD_KERNEL.

* C Library/Header Files:

  - libc/stdio:  Build the lib_noflush() and lib_snoflush() stubs even
    if CONFIG_FILE_DESCRIPTORS=0.  They may still be needed.
  - libc and libnx:  When the libraries are built into two libraries, a
    user space library and a OS space library (as in the PROTECTED and
    KERNEL build).  Then the user space library must not use the OS
    internal interfaces; similarly, the OS must avoid using the
    userspace interfaces so that it does not muck the errno value or
    create spurious cancellation points.
  - libc/match:  Use of exp() vs expf() in logf() caused function to be
    slow.  From Alan Carvalho de Assis.
  - libnx:  Fixes a memory leak that is caused because the client message
    queue is not unlinked after the client disconnects from the NX
    server.  From Masayuki Ishikawa.
  - sscanf():  Fix sscanf() character conversion (%c): do not add '\0' at
    the end as for strings, cause, for example, parsing one character
    will fill two bytes: character itself and zero one '\0' after it, so
    will overflow one byte variable argument and corrupt memory for
    variables allocated after it.  From Oleg Evseev.

* Tools

  - tools/: and configure.c should redirect stdout to
    /dev/null but should not suppress stderr output.

* NSH: apps/nshlib:

  - apps/nshlib/:  Avoid truncating the strcmp result in the parser
    into a unsigned char variable.  nshlib/nsh_netcmds.c:  Check for
    valid hostip before using it.   From Bruno Herrera.
  - apps/nshlib/:  Fix resouce leak in 'dd' commenad when 'if=' or
    'of=' params are repeated in the command line.  For example:
      dd if=/dev/null if=/dev/zero of=/dev/null or
      dd if=/dev/zero of=/dev/zero of=/dev/null.   From Bruno Herrera.
  - apps/nshlib:  This commit eliminates the ping and ping6 commands
    from NSH and replaces them with 'built-in' commands at
    apps/system/ping and ping6.  The original NSH version of ping[6]
    commands violated the portable POSIX interface and, hence, had to
    be removed. The new system/ping and ping6 built-in commands uses
    the new IPPROTO_ICMP AF_INET and IPPROTO_ICMP6 AF_INET6 datagram
    sockets to implement ping.
  - apps/nshlib: Fix parsing of empty strings when CONFIG_NSH_CMDPARMS
    is not defined. Problem noted by Juha Niskanen.

* Examples/Tests: apps/examples:

  - All configurations that use NXIMAGE or NXHELLO must select
    NX_MULTIUSER.  All configuratinos that use examples/nxterm must
  - All configurations that use NXLINES must select NX_MULTIUSER.  All
    configurations that use the NX server need to have larger POSIX
  - apps/examples/adc:  Fix g_adcstate.count initialization.  From
    Masayuki Ishikawa.
  - apps/examples/elf:  Remove low-level interfaces and replace with
    call to exec().
  - apps/examples/nxflat:  Remove low-level interfaces and replace with
    call to exec().
  - examples/ostest:  Works around a bug in printf() when cancellation
    points are enabled.  printf() is a cancellation point because it
    calls write().  This is correct according to
    However, printf holds the stdio library semaphore when it is
    canceled and this leaves the semaphore in a bad state.  No fix for
    the printf bug yet.
  - apps/examples/nx:  The NX example no longer supports single user
  - apps/examples/nxtext:  The nxtext example no longer supports single
    user mode.
  - apps/examples/nxhello now supports only multiuser mode.
  - apps/examples/nximage now supports only multiuser mode.
  - examples/nxlines:  Now supports only multiuser mode.

* Network Utilies: apps/netutils:

  - apps/netutils/ftpc:  Fix some crazy comparisons to determine is a
    file is an absolute path.  Noted by Anthony Merlino.

* System Unitilities (apps/system)

  - apps/system/i2ctool: Fixed i2ctool write operation in `no restart`
    mode (flag `-n`).  It seems that I2C driver has changed a bit since
    i2ctool was written, so now i2ctool sends repeated start even if
    `no restart` flag (-n) was passed to it.  From Dmitriy Linikov.