NuttX-7.28 Release Notes

The 128th release of NuttX, Version 7.28, was made on January 19, 2019, and is available for download from the website. Note that release consists of two tarballs: nuttx-7.28.tar.gz and apps-7.28.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:

  - Critical Section Monitor:  Adds data collection logic in support of
    pre-task monitoring critical sections and pre-emption state.  From Gregory
  - Critical Section Monitor:  Add support for global pre-emption and
    global critical sections to monitor as suggested by Xiang Xaio.  From
    Gregory Nutt
  - Interrupt Time:   Measurement of interrupt handler duration used to
    be available only in Tickless mode since it used the high resolution
    Tickless timer to measure interrupt time.  This change adds
    CONFIG_SCHED_IRQMONITOR_GETTIME which, if enabled, will force the
    interrupt duration calculation to use the same high-resolution,
    platform-specific timer as is used with the Critical Section Monitor.
    This leads to two improvements:  (1) You can now measure interrupt
    duration in non-Tickless mode, and (2) in either mode, the interrupt
    duration and the critical section measures will use the same
    high-resolution timer and should, therefore, never be any discrepancy
    due to different clock sources.  From Gregory Nutt
  - Context Switching Protection:  Add debug assertions before each call
    to up_block_task() to assure that there is no attempt to block an
    IDLE task.  From Dave Marples
  - init Task:  Allow the init task priority to be configurable.  From
    David Sidrane
  - pthreads:  Implement pthread_key_delete().  This involves some minor
    changes to the group data structure.  From Gregory Nutt

* File Systems/Block and MTD Drivers

  - ProcFS:  Extended the process ID ProcFS output to show per-thread
    maximum time for pre-emption disabled and maximum time within a
    critical section.  From Gregory Nutt
  - NXFFS:  Pass unrecognized IOCTL commands to the contained MTD
    driver.  From Daniel P. Carvalho
  - LittleFS:  Adds an initial port the ARM mbed littlefs to NuttX.  This does
    not include FLASH formatting utilities.  Depends on CONFIG_MTD_BYTE_WRITE.
    From lihaichen
  - AT25 MTD Driver:  Added support for AT25DF081A serial flash chip.
    From Marc Rosen
  - MTD Configdata Device:  Extends the MTD configdata device with the
    following features / additions:
      1. Configurable option to use named config items instead of enumerated
         ID/Instance numbers.
      2. Ability to iterate through the existing configdata items in the
         /dev/config device.
      3. Ability to "unset" a configdata item.
      4. Ability to perform "flash_eraseall" on the /dev/config device.
    From Ken Pettit

* Networking/Network Drivers:

  - Telnet Driver:  Add NAWS and poll interface to telnet for screen size
    negotiation used with termcurses.  From Ken Pettit

* Wireless/Wireless Drivers:

  - BLE HIC Core:  Add second RX work function  From Lwazi Dube
    commands  From Lwazi Dube
  - CC2564:  Add cc2564 HCI UART driver.  From Lwazi Dube

* Graphics/Display Drivers:

  - Sitronix ST7032i:  Add support to Alphanumeric Sitronix ST7032i
    display  From Alan Carvalho de Assis
  - NXP TDA19988:  This commit brings in a complete, but untested,
    implementation of a driver for the TI TDA19988 HDMI Encoder.  This encoder
    is used on the Beaglebone Black board.  Since this driver is untested, it
    requires CONFIG_EXPERIMENTAL in the configuration.  From Gregory Nutt

* Crypto:

  - crypto/aes.c:  This change provides an improved AES cipher API in
    addition to the existing routines.  The reasons for this new API are:
    1) better performance, giving the possibility to avoid re-setting-up
    the key for each AES block when the same key is used multiple times.
    This is important for the current single user of AES, which is
    related to storage and FTL.  And 2) suitable for simultaneous use of
    multiple AES keys, which will be required by the upcoming crypto
    framework.  It retains compatibility with the previous API, so there
    is no need to change anything else right now.  From Sebastien Lorquet

* Other Common Device Drivers:

  - MMCSD SDIO:  The mmcsd_sdio driver makes calls for dcache
    invalidation through the chip specific architecture function
    SDIO_DMARECVSETUP(). I changed the arch/arm/stm32f7 chips to use
    arch_invalidate_dcache_by_addr() instead of arch_invalidate_dcache().

    This commit includes additional changes to mmcsd_sdio.c.  I
    created SDIO_DMADELYDINVLDT() (DMA delayed invalidate) to
    invalidate store-into mode dcaches after the DMA transfer.  I
    have been using SDIO_DMADELYDINVLDT() for several weeks now and
    it has fixed the problems that I previously reported regarding
    non-cache aligned buffer invalidation errors (for my store-through
    dcache). However, it does not permit use of unaligned DMA buffers
    for store-into mode dcaches.

    SDIO_DMADELYDINVLDT() is a NoOp unless the chip specific Kconfig
    file selects CONFIG_ARCH_HAVE_SDIO_DELAYED_INVLDT. I have modified
    all the stm32f7 chips to select it.  From Bob Feretich
  - SPI Lower Half Interface:  Extend the HW features supported by SPI.
    It now supports a deferred DMA trigger hardware configuration.  From
    Dave Marples
  - DS28E17 1-Wire Driver:  Optimize I2C write followed by read to same
    address.  From Juha Niskanen
  - LMP92001:  Add support for the TI LMP92001 Multi-channle DAC/ADC
    device.  From Abdelatif Guettouche.
  - EEPROM Character Driver:  Add support to Microchip AT24CM02  From
    Alan Carvalho de Assis
  - Microchip MCP73871:  Add support to Microchip MPC73871 Battery Charger.
    From Alan Carvalho de Assis
  - MCP7941x:  Add support for the Microchip MCP741x external RTC.  From Ouss4
  - Sensirion SCD30:  Driver for Sensirion SCD30 CO2 sensor.  From Jussi
  - Sensirion SGP30:  Driver for Sensirion SCD30 gas sensor.  From Jussi
  - Sensirion SPS30:  Driver for Sensirion SCD30 particulate matter sensor.
    From Jussi Kivilinna
  - USB CDC/ACM Device:  When implemented usb cdc on nrf52840, I found
    some issues with  cdc driver:
      1. Lost data when receiving buffer is full;
      2. Low-water mask implement issue;
      3. Re-flush cdc buffer when enabling
      4. Serial dma is conflict with cdc , modify the serial.h
    From Levin Li

* MIPS32:

  - Configuration System:  Allow Penguino for windows for the Windows
    Ubuntu platform as well.

