NuttX-7.11 ------------------------ The 111th release of NuttX, Version 7.11, was made on August 13 2015, and is available for download from the Bitbucket.org website. Note that release consists of two tarballs: nuttx-7.11.tar.gz and apps-7.11.tar.gz. These are available from: https://bitbucket.org/patacongo/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: - clock_gettime(): Use up_timer_gettime for CLOCK_MONOTONIC in tickless mode. From Max Neklyudov. - waitpid(): Implement WNOHANG for waitpid() only and for the case of CONFIG_SCHED_HAVE_PARENT not selected. From Max Neklyudov. - SCHED_SPORADIC: Add a sporadic scheduler to NuttX. - Extend the processor-specific interface to include information to support the Sporadic Scheduler. - sem_tickwait(): Added this function for internal use within the OS. It is a non-standard but more efficient version of sem_timedwait() for use in higher performance device drivers. * Binary Loader: * Graphics/Graphic Drivers: - Graphics: Implement anti-aliasing in order to clean the drawing of all edges. Anti-aliasing is supported in the horizontal, raster direction only. - SSD1306 LCD Driver: Modify the SSD1306 LCD driver to support either the SPI or I2C interface. From Alan Carvalho de Assis. * File Systems/Block Drivers/MTD: - mount: Add the ability to mount a file system on top of en existing node in the pseudo-file system. - epoll(): Add a very simple epoll layer just around poll calls. To satisfy build app requirements. From Anton D. Kachalov. * Common Device Drivers: - IOCTL: Add relay IOCTL definitions. From Max Neklyudov. - I/O Expander Framework: Add an I/O expander driver framework. From Sebastien Lorquet - NXP PCA9555 I/O Explander. Add PCA9555 driver.From Sebastien Lorquet - BMP180 Barameter: Add support to Bosch BMP180 barometer. From Alan Carvalho de Assis. - CAN IOCTLs: Add CAN IOCTL command definitions to manage CAN message filtering - CAN Driver: Add configuration to support DLC to byte conversions needed for CAN FD mode. - SPI Slave Interface: Add a definition of an SPI slave interface. - LM92 Temperature Sensor: Add a driver for the LM92 temperature sensor. Contributed by Paul Alexander Patience. - AS5048B Rotary Magnetic Sensor: Add support for an AS5048B rotary magnetic sensor. From Paul Alexander Patience. - Ramtron Driver: Update to include supportf for newer RAMTRON parts. From David Sidrane. - MB7040 Sonar Driver: Add support for a MB7040 sonar driver. From Paul Alexander Patience. - ms5805 Altimeter Driver: Add support for an MS5805 altimeter. From Paul Alexander Patience. * Networking: - DNS Client: Implement the low-level network DNS packet protocol to request and receive IPv6 address mappings. - NetDB: Add support for a DNS host name resolution cache. This can save a lot of DNS name server lookups (but might also have the negative consequence of using stale IP address mappings. - NetDB: Name resolution logic now supports lookups from a file like /etc/hosts. - Network Initialization: Add CONFIG_NETDEV_LATEINIT that can be used to suppress calls to up_netinitialize() from early in initialization. - FTMAC100 Ethernet MAC Driver. Add support for Faraday FTMCA100 Ethernet MAC/ From Anton D. Kachalov. - UDP Networking: Add support for send() for connected UDP sockets. * Crypto: - Add CFB and MAC AES modes. From Max Neklyudov. * Simulation Platform: - Simulation: Implement board_power_off() for the simulation platform. This allows for a graceful exit from the simulation. * MoxaRT: - MoxaRT SoC: Add support for MoxaRT SoC found in the most Moxa serial converters such as NP51x0, NP66xx, UC72xx. From Anton D. Kachalov. * MoxaRT Boards: - Moxa NP51x0: Moxa NP51x0 series of 2-port advanced RS-232/422/485 serial device servers. From Anton D. Kachalov. * ARMv6-M: - ARMv6-M Assertions: Port some per-process stack dumping logic from ARMv7-M to ARMv6-M. From Alan Carvalho de Assis. * Atmel SAMD/L Boards: - SAML21: DMA: Add SAML21 DMA support. - SAMD21: Add architecture support for the SAMD21 family. - SAMD21-Xplained: Board configuration for the SAMD21 Xplained board. * Atmel SAM3/4 Drivers: - SAM4E: Add default loop optimization if EEFC_FMR is available in the configuration (i.e., for SAM4S and 4E). From Marco Aurélio da Cruz. - crypto/ and SAM4CM: Add CFB and MAC AES modes. From Max Neklyudov. - SAM3/4: Add a TWI driver for the SAM4CM. From Max Neklyudov. * Freescale (NXP) Kinetis: - Kinetis: Add support for MK20DN--VLH5 and MK20DX---VLH5. Needed for backward compatible support for Teensy-3.0. * Freescale (NXP) Kinetis Boards: - Teensy 3.x: Add board support for the PJRC Teensy-3.0 and Teensy-3.1 boards. * Atmel SAMV7 Drivers: - SAMV7: Add an MCAN driver for the SAMV7 platform. - SAMV7 SPI Slave Driver: Add the an SPI slave driver. * STMicro STM32: - STMicro STM32 F7: Add architecture support for the STMicro STM32 F7. - STM32 F446: Add support for the STMicro STM32 F446. From David Sidrane. * STMicro STM32 Drivers: - STM32 F7: Add an STM32 F7 Ethernet driver. - STM32 F7: Port the STM32 F4 DMA driver. - STM32 F4 ADC: Add DMA support to the ADC driver for STM32 F4. From Max Kriegler. * STMicro STM32 Boards: - STM32F762G-Disco: Add support for the STMicro STM32 F7 Discovery board. - STM32F4-Disco: Add support to BMP180 driver on the STM32F4 Discovery. From Alan Carvalho de Assis. * C Library/Header Files: - Add asctime(), asctime_r(), ctime(), and ctime_r(). - sethostname(): Add support for sethostname(). - gethostbyname() and gethostbyaddr(): Add support for gethostbyname() and gethostbyaddr(). Also support included for the non-standard gethostbyname_r() and gethostbyaddr_r(). This moves the DNS client logic from apps/ into the NuttX libc implementation. * Tools: - testbuild.sh: Add a script that can be used to perform building testing for several board configurations. * Build/Configuration System: - apps/ Build System: No longer depends on hardcoded lists of directories. Instead, it does a wildcard search to find all appropriate directories. This means that to install a new application, you simply have to copy the directory (or link it) into the apps/ directory. If the new directory includes a Makefile and Make.defs file, then it will automatically be included in the build. - mkkonfig.sh: Add the tool mkkconfig.sh that dynamically builds the apps/Kconfig file at configuration time. The hardcoded configuration file has been removed and now the top-level Makefile executes tools/mkkconfig.sh to auto-generate the top-level Kconfig file. A new apps/ make target call preconfig: was added to support this operation. Now you do not have to modify the top-level Kconfig file to add a new directory into the configuration; the top-level subdirectory simply needs to include a Kconfig file and it will automatically be included in the configuration. The native Windows build is temporarily broken until a new apps/tools/mkconfig.bat script is generated. - mkkconfig.bat: Add the Windows script corresponding to apps/tools/mkkconfig.sh. Needed for a Windows native build. * Applications: apps/nshlib: - NSH shutdown command: NSH will now support an (optional) shutdown command if the board provides the option CONFIG_BOARDCTL_POWEROFF. The command can also be used to reset the system if CONFIG_BOARDCTL_RESET=y. - NSH uname command: Add support for a uname command. - NSH nslookup command: Add an nslookup command. * Applications: apps/system: - NetDB: Add a system command to access the network database. - readline(): Add support for Unix-style tab complete to readline. Contributed by Nghia Ho. - readline(): Extended the tab-completion support to also expand NSH command names. - readline(): Add support for an in-memory command line history that can be retrieved using the up and down arrows. Contributed by Nghia Ho. * Applications: apps/netutils: - DNS client: Moved the DNS client logic into the NuttX C library. It is a necessary part for the full implementation of the netdb logic and provides more flexibility in that location. - Replace calls to the non-standard dns_gethotip() with calls to standard gethostbyname(). - NetLib: Create netlib wrapper functions around dns_getserver() and dns_setserver() to isolate application code from changes to those interfaces. * Applications: apps/examples: - OS test: Extend the OS test to include a test of pthread_mutex_trylock() for recursive mutexes. From Juha Niskanen. - OS test: Add a test for the sporadic scheduler. 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: - pthreads: Use -1 instead of 0 as PID for unclaimed mutexes. From Juha Niskanen. - pthreads: Implement pthread_mutex_trylock() for recursive mutexes. From Juha Niskanen. - pthread_create(): Group binding needs to be cleared before sched_releasetcb(), as otherwise group_leave() will be called and group->tg_nmembers decremented or group being released. group_leave() should be called only after group_join() is called, not after group_bind(). From Jussi Kivilinna. - Protected Mode User Memory Allocator: Redesigned how the user space heap is accessed from the kernel code in protected mode. It used to call memory management functions in user space via function pointers in the userspace interface. That is inefficient because the first thing that those memory management functions do is to trap back into the kernel to get the current PID. Worse, that operation can be fatal is certain fragile situations such as when a task is exiting. The solution is to remove all of the memory management function calls from the interface. Instead, the interface exports the users pace heap structure and then kernel size implementations of those memory management functions will operate on the userspace heap structure. This avoids the unnecessary system calls and, more importantly, failures do to freeing memory when a test exits. - pthread_create(): Fix an (unlikely) error in fallback value in the event of a failure (which should never occur). * Common Drivers: - STMPE811 Driver: In stmpe811_instanciate() when CONFIG_STMPE811_MULTIPLE is enabled, and the call to stmpe811_checkid() fails, then the linked device list is not restored to its previous state. From Sebastien Lorquet. - CAN driver: Fix an issue in the CAN driver where the rx_sem count can grow beyond bounds. * File System/Block Drivers: - NFS client: Fix prototype of unbind method. The function prototype was not updated for NFS after a recent change to the file system interface. From Manuel St??. * Networking/Network Drivers: - netconfig.h: Fix some backward compilation that was emitting #error in the wrong condition when SLIP was enabled. - SLIP Driver: Fix a missed name change when many of network interface names changed sometime back but were apparently never updated for SLIP. - Networking: Allow receipt of empty UDP packets. From Max Neklyudov. * ARMv6-M: - ARMv6-M: Fix Cortex-M0 assembly error when the interrupt stack is enabled. From Alan Carvalho de Assis. * Atmel SAMD/L Drivers: - SAMD20, D21, L21: In the SAML21, SERCOM5 uses a different SLOW clock channel (and, hence, also a different SLOW GCLK generator). This means that the channel selection cannot be a global definition but must be a per SERCOM configuration setting. - SAMD/L: Several fixes to register definitions and types. From Janne Rosberg. * Atmel SAM3/4 Drivers: - SAM3/4 UART: Back out an error introduced with commit 02c33f66c5a8be774034cd40e4125e9323c7b4d8. Causes an infinite loop in up_lowputc(). From Max Neklyudov. - SAM4CM: Fix SUPC register definitions. From Max Neklyudov. - SAM3/4 WDT: Correct some problems with SAM3/4 watchdog driver. Includes some small improvements. From Max Neklyudov. * Atmel SAMV7 Drivers: - SAMV7 UART: Also back the bad cloned change o sam_lowputc.c for SAMV7 platform. * NXP LPC43xx Drivers: - LPC4350: Correct some LPC4350 GPIO pin configurations. From Alessandro Temil. * SiLabs EMF32 Drivers: - EFM32 SPI: Correct write to incorrect register in EFM32 SPI driver. From Pierre-noel Bouteville. * STMicro STM32 Drivers: - STM32 F15x: STM322 F15x stm32_stdclockconfig() was calling stm32_pw_setvos() which accessed PWR_CR via an inactive APB From Juha Niskaneni. - STM32 Ethernet: Extend STM32 Ethernet operating frequency to 180MHz. From Sebastien Lorquet. * STMicro STM32 Boards: - SAMV7 Xplained: In clock configuration, divider was set to 25 to get 25*12MHz=300MHz CPU clock. The correct multiplier is 24 because the calculation if (24+1)*12MHz. So the board was running at 312MHz. From Efim Monjak. * ARMv7-A: - Cortex-A5 vfork(): Fix a Cortex-A compilation error when system calls are enabled in modes other than CONFIG_BUILD_KERNEL. * Atmel SAMA5 Drivers: - SAMA5Dx EHCI: Fix some bad conditional compilation that left a function undefined if CONFIG_USBHOST_ASYNCH is not selected. * C Library/Header Files: - getopt(): Uninitialized variable can cause hardfault from getopt() if required argument is missing. From George McWilliams. * Applications: apps/nshlib: - NSH/THHPD: Change decoding to handle the increased size of the scheduling policy field in the TCB. * Applications: apps/netutils: - THTTPD: Fix compilation problems when CONFIG_THTTPD_GENERATE_INDICES is defined. - THTTPD: Missing gci-src as a dependency path when building with BINFS enabled. * Applications: apps/examples: - poll() example: Fix a few bit-rot compilation errors. - Nx Lines example: If CONFIG_NX_ANTIALIASING=y, then the nxlines example now erases a line that is 2 pixels longer and 2 pixels wider than the line it drew. That eliminates edges effects due to applying the anti-aliasing algorithm twice. A better solution would be to make anti-aliasing an option for each graphics call so you would rend the line with anti-aliasing ON and clear it with anti-aliasing OFF. but I don't have the wherewithal for that change today. - OS test: Improve synchronization in round robin tests. On very fast processors, there are race conditions that make the test fail. Need better interlocking to assure that the threads actually do start at the same time.