NuttX-7.26 Release Notes

The 126th release of NuttX, Version 7.26, was made on September 8, 2018, and is available for download from the website. Note that release consists of two tarballs: nuttx-7.26.tar.gz and apps-7.26.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:

  - General: Eliminate use of the non-standard type systime_t and
    replace it the equivalent, standard type clock_t  From Gregory Nutt.
  - General:  Replace non critical PANIC with DEBUGPANIC to save the
    code space From Xiang Xiao.
  - General: Replace all ASSERT with DEBUGASSERT to save the code
    space  From Xiang Xiao.
  - Initialization:  Add option to mount block device for
    INIT_FILEPATH case.  From anchao.
  - clock():  clock_systimer() is no longer a system interface.  It has
    been replaced with the equivalent, standard interface clock().
    Moved the implementation of clock() from the C library into the OS
    core.  This is necessary because it calls the (now) internal OS
    function clock_systimer().  clock() is now accessed only via a
    system call in certain configurations.  From Gregory Nutt.
  - clock Utilities:  Move clock_timespec_[add|subtract] to
    include/nuttx/clock.h  From Xiang Xiao.
  - Binary Loader:  Add binfmt_initialize().  All binary formats are
    now registered centrally vs. in board-specific logic.  This
    simplifies the usage of the binfmt subsystem.  From Xiang Xiao.
  - Binary Loader:  Reference default symtab name to binfmt  From anchao.
  - mm:  Add mm_heapmember function and reimplement kmm_heapmember base
    on mm_heapmember since this function is very useful if multiple
    heaps exist.  From Xiang Xiao.
  - mm:  Add {kumm/kmm}_calloc API.  Add calloc API for manage user
    memory and kernel memory in Flat Build/Kernel Build without kernel
    heap.  From zhuyanlin.
  - pthreads:  Add support static pthread stack.  Add standard
    pthread_attr_setstack() and pthread_attr_getstack().  In all cases
    where the stack is released, add check to see which allocator must
    be used to free the stack:  The user or the kernel allocator.  From
  - Semaphores:  Apply the semaphore wait function
    nxsem_wait_uninterruptible().  This function is a wrapped version
    of nxsem_wait() that is uninterruptible and convenient for use.
    From liuhaiyang.
  - Signals:  Add default signal action to SIGKILL.  From ligd.
  - Signals:  Update the signal default action logic to support
    sigaction().  signaction() must be able to handle and input action
    of SIG_DFL to setup the default signal action; it mast also return
    SIG_DFL it is replacing the default action.  From Gregory Nutt.
  - Signals: Default Signal Actions.  Change some types to
    superficially simplify.  Add configuration options to enabled
    default signal behaviors on a per-signal basis.  I don't think
    users are prepared for SIGALRM to terminate the task (which is the
    correct default behavior if you don't change it).  Extend the
    implementation of default signals so that it is totally table
    driven and extensible by simply mondifying the content of const
    tables.  From Gregory Nutt.
  - Signals:  Add support for SIGINT in addition to SIGKILL.
  - Signals:  Add logic and an interface to determine if a signal can
    be caught or ignored.  sigaction now correctly returns EINVAL on
    any attempt to catch or ignore such signals (only SIGKILL for now
    and only if CONFIG_SIG_DEFAULT=y).  From Gregory Nutt.
  - Signals:  Add support for default signal actions for SIGSTOP,
    SIGSTP, and SIGCONT.  Add procfs support to show stopped tasks.
    From Gregory Nutt.
  - Signals:  Add nxsig_action() to solve a chicken and egg problem:
    We needed to use sigaction to set default actions, but sigaction()
    would refuse to set actions if the default actions could not be
    caught or ignored.  From Gregory Nutt.
  - Signals:  Add configuration option to selectively enabled/disable
    default signal actions for SIGSTOP/SIGSTP/SIGCONT and SIGKILL/SIGINT.
  - Signals:  If a task/thread was already blocked when
    SIGSTOP/SIGSTP was received, it will restart in the running state.
    It will appear that to the task/thread that the blocked condition
    was interrupt by a signal and returns the EINTR error.  From
    Gregory Nutt.
  - Signals:  Update signal default STOP action.  If waitpid was
    called with the WUNTRACED then wake up waitpid().  From Gregory
  - IRQs:  Monitor the irq execution time.  This is very useful for
    measuring the interrupt latency.  From Xiang Xiao.
  - IRQ Dispatch:  Add support interrupt chains in NuttX.  IRQ chain is
    very useful in these cases:  (1) Multiple hardware connect to the
    same request line(e.g. PCI), (2) Need multiple driver to support
    one hardware block (like Linux MFD)  From zhuguangqing.
  - Work Queue:  Modify high priority work queue to support multiple
    threads.   From ligd.
  - System Calls:  Add support for getpeername() and get_sockname()
    system calls.  From Gregory Nutt.
  - System Calls:  svcall/sycall logic needs to get the ucontext
    argument from R4 instead of stack since all syscall parameters pass
    from registers in syscall.h  From Xiang Xiao.
  - CPU Load Measurement:  Support the CPU load measurement using
    timer_lowerhalf_s interface  From Xiang Xiao.
  - Assertions: Change CONFIG_BOARD_RESET_ON_CRASH to
    CONFIG_BOARD_RESET_ON_ASSERT, arch/: Implement call to
    board_reset() if in all implementations of up_assert() when
  - boardctl():  Add support for board_app_finalinitialize() From ligd.
  - Architecture Interface:  Add prototype for an architecture-specific
    up_trigger_irq function.  From dongjianli.
  - Architecture Interface:  Add the garbage collection hook so each
    architecture can do custom memory cleanup if necessary.  From Xiang
  - Architecture Interface:  Add architecture-specific prototypes for
    conversions between physical and virtual address.  From ligd.

* File Systems/Block and MTD Drivers

  - ProcFS:  Add support for a procfs entry that will permit examining
    the environment of any task.  From Gregory Nutt.
  - ProcFS:  Add support for proc/self/, a convenient way for getting
    information about the currently running task.  From Gregory Nutt.
  - HostFS:  Add support for open() append mode  From anchao.
  - HostFS:  Add ftruncate support.  From Xiang Xiao.
  - HostFS:  Remove ARCH_SIM dependence since other architectures
    (e.g., arm semihosting) could support hostfs too  From Xiang Xiao.
  - HostFS:  Support remote directory names without a trailing '/'
    From ligd.
  - HostFS:  Add re-try when hostfs mount() fails  From ligd.
  - NFS:  Update NFS client mount to VER3  From zhangyuan7.
  - Partitions:  Add PTABLE parser fs/partion:  Add a partition parser
    framework fs/driver/fs_blockpartition.c:  Add
    register_blockpartition for block partition  From Xiang Xiao.
  - MTD:  Add gd25 driver  From wangyanjiong.
  - MTD:  In MTD partitions, copy the partition name to internal
    buffer so that the caller can free the name argument  From Xiang
  - MTD:  Support initialization of an FTL block device with a custom
    name  From Xiang Xiao.
  - MTD:  FTL:  Reduce size of stack buffer from 64 to a maximum size
    as determined from NAME_MAX.  From Gregory Nutt.
  - VFS poll():  Send poll() notification when the Tx buffer is flushed
    From ligd.
  - VFS fstat():  Add file_fstat() function for internal OS use. From
  - VFS fcntl():  Add file_fcntl, psock_fcntl, and psock_dupsd for use
    within the kernel.  From Xiang Xiao.
  - VFS dup2():  Addpsock_dupsd for use within the kernel.  From Xiang
  - VFS poll():  Add poll use in kernel space.  From dongjianli.
  - VFS select():  Make select be more consistent with Linux man page:
    'The timeout ... Some code calls select() with all three sets
    empty, nfds zero, and a non-NULL timeout as a fairly portable way
    to sleep with subsecond precision.'  From anchao.

* Networking/Network Drivers:

  - Sockets:  Add getpeername() support  From ligd.
  - sockopt():  Move psock check from [get|set]sockopt to
    psock_[get|set]sockopt From Xiang Xiao.
  - getsockname():  Add psock_getsockname function  From Xiang Xiao.
  - Netlink Sockets:  This brings in a fragmentary, experimental
    implementation of NETLINK sockets.  There is not too much to that
    socket support on this initial commit, just the netlink socket
    framework.  However, I decided to bring it into master because
    there is a enough that I would not want to lose what is in place.
    And since it is dependent on CONFIG_EXPERIMENTAL, its presence on
    master should be innocuous.  From Gregory Nutt.
  - Interface Indexes:  Add driver interface index support.  Add
    implementation of if_nametoindex() and if indextoname().  Raw
    AF_PACKET sockets now depend on CONFIG_NETDEV_IFINDEX.  Add syscall
    support for if_nametoindex() and if_indextoname(). Includes an
    algorithm to prevent an interface index from being reused until all
    network interfaces have by assigned once.  The prevents removable
    devices from being removed, unregistered and re-installed,
    re-registered and keeping the same interface index.  From Gregory
  - Driver Interface:  Add devif_loopback() to check the loopback
    case where a packet is being sent to itself.  Modify the net driver
    to call this function in this case.  This function will simply
    re-inject the packet back into the network and the network driver
    will not put anything on the wire.  From Xiang Xiao.
  - Network Devices:  Remove all references to CONFIG_NET_USER_DEVFMT.
    That feature is now unconditionally enabled.  This was done because
    (1) the feature does not require very much additional memory, and
    (2) it causes confusion in the configuration due to the additional
    complexity.  Any network drivers that fail to zero the device
    structure interface name field (d_ifname) because calling
    netdev_register() will, however, get a nasty surprise.  From
    Gregory Nutt.
  - Network Devices:  Add support for Microchip LAN91C111 driver  From
    Xiang Xiao.
  - Network Devices:  netdev_findby_ipv[4|6]addr return
    netdev_default() as last resort but don't return loopback device
    if another network device is in the UP state.  From Xiang Xiao.
  - Network Device IOCTLs:  Add si_ioctl callback and net_ioctl_arglen
    so usrsock could forward the ioctl to the remote end/  From
  - IPv6:  Rename g_ipv6_allzeroaddress with the more meaning
    g_ipv6_unspecaddr since the all-zero address is the IPv6
    unspecified address (sometime IN6_ADDR_ANY).  Replace more inline
    tests for IPv6 multicast with common net_is_addr_mcast() macro.
    From Gregory Nutt.
  - ARP:  arp_find() now checks if the target IP belongs to one of the
    local network devices.  From Xiang Xiao.
  - ARP:  Make the function arp_find() thread-safe.  It now returns a
    copy of the MAC address from the ARP table entry, rather than a
    potentially unstable reference to the ARP table entry.  From
    Gregory Nutt.
  - TCP:  Re-work of TCP receive window size algorithm.  The new logic
    is based only on the ability to buffer TCP read-ahead data. From
    Gregory Nutt.
  - UDP:  Add support for the UDP_BINDTODEVICE protocol socket option
    From Sebastien Lorquet.
  - Slip:  Uncomment the prompt of NET_SLIP_PKTSIZE in Kconfig file.
    From Xiang  Xiao.
  - USRSOCK:  Combine some the duplicated logic.  From Xiang Xiao.
  - USRSOCK:  Optimize option dependence  From Xiang Xiao.
  - USRSOCK:  Add the listen/accept/getpeername/ioctl support  From

* Other Common Device Drivers:

  - Analog DAC:  Add driver for digital to analog converter DAC7571.
    Nucleo-L422KC:  Add support for a connect DAC7571 converter. From
    Daniel Pereira Carvalho.
  - Audio Interface:  Change member samp of apb to pointer so driver
    can customize sample buffer allocation  From ZhongAn.
  - Audio Interface:  Add ioctl cmd 'AUDIOIOC_SETBUFFERINFO' so user
    space could config the buffer  From ZhongAn.
  - Audio Interface:  Add hardware format support  From anchao.
  - I2S Interface:  Add i2s_rxchannels and i2s_txchannels methods to
    the I2S lower half interface.  From ZhongAn.
  - Audio:  Move the I2S character driver to a dedicated folder. From
    Xiang Xiao.
  - Audio:   Add audio_i2s device driver.  From ZhongAn.
  - Audio:  Add the composite audio driver  From Xiang Xiao.
  - Crypto:  Move dev_urandom.c into new crypto folder.  From Xiang
  - GPIO driver:  Add gpio_pin_unregister function to GPIO driver
    driver/ioexpander:  Add pinset struct to GPIO driver for interrupt
    pins larger than 64.  Initialize pintype/inttype when registering
    ioexpander device.  Add SETPINTYPE ioctl command to the GPIO
    driver. From zhuyanlin.
  - I2C Interface:  Add a definition to distinguish a new START of
    messages from a repeated start.  No lower-half I2C drivers actually
    implement this new flag bit, however. In I2C write/read logic use
    new repeated START definition where appropriate.  Rename
    I2C_M_NORESTART to I2C_M_NOSTART since it may be used in other
    contexts than a repeated start.  Add comments to clarify setup for
    repeated start.  From Gregory Nutt.
  - I2C:  Add the standard speed macros.  From dongjiuzhu.
  - Leds:  Add support to MAX7219 to control 7-segment displays.  From
    Alan Carvalho de Assis.
  - Power: PM: Add pm_stay and pm_relax function so special apps(e.g.
    mediaplayer) could disable suspend during playback much like linux
    kernel counterpart  From Xiang Xiao.
  - Power:  PM: Add pm_querystate function  From zhuguangqing.
  - Power: PM: Don't update the power state in work thread: (1)
    Simplify the code logic and remove the work queue dependence, (2)
    Power calculation is too simple to delay into the work queue From
    Xiang Xiao.
  - Power: PM: Decrease the power state in the reverse order.  Since
    the child driver need power off before parent driver.  From
  - Power: PM:  Make power manager service available as soon as
    possible:  (1) Initialize g_pmglobals at the definition, (2) skip
    hold the lock if OS isn't ready  From Xiang Xiao.
  - Power: PM:  Add PM_RESTORE to notify driver that device exit WFI
    so the driver could restore state.  For example, WDT may stop
    counting before enter low power state and restore the counting
    again in PM_RESTORE notification  From zhuguangqing.
  - Power: PM:  Add timer to decrease PM level automatically.  From
  - PTYs:  Add support so that a PTY can poll for both IN/OUT event
    simultaneously.  From ligd.
  - PWM:  Move pwm.c into pwm folder  From Xiang Xiao.
  - RTC Interface:  Extend struct rtc_time by adding.  From Xiang
    Xiao. tm_nsec if RTC supports hiresolution time.  From Xiang Xiao.
  - Sensors:  Add support for Telair T6713 carbon dioxide sensor.  From
    Juha Niskanen.
  - Sensors:  Add support for LSM303AGR and LSM6DSL sensors  From
  - Sensors:  Add driver for DHTxx sensor.  From Ouss4.
  - syslog:  Enable a partial, crippled version of syslog_flush();
    Call syslog_flush() from assertion handling logic of all
    architectures.  From Gregory Nutt.
  - syslog:  Channel configuration.  Decouple SYSLOG_SERIAL_CONSOLE and
    ARCH_LOWPUTC.  Since some hardware can output log to the special
    debug channel not serial. From anchao.
  - syslog: Support pre-pending a prefix string to log output if
    enabled.  This very useful to identify which CPU send out the log
    in AMP SoC. From anchao.
  - Serial:  Add Ctrl-C/Ctrl-X support.  From ligd.
  - Serial: Support UART direct write for non console device  From
  - Serial:  It is no longer necessary to restrict Ctrl-C handling to
    the FLAT build sched/signal:  Add a new configuration option to
    select signal default actions, separate handling of signal default
    actions from both task startup logic and from the serial TTY
    Ctrl-C logic.  Add a signal set in the group structure to keep
    track of what signals have been set to the default action.  In
    dispatching signals in PROTECTED or KERNEL mode, use this signal
    set to determine if the default signal handler is attached and
    dispatch the signal in kernel mode for the default actions.  From
    Gregory Nutt.
  - Serial:  Integrate new Ctrl-C logic with the ISIG flag in the
    termios c_lflag. From Gregory Nutt.
  - Serial:  Use SIGINT instead of SIGKILL when control-C is pressed.
    From Gregory Nutt.
  - Serial:  Add support for Ctrl-Z.  This works just like the
    recently added Ctrl-C support except that SIGSTP is sent when the
    Ctrl-Z characters is encountered vs. SIGINT.  From Gregory Nutt.
  - 16550 UART:  Add a configuration, analogous to the STM32
    configuration option, to suppress the NuttX standard re-ordering
    for /dev/ttySN for special case of the 16550 UART.
  - 16550 UART:  Add CONFIG_SERIAL_UART_ARCH_MMIO option so the a
    memory mapped device doesn't need to provide uart_getreg() and
    uart_putreg() implementations.
  - 16550 UART: Add stub implementations of DMA-related methods in the
    16550 UART v-table.  From ligd.
  - 16550 UART:  Add serial termios handling  From anchao.
  - 16550 UART:  Support 16550 auto hardware flow control
    drivers/serial/uart_16550.c:  Add configuration option
    CONFIG_16550_SUPRESS_INITIAL_CONFIG.  This is identical to the
    standard configuration in arch/Kconfig
    CONFIG_SUPPRESS_UART_CONFIG, but with scope of only the 16550
    driver.  From Xiang Xiao.
  - syslog: Make timestamp output same as linux kernel.  It's very
    useful if NuttX syslog retarget to Linux syslog. From Xiang Xiao.
  - Timers:  Add maxtimeout method to the struct timer_ops_s interface
    From Xiang Xiao.
  - Timers:  Add a new method to the struct oneshot_operations_s
    interface to get the current time from a oneshot timer driver (if
    it is available from the lower half)  From Xiang Xiao.
  - Timers:  Implement timer arch API on top of timer driver.  From
    Xiang Xiao.
  - Timers:  Implement alarm arch API on top of oneshot driver
    interface.  From Xiang Xiao.
  - Timers:  Implement RTC arch API on top of RTC driver interface.
    From Xiang Xiao.
  - CDC/ECM:  Adds USB device support for CDC/ECM  From Michael Jung.
  - USB Host:  Add support for the Maxim M3421E USB host driver.  Not
    yet fully tested.  From Gregory Nutt.

* General Architecture-Specific:

  - All architectures:  Make sure the up_irq_enable() is available on
    all architectures.  From Gregory Nutt.

* Simulation

  - Simulator Configurations:  Add dsptest configuration.  From Mateusz
  - Simulator:  In network driver (1) Remove up_comparemac() check for
    matching MAC address. Let's trust that the tap device just return
    the packet which belong to us like other real network device
    hardware. (2) Add network device statistics support.  From Xiang Xiao.

* ARM:

  - ARM (all):  Add CONFIG_DEBUG_MEMFAULT to Kconfig.  From Masayuki
  - ARM:  (1) Add semihost support for syslog, (2) Add semihost support
    for HostFS  From Gregory Nutt.

* ARMv6-M:

  - ARMv6-M: Introduce CONFIG_DEBUG_HARDFAULT_INFO to up_hardfault.c
    From Masayuki Ishikawa.

* ARMv7-M:

  - ARMv7-M:  Removes support for the dedicated vector handling from the
    many older architectures. Only common vectors are now supported.
    From Gregory Nutt.
  - ARMv7-M: Introduce CONFIG_DEBUG_HARDFAULT_INFO to up_hardfault.c
    From Masayuki Ishikawa.
  - ARMv7-M:  Implement SYSTICK timer driver  From Xiang Xiao.
  - Simulator:  Add loadable demo for arch sim.  From anchao.
  - ARMv7-M:  Add logic to trigger ARMv7-M interrupts and exceptions.
    From Gregory Nutt (from sample logic by Xiang Xiao).
  - ARMv7-M:  Add NVIC definitions needed by up_trigger_irq().  From
    Gregory Nutt.

* ARMv7-R:

  - ARMv7-R:  Add general interrupt controller.  This is based on
    ARMv7-A gic controller code.  From EunBong Song.
  - ARMv7-R:  Add invalidate dcache in arm_head.S.  From EunBong Song.

* Infineon XMC4xxx Drivers:

  - XMC4 GPIO:  Add a specific bit encoding to GPIO driver for
    opendrain GPIO pin.  From Alan Carvalho de Assis.

* Infineon XMC4xxx Boards:

  - XMC4500-Relax:  Add support to MAX6675 on XMC4500-Relax board.
    From Alan Carvalho de Assis.

* Microchip PIC32MX Boards;

  - PIC32MX:  Update some PIC32MX configurations so that either the
    MPLAB or Penguino toolchains may be used.  From Gregory Nutt.

* Microchip/Atmel SAMD2x/L2x:

  - SAMD2x/L2x:  Rename all usage of samdl/SAMDL to samd2l2/SAMD2L2 to
    make room in the name space for samd5e5/SAMD5E5  From Gregory Nutt.

* Microchip/Atmel SAMD5x/E5x:

  - SAMD5x/E5:  Add a port to the SAMD5x/E5x MCU family.  From Gregory

* Microchip/Atmel SAMD5x/E5x Drivers:

  - SAMD5x/E5x SPI/I2C:  Bring in untested SPI and I2C drivers from
    SAMD2L2.  From Gregory Nutt.
  - SAMD5x/E5x DMA:  Leverage the SAMD2L2 DMA controller.  From Gregory
  - SAMD5x/E5x USB:  Bring the SAMDL2 USB driver into the SAMD5E5
    port.  From Gregory Nutt.

* Microchip/Atmel SAMD5x/E5x Boards:

  - Metro M4:  Add support for the Adafruit Metro M4 board.  From
    Gregory Nutt.
  - Metro M4:  Add an option to build the Metro M4 image to run out of
    SRAM.  This ought to be a safer and quicker way to do the initial
    bring-up (having bricked the first Metro M4 due to a bad FLASH
    image).  From Gregory Nutt.
  - Metro M4:  Add a configuration option to use OSCULP32K instead of
    XOSC32K.  From Gregory Nutt.
  - Metro M4:  After some final fixes related to the SERCOM console,
    the basic NSH configuration appears fully functional.  From
    Gregory Nutt.
  - Metro M4:  Verify the CMCC and enable it by default in the NSH
    configuration.  From Gregory Nutt.

* Microchip/Atmel SAMv7 Drivers:

  - SAMv7 CAN:  Add ability for CAN BUS_OFF autorecovery according
    ISO11898-1:2015.  With this change we added an ioctl for triggering
    the autorecovery sequence for BUS_OFF to the CAN-driver and the
    SAMV7 low-level driver.  According the datasheet: If the device
    goes Bus_Off, it will set MCAN_CCCR.INIT of its own accord,
    stopping all bus activities. Once MCAN_CCCR.INIT has been cleared
    by the processor (application), the device will then wait for 129
    occurrences of Bus Idle (129 * 11 consecutive recessive bits)
    before resuming normal operation. At the end of the Bus_Off
    recovery sequence, the Error Management Counters will be reset.
    During the waiting time after the resetting of MCAN_CCCR.INIT, each
    time a sequence of 11 recessive bits has been monitored, a Bit0
    Error code is written to MCAN_PSR.LEC, enabling the processor to
    readily check up whether the CAN bus is stuck at dominant or
    continuously disturbed and to monitor the Bus_Off recovery
    sequence. MCAN_ECR.REC is used to count these sequences.  From
    Frank Benkert.

* NXP Freescale i.MX RT Drivers:

  - i.MXRT RTC:  Add support for the i.MXRT RTC.  This is code complete
    (with limited features and options) but untested. The HPRTC is
    functional.  However, if the LPSRTC is enabled, then there is a
    hang during LPSRTC initialization.  It appears that there is some
    problem in providing clocking and initializing the LPSRTC domain.
    From Gregory Nutt.
  - i.MXRT SNVS:  Add trivial SNVS from Rev 1. of the Reference Manual.
    From Gregory Nutt.
  - i.MXRT LSPI:  IMXRT1050 LPSPI register and bit definitions added.
    From Ivan Ucherdzhiev.
  - i.MXRT Serial: IMXRT1050 LPUART TERMIOS support added.  From Ivan

* NXP Freescale i.MX RT Boards:

  - IMXRT1050-EVK:  Add knsh configuration. PROTECTED mode NSH build.
    From Gregory Nutt.

* NXP Freescale Kinetis:

  - Kinetis: Add DMA support.  From David Sidrane.

* NXP Freescale Kinetis Drivers:

  - Kinetis:  Use circular DMA as an option to augment the RX FIFOs in
    the Serial driver.  From David Sidrane.

* NXP LPC54xx:

  - LPC54xx:  The LPC54608 can only run at a maximum frequency of
    180Mhz.  This configuration requires uses the clk_in, external
    crystal clock, to drive the PLL.  When that input was selected, the
    board bootup failed waiting for the PLL to lock.  After referring
    the driver from NXP, we should turn on power sources for the ext
    clock if system pll input select clk_in.  NOTE that the LPC54628
    did not require this step... perhaps because the system oscillator
    power was already enabled.  From kxjiang.
  - LC823450:  Add support for mpu and userspace LC823450-XGEVK: Add
    kostest PROTECTED build LC823450-XGEVK: Add knsh PROTECTED build
    From Masayuki Ishikawa.

* NXP LPC54xx Boards:

  - Lpcxpresso-LPC54628:  Update lvgl board config to use the new
    version  From Alan Carvalho de Assis.

* On Semi LPC23450 Drivers:

  - LC823450 Bluetooth:  Add lc823450 Bluetooth support.  From Masayuki
  - LC823450 I2S:  Add tx start threshold to lc823450_i2s.c In
    addition, lc823450_i2s_send() now accepts byte-aligned stream.
    From Masayuki Ishikawa.
  - LC823450 SPI:  Add SPI flash driver for lc823450.  NOTE: Only bus
    accelerator mode is supported.  From Masayuki Ishikawa.
  - LC823450:  Change C-Buffer under-level control.  The under-level
    setting was changed from 1KB to 55KB.  In previous implementation,
    the setting can be changed by the tx threshold but it is fixed at
    startup. Also, check write size and adjust alignment if needed.
    From Masayuki Ishikawa.

* On Semi LPC23450 Boards:

  - LC823450-XGEVK:  Add loopback test for digital MIC on lc823450 via
    i2schar driver.  From Masayuki Ishikawa.
  - LC823450-XGEVK:  Add lc832450 elf test.  From Masayuki Ishikawa.
  - LC823450-XGEVK:  Add posix_spawn configuration  From Masayuki

* STMicro STM32:

  - STM32 L4:  Add initial support to STM32L4+ chips  From Juha Niskanen.
  - STM32 H7:  A partial port to the STMicro STM32H7 by Simon Laube was
    brought in from the PX4 repositories.  Numerous changes were
    make(by Mateusz Szafone).  The basic STM32 H7 NSH configuration is
    now functional, thanks to Mateusz Szafoni.

* STMicro STM32 Drivers:

  - STM32 F0, F1-F4, F7, L4, H7:  Added Single Wire Kconfig variable.
    From David Sidrane.
  - STM32 DAC:  Set OUTEN bit for DAC1CH2 and DAC2CH1 power/motor.
    Direction parameter is now int8 + add overload fault.  From Mateusz
  - STM32 F1-F4 ADC:  Allow multiple channels without DMA on
    STM32L15XX.  From Juha Niskanen.
  - STM32 F1:  Add FLASH register definitions for F1 parts that have
    dual banked FLASH.  From Dmitriy Linikov.
  - STM32 F2:  Added progmem interface support for STM32 F2 From
    Dmitriy Linikov.
  - STM32 F4:  Ports STM32 LTDC and STM32 DMA2D to use the
    framebuffer interface  From Marco Krahl.
  - STM32 F7:  This change ports Marco Krahl's STM32F4 framebuffer
    overlays for the LTDC and DMA2D into the STM32F7.  That driver was
    same as the STM32 F4 driver.  From Gregory Nutt.
  - STM32 F7:  Port input capture from stm32.  From Juha Niskanen.
  - STM32 F7 FLASH:  Ported the STM32 F2/F4 driver to the STM32 F7
    platform.  From Evgeniy Bobkov.
  - STM32 F7 SDMMC:  Add SDIO card support to SDMMC driver.  From
    Ramtin Amin.
  - STM32 F7 Serial:  Previous logic would invalidate the data cache as
    each byte was read from the DMA buffer.  This change adds logic to
    invalidate the data cache less frequently by monitoring the state
    of the Rx DMA buffer cache coherency and invalidating only regions
    as necessary.  From Evgeniy Bobkov.
  - STM32 F7:  Add up_stackcheck.c  From Daniel Agar.
  - STM32 F7:  Port the low-level PM functions to STM32 F7. From Juha
  - STM32 L4:  STM32L4 has fetchadd and testset  From Juha Niskanen.
  - STM32 L4: Added custom pin mapping for STM32L4X2XX processors.
    From Daniel P. Carvalho.
  - STM32 L4 FLASH:  stm32l4xrxx: allow board to override flash wait
    states  From Juha Niskanen.
  - STM32 L4:  Some updates to analog peripherals ADC, COMP and DFSDM
    for STM32L4XR  From Juha Niskanen.
  - STM32 L4:  Add getstatus and getperiod() method to the timer
    driver (includes coding standard changes made prior to commit)
    From Goden Freemans.
  - STM32 H7:  Remove old references to RXDMA.  Add configuration
  - STM32 H7:  Remove old references to RXDMA.  Add configuration
    option to select the Rx FIFO threshold level.  From Gregory Nutt.

* STMicro STM32 Boards:

  - STM32F103 Minimum:  Add blackpill LED support  From Russ Webber.
  - Viewtool-STM32F107:  Add a TCP performance test using
    apps/examples/tcpblaster.  From Gregory Nutt.
  - Viewtool-STM32F107:  Add support for the MAX3421E to the
    Viewtool-STM32F107 board support  From Gregory Nutt.
  - STM32F334-DISCO:  Use a PID controller from libdsp in the BuckBoost
    driver. From Mateusz Szafoni.
  - STM32F4-Discovery:  Remove STM32F4BB dependence from RNDIS; add
    RAMDISK support.  From Alan Carvalho de Assis.
  - STM32F4-Discovery  Add board support for MAX7219 as numeric display
    controller.  From Alan Carvalho de Assis.
  - Olimex-STM32-P407:  Add kernel ELF (kelf) configuration. From
    Gregory Nutt.
  - Olimex-STM32-P407:  Add a kmodule configuration that can be used
    for testing installation of kernel modules in the protected build.
    From Gregory Nutt.
  - Olimex-STM32-P407:  Add logic to support initialization of the
    kernel module symbol table installed in the pass1/ directory during
    the application phase of the build.  The kmodule configuration
    appears to be fully functional.  From Gregory Nutt.
  - Olimex-STM32-P407:  Add board support for the DHTxx sensor.  From
  - STM32F476G-DISCO:  Add support for STM32F746G-disco board LCD.
    From Marcin Wyrwas.
  - STM32F476G-DISCO:  Add a configuration to build working nxdemo
    application  From Fanda.
  - STM32F476G-DISCO:  Add support for STM32F746G-disco board SDRAM
    Changed fb config to use SDRAM.  From Marcin Wyrwas.
  - STM32F476G-DISCO:  Add touchscreen support and a LittlevGL demo for
    STM32F746G-DISCO  From Marcin Wyrwas.
  - Nucleo-L476RG:  Add support for an external SPI-driven SD card on
    the Nucleo-L476RG.  From Gregory Nutt.
  - Nucleo-L476RG:  Add support for LSM303AGR and LSM6DSL sensors  From
  - Nucleo-H743ZI:  Use Nucleo Virtual console as default console in
    the NSH configuration  From Mateusz Szafoni.
  - STM32L4R9-DISCO:  Add stm32l4r9ai-disco support.  From Juha Niskanen.
  - B-L475E-IOT01A:  Add timer driver support.  From Goden Freemans.

* Libraries/Header Files:

  - libc endian:  Add support for endian.h. From Gregory Nutt.
  - libc net:   Add inet_aton()  From Juha Niskanen.
  - libc netdb:  Add getaddrinfo() and friends.  From Juha Niskanen.
  - libc termios:  Add lib_cfmakeraw.c  From Masayuki Ishikawa.
  - libc stdlib:  Add implementation of random() and srandom().  From
    Gregory Nutt.
  - libc unistd:  Add a crippled version of daemon().  From Gregory Nutt.
  - libdsp:  All floats with f-sufix libdsp: (1) add precision option
    for library, (2) add debug option for library and assertions in
    functions, (3) add current samples correction for SVM3, (4) add
    some motor control specific functions, (5) add basic speed
    observer, (6) fix phase shift in SMO observe, (7) add more logic to
    FOC.  From Mateusz Szafoni.
  - include/nuttx/compiler.h, include/poll.h:  Add logic to determine
    if the compiler supports anonymous structures and unions.  From
    Gregory Nutt.
  - include/nuttx/mutex.h:  Add inline wrapper functions to more
    clearly support semaphores when used as mutexs.  From QianWenfa.
  - include/nuttx/nuttx.h:  Added nuttx.h header file which is
    analogous to the linux.h header file.  Currently, it contains on
    the definition of the container_of() macro.  From zhuyanlin.
  - include/queue.h:  Add dq_tail marco  From zhuguangqing.
  - include/stdio.h:  Add prototypes for popen() and pclose().  Actual
    implementation is in apps/system/popen()  From Gregory Nutt.
  - include/sys/param.h:  Add a dummy sys/param.h header file.  This is
    not a standard file but is used by other systems and having the
    dummy file may minimize some porting efforts.  From Gregory Nutt.

* Tools:

  - nuttx/tools/kconfig2html.c:  Due to new usage, tool needs to be
    able to handle configuration files with names other than Kconfig.
    From Gregory Nutt.
  - nuttx/tools/kconfig2html.c:  Update tool to handle tristate types.
    From Gregory Nutt.
  - nuttx/tools/  Add function CATFILE definition.  Currently
    only used in apps/builtin/Makefile.  From Gregory Nutt.
  - nuttx/tools/  Add the recursive wildcard function,
    RWILDCARD, to  From Gregory Nutt.
  - nuttx/tools/  Add an option to specify the location of
    nuttx directory.  From Gregory Nutt.
  - nuttx/tools/  Add a --prompt option that will let you
    use --silent but will prompt before overwriting the original
    defconfig. From Gregory Nutt.
  - nuttx/tools/  Update per suggestions by Mark so
    that it can be used with MSYS vs  From Gregory Nutt.
  - nuttx/tools/  Save the file and
    file (if it exists) in the export package so that it can be used to
    extract addresses.  From Gregory Nutt.
  - nuttx/tools/  Save the name of the STRIP tool too.  From
    Gregory Nutt.
  - nuttx/tools/nxstyle.c:  Add capability to detect multiple blank
    lines. Single spacing required by the coding standard.  Also coding
    standard fixes to server .c files for problems found during testing
    nxstyle.  From Gregory Nutt.
  - apps/tools:  Add +x to  From Masayuki Ishikawa.
  - apps/tools/ and define.bat:  Move a copy of define.bat
    and sh from nuttx/tools to apps/tools so that they will be
    available for the import build.  From Gregory Nutt.

* Build System:

  - Apps/ Build System.  The apps/ build system has undergone a major
    renovation to better support building applications as ELF modules.
    Module selections have changed from 'bool' to 'tristate' types.
    This means that building an ELF now is as simple setting the value
    to 'm'.  This effort required many changes, too many to summarize
    here.  The solution was contributed by Masayuki Ishikawa, Anchao
    An, and Xiang Xiao (and myself to a lesser extent).
  - NuttX/ Build System:  This change extends support for the two-pass
    build.  Its primary purpose is to incorporate source logic
    generated by applications into the kernel phase of the build.
    In the two pass build, the application logic is built during the
    first phase, pass 1.  In that phase, the application may generate
    and install source files in the pass1/directory.  The operating
    system is built during phase 2 of the build.  At that time, those
    source files in the pass1/ directory will be built and incorporated
    into the kernel address space.
    The primary purpose of the pass1/ directory is to such
    application-generated kernel symbol tables.  For an example of the
    use of this feature, look at
    apps/examples/module/drivers/Makefile.  Kernel symbol tables are
    needed to support kernel modules.  Of course, addition
    board-specific logic in, say, configs/<board>/src would have to be
    included to make use of the application-installed symbol tables.
    From Gregory Nutt.
  - Remove CONFIG_ARCH_CALIBRATION.  It is awkward to use and no longer
    necessary now that we have apps/examples/calib_udelay.  From
    Gregory Nutt.
  - Build System:  With recent changes to apps/ all configurations that
    build applications as modules must now also select
    CONFIG_APPS_LOADABLE.  From anchao.
  - Build System:  Add dynamic application loadable support.  From
  - Build System:  Add configuration CONFIG_ARCH_GNU_NO_WEAKFUNCTIONS
    to suppress use of weak functions.  Some gnu derived toolchains do
    not support weak symbols.  From Xiang Xiao.
  - Kconfig:  Move 'option modules' from NSH_FILE_APPS to
    BUILD_LOADABLE From anchao.
  - apps/ Build System:  Introduce a build system for loadable apps
    for nsh.  Add 'option modules' to NSH_FILE_APPS so that a user can
    change an application configuration to tristate (y/n/m)
  - apps/import:  Add Makefile.symtab which can be used to compile the
    dynamically created symbol table C file.  Also adds
    tools/  From Gregory Nutt.

* NSH: apps/nshlib:

  - apps/nshlib:  Add parsing support for back-slash quoted
    characters. Currently only implemented properly if
    CONFIG_NSH_ARGCAT is also selected.  This commit is in response to
    Bitbucket Issue 11 opened by Maciej Wójcik  From Gregory Nutt.
  - apps/nshlib:  Add inverted logic support in the form of 'if !
    <cmd>'  From  Beat Küng.
  - apps/nshlib:  Expand reboot and poweroff commands to include a
    second, optional mode argument  From ligd.
  - apps/nshlib:  Add a force flag (-f) to mksmartfs command.  SmartFS
    will be formatted only if (1) the FLASH does not already hold a
    SmartFS, or (2) the force flag is set.  From Xiang Xiao.
  - apps/nshlib: NSH prompt string is now configurable. nsh> is
    still the default.  From Xiang Xiao.
  - apps/nshlib:  Add control-C support for terminating built-in and
    exec'ed file tasks.  From ligd.
  - apps/nshlib: Call BOARDIOC_FINALINIT after start-up script (or
    immediately after BOARIOC_INIT is there is no start-up script).
    From ligd.
  - apps/nshlib:  When using waitpid() to wait for a built-in
    application or a file application to exit.  Add the WUNTRACED
    options to so the the waitpid() call will also be awakened if the
    waited-for task is stopped as well.  From Gregory Nutt.

* NSH Builtins: apps/builtin:

  - apps/builtin/Makefile.  This commit changes apps/builtin to search
    the registry recursively. By supporting directories, external
    projects can install the hooks into the registry and easily clean
    them up and reinstall if something needs to be updated.  Based on
    an idea from Anthony Merlino.  From Gregory Nutt.

* Examples/Tests: apps/examples:

  - apps/examples/calib_udelay:  Add tool for calibrating
  - apps/examples/dhtxx: Example for the DHTxx sensor.  From Ouss4.
  - apps/examples/dsptest:  Add unit test for NuttX DSP library  From
    Mateusz Szafoni.
  - apps/examples/elf:  CROMFS and ROMFS configuration currently only
    usable in FLAT build.  Add configuration to use ELF objects on
    external media like SD card or USB drive instead.  From Gregory
  - apps/examples/elf:  If the test ELF files are on media in
    removable media such as SD or USB FLASH, the wait until the media
    has been installed and initialized before starting the test.  From
    Gregory Nutt.
  - apps/examples/fb:  Adds example to test framebuffer overlay  From
    Marco Krahl.
  - apps/examples/gps:  Add GPS example using MINMEA lib  From Alan
    Carvalho de Assis.
  - apps/examples/i2sloop:  Add i2sloop application.  This application
    can be used to test I2S loopback like: ' nsh> i2sloop &'. From
    Masayuki Ishikawa.
  - apps/examples/lvgldemo:  Update LVGL to version 5.1.1  From Alan
    Carvalho de Assis.
  - apps/examples/module:  Add support for CROMFS and for stripping
    symbols from ELF module binaries.  From Gregory Nutt.
  - apps/examples/module:  Add support for automounting removable media.
    This involves a wait for the block driver to become available
    before performing the mount.  From Gregory Nutt.
  - apps/examples/module:  When built in the PROTECTED or KERNEL
    modes, the symbol table is not built by the application.  That is
    because the build will fail since the kernel module depends on
    internal OS symbols thar are not available to the application
    build.  With this change the examples does not attempt to build
    the kernel symbol table in these modes.  Instead it just copies
    the kernel module symbol table into the nuttx/pass1 directory
    where it can be build directly into the OS during pass2 of the
    build.  From Gregory Nutt.
  - apps/examples/ostest:  Add a small test for SIGSTOP, SIGCONT, and
    SIGKILL actions.  From Gregory Nutt.
  - apps/examples/popen:  Add a test of popen/pclose.  From Gregory
  - apps/examples/powerled:  Add arch initialization. From Mateusz
  - apps/examples/tcpblaster:  Add TCP performance measurement test.
    From Gregory Nutt.

* System Utilities: apps/system

  - apps/system/cle:  Usage improvements including command line
    history (taken from readline) and support for addition control
    characters. From mst.
  - apps/system/i2c:  Adapt to rename I2C_M_RESTART->i2C_M_START.
    I2C_M_NOSTOP should be in flags of first message in every
    write-read and write-write mesage sequence.  From Gregory Nutt.
  - apps/system/i2c: Allow registers besides 0x00 in the dev command.
    From Jakob Haufe.
  - apps/system/nsh:  Add logic to automatically register an
    application symbol table as part of NSH initialization.  From
    Masayuki Ishikawa.
  - apps/system/nsh:  The symbol table name and size variable names
    can now be configured.  From Gregory Nutt.
  - apps/system/nsh:  Move apps/examples/nsh to apps/system/nsh.  It
    has become so entrenched that it is hardly an example these days.
    May as well formalized it as a system task.  From Gregory Nutt.
  - apps/system/nxplayer:  Refactor nxplayer.c.  Apply
    netlib_parsehttpurl() and
    remove unnecessary usleep().  From Masayuki Ishikawa.
  - apps/system/nxplayer:  Release buffer before session and release
    semaphore in nxplayer_setvolume system/nxplayer/nxplayer.c:
    Remove & for apb->samp reference. It is already a pointer.  From Xiang Xiao.
  - system/nxplayer/nxplayer.c:  Add playraw command  From ZhongAn.
  - apps/system/nxrecorder:  Add nxrecorder application  From ZhongAn.
  - apps/system/popen:  Add an implementation of the standard popen()
    and pclose() OS interfaces.  These are implemented as applications
    vs. part of the OS because they depend on NSH.  Untested on
    initial commit.  From Gregory Nutt.
  - apps/system/system and popen:  Adapt so that these can be used in
    the KERNEL build mode.  In this case, simply replace task_spawn()
    with posix_spawn().  This depends on the existence of some
    environment where /bin/sh exists and can be used to execute one
    NSH command.  For the case of system(), this change was more
    complete because it previously used task_create().  Now it uses
    either task_spawn() or posix_spawn(), depending upon the
    configuration.  From Gregory Nutt.
  - apps/system/taskset:  Add taskset command for SMP systems.  This
    command can be used to retrieve or set a process's CPU affinity.
    For example,

    nsh> taskset -p 4
    pid 4's current affinity mask: 2

    nsh> taskset -p 3 4
    pid 4's current affinity mask: 3

    nsh> taskset -p 1 busyloop &

    From Masayuki Ishikawa.
  - apps/system/zmodem:  Support -p <path> for rz to change the folder
    for the received file.  Switch debug output from printf to
    syslog.  Send the next packet for ZME_ACK in ZMS_SENDING to avoid
    rz on the host side stuck make send work reliable even without
    hardware flow control.  From Xiang Xiao.

* Network Utilities: apps/netutils:

  - apps/netutils/dhcpc:  Activates BINDTODEVICE if available.  From
    Sebastien Lorquet.

* Wireless Utilities: apps/wireless:

  - apps/wireless/i8sak:  i8sak daemon now gets shutdown if not in use.
    Previously, once the i8sak daemon was started, by running any
    command, it would stay running. This means that if you want to use
    i8sak to setup your network, but then want exclusive access to the
    char device, or network device, you have to manually shutdown the
    i8sak daemon.  Now the daemon stays active as long as required to
    finish any commands, or stays open if a new command keeps it on,
    but when all work is finished, it shuts down.  From Anthony Merlino.

* Filesystem Utilities: apps/fsutils:

  - mkfatfs:  Clean up some name BS_ and MBR_ refer to the same record
    and should use the same naming (MBR_).  From Gregory Nutt.
  - mkfatfs:  Add definitions for the FAT boot record (FBR).  From
    Gregory Nutt.
  - mksmartfs:  Add a check to see if the SmartFS is already
    formatted.  From Xiang Xiao.

* Graphic Utilities:  apps/graphics:

  - graphics/littlevg/:  Update LVGL to version 5.1.1  From Alan
    Carvalho de Assis.

* Test Utilities:  apps/testing:

- testing/unity: add Unity - unit testing library from From Mateusz Szafoni.

Bugfixes. Only the most critical bugfixes are listed here (see the ChangeLog for the complete list of bugfixes and for additional, more detailed bugfix information):

* Core OS:

  - Signals:  Signal handlers maybe run with interrupts enabled or
    disabled, depending on how the task the received the signal was
    blocked. (i.e.: If sem_wait() is called, then we disable
    interrupts, then block the currently running task).  This could be
    dangerous, because user code would be running with interrupts
    This change forces interrupts to be enabled in up_sigdeliver()
    before executing the signal handler calling up_irq_enable()
    explicitly.  This is safe because, when we return to normal
    execution, interrupts will be restored to their previous state when
    the signal handler returns.  From Gregory Nutt (Based on a
    recommendation by Mark Shulte).
  - Signals:  Lock the scheduler while while killing the children so
    that we do not lose priority and let the task group continue to
    run in an indeterminate state.  From Gregory Nutt.
  - Groups:  Fix a deadlock when loading an ELF  From Masayuki Ishikawa.
  - Groups:  In some circumstances, group_killchildren() could have
    called pthread_cancel() to kill a task.  Also, the behavior would
    not be as expected if a pthread had cancellation disabled.  From Gregory Nutt.
  - Posix Message Queues: mq_notify() fix - only part of struct copied
    to internal structure.  As source address the address of the struct
    member sigev_value was used, and it is not located the start of the
    struct. This leads to invalid data being copied to internal
    structure.  Both source and destination should be of type struct
    sigevent* .  From Simon Liedl.
  - vfork():  vfork operation needs to allocate and copy the task
    argument too.  Also correction of the address correction cannot
    depend on the stack pointer since it is not available in all
    architectures.  Rather calculate the offset from the stack
    allocation pointer  From Xiang Xiao.
  - IRQ Dispatch:  Ensure vector never points to NULL since interrupt
    may happen before irq_initialize()  From Xiang Xiao.
  - Work Queue:  workqueues don't need set global data to zero since
    .bss is cleared automatically.  Removing this unnecessary
    initialization also avoids the loss the work items queued before
    initialization.  From ligd.
  - Work Queue:  Remove work queue polling delay to simplify the code
    logic and save the power.  From xuanlin.
  - syslog: Fix syslog crash on 64bit simulation. From anchao.
  - Pipes: Write to a pipe when there are no readers from the pipe
    should return -EPIPE.  From ligd.
  - System Calls:  Fix 6th parameter type of posix_spawnp in
    syscall.csv From Masayuki Ishikawa.
  - System Calls:  Remove unused SYS_nnetsocket from syscall.h.  Because
    SYS_nnetsocket is not implemented so far, it should be removed so
    that SYS_prctl can work correctly.  From Masayuki Ishikawa.
  - Binary Loader:  Refactor binfmt_exec.c.   This change also fixes an
    From Masayuki Ishikawa.
  - Binary Loader:  Re-architect the way that loadable ELF or NXFLAT
    modules are unloaded.  Memory resources must be recovered when the
    task loaded into memory exits.  The original implementation used
    the death-of-child SIGCHLD signal to perform the unload.  There are
    several problems with this:  It is overly complex, it requires that
    the parent task stay resident while the loaded task runs, and it
    has fatal logic flaws in the protected and kernel model builds
    because the user signal handler attempts to run in the kernel
    address space. This corrects the issue using a mindlessly simply
    BINFMT callback when the task exits.  From Gregory Nutt.
  - ELF Binary Loader:  Set priority level to default if parent has no
    priority.  From anchao.

* File System/Block and MTD Drivers:

  - Auto-mounter:  Ignore return values from work_cancel(). From
    Gregory Nutt.
  - SmartFS:  Fixed filesystem corruption when writing to small file
    after open(... O_APPEND).  From Dmitriy Linikov.
  - SmartFS stat():  A previous change added support for checking if a
    descriptor is a socket in fstat().' but it changed sys/stat.h in
    way that breaks smartfs file-type stat flags. CROMFS is similarly
    broken, as tools/gencromfs.c was not updated to match the
    sys/stat.h changes.  This commit fixes both issues.  It probably is
    not a good idea to use NuttX sys/stat.h bit-field values directly
    in stored structure of filesystem.  From Jussi Kivilinna.
  - HostFS:  Update duplicated definitions in HOSTFS that must match
    NuttX values.  From ligd.
  - HostFS: Ensure f_type is equal to HOSTFS_MAGIC.  From Xiang Xiao.
  - ROMFS:  Make romfs_devread32 more portable  From anchao.
  - TmpFS:  Correct logic in tmpfs_ioctl() that extracts the priv state
    structure from the file system structures.  It was not getting the
    right value and causing mmap() to fail.  Noted by Jesse. From
    Gregory Nutt.
  - ProcFS network statistics:  Was not handling the output correct for
    the case of an IEEE 802.11 device.  From Gregory Nutt.
  - ProcFS IRQs:  Fix occasional computation error when fracpart >=
    1000  From Xiang Xiao.

* Networking/Network Drivers:

  - TAP/TUN: Fixed custom tun devname formatting.  From Dmitriy Linikov.
  - Network Drivers:  This change attempts remove some long standard
    confusion in naming and some actual problems that result from the
    naming confusion.  The basic problem is the standard MTU does not
    include the size of the Ethernet header.  For clarity, I changed
    the naming of most things called MTU to PKTSIZE.  For example,
    user interface a little hostile.  People think of an MTU of 1500
    bytes, but the corresponding packet is really 1514 bytes (including
    the 14 byte Ethernet header).  A more friendly solution would
    configure the MTU (as before), but then derive the packet buffer
    size by adding the MAC header length.  Instead, we define the
    packet buffer size then derive the MTU.
    The MTU is not common currency in networking.  On the wire, the
    only real issue is the MSS which is derived from MTU by subtracting
    the IP header and TCP header sizes (for the case of TCP).  Now it
    is derived for the PKTSIZE by subtracting the IP header, the TCP
    header, and the MAC header sizes.  So we should be all good and
    without the recurring 14 byte error in MTU's and MSS's.  From
    Gregory Nutt.
  - netdev:  Fix.. Too many calls to net_unlock()  From Gregory Nutt.
  - IPv6:  There are many different checks for IPv6 multicast
    addresses. Most of the checks are different.  RFC 3513 clearly
    specifies how to detect an IPv6 multicast address:  they should
    begin with 0xffxx.  I did not change some of the checks in
    ipv6_input.c, however.  In that file, the comments indicate that
    the code should only pick of certain multicast address that begin
    with 0xff02.  From Gregory Nutt.
  - ARP:  Fix some backward logic in an if condition.  From Gregory
  - TCP Re-assembly:  Rename CONFIG_TCP_REASSEMBLY to
    CONFIG_IPv4_REASSEMBLY.  Add some fixes to get a clean compile with
    CONFIG_IPv4_REASSEMBLY enabled.  There are several problems with
    the current implementation:  It is untested (and depends on
    CONFIG_EXPERMIMENTAL).  It uses some Ethernet specific definitions
    (and depends on CONFIG_NET_ETHERNET).  There is only a single
    reassembly buffer.  The last two issues prevent use of this feature
    in any context where IPv4 packets may be reassembled for multiple
    network devices concurrently).  From Gregory Nutt.
  - TCP:  Set the default TCP MSS to the value required by RFC 879 and
    never change it under any circumstance unless the remote host
    requests a larger MSS via an option the TCP header.  From Gregory
  - TCP:  Fix a deadlock condition that can occur when (1) all network
    logic runs on a single work queue, (1) TCP write buffering is
    enabled, and (2) we run out of IOBs.  In this case, the TCP write
    buffering logic was blocking on iob_alloc() with the network
    locked.  Since the network was locked, the device driver polls that
    would provide take the write buffer data and release the IOBs could
    not execute.  This fixes the problem by unlocking the network lock
    while waiting for the IOBs.  From Gregory Nutt.
  - TCP: Remove g_netstats.tcp.syndrop++ from tcp_data_event()  From
    Masayuki Ishikawa.
  - TCP Monitor:  Fix net unlock issue when tcp close.  This bug could
    leave the net locked.  From zhangyuan7.
  - UDP:  When sending a broadcast (or multicast) packet do not attempt
    to look up the device by the destination IP address.  Rather, use
    the locally bound address for these cases to select the correct
    network device.  From Gregory Nutt.
  - UDP:  Restore some legacy behavior that was lost with the
    implementation of CONFIG_NET_UDP_BINDTODEVICE:  If no device has a
    local address when the broadcast packet is sent and the UDP socket
    is not bound to a device, there select some arbitrary device.  This
    is certainly lunacy in the case where there are multiple network
    devices registered because the wrong device will probably be
    returned.  It works find, however, for the legacy case where only a
    single network device is registered.  From Gregory Nutt.
  - UDP:  Fix for network byte-order issue when checking if an address
    is a multicast address.  From Jake Choy.
  - USRSOCK:  Correct of semaphore usage issues.  From Gregory Nutt.
  - USRSOCK:  Fix re-definitions of struct iovec.  From ligd.
  - ICMP/ICMPv6 Connection:  Change the type of id in
    icmpv[6]_findconn to uint16_t  From Xiang Xiao.
  - ICMP/ICMPv6:  Fix failure to poll ICMP socket issue.  From