* Maxim Integrated MAX326xx

  - MAX32660:  Support for the MAX32660 was added (along with partial
    support for other members of the MAX326xx family).  The initial port
    includes  Clock configuration, timer, GPIO pin configuration, ICC,
    and UART.  Additional untested drivers are complete and ready for
    testing:  DMA, GPIO interrupts, SPI0 Master, TC, WDT.  The following
    drivers are not yet implemented: I2C and I2S.

* Maxim Integrated MAX326xx boards

  - MAX32550-EVSYS:  Basic support for the Maxim Integrated MAC3X660
    EVSYS is included.  A basic NSH configuration is available and is
    fully functional.  Includes unverified support for an SPI0-based
    SD card.

* Microchip/Atmel SAMD21/L21 Drivers:

  - SAMD21/L21:  Adds a complete ADC header file for SAMD21 and a partially
    complete ADC header file for the SAML21.  From Alexander Vasiliev
  - SAMD21/L21:  Export sam_i2c_master_initialize(int bus) to be used by
    board config.  From Alan Carvalho de Assis

* Microchip PIC32MZ Drivers:

  - PIC32MZ I2C:  Add support for the I2C bus.  From Ouss4

* ARMv7-A

  - ARMv7-A MMU:  Use TLBIMVA vs TLBIMVAAIS to invalidate the Cortex-A8
    cache.  From Petro Karashchenko

* ARMv7-M

  - Cortex-M7 Cache:  This commit adds a new function
    arch_invalidate_dcache_by_addr(). It takes the same parameters as
    arch_invalidate_dcache(), but performs invalidation of only the lines
    in cache that need to be invalidated.  This new function could be
    used as a a direct replacement for arch_invalidate_dcache().  From
    Bob Feretich
  - ARMv7-M:  In the current implementation we only use very high
    priority interrupts (levels 0, 0x10 and 0x20 in CORTEX-M speak) but
    that means there are loads of lower priority ones that are
    effectively unused. I have *not* changed the semantics of these
    levels but have 'shifted' them to be based around the midpoint of the
    available interrupts (0x80) rather than at the top end....that allows
    for interrupts to be defined above (or, indeed, below) them as needed
    by the application.  This should have no functional effect on
    existing code but adds in a clean capability to define higher
    priority interrupts.  From Dave Marples

* Broadcom BCM2708:

  - BCM2708:  Remove all support for the BCM2708/2835.  This was added
    only for support of the RaspberryPi Zero board which was previously
    removed.  The support was minimal and unverified.  The removed files
    can still be found in the Obsoleted directory.  From Gregory Nutt

* Broadcom BCM2708 Boards:

  - Raspberry Pi Zero:  Remove the partial support for the Raspberry Pi
    Zero.  This port was started with the best of intentions but was
    never  completed.  The board support can still be found in the
    Obsoleted repository.  From Gregory Nutt

* Nordic NRF52 Boards:

  - Improve LED handling #if~#endif in nrf52_autoleds.c and
      Add Adafruit Feather nRF52 board LED support
      Add Adafruit Feather nRF52 board
      Add nrf52-generic
      Replace 'pca10040' with 'generic'
      Copy from nrf52-pca10040 to nrf52-generic
    From Zou Hanya

* NXP i.MX RT Drivers:

  - i.MXRT:  Add PIT, GPT, and QIMER(TMR) header files  From David Sidrane
  - i.MXRT:  Add FLEXPWM.  From David Sidrane
  - i.MXRT:  Add ADC chip header  From David Sidrane
  - i.MXRT Build:  Include up_systemreset and up_stackcheck.c  From David Sidrane
  - i.MXRT GPIO:  Add GPIO Support Input daisy selection.  From David Sidrane
  - i.MXRT Serial:  Support independent input and output flow control.  From
    David Sidrane
  - i.MXRT USB:  Use single define for USB pin definitions.  From David Sidrane
  - IMXRT106X:  Add FLEXCAN3 to pinmux header file. From David Sidrane

* NXP Freescale i.MX RT Boards:

  - IMXRT1050-EVK:  GPIO device driver support added and tested by
    Pavlina Koleva and Ivan Ucherdzhiev.  From Pavlina Koleva

* On Semi LPC23450:

  - LPC23450:  Add support for SPI flash boot.  Also, remove unnecessary
    code for the SPI flash boot.  From Masayuki Ishikawa

* On Semi LPC23450 Boards:

  - LC823450-XGEVK:  Add linker script for SPI flash boot.  From
    Masayuki Ishikawa
  - LC823450-XGEVK:  Enable NFS client for RNDIS configuration.  Also, some
    stack size were adjusted to work with NFS  From Masayuki Ishikawa

* Simulation

  - Critical Section Monitor:  Add low level timer support for simulation. From
    Gregory Nutt

* STMicro STM32:

  - Configuration:  Simplify ARM core selection logic  From Mateusz Szafoni
  - Configuration:  USB Host is an option.  From David Sidrane
  - STM32 L0:  Brings in initial support for the STM23 L0.  From Mateusz Szafoni

