NuttX-7.19 Release Notes

The 119th release of NuttX, Version 7.19, was made on December 26, 2016, and is available for download from the Bitbucket.org website. Note that release consists of two tarballs: nuttx-7.19.tar.gz and apps-7.19.tar.gz. These are available from:

https://bitbucket.org/nuttx/nuttx/downloads
https://bitbucket.org/nuttx/apps/downloads

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

Additional new features and extended functionality:

* Core OS:

  - sched/semaphore, sched/phread/, libc/semaphore, libc/pthread: Add
    pthread_mutexattr_get/set_protocol and non-standard
    sem_get/set_protocol. These may use to enable or disable priority
    inheritance on a single semaphore.
  - Spinlocks:  Added capability to provide architecture-specific memory
    barriers.
  - SMP: Add spin_trylock().  Use this in conditions where other CPUs need
    to stopped but we cannot call enter_critical_section().
  - sched note:  Extend OS instrumentation to include some SMP events.
    Also add spinlock instrumentation;  In SMP configurations, add a
    filter mask to log only notes from certain CPUs.
  - sched note:  Permit spinlock and critical section notes in in-memory
    buffer iff sched_not_get() interfaces is disabled.
  - sched note:  Add additional note to see if/when CPU is started in SMP
    mode.
  - sched note:  Record ID enumeration now results on constant values; ID
    values do not change with configuration.  This makes writing post-processing software much easier.
  - boardctl:  Add new boardctl() command, BOARDIOC_NX_START, to start the
    NX server as a kernel thread.
  - pthreads:  Add pthread_cleanup_push() and pthread_cleanup_pop().
  - pthreads: Added pthread_setcanceltype() and pthread_testcancel().
  - pthreads: Add support for cancellation points.
  - task_delete() now obeys all cancellation point semantics.
  - Add task_setcancelstate(), task_setcanceltype(), and
    task_testcancel().  These are non-standard interfaces analogous to the
    correponding pthread_ interfaces that provide cancellation controls
    for tasks.

* Graphics/Display Drivers:

  - boardctl:  Add new boardctl() command, BOARDIOC_NX_START, to start the
    NX server as a kernel thread.

* Networking/Network Drivers:

  - Network drivers:  Add option to use low-priority work queue to all
    Ethernet and MAC level drivers.
  - Network Drivers:  Adapt all Ethernet (and other MAC) drivers to work
    as though CONFIG_NET_MULTIBUFFER were set.  Remove all references to
    CONFIG_NET_MULTIBUFFER.
  - Eliminate CONFIG_NO_NOINTS.  There is no longer any support for
    interrupt level processing of the network stack. Lots of files changed.

* Other Common Device Drivers:

  - Vishay VEML6070:  Add Vishay VEML6070 driver.  From Alan Carvalho de
    Assis.

* ARMv7-A

  - ARMv7-A/i.MX6:  Add SCU register definitions.  Add some controls to
    enable SMP cache coherency in SMP mode.  Makes no difference, however
    -- cache still incoherent on i.MX6.
  - ARMv7 GIC: SGIs are non-maskable but go through the same path as
    other, maskable interrupts.  Added logic to serialize SGI processing
    when necessary.

* Atmel SAM3/4:

  - SAM3/4:  Add SMP support for the dual-core SAM4CM.  From Masayuki
    Ishikawa.

* Atmel SAM3/4 Drivers:

  - Add support for the SAM5CMP-DB board.  From Masayuki Ishikawa.

* Atmel SAM3/4 Boards:

  - SAM4CMP-DB:  Add support for the Atmel SAM4CMP-DB board running in an
    SMP configuration.  From Masayuki Ishikawa.
  - SAM4CMP-DB: Add hooks to auto-mount the procfs file system on startup
    in board bring-up logic.

* Atmel SAMV7 Drivers:

  - SAMv7:  Register the watchdog device at the configured device path
    CONFIG_WATCHDOG_DEVPATH vs. hard-coded /dev/wdt.  From Frank Benkert.

* Calypso

  - Calyps: Remove all Calypso board configurations.  Remove Calypso
    architecture support and support for Calypso SERCOMM driver.

* Misoc LM32:

  - Misoc LM32:  Adds basic support for the Misoc procoessors and the LM32
    in particular.  From Ramtin Amin.
  - Misoc LM32:  Add signal handling logic.  From Ramtin Amin.
  - Misoc LM32:  Add logic to flush/invalidate caches.  From Ramtin Amin.

* Misoc LM32 Drivers:

  - Misoc LM32 Serial:  Add interrupting Misoc serial driver.  From Ramtin
    Amin.
  - Misoc LM32 Timer:  Add timer driver.  From Ramtin Amin.
  - Misoc LM32:  Add Misoc Ethernet driver  From Ramtin Amin.