* Wireless/Wireless Drivers:

  - XBee:  Fixes issue with timeouts.  Timeouts were in ticks but
    should have been in ms.  This caused false triggers of timeout
    causing redundant packets, etc.  From Anthony Merlino.
  - BCM43xx:  Add missing logic to the BCM43xx IEEE 802.11 driver to
    poll for more Tx data after the last transfer completes.  From
    Gregory Nutt.
  - BCM43xx:  Bring in some fixes from the 'Haywire' branch.  From
    Ramtin Amin.

* Common Drivers:

  - Audio:  Fix compile error in i2schar.c (CONFIG_DEBUG_ASSERTIONS=y)
    From Masayuki Ishikawa.
  - Audio I2S:  Fix bad NULL pointer check  From Juha Niskanen.
  - Input:  Fixed FT5x06 driver to correctly close (previously it
    unregistered interrupt handler during close).  From Marcin Wyrwas.
  - MMC/SD:  Fix an error that was causing SDIO multiple block
    transfers from achieving full performance.  From Bob Feretich.
  - Sensors:  Increases SPI frequency in MAX6675 from 400Khz to 4MHz.
    From Alan Carvalho de Assis.
  - Sensors:  Remove comment references to touchscreens from ADXL345
    driver. From Russ Webber.
  - Serial: Don't overwrite nwritten unconditionally on UART write
    failure.  From Xiang Xiao.
  - Serial DMA:  Move head/tail pointer reset to uart_recvchars_dma
    since dma may be still transferring in the background.  From Xiang
  - Serial DMA:  In DMA mode, the use of uart_disablexinit() is
    insufficient to protect a critical section.
    enter/leave_critical_section() must be used in those cases if
    CONFIG_SERIAL_DMA=y  From Xiang Xiao.
  - Serial DMA: Fix typo error in uart_recvchars_dma() From Xiang Xiao.
  - 16550 UART: u16550_txempty() should check UART_LSR_TEMT to avoid
    some data left in the transmit FIFO  From Xiang Xiao.