* STMicro STM32 Drivers:

  - STM32 ADC:  Configurable ADC DMA mode (one shot mode, circular
    mode).  From Mateusz Szafoni
  - STM32 ADC:  Start conversion on startup is now possible if TIM
    triggering selected.  This can be useful to start ADC TIM conversion
    for ADC IPv2 when opening ADC device.
  - STM32 DAC:  Unified naming for DAC interfaces  From Mateusz Szafoni
  - STM32 DMA:  Add interfaces to interact with high priority DMA
    interrupts. From Mateusz Szafoni
  - STM32 DMA:  Use STM32 DMA IP core version instead of chip family
    names.  From Mateusz Szafoni
  - STM32 DMA:  Add support for DMA v1 CSELR support.  From Mateusz Szafoni
  - STM32 HRTIM:  Do not enable timers on startup if option from Kconfig
    selected and add interface to enable/disable timers.  From Mateusz
  - STM32 PWM:  Add timer enable/disable and frequency update to
    low-level ops.  From Mateusz Szafoni
  - STM32 SPI:  Implements the new deferred DMA trigger feature.  From
    Dave Marples
  - STM32 F0 Build:  Rename the stm32f0 directory to stm32f0l0 to make a
    space for STM32 L0.  Rename files, functions and defines, removing
    the f0_ from the names in order to make them MCU agnostic.  From
    Gregory Nutt
  - STM32 F0 GPIO:  Add support for GPIO EXTI.  From Mateusz Sfafoni
  - STM32 F2 FLASH:  stm32_flash_writeprotect() supported the same for
    STM32F20XX as STM32F4XXX  From Anthony Merlino
  - STM34 F7 DMA:  stm32f7 enable separate DMA per SPI configuration
    From Daniel Agar
  - STM32 F7 QEncoder:  Ported the QEncoder from F4 to F7.  From Eduard
  - STM32 F7 SPI:  Port Dave Marples STM32 deferred trigger enhancement
    to the STM32 F7 SPI drivers.  From Gregory Nutt
  - STM32 H7 SPI:  Port Dave Marples STM32 deferred trigger enhancement
    to the STM32 H7 SPI drivers.  From Gregory Nutt
  - STM32 L4 SPI:  Port Dave Marples STM32 deferred trigger enhancement
    to the STM32 L4 SPI drivers.  From Gregory Nutt

  * STMicro STM32 Boards:

  - B-L072Z-LRWAN1:  Add basic support for b-l072z-lrwan1.  Nucleo boards
    use as default ST LINK MCO as clock input from MCU and for this
    HSEBYP must be enabled.  From Mateusz Szafoni
  - Nucleo-F103RB:  Add board support. From Mateusz Szafoni
  - Nucleo-F103RB:  Add ADC and PWM examples.  From Mateusz Szafoni
  - Nucleo-F207ZG:  Add board support. From Mateusz Szafoni
  - Nucleo-F207ZG:  Add ADC and PWM examples.  From Mateusz Szafoni
  - Nucleo-F302R8:  Add high priority ADC interrupts example to the
    'highpri' configuration.  From Mateusz Szafoni
  - Nucleo-F334R8:  Add support for ADC injected sequence to the 'highpri'
    configuration, add triggering from TIM1.  From Mateusz Szafoni
  - Nucleo-F334R8:  Add example for the SPWM generation (custom STM32 PWM
    usage).  From Mateusz Szafoni
  - Nucleo-F767ZI:  Use on board USB UART as default console.  Board is powered
    by USB which can be used as UART link for upload and console.  Previously
    it was set to use Arduino shield which developer may not have.  From Phil
  - Nucleo-F767ZI:   Add ethernet config based on nsh configuration plus
    stm32f769i-disco/nsh-ethernet.  From Phil Coval
  - Nucleo-L073RZ:  Add basic support for nucleo-l073rz.  Nucleo boards
    use as default ST LINK MCO as clock input from MCU and for this
    HSEBYP must be enabled.  From Mateusz Szafoni
  - Nucleo-L152RE:  Add board support. From Mateusz Szafoni
  - STM32F4 Discovery:  Add timing support for the critical section
    monitor using the DWT CYCNT register.  From Gregory Nutt
  - STM32F4 Discovery:  If the Critical Section Monitor, modify the
    ITM_LAR register to assure that the DWT cycle counter is enabled.
    Suggested by Dave Marples.  From Gregory Nutt
  - STM32F4 Discovery:  Add board support to display ST7032i  From Alan
    Carvalho de Assis
  - STM32F4 Discovery:  Add loadable application build support in
    Make.defs  From Masayuki Ishikawa
  - STM32F4 Discovery:  Update RNDIS configuration: (1) Add NFS and adjusted
    stack size for usermain and telnetd client.  (2) Add support for loadable
    application and ping. From Masayuki Ishikawa
  - STM32F4 Discovery:  Update nsh configuration: (1) Add
  - STM32F429I-DISCO:  Add high priority ADC interrupts example to the
    'highpri' configuration.  From Mateusz Szafoni
  - configs/nucleo-l073rz:  Support for nrf24l01.  From Mateusz Sfafoni

* TI CCxx:

  - CC13x0 family and  CC13x2/CC26x2:  Basic, minimal support was added
    for these two chip families.  This is a Work-In-Progress:  There is
    just enough logic in place to support a simple NSH configuration.
    However, the port is still missing certain, necessary hooks into the
    TI ROM-based 'DriverLib'.  As a result, the support is not fully code
    complete and is totally untested.   Support for the CC26x2, which is
    nearly identical to the CC13x2 is fragmentary.  Stay tuned.
    Hopefully full support will be available in NuttX 7.29.

* TI CCxx Boards:

  - LAUNCHL-CC1312R1:  Board support is available for the TI
    LAUNCHL-CC1312R1.  That board support consists only of an unverified
    NSH configuration.  The primary purpose of this port for the time
    being is simply support the core architecture bring-up.

* TI AM335x:

  - AM335x:  Adds initial support for the TI AM355x family.
  - AM335x:  Add minimal wdog logic needed to disable the watchdog timer.
    Otherwise, the board is rebooted after certain time expires while NuttX is
    running.  From Petro Karashchenko
  - AM335x:  Switch to DMTimer2 for system tick generation. U-Boot does not
    enable DMTimer1ms clocks hence it is not possible to use it until
    implementation in am335x_clockconfig.c is ready.  From Petro Karashchenko

* TI AM335x Boards:

  - Beaglebone Black:  Initial port for BeagleBone Black board support
    (TI AM335x family based on Cortex-A8).  Includes a basic functional NSH
    configuration .  From Petro Karashchenko

* TI Tiva:

  - LM3S9B92:  Add support for LM3S9B92.  From Lwazi Dube

* TI Tiva Drivers:

  - Tiva HCI UART:  Port bluetooth HCI uart interface from stm32 to tiva
    From Lwazi Dube

* TI Tiva Boards:

  - TM4C1294-Launchpad:  Add IRQBUTTONS support to tm4c1294 launchpad.
    From Lwazi Dube

* Tools:

  - tools/convert-comments.c:  Add a tool to convert C++-style comments
    to C89 C-style comments.  From Gregory Nutt
  - tools/detab.c:  Add detab.c which will convert all tabs in a file to
    spaces.  From Gregory Nutt
  - tools/lowhex.c:  Add lowhex.c that will convert hexadecimal constants
    in a file to use lower case representation.  From Gregory Nutt
  - tools/mkconfig.c:  Add definitions to distinguish between tristate
    'y' and 'm' options.  From Gregory Nutt
  - tools/nxstyle.c:  Add logic to detect long lines.  From Gregory Nutt
  - tools/nxstyle.c:  Add -h for help.  From Gregory Nutt

* Libraries/Header Files:

  - include/nuttx/lcd/edid.h:  Add EDID definitions  From Gregory Nutt
  - libs/libc/netdb:  Make DNS retries configurable  From Juha Niskanen
  - libs/libc/netdb:  Harden query logic against DNS spoofing.  This
    commit implements most of the RFC 5452 guidelines for making DNS more
    resilient. We now verify response matches against what was queried
    and use unpredictable query IDs. It is also checked that response
    come from correct DNS server.  Also fixes a buffer overflow when
    querying hostnames longer than CONFIG_NETDB_DNSCLIENT_NAMESIZE.  From
    Juha Niskanen
  - libs/libc/netdb:  Support multiple IP addresses per hostname  From
    Juha Niskanen