* Misoc LM32 Boards:

  - Misoc LM32 Qemu:  Board support for testing Misoc LM32 with Qemu. From
    Ramtin Amin.
  - Misoc LM32 Qemu:  Integrate network support into configs/misoc/hello.
    From Ramtin Amin.
  - Misoc LM32 Qemu:  Remove configs/misoc/include/generated directory.  I
    suppose the the intent now is that this is a symbolic link?  DANGER!
    This means that you cannot compile this code with first generating
    these files a providing a symbolic link to this location!   There is a
    sample directory containing generated sources.  This is really only
    useful for performing test builds.  You really must generate the Misoc
    architecture for a real-life build.  From Ramtin Amin.

* NXP Freescale i.MX6 Drivers:

  - i.MX6:  Add an untested SPI driver taken directly from the i.MX1 port.

* NXP Freescale Kinetis:

  - Kinetis:  Added missing headers.  Kinetis broke out SPI to
    kinetis/kinetis_spi.h. Broke out DMA to use the modern NuttX chip
    inclusion - still STUBS.  Add Kinetis support for ARMV7-M Common
    Vector and FPU.  Allow CONFIG_ARMV7M_CMNVECTOR,
    CONFIG_STACK_COLORATION, CONFIG_ARCH_FPU.  Fix  i2c driver offset
    swapped for value in kinetis_i2c_putreg.  From David Sidrane.

* NXP Freescale Kinetis Drivers:

  - Kinetis: Add UID Unique ID.  From Neil Hancock.

* NXP Freescale Kinetis Boards:

  - Freedom-K64F board: Add support for UID Unique ID.  From Neil Hancock.

* NXP Freescale LPC17xx Boards:

  - Olimex-LPC1766-STK:  Enable procfs in NSH configuration. Automount
    /proc on startup.

* NXP Freescale LPC43xx Drivers:

  - LPC43xx: Add timer driver:  From Alan Carvalho de Assis.
  - LPC43xx GPDMA driver:  The GPDMA block is basically the same as the
    LPC17xx.  Only the clock configuration is different and LPC43xx has
    four different DMA request sources, where LPC17xx has only two. From
    Alan Carvalho de Assis.

* NXP Freescale LPC43xx Boards:

  - Bambino 200E:  Add basic support to Micromint Bambino 200E board.
    This includes contributions from Jim Wolfman.  From Alan Carvalho de
    Assis.
  - Bambino 200E:  Add support for timer driver.  From Alan Carvalho de
    Assis.

* RGMP:

  - Remove RGMP and RGMP drivers.

* RISC-V:

  - RISC-V: Add support for the RISC-V architecture and
    configs/nr5m100-nexys4 board.  The board support on this is pretty
    thin, but it seems like maybe a good idea to get the base RISC-V stuff
    in since there are people interested in it.  From Ken Pettit.

* STMicro STM32 Drivers:

  - STM32 F3:  Implemention of the STM32 F37xx SDADC module. There are
    also changes to ADC, DAC modules. SDADC has only been tested in DMA
    mode and does not support external TIMER triggers. This is a work in
    progress.  From  Marc Rechté.
  - STM32 F3:  Add PWM driver support for STMF37xx.  The changes have been
    tested successfuly for TIM4 and TIM17 (different IPs).  From  Marc
    Rechté.
  - STM32 F4:  Support oversampling by 8 for the STM32 F4. From David
    Sidrane.
  - STM32 F4:  Added Timers 2-5 and control of SAI and I2S PLLs.  Added
    support for stmf469 SAI and I2S PLL configuration and STM446 fixes.
    From David Sidrane.
  - STM32 F4:  Expanded OTGFS support to stm32F469 and stm32f446.  Added
    missing bit definitions, Used stm32F469 and stm32f446 bit
    definitions,  Removed unsed header file.  From David Sidrane.
  - STM32 F4:  Allow dma in 1 bit mode in STM32F4xxx.  From David Sidrane.
  - STM32 F7:  Allow the config to override the clock edge setting.  From
    David Sidrane.
  - STM32 L4:  Support Complementary PWM outputs on STM32L4.  From
    Sebastien Lorquet.
  - STM32 L4:  Add implementation of dumpgpio for stm32l4, was required
    for pwm debug. From Sebastien Lorquet.

* STMicro STM32 Boards:

  - STM32F103 Minimum:  Add button support.  From Alan Carvalho de Assis.
  - STM32F103 Minimum:  Add support to PWM on STM32F103-Minimum board.
    From Alan Carvalho de Assis.
  - STM32F103 Minimum:  Add RGB LED support on STM32F103 Minimum board.
    From Alan Carvalho de Assis.
  - STM32F103 Minimum:  Add Vishay VEML6070 driver support to the
    STM32F103-Minimum board.  From Alan Carvalho de Assis.
  - Nucleo-F303RE:  Add STM32 F303RE hello configuration.   From Marc
    Rechté.
  - Nucleo-L476:  Support PWM testing on board Nucleo L476.  From
    Sebastien Lorquet.
  - Nucleo L476:  Add support for timers to Nucleo L476.  From Sebastien
    Lorquet.
  - Hymini STM32v:  Enable CONFIG_RTC in the hymini-stm32v/nsh2
    (kitchensink) config. From Maciej Wójcik.
  - Olimex STM32-p407:  Add support for the Olimex STM32 P407 board.