* ARMv7-A:

  - ARMv7-A (and i.MX6):  Add support for per-CPU IRQ and FIQ interrupt
    stacks (bugfix).  Add support so that up_assert will print the
    correct interrupt stack on an assertion (FIQ stack is still not
    printed).  From Gregory Nutt.

* ARMv7-R:

  - ARMv7-R:  Fix some wrong configuration of program status
    register.  PSR_E_BIT bit should be set for big endian system.
    PSR_A_BIT bis is set automatically as arm cortex-r4 reference
    manual 3.7.4. So we don't need to set this bit.  From EunBong Song.
  - ARMv7-R: Fix some wrong MPU register definition. Change
    MPU_RBAR_ADDR_MASK and MPU_RACR_TEX_SHIFT mask as arm cortex-r4
    reference manual.  Region Base Address Register 0-4 bits are
    reserved.  MPU Region Access control register type 3-5 bits.  From
    EunBong Song.

* ARMv7-M:

  - ARMv7-M, Cortex F7:  Add a configuration to enable workaround for
    r0p1 Errata 837070: Increasing priority using write to BASEPRI does
    not take effect immediately.  This update is required to be
    serialized to the instruction stream meaning that after this update
    completes, it takes effect immediately and no exceptions of lower
    priority than the new boosted priority can pre-empt execution.
    Because of this erratum, the priority boosting does not take place
    immediately, allowing the instruction after the MSR to be
    interrupted by an exception of lower priority than the new boosted
    priority. This effect is only limited to the next instruction.
    Subsequent instructions are guaranteed to see the new boosted
    priority. This was raised in Bitbucket issue 113 from Vadzim
    Dambrouski.  From Gregory Nutt.
  - ARMv7-M:  MPU: mpu_log2regionceil needs take into account the
    offset too  From Xiang Xiao.
  - ARMv7-M MPU:  The prototype of mpu_log2regionfloor() changed; an
    additional parameter was added.  However, none of the calls to
    mpu_log2regionfloor() were updated to pass the new, additional
    parameter.  From Gregory Nutt.