* NSH: apps/nshlib:

  - apps/nshlib:  Add support to use SLCD as NSH Console  From Alan Carvalho de
  - apps/nshlib:  Add support for CROMFS start-up script. From David Sidrane
  - apps/nshlib:  Add var expansion in NSH parse.  From Daniel Agar
  - apps/nshlib:  Display built-in apps using multi-column mode like the NSH
    commands.  From Ken Pettit
  - apps/nshlib:  In all multi-column help output, calculate an optimal column
    width rather than using a hard-coded width that may or may not be
    appropriate.  Also make the number of rows presented dependent upon the
    maximum width of the widest column.  From Gregory Nutt
  - apps/nshlib:  Adds addroute command options for setting default gateway.
    Like 'addroute default <ipaddr> <interface>'.  From Anthony Merlino

* Examples/Tests: apps/examples:

  - apps/examples/battery:  Add Battery Charger Monitor Example  From Alan
    Carvalho de Assis

* System Utilities: apps/system

  - apps/system/configdata:  Adds an "cfgdata" command which allows
    manipulation of the /dev/config items via the command line.  One such use
    for this utility would be to set a "macaddr" configdata item, etc.  The
    utility is sort-of like a u-boot env variable edit function:

    For instance, to set a "macaddr" when the new CONFIG_MTD_CONFIG_NAMED
    option is selected, you would do:

      nsh> cfgdata set macaddr [0xfc 0x01 0x0b 0x45 0xa1 0x12]
      (The brackets denotes an array of bytes)
      nsh> cfgdata set hostname myboard

    or using the old ID,INSTANCE numeric method:

      nsh> cfgdata set 0,0 [0xfc 0x01 0x0b 0x45 0xa1 0x12]
      (The brackets denotes an array of bytes)
      nsh> cfgdata set 1,0 myboard

    You can also display all config items:

      nsh> cfgdata print all
      Name                    Len   Data
      macaddr                 6     0xFC 0x01 0x0B 0x45 0xA1 0x12
      hostname                8     myboard

    From Ken Pettit
  - apps/system/critmon:  Add a daemon to monitor critical section usage. From
    Gregory Nutt
  - apps/system/nsh:  Set NSH priority if the NSH task was scheduled at a
    different priority than the configured priority.  From Gregory Nutt
  - apps/system/nxplayer:  Introduce CONFIG_NXPLAYER_MAINTHREAD_STACKSIZE. From
    Masayuki Ishikawa
  - apps/system/termcurses:  Addition of termcurses libraries in
    apps/system/termcurses  From Ken Pettit
  - apps/system/vi:  New feature additions
      1.  Vi startup feature to prepend the current working directory to the
          supplied filename if it does not start with '/' absolute path
          specifier.  This allows editing files in the current directory
          without needing to fully qualify the filename.
      2.  Standard '~' empty screen line characters for proper identification
          of empty '\n' only lines at the end of the file.
      3.  Moving into insert or append mode now prints '--INSERT--' in the
          status line and clears it upon exit.
      4.  Integration with termcurses to detect special keystrokes and to
          handle terminal type differences.  Haven't yet converted all vt100
          print codes to termcurses equivalents.
      5.  Support for up, down, left, right arrows, page-up, page-down keys in
          command mode.
      6.  Added 'b' command to move cursor 'b'ack to previous word.  Honors the
          command repeat value for multiple word moves.
      7.  Added 'w' command to move cursor to next 'w'ord.  Honors the command
          repeat value for multiple word moves.
      8.  Added 'f' and 't' commands to find characters on the current line.
          Honors the command repeat value.
      9.  Added the find 'n'ext command to repeat the previous find operation.
      10. Added the 'H', 'M', and 'L' commands to move the cursor to top,
          middle and bottom of the display.
      11. Extended yank/paste to manage a paste buffer with character mode in
          addition to line mode.  Character mode allows cut / paste of
          individual characters or groups of characters vs. full lines.
      12. Added support in the 'd'elete and 'y'ank commands for character mode
          deletions such as 'dw', 'dfa', '2yw', etc.
      13. Added support in paste routine for multiple paste using command value
      14. Added support for the 'D' and 'C' delete and change to end of line
      15. Added support for 's'ubstitute key ('x' followed by insert mode).
      16. Modified yank / paste allocation scheme to avoid repeated alloc and
          free of paste buffer.  Uses a minimum allocation size scheme and only
          does free / realloc when paste does not fit.  If the paste is smaller
          than the current allocation and the current allocation is larger than
          the threshold, then the buffer is freed and a smaller buffer
          allocated.  Otherwise the existing buffer is used.
      17. Support for 'P'aste before current cursor position.
      18. Support for '?' reverse search mode.
      19. Support for 'J'oin next line with current line command.
      20. Printing of current row,col in status line of display.
      21. Command repeat '.' support for commands that modifiy text.
      22. Support in replace  / insert mode for arrow keys, PGUP / PGDN, HOME,
          and END.  Using these will cause the command repeat buffer to reset
          such that only the last text addition after a cursor movement is saved.
      23. Added 'X' delete previous command.
      24. Added "gg" go to top of document command sequence.
      25. Added "ZZ" save and quit command (equivalent to :wq).
      26. Implemented '^' goto first non-whitespace on current line, along with
         '+' and '-' goto first non-whitespace on next / previous line.
      27. Added CR / LF goto first non-whitespace on next line in command
          mode.  From Ken Pettit ‎

* Network Utilities: apps/netutils:

  - apps/netutils/webserver:  The webserver/httpd app is was broken when script
    support was enabled (CONFIG_NETUTILS_HTTPD_SCRIPT_DISABLE). The root cause
    has been tracked down to the "Content-length" not being available ahead of
    time in this case (length of -1 passed to send_headers() ).  On the other
    hand, the server closing the socket does not result in FIN being sent to
    the browser either (FIN not supported by NuttX yet).

    Simple solution: Add support for HTTP Chunked Encoding to webserver/httpd.
    The change is simple. It adds a configuration option to enable chunked
    encoding. When enabled, the implementation will auto-detect the cases where
    content length is not available ahead of time, and will automatically
    engage chunked encoding transfers.

    Without this patch, the browser/client hangs forever, as it is expecting
    more data. With this patch, the browser displays the content.  From Vlado

* Wireless Utilities: apps/wireless:

  - apps/wireless/bluetooth/btsak: Add connect and disconnect commands to
    btsak.  From Lwazi Dube

* Graphic Utilities:  apps/graphics:

  - apps/graphics/pdcurs34:  Integration of termcurses into pdcurses, plus
    pdcurses updates for multi-thread support  From Ken Pettit
  - apps/graphics/pdcurs34:  Adds a configuration option to pdcurses to enable
    line-drawing character (ALTCHARSET) when using the short 16-bit chtype.
    This is done by limiting the characters to 7-bit ASCII values and using the
    8-th bit as the A_ALTCHARSET bit.  This allows a significant RAM savings 4K
    - 20K depending on terminal size) while still allowing the nicer
    line-graphic characters for border drawing.  From Ken Pettit