* TI Tiva Drivers:

  - Tiva PWM: Support PWM_PULSECOUNT feature for TI tiva.  From Young.Mu.

* Xtensa/ESP32

  - Xtensa ESP32:  Basic architectural support for Xtensa processors and
    the Expressif. ESP32 added.
  - Xtensa ESP32:  Add EXPERIMENTAL hooks to support lazy Xtensa
    co-processor state restore in the future.
  - Xtensa ESP32:  Basic port is function in both single CPU and dual CPU
    SMP configurations.  There is an NSH configuration for each CPU
    configuration.  Outstanding issues include missing clock configuration
    logic, missing partition tables to support correct configuration from
    FLASH, and some serial driver pin configuration issues.
  - Xtensa ESP32: Add stack checking logic.

* Xtensa/ESP32 Boards:

  - ESP32 Core v2:  Basic support for Expressif ESP32 Core v2 board
    added.  The initial release includes an NSH and an SMP test
    configuration.
  - ESP32 Core v2:  Add configuration to support linking NuttX for
    execution out of IRAM.
  - ESP32 Core v2:  Automatically mount /proc at start-up.
  - ESP32 Core v2:  Add an OS test to verify the port.

* C Library/Header Files:

  - libc/locale:  Add a dummy setlocale() function to avoid drawing the
    function from newlib.  Add clocale header file.
  - include/locale.h:  Modify locale.h to add localeconv() and lconv
    structure.  From Alan Carvalho de Assis.
  - libc/locale:  Allows c++ code to compile with or without
    CONFIG_LIBC_LOCALE and will generate a link error if
    CONFIG_LIBC_LOCALE is not defined and setlocale is referenced. With
    CONFIG_LIBC_LOCALE defined setlocale will act as if MB string is not
    supported and return "C" for POSIX. C and "". From David Sidrane.
  - libc/wchar:  Add wcslen, wmemchr, wmemcmp, wmemcpy wmemset, btowc,
    mbrtowc, mbtowc, wcscmp, wcscoll, and wmemmove to NuttX.  From Alan
    Carvalho de Assis.
  - libc/wctype:  Add functions wcrtomb, wcslcpy, wcsxfrm, wctob, wctomb,
    wctype, localeconv, strcoll, strxfrm, swctype, towlower, towupper and
    wcsftime.   Add wctype.h; Move lib_wctype.c to libc/wctype.  From Alan
    Carvalho de Assis.
  - include/ctype.h : Add isblank() macro to ctype.h.  From Alan Carvalho
    de Assis.
  - lic/stdlib:   Add strtof() and strtold() as simply a copy of strtod
    with types and limits changed.
  - sscanf():  Use strtof() instead of strtod() if a short floating point
    value was requested.  The should help performance with MCUs with
    32-bit FPU support with some additional code size.
  - sscanf(): Add scansets to the scanf function. Enabled
    CONFIG_LIBC_SCANSET option.  From  Aleksandr Vyhovanec.
  - include/inttypes.h: Add architecture-specific inttypes.h.  From Paul
    A. Patience.
  - C Library:  Allow option to enable IP address conversions even when
    the IP address family is not supported.

* Build/Configuration System:

  - The Smoothie project needs to compile C++ inside config/boardname/src/
    to use with High Priority Interruption, then I modified the board
    configs Makefile to support it.  It works fine for the first time
    compilation, but if we execute "touch config/boardname/src/Pin.cxx"
    and execute "make" it will not detect that Pin.cxx was modified. I
    think there is some other place I should modify, but I didn't find
    it.  From Alan Carvalho de Assis.

* Tools:

  - tools/: Add tools/showsize.sh.

* NSH: apps/nshlib:

  - NSH: dd command will show statistics.  From  Masayuki Ishikawa.

* Applications: apps/system:

  - apps/system/sched_note:  Extend to include additions to instumentation
    for SMP.
  - apps/system/sched_note:  Add support for spinlock notes.
  - apps/system/sched_note:  Add support for new scheduler instrumentation.

* Platforms: apps/platform:

  - ESP32 Core v2:  Add platform support for the ESP32 core v2 board.
  - Olimex STM32-p407: Add platform support for the Olimex STM32 P407.