* Infineon XMC4xxx Drivers:

  - XMC4 SPI:  XMC4 SPI was working only for the first transfer  From
    Alan Carvalho de Assis.

* Microchip/Atmel SAMv7 Drivers:

  - SAMv7 MCAN: Correct an error in the BUS_OFF reporting.  In case of
    BUS_OFF the old implementation was leading to a package storm.  Now
    it reports the error condition BUS_OFF only once.  From Frank

* NXP/Freescale LPC43xx Drivers:

  - LPC43xx CAN:  Fix lpc43 CAN configuration.  Configuration settings
    were used and documented in README.txt files, but never in any
    Kconfig file.  From Gregory Nutt.
  - LPC43xx:  Make WWDT usable again.  LPC43xx WWDT driver was not
    updated when irq_dispatch grew an argument parameter.  Also fixes
    two typos and a naming inconsistency (WWDT vs. WWDG).  From Jakob

* NXP/Freescale Kinetis Drivers:

  - kinetis:  USB0 fix interrupt storm on error.  The ERROR bit of
    USBx_ISTAT needed to be cleared once an error occurs.  From David
  - Kinetis:  SDHC fix SDIO driver so that DMA works. There were 2
    problems. The first was that the interrupt did test DINT and raise
    a completion events. But since DINT is just an indication of DMA
    completion, TC is a valid way to determine that the transfer is
    complete.  The second problem is that Software Reset For DAT Line
    SDHC_SYSCTL[RSTD] clears the bits 24-0 in SDHC_PROTO this looses
    the wide bus setting DTW  From David Sidrane.
  - Kinetis:  (1) PIT add Liftime and Chaining, (2) flexcan fix
    duplicate line and ordering, (3) kinetis_lowput.c LPUART data
    format with parity fix.  The 9-bit data mode is typically used with
    parity to allow eight bits of data plus the parity, (4) lowputc
    LPUART_BAUD_INIT has to be defined.  Build fails with test case
    enable LPUART0 and make UART1 console.  If HAVE_LPUART_DEVICE is
    defined then LPUART_BAUD_INIT has to be defined even if the LPUART
    is not the console  From David Sidrane.
  - Kinetis:  I2C ensure timeout on bus error.  The code had a dead
    wait on I2C_S_BUSY. Noise on the bus would cause the driver to
    hang.  Add timeout on invalid states of I2C_S_BUSY to allow the
    upper layers do deal with restart or abort.  From David Sidrane.

