nuttx/Documentation/ReleaseNotes/NuttX-8.1

1160 lines
54 KiB
Groff
Raw Normal View History

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/<arch> - 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/<arch>/<chip> - 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/<arch>/<chip>/<board> - Holds board-related information for a
specific board. This is analogous to the configs/<board> 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/<arch>/<chip>/<board>/<configs> - 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/<arch>/<chip>/common
and MCU common drivers can be found at board/<arch>/<chip>/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 <board-name> and <config-name>. 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.