The 128th release of NuttX, Version 7.28, was made on January 19, 2019, and is available for download from the Bitbucket.org 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 Nutt - 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 - BLE IOCTL Commands: Add SIOCBTCONNECT and SIOCBTDISCONNECT ioctl 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 Kivilinna - Sensirion SGP30: Driver for Sensirion SCD30 gas sensor. From Jussi Kivilinna - 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 nrf52_userleds.c 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 Szafoni - 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 Niesner - 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 Coval - 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 CONFIG_BOARD_INITIALIZE=y, (2) Add CONFIG_EXAMPLES_HELLO=y. From Masayuki Ishikawa - 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 Assis - 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 argument. 14. Added support for the 'D' and 'C' delete and change to end of line commands. 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 Vidovic * 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 Nutt
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: https://tools.ietf.org/html/rfc4291#section-2.5.1 https://tools.ietf.org/html/rfc4944#section-6 https://tools.ietf.org/html/rfc2464#section-4 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 Merlino - 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 Xiao - 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 Assis - 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 Sidrane - 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 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 Szafoni - 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 PaalijÃ¤rvi - 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 Szafoni - 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 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 case. 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/test.sh nsh> cat /tmp/test.sh echo 1 > /dev/null nsh> sh /tmp/test.sh ... 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, none). 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 Merlino