* Testing:  apps/testing:

  - apps/testing/ostest:  Add test for pthread-specific data.  From Gregory

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:

  - Assertions:  Identify the running task correctly when dumping task
    state information.  It takes time to switch to the target task after
    g_readytorun has been modified.  If panic/assert happen during this
    period, the dump will contain the incorrect and confusing information
    due to the difference between the real running task and the return
    value of this_task(). This change resolve this problem by adding
    g_running_task to track the real running task through the context
    switch.  From Xiang Xiao
  - Assertions:  Correct duplicated logic from commit
    dbf01d12b7321d1b48b68d3b69842a853b049376.  Checking for PID == zero
    is not a valid way to test for the IDLE task in all configurations!
    This is only true in the single CPU configuration.  In multiple CPU
    configurations, there will be a separate IDLE task for each CPU with
    a different PID and an alternative check must be used.  NOTE:  The
    logic fixed in some places still lacks sufficient intelligence in SMP
    mode to find the right stack for the CPU IDLE thread and could still
    show the wrong stack.  From Gregory Nutt
  - Interrupt Prioritization:  Remove all driver-specific logic that may
    set the interrupt priority to anything but the default.  There is no
    good reason to change the interrupt priority unless you just want to
    debug a difficult problem.  OR if you want to use high priority
    interrupts.  In that case the specific interrupt priorities will need
    to be set by board-specific logic.  From Gregory Nutt
  - Memory Management:  Revert "This patch prevent heap corruption as in
    below case."  This solution to the problem noted by EunBong Song
    results in major memory fragmentation and and out-of-memory
    conditions on the PX4 platform.  On that platform the lower priority
    work queue is very low priority and essentially never runs when the
    system is busy.  As a result, the systems gets slowly starved of
    memory until failures and bad behaviors begin to occur.  From Gregory Nutt
  - Memory Management:  This is a replacement for EunBong Song's reverted
    change.  This change adds (1) logic in getpid() to return an error instead
    of the PID if the (apparent) currently executing task is not marked as
    RUNNING.   Then (2) mm_trysemaphore() (the root implementation of both
    kmm_trysemaphore() and umm_trysemaphore()) will know that the (apparent)
    running task cannot be the holder of the semaphore.  How could the
    non-running task be trying to get the MM semaphore?  I think only in the
    exact scenario that Eunbong Song has described.  So this new solution
    should provide the same protection as the original change but without the
    bad  consequences to memory usage.  From Gregory Nutt (with corrections
    from David Sidrane)
  - Memory Management:  In implementation of calloc(), verify that the number of
    elements times the size of an element will not overflow type size_t.  This
    is required by the SEI CERT C coding style and resolves anonymous Bitbucket
    Issue #139  From Gregory Nutt
  - sigtimedwait():  Remove unnecessary disable of pre-emption.  From
    Gregory Nutt
  - _exit():  Update all architecture-specific _exit() implementations
    so that they correctly call the scheduler instrumentation layer for
    the new task that runs when the old one exits.  This missing
    instrumentation was confusing the Critical Section Monitor logic with
    uses this instrumentation to track the state of critical sections.
    From Gregory Nutt
  - sched_foreach():  sched_foreach() should not have to hold the
    critical section over the entire traversal.  It should be acceptable
    to simply only the critical section while one entry is being
    processed (the caller can always call sched_foreach within a critical
    section is greater stability is needed).  From Gregory Nutt
  - task_spawn():  Correct description of input parameters to
    task_spawn_exec().  Noted by: JeongchanKim  From Gregory Nutt

* Crypto:

  - crtypo/:  This change:

      Avoids the use of up_aesinitialize() entirely, which resolves
      dependency problems, because this function does not make sure that
      an actual hardware aes implementation was made available: each SoC
      is now responsible to ensure the AES hardware is initialized before
      first use.  This applies to lpc43xx, stm32 and sam34.

      Remove definitions of the NEVER used aes_init and aes_update
      operations.  The new AES API will be more suitable.

    From Sebastien Lorquet

* File System/Block and MTD Drivers:

  - opendir():  Corrects a problem with opendir() noted by Petteri
    Aimonen in Bitbucket Issue 132: "opendir() fails for FAT filesystem
    with trailing slash in path".  I see the following behaviour on NuttX
    7.26, where I have SD card mounted on /flash and a directory called
    "frm" on it:

      opendir("/flash")  returns  (DIR *) 0x1000c580
      opendir("/flash/") returns (DIR *) 0x1000c5d0
      opendir("/flash/frm")  returns (DIR *) 0x1000c620
      opendir("/flash/frm/")  returns (DIR *) 0x0

    From POSIX specs for opendir(): "A pathname ... that ends with one or
    more trailing slashes shall be resolved as if a single dot character
    ( '.' ) were appended to the pathname."  So for mount points,
    opendir() works correctly, but for FAT32 filesystem it fails to open
    directory if the path has a trailing slash...

    NOTE: You would not see this problem if you call opendir() indirectly
    in NSH (like 'ls -R /') because NSH contains logic to remove trailing
    '/' characters from paths.  From Gregory Nutt
  - dup()/dup2():  dup() and dup2() were broken some time back.
    fs_dupfd() was return returning OK on success, not the file
    descriptor of the duplicated fd.  From David Sidrane
  - ProcFS:  Remove the unnecessary critical section  From Xiang Xiao
  - CROMFS:  Fix hardfault.  From David Sidrane
  - SmartFS MTD Driver:  Fix smart_write_alloc_sector sector size mapping.
    Was not correctly calculating the encoded sector size for small (256)
    byte or large (>= 4096 byte) sectors.  Noted by Daniel P. Carvalho.
    Fix from Ken Pettit
  - AT25 MTD Driver:  Fixed missing opening parenthesis.  From Marc Rosen
  - MTD Configdata MTD Driver:  Check return value mtdconfig_readbytes().
    From Jussi Kivilinna
  - S25FL1 MTD Driver:  Minor change for the s25fl1 QSPI FLASH driver which
    fixes additional sectorshift vs. pageshift confusion.  From Ken Pettit