* NXP i.MXRT Drivers:

  - i.MXRT Ethernet:  I finally got the Ethernet CRC32 to work properly
    after the FAE pointed me in the right direction:  (1) Added CRC32
    functions for multicast address filtering, (2) Do not reset PHY
    settings when doing an ifup, (2) Use chip's unique id as the device
    MAC, and (4) Enable discard enet frames with errors at PHY layer.
    From Jake Choy.

* On Semi LC823450 Boards:

  - LC823450-XGEVK:  Fix parallel build on lc823450-xgevk.  This change
    fixes an archive file (*.a) corruption by locking $(TOPDIR).
    Please note that locking the current directory is insufficient
    because some archive files such as libapps.a are specified with
    absolute path.  From Masayuki Ishikawa.
  - LC823450-XGEVK: Change IOB related params for rndis.  Since TCP
    flow control scheme was changed, HTTP audio streaming has not been
    working. These IOB params are not optimized but HTTP audio
    streaming now works.  From Masayuki Ishikawa.

* STMicro STM32:

  - STM32 F7:  Fix compile error caused by intentional use of fall
    through From Daniel Agar.

* STMicro STM32 Drivers:

  - STM32 F1-F4:  Port Bob Feritich's change to STM32 F2 and F4 which
    appear to have identical SD support and I/O compensation
  - STM32 F1-F4, STM32 F7, and STM32 L4:  The STM32 RTC driver was
    being selected by the global CONFIG_RTC option.  That is in
    correct.  For example, if you want to disabled the STM32 RTC and
    use an external RTC you cannot because the external RTC also
    depends on the global CONFIG_RTC.  The solution is to add a new
    CONFIG_STM32xx_RTC configuration option the permits to you select
    or deselect the STM32 RTC but still be able to selecte the external
    RTC.  From Gregory Nutt.
  - STM32 F3 I2C:  Fix compile error with I2C reset.  From Juha
  - STM32 F7 Serial:  Fix ioctl TIOCSSINGLEWIRE The TRM notes that UE
    must be disabled in order to write HDSEL in USART_CR3. This was not
    being done, so calls to TIOCSSINGLEWIRE were silently failing.
    This change checks the state of UE in USART_CR1, clears the UE bit
    before writing HDSEL, then re-enables it if neccesary.  From Kurt
  - STM32 F7 DMA:  DMA macros did not account for the increase from 8
    to 16 DMA channels.  From Gregory Nutt.
  - STM32 F7 I2C:  I2C reset Configure I2C pins as GPIO output.  Pins
    were reset to inputs in the deinit(). This resets them to outputs.
    From David Sidrane.
  - STM32 F7:  All of the SDMMC pins were set to 50 MHz, but not the
    clock. This sets the clock to 50 MHz also.  This combined with
    turning on I/O compensation makes intermittent failures go away.
    From Bob Feritich.
  - STM32 F7:  Port Bob Feritich's change to SDMMC2 and to all other
    STM32 F7 architectures.  Also add a configuration option to
    automatically enable I/O compensation.  From Gregory Nutt.
  - STM32 F7 SDMMC:  Fix data timeout errors with multi-block
    transfers.  From Bob Feretich.
  - STM32 L4:  Corrects some mistakes in pin definitions for the
    STM32 L4 family.  According to datasheet of STM32L496xx, STM32L475xx
    and STM32L443XX the AF2 of PE14 is  TIM1_BKIN2 not TIM2_BKIN.  From
    Daniel Pereira Carvalho.
  - STM32 L4:  Avoid using redundant CONFIG_STM32L4_STM32L4X2.  This is
    almost always same as CONFIG_STM32L4_STM32L4X3. Avoid duplication
    to reduce macro clutter.  This patch limits
    CONFIG_STM32L4_STM32L4X2 usage to dependency tracking and pinmap.
    Also enable ADC for CONFIG_STM32L4_STM32L4X5 (untested, but same
    RM).  From Juha Niskanen.
  - STM32 H7 Serial: don't include stm32_dma.h  From raiden00pl.