* Graphics: apps/graphics

  - graphics/traveler/tcledit and libwld:  Add an X11 Tcl/Tk tool that can
    be used to edit Traveler world files.
  - Graphics: Remove all NX server taks.  Instead, call boardctl() to the
    NX server kernel thread.

* Applications: apps/examples:

  - examples/buttons:  Add a new buttons example that uses the button
    character driver instead of the architecture buttons directly. From
    Alan Carvalho de Assis.
  - examples/cctype:  Add an example to verify cctype functions.
  - Remove RGMP example.
  - examples/ostest:  Extend the pthread cancellation test to exercise
    pthread_cleanup_push() (and pthread_cleanup_pop() indirectly via
    pthread_cancel() and pthread_exit().
  - examples/ostest: enhance pthread cancellation test some.

Works-In-Progress:

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

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:

  - sched/semaphore: Within the OS, when a thread obtains a semaphore
    count it must call sem_addholder() if CONFIG_PRIORITY_INHERITANCE is
    enabled.  If a count is available, then sem_wait() calls
    sem_addholder(), otherwise it waited for the semaphore and called
    sem_addholder() when it eventually received the count.  This caused a
    problem when the thread calling sem_wait() was very low priority.
    When it received the count, there may be higher priority threads
    "hogging" the CPU that prevent the lower priority task from running
    and, as a result, the sem_addholder() may be delayed indefinitely.
    The fix was to have sem_post() call sem_addholder() just before
    restarting the thread waiting for the semaphore count.  This problem
    was noted by Benix Vincent who also suggested the solution.
  - Many files: Make sure that priority inheritance is not enabled for
    semaphores whose primary use is signaling (vs locking of resources) by
    calling sem_setprotocol().
  - sched/semaphore:  sem_trywait() no longer modifies the errno value
    UNLESS an error occurs.  This allows these functions to be used
    internally without clobbering the errno value.  From Freddie Chopin.
  - sched/clock: Correct clock initialization.  The correct range for the
    month is 0-11 but is entered as 1-12 in the .config file.  Add ranges
    to START_YEAR, MONTH, and DAY in sched/Kconfig.
  - sched/clock:  Correct calculation for the case of Tickless mode with a
    32-bit timer.  In that case, the calculation was returning millisecond
    accuracy.  That is not good when the timer accuracy is < 1 msec.  From
    Rajan Gill.
  - Work Queue:  When queuing new LP work, don't signal any threads if
    they are all busy.  From Heesub Shin.
  - Work Queue: Signal sent from work_signal() may interrupt the low
    priority worker thread that is already running. For example, the
    worker thread that is waiting for a semaphore could be woken up by the
    signal and break any synchronization assumption as a result. It also
    does not make any sense to send signal if it is already running and
    busy. This change fixes it.  From Heesub Shin.
  - Fix DEBUGASSERT() in group_signal.c.  From Masayuki Ishikawa.
  - Eliminate bad boardctl() commands:  Remove all references to
    BOARDIOC_PWMSETUP and board_pwm_setup(). Remove all references to
    BOARDIOC_ADCSETUP and board_adc_setup(). Remove
    BOARDIOC_CAN_INITIALIZE.  CAN initialization is now done in the board
    initialization logic just like every other device driver.
  - pthreads:  Fix an error in pthread_mutex_destroy().  An error could
    occur while destroying a mutex after a pthread has been canceled while
    holding the mutex.
  - task_restart: Make sure new task starts with pre-emption disabled and
    not in a critical section.
  - Enter/leave Critical Sections.  Major redeign to
    enter/leave_critical_section logic to deal with the case where
    interrupts are disabled only on the local CPU.  In this case, some
    rather complex spinlocks must be used to maintain the critical section
    accross all CPUs.
  - SMP Critical Sections:  Fixes for the SMP case: (1) Change order for
    SMP case in enter_critical_section:  (1) Disable local interrupts
    BEFORE taking spinlock and (2) If SMP is enabled, if any interrupt
    handler calls enter_critical_section(), it should take the spinlock.
  - SMP wdogs:  Wdog timers use a tasking interface that to manipulate
    wdogs, and a different interface in the timer interrupt handling logic
    to manage wdog expirations.  In the single CPU case, this is fine.
    Since the tasking level code calls enter_critical_section, interrupts
    are disabled and no conflicts can occur.  But that may not be the case
    in the SMP case.  Most architectures do not permit disabling
    interrupts on other CPUs so enter_critical_section must work
    differently:  Locks are required to protect code. this change adds
    locking (via enter_critical section) to wdog expiration logic for the
    the case if the SMP configuration.
  - SMP vfork():  Fix a race condition in the SMP case.  Existing logic
    depended on the fact that the child would not run until waitpid was
    called because the child had the same priority as the parent.  BUT in
    the SMP case that is not true... the child may run immediately on a
    different CPU.
  - SMP: This change adds a new internal interfaces and fixes a problem
    with three APIs in the SMP configuration.  The new internal interface
    is sched_cpu_pause(tcb).  This function will pause a CPU if the task
    associated with 'tcb' is running on that CPU.  This allows a different
    CPU to modify that OS data stuctures associated with the CPU.  When
    the other CPU is resumed, those modifications can safely take place.
    The three fixes are to handle cases in the SMP configuration where one
    CPU does need to make modifications to TCB and data structures on a
    task that could be running running on another CPU.  Those three cases
    are task_delete(), task_restart(), and execution of signal handlers.
    In all three cases the solutions is basically the same:  (1) Call
    sched_cpu_pause(tcb) to pause the CPU on which the task is running,
    (2) perform the necessary operations, then (3) call up_cpu_resume() to
    restart the paused CPU.
  - SMP: Add logic to avoid a deadlock condition when CPU1 is hung waiting
    for g_cpu_irqlock with interrupts interrupts and CPU0 is waiting for
    g_cpu_paused.
  - SMP: Enforce this rule: Tasks which are normally restored when
    sched_unlock() is called must remain pending (1) if we are in a
    critical section, i.e., g_cpu_irqlock is locked , or (2) other CPUs
    still have pre-emption disabled, i.e., g_cpu_schedlock is locked.  In
    those cases, the release of the pending tasks must be deferred until
    those conditions are met.

* File System/Block Drivers/MTD Drivers:

  - AT24XX EEPROM MTD driver:  Added EEPROM timeout.  Fromo Aleksandr
    Vyhovanec.
  - fs/procfs:  Fix procfs status for SMP case.

* Graphics/Graphic Drivers:

  - Fonts:  Correct some default font IDs.  From Pierre-Noel Bouteville.

* Common Drivers:

  - usbhost/enumerate:  Fix possible buffer overwrite.  From Janne Rosberg.
  - usbhost/composite:  Fix compile; missing semicolons.  From Jann Rosberg.
  - syslog:  Fixes required for file syslog output.  From Max Kriegleder.
  - SPI configuration:  Fix Kconfig warning.  This change moves the
    ARCH_HAVE_SPI options outside the check for SPI.  Those options don't
    depend on SPI, and Kconfig files  in arch/ enable them even if SPI
    isn't  enabled.  Source the driver's Kconfig in drivers/Kconfig only
    if support for the driver is enabled prevents us from defining these
    ARCH_HAVE options in the driver's Kconfig. We should probably remove
    the other checks in drivers/Kconfig and check if the drivers are
    enabled only in their Kconfig.  From Paul A. Patience.
  - drivers/timer:  Remove the timer driver TIOC_SETHANDLER IOCTL call.
    This calls directly from the timer driver into application code.  That
    is non-standard, non-portable, and cannot be supported.  Instead, add
    timer driver hooks to support signal notification of timer
    expiration.  Signal notification logic added by Sebastien Lorquet.
  - All timer lower half drivers.  Port Sebastien's changes to all other
    implementations of the timer lower half.
  - USB MSC Device:  Fix length of mode6 sense reply packet.  From
    Wolfgang Reißnegger.
  - USB Composite Host:  Fix end offset in usbhost_copyinterface().  From
    Janne Rosberg.
  - USB CDC/ACM Host:   Add CDC_SUBCLASS_ACM and CDC_PROTO_ATM to
    supported class and proto.  From Janne Rosberg.
  - SSD1306:  Fix errors in SPI mode configuration.  From Gong Darcy.
  - CDC/ACM Device Class:  uart_ops_s portion of cdcacm will not be
    initalized with correct functions if CONFIG_SERIAL_DMA is selected.

* Networking/Network Drivers:

  - drivers/net/tun.c: Fix bug in TUN interface driver.  From  Max Nekludov.

* ARMv7-A:

  - ARMv7-A SMP: Add SMP logic to signal handling.

* ARMv7-M:

  - ARMv7-M: Fix double allocation of MPU region in mmu.h.

* ARMv7-R:

  - ARMv7-R:  Fix compilation error.  This change fixes compilation errors
    on MPU support for ARMv7-R.  From Heesub Shin.
  - ARMv7-R: fix invalid drbar handling.  In ARMv7-R, [31:5] bits of DRBAR
    is physical base address and other bits are reserved and SBZ. Thus,
    there is no point in passing other than the base address.  From Heesub
    Shin.
  - ARMv7-R:  Remove the redundant update on SCTLR. mpu_control() is
    invoking cp15_wrsctlr() around SCTLR update redundantly.  From Heesub
    Shin.
  - ARMv7-R: add new Kconfig entries for d/i-cache. Unlike in ARMv7-A/M,
    Kconfig entries for data and instruction caches are currently missing
    in ARMv7-R. This change adds those missing Kconfig entries. Actual
    implmenetation for those functions will be added in the subsequent
    patches.  From Heesub Shin.
  - ARMv7-R: Add cache handling functions.  This change adds functions for
    enabling and disabling d/i-caches which were missing for ARMv7-R.
    From Heesub Shin.
  - ARMv7-R: Fix typo in mpu support.  s/ARMV7M/ARMV7R/g. From Heesub Shin.
  - ARMv7-R: Fix CPSR corruption after exception handling.  A sporadic
    hang with consequent crash was observed when booting. It seemed to be
    caused by the corrupted or wrong CPSR restored on return from
    exception. NuttX restores the context using code like this:  msr spsr,
    r1.  GCC translates this to:  msr spsr_fc, r1.  As a result, not all
    SPSR fields are updated on exception return.  This should be: msr
    spsr_fsxc, r1.  On some evaluation boards, spsr_svc may have totally
    invalid value at power-on-reset. As it is not initialized at boot, the
    code above may result in the corruption of cpsr and thus unexpected
    behavior. From Heesub Shin.
  - ARMv7-R: Fix to restore the Thumb flag in CPSR.  Thumb flag in CPSR is
    not restored back when the context switch occurs while executing thumb
    instruction.  From Heesub Shin.

* Atmel SAM3/4 Drivers:

  - SAM3/4 UDP:  Add delay between setting and clearing the endpoint RESET
    bit in sam_ep_resume().  We need to add a delay between setting and
    clearing the endpoint reset bit in SAM_UDP_RSTEP. Without the delay
    the USB controller will (may?) not reset the endpoint.  If the
    endpoint is not being reset, the Data Toggle (DTGLE) bit will not to
    be cleared which will cause the next transaction to fail if DTGLE is
    1. If that happens the host will time-out and reset the bus.  Adding
    this delay may also fix the USBMSC_STALL_RACEWAR in usbmsc_scsi.c,
    however this has not been verified yet.  From Wolfgang Reißnegger.
  - SAM3/4: Remove unused 'halted' flag from UDP driver.  From Wolfgang
    Reißnegger.
  - SAM3/4: Remove 'stalled' flag from the UDP driver.  This flag is not
    necessary because the state of the endpoint can be determined using
    'epstate' instead. From Wolfgang Reißnegger.

* Atmel SAM3/4 Boards:

  - SAM4S Xplained Pro: Configuration uses old, improper timer interface.
    CONFIG_TIMER disabled in configuration.  Remove obsolete timer
    initialization logic.

* Atmel SAMV7 Drivers:

  - SAMv7 USBDEVHS:  A problem occurred with the SAMV7 USBDEVHS driver  if
    the USB cable is unplugged while a large amount of data is send over
    an IN endpoint using DMA. If the USB cable is plugged in again after a
    few seconds it is not possible to send data over this IN endpoint
    again, all other endpoints work as expected.  The problem occurs
    because if the USB cable is unplugged while an DMA transfer is in
    flight the transfer is canceled but the register SAM_USBHS_DEVDMACTRL
    is left in an undefined state.  The problem was fixed the problem by
    resetting the register SAM_USBHS_DEVDMACTRL to a known state.
    Additionally all pending interrupts are cleared.  From Stefan Kolb.
  - SAMV7 MCAN: Prevent Interrupt-Flooding of ACKE when not connected to
    CAN-BUS. An Acknowledge-Error will occur every time no other CAN Node
    acknowledges the message sent. This will also occur if the device is
    not connected to the can-bus. The CAN-Standard declares, that the Chip
    has to retry a given message as long as it is not sent successfully
    (or it is not cancelled by the application). Every time the chip tries
    to resend the message an Acknowledge-Error-Interrupt is generated. At
    high baud rates this can lead in extremely high CPU load just for
    handling the interrupts (and possibly the error handling in the
    application). To prevent this Interrupt-Flooding we disable the ACKE
    once it is seen as long we didn't transfer at least one message
    successfully.  From Frank Benkert.
  - SAMV7 MCAN:  Make delete_filter functions more robust.  From Frank
    Benkert.

* Atmel SAMA5 Drivers:

  - SAMA5 PWM:  Driver does not build when executing from SDRAM before
    board frequencies are not constant.  Rather, the bootloader configures
    the clocking and we must derive the clocking from the MCK left by the
    bootloader.  This means lots more computations.  This is untested on
    initial change because I don't have a good PWM test setup right now.

* Misoc LM32:

  - Misoc LM32: Corrects a bug that never occured in qemu on simulation or
    real fpga. The error was that the r1 register was being modified out
    of context switching and not restoring it.  From Ramtin Amin

* NXP Freescale i.MX6:

  - i.MX6 interrupt handling:  Additional logic needed to handle nested
    interrupts when an interrupt stack is used.  Nesting can occur because
    SGI interrupts are non-maskable.

* NXP Freescale LPC43xx Drivers:

  - LPC43xx serial: Fix a typo in ioctl TIOCSRS485 ioctl.  From Vytautas
    Lukenskas.
  - LPC43xx serial:  Restore RS485 mode on serial port open (if RS485 is
    enabled via menuconfig).  From Vytautas Lukenskas.
  - LPC43xx SD/MMC:  Correct some definitions on SMMC control register in
    lpc43_sdmmc.h.  From Alan Carvalho de Assis.
  - LPC43xx SD card:  Correct pin configuration options needed for SD card
    pins.  From Alan Carvalho de Assis.

* SiLabs EFM32:

  - EFM32: Fix a compilation error.  From Pierre-noel Bouteville.

* STMicro STM32 Drivers:

  - STM32 CHxN channels are always outputs.  From Sebastien Lorquet.
  - STM32 DAC:  Fix shift value whenever there are is a DAC2 and, hence,
    up to three interfaces.  From Marc Rechté.
  - STM32 F1:  Add TIM8 to STM32F103V pinmap.  From Maciej Wójcik.
  - STM32 F1: Fix for F1 RTC Clock, tested on F103.  From Maciej Wójcik.
  - STM32 F3:  STM32F303xB and STM32F303xC chips have 4 ADCs.  From Paul
    A. Patience.
  - STM32 F4:  A new implementation of the STM32 F4 I2C bottom half.  The
    common I2C as this did not handled correctly in the current
    implementation (see also https://github.com/PX4/NuttX/issues/54).  The
    changes almost exclusively affect the ISR.  From Max Kriegleder.
  - STM32 F4  OTGHS Host:  If STM32F446 increase number of channels to
    16.  From Janne Rosberg.
  - STM32 F4:  I think, that Size is (highest address+1 - Base address).
    Base address has been removed and if address+count >= size we are
    outside of the Flash.  From David Sidrane.
  - STM32 F4:  Fix ADC compilation error when DMA isn't enabled. From Paul
    A. Patience.
  - STM32 F4:  STM32F427 was rebooting. Over reached family.  From David
    Sidrane.
  - STM32 F4:  Added STM32F469 RAM size and deliberated STM32F446 size.
    From David Sidrane.
  - STM32 F4:  Typo in stm32f76xxxx_pinmap.h edited online with
    Bitbucket.  From David Sidrane.
  - STM32 F7:  stm32_i2c.c Dejavu.  Fixes a bug previously found in the
    F4. From David Sidrane.
  - STM32 F7:  OTGDEV fixed typo.  From David Sidrane.
  - STM32 F7:  Fix to SPI-Master driver.  Without this the chip select
    decoding feature will not work properly.  From Michael Spahlinger.
  - STM32 F7:  STM32F7 SD/MMC driver depends on CONFIG_SDIO_DMA which is
    only defined in stm32/Kconfig.  Changed to CONFIG_STM32F7_SDMMC_DMA
    and defined in stm32f7/Kconfig.
  - STM32 F7:  Fix some STM32F7 copy paste errors.  From David Sidrane.
  - STM32 L4:  Complementary PWM outputs on STM32L4"  (1) too many
    parentheses when calculating max chan count and (2) channel 4 does not
    have a complementary output. From Sebastien Lorquet.
  - STM32 L4:  Fix I2C devices RCC registers.  From Sebastien Lorquet.
  - STM32 L4:  Enable and renaming for 32l4 UARTs 4 and 5. From Sebastien
    Lorquet.
  - STM32 L4:  Change the way to configure quadrature encoder prescalers.
    From Sebastien Lorquet.
  - STM32 L4:  Correct USART1/2 definitions.  Use default mbed UART4
    settings.  From Sebastien Lorquet.

* STMicro STM32 Boards:

  - STM32F103 Minimum: Fix Timers 2 to 7 clock frequencies. From Alan
    Carvalho de Assis.
  - Nucleo-F303RE:  Remove duplicate setting from board.h.   From  Marc
    Rechté.
  - Nucleo F303RE: Various fixes to get the ADC configuration building
    again after PR.  Refresh all configurations.
  - Nucleo L476RG: Add better selection of timer.

* TI Tiva Boards:

  - DK-TM4C129x: Typo fix.  From Wolfgang Reißnegger.

* Xtensa ESP32:

  - ESP32 core v2:  Flush the UART TX buffer in the esp32 serial shutdown
    routine. The ROM bootloader does not flush the FIFO before handing
    over to user code, so some of this output is not currently seen when
    the UART is reconfigured in early stages of startup.  From Angus
    Gratton.
  - Xtensa ESP32:  Corrects a problem with dispatching to signal
    handlers:  Cannot vector directly to the signal handling function as
    in other ABIs under the Xtensa Window ABI.  In that case, we need to
    go through a tiny hook when performs the correct window call (call4)
    otherwise registers will be scrambled in the signal handler.

* Xtensa ESP32 Boards:

  - ESP32 core v2:  Changes the openocd config file's default flash
    voltage from 1.8V to 3.3V. This is not necessary right now, but may
    save some hard-to-debug moments down the track (3.3V-only flash
    running at 1.8V often half-works and does weird things...).  From
    Angus Gratton.

* C Library/Header Files:

  - libc/stdio:  Fixes sscanf() %sn where strlen(data) < n.  From David
    Sidrane.
  - libc/stdio:  Include wchar.h in lib_libvsprintf.c to fix compilation
    error.  From Alan Carvalho de Assis.
  - include/sys/time.h: timersub macro modified per recommendations of
    phreakuencies.
  - include/ctype.h and cxx/cctype:  Implement ctype.h functions as inline
    if possible.  cctype can then properly select namespace.
  - include/: Fix a number of header files with mismatched 'extern C {'
    and '}'.
  - libc/unisted:  Change brings strtol() and related functions more
    conformant with POSIX.  Corner cases like strtol(-2147483648, NULL,
    10) now pass clang -fsanitize=integer without warnings.  From Juha
    Niskanen.
  - libc/unistd: sleep() was returning remaining nanoseconds (kind of),
    instead the remaining seconds.  From Eunbong Song.
  - termios.h:  Fix CRTSCTS define to include input and output flow. From
    Lorenz Meier.

* Build/Configuration System:

  - configs/*/defconfig: The buttons example was changed to archbuttons.
    As a result all of the button configurations are broken and need some
    renaming in the defconfig files.  Noted by Frank Berkert.
  - config/*/defconfgs: More fallout from name change of
    apps/examples/buttons to archbuttons.
  - configs:  All QE encoder files.  Last change made timer hard-coded to
    3. Make configurable.
  - configs: Remove all traces of the no-longer existent ARCHBUTTONS
    example.  Remove all button configurations that depended on the
    obsoleted ARCHBUTTON example.
  - minnsh Configurations:  Remove minnsh configurations and support
    logic:  up_getc() and lowinstream.  This was an interesting exercise
    to see just how small you could get NuttX, but otherwise it was not
    useful:  (1) the NSH code violated the OS interface layer by callup
    up_getc() and up_putc() directly, and (2) while waiting for character
    input, NSH would call up_getc() which would hog all of the CPU.  Not a
    reasonable solution other than as a proof of concept.

* Application Build/Configuration System:

  - Make.defs:  Using wrong link script if native window tool used with
    Cygwin.

* apps/platform:

  - ESP32 Core v2 Platform: Fix some naming that prevented building the
    C++ support.

* apps/nshlib:

  - NSH Library:  nsh_getdirpath(), use snprint instead of sprintf to
    avoid possibility of buffer overrun.  Noted by Chung Hwan Kim.

* apps/system:

  - Remove std_readline().  This called up_getc() and up_putc() directly,
    violating the POSIX OS interface.

* apps/netutils:

  - FTPD: Fixed bug that didn't free ftpd ressources on exit.  From Pascal
    Speck.
  - NTP client: Fix missing left parenthesis.  From Pierre-Noel Bouteville.
  - cJSON: Import patch to fix:cJSON_PrintUnformatted() behaves unexpected
    if an empty array shall be printed to text. from Jerome Lang
    2012-04-19. From Pierre-Noel Bouteville.
  - esp8266 update cosmetic and many bug fix.  From Pierre-Noel Bouteville.
  - FTPD:  Fix bug un ftpd file or socket may be not closed.  From
    Pierre-Noel Bouteville.

* apps/modbus:

  - Modbus Master is missing many files and doesn't compile at all. More
    details in
    https://groups.yahoo.com/neo/groups/nuttx/conversations/topics/13734.
    From Vytautas Lukenskas.

* apps/examples:

  - The examples/qencoder app was trying to init the encoder by a direct
    call into the board, cheating in a local header to declare the
    normally unavailable function prototype.  From Sebastien Lorquet.
  - apps/examples/timer: Should detach signal handler before exiting.
  - examples/qencode: The examples/qencoder app was trying to init the
    encoder by a direct call into the board, cheating in a local header to
    declare the normally unavailable function prototype.  From Sebastien
    Lorquet.
  - apps/examples/archbuttons:  Removed becaue it violates OS interface
    principles.
  - examples/adc, pwm, can: Remove all usage of BOARDIOC_ADCTEST_SETUP,
    BIOARDIOC_PWMSETUP.  Remove BOARDIOC_CAN_INITIALIZE.  CAN
    initialization is now done in the board initialization logic just like
    every other device driver.
  - examples/ostest: Add some delays to the pthread cancellation test.
    With deferred cancellation enabled, things happen more asynchronously.