nuttx/Documentation/ReleaseNotes/NuttX-7.23
Alin Jerpelea e09aa5b7f9 Documentation: split the ReleaseNotes
Our releases contain links to github PR and lots of text so we
are splitting the release notes to individual files
This change should
- improve readability
- reduce the ReleaseNotes file for each release.

Signed-off-by: Alin Jerpelea <alin.jerpelea@sony.com>
2023-09-26 20:41:00 +08:00

1102 lines
52 KiB
Plaintext

NuttX-7.23
----------
The 123rd release of NuttX, Version 7.23, was made on December 4, 2017,
and is available for download from the Bitbucket.org website. Note
that release consists of two tarballs: nuttx-7.23.tar.gz and
apps-7.23.tar.gz. These are available from:
https://bitbucket.org/nuttx/nuttx/downloads
https://bitbucket.org/nuttx/apps/downloads
Both may be needed (see the top-level nuttx/README.txt file for build
information).
Additional new features and extended functionality:
* Core OS:
- sem_open() should return SEM_FAILED on any failures. This is change
in the POSIX specification since the original sem_open() was written
so many years ago.
- exec(): The non-standard interface exec() is now enshrined as a
official NuttX API. I really dislike doing this but I think that
this is probably the only want to load programs in the protected
mode. It is currently used by some example code under apps/ that
generate their own symbol tables for linking. Other file execution
APIs relay on a symbol table provided by the OS. In the protected
mode, the OS cannot provide any meaning symbol table for execution
of code in the user-space blob so that is they exec() is really
needed in that build case. And, finally, the interface is
completely useless and will not be supported in the KERNEL build
mode where the contrary is true: An application process cannot
provide any meaning symbolic information for use in linking a
different process.
- OS Internal Functions: Rename many OS internal functions so it is
clear that they are not part of the application interface. All
internal functions with the sem_* prefix became nxsem_*, sig* become
nxsig_*, mq_* become nxmq_*, etc.
- Cancellation Points: Add new cancellation point interface,
check_cancellation_point().
- Signals: Add logic to wake up a thread that is waiting on a signal
if it is canceled.
- sigtimedwait(): Add logic to suppress the wait if there is a
pending cancellation.
- clock_nanosleep(): Implement clock_nanosleep(). nanosleep() is now
reduced to a libc wrapper around clock_nanosleep().
- task_delete(): Do not permit user applications to delete kernel
threads.
- kthread_create(): Rename kernel_thread() to kthread_create() for
better naming consistency with task_create() and kthread_delete().
- boardctl(): Remove the BOARDIOC_GRAPHICS_SETUP command.
- TCB: Move POSIX thread specific data from pthread TCB to common TCB
structure. This change allows using pthread_getspecific and
pthread_setspecific from main thread. Patch also enables using
pthread data with config option CONFIG_DISABLE_PTHREAD=y. From Jussi
Kivilinna.
- mm: Remove the CONFIG_GRAN_SINGLE configuration option. It adds no
technical benefit (other than some minor reduction in the number of
interface arguments) but adds a lot of code complexity. Better
without it.
- mm: Add a function to get information about the state of the
granule allocator. This is the moral equivalent of mallinfo().
* File Systems/Block and MTD Drivers
- MT25Q Serial FLASH: Add support for Micron MT25Q series MT25Q128.
From Sebastien Lorquet.
- MX35LFxGE4AB: Add an MTD driver for Macronix MX35LFxGE4AB serial
NAND flash. From Ekaterina Kovylova.
- FileMTD: Add block device MTD interface. Block MTD interface
allows using block device directly as MTD instead of having to use
file-system in between. NOTE that this provides the opposite
capability of FTL which will let you use an MTD interface directly
as a block device. From Jussi Kivilinna.
- BCH: The character driver to block device access now supports an
IOCTL to get the geometry of the underlying block device.
- mkfatfs: Remove mkfatfs from the OS. This is a user-space
application and belongs in apps, not in the OS.
- procfs: Implements procfs /proc/fs/blocks and /proc/fs/usage files,
replacing the NSH df command. Also implements procfs /proc/fs/mount
file, replacing the NSH mount command when there are no arguments.
- procfs: Add /proc/meminfo. This is an alternative way to get the
information that was previoulsy available in apps/system/free.
apps/system/free was removed because it made illegal calls into the
OS violating the portable interface. This new procfs entry provides
the same information with no such violation. it also provides
information about the kernel heap (formerly /proc/kmm), about the
use of program memory(formerly /proc/progmem). And also information
for the page table usage in the KERNEL build.
- UserFS: Adds the UserFS client and of the UserFS feature in
general. Initially used Unix domain local sockets instead of
message queues. Easier to transfer big data in local sockets than
message queues. However, that lead to certain inescapable deadlock
conditions So the IPC was converted to UDP LocalHost loopback
sockets. The problem with the local sockets is that they do require
operations on the top level pseudo-file system inode tree. That
tree must be locked during certain traversals such as enumerate
mountpoints or enumerating directory entries. This conversion is
unfortunate in the sense that Unix local domain sockets are
relatively lightweight. LocalHost UDP sockets are much heavier
weight since they rely on the full UDP stack.
* Graphics/Display Drivers:
- Framebuffer character driver: Add framebuffer character device driver.
- LCD Framebuffer: Add support for a generic front-end that will
convert any LCD driver into a framebuffer driver.
- Framebuffer character driver: Include support for LCD drivers that
use a simulated framebuffer and must receive explicit notification
when there is an update to a region in the framebuffer.
- LCD: Make LCD driver configuration independently selected from NX
graphics configuration. This makes things awkward and loses some
error checking but is a necessary step in order to make LCD drivers
usable when the NX graphics system is disabled.
* Networking/Network Drivers:
- Networking: Add implementation of logic for SIOCGIFCONF and
SIOCGLIFCOF IOCTL commands.
- Network IOCTLs: Add support for the SIOCGIFBRDADDR ioctl() command.
- Routing Tables: Permit IPv4 and IPv6 routing tables to be of
different sizes.
- Routing Tables: Adds support for read-only routing tables. Prior
to this change, routing tables were only support in RAM and had to
be initialized with explicit logic to add the necessary routes to
the routing table. With this change, routes may be defined in the
pre-initialized, read-only routing table provided by the
board-specific logic.
This would be particularly useful, for example, in the case where
there is only a single network adaptor and you want all output
packets to go to the single adaptor in all cases. So for that
behavior you could add a read-only routing table to the
board-specific long that contains a single entry, the default route:
0.0.0.0/0.
- Routing Tables. Added support for routing tables in files in a file
system. This might be useful for customized, per-unit routing
tables. There are two issues with it however:
1. Reading from file system on a per packet basis could be slow. I
think it probably should have a small, in-memory cache of most
frequently used routes for good problem.
2. Currently the delroute logic is disabled due to a problem with
the design. NuttX does not currently support truncate().
Therefore, it is not possible to delete entries from the routing
table file. In this current implementation, that leaves the last
entry intact at the end of the file. An alternative design
might include a tag on each record to indicate if the record is
valid or not. That would work but would add complexity to the
other routing table functions.
- Routing Tables: Add support for an in-memory routing table cache in
order to improve performance when the routing table is retained in a
file. The cache holds the most recently used routing table entries
and so can eliminate some file access. Flush the in-memory cache
when any entry is deleted from the routing table. When a router
matching an IP address is found, add the routing table entry to the
cache.
- Routing Tables: Add logic to mark a route as most-recently-used in
the route cache.
- ICMP: This change adds support for semi-standard IPPROTO_ICMP
AF_INET datagram sockets. This replaces the old ad hoc, nonstandard
way of implementing ping with a more standard, socket interface.
- ICMPV6: This commit adds support for semi-standard IPPROTO_ICMP6
sockets. This is a replacement for the non-standard ICMPv6 ping
support that violated the portable POSIX OS interface.
- ICMPv6: Add option to manually specify router prefix in router
advertisement message. From Sakari Kapanen.
- Local Sockets: This commit modifies the Unix domain local socket
design. Local sockets are built on top of pipes. The Local socket
implementation maintained file descriptors to interrupt with the
pipes. File descriptors have the bad property that they are valid
only while running on the thread within the task that created the
local socket.
As a policy, all internal OS implementations must use "detached"
files which are valid in any context and do not depend on the
validity of a file descriptor at any point in time. This commit
converts the usage of file descriptors to detached files throughout
the local socket implementation.
* Wireless Networking/Wireless Drivers:
- IEEE-802154: Adds support for receiving MAC events via IOCTL through
socket interface. From Anthony Merlino.
- IEEE-802154: Simplifies notify() and rxframe() calls to a single
notify() call. dataind's and all other "notifs" are now "primitives"
which aligns with standard terminology From Anthony Merlino.
- MAC802154: Add support for getting promiscuous mode state From
Anthony Merlino.
- MAC802154 Character Driver: When in promiscuous mode, the char
driver sends the entire frame, including the MAC header. This
change adds an offset field indicating the header-payload boundary.
It is set to 0 when not in promiscuous mode as the header is not
passed to the application
- 6LoWPAN: Remove CONFIG_NET_6LOWPAN_FRAMELEN. In this case where
multiple radios are supported, this may not be a constant. 6LoWPAN
now always queries the driver to get the maximum frame length.
- 6LoWPAN: Support sending to a router that is on-link and may be
able to forward the packet for us if the destination is not
reachable directly. From Anthony Merlino.
- XBee: Adds XBee S2C (802.15.4 firmware) support. XBee driver
emulates mac802154 interface. From Anthony Merlino.
* Other Common Device Drivers:
- PowerLED: Add upper-half driver for high power LED driver (powerled)
From Mateusz Szafoni.
- RTC Driver: Add periodic alarms to upper and lower halves. From
Juha Niskanen.
- Pipes: Fix writing large buffers not triggering POLLIN for reader
poll. From Jussi Kivilinna.
- USB CDC/ACM Device: Add support for RX flow control to the CDC/ACM
driver.
- USB CDC/ACM Device: Add support for flow control TERMIOs in CDC/ACM
driver.
- USB RNDIS Device: Add RNDIS-over-USB driver. From Sakari Kapanen
with added Hi-Speed support from Masayuki Ishikawa.
- Loop Driver: Don't use file descriptors... Use the internal file
system interfaces so that the loop device can be shared across
threads.
- APA102 LED controller: Add driver for APA102 LED controller. These
LEDs are used on LED Strips and are controlled over SPI.
- INA219. Add INA219 Driver. The INA219 is a combined voltage and
current sensor that can measure up to 26 volts and a current that
depends on an external shunt resistor. Connection happens via
i2c/smbus and the chip features a power supply rail that is
independent from the measured voltage, so it can measure low
voltages. Right now it measures bus voltage and current, and does
not use the internal calibrated current reading, nor the available
power measurement. From Sebastien Lorquet.
- PCA9555: The IRQ subsystem now supports passing a void * parameter
to IRQ handlers. Use that method to support multiple PCA9555
devices, by passing a pointer to the device to the board defined IRQ
handler. Now the CONFIG_ for multiple PCA devices just allocates
device structures dynamically instead of statically when not enabled.
The same interrupt handler is entered with the device structure
parameter in all situations, multiple or single PCA. One should
still be careful if multiple PCA devices share the same IRQ. From
Sebastien Lorquet.
- APDS-9960: Add driver for the APDS-9960 gesture sensor. From Alan
Carvalho de Assis.
- MAX7219: Add support to MAX7219 LED Matrix as LCD interface. From
Alan Carvalho de Assis.
- WM8774: Add WM8774 audio DAC support. From Masayuki Ishikawa.
- Nunchuck: Add Nintendo Wii Nunchuck driver. From Alan Carvalho de
Assis.
* Simulation
- Simulation: Add a configuration for non-graphical testing of the
framebuffer character driver using apps/example/fb.
- Simulation: Add a configuration for testing the UserFS using
apps/examples/userfs.
* Broadcom BCM2708:
- BCM2708: Add enough infrastructrue (more stubs) to get a clean
compilation of the Pi Zero configuration (with many undefined things
at link time). This includes several register definition header
files (some from Alan Carvalho de Assis), basic interrupt handling
logic, boot-up files, GPIO support, tickless timer, build and
configuration logic
* Broadcom BCM2708 Boards:
- Raspberry Pi Zero. Basic board support at configs/pizero. Untested
in this release and still some remaining issues.
* Infineon XMC4xxx Boards:
- XMC4500-Relax: Add config for UART3 on RXD P0.0 and TXD P0.1 pins.
From Alan Carvalho de Assis.
* NXP Freescale LPC17xx Boards:
- Open1788: Add initialization of Framebuffer driver. Add
configuration for testing the framebuffer driver.
* NXP Freescale LPC43xx Drivers:
- LPC43xx: Add LPC43xx CAN driver. From Alexander Vasiljev.
* NXP Freescale LPC43xx Boards:
- MCB1700: Add support for Keil MCB1700 board. From Alan Carvalho de
Assis.
- Open1788: Add support for the discrete joystick driver.
- Open1788: Add a configuration for testing pdcurses with discrete
joystick.
* On Semiconductor LC823450
- LC823450: Add ADC driver and watchdog drivers. From Masayuki
Ishikawa.
- LC823450: Add IPL2 support. From Masayuki Ishikawa.
- LC823450: Add I2S support. From Masayuki Ishikawa.
- LC823450: Add auto LED for CPU activity. From Masayuki Ishikawa.
* On Semiconductor LC823450 Boards
- LC823450-XGEVK: Enable ADC and watchdog driver. From Masayuki
Ishikawa.
- LC823450-XGEVK: Add IPL2 support. From Masayuki Ishikawa.
- LC823450-XGEVK: Add WM8774 support. From Masayuki Ishikawa.
- LC823450-XGEVK: Add auto LED support. From Masayuki Ishikawa.
- LC823450-XGEVK: Enable CONFIG_SMP for audio. From Masayuki Ishikawa.
- LC823450-XGEVK: Add rndis configuration. From Masayuki Ishikawa.
* STMicro STM32:
- ARM Kconfig: Add support for classic ARM11 architecture selections.
- STM32 Tickless: Removes the restriction to 16-bit counts when a
32-bit timer is used for tickless operation on the stm32. As it
was, the restriction is very limiting, especially if one wants high
granularity and large achievable intervals and has the hardware
(namely the 32bit timers) available. From Rajan Gill.
- STM32 L4 Kconfig: Add some L486 and L496 chips. From Juha Niskanen
- STM32 F7: Adds architecture support for the STM32 F72x and F73x
families. From Bob Feretich.
- STM32 F7: Allow changing voltage output scaling setting and
prevents enabling over-drive mode for low frequencies (STM32 F74xx,
75xx, 76xx, 77xx). From Jussi Kivilinna. Changes replicated for
the 72xx and 73xx families.
* STMicro STM32 Drivers:
- STM32 ADC: Added support for ADC's IO_ENABLE_TEMPER_VOLT_CH ioctl
on STM32F10XX and STM32F20XX. From Dmitriy Linikov.
- STM32 Wakeup: Add logic for enabling wakeup pins. From Oleg Evseev.
- STM32 PWR: Adds stm32_pwr_getsbf and stm32_pwr_getwuf functions
that return the standby flag and the wakeup flag PWR power
control/status register. From Oleg Evseev.
- STM32 HRTIM: Sdd support for capture, chopper, deadtime and dump
registers. From Mateusz Szafoni.
- STM32 RTC: Canceling an alarm marks it as inactive. From Juha
Niskanen
- STM32 Serial: Add interface to get uart_dev_t by USART number,
stm32_serial_get_uart(). From Juha Niskanen.
- STM32 F33xx ADC: Initial ADC support for the STM32F33XX. From
Mateusz Szafoni.
- STM32 F33xx ADC: Add ADC DMA support to STM32F33 configuration. From
Mateusz Szafoni.
- STM32 L4 ADC: Port analog watchdog ioctl commands from the Motorola
MDK. From Juha Niskanen
- STM32 L4 ADC: Add option for routing ADC data to DFSDM, fix DFSDM
DMA. From Juha Niskanen
- STM32 L4 ADC: Add PM hooks from Motorola MDK
- STM32 L4 FLASH: Add function for modifying device option bytes,
From Juha Niskanen.
- STM32 L4 DFSDM: Add peripheral support for digital filters for
sigma-delta ADCs. Initial version. Timer trigger support is not
completed and there is some issue with DMA. From Juha Niskanen.
- STM32 L4 I2C: Port then STM32 F7 I2C driver to STM32 L4. STM32L4 I2C
driver is in work-in-progress state (plentiful of TODOs and
#warnings) and lags many features found in more up-to-date STM32 I2C
drivers. The peripheral on STM32F7 and STM32L4 are identical except
for L4's 'wakeup from stop mode' flag and STM32F7's I2C driver is in
more 'ready to use' state. The I2C clock configuration is kept the
same as before (I2CCLK = PCLK1 80 MHz) instead of switching to
STM32F7 arch default that is I2CCLK=HSI. Further work would be to
add configuration option for choosing I2C clock source instead of
current hard-coded default. From Jussi Kivilinna.
- STM32 L4 RTC: Add up_rtc_getdatetime_with_subseconds
- STM32 L4 RTC: Change maximum alarm time from 24h to one month. From
Juha Niskanen.
- STM32 L4 RTC: Add support for periodic interrupts with
(experimental) CONFIG_RTC_PERIODIC. From Juha Niskanen.
- STM32 L4 SDMMC: Add support for an SDMMC driver. From Miha Vrhovnik.
- STM32 L4 Serial: Suspend serial for Stop mode. From Juha Niskanen.
- STM32 L4 Serial/PM: STM32L4 serial PM interface improvements:
Check rx/tx buffers for pending data in pmprepare. Remove adhoc PM
interfaces and move serial suspend functionality behind CONFIG_PM.
From Jussi Kivilinna.
* STMicro STM32 Boards:
- STM32F103-Minimum: Add board support for APA102 driver. From Alan
Carvalho de Assis.
- STM32F103-Minimum: Add ADC support on stm32f103-minimum board.
From Alan Carvalho de Assis.
- STM32F103-Minimum: Add support for LM75 in the stm32f103-minimum
board. From Alan Carvalho de Assis.
- STM32F103-Minimum: Add an ADPS-9960 example configuration. From
Alan Carvalho de Assis.
- STM32F103-Minimum: Add board support for MAX7219 LED Matrix
controller. From Alan Carvalho de Assis.
- STM32F103-Minimum: Add USB MSC device initialization to
stm32f103-minimum. From Alan Carvalho de Assis.
- STM32F103-Minimum: Add framebuffer driver initialization for
stm32f103-minimum board. From Alan Carvalho de Assis.
- STM32F103-Minimum: Add Nunchuck board support for
stm32f103-minimum board. From Alan Carvalho de Assis.
- STM32F4 Discovery: Add support for JLX12864G display on STM32F4
Discovery board. From Alan Carvalho de Assis.
- Viewtool-STM32F107: Add support to auto-mount the procfs file system.
- Photon: Support SPI1 and SPI3. From Anthony Merlino.
- STM32F334-DISCO: Add lower half driver for high power LED
(powerled). From Mateusz Szafoni.
- STM32F334-DISCO: Add flash mode support for powerled driver. From
Mateusz Szafoni.
- STM32F334-DISCO: Add powerled example configuration. From Mateusz
Szafoni.
- STM32F334-DISCO: Add lower-half driver for SMPS (buck-boost onboard
converter). From Mateusz Szafoni
- Nucleo-F334R8: Add logic for zero latency high priority interrupts
example. From Mateusz Szafoni.
- Nucleo-F334R8: Add highpri example configuration. From Mateusz
Szafoni.
- STM32 F4 Discovery: Added support for the LIS3DSH accelerometer on
the STM32F4 Discovery rev. C boards. From Florian Olbrich.
- STM32 F4 Discovery: ROMFS for STM32F4 Discovery board. From Tomasz
Wozniak.
- STM32 F4 Discovery: Add a USB MSC configuration. From Alan Carvalho
de Assis.
- STM32 F4 Discovery: RNDIS support on STM32F4Discovery + DM-STF4BB.
NOTE: MAC address for the host side starts 0xaa. This assignment
scheme should be fixed later. From Masayuki Ishikawa.
- STM32 F4 Discovery: Add STM32F4 Discovery board support for
Nunchuck joystick. From Alan Carvalho de Assis.
- STM3240G-EVAL: Add a configuration for testing the Framebuffer
character driver using the LCD framebuffer front.
- STM3240G-EVAL: Mount procfs if enabled.
- STM3240G-EVAL: Add support for pdcurses and the pdcurses demo
programs in the 'fb' configuration.
- Clicker2-STM32: Adds SD card, automount, and syslog file
support and fixes a few minor issues. From Anthony Merlino.
- Clicker2-STM32: Adds support for USB RNDIS device. From Anthony
Merlino.
- Olimex STM32-H407: Add serial support on the on-board UEXT
connector. Add USART6 for UEXT connector. Add nsh_uext
configuration and README update. From Jan Pobříslo.
- Nucleo-F410RB: Add support for the nucleo-F410RB board. From
Gwenhael Goavec-Merou.
- STM32F429i-DISCO: Add framebuffer driver initialization. Add a
framebuffer (fb) configuration.
- STM32F429i-DISCO: Add logic to auto-mount procfs. Enable procfs in
all configurations that use NSH.
- STM32F429i-DISCO: Enable support for the STMPE811 touchscreen
controller. Enable touchscreen and also the touchscreen testa at
apps/examples/touchscreen in the fb configuration.
- STM32F429i-DISCO: Convert NxWM configuration to use LTDC
framebuffer driver instead of SPI serial. Also reduce number of
layers from 4 to 1 in fb configuration. Only one layer is used.
- STM32L476-MDK: Add support for the on-board LEDs.
- Nucleo-L496ZG: Add DFSDM initialization. From Juha Niskanen
- Nucleo-L496ZG: Add support for SDMMC driver. From Miha Vrhovnik.
- Nucleo-L496ZG: Enable I2C4 bus with i2ctool in NSH configuration.
From Jussi Kivilinna.
- Nucleo-L496ZG: Make HSE on Nucleo-L496ZG default to enable USB.
From Miha Vrhovnik.
- Nucleo-F746ZG: Use the serial console over /dev/ttyACM0 by default.
The Nucleo-F746ZG doesn't come with Arduio RS-232 shield, then it is
better to use the serial over the /dev/ttyACM0 that is created
automatically when the board is plugged in the computer. From Alan
Carvalho de Assis.
- Nucleo-144: Adds support for the Nucleo-144 boards with
STM32F722ZE. From Bob Feretich.
* ZiLOG Z80
- z80/include: compiler.h, limits.h, types.h: Update SDCC/z80 files
to include support for long long, inline, __FILE__, and __func__.
* C Library/Header Files:
- include/: Add stdnoreturn.h. Holds definitions for the C11
noreturn keyword. Applies to C too.
- include/netinet/tcp.h: Add trivial standard tcp.h header file.
- libc: Add support for readv() and writev().
- libc: Adds tcflow().
- libc: Add support for sigwait().
- libnx: Changes to allow the font subsystem to be built without
enabling the entire graphics system (CONFIG_NX). Adds
CONFIG_NXFONTS and CONFIG_NXGLIB. Needed to duplicate some Kconfig
setting for NXFONTs if it can be configured and built independently
of NX.
* Tools:
- tools/configure.sh: Add special support so that you can start with a
windows native configuration and install on a different host (and
vice versa).
- tools/configure.c: Duplicate new functionaity added to configure.sh.
- tools/configure.sh: This commit adds a -m option for macOS. For
anyone not aware, Apple renamed OSX to macOS recently; thus the 'm'
instead of 'o'. This does not change the other uses of *_OSX to
macOS. From jeditekunum.
- tools/configure.c: Update functionality to match last change to
tools/configure.sh.
* NSH: apps/nshlib:
- apps/nshlib: mount command no long uses the non-standard OS
interface foreach_mountpoint(). Now simply cats /proc/fs/mount
when there are no arguments to the mount command.
- apps/nshlib: df command no long uses the non-standard OS interface
foreach_mountpoint(). Now simply cats /proc/fs/blocks or
/proc/fs/usage.
- apps/nshlib: The free commands no longer used mallinfo() to get
the state of the use heap. Two reasons: That is not useful
information in the kernel build. And (2) there are other memory
resources of interest in other configurations such as the Kernel
heap in PROTECTED and KERNEL builds, and the prog mem uses when
FLASH is used to hold modifiable data. The free command has been
extended to just dump the content of procfs entries and to include
all of these other memory resources of the procfs entries are
available.
* Examples/Tests: apps/examples:
- apps/examples/fb: Add a simple test for the framebuffer character
driver..
- apps/examples/ostest: sem_open() now returns SEM_FAILED in the
event of a failure.
- examples/ostest: Extend cancellation test to make sure that
cancelable threads waiting on a message queue or on a signal can be
canceled.
- Added a simple reader example for the LIS3DSH acceleration sensor
on STM32F4Discovery. From Florian Olbrich.
- apps/examples/apa102: Add a Rainbow example for APA102 LED Strip.
From Alan Carvalho de Assis.
- apps/examples/flowc: Add a simple test of serial hardware flow
control.
- Add powerled driver example. From Mateusz Szafoni.
- apps/examples/ina219: A simple infinite loop that polls the INA219
sensor and displays the measurements. From Sebastien Lorquet.
- apps/examples/alarm: Add options for reading alarm value and
canceling it. From Juha Niskanen.
- Add -n samples to lm75 app and replace Centigrade with Celsius.
From Alan Carvalho de Assis.
- apps/examples/adps9960: Add ADPS-9960 example. From Alan Carvalho
de Assis.
- apps/examples/obd2: Add OBD2 example application. From Alan
Carvalho de Assis.
- apps/examples/userfs: Add a test case for verifying UserFS.
- apps/examples/smps: Add SMPS driver example. From Mateusz Szafoni.
- apps/examples/pdcurses: Bring in pdcurses demos and make them
conform to the NuttX coding style.
- apps/examples/pdcurses: Add a very simple example that just shows
the entire character set (7-bit only). It adapts to the size of
the framebuffer and, hence, can be used with very tiny displays.
In fact it looks really dumb on big displays.
- apps/examples/nunchuck: Add Nunchuck example application. From
Alan Carvalho de Assis.
* File System Utilities: apps/fsutils:
- apps/fsutils/mkfatfs: Move mkfatfs from the OS to here.
* Network Utilities: apps/netutils:
- apps/netutils/netlib: Add netlib_ipv6adaptor() and
netlib_ipv4adaptor().
- apps/netutils/netlib: Add helpers for reading the routing table:
netlib_read_ipv4route() and netlib_read_ipv6route().
- apps/netutils/netlib: Add new utilities netlib_ipv[4|6]router()
that can be used to determine the IP address of a router that would
be used some some destination IP address that is not locally
accessible.
- apps/netutils/ftpc: Adds support for IPv6 and fixes various
transfer issues. From Anthony Merlino.
* CANUtilities: apps/canutils:
- apps/canutils/libobd2: Add libobd2 for NuttX. From Alan Carvalho
de Assis.
* Graphics: apps/graphics:
- graphics/traveler: Convert to use the framebuffer driver.
- apps/graphics/pdcurs34: This commit brings the public domain
pdcurses library into NuttX. NuttX graphics support based on the
framebuffer character drivers has been integrated. Input is
currently limited to a discrete joystick driver.
* Wireless Utilities: apps/wireless:
- apps/wireless/ieee802154/i8sak: Adds socket interface support. You
can now use both socket or char driver to control the MAC layer.
From Anthony Merlino.
- apps/wireless/ieee802154/i8sak: Adds sniffer port option and a few
other get/set parameters. From Anthony Merlino.
- apps/wireless/ieee802154/i8sak: Changes 'notif' to 'primitive'
corresponding to the changes in the Kernel. From Anthony Merlino.
- apps/wireless/ieee802154/i8sak: Channel setting is now saved
locally, so when performing a startpan or assoc, the channel
previously set is still used, even though the MAC layer gets reset.
From Anthony Merlino.
- apps/wireless/ieee802154/i8sak: Adds ability to get/set rxonidle
setting for MAC layer. From Anthony Merlino.
- apps/wireless/ieee802154/i8shark: Adds i8shark, a sniffer "adapter"
that captures all 802.15.4 traffic, packages it into a Wireshark ZEP
packet, and sends it to a host running Wireshark From Anthony
Merlino.
* System Utilities (apps/system)
- apps/system/ping and ping6: This commit removes the ping and ping6
commands from NSH and replaces then with the apps/system/ping and
apps/system/ping6 built-in commands. The NSH ping[6] commands had
to be removed because they violated the portable POSIX OS interface.
The apps/system/png and ping6 command uses the sem-standard
IPPROTO_ICMP and IPPROTO_ICMP6 socket interfaces.
* Platform-Specific Support (apps/platform)
Bugfixes. Only the most critical bugfixes are listed here (see the
ChangeLog for the complete list of bugfixes and for additional, more
detailed bugfix information):
* Core OS:
- Task Environment Creation: Fix an error in the duplication of the
child tasks environment in the special case where the parent's
environment was created, but then all of the variables were unset.
In that case, there is still an allocation in place but the size of
the allocation is zero. This case was not being handled correctly
when a child task attempts to create its environment and inherit the
zero-size partent environment. Noted by Anthony Merlino.
- timer_create(): Fix watchdog resource leak if cannot allocate a new
timer. From Bruno Herrera.
- OS Internal Functions: Internal OS functions should not return error
information via the user errno variable: This includes functions
like file_seek(), file_read(), file_write(), etc. The complete list
is too long to duplicate here (please refer to the ChangeLog for
details).
- OS Internal Functions: Not only should internal OS functions not
modify the errno variable, they should never introduce cancellation
points: psock_connect(), psock_listen(), psock_getsockopt(), etc.
The list is too long to duplicate here (please refer to the
ChangeLog for details).
- OS Internal Functions: Create OS internal versions of many
applications functions that were used by the OS. The new versions
differ from the application interfaces in that (1) they do not
return error information via the errno variable, and (2) they never
create cancellation points. This includes new internal interfaces
like nxsem_init() that is like sem_init(), etc. There are too many
to list here (see the ChangeLog for details).
- Task Exit: task_exithook.c fails to link if signals are disabled
because was unconditionally trying to send the SIGCHLD signal to the
parent in certain configurations. Noted by Jeongchan Kim.
- memalign(): Fix heap corruption caused by using unaligned chunk
size. Unaligned nodes generated by memalign later cause heap
corruptions when nodes are shrink further (for example, 24 bytes ->
8 bytes, when alignment is 16 bytes). From Jussi Kivilinna.
- SMP: In sched/sched/sched_cpuselect.c, in order to find the cpu
with the lowest priority thread, we have to remember the already
found lowest priority. Noted by Anonymous in Issue #75.
- spinlocks: Disable local interrupts in spin_setbit() and
spin_clrbit() in order to avoid a deadlock condition. From Masayuki
Ishikawa.
- atexit()/on_exit(): Clear atexit()/on_exit() function pointer
before calling it. On most archs, up_assert() calls exit() so
without this change, if atexit() function triggers an assertion we
are in endless loop. From Juha Niskanen.
* File System/Block and MTD Drivers:
- tmpfs: Fixed directory unlocking in tmpfs_opendir. From Dmitriy
Linikov.
- fcntl(): fcntl() did not return success fail for F_SETFL. Reported
by Jussi Kivilinna.
- tcdrain(): tcdrain() was recently added to the NuttX C library.
But there is a problem. The specification of tcdrain() requires
that it be a cancellation point. In order to do this, tcdrain was
moved from the C library into the OS and the addition cancellation
point hooks were added. In non-FLAT builds, access via system calls
is also now supported.
- FS FAT: Fix hard-fault when listing contents of FAT root. From
Jussi Kivilinna.
- procfs: Correct a problem that was causing an apparent directory to
be reported as a file instead of a directory by opendir. This
happened after adding these three new procfs entries: fs/block,
fs/mount, and fs/usage. Of course, there is no directory fs in this
case, only three files that have fs/ in their relative pathnames.
The logic was detecting that fs was the name of the enty to report,
but it was then declaring that fs was a file (because fs/block is of
type file). This was fixed by adding a check for matching lengths.
i.e., if strlen(fs) != strlen(fs/block), then report fs as a
directory instead of a file.
- procfs: Fix uptime being clse to maximum 32-bit value in certain
config. From Juha Niskanen.
* Binary Loader:
- binfmt/: Don't schedule starthook if there are no constructors.
* Graphics/Display Drivers:
- LCD: ILI9341 initialize method not permitted to set errno.
* Networking/Network Drivers:
- Networking: net/netdev/netdev_ifconfig.c: Was not returning all of
the address info.
- Networking: In some cases, packets are still not sent behind the
router. I found that NuttX sends the ARP requests not to the router
but to the target. Mistake in file net/route/netdev_router.c. From
Aleksandr Kazantsev.
- SIOCGIFCONF and SIOCGLIFCONF IOCTL commands should only report on
network adatpors in the UP state.
- recvfrom(): Fix double leave_cancellation_point on error path.
From Jussi Kivilinna.
- send(): Verify that sock descriptor is valid. Fixes assertion when
using send on closed socket. From Jussi Kivilinna.
- sendto(): Remove assert check for null psock and buf input
pointers. Removes check as 'psock == NULL' altogether because that
checked for later in psock_send and psock_sendto. Change null check
for 'buf' so that it is handled same as in recvfrom.c (return
-EINVAL instead of assert). From Jussi Kivilinna.
- sockgetname() files need to include udp/udp.h and tcp/tcp.h or
otherwise NET_UDP_HAVE_STACK and NET_TCP_HAVE_STACK are undefined
and the logic is never compiled. Noted by Anthony Merlino.
- dup()/dup2(): There was a reference counting problem in the TCP
logic of net_clone(). net_clone() which is the common logic
underlying dup() and dup2() for sockets. When net_clone() calls
net_start_monitor() and net_start_monitor() returns a failure
(because the underlying TCP connection) then net_clone() must back
out the reference count on the structure. Problem noted by Pascal
Speck and this implementation of the solution is based on his
suggestion.
- close(): There was a possible recursion that could eventually
overflow the stack. The error occurred when closing the socket with
inet_close() while a socket callback was still queued. When the
socket callback was executed by devif_conn_event(), this resulted in
a call to psock_send_eventhandler() with TCP_CLOSE flag set which
then called tcp_lost_connection(). tcp_shutdown_monitor() then
called tcp_callback() again, which again called
psock_send_eventhandler(), and so on.... Noted by Pascal Speck.
Solution is also similar to a solution proposed by Pascal Speck.
- inet: Add check for protocol before handing out TCP and UDP sockets.
- IP Forwarding: Fixes typo that caused build error when IP
forwarding was enabled with CONFIG_NET_ICMPv6_NEIGHBOR enabled as
well. From Anthony Merlino.
- IP Forwarding: Do not add link layer header size to d_len inside
devif_forward(). From Anthony Merlino.
- TCP Networking: When CONFIG_NET_TCP_WRITE_BUFF=y there is a
situation where a NULL pointer may be dereferenced. In this
configuration, the TCP connection's 'semi-permanent' callback,
s_sndcb was nullified in tcp_close_disconnect. However, other logic
in tcp_lost_connection() attempt to use that callback reference
after it was nullifed. Fixed in tcp_lost_connectino() by adding a
NULL pointer change before the access. This was reported by Dmitriy
Linikov in Bitbucket Issue 72.
- UDP Broadcast: Fix some issues with regard to UDP broadcast
handling. This is Bitbucket Issue #77.
- ICMP: Fix an error in the poll logic. It was assumed that the
input parameter pvconn was valid. It was not. Instead, the poll
logic must work like the sendto() and recvfrom() logic: It must
keep a copy of the conn structure in the private data.
- ICMPv6: Fixes several errors preventing icmpv6_radvertise.c from
being compiled. Fixes conversions to network byte order (namely
vlifetime, plifetime, mtu). IPv6 source address is set to
link-local IP address instead of the address in the netdev
structure. This is in compliance to RFC 4861. RA didn't work on
Linux before this change. Finally, router prefix and prefix length
are derived from the IPv6 address and netmask in the netdev
structure. This seems to make more sense than using a predefined,
separate prefix from the config. From Sakari Kapanen.
- ICMPV6: icmpv6_input() needs to set d_len to 0 after consuming echo
reply, otherwise, garbage will get sent out. From Anthony Merlino.
- ICMPV6: Fix an error in the poll logic. It was assumed that the
input parameter pvconn was valid. It was not. Instead, the poll
logic must work like the sendto() and recvfrom() logic: It must
keep a copy of the conn structure in the private data.
- IGMPv2 Send: Fix incoming IGMP checksum calculation. From Louis
Mayencourt.
- ARP: Fix IGMP Ethernet address computation. From Louis Mayencourt.
* Wireless/Wireless Drivers:
- CC1101: CC1101 driver not permitted to set errno.
- 6LoWPAN: Correct an error in uncompressing multicast address.
- 6LoWPAN: Correct a bug in handling uncompressed frames (IPv6
dispatch). Adds a separate local variable, protosize, to keep track
of the size of thep protocol header.
- 6LoWPAN: Fix an endian-ness problem in 6LoWPAN address
decompression. From Anthony Merlino.
- 6LoWPAN: The logic that extracts interface identifier from the IP
address needs to be generalized to handle cases where the address is
not a link local address. From Anthony Merlino.
* Common Drivers:
- Serial: 16550 UART driver IOCTL method must not set errno; it must
return a negated errno value.
- LIS3DSH: Added the argument parameter (FAR void *arg) to the
interrupt handler provided by the LIS3DSH driver to fit the
definition for ISRs in xcpt_t. Changed the check for working queue
availability in lis3dsh interrupt handler to use work_available()
and not crash in case of an overrun. From Florian Olbrich.
- LIS2DH: Fixes for self-test. From Jussi Kivilinna.
- LIS2DH: Fix use of obsolete dbg macro. From Jussi Kivilinna.
- LIS331DL: LIS331DL driver not permitted to set errno.
- HTS221: Power-on sensor for loading calibration data. From Jussi
Kivilinna.
- MCP2515: Fix the MCP2515 Bit Rate Prescale calculation. Fix BRP
for SET_BITTIMING ioctl as well. From Alan Carvalho de Assis.
- STMPE811: Fix GPIO operation of STMPE811 driver.
1. STMPE811_GPIO_DIR was defined for register name and later was
redefined to be the pin direction mask for `stmpe811_gpioconfig`.
I decided to change register name to be STMPE811_GPIO_DIR_REG, and
keep pin direction mask STMPE811_GPIO_DIR, so that any external
code that already use this driver will be unchanged.
2. The STMPE811 register GPIO_DIR uses bit value 1 for output and 0
for input, but `stmpe811_gpioconfig` set the opposite.
3. The call to `stmpe811_gpiowrite` from inside of
`stmpe811_gpioconfig` leaded to deadlock.
From Dmitriy Linikov.
- BQ2429X: Add BATIO_OPRTN_SYSON for enabling BATFET after SYSOFF.
From Jussi Kivilinna.
* Simulation:
- Simulation: Serial and console drivers are not permitted to set
the errno.
* ARMv7-M:
- ARM Stack Check: Fix assert panic when both TLS and interrupt stack
are enable. From Jussi Kivilinna.
* Infineon XMC4xxx Drivers:
- XMC4 USIC: Kconfig was not selecting XMC4_USIC for USIC1. From Alan
Carvalho de Assis.
- XMC4 UART: Fix XMC4xxx USIC UART sginal to be high level when in idle.
From Alan Carvalho de Assis.
- XMC4 UART:xmc4_uart_configure() expects the channel# not uartbase as
an input parameter. From Alan Carvalho de Assis.
- XMC4 UART: Enable RX/TX status. From Alan Carvalho de Assis.
- XMC4 UART: The Alternative Receive Interrupt was not being
configured.
* Infineon XMC4xxx Boards:
- XMC4500-Relax: Setup max. freq. 120MHz and setup pull-up to UART
RXD pin. From Alan Carvalho de Assis.
* Microchip/Atmel SAMv7 Drivers:
- SAMv7: DAC and ADC drivers are not permitted to set the errno.
- SAMv7: Correct an error in RX DMA setup. From Manish Kumar Sharma.
- SAMv7 USB: It is necessary to disable pre-emption and interrupts
around a loop that copies TX data into the hardware in order to
avoid a TX data underrun condition. From Anthony Merlino.
* NXP/Freescale LPC31xx Drivers:
- LPC31xx: Serial and console drivers are not permitted to set
the errno.
* NXP/Freescale LPC43xx:
- lpc43xx: lpc43_adc.c was being selected by the build system when
DAC was selected.
* NXP/Freescale LPC43xx Drivers:
- LPC43xx Ethernet: Fix some backward logic setting full-duplex and
100mbps when autoconfiguration is disabled. Noted by Anonymous in
Issue #76.
- lpc43xx: UART_RX pins should be configured with input buffers
enabled. Otherwise it cannot be read. From Alexander Vasiljev.
* STMicro STM32:
- STM32 F2: Fixed build for STM32F20XX platforms when
CONFIG_STM32_DMACAPABLE is enabled. From Dmitriy Linikov.
- STM32 F4: Remove ltdc.h and dma2d.h. Those header files in that
location permitted inclusion into application space logic and,
hence, facilitated and encouraged calling into the OS and violating
the portable POSIX OS interface. The definitions in those header
files were move the appropriate location in the counterpart,
architecture specific files at arch/arm/src/stm32/dma2d.h and ltdc.h.
- STM32 L4: Build stm32l4_idle.c only if CONFIG_ARCH_IDLE_CUSTOM is
not enabled. From Jussi Kivilinna.
- STM32 F7: Remove ltdc.h and dma2d.h. Those header files in that
location permitted inclusion into application space logic and,
hence, facilitated and encouraged calling into the OS and violating
the portable POSIX OS interface. The definitions in those header
files were move the appropriate location in the counterpart,
architecture specific files at arch/arm/src/stm32f7/dma2d.h and
ltdc.h.
* STMicro STM32 Drivers:
- STM32: DAC and ADC drivers are not permitted to set the errno.
- STM32 ADC: Clear pending interrupts. From Mateusz Szafoni.
- STM32 CAN: Lower part of STM32 CAN driver
arch/arm/src/stm32/stm32_can.c uses all three hw tx mailboxes and
clears TXFP bit in the CAN_MCR register (it means transmission order
is defined by identifier and mailbox number).
This creates situation when order frames are put in upper part of
CAN driver (via can_write) and order frames are sent on bus can be
different (and I experience this in wild). Since CAN driver API
pretends to be "file like" I expect data to be read from fd the same
order it is written. So I consider described behaviour to be a bug.
Fixed by settin the TXFP bit in the CAN_MCR register (FIFO
transmit order). From comments by Alexey T, in Bitbucket Issue 73.
- STM32 HRTIM: Fix pclk calculation. From Mateusz Szafoni.
- STM32 HRTIM: Fix burst mode prescaler update. From Mateusz Szafoni.
- STM32 (alt) I2C: Ensure proper error handling. Injecting data
errors would cause the driver to continually reenter the isr with
BERR an RxNE. This fix allows the error to be cleared and
propagated to the waiting task. From David Sidrane.
- STM32: LTDC and DMA2D drivers are not permitted to set the errno.
- STM32 RTC: Workaround for potential subseconds race condition. In
all recent STM32 chips reading either RTC_SSR or RTC_TR is supposed
to lock the values in the higher-order calendar shadow registers
until RTC_DR is read. However many old chips have in their errata
this silicon bug (at least F401xB/C, F42xx, F43xx, L15xxE, L15xVD
and likely others): "When reading the calendar registers with
BYPSHAD=0, the RTC_TR and RTC_DR registers may not be locked after
reading the RTC_SSR register. This happens if the read operation is
initiated one APB clock period before the shadow registers are
updated. This can result in a non-consistency of the three
registers. Similarly, RTC_DR register can be updated after reading
the RTC_TR register instead of being locked."
- STM32 Serial: Do not stop processing input in SW flow-control
mode. From Juha Niskanen.
- STM32F33xxx ADC: Add some publicly visible interfaces and some
code to support injected channels. From Mateusz Szafoni.
- STM32F33xxx DMA: Add public interface to handle with DMA
interrupts. From Mateusz Szafoni.
- STM32F33xxx RCC: Fix CAN clock enable. From Mateusz Szafoni.
- stm32 F4 I2C: Ensure proper interrupt handling. Injecting data
errors that causes a STOP to be perceived by the driver, will
continually re-enter the isr with SB not set and BTF and RxNE set.
This changes allows the interrupts to be cleared and propagates a
I2C_SR1_TIMEOUT to the waiting task. From David Sidrane.
- STM32 L4 Serial: Do not stop processing input in SW flow-control
mode. From Juha Niskanen.
- STM32 F7: LTDC and DMA2D drivers are not permitted to set the errno.
- STM32 L4: DAC and ADC drivers are not permitted to set the errno.
- STM32 L4 DAC: Do not configure output pin if it is not used. From
Juha Niskanen.
- STM32 L4 RTC, PM: Small fixes to subseconds handling, ADC
power-management hooks
- STM32 F4 RTC: Fix reading alarm value that is more than 24h in
future. From Juha Niskanen
- STM32 L4 RTC: Fix reading alarm value that is more than 24h in
future. From Juha Niskanen
- STM32 L4 TIM: Fix compilation of timers with complementary outputs
when not PWM_MULTICHAN. From Juha Niskanen.
- STM32 L4 RCC: Restore backup-registers after backup-domain reset.
From Jussi Kivilinna.
- STM32 L4 RTC: Correct RTC_SSR and RTC_TR read ordering. In all
recent STM32 chips reading either RTC_SSR or RTC_TR is supposed to
lock the values in the higher-order calendar shadow registers until
RTC_DR is read. Change the register read ordering to match this and
don't keep a workaround for a hypothetical race condition (not in
any L4 errata, lets for once assume ST's silicon works as it is
documented...)
- STM32 L4 RTC: Init mode was never exited because nested locking in
rtc_synchwait() disabled backup domain access. From Juha Niskanen.
- STM32 L4 RTC: Use backup register magic value instead of INITS
bit. The INITS (bit 4) of RTC_ISR register cannot be used to
reliably detect backup domain reset. This is because we can operate
our device without ever initializing the year field in the RTC
calendar if our application does not care about correct date being
set. Hardware also clears the bit when RTC date is set back to year
2000. From Juha Niskanen.
- STM32 L4 RTC: Put back the SSR race condition workaround. ST has
confirmed that the issue has not been fixed, and that it applies to
STM32 L4 too (was not in errata sheets due to documentation bug) See
discussion: https://community.st.com/thread/43710-issue-with-rtc-maximum-time-resolution .
From Juha Niskanen.
- STM32 F7 BBSRAM: Avoid assert in stm32_bbsram_savepanic. If panic
happens before stm32_bbsram is initialized, stm32_bbsram_savepanic
caused additional assert panic. Function has null pointer check, so
drop DEBUGASSERT. From Jussi Kivilinna.
- STM32 F7 I2C: fix I2C_M_NORESTART handling. From Jussi Kivilinna.
- STM32 F7 I2C: Restore bus frequency after I2C reset. Copy
frequency restoration fix from STM32L4 I2C driver to STM32F7 I2C
driver. From Jussi Kivilinna.
- STM32 F7 RTC: Fix reading alarm value that is more than 24h in
future. From Juha Niskanen
* STMicro STM32 Boards:
- STM32F334-DISCO: Add missing ram_vectors configuration in linker
script. From Mateusz Szafoni.
- Nucleo-F334R8: Add missing ram_vectors configuration in linker
script. From Mateusz Szafoni.
- Nucleo-F334R8: Add Missing ADC trigger configuration to the highpri
configuration. From Mateusz Szafoni.
- STM3240G-EVAL: The timer frequencies (BOARD_TIMx_FREQUENCY) are
incorrectly defined in board.h. Since the APB prescalers are set to
divide by 4 and 2 respectively, the frequencies should be "2xAPBx"
as said in the comment. The correct frequencies are already defined
but as STM32_APBx_TIMx_CLKIN. From Mattias Edlund.
- STM32F429i-DISCO: The ltdc configuration has been deleted because
it violated the portable POSIX OS interface. It used
apps/examples/ltdc and include ltdc.h and dma2d.h which were also
removed for the same reason.
* ZiLOG Z80
- configs/z80sim and xtrs: Serial driver lower halves ioctl methods
should return a negated errno value, not set the errno variable.
- z80 Make.defs: Fixes dependency generation with newest SDCC
compiler.
- configs/z80sim: Fix a naming problem. Also, don't try to build the
serial driver if CONFIG_NFILE_DESCRIPTOR=0.
- Z80: Makefile fix for use with current SDCC.
* Build System
- configs/: All defconfig files that include
CONFIG_NET_ICMPv6_SOCKET=y need to select CONFIG_SYSTEM_PING6=y and
deselect CONFIG_DISABLE_POLL.
- configs/: All NX configuration... Because of recent changes to
libnx/nxfonts, Supported bit per pixel must be separated specified
for NXFONTs too and need to match the select BPP for NX.
- Build system: Fix CONFIG_BUILD_KERNEL logic directories that have
ubin and kbin subdirectories. Conditional logic was fine for
CONFIG_BUILD_FLAT and CONFIG_BUILD_PROTECTED but generated useless
dependencies if CONFIG_BUILD_KERNEL.
* C Library/Header Files:
- libc/stdio: Build the lib_noflush() and lib_snoflush() stubs even
if CONFIG_FILE_DESCRIPTORS=0. They may still be needed.
- libc and libnx: When the libraries are built into two libraries, a
user space library and a OS space library (as in the PROTECTED and
KERNEL build). Then the user space library must not use the OS
internal interfaces; similarly, the OS must avoid using the
userspace interfaces so that it does not muck the errno value or
create spurious cancellation points.
- libc/match: Use of exp() vs expf() in logf() caused function to be
slow. From Alan Carvalho de Assis.
- libnx: Fixes a memory leak that is caused because the client message
queue is not unlinked after the client disconnects from the NX
server. From Masayuki Ishikawa.
- sscanf(): Fix sscanf() character conversion (%c): do not add '\0' at
the end as for strings, cause, for example, parsing one character
will fill two bytes: character itself and zero one '\0' after it, so
will overflow one byte variable argument and corrupt memory for
variables allocated after it. From Oleg Evseev.
* Tools
- tools/: configure.sh and configure.c should redirect stdout to
/dev/null but should not suppress stderr output.
* NSH: apps/nshlib:
- apps/nshlib/: Avoid truncating the strcmp result in the parser
into a unsigned char variable. nshlib/nsh_netcmds.c: Check for
valid hostip before using it. From Bruno Herrera.
- apps/nshlib/: Fix resource leak in 'dd' commenad when 'if=' or
'of=' params are repeated in the command line. For example:
dd if=/dev/null if=/dev/zero of=/dev/null or
dd if=/dev/zero of=/dev/zero of=/dev/null. From Bruno Herrera.
- apps/nshlib: This commit eliminates the ping and ping6 commands
from NSH and replaces them with 'built-in' commands at
apps/system/ping and ping6. The original NSH version of ping[6]
commands violated the portable POSIX interface and, hence, had to
be removed. The new system/ping and ping6 built-in commands uses
the new IPPROTO_ICMP AF_INET and IPPROTO_ICMP6 AF_INET6 datagram
sockets to implement ping.
- apps/nshlib: Fix parsing of empty strings when CONFIG_NSH_CMDPARMS
is not defined. Problem noted by Juha Niskanen.
* Examples/Tests: apps/examples:
- All configurations that use NXIMAGE or NXHELLO must select
NX_MULTIUSER. All configurations that use examples/nxterm must
enable CONFIG_BOARDCTL.
- All configurations that use NXLINES must select NX_MULTIUSER. All
configurations that use the NX server need to have larger POSIX
messages.
- apps/examples/adc: Fix g_adcstate.count initialization. From
Masayuki Ishikawa.
- apps/examples/elf: Remove low-level interfaces and replace with
call to exec().
- apps/examples/nxflat: Remove low-level interfaces and replace with
call to exec().
- examples/ostest: Works around a bug in printf() when cancellation
points are enabled. printf() is a cancellation point because it
calls write(). This is correct according to OpenGroup.org.
However, printf holds the stdio library semaphore when it is
canceled and this leaves the semaphore in a bad state. No fix for
the printf bug yet.
- apps/examples/nx: The NX example no longer supports single user
mode.
- apps/examples/nxtext: The nxtext example no longer supports single
user mode.
- apps/examples/nxhello now supports only multiuser mode.
- apps/examples/nximage now supports only multiuser mode.
- examples/nxlines: Now supports only multiuser mode.
* Network Utilities: apps/netutils:
- apps/netutils/ftpc: Fix some crazy comparisons to determine is a
file is an absolute path. Noted by Anthony Merlino.
* System Utilities (apps/system)
- apps/system/i2ctool: Fixed i2ctool write operation in `no restart`
mode (flag `-n`). It seems that I2C driver has changed a bit since
i2ctool was written, so now i2ctool sends repeated start even if
`no restart` flag (-n) was passed to it. From Dmitriy Linikov.