* STMicro STM32 Boards:

  - STM32F4-Discovery:  Fix pca9635pw LED driver compilation on
    STM32F4-Discovery.  From Alan Carvalho de Assis.
  - STM32F4-Discovery:  Krassimir Cheshmedzhiev claims that sys/types.h
    needs to be included in the RGB LED file to avoid undeclared 'OK'
    From Gregory Nutt.
  - STM32F4-Discovery:  Missing EXTERN(_vectors) in linker script.
    From Gregory Nutt.
  - Nucleo-L422KC:  Fix RAM size; STM31L4x2xx has only 64Kb of RAM.
    Remove references to I2C and SDIO:  There is no I2C2 or SDIO on the
    STM32F4x2xx.  From Daniel P. Carvalho.
  - Nucleo-L422KC:  Fix stm32_userleds.  After change LD2 to LD3 in
    board.h stm32_userleds.c was broken.  From Daniel P. Carvalho.
  - Nucleo-L422KC:  Fix TIMx clock configuration.  Also removes
    definitions related to timers not available in the STM32L432KC.
    From Daniel Pereira Carvalho.
  - Nucleo-L452RE:  Fix TIMx clock configuration.  This is cloned from
    similar change to the Nucleo-L422KC.  Also fixes DAC build
    failure.  From Juha Niskanen.
  - B-L475E-IOT01A:  Fix copy paste errors in names:
    stm32_bringup->stm32l4_bringup.  Noted by Freemans Goden.  From
    Gregory Nutt.
  - STM32VL-Discovery:  Changed the status LED to be the green one as
    mentioned in the README file. Removed the global array for buttons
    and replace it with the only button. Improve defconfig for the nsh
    configuration.  From Ouss4.

