NuttX-8.1 --------- The 132nd release of NuttX, Version 8.1, was made on September 14, 2019, and is available for download from the Bitbucket.org website. Note that release consists of two tarballs: nuttx-8.1.tar.gz and apps-8.1.tar.gz. These are available from: https://bitbucket.org/nuttx/nuttx/downloads https://bitbucket.org/nuttx/apps/downloads Both may be needed (see the top-level nuttx/README.txt file for build information). The major release version number is only incremented when there is a major change to the OS that makes it more-or-less incompatible with preceding versions. This release bumps the major version number from 7 to 8 due primarily to a major reorganization in the what was the configs/ directory in nuttx-7.31. That directory has been renamed boards/ and now has a directory structure that mirrors the organization of the arch/ directory for the most part: board/ - Holds all board-related information board/ - Holds board-related information for all boards that use the same CPU architecture. For example, all ARM-based boards will be found under board/arm board// - Holds board-related information for all boards that use the same MCU chip family. For example, all STM32-based boards will be found under board/arm/stm32 board/// - Holds board-related information for a specific board. This is analogous to the configs/ directory in nuttx-7.31. So, for example, the STM32F4-Discovery board support that was at configs/stm32f4disovery can now be found under boards/arm/stm32/stm32f4discovery. boards//// - All configurations for a specific board can now be found together in this configs/ subdirectory. So, continuing the example, the STM32F4-Discovery NSH configuration can now be found at boards/arm/stm32/stm32f4discovery/configs/nsh. In additional, common MCU logic can be found at board///common and MCU common drivers can be found at board///common. Related changes include changes to tools/, comments, and documentation that depend on the board directory structure. This re-organization is the work of Alin Jerpelea. Not only did Alin do this major directory re-organization, but he ran the code standard compliance tool and corrected every .c and .h file under boards/ so that they all correctly follow the NuttX coding style. These changes were very extensive and, hence, will not be addressed individually in the ReleaseNotes. You have to give Alin credit for his effort to take on really big jobs and stick with it until it is finished. Kudos! A more constrained re-organization of the drivers/ directory was also contributed by Augusto Fraga Giachero. Augusto reorganized some driver directories to make better functional associations and also to make space for a new set of RF-related drivers. Additional new features and extended functionality: --------------------------------------------------- * Core OS: - POSIX Message Queues: Add a test to verify that message queue is closed by the same task group that opened it. If not, then list corruption would result. This test is only performed if CONFIG_DEBUG_FEATURES is enabled since it should not normally be an issue: It would be a strange programming practice to open a message queue in open task group, then close it in another. From ???. - Signal Notifications: Add configuration option to select either the high-priority or low-priority work queue for SIG_EVTHREA notifications. From ligd. - System Calls: In order to support built-in in function in protected mode, a task_spawn() system call must be supported. task_spawn() and posix_spawn() are NuttX OS interfaces. In PROTECTED and KERNEL build modes, then can be reached from applications only via a system call. Unfortunately this is overly complex because there is a (soft) limit of 6 parameters in a system call; task_spawn has seven parameters. This is a soft limit but still difficult to extend because it involves assembly language changes to numerous architectures. Better to get more creative. Rather than extend the maximum number of parameters across all architectures, I opted instead to marshal the seven parameters into a structure and pass only a single parameter: A pointer to the structure containing the seven marshaled parameters. From Gregory Nutt. - /etc/passwd and /etc/group: Improve the format of the /etc/passwd file as used in the sim:nsh configuration. It is now a little more similar to other systems and includes user and group IDs. Add also an /etc/group file to support future testing. From Gregory Nutt. - User/Group IDs: Implement 'real' setuid, getuid, setgid, and getgid interfaces is so configured (otherwise fall back to stubs that support only the 'root' user ID and group. Once set, these IDs will be inherited by all child task groups. From Gregory Nutt. - Debug Output: Add debug macros for contactless. The various contactless device drivers currently define device specific debug macros within their local header files. This patch adds generic ctls[info|warn|err] macros for the overall contactless subsystem to be used in future drivers. Ported the existing contactless device drivers to use these generic logging macros and fixed some logging bugs along the way. From Michael Jung. - IOB instrumentation. Introduces producer/consumer id to every IOB call. This is so that the calls can be instrumented to monitor the IOB resources and to collect usage statistics. From Anthony Merlino. - IOB ProcFS: Adding ProcFS support at /proc/iobinfo to show the data collected from the IOB instrumentation. From Anthony Merlino. - Versioning: Report GIT information via ProcFS. GIT info reported: branch, version, GIT hash, hostname, user, build date. Integrates into existing .version and ProcFS. From David Alessio. * File System/Block and MTD Drivers: - BinFS: The BinFS file system uses the same built-in library and built-in arrays as does NSH. The built-in arrays are simple name- value pairs that map built-in function names with the user-space entry point. In the FLAT build, the built-in arrays are available everywhere via the backdoor left open by the FLAT address space. In the PROTECTED build, however, the kernel must maintain its own reference to the user-space built-in array. This commit adds those kernel globals and a new boardctl(BOARDIOC_BUILTINS) that can be used by applications to the provide the built-in list reference to the kernel. From Gregory Nutt. - MMC/SD: Added support for MMC (eMMC) bigger than 2 GB (Tested with IMXRT1050EVKB and samsung eMMC 16GB). - AT24CSxx: Register a character driver for UUID of AT24CSxx chips. Allows the UUID to read as a file or displayed from an nsh prompt with: nsh> hexdump /dev/eeprom.uuid From David Alessio. - Macronix FLASH: Add support for 4-byte addressing on >128Mb Macronix flash parts From jjlange. - MX25Rxx: Add support for 512B sectors. From Simon Piriou. - SST26: Accept the 16MBit Flash when reading the JEDEC-ID at initialization time. From Ouss4. * Network/Network Drivers: - IPv4 Options: Now handles reception of IPv4 packets with larger IPv4 headers containing options. From Gregory Nutt. - Sockets: Re-order the content of all address-family socket 'connection' structures so that they begin with a common prologue. This permits better use of logic for different address family types. From Gregory Nutt. - TCP: Make RTO and WAIT_TIME configurable. This fix is not really correct: TCP RTO really should be calculated dynamically for each TCP connection: http://sgros.blogspot.com/2012/02/calculating-tcp-rto.html. From zhangyuan7. - IP Forwarding: Check if interface is up early on when forwarding to avoid extra work. As noticed in a previous wireless commit, when forwarding is enabled and a packet comes in, the packet is attempted to be sent on each other netdev without regard for whether it is in the UP state. Of course this is eventually caught, but it can be caught earlier to avoid unnecessary work, especially in the 6LoWPAN case where a useless packet conversion will occur. From Anthony Merlino. - RNDIS: Expose option to change the number of write requests that can be in flight. From Anthony Merlino. - GS2200M: Add UDP support. From Masayuki Ishakawa - GS2200M: Implement GS2200M_IOC_IFREQ IOCTL command. From Masayuki Ishikawa. - GS2200M: Enable NuttX's DHCP client instead of GS2200M's DHCP client. From Masayuki Ishikawa. - GS2200M: GS2200M now supports SIOCGIFHWADDR From Masayuki Ishikawa. * Wireless/Wireless Drivers: - IEEE802.15.4 Network Driver: Allow 64-bit prefix to be configurable when auto-configuring the IPv6 address during bring-up. Previously, only the link-local prefix fe80::/64 was used. Also, put the network in the DOWN state at the end of initialization. From Anthony Merlino. - IEEE 802.15.4 MAC: Adds support for energy detect. Adds support for energy detect by introducing a new radio call/callback, as the PHY layer is required to perform the energy detect. From Anthony Merlino. - IEEE 802.15.4 MAC: Adds support for getting/setting macMaxFrameRetries via IOCTL. Add get support for rxonidle attribute From Anthony Merlino. - IEEE 802.15.4 MAC: Move the global iobuffer into the macnet struct so that more than one macnet device can exist. From Anthony Merlino. - IEEE 802.15.4 MAC: Defer handling of extracting association response to LPWORK queue. From Anthony Merlino. - IEEE 802.15.4 Radios: Support dynamic FCS length. Adds IEEE802154_ATTR_PHY_FCSLEN. This change introduces IEEE802154_ATTR_PHY_FCSLEN which the radio layer can support to set/get the FCS length that's added to the end of the frame. One use case, in promiscuous mode, is to add back in the FCS of the received frame by increasing the iob->io_len by the FCS length. From Anthony Merlino. - Xbee: Support "WR" AT command for writing parameters to non- volatile memory. From Anthony Merlino. - Xbee: Add configuration option for setting the default prefix to use when bringing up the network and setting the IP address. From Anthony Merlino. * Other Common Device Drivers: - RTC: If the RTC time is successfully set, then update the current system time to match. From ligd. - ADT7320: Add support for the ADT7320 temperature sensor. From Augusto Fraga Giachero. - DAC7554: Add support to the DAC7554 digital-to-analog converter. From Augusto Fraga Giachero. - DAT-31R5-SP+: Add support to the DAT-31R5-SP+ digital attenuator. Creates a the new device driver directory drivers/rf/ to support drivers related to RF peripherals. It also adds support for the DAT-31R5-SP+ digital attenuator. From Augusto Fraga Giachero. - ISL29023: Add basic driver of ISL29023 ambient light sensor. The basic driver can set operational mode, range, and resolution. It can also read lux value in continuous mode. Interrupt and the alarm is not implemented. From Matous Pokorny. - SHT3x: Add Sensirion SHT3x driver. From Markus Bernet. * Simulator: - Simulator Build: Even though the simulation has no "chips", it needs to have CONFIG_ARCH_CHIP and chip sub-directories. Otherwise, we would have to treat it as a special case in the build system after the changes to the boards/ directory. From Gregory Nutt. * Microchip PIC32MZ: - PIC32MZ. Make the PLL input clock configurable. From Ouss4. * ARMv7-M - Add ARMv7-M setjmp/longjump functions. From David S. Alessio. * NXP i.MXRT: - i.MXRT Clocking: Enable TRACE clocks if the divider has been defined in the board's board.h file. From Dave Marples. * NXP i.MXRT Drivers: - i.MXRT QEncoder: Adds quadrature encoder driver for IMXRT. From Nicholas Chin. - i.MXRT uSDHC: This change completes SDIO support for IMXRT, and also adds support for WiFi using the AP6212A module based on Simon Piriou's rather excellent work. The patch should also address DavidS's concern about width setting for USDHC1 and 2. Testing of the WiFi is minimal so far but functionality is proven. I'm specifically not happy that the driver doesn't recover elegantly from a DMA data checksum failure, but that is an issue that can be dealt with in due course ... I'm trying to get the rest of the interfaces fleshed out and the hardware proven so it can go for pre- production build. I _think_ there's only Bluetooth and USB-device left to implement now. From Dave Marples. - i.MXRT uSDHC: IMXRT uSDHC driver cmd line reset logic modified. From Ivan Ucherdzhiev. * NXP/Freescale Kinetis Drivers: - Kinetis Serial: Add possibility to specify pull-up instead of open drain for serial single-wire mode. From Beat Küng. * NXP LPC17xx/40xx: - LPC17xx/40xx Build: Cortex-M system reset is applicable to LPC17xx/40xx too. From Pavel Pisa. * NXP LPC17xx/40xx Drivers: - LPC17xx/40xx Ethernet: Follow the procedure listed in the LPC176x/5x User Manual when reading from and writing to the PHY's registers (section 10.11.14). I couldn't see any behavioral change after this commit, but nonetheless is a good practice to follow the manufacturer's recommended procedure. From Augusto Fraga Giachero. * NXP S31K1xx: - Added architecture support for the NXP S32K1xx family. Basic support includes the boot up logic, clock configuration, LPUART console, Systick timer, GPIO controls, and eDMA (unverified). * NXP S31K1xx Drivers: - S32K1xx eDMA Leverage eDMA logic from i.MXRT to S32K1XX. Appears to be the same IP but with fewer channels and features than the i.MXRT implementation. From Gregory Nutt. - S32K1xx LPUART: Bring in the LPUART from i.MXRT. It is the same IP. From Gregory Nutt. - S32K1xx SysTick: Bring in Cortex-M0+ SysTick and interrupt handling from samd2l2; bring in Cortex-M4F Systick and interrupt handling from LPC54xx. From Gregory Nutt. - S32K1xx GPIO: Bring in GPIO logic from Kinetis. Looks like similar IP. From Gregory Nutt. - S32K1xx Ethernet: Unverified port of the i.MXRT Ethernet driver to the S32K1xx. The i.MXRT uses the same IP. From Gregory Nutt. - S32K1xx LPSPI and LPI2C: Brings in the LPSPI and LPI2C peripheral drivers from the i.MXRT which used the identical IP. From Gregory Nutt. * NXP S31K1xx Boards: - S32K118EVB. This commit adds initial board support for the NXP S32K118EVB development board. Currently supports only a minimal NSH configuration. From Gregory Nutt. - S32K118EVB: Implement board support for on-board LEDs and buttons. This is taken from the Freedom-K66f with has the same LED and button configuration as the S32K116EVB and uses the same GPIO IP. LEDs, but not buttons, have have been verified. From Gregory Nutt. - S32K146EVB: Adds initial board support for the S32K146EVB development board. Currently supports a NSH configuration with a richer feature set than the minimal configuration of the S32K118EVB. From Gregory Nutt. - S32K146EVB: Add support for execution out of SRAM. This is helpful for bring-up when you want to avoid putting a lethal image in FLASH. From Gregory Nutt. - S32K148EVB: Add support for the NXP S32K148EVB development board. Very similar to the S32K146EVB but with more on-chip memory and hardware features. * Sony CXD56xx - CXD56xx: Migrate CXD56xx common code to the common/ directory: Boot code, FLASH code, I2C driver, UID. From Alin Jerpelea. - CXD56xx: Add SPH. The SPH is used by the ASMP implementation from the SDK. From Alin Jerpelea. * Sony CXD56xx Drivers: - CXD56xx: Add sensors connected to the SCU on Spresense board: o Avago APDS9930 Proximity and Ambient light Sensor. o Rohm BH1721FVC Ambient Light Sensor. o Rohm BH1745NUC Color Sensor. o Rohm BM1383GLV/BM1383AGLV Pressure Sensor. o Rohm BM1422GMV/BM1422AGMV Magnetic Sensor. o Bosch BMI160 Sensor support. o Bosch BMP280 Barometic Pressure Sensor. o Kionix KX022/KX122 Acceleration Sensor. o Murata LT1PA01 Proximity and Ambient light Sensor. o Rohm RPR0521RS Proximity and Ambient light Sensor. o BMI160: Add optional I2C address. From Alin Jerpelea. - CXD56xx: Add the sensor initialization for CXD56xx boards in the common board folder: o APDS9930: typo fix o cxd56_ak09912 initialization. o cxd56_bmi160 initialization. o cxd56_apds9960 initialization. o cxd56_bh1721fvc initialization. o cxd56_bh1745nuc initialization. o cxd56_bm1383glv initialization. o cxd56_bm1422gmv initialization. o cxd56_bmi160 initialization. o cxd56_bmp280 initialization. o cxd56_kx022 initialization. o cxd56_lt1pa01 initialization. o cxd56_rpr0521rs initialization. o cxd56_sensors initialization. o Backup Log driver. o crashlog driver. o Move gs2200m initialization. o Move ili9340 initialization. o Move lpm013m091a initialization. From Alin Jerpelea. * Sony CXD56xx Spresense Board: - Spresense: Enable SmartFS and UDP support From Masayuki Ishikawa. * STMicro STM32: - STM32F4 PLLI2S: Add support to enable the I2S Phase Locked Loop on STM32F427 and STM32F437 MCUs. From Michael Jung. * STMicro STM32 Drivers: - STM32 ADC: Add ADC calibration procedure for IP_ADC_V1. Tested on STM32F100, and it magically increased result accuracy. STM32F103 has the same calibration procedure. I am not sure about others. From Matous Pokorny. - STM32 SPI: TI Synchronous Serial Frame Format. The SPI macros on STM32 MCUs now support the Texas Instruments Synchronous Serial Frame Format protocol (TI protocol). Defined a new SPIDEV_MODETI and add support for it in stm32_spi.c. From Michael Jung. - STM32 UART: Serial add HW HS on UART 4 & 5. From David Sidrane. - STM32 PWM: Configure multi-channel duty only if channel specified. This allows you to update duty cycle for a single channel. From Mateusz Szafoni. - STM32F7 Ethernet: Add a timeout on MAC reset From David Sidrane. - STM32F7 FLASH: Exposes stm32_flash_xxx functions. From Anthony Merlino. - STM32F7 PWM: Configure multi-channel duty only if channel specified. This allows you to update duty cycle for a single channel. From Mateusz Szafoni. - STM32F7 UART: Serial add HW HS on UART 4 & 5. From David Sidrane. - STM32H7 ADC: Fix internal channel numbers. From Markus Bernet. - STM32H7 BBSRAM: Add BBSRAM support. From David Sidrane. - STM32H7 DTCM: Port DTCM from F7 From David Sidrane. - STM32H7 I2C: Select ARCH_HAVE_I2CRESET in configuration. From David Sidrane. - STM32H7 PWM: Configure multi-channel duty only if channel specified. This allows you to update duty cycle for a single channel. From Mateusz Szafoni. - STM32H7 RCC: Fix RCC register definitions and typos for ADC/UART. From Markus Bernet. - STM32H7 RTC: Ported over F7 RTC. From David Sidrane. - STM32H7 SPI: Allow more clock sources. From David Sidrane. - STM32H7 UART: Serial add HW HS on UART 4 & 5. From David Sidrane. - STM32H7 UART: Fix typo in UART8 configuration. From Markus Bernet. - STM32H7 UID: Ported UID from F7 From David Sidrane. - STM32L4 PWM: Configure multi-channel duty only if channel specified. This allows you to update duty cycle for a single channel. From Mateusz Szafoni. - STM32L4 UART: Serial add HW HS on UART 4 & 5. From David Sidrane. * STMicro STM32 Boards: - B-L475E-IOT01A: Add mx25rxx memory chip and smartfs support in NSH configuration. From Simon Piriou. - LX_CPU: Add support for the PIKRON LX_CPU board. From Pavel Pisa. - Nucleo-F303RE: Add basic NSH configuration. From Mateusz Szafoni. - Nucleo-F303RE: Enable console on UART2 and set entry point to nsh_main() in the PWM configuration. From Mateusz Szafoni. - Nucleo-H743ZI: Add RTC support. From David Sidrane. - Nucleo-L432KC: Added GPIO drivers for use with /apps/examples/gpio. From Daniel P. Carvalho. - Nucleo-L432KC: Added Zero Cross sensor to nucleo-l432kc. From Daniel P. Carvalho. * TI Tiva: - Tiva: Add support for Tiva TM4C123AH6PM. From Nathan Hartman. - Tiva Configuration: Modify preprocessor logic to support configurations with no UART. Now similar to logic for other architectures. From Nathan Hartman. - Tiva Interrupts: Add handling for IRQs 128 through 159. From Nathan Hartman. * TI Tiva Drivers: - TM4C QEncoder: Reinstate TM4C qencoder driver and expand its ioctls. Add TIVA_HAVE_QEI0, TIVA_HAVE_QEI1 as applicable to each ARCH_CHIP_TM4C12*. Rewrite tiva_qe_setup(). Replace tiva_qe_ppr() with tiva_qe_resetatppr(). Add tiva_qe_resetatmaxpos() and tiva_qe_resetatindex(). Add missing definitions: SIGMODE_QUADRATURE, SIGMODE_CLK_AND_DIR, SWAP_NO_SWAP, SWAP_PHA_PHB. Rename TIVA QEI ioctl QEIOC_PPR to QEIOC_RESETATPPR; add TIVA QEI ioctl identifiers QEIOC_RESETATMAXPOS, QEIOC_RESETATINDEX. From Nathan Hartman. * TI Tiva Boards: - TM4C1294-Launchpad: Enables /dev/userleds in board bring-up for tm4c1294-launchpad by calling userled_lower_initialize() in tm4c_bringup(). From Nathan Hartman. * TI Tiva Drivers: - Tiva GPTM timers: Implement 16-bit PWM mode. Add tiva_pwm16_sel_event() to choose GPTMCTL.TnEVENT value. Implement tiva_pwm_mode16(). This also involved numerous corrections to the 16-bit timer logic. Add tiva_timer16pwm_setperiodduty() to set initial period, duty cycle, and enable interrupts if requested in GPTM peripheral. Interrupts are not enabled in NVIC until tiva_timer16_start() is called. Add tiva_timer16pwm_setduty() to update duty cycle at any time. Add new TIMER_FLAG_* configuration flags to enable configuring the 16-bit PWM feature. Extend type of "flags" in tiva_timer32config_s and tiva_timer16config_s from 8- to 32-bits to allow more flags. From Nathan Hartman. * Build System: - Export Build: Export all variables/files to support architecture independent build against NSH. From Pavel Pisa. - Application Export: This change too build tools allows to export built-in applications registry into temporarily created directory where export archive content is prepared. If the Makefile in apps/ directory does not define export: target then error is print but export continues without interruption. It would be more logical to print warning but there is no way instruct apps make to not print error. From Pavel Pisa. - boards/Board.mk: Add support to pass dependency paths. From Gregory Nutt. * Libraries/Header Files: - libs/libc/libc.csv: Add some missing C library functions. From Pavel Pisa. - libs/libc/libc.csv: Add ioctl() to fs_ioctl() wrapper for varidic case. From Pavel Pisa. - libs/libc/builtin/: Moves shared built-in information out of binfmt/libbuiltin and into libs/libc/builtin where it can be shared with applications. This should permit built-in application in the PROTECTED build where binfmt/libbuiltin was not available in user space. From Gregory Nutt. - libs/libc/dirent/: Added alphasort() implementation, scandir() implementation and DT_* definitions to include/dirent.h. Apparently those definitions are not required by POSIX, but are part of 4.3BSD and available in glibc as well. From Michael Jung. - libs/libc/grp/: Added stubbed implementations of getgrgid, getgrgid_r, getgrnam, getgrnam_r, and initgroups. These functions are essentially stubs pretending that NuttX supported groups and that the only configured group in the system was 'root' with gid 0. The intend is not to provide meaningful new features, but to ease porting of foreign source code to NuttX. From Michael Jung. - libs/libc/machine/arm/armv7-m/: Add Cortex M4F machine optimized fabsf and sqrtf. From David S. Alessio. - libs/libc/pwd/: Added stubbed implementations. Added stubbed implementations of getpwuid, getpwuid_r, getpwnam, and getpwnam_r. These functions are essentially stubs pretending that NuttX supported users and that the only configured user in the system was 'root' with uid 0. The intend is not to provide meaningful new features, but to ease porting of foreign source code to NuttX. From Michael Jung. - libs/libc/pwd and libs/libc/grp/: Modify to get user/group data from /etc/passwd and /etc/group if so configured. From Gregory Nutt. - libs/libc/stdio/: Add support for the size_t integer qualifier 'z' to the printf family. This is kind of tricky due the variety of sizeof(size_t) on different platforms. From David Sidrane. - libs/libc/unistd.h: Added stubbed implementations of setuid() and setgid(). These functions are essentially stubs pretending that NuttX supported users and groups and that the only configured user and group in the system were both 'root' with a uid and a gid of 0, respectively. The intent is not to provide meaningful new features, but to ease porting of foreign source code to NuttX. From Michael Jung. - libs/libc/unistd/: Add getuid() and getgid() stubs to match MichaelJung's setuid() and setgid(). From Gregory Nutt. - libc/libc/unistd/: Add stubs for geteuid(), getegid(), seteuid(), setegid(), setreuid(), and setregid(). NuttX does not currently support effective user/group IDs, but these stubs will support linkage of applications that expect these POSIX standard interfaces. From Gregory Nutt. * Symbol Tables: - NuttX provides lists of available syscalls and library functions and tools to process them. The lists can be used to build symbol table which allows runtime program loading which can reuse functions already compiled into NuttX system image. List processing, compilation and linking to the final system image has been possible only under manual control until now. Provided changes add option (CONFIG_EXECFUNCS_GENERATE_SYSTEM_SYMTAB) to build complete list of available functions and syscalls automatically. The symbolic table is generated in form libsymtab.a which can be reused by application or directly pull in when "g_symtab" and "g_nsymbols" variables are requested by EXECFUNCS configuration. I have tried to follow mechanisms for library compilation in different kernel protection modes but tested only flat no-MMU build. The basic assumption is that this library and libraries providing syscall stubs and C- library functions are available in user-space context and initial application (usually NSH) registers the symbol table through IOCTL. The table can be reused then by another applications in their address space as kernel allows. Simple for flat or protected mode, I am not sure if really support in MMU mode. It is highly probable that I have made some mistake, overlooked something, but the functionality is optional (should not cause troubles in any mode if disabled) and main purpose is to lower memory overhead when more applications are loaded on memory constrained system which usually use direct kernel calling without protection or address space separation. If the table should be provided by kernel to applications then makefiles has to be adjusted. From Pavel Pisa. * Tools: - tools/: Change preferred argument of configurations tools to use ':' as the delimiter between and . This is to emphasize that this is not a path; it is configuration specification. The legacy '/' delimiter is still supported but not recommend and not advertised. Updated configurations instructions in README.txt files to show ':' delimiter vs '/' delimiter. Update all configuration-related tools to accept ':' separator between board and configuration name. From Gregory Nutt. * apps/ General: - Makefile: Added support for application-specific export target. Used by nuttx/tools/mkexport.sh. From Pavel Pisa. - apps/builtins: Move apps/builtins/builtin_forindex.c to nuttx/libs/libc/builtin since it is required by kernel logic as well. Other changes account for movement of builtin.h from nuttx/include/nuttx/binfmt/built.h to nuttx/include/lib/builtin.h. From Gregory Nutt. * Examples/Tests: apps/examples: - apps/examples/uid: Demo used to verify PASSWD and GROUP interfaces. From Gregory Nutt. - apps/examples/webserver/: Initialilze network and run forever only if not built-in app. Infer from CONFIG_NSH_BUILTIN_APPS if we are a NSH built-in app or not. If built-in app (CONFIG_NSH_BUILTIN_APPS defined) then we assume network is initialized prior to webserver starting and we exit on webserver failure. If running standalone (CONFIG_NSH_BUILTIN_APPS is undefined) then behavior is unchanged: webserver initializes network and runs forever. From Nathan Hartman. * Network Utilities: apps/fsutils: - apps/fsutils/passwd: Handle the improved the format of the /etc/passwd file. It is now a little more similar to other systems. From Gregory Nutt. * Network Utilities: apps/netutils: - apps/netutils/dhcpc: Add host name support to DHCP client. From Masayuki Ishikawa. * Network Utilities: apps/wireless - apps/wireless/ieee802154/i8sak: I8sak improvements: (1) Adds support for getting/setting maxretries and promsicuous mode from i8sak, (2) Fixes a build warning and handles a few cases where a fault can occur due to not catching missing arguments. From Anthony Merlino. - apps/wireless/ieee802154/i8sak: Allow setting the endpoint PAN ID. From Anthony Merlino. - apps/wireless/ieee802154/i8sak: Adds support for energy scan result printout. From Anthony Merlino. - apps/wireless/ieee802154/i8shark: Adds support for intentionally suppressing passing the FCS so that Wireshark doesn't try to validate it. From Anthony Merlino. - apps/wireless/ieee802154/libmac: Adds support for getting/setting the FCS length From Anthony Merlino. - apps/wireless/gs2200m: Add UDP support to the GS2200M driver. From Masayuki Ishikawa. - apps/wireless/gs2200m: Add DHCP client handling in ioctl_request(). From Masayuki Ishikawa. - apps/wireless/gs2200m: ioctl_request() supports SIOCGIFHWADDR. From Masayuki Ishikawa. Bugfixes: --------- Only the most critical bugfixes are listed here (see the ChangeLog for a more complete list of bugfixes and for additional, more detailed bugfix information): * Core OS: - Priority Inheritance: Fix a race in telnet with PRIORITY_INHERITANCE and SCHED_HPWORK. Sometimes causes an assertion to fire incorrectly. From David S. Alessio. - Task Groups: Correct some naming. The NuttX task groups have been using the acronym 'gid' and also the type 'gid_t' for the the task group ID. That is incorrect. Than naming is reserved for use with group permissions. So these were all named to grpid and grpid_t so that it is clearer that these refer to NuttX task group IDs, and not to group permissions. From Gregory Nutt. - Task Termination: nxtask_signalparent() in task_exithook.c may invalidate the group's parent task ID (tg_ppid) too soon. The tg_ppid field is use only to remember the parent tasks ID so that it can send the SIGCHLD signal to it. So it must stay valid until SIGCHLD has been sent. In nxtask_signalparent(), it calls nxtask_sigchild() to send SIGCHLD to the parent, then invalidates tg_ppid. That would be okay, except that the SIGCHLD is only sent when the last member of the group terminates. That is incorrect; tg_ppid can be invalidated too soon and, as a consequence, SIGCHLD would never be sent. Noted by Jeongchan Kim in the Google group: https://groups.google.com/forum/#!topic/nuttx/SXd8fVwVKBk From Gregory Nutt. - sched_get_rr_interval(): sched_get_rr_interval() should return {0,0} if round-robin scheduling is not selected for the task. From Gregory Nutt. - SMP Type Collision: The non-standard, non-portable type cpu_set_t was created specifically to support the NuttX internal, SMP implementation. Any resemblance to any other cpu_set_t would be purely coincidental. However it appears that that coincidence has occurred. cpu_set_t has an equivalent, non-standard, non-portable type in the GNU C library. Compilation of libgnat expects this non-standard type to be defined. Who am I to stand in the way of progress? This commit removes the conditioning on CONFIG_SMP so that cpu_set_t is typed (as a uint8_t) even if CONFIG_SMP is not defined. Reference: Bitbucket issue 164. From Gregory Nutt. - Binary Loader: Change some debug macros from berr() to binfo() when dumping module data. The report of problems is important during development but when it enables complete informative output about load binaries then the important information can be easily overlooked. The huge output sent to serial terminal slows loading significantly as well. From Pavel Pisa. - Power Management: Fix g_pmcount 16-bits overflow when CONFIG_PM_XXENTER_COUNT set big value. From ligd. - Timekeeping: Fix cases in time conversion that must be >= NSEC_PER_SEC, not > NSEC_PER_SEC. From Gregory Nutt. * File System/Block and MTD Drivers: - opendir(): opendir() set errno to a negative value in one error case. From Michael Jung. - SmartFS: Update smartfs smart_scan() function. From Simon Piriou. - ProcFS: Add missing LF to cpuload procfs output From David Alessio. - MMC/SD: Copy/paste error fix in the SDIO-based block driver for MMC. From Ivan Ucherdzhiev. - MMC/SD: Correct a misplaced #endif in the SDIO-based driver. From Gregory Nutt. * Networking/Network Drivers: - Ethernet Configuration: Ethernet packet buffer size cannot be permitted to go below 1294 if IPv6 is selected. From Gregory Nutt. - TCP RST: Fix outgoing RST packet with wrong ack number. From biantao. - TCP Close: Fix TCP close flow; free the connection after all TCP close process finished. From zhangyuan7. - UDP Broadcast: Remove net stack dependency from CONFIG_NET_BROADCAST. This change allows us to use CONFIG_NET_BROADCAST without network stack (i.e. usrsock application can use broadcast) From Masayuki Ishikawa. - UDP: Fixes a UDP send copy-paste error in the new SO_LINGER code: CONFIG_TCP_NOTIFIER to CONFIG_UDP_NOTIFIER. From Juha Niskanen. - TCP and UDP: Fix errors in the new implementation of SO_LINGER. The tcp_drain() and udp_drain() functions were casting the working argument to the wrong type, resulting in hangs and abnormal behavior. There is a complexity in the TCP drain logic when the remote peer closes the socket before all Tx data has been flushed. Sometimes we are not notified of this case and wait the entire timeout unnecessarily. There is a workaround in place in tcp_txdrain(), but this really should be revisited. From Gregory Nutt. - 6LoWPAN: Removes unnecessary conversions that were happening due to a misunderstanding of byte ordering with EUI-64. From Anthony Merlino. - RNDIS: Fix issue with DEBUGASSERT when using composite device and endpoint numbers not being the default. From Anthony Merlino. * Wireless/Wireless Drivers: - wireless network devices: Attach radio to d_buf before registering device to handle forwarding case. When CONFIG_NET_IPFORWARD is enabled, and CONFIG_NET_6LOWPAN is being used, a packet that attempts to get forwarded on the 6LoWPAN interface will require that the radio's buffer be attached to d_buf. Otherwise an assertion will fire. The underlying "radio" in this case is the mac802154_netdev. This behavior has probably not been observed because the buffer is normally attached in the periodic txpoll worker. However, in my case, the 6LoWPAN interface was not UP yet, and therefore the worker hadn't run yet. From Anthony Merlino. - IEEE 802.15.4 MAC: Fixes issues with extended address. 1) Extended address should be read-only. 2) Extended address should be placed in frame in "reverse-canonical" order. The extended address is a read-only attribute and thus an attempt to write the extended address should be denied. Instead, the extended address should really be either set by the PHY/radio itself, or provided at board bring-up time to the radio layer. The MAC layer now pulls in the extended address from the radio any time the MAC is reset. The extended address is also supposed to be sent in the frame in reverse-canonical order. This is very confusing in the standard and it wasn't until I realized it was backwards in Wireshark that I researched this further. Searching online I find documents from the committee for suggestions/feedback on the future standard. It isn't in the 2015 standard but a newer version of the standard will presumably clarify this. It says that the extended address should be written in reverse-canonical form, meaning the OUI comes last, not first inside the frame. From Anthony Merlino. - IEEE 802.15.4 MAC: Frame Version should have been 1, but was being set to 3 when payload exceeds version 0 capabilities. Adds warning to build to indicate what is noted in the menu for CONFIG_MAC802154_NTXDESC From Anthony Merlino. - IEEE 802.15.4 MAC: Fixes issue where the txdesc's ackreq flag was not being set, despite the frame containing a Frame Control field with ACKREQ bit set. From Anthony Merlino. - Xbee: Fix logic to prevent deadlock scenario when there are no available IOBs From Anthony Merlino (2018-12-21). - Xbee: Change assumption about destination address mode for incoming frames. If a short address has been assigned to our radio, then assume we were addressed using that. Otherwise we were addressed using our extended address. From Anthony Merlino. - Xbee: Initialize the short address to the unspecified address and query for the extended address on initialization. From Anthony Merlino. - Xbee: Adds CONFIG_XBEE_LOCKUP_WORKAROUND option and corresponding logic to workaround an issue where the XBee locks up and stops responding. This typically happens when there is a lot of data being received over the link. When the XBee stops responding, many times, querying the XBee kicks it out of this state. However, occasionally the XBee is completely locked up and the XBee has to be reset. This change handles these conditions by periodically (if not naturally occurring) querying the XBee. If during any query, the XBee does not respond within a certain number of attempts, the XBee is reset. From Anthony Merlino. - Xbee: Cancel query timeout upon receiving the expected response. Add protection for race condition that can cause association timeout to continue firing repeatedly From Anthony Merlino. - Xbee: Detect lockup and reset XBee in xbee_req_data From Anthony Merlino. - Xbee: Fixes one instance of the use of IOBUSER_WIRELESS_MAC802154 which isn't available without the software MAC layer. Instead we use IOBUSER_WIRELESS_RAD802154 throughout the whole driver since it is always available when IEEE 802.15.4 support is enable. From Anthony Merlino. * Common Drivers: - pipes: Use inode reference counter instead of device reference counter to handle dup(). I found that if I dup() a pipe, the reference counter d_refs is not increased. If I close any of the fd, backed by the same pipe, the pipe will be freed. This causes any further usage on the fd referencing a non existent pipe. This change uses the inode reference counter, which is properly maintained during dup(). From Yang ChungFan. - SPI Bitbang: Fix build error when the SPI bitbang variable width support is enabled. From Augusto Fraga Giachero. - GPIO Lower Half: Remove limitation when pintype > GPIO_INTERRUPT_PIN. From ligd. * ARMv4/ARMv5 - Classic ARM7/ARM9: When performing stability test, the application would cause kernel crash. When I trace the stack, I find that register R1 has been changed, and its value is the same as register CPSR. In up_fullcontextrestore.S, the restoration of R0 and R1 is not atomic: 'msr cpsr r1 will enable interrupts and the recovery of r0 and r1 may be interrupted and the value or R1 may be changed. Fix is to use a single ldmia to restore R0, R1, and return via R15. From Loyen Wang. * ARMv7-A - ARMv7-A: Fix typo and missing quotation for ARMv7-A. From Oki Minabe. - ARMv7-A: Fix double increment in armv7-a's arm_addrenv_destroy_region(). From Oki Minabe. - ARMv7-A: Fix L2 page table mask for ARMv7-A page allocator. From Oki Minabe. * ARMv7-M - Interrupts. Removes the architecture-common CONFIG_ARCH_INT_DISABLEALL configuration option (but which was supported only by ARMv7-M). In the normal course of things, interrupts must occasionally be disabled using the up_irq_save() inline function to prevent contention in use of resources that may be shared between interrupt level and non-interrupt level logic. Now the question arises, if we are using BASEPRI to disable interrupts and have high priority interrupts enabled (CONFIG_ARCH_HIPRI_INTERRUPT=y), do we disable all interrupts except SVCall (we cannot disable SVCall interrupts). Or do we only disable the "normal" interrupts? If we are using the BASEPRI register to disable interrupts, then the answer is that we must disable ONLY the "normal interrupts". That is because we cannot disable SVCALL interrupts and we cannot permit SVCAll interrupts running at a higher priority than the high priority interrupts (otherwise, they will introduce jitter in the high priority interrupt response time.) Hence, if you need to disable the high priority interrupt, you will have to disable the interrupt either at the peripheral that generates the interrupt or at the NVIC. Disabling global interrupts via the BASEPRI register cannot effect high priority interrupts. From Gregory Nutt. - ARMv7-M Priorities: In the 'normal' case, the priority of the SVCALL interrupt was the same as the priority of the high priority interrupt. This means that SVCALL interrupt processing can defer the high priority interrupt and result in the jitter in that interrupt response. Fix is to raise the priority of the high priority interrupt above the priority of the SVCALL interrupt. Suggested by Nathan Hartman. From Gregory Nutt. * Microchip i.MXRT Drivers: - i.MXRT ENC: Fix some errors in register bit definitions. Noted by Arie de Muijnck. From Gregory Nutt. - i.MXRT LPI2C: Slave addresses are now correctly shifted when sending START. TX/RX FIFOs now discarded on error to prevent FIFO underflow errors. Fixes error checking to use priv structure and removes checking of BBF flag as it is not an error. From Nicholas Chin. * Microchip PIC32MZ Drivers: - PIC32MZ SPI: Fix SPI Mode selection. CKE is the inversion of the CPHA. From Ouss4. * Microchip/Atmel SAMD2x/SAML2x Drivers: - SAMD2/L2 I2C: Correct time calculation. From Bernd Walter. * Microchip/Atmel SAM3/SAM4: - SAM3/4: Add missing DMA configuration Kconfig setting. From Bernd Walter. * NXP LPC17xx/40xx Drivers: - LPC17xx/40xx ADC: Only use PCLKSEL0 for ADC on LPC176x family. From jjlange. - LPC17xx/40xx Ethernet: Set speed back to 10Mbps if 10Mmbps link negotiated. From Augusto Fraga Giachero. - LPC17xx/40xx I2C: Abort I2C transfers if a timeout has occurred. If a timeout has occurred in the middle of a I2C transfer, the next I2C interrupt should abort any transfers and send a stop condition to the corresponding I2C bus. Failure to do so will result in memory corruption / undefined behavior as priv->msgs points to a region of memory it doesn't owns anymore after lpc17_40_i2c_start returns. From Augusto Fraga Giachero. - LPC17xx/40xx I2C: Calculate the appropriate timeout for I2C transfers. Depending on the bus frequency and transfer size, I2C transactions can take quite a bit, so a fixed timeout is not a good solution. Calculating the timeout at run time poses some overhead but still better than aborting long transactions. From Augusto Fraga Giachero. * NXP/Freescale Kinetis Drivers: - Kinetis I2C: i2c transfer ensure correct result returned. kinetis_i2c_transfer released the mutex then fetched the state, this resulted in returning the correct results. From David Sidrane. * NXP LPC17xx/40xx Drivers: - LPC17xx/40xx CAN: If BOARD_CCLKSEL_DIVIDER is not equal to 1 on LPC178x or LPC40xx then base clock rate is calculated incorrectly because CCLK frequency does not correspond to PLL0 clock which is used for PCLK. This is partially workaround solution. It would be probably better to define BOARD_PCLK_FREQUENCY even for LPC176x targets and use that to replace divisor by base_clock in up_dev_s. From Pavel Pisa. * NXP LPC17xx/40xx Boards: - LPC17xx/40xx Ethernet: Add missing LPC17_40_PHY_CEMENT_DISABLE variable to the lpc17xx/40xx Kconfig file. For some reason this setting was not referenced anywhere except in the Ethernet driver. From Augusto Fraga Giachero. - LPC17xx/40xx Ethernet: Fix the initialization for DP83848x PHYs. The DP83848x requires the RMII mode to be manually enabled through the MII_DP83848C_RBR register. Before querying the speed and mode it should wait for the link to be established. From Augusto Fraga Giachero. * NXP i.MXRT Drivers: - i.MXRT LPUART: Fix some errors in the LPUART register definition files. Correct naming of a function: up_earlyserialinit() should be imxrt_earlyserialinit(). Remove prototypes for non-existent serial initialization functions. From Gregory Nutt. - i.MXRT USDHC: uSDHC typo fixes and command transfer error handling modified. From Ivan Ucherdzhiev. * SiLabs EFM32 Drivers: - EFM32 OTG host: Adam Porter's various fixex for STM32 FS/HS probably should be applied to EFM32 host which which has very similar IP. From Gregory Nutt. * STMicro STM32: - STM327F Configuration: Kconfig add depends on BBSRAM. From David Sidrane. - STM32F7 Interrupts: Fix overwritten IRQ enable. System boot order calls clock_initialize() then up_initialize(). clock_initialize() was setting up the alarm IRQ up_initialize is initializing the NVIC. This most likely worked in the past due to a bug in the NVIC initialization code that failed to clear the Interrupt enables. - STM32H7: Rix BBSRAM name in memory map. From David Sidrane. - STM32H7: Removed f7 in file path. From David Sidrane. * STMicro STM32 Drivers: - STM32H7 BBSRAM: Fix issues causing no writes and hardfaults. From David Sidrane. - STM32H7 BBSRAM: Convince compiler to perform 32 bit write. From David Sidrane. - STM32F7 OTGHS: Fixes bad preprocessor logic preventing USB OTG HS to work when used without external ULPI. From Anthony Merlino. - STM32 OTGH[FS|HS] Host STM32 host only initiates transfer if buflenl > 0. From Adam Porter. - STM32F7/H7/L4 OTG host: Adam Porter's fix for STM32 FS/HS probably should be applied to STM32 F7, H7, and L4 OTG host which are very similar. From Gregory Nutt. - STM32/F7/H7/L4: This change was required to get my devices (CDC-MBIM) to enumerate. Initially the system timed out retrieving the USB configuration descriptor. Ctrl IN requests got nothing but NAKs. I found that the initial SETUP packet and corresponding IN transfer were fine; it was the Status OUT phase that was getting the NAK. After receiving a NAK on the Status OUT, the code would loop back and issue another ctrl IN, which will always fail because the data was already transferred before. Thus the entire transfer would 'timeout'. The fix I implemented moves the DATANAK timeout loop to only apply to the Status OUT. Both the ctrl IN and the Status OUT need their own retry loops. From Adam Porter. - STM32F7 SDMMC: If there is only one SDMMC it is slot 0 From David Sidrane. - STM32F7 USART1: USART1_RXDMA is dependent on STM32F7_DMA2 not STM32F7_DMA1 From Anthony Merlino. - STM32H7 DBGMCU: Memory Map DBGMCU is @ 0x5c001000 From David Sidrane. - STM32F7 SDMMC: Fix warning when DMA is not enabled. From David Sidrane. - STM32H7 Ethernet: Fix some errors in Ethernet MAC configuration. From Markus Bernet. - STM32H7 Ethernet: Correct stm32h7 mac address filtering. Correct the MAC address 0 register definition and remove the 'receive all' flag. Now the Ethernet driver only receives packets addressed to correct MAC. From Jukka Laitinen. - STM32H7 Ethernet: Correct memory corruption error. The Ethernet driver initialization incorrectly wrote to DMACRXCR instead of DMACSR when trying to clear the stopped flags. This caused invalid buffer length in the DMACRXCR, causing DMA to overflow the RX buffers when large packets are sent to the device. From Jukka Laitinen. - STM32H7 PWR: Ensure data is flushed on backup domain access changes. From David Sidrane. - STM32H7 Serial: Serial fix undefined with TERMIOS From David Sidrane. - STM32H7 UARTs: Fix UART7/8 typos. Fix bug in ETH_MACQTXFCR configuration. From Markus Bernet. * STMicro STM32 Boards: - Multiple STM32 Boards: If CONFIG_SCHED_CRITMONITOR is selected, then make sure that ITM and DWT resources are enabled before accessing ITM and DWT registers. By default, these registers are disabled. Suggested by Juha Niskanen. From Gregory Nutt. - Nucleo-H743ZI: Correct logic that determines if the RTC driver is available. Find in build testing. From Gregory Nutt. - Nucleo-G071RB: Fix linker script to avoid .ARM.exidx section overlap with .data From Daniel Pereira Volpato. - Modify all linker scripts (all boards, all architectures) to use solution from Daniel P. Volpato. From Alan Carvalho de Assis. - Nucleo-L432KC ADC: Change analog pins definitions and correct DMA related issue. From Daniel P. Carvalho. * TI Tiva: - Tiva Configuration: Rename TM4C123GH6PMI identifiers to TM4C123GH6PM. Rationale: In terms of firmware programming, there is no functional difference between these parts: TM4C123GH6PMI7, TM4C123GH6PMI7R, TM4C123GH6PMT7, and TM4C123GH6PMT7R. From a programming standpoint, all of the above parts are TM4C123GH6PM, which means it doesn't make sense to differentiate between PM and PMI. (The PM means 64-LQFP. The I means temperature range -40C to +85C. It could be T meaning -40C to +105C. The R means it ships in Tape and Reel packaging as opposed to Tray.) From Nathan Hartman. - Tiva Configuration: Rename TM4C1294NC identifiers to TM4C1294NCPDT. Rationale: TM4C1294NC is ambiguous: TM4C1294NCPDT is a 128-TQFP, TM4C1294NCZAD is a 212-NFBGA. The TM4C1294NC part currently supported by NuttX is the TM4C1294NCPDT used on the TI EK-TM4C1294XL "Connected LaunchPad" (see configs/tm4c1294-launchpad). To ensure the correct part is fully specified, this commit updates all TM4C1294NC identifiers to TM4C1294NCPDT. From Nathan Hartman. - Tiva Configuration: Fix TM4C129XNCZAD part number in Kconfig and identifiers. Rationale: Fully specify that this is the 212-pin BGA package (ZAD ending) and for consistency with earlier changes to other Tiva TM4C12x part numbers in Kconfig names and identifiers. From Nathan Hartman. * TI Tiva Drivers: - Tiva TM4C 1-Wire: Fix wrong description on define TIVA_1WIRE_BASE: Was "EEPROM and Key Locker" (same as the item above). Now "1-Wire Master Module." Make DMACTL symbols visible for TM4C123: Remove "#ifdef CONFIG_ARCH_CHIP_TM4C129" guard around UART DMA Control (DMACTL) symbols. These bits are valid on TM4C123 devices, as well as on TM4C129. Also, improve the comment on UART_DMACTL_DMAERR. From Nathan Hartman. - Tiva GPIO Interrupts: LM3S, LM4F, TM4C: Fix GPIO IRQ error, ports R, S, T. Preprocessor logic for CONFIG_TIVA_GPIOx_IRQS was setting/ clearing port Q defines when it should act on ports R, S, T. gpioport2irq() was missing handling for port T. From Nathan Hartman. - Tiva Timers: Fix minor errors in tiva_timerlib.c. Fix incorrect preprocessor conditionals related to Kconfig defines: CONFIG_TIVA_TIMER32_EDGECOUNT -> CONFIG_TIVA_TIMER16_EDGECOUNT, CONFIG_TIVA_TIMER32_TIMECAP -> CONFIG_TIVA_TIMER16_TIMECAP, CONFIG_TIVA_TIMER32_PWM -> CONFIG_TIVA_TIMER16_PWM. From Nathan Hartman. - Tiva Timers: Fix errors in low-level timer support. tiva_gptm_configure() and tiva_gptm_release() were calling tiva_emac_periphrdy() instead of tiva_gptm_periphrdy(). Fix error in "abcde" description of bit flag defines. From Nathan Hartman. - Tiva Timers: Fix one code error and some comment errors. tiva_timer16_setinterval(): Was DEBUGASSERTing on mode != TIMER16_MODE. Fixed to DEBUGASSERT on mode == TIMER16_MODE. From Nathan Hartman. * ZiLOG Z80 Boards: - z80sim Serial: Fix uart_dev_t initializer: pollfds[] is a array of pointers and, hence, the NULL initializer must be included in braces. Noted by Paul Osmialowski in Issue #160. From Gregory Nutt. - z80sim Interrupts: Missed a name change up_irqinitialize to z80_irq_initialize. From Gregory Nutt. * C Library/Header Files: - include/netinet/in.h: Rename __pad member to sin_zero in struct sockaddr_in. Libwebsockets initializes the 'sin_zero' member of sockaddr_in objects to zeros. Apparently, judging from mailing list entries, there are platforms on which not doing this causes undefined behavior. On NuttX compiling respective code is broken, as the corresponding member variable is called '__pad'. Neither in the 'nuttx' nor in the 'apps' repository did I find any reference to this identifier. Thus, I believe its a safe bet to just rename it. UNIX Network Programming states in this regard: "The POSIX specification requires only three members in the structure: sin_family, sin_addr, and sin_port. It is acceptable for a POSIX- compliant implementation to define additional structure members, and this is normal for an Internet socket address structure. Almost all implementations add the sin_zero member so that all socket address structures are at least 16 bytes in size." From Michael Jung. - libs/libc/libc.csv: Correct dependency of setlocale on CONFIG_LIBC_LOCALE. From Pavel Pisa. - libs/libc/machine/arm/armv7-m: Fix build error for ELF. From Masayuki Ishikawa. - libs/libc/math.csv: Correct format of some function entries. From Pavel Pisa. * Tools: - tools/: Change all occurrences of /bin/(ba)sh in shell scripts to /usr/bin/env bash which appears more portable From Manuel Stühn. * NSH Library: apps/nshlib: - apps/nshlib/: As noted by David S. Alessio, 'cat' should not output any additional newline at the end of the cat'ed file content. This additional newline was added to assure that the NSH prompt was presented on a new line. However, that is not the correct behavior of 'cat' per the IEEE std: "The standard output shall contain the sequence of bytes read from the input files. Nothing else shall be written to the standard output." Reference: https://pubs.opengroup.org/onlinepubs/009695399/utilities/cat.html. This commit changes the function nsh_catfile() which underlies the 'cat' command and well as other NSH commands. Although this is the correct behavior for 'cat' it may not be the correct behavior for other commands implemented via nsh_catfile(). That remains to be determined. From Gregory Nutt. * System Utilities: apps/system: - apps/system/cle/: ASCII DEL should be treated by Delete-Left. From Dave Marples. - apps/system/i2ctool: (1) Friendlier I2C "knock-knock" uses only read request. While many I2C slave devices have multiple indexed registers, some have only one register and it's not indexed. For example, the I2C bus switch TCA9548A has only a Control Register, attempting to index to "Reg[0]" alters its contents to 0x00 disabling all subordinate buses. This patch fixes that problem by simply trying to read something/anything from the slave. This also helps coax out slaves with register files that start from a higher index, i.e. the AT24CS0x, FLASH chips with a UUID that appears as a 2nd I2C slave at (address+8), report their serial number at Reg[80]-Reg[8F] and will NAK a read of Reg[0]. (2) Modify get/set to prevent write of reg index if not specified From David Alessio. * Network Utilities: apps/netutils: - apps/netutils/dhcpd: Fixes bug where hwaddr was being used instead of ipaddr in the ARP update. This bug seems to have been introduced three years ago during a rewrite to remove a direct OS call to arp. I'm not sure how others have not run into issues with this. The behavior I was observing was that the DHCPD would go to offer an IP address, but then send a ARP request for the IP instead because it didn't know where to send the data. From Anthony Merlino. - apps/netutils/netinit/: Remove warnings. Unhook PHY notification signal handler when cleaning up, if an error occurs after the signal handler is put into place. From Nathan Hartman. * Wireless Utilities: apps/wireless: - apps/wireless/ieee802154/i8sak: Fixes conversion from extended address to IPv6 address. From Anthony Merlino.