* Networking/Network Drivers:

  - All network drivers!  Change pre-processor logic that selects the
    high priority work queue or gives preferential treatment to the high
    priority work.  All network logic must run on the low priority work
    queue!  Or suffer the consequences.  From Gregory Nutt
  - Socket Clone/Dup:  On a failure to start the TCP monitor, the cloned
    socket is closed but is not properly freed, leaving it attached to a
    TCP connection structure with the wrong reference count.  From
    Gregory Nutt
  - ARP:  Fix whitespace after ARPHRD_IEEE80211 in ARP header file.  From
    Daniel Agar
  - 6LoWPAN:  Fixes decompression of ipaddr from MAC address.  The logic
    used to populate the IP from the radio address should match
    sixlowpan_ipfromsaddr/sixlowpan_ipfromeaddr  From Anthony Merlino
  - 6LoWPAN: Fixes logic surrounding the Universal/Local bit.  This bit
    represents whether the IID is locally/globally administered. The U/L
    bit is bit 1 of the MSB of the EUI-64. It should only be inverted in
    cases where there is a full EUI-64. In cases where the IID is derived
    from say, a short address, this bit should be forced to 0, indicating
    that it is locally administered.   See:
    From Anthony Merlino
  - 6LoWPAN: IEEE802.15.4 stores and uses addresses in little endian
    order.  From Anthony Merlino
  - 6LoWPAN:  Address comment regarding avoiding double lookup of address
    context.  From Anthony Merlino
  - 6LoWPAN:  Record and restore d_buf on entry/exit of sixlowpan_input.
    This avoids an issue where d_buf gets set to NULL by 6LoWPAN, and
    then is used by forwarding logic from another network interface
    before getting set back to the drivers internal buffer.  From Anthony
  - 6LoWPAN:  sixlowpan_input should always return 0 if the incoming frame was
    consumed.  From Anthony Merlino
  - TUN Driver:  Fixes a problem reported by Masayuki Ishikwawa:  Recently I
    noticed that ARP response packet is corrupted when I tried to run
    bluekitchen with the latest tun.c in TAP mode.  If I revert commit
    8193c28e9126c9cb89042e80d6ebab7485a831e4, then it works again.  From Xiang
  - Telnet Driver:  Add missing logic to set read event flags in poll()
    method.  From Ken Pettit

* Wireless/Wireless Drivers:

  - BLE:  Fix uninitialized variables.  From Lwazi Dube
  - BLE GATT header file:  Fix struct name.  From Lwazi Dube
  - BLE GATT:  Remove unnecessary GATT ioctls  From Lwazi Dube

* Graphics/Display Drivers:

  - ST7032:  Fix seek method.  Was not taking into account the offset for the
    SEEK_END case.  Did not account for negative offsets.  On errors, it was
    clobbering the filep->f_pos setting.  From Gregory Nutt
  - PCF8574 Backpack:  Fix seek method.  Had the same problems as noted for
    ST7032 driver.  From Gregory Nutt

* Common Drivers:

  - Button Upper Half:  Fix two bad NULL checks  From Juha Niskanen
  - PWM Interface:  Remove dependency on CONFIG_PWM for the upper-half
    PWM header.  This allows compilation for the lower-level PWM drivers
    even if the upper-half PWM logic is not used.  From Mateusz Szafoni
  - Various I2C Drivers:  In most I2C drivers, correct upper index value
    in I2C trace dump. Eliminates the extra NONE event from the trace
    dump output. From Ouss4
  - Battery Gauge:  Add missing initialization of semaphore.  From Alan
    Carvalho de Assis
  - Batter Charger:  Add missing initialization of semaphore.  From Alan
    Carvalho de Assis
  - MCP73871:  Fix Microchip MCP73871 Battery Charger driver to register
    correctly as a battery charger.  The first element of a 'struct
    battery_charger_dev_s' should be a pointer to operations structure. From
    Alan Carvalho de Assis
  - MCP794xx:  Fix MCP794xx driver to wait for OSCRUN and fix tm_year.  From
    Abdelatif Guettouche
  - Numerous files:  Fixes usage of CONFIG_BIG_ENDIAN; should be
    CONFIG_ENDIAN_BIG  From Anthony Merlino

* ARMv7-A:

  - ARMv7-A MMU:  Fix end address calculation for mmu_invalidate_region() API
    From Petro Karashchenko

* ARMv7-M:

  - ITM:  Fix missing space causing macro issues  From Alan Carvalho de
  - Common Exception Handlers:  This commit changes the lazy and non-lazy
    exception handler to remove a couple of cpsid instructions from them
    on ARMv7-m.  If my understanding is correct then these interrupt
    manipulations aren't doing anything anyway because prioritization
    stops secondary interrupts arriving and, even if they did work, they
    would have introduced race conditions for the period of time between
    the interrupt arriving and further interrupts being disabled.  From
    Dave Marples
  - MPU/Protected Mode Build:  Revert "arch/arm/armv7-m:  MPU:
    mpu_log2regionceil needs take into account the offset too".  Masayuki
    Ishikawa reports that this commit breaks ALL PROTECTED mode builds.  It
    violates the basic requirements of the use of the MPU in protected mode.
    Those basic requirements are:
      1. The MPU region must be aligned to the base address of the memory
         region being mapped (it may NEVER extend before the memory region).
         That is, the following MUST always be zero: (base & ((1 << l2size) - 1))
      2. The MPU region must never extend beyond the end of the memory region.
         That is, the following must be true:  size >= (1 << l2size)
    From Gregory Nutt

* Microchip PIC32MX Drivers:

  - PIC32MX Ethernet:  Fix a comparison in a debug assertion.  Should be
    <= vs <.  Noted by Anonymous in Bitbucket Issue 134.  From Gregory Nutt

* Microchip PIC32MZ:

  - PIC32MZ chip.h Header:  Add a missing " in an error message. From Ouss4

* Microchip PIC32MZ Drivers:

  - PIC32MZ Ethernet:  Fix a comparison in a debug assertion.  Should be
    <= vs <.  Noted by Anonymous in Bitbucket Issue 134.  From Gregory Nutt

* Microchip/Atmel SAMD21/L21

  - SAMD21/L21:  Corrects behavior of the I2C_M_NOSTART flag.  Also adds
    a release a bus on RXNACK and corrects typo priv->flags to msg->flags
    as priv->flags is never set.  From Alexander Vasiliev
  - SAMD21/L21:  Fix SAMD2L2 arch to use calibrated oscillator value.  Now
    SAMD20 and SAMD21 should work fine without external crystal.  Note that
    SAML21 Xplained board has an external crystal and doesn't need this change,
    unless you don't want to use the crystal.  From Alexander Vasiliev
  - SAMD21/L21 I2C Master:  Adds calculation of a timeout and disables
    interrupts in case of error.  From Alexander Vasiliev

* Microchip/Atmel SAMD21/L21 Boards

  - SAML21-Xplained:  Fix removed MAXCOARSESTEP from saml21-xplained board.
    From Alan Carvalho de Assis

* Microchip/Atmel SAMD51/Ex

  - SAMD51/Ex:  Alexander Vasiliev's fix to the SAMD21 I2C Master (commit
    b1110ba91c549572e94c24ebed202643233deee3) should probably also be
    applied to the SAMD51 I2C Master which is identical.  From Gregory Nutt