* C Library/Header Files:

  - libc audio:  Call nxsem_destroy in apb_free.  From Xiang Xiao.
  - libc netdb:  The 'port' argument to the static alloc_ai() function
    is always in network byte order.  However, that static function was
    still calling HTONS() on the port, incorrectly converting it back
    to host byte order.  From Gregory Nutt.
  - libc netdb: Fix a link error in lib_gethostbynamer.c with protected
    build.  NOTE: g_lo_ipv4addr also exists in
    net/loopback/lo_globals.c which can be linked with kernel build
    only. From Masayuki Ishikawa.
  - libc unistd :  Fix backward conditional logic in Kconfig.  From
    Gregory Nutt.
  - include/nuttx/compiler.h:  Fix warning: __cplusplus is not defined.
    Some gcc derived compiler do not define __cplusplus  From Xiang
  - include/nuttx/fs/binfs.h:  Fix warning:  Type defaults to 'int' in
    declaration of 'mountpt_operations'  From Xiang Xiao.
  - include/nuttx/net/ethernet.h:  Remove CONFIG_NET_ETHERNET guard
    From Xiang Xiao.
  - include/nuttx/semaphore.h: don't include nuttx/fs/fs.h.  (1) Avoid
    nested loops if CONFIG_SIG_EVTHREAD enabled, (2) semaphore.h
    doesn't depends on fs.h.  From Gregory Nutt.
  - include/crc64.h:  Fix warning: integer constant is too large for
    its type  From Xiang Xiao.
  - include/limits.h and include/sys/types.h:  Fix warning about
    'SIZE_MAX' redefined.  include/nuttx/usb/audio.h: Fix warnings due
    to '-' used whete '_' intended.  From Xiang Xiao.
  - include/spawn.h:  Fix posix_spawnattr_destroy warning:  'the
    address of attr will always evaluate as true'  From Xiang Xiao.
  - include/sys/types:  Move wint_t and wctype_t from wchar.h to
    types.h.  This change is compatible as before since wchar.h
    include types.h indirectly.  This fixes a compilation error with
    newlib's math.h:  'unknown type name wint_t'  From Xiang Xiao.
  - apps/include/netutils/netlib.h:  Eliminate a warning about
    AF_UNSPEC and AF_INET not defined.  From Gregory Nutt.

* Build System:

  - Build System:  Fix parallel build in making context.  This change
    avoids running $(MKSYSCALL) and .context in parallel and ensures
    that tools/mksyscall is built before it is actually used.  From
    Masayuki Ishikawa.
  - Kconfig files:  Fix several errors noted by Alex Denisov in
    Bitbucket issue 115.  From Gregory Nutt.
  - apps Build System:  Fix an error when building apps/ without
    nuttx/, using only the NuttX export package and assuming that the
    nuttx/ directory in not even present.  In this case, the problem
    fixed where the apps/Make.defs file was selecting tools from the
    /tools directory which does not exist because TOPDIR=apps/import.
    Instead, for this build case, I have not thought of any option but
    to duplicate scripts as necessary in the apps/tools directory.
    Also added a top-level target to compile the symbol table.  Misc
    fixes: quoting in scripts, some errors in script syntax.  From
    Gregory Nutt.
  - apps/  If a loadable module is generated the we
    need to add logic to remove the loadable module in the 'make
    clean' logic.  From Gregory Nutt.

* Tools:

  - nuttx/tools/Makefile.unix:  Was not cleaning up export directory
    if it was left from a failed export.  From Gregory Nutt.
  - apps/tools: Fix an error in  From Masayuki Ishikawa.

* NSH Library: apps/nshlib:

  - apps/nshlib:  Fix 'while' and 'until' loop condition The loop
    condition logic was inverted:  'while true; do echo "test"; done'
    would exit immediately, while using 'until' would stay in the
    loop.  This is the opposite of how it is supposed to work.  The
    reason is that 'state' was set wrong because 'whilematch' is a
    bool.  From Beat Küng.
  - apps/nshlib:  I was able to cause an assertion with some typos in
    testing the 'fi' command.  Not an important thing, but this will
    protect against the assertion.  From Gregory Nutt.
  - apps/nshlib:  Increase the default configuration for the maximum
    number of command line arguments to 7 (CONFIG_NSH_MAXARGUMENTS).
    This is needed for 'mount' with the -o option.  From Xiang Xiao.
  - apps/nshlib:  Do not dereference NULL 'pstate' in nsh_console.c.
    From Juha Niskanen.

* Examples/Tests: apps/examples:

  - apps/examples:  Remove illegal calls into OS to initialize BINFMT
    support.  This must be moved to the board initialization logic
    within the OS. From anchao.
  - apps/examples/nettest:  Fix typo: NET_LOOPBACK ->
    CONFIG_NET_LOOPBACK nettest: Fix compilation error. Should enable
    NET_SETSOCKOPT for preventing compilation error.  From EunBong Song.
  - apps/examples/ostest:  Signal handling tests should use the same
    configurable stack size as used in other tests, not
    PTHREAD_STACK_DEFAULT.  From Gregory Nutt.
  - apps/examples/ostest:  Attempt to make the nested signal test
    compatible with the suspend/resume test.  Some signals cannot be
    caught when the suspend/resume configuration is in place.  From
    Gregory Nutt.
  - apps/examples/smps:  Fixes in some printf and in Kconfig. From
    Mateusz Szafoni.

* System Utilities: apps/system:

  - apps/system/cu: (1) Protect from possible re-definition of signal
    values, (2) Fix CU ctrl-C hand when remote core hang.  From ligd.
  - apps/system/i2c:  Fix a backward comparison in i2c_main.c.  Noted
    by Jakob Haufe.  From Gregory Nutt.
  - apps/system/nsh: Fix compile errors with
    CONFIG_EXAMPLES_NSH_SYMTAB=y.  From Masayuki Ishikawa.
  - apps/system/ping and ping6:  Send ID and seqno in network byte
    order.  From Xiang Xiao.
  - apps/system/ping and ping6:  Change dependency in ping and ping6
    Kconfig.  These may be implemented in users sockets and, hence,
    may need to be avaiable even if ICMP and ICMPv6 sockets are not
    support.  From Xiang Xiao.
  - apps/system/system:  Add 'const' to make function prototype
    compatible with requirement  From Xiang Xiao.
  - apps/system/zmodem:  Fix error "sz_main.o: No such file or
    directory"  From Xiang Xiao.

* Network Utilities: apps/netutils:

  - apps/netutils/ftpc:  Fix handling of url-encoded strings  From
    Dmitriy Linikov.
  - apps/netutils/ping:  Remove unsupported ping.  netutils/ping is not
    supported anymore.  It's better to remove this folder for
    preventing confusing.  ping is supported by system/ping.  From
    EunBong Song.

* Wireless Utilities: apps/wireless:

  - apps/wireless/wapi:  Remove dependency on CONFIG_EXPERIMENTAL from
    Kconfig  From Gregory Nutt.

* GPS Utilities: apps/gpsutils:

  - apps/gpsutils/minmea:  Include wchar.h in minmea.c file to fix
    wint_t error  From Alan Carvalho de Assis.

* Interpreters:  apps/interpreters:

  - Remove apps/interpreters/micropthon.  There are several reasons
    for this.  (1) the current version 1.3.8 is very old and no one is
    supporting it.  (2) the port only includes the core micropython
    logic and none of the Python libraries.  As such it is useless in
    any real application.  (3) There have recently been compile
    failures reported.  It looks like this is due to changes in newlib
    based toolchains that now bring in incompatible newlib header
    files.  See issue 104 at
    With no one dedicated to the support of micropython, it can no
    longer be carried in the NuttX apps/ repository.  From Gregory Nutt.