* Microchip/Atmel SAMV7

  - SAMV7 Serial:  Fix case where TTYS0 is not defined.  From Ken Pettit

* Maxim Integrated MAX326xx

  - MAX326xx:  WFI instruction in IDLE loop seems to interfere with
    stability.  Commented out for now.  Needs to be investigated further.
    From Gregory Nutt

* NXP i.MXRT Drivers:

  - i.MXRT FLEXPWM:  Correct duplicated definitions  From David Sidrane
  - i.MXRT SERIAL:  Fix TTYS0 defined definitions of higher numbered ports
    From David Sidrane
  - i.MXRT LPSPI:  Removed unused clock, that borked the build.  From David
  - i.MXRT LPI2C:  I2C Reset rework  From David Sidrane

* On Semi LC823450:

  - LC823450:  Fix up_allocate_heap() in lc823450_allocateheap2.c.  This
    change fixes heap size and also implements up_addregion().  From
    Masayuki Ishikawa
  - LC823450:  Fix go_os_start() in lc823450_start.c. I found a bug in
    go_os_start() that it returns immediately because it does not compare
    r1 to zero. This commit fixes this bug. Also, this commit fixes its
    description.  From Masayuki Ishikawa
  - Other Architectures:  Masayuki Ishikawa's change to go_os_start() was
    also to all MCU-specific start-up functions that support
    go_os_start(). From Gregory Nutt

* On Semi LC823450 Boards:

  - LC823450-XEVK:  Fix IOB params in rndis/defconfig.  These parameters
    work for HTTP audio streaming. From Masayuki Ishikawa
  - LC823450-XGEVK:  Change RNDIS MAC address assignment in rndis
    configuration.  In previous implementation, mac[0] was assigned to
    0xaa for RNDIS host to avoid MAC address conflicts with RNDIS
    device..  However, I noticed that this assignment causes a random MAC
    address generation on ubuntu16.04 or later which is inconvenient to
    set up network interface.  This new assignment scheme fixes this
    issue.  From Masayuki Ishikawa
  - LC823450-XGEVK:  Fix overlapped memory settings in memory.ld.  From
    Masayuki Ishikawa

* STMicro STM32 Drivers:

  - STM32:  Remove redundant STM32 family definitions from chip.h header
    file. It is already done in arch/arm/src/stm32/Kconfig  From Mateusz
  - STM32 ADC:  There is no DMA CFG bit for the basic IPv1 ADC.  From
    Mateusz Szafoni
  - STM32 ADC:  Refactor adc_reset. It should be easier to maintain this
    code if it's divided into smaller functions  From Mateusz Szafoni
  - STM32 F0 Clocking:  Fixes the problem in GPIO port clocks. Only port
    A clock was enabled although the comment states otherwise.  From Juha
  - STM32 F7 I2C:  I2C out of bounds access on priv->msgv.  Error in if
    statement. It was checking for msgc > 0.  If message count is 1, only
    index 0 is valid on priv->msgv.  Therefore random values in memory
    were used to set next_norestart.  From David Sidrane
  - STM32 H7 I2C:  Applied David Sidrane's I2C fix to the identical logic
    for STM32 H7. From Gregory Nutt
  - STM32 L4 I2C:  Applied David Sidrane's I2C fix to the identical logic
    for STM32 L4. From Gregory Nutt

* STMicro STM32 Drivers:

  - STM32 ADC:  Fix RCC reset logic.  From Mateusz Szafoni
  - STM32 ADC:  Fix compilation errors for chips with one ADV TIM.  From
    Mateusz Szafoni
  - STM32 DMA:  Add missing DMA channel configuration.
  - STM32 PWM:  STM32 MOE is not being appropriately handled for PWM for
    advanced timers.  It is only ever reset and so no PWM train is
    generated.  This change addresses this.  Noted by Dave Marples. From
    Mateusz Szafoni
  - STM32 PWM:  Fix compilation errors if the upper-half PWM logic is not
    enabled. From Mateusz Szafoni
  - STM32 SPI:  STM32F446 & STM32F469 correct PC1 SPI assignments From
    David Sidrane
  - STM32 TIM:  Fix compilation error if there is no TIM8.  From Mateusz
  - STM32 F0:  Fix GPIO EXTI lines assignment for STM32 M0.  From Mateuz Szafoni
  - STM32 F3 I2C:  Remove the extra NONE event from the trace dump
    output.  From Ouss4
  - STM32 F4 I2C:  Remove the extra NONE event from the trace dump
    output.  From Ouss4
  - STM32 F7 I2C:  Use clock_t for ticks instead of uint32_t to hold system
    time.  From Jussi Kivilinna
  - STM32 L4 I2C:  Use clock_t for ticks instead of uint32_t to hold system
    time.  From Jussi Kivilinna

* STMicro STM32 Boards:

  - STM32F429I-DISCO:  Fix lvgl demo removing STM32_FB_CMAP.  From Alan
    Carvalho de Assis
  - STM32VL Discovery:  Fix SRAM and FLASH size in the linker script.
    There is STM32F100RB with 8KB RAM and 128KB FLASH on the STM32VL
    Discovery kit. Invalid memory size could cause a hard fault.  From
    Matous Pokorny
  - STM32VL Discovery:  Fix memory size configuration and documentation.
    There is STM32F100RB instead of STM32F100RC on the STM32 VL Discovery
    kit.  From Matous Pokorny
  - Viewtool-STM32F107:  Change RNDIS MAC address assignment in rndis
    configuration. In previous implementation, mac[0] was assigned to
    0xaa for RNDIS host to avoid MAC address conflicts with RNDIS
    device..  However, I noticed that this assignment causes a random MAC
    address generation on ubuntu16.04 or later which is inconvenient to
    set up network interface.  This new assignment scheme fixes this
    issue.  From Masayuki Ishikawa

* TI Tiva:

  - Tiva LM/TM4C Start-Up:  Remove option CONFIG_TIVA_BOARD_CLOCKCONFIG.  It is
    not used and unnecessary.  Fix some naming.  up_clockconfig() is
    inappropriate.  Change tiva_clockconfig() to tiva_clock_reconfigure()
    then we can change up_clockconfig() to tive_clock_configure().  From
    Gregory Nutt
  - Tiva LM/TM4C GPIO Interrupts:  Fix tiva gpio interrupts  From Lwazi Dube
  - Tiva LM/TM4C:  Improve GPIO interrupt support by removing unnecessary,
    hard-coded per-MCU defines and using the existing Kconfig configuration
    options instead.  From Lwazi Dube

* TI Tiva Drivers:

  - Tiva TM4C Serial:  After commit
    51b78034ac8d1fdf598107bf4093f0beccd5b80b, my tiva console does not
    work - enter key produces garbage characters.  This commit fixes the
    problem for me.  From Lwazi Dube

* C Library/Header Files:

  - include/dsp.h:  Fix missing semicolon error in dsp.h  From MYAPICI
  - include/nuttx/compiler.h:  Correct support of C-version-specific features.
    Cannot depend on GCC version because -std=c89 may be used on comomand
    line.  Need instead to use __STDC_VERSION__ to determine if a feature is
    supported.  Also add conditional support inline, depending on C99.  From
    Gregory Nutt
  - libs/libc/stdio:  fread() should always set EOF if fewer than the
    requested number of bytes was not read.  Per Anthony Merlino. From
    Gregory Nutt

* Build System:

  - sched/irq/Make.defs:  Fix warning about irq_csection.o appearing
    multiple times in the same rule.  From Gregory Nutt

* Tools:

  - tools/gencromfs.c:  "gencromfs.c:1171:3: warning: ignoring return
    value of 'asprintf'", declared with attribute warn_unused_result
    [-Wunused-result].  From David Sidrane
  - tools/gencromfs.c:  Fix build on macOS.  From David Sidrane

* NSH Library: apps/nshlib:

  - apps/nshlib:  Fixes an error in the NSH parser.  There was a bug when
    executing an nsh shell script which contains a redirection. When the
    command in the script is executed, it sets the vtbl->np.np_redirect flag
    (as it should), but then doesn't restore it, leaving it set at the end of
    the script execution.  Then the vtbl->np.np_redirect flag is set when the
    'sh' command completes, causing a restore from un-initialized variables,
    thus leading to a crash.  See the code snippet below for an example test

    Test case:

      NuttShell (NSH)
      nsh> mkrd -s 1024 40
      nsh> mkfatfs /dev/ram0
      nsh> mount -t vfat /dev/ram0 /tmp
      nsh> echo "echo 1 > /dev/null" > /tmp/
      nsh> cat /tmp/
      echo 1 > /dev/null
      nsh> sh /tmp/

    The nsh prompt doesn't get printed.  You can type a couple of commands,
    but then the system will crash because of bad pointers.  From Ken Pettit
  - apps/nshlib:  Fix buffer overrun when redirected to a file.  SAVE_SIZE
    must be the same as sizeof(struct serialsave_s).  From Masayuki Ishikawa

* System Utilities: apps/system:

  - system/system.c:  Fixes build error; There is no result variable, use
    errcode instead.  From Anthony Merlino
  - apps/system/vi:  Bug fixes:
      1.  Deletion of last line in file using 'dd' caused infinite loop
          searching for 'nextline'.  Fixed.
      2.  Insertion of line above 1st line using 'O' caused line to be
          inserted on 2nd line.  Fixed.
      3.  Paste buffer from 'dd' was being free'd after the 'p'aste operation,
          preventing multiple paste opportunity.  Fixed.
      4.  The cursor was not being bound to the line end and was allowed to
          'hover' over the '\n' EOL character.  This caused wierd (relative to
          standard vi) insertion locations and cursor movement with 'a'ppend
          and 'i'nsert.  Fixed.
      5.  The 'vi_shrinkpos' position didn't take the end of file pointer into
          account when calculating 'curpos', 'prevpos' variables causing
          wierdness when deleting things near the end of the file.  Fixed.
      6.  The 'yy'ank command was improperly deleting the text from the
         document instead of simply yanking to the paste buffer.  Fixed.
      7.  The 'dd'elete line funciton was not copying the deleted line to the
          paste buffer as part of the delete operation.  Fixed.
      8.  The bottom line of the screen was sometimes being used for document
          text and other times for command / find entry.  Fixed by reserving
          the bottom the bottom line for status / command only.
      9.  When scrolling up / down through a file, the cursor position was not
          preserved and moved further and further to the left column based on
          the line lengths of the lines visited.  Fixed.
      10. The display was being COMPLETELY redrawn with each keystroke,
          causing the responsiveness to be unbearable.  Fixed.  Added logic to
          dynamicall indicated which portions of the screen need to be updated
          (full display, current line to end of screen, current line only,
      11. The individual display line updates were being performed a character
          at a time by calling the vi_putch() function, causing slow
          performance, especially in telnet or USBCDC sessions where there is
          a lot of overhead per packet.  Fixed by calling vi_write() instead
          with a block of characters with breaks as needed for TAB exansion.
      12. The forward delete 'x' operation allowed deletion through '\n'
          characters causing lines to be joined.  This is different from
          standard vi where 'x' at the end of a line performs a delete
          backward operation.  Fixed.
      13. When in 'ex' or find sub-modes (':' or '/' bottom line modes),
          hitting backspace with empty text did not return the operation to
          command mode like it does in standard vi.  Fixed.
      14. Performing a 'find' opertation would only search from the current
          cursor position to the end of the file and did not wrap like in
          standard vi.  Fixed.
      15. Loading a file that was larger than the initial text allocation
          would force a call to 'vi_extendtext', marking the file as modified
          when in fact it hadn't even been loaded yet.  Fixed.
      16. Combined vi_insert_mode and vi_replace_mode into a single function
          to save code space since they are nearly identical routines.
      17. In command mode, backspace was deleting characters which is
          different from standard vi.  Backspace in command mode normally
          simply moves the cursor left / to the previous line.  Fixed.
      18. Added code to handle boundry conditions when the file is new and
          commands are applied to an empty file.
      19. Fixed vi_shrinktext so it doesn't allocate a zero-length buffer when
          the last character in the file is deleted.
      20. The 'x' command was not copying to the paste buffer.  Fixed.
      21. Fixed parsecolon routine to properly deal with ":wq" command sequence.
    From Ken Pettit

* Wireless Utilities: apps/wireless:

  - apps/wireless/bluetooth/btsak:  'bt bnep0 info' outputs a reversed addr. It
    should print BDAddr: aa:bb:cc:dd:ee:ff instead of BDAddr:
    ff:ee:dd:cc:bb:aa.  From Lwazi
  - apps/wireless/bluetooth/btsak:  Fix some errors in btsak.  From Lwazi Dube
  - apps/wireless/bluetooth/btsak/btsak_main.c: Fix address parsing.  From
    Lwazi Dube
  - apps/wireless/bluetooth/btsak:  Remove unnecessary gatt get commands. From
    Lwazi Dube
  - apps/wireless/bluetooth/btsak/btsak_scan.c:  Fix reversed address.  From
    Lwazi Dube
  - apps/wireless/ieee802154/i8sak:  Fixes issues related to re-running
    daemon. Releases lock when releasing daemon. Re-sets daemon_shutdown so
    that a subsequent daemon launch does not immediately return.  From Anthony