Releases: RIOT-OS/RIOT
Release-2022.01
RIOT-2022.01 - Release Notes
RIOT is a multi-threading operating system which enables soft real-time
capabilities and comes with support for a range of devices that are typically
found in the Internet of Things: 8-bit and 16-bit microcontrollers as well as
light-weight 32-bit processors.
RIOT is based on the following design principles: energy-efficiency, soft
real-time capabilities, small memory footprint, modularity, and uniform API
access, independent of the underlying hardware (with partial POSIX compliance).
RIOT is developed by an international open-source community which is
independent of specific vendors (e.g. similarly to the Linux community) and is
licensed with a non-viral copyleft license (LGPLv2.1), which allows indirect
business models around the free open-source software platform provided by RIOT.
About this release
The 2022.01 release brings support for new packages, new boards and drivers,
as well as several package upgrades and bug fixes. Among others, this release
improves the RIOT codebase with:
Rust support
RIOT now offers convenient integration of Rust application programming, with
wrappers interfacing to RIOT modules such as timers, network stack.
Improved timers
Many modules have migrated from using xtimer to our more power-efficient
alternative ztimer. Also, ztimer64 was introduced, which enables
a drop-in replacement for all of xtimer features.
Kconfig support
Kconfig modeling coverage is significantly extended. Nearly all supported
boards are now modeled with Kconfig.
Summary:
436 pull requests, composed of 1159 commits, have been merged since the
last release, and 11 issues have been solved. 43 people contributed with
code in 88 days. 2475 files have been touched with 44925 (+) insertions and
14687 deletions (-).
Notations used below
+ means new feature/item
* means modified feature/item
- means removed feature/item
New features and changes
Full list available at https://github.com/RIOT-OS/RIOT/milestone/37?closed=1
Core
- core/include/kernel_defines.h: add index_of() macro (#17142)
- core: Add IS_CT_CONSTANT() (#17273)
- core: add WITHOUT_PEDANTIC() and DECLARE_CONSTANT() (#17176)
- core: Warn about using irq_enable (#17433)
- core: make SCHED_TEST_STACK boolean and default to 1 with DEVELHELP (#17132)
System Libraries
- sys/architecture: add HAS_ALIGNMENT_OF() helper (#17177)
- sys/arduino: add assertion to gpio handling (#17443)
- sys/atomic_utils: add atomic_{load,store}_ptr() (#17256)
- sys/include/event/periodic: add count (#17276)
- sys/isrpipe: add isrpipe_write (#17336)
- sys/sched_rr: Add a round robin scheduler module (#16126)
- sys/stdio: add optional function stdio_available (#17446)
- sys/test_utils/result_output: add sort to multiple output check (#17269)
- sys/tsrb: add peek functions (#17266)
- sys/tsrb: add tsrb_clear (#17337)
- sys/ztimer: add 'ztimer_no_periph_rtt' (#17284)
- sys/ztimer: add some best practices (#17370)
- sys/ztimer: ztimer_now() add warning regarding comparing now() values (#17404)
- usb/hid: Add HID report descriptor defines (#17242)
- sys/arduino: add Serial over stdio support (#17447)
- sys: introduce sysclk function to retrieve core clock frequency (#17342)
- sys/new_delete: add malloc/free based new/delete implementation (#17464)
- event/timeout: remove forced ZTIMER_USEC dependency (#16958)
- riotboot_dfu: use ztimer instead of xtimer (#17051)
- riotboot_serial: enter bootloader mode by pin (#17248)
- schedstatistics: Convert to ztimer (#17216)
- stdio_rtt: Convert to ztimer (#17122)
- stdio_semihosting: Convert to ztimer (#17123)
- sys/can: migrate to ztimer (#17366)
- sys/cpp11-compat: use new/delete operators from sys/cpp_new_delete (#17475)
- sys/evtimer: use now returned by set (#17394)
- sys/fmt: make fmt_s32_dfp() string based (#17106)
- sys/Makefile.dep: fix event periodic dependency (#17318)
- sys/picolibc_syscalls_default: support new picolibc stdio globals (#17001)
- sys/random: default to musl LCG instead of TinyMT (#17188)
- sys/suit: adjust dependencies for CoAP transport (#17182)
- sys/test_utils/result_output/json: optional space after symbol (#17034)
- sys/turo: Allow default selection of json (#17039)
- sys/ztimer/xtimer2ztimer.cocci: extend and fix api replacements (#17234)
- sys/ztimer64: default select ztimer64_init (#17414)
- sys/ztimer64: make _del_entry_from_list() safe for uninit ztimer64_t (#17368)
- sys/ztimer: remove double ztimer indirection (#17272)
- sys/ztimer: ztimer_remove report success (#17408)
- usbus/cdc_acm: Return stall on line coding not supported (#17085)
- usbus/hid: fix ep_out readiness (#17230)
- usbus/hid: fix ep_out readiness (#17245)
- usbus: Bind extra USB config (#17380)
- usbus: check received setup request data amount (#17203)
- sys/ztimer64: initial PR (#16928)
Networking
- gnrc_pktbuf_cmd: add od dependency with gnrc_pktbuf_static (#17228)
- sys/net/dhcpv6: Add stateless DHCPv6 (#16731)
- sys/net: Add ipv4/ipv6 pseudomodules (#16966)
- sys/shell/sc_nimble_netif: add ping subcommand (#16539)
- dsm: rename DTLS_PEER_MAX and make it dependent on
CONFIG_DTLS_PEER_MAX (#16967) - gcoap_dtls: destroy session in _tl_send only on connection errors (#16963)
- gnrc_dhcpv6_client / uhcp: delay router advertisements until prefix
was received (#16755) - gnrc_gomach: adapt duty recording parameters' namings. (#8954)
- gnrc_netif: move netdev initialization to ops->init (#16918)
- lwip: bump to v2.1.3 (#16774)
- net/gcoap: port to ztimer (#17141)
- nimble/statconn: use errno return values (#17344)
- pkg/lwip: Don't control IPv6 via IPv4 flag (#17175)
- pkg/lwip: Fix dualstack build when only using 6lowpan (#17174)
- pkg/openthread: bump version to 20200818 + adapt to use CMake to
configure the build (#16948) - pkg/openthread: migrate to ztimer (#17120)
- pkg/paho-mqtt: migrate to ztimer (#17143)
- pkg/semtech-loramac: fix get/set dr command (#17117)
- sys/evtimer,ztimer: do not depend on ztimer_now64 (#17357)
- sys/net/gnrc: fix compilation with -Wcast-align (#17157)
- sys/shell/gnrc_netif: Allow 'ifconfig help' (#17006)
- test/ieee802154_hal: general cleanup and cosmetic fixes (#16913)
- tests/lwip_sock: Take lock before calling etharp (#17145)
- socket_zep: port to radio HAL (#16932)
- ieee802154/hal: adapt to latest changes of #13943 (#16946)
Packages
- pkg/lz4: add support for LZ4 compression/decompression (#17178)
- pkg/uzlib: add support for zlib compression/decompression (#17179)
- pkg: add support for Elk Tiny Javascript engine (#16887)
- pkg: add support for FreeRTOS coreJSON library (#16997)
- pkg/arduino_sdi_12: add SDI-12 for Arduino as package (#16587)
- hacl: Switch git address to RIOT-OS-pkgmirror (#16941)
- make: support package mirrors (#16927)
- pkg/emlearn: bump to 0.12 (#16937)
- pkg/jerryscript: bump to 2.4.0 (#16938)
- pkg/mynewt-core/patches: silence cast-align (#17397)
- pkg/qr-code-generator: bump to 1.7.0 (#16939)
- pkg/uwb-core: fix wrong header include (#17345)
- pkg/uwb-core: enable frame filtering, allow usage of common event thread (#17264)
- pkg/wakaama: use ztimer (#17103)
- pkg/arduino_sdi_12: support the remote-revb board (#17119)
- pkg/fatfs: bump version to r0.14b (#16412)
- Update tiny-asn1 package (#16936)
- pkg/lvgl: use ztimer instead of xtimer (#17031)
- pkg: migrate some packages to ztimer (#17309)
Boards
- boards/feather-m0: add arduino feature (#17401)
- boards/iotlab-m3: add MTD definition (#17339)
- boards/nrf9160dk: add riotboot support (#17226)
- boards/nucleo-g431rb: added PWM configuration (#17030)
- boards/p-l496g-cell02: add riotboot feature (#17463)
- boards/stm32f469i-disco: Add DAC (#17214)
- boards/stm32g031-disco,examples,tests: Added STM32G031-DISCO board (#16959)
- boards: add board support for Alientek Pandora (#17259)
- boards: add support for stm32f746g-disco (#17198)
- boards/common/microbit: fix doxygen grouping (#17440)
- boards/esp* and cpu/esp: feature definition cleanup (#17438)
- boards/lora-e5-dev: enable 3.3V and 5V output by default (#17158)
- boards/lora-e5-dev: fix default DARWIN port (#17373)
- boards/stm32f469i-disco: Create board (#16898)
- boards/{calliope-mini,microbit*}: factorize common microbit module,
use ztimer (#17124) - boards: cpu: replace GPIO_UNDEF by SPI_CS_UNDEF in SPI configuration (#17468)
- boards: model nrf52 boards (#17299)
- boards: unify user button defines (#17428)
- tools/elf2uf2: addition of new PROGRAMMER for RPi-pico (#17348)
CPU
- Add some Rust building infrastructure and example (#16274)
- cpu/esp32: add clear bus during init to the I2C software
implementation (#17346) - cpu/nrf9160: add periph_flashpage support (#17225)
- cpu/stm32: Add hardening changes to stm32 (#16979)
- nimble_scanner: rework to enable scanning BLE5 PHYs and extended
advertisements (#16843) - nrf5x_common: Add qdec peripheral implementation (#17201)
- cpu/esp32: Add openocd programming support (#16911)
- cpu/stm32: add driver for the LTDC peripheral (#17437)
- cpu/stm32: add new usbdev FS support (#17281)
- cpu/stm32: add support for U5 family (#17410)
- boards/common/esp8266: Set RTS and DTR to 0 on pyterm. (#16305)
- cc2538_rf: remove RX Busy detection in request_set_trx_state (#16821)
- cpu/arm7_common: suppress false positives of cppcheck (#17218)
- cpu/atmega_common: make cppcheck happy (#17219)
- cpu/atmega_common: Remember CTC mode with timer_periodic (#17387)
- cpu/atxmega/include/cpu_conf: ztimer64 arithmetic idle stack fix (#17362)
- cpu/cortexm_common: make CI happy (#17220)
- cpu/esp32: make CI happy (#17221)
- cpu/esp32: place freertos and periph in IRAM (#17087)
- cpu/esp32: support CPU clocks 2 MHz and 40 MHz (#17413)
- cpu/esp: change dynamic SSID option handling (#17415)
- cpu/esp: migrate to ztimer (#17386)
- cpu/kinetis/include: fix xtimer backend t...
Release-2021.10
RIOT-2021.10 - Release Notes
RIOT is a multi-threading operating system which enables soft real-time capabilities and comes with support for a range of devices that are typically found in the Internet of Things: 8-bit and 16-bit microcontrollers as well as light-weight 32-bit processors.
RIOT is based on the following design principles: energy-efficiency, softreal-time capabilities, small memory footprint, modularity, and uniform API access, independent of the underlying hardware (with partial POSIX compliance).
RIOT is developed by an international open-source community which is independent of specific vendors (e.g. similarly to the Linux community) and is licensed with a non-viral copyleft license (LGPLv2.1), which allows indirect business models around the free open-source software platform provided by RIOT.
About this release
The 2021.10 release includes:
The last three months again brought many new features, fixes and improvements to the RIOT codebase.
There is new hardware support, new helper functions and many new modules that help with building IoT applications.
Some of the new features are:
GCOAP DTLS (#15549)
The GCOAP CoAP library now supports transport encryption via tinyDTLS.
This is a compile-time toggle, so either all requests are encrypted or none.
There is already a PR (#16688) that will allow to mix encrypted and unencrypted requests.
FIDO2 support (#16489)
We now have an implementation of the Fast Identity Online 2 (FIDO2) specification.
With this you can use any RIOT device with USB support as an authentication token similar to the YubiKey.
RPL-over-BLE (#16364)
The 6LoWPAN over Bluetooth Low Energy module has gained support for the RPL routing protocol.
With this it's now possible to set up IPv6 based mesh networks over BLE on chips supported by the Nimble Bluetooth stack.
GNRC TCP (#16494)
RIOT's native GNRC network stack now has support for the TCP protocol via the socket API.
Now you can switch between LWIP and GNRC without changing your application.
DHCPv6 relay agent (#16606)
The DHCP module can now act as a relay, forwarding DHCPv6 requests for multihop-operation.
DHCPv6 IA_NA support (#16228)
The DHCPv6 client can now also request non-temporary addresses as an alternative to Stateless Access Autoconfiguration (SLAAC) that is used by default.
The feature can be enabled by selecting the dhcpv6_client_ia_na
module.
gnrc_ipv6_auto_subnets (#16536, #16750)
This new module allows to split a large IPv6 prefix into smaller ones that can be used to configure downstream interfaces with a prefix.
The process can be repeated recursively for a cascading subnet topology.
This can be a lightweight alternative to DHCPv6 that only relies on router advertisements.
For more details on this, see the talk at the 2021 RIOT summit.
UDP benchmark (#16710)
The examples section has gained a UDP benchmark.
This can be used as a network stress test and is accompanied by a host tool (dist/tools/benchmark_udp
) that acts as the benchmark server to which the benchmark clients will connect.
URI template processor (#16702)
URI templates up to level 3 (according to RFC 6570) can now be parsed with this tool.
riotboot serial flasher (#15493)
RIOT's native bootloader has gained the ability to load a firmware via UART.
This allows to program a board without the need for external programmers, a serial console is enough.
RTC mem for sam0 and STM32 (#16758)
Many real-time clocks have the ability to store a few bytes in their memory as user data. This memory is retained across reboots and deep sleep.
We now have an interface for this feature and implemented it on SAM L21, SAM D5x/E5x and STM32.
LWIP improvements (#16162, #16761, #16636, #16762)
The alternative LWIP network stack can now make use of multiple interfaces.
Initialisation is done using the new XFA (cross-file array) feature so new drivers can be added by only adding a single file.
Advanced topologies in ZEP dispatcher (#15773)
With socket_zep
and the ZEP dispatcher it is possible to simulate a virtual IEEE 802.15.4 network with native
nodes.
ZEP dispatcher has now gained support for lossy connections that make this simulation behave closer to reality.
There are also PRs pending to automatically generate such topologies (#16889)
and to hook up the ZEP dispatcher to the foren6 network visualizer (#16879).
RIOT_VERSION_CODE macro (#16765)
We have added a RIOT_VERSION_CODE
macro that can be used by external modules / boards to check against which RIOT version it is compiled.
This allows to react to API changes if the module is built against different versions of RIOT.
gnrc_netif_ipv6_wait_for_global_address()
(#16824)
For apps that want to connect to a remote server, send some data and then go back to sleep, there is now the new gnrc_netif_ipv6_wait_for_global_address()
function.
This function blocks until a global address has been configured (e.g. via router advertisement) or a timeout happens.
So no more guessing if a connection can yet be established or if the interface is not configured yet.
This feature depends on the gnrc_netif_bus
module.
netutils_get_ipv6()
(#16634)
This simple function can parse a IPv6 address from a string.
But that's not all - if the sock_dns
module is enabled, the string can also be a hostname which will then be resolved.
This provides a small and simple alternative to getaddrinfo()
that can be used by shell commands and applications alike.
gnrc_icmpv6_echo corruption detection (#15622)
On Linux the ping
command from iputils has the neat feature that it fills the payload with of the ICMP echo request with a pattern that is then echoed back by the receiver.
That means it can detect if the payload got corrupted on the way, e.g. by broken fragmentation or other errors.
The RIOT ping
command now also implements this feature that lets you easily detect if something broke along the way.
New Hardware Support
In this cycle we have seen the addition of three new MCU families!
Our latest additions are the Raspberry Pi RP2040 (#16609) and the GD32VF103 RISC-V MCU from GigaDevice (#16036).
Both only have very basic support so far (only GPIO, UART and timers), which still leaves many low hanging fruits for adding peripheral drivers. (#15822, #16935)
Patches welcome!
The nRF9160 is closer to it's nRF52 siblings (#16650), but brings GPS and LTE-M/NB-IoT peripherals. While we are not there yet, there is ongoing work to also support these in RIOT.
The ATxmega family of 8-bit MCUs can now make use of the EBI interface to use external memory. (#16288) The new XMEGA-A1 Xplained already makes use of this feature. (#15758)
On the STM32 side we have now support for the nucleo-wl55jc
and it's LoRa transceiver.
The IEEE 802.15.4 / BLE radio on the STM32WB family is however still waiting for a driver.
The common LM75 family of temperature drivers is now supported by RIOT. (#16678)
The Ethernet driver for the SAM E5x line of MCUs is now stable. (#16683)
The sub-MAC layer that implements common MAC features for IEEE 802.15.4 radios has again seen many improvements.
It is currently used by the nRF52 and CC2538 line of MCUs.
API changes
The spi_acquire()
no longer returns an error code but will throw an assertion
if called with the wrong parameters.
This allows to speed up SPI operations a bit as SPI parameters are usually fixed
at compile time.
The gnrc_netdev_default
was replaced by the network stack agnostic
netdev_default
module.
For now gnrc_netdev_default
remains an alias for netdev_default
, but it will
be removed in a future release.
Summary
263 pull requests, composed of 590 commits, have been merged since the
last release, and 14 issues have been solved. 36 people contributed with
code in 98 days. 1756 files have been touched with 138909 (+) insertions and
12027 deletions (-).
Notations used below
+ means new feature/item
* means modified feature/item
- means removed feature/item
New features and changes
Core (3)
- core/sched: add runq_callback hook and runq inspection functions (#16463)
- core: add irq_is_enabled() function to irq interface (#11117)
- core/msg doc: Clarify; elaborating on interaction with queue (#16794)
System Libraries (12)
- riotboot: implement serial flasher (#15493)
- FIDO2 support in RIOT (#16489)
- test_utils: add UDP benchmark (#16710)
- uri_parser: provide function to split query (#16695)
- usbus/hid_io: add missing header file, add RX callback function (#16689)
- ut_process: initial import of a URI template processor (#16702)
- sys/picolibc_syscalls_default: support new picolibc stdio globals
[backport 2021.10] (#17020) - sys/random/fortuna: change interval ressed to ms (#16594)
- sys/shell/commands/gnrc_icmpv6_echo: test for ICMPv6 reply corruption (#15622)
- sys/shell/commands: gnrc_icmpv6_echo: use msg_avail() (#16611)
- uri_parser: constify result (#16707)
- sys/credman: add key load functions (#16263)
Networking (49)
- dhcpv6_relay: initial i...
Release-2021.07
RIOT-2021.07 - Release Notes
RIOT is a multi-threading operating system which enables soft real-time
capabilities and comes with support for a range of devices that are typically
found in the Internet of Things: 8-bit and 16-bit microcontrollers as well as
light-weight 32-bit processors.
RIOT is based on the following design principles: energy-efficiency, soft
real-time capabilities, small memory footprint, modularity, and uniform API
access, independent of the underlying hardware (with partial POSIX compliance).
RIOT is developed by an international open-source community which is
independent of specific vendors (e.g. similarly to the Linux community) and is
licensed with a non-viral copyleft license (LGPLv2.1), which allows indirect
business models around the free open-source software platform provided by RIOT.
About this release
The 2021.07 release includes:
- Many improvements to ztimer usage
- Added nucleo-wl55jc and Seeeduino XIAO boards
- stm32f1 kconfig support
- Fixed multiplication overflow in calloc, a.k.a. BadAlloc, for all supported
platforms
169 pull requests, composed of 339 commits, have been merged since the
last release, and 16 issues have been solved. 37 people contributed with
code in 69 days. 685 files have been touched with 23625 (+) insertions and
7000 deletions (-).
Notations used below
+ means new feature/item
* means modified feature/item
- means removed feature/item
New features and changes
System Libraries (21)
- congure_mock: add capability to provide actual methods (#16133)
- dhcpv6_client: add DNS recursive name server option handling (#16585)
- drivers/ethos: enable multiple instances (#16544)
- drivers/slipdev: report NETOPT_ADDRESS to simulate l2 address (#16531)
- gnrc_lorawan: add support for RTT (ztimer) (#14558)
- sys/byteorder: add little endian to/from buf functions (#16363)
- sys/crypto: Enable support for AES-192, AES-256 (#16183)
- sys/event/timeout: add option to use ztimer as backend (#16505)
- sys/event: add periodic timeout event (#16507)
- sys/ps: enable runtime_usec output for the ps command (#16470)
- gnrc_dhcpv6_client_6lbr: choose downstream if as !upstream (#16530)
- net/emcute: Allow RETAIN flag to be set on incoming PUBLISHs (#16326)
- net/gnrc/rpl: use ztimer_msec if available (#16339)
- net/grnc/sixlowpan/ctx: use ztimer_msec if available (#16340)
- sys/arduino: replace xtimer by ztimer as high-level background timer (#15317)
- sys/auto_init: move sock_dtls after network stack initialization (#16528)
- sys/Makefile.dep: Some cleanup (#16268)
- sys/net/gnrc/netif: Make aac_mode a flag field (#16596)
- sys/trickle: migrate from xtimer to ZTIMER_MSEC (#16322)
- sys/ztimer: use highest frequency for nrf51 as well (#16572)
- ztimer: pull ztimer_periph_rtt for ZTIMER_MSEC if available (#16553)
- sys/shell/sc_gnrc_rpl: Err out early if RPL not even started (#16358)
Networking (4)
- drivers/nrf24l01p_ng: add hook nrf24l01p_ng_eui_get() (#16296)
- pkg/nimble/netif: allow to apply and enforce random and unique
connection intervals (#16372) - pkg/semtech-loramac: don't force ztimer rtt backend (#16566)
Packages (8)
- pkg/nanopb: add dependency for C++ source files (#16504)
- pkg/edhoc-c: initial commit (#16295)
- pkg: add QR Code generator package (#16462)
- pkg/libcose: Update to latest master (#16464)
- pkg/lvgl: remove internal thread (#16486)
- pkg/nanocbor: bump version (#16362)
- pkg/pkg.mk: avoid git fetch if commit is already there (#16514)
- pkg/wakaama: remove gnrc dependency (#16563)
Boards (10)
- board/feather-nrf52840: add uf2 boot loader (#16276)
- boards/atmega: add USEC_ADJUST values (#16554)
- boards/esp32-wrover-kit: add dependency to ILI9341 (#16488)
- boards/nucleo-wl55jc: Initial support (#16255)
- boards/z1: add CONFIG_ZTIMER_USEC_ADJUST_% values (#16555)
- boards: Adding board support for the Seeeduino XIAO (#16469)
- board/nrf52840dongle: fix and enhance pin mapping for I2C and SPI (#16401)
- Configuration extension for arduino-nano-33-iot (#16301)
- cpu/kinetis: use LPTMR as rtt backend (#16546)
- makefiles/stdio.inc.mk: stdio_uart require uart or lpuart (#16331)
CPU (12)
- cpu/atxmega/periph: Add spi driver (#16290)
- cpu/efm32: add RTT_FREQUENCY support to efm32 (#16344)
- cpu/esp*: add CLOCK_CORECLOCK (#16361)
- cpu/lpc23xx: implement periph/flashpage (#16409)
- SAML21 CPU: support 4MHz, 8MHz, 12MHz CORE_CORECLOCK choices (#16433)
- CPU SAML21: fix timers frequency when using slow clocks (#16446)
- cpu/avr8_common: fix errno (#16565)
- cpu/native: make thread stacksize defines overridable (#16457)
- cpu/sam0_common: UART: Revert "implement inverted RX & TX" (#15205)
- cpu/stm32/periph/rtt_all: RTT peripheral support for CPU_FAM_STM32L5 (#16545)
- cpu/stm32: Generate the irqs in a reproducible manner (#16511)
- ieee802154/hal: adapt frame filter and source address matching
changes (#15468)
Device Drivers (13)
- cpu/atxmega/periph: Add i2c driver (#16306)
- cpu/esp_common: Support disabling I2C clock stretching in ESP8266 (#16386)
- cpu: add periph_rtt_overflow feature (#16420)
- drivers/at86rf215: add RX timestamps (#16365)
- drivers/periph: flashpage: add common helper functions (#15908)
- drivers/rtt_rtc: implement rtc_get_time_ms() (#16347)
- drivers/si70xx: Add support for Si705x sensors (#15684)
- drivers/{disp_dev,touch_dev}: add auto_init_screen as default module
when used (#16485) - esp8266: Support UART1 and other UART0 pins. (#16387)
- cpu/sam0_common: only include RTC/RTT symbols if module is used (#16421)
- driver/bmx280: remove unused xtimer dependency (#16400)
- drivers/cc2420: register with netdev (#15012)
- drivers/ccs811: fix default config for ccs811_full (#16454)
Documentation (5)
- doc: README: Add documentation on downloads and release cycle (#16345)
- doc/pkg: provide a longer short description (#16352)
- docs: Remove references to Freenode from the documentation (#16571)
- Documentation: Remove mentions of the users@ and devel@ mailing
lists. (#16428) - README: Update url of documentation (#16436)
Build System / Tooling (11)
- make: introduce QUIETER (#16513)
- riotctrl_ctrl: A reset helper class for
native
(#15978) - TAKEOVER: makefiles/color: Add color functions, new attempt (#16434)
- tools/dhcpv6-pd_ia: add Linux Mint to installer (#16410)
- tools/iotlab-testbed: add support for remote debugger (#16510)
- esptool: Allow to pass the partition table CSV (#16307)
- makefiles/boot/riotboot.mk: pass IOTLAB_NODE (#16562)
- makefiles/boot/riotboot: clean bootloader when cleaning application (#16197)
- makefiles/info-global.inc.mk: fix DEFAULT_MODULE inclusion (#16435)
- makefiles/vars.inc.mk: update USE_PROGRAMMER_WRAPPER_SCRIPT comment (#16404)
- tools/iotlab-tested: several improvements in single board support (#16501)
Kconfig (3)
- cpu/stm32f1: Add Kconfig dependency modeling (#16483)
- Kconfig: expose IEEE 802.15.4 Security to Kconfig (#16515)
- pkg/lvgl: bump to latest version + model configuration in Kconfig (#16346)
Examples (2)
- examples/lorawan: add missing sx126x descriptor (#16592)
- examples/gnrc_networking: use ztimer_msec if available (#16343)
Testing (15)
- .github: add automatic PR labeler action (#16476)
- gh-actions: release-tests: add filter input (#16432)
- tests/pkg_qr-code-generator: add disp-dev for esp32-wrover-kit (#16492)
- tests/riotboot/flashwrite: add automatic test (#15559)
- gh-actions/release-tests: export QUIETER to docker (#16581)
- Simplify kconfig murdock testing (#16487)
- tests/congure-turo: reset before opening terminal (#16564)
- tests/disp_dev: improve genericity of application + optimize screen
refresh (#16479) - tests/gnrc_dhcpv6_client_6lbr: Update test for DHCPv6 MUD option (#16593)
- tests/malloc: refactor test (#16427)
- tests/periph_rtt_min: adapt for slower RTTs (#16329)
- tests/pkg_qr-code-generator: improve display speed in test
application (#16466) - tests/pkg_tensorflow-lite/Makefile.ci: explicit list (#16354)
- tests/touch_dev: improve genericity by using auto_init_screen module (#16480)
- tests/ztimer_periodic: iterate over clocks (#16254)
API Changes (3)
- build system: Rework EXTERNAL_MODULE_DIRS (#16104)
- ieee802154: migrate
netdev_ieee802154_dst_filter
to a common
ieee802154 (#16576) - net/gcoap: change return type from gcoap_req_send() to ssize_t (#16526)
And 22 minor changes.
Deprecations
Deprecations (3)
- gnrc_lorawan: encode LoRaWAN port in netif header (#16080)
- tools/testbed: use IOTLAB_NODE=auto instead of auto-ssh (#16491)
- pkg/openthread: deprecate ot_command related functions (#15664)
Removals (1)
- core/lifo: Remove lifo [after 2021.04] (#16098)
Bug fixes (34)
- .github/labeler: quote rules (#16519)
- core/msg.c: fixed msg_queue_print() (#15168)
- cpu/atmega_common: RTC: fix off-by-one second normalization &
simplify rtc_get_time() (#16442) - cpu/esp8266: Fix typo in esp_gdbstub config. (#16304)
- cpu/sam0/i2c: Handle read with I2C_NOSTOP flag (#16605)
- cpu/sam0_common: ethernet: fix RX detection (#16383)
- cpu/stm32/gpio_all: fix IRQ handler for G0/L5/MP1 families (#16319)
- cpu/stm32/gpio_f1: fix IRQ handler (#16478)
- cpu/stm32/periph/spi: fix wrong parameter order (#16418)
- dist/Kconfiglib: fix autoconf header (#16561)
- doc: fix URLs to the new website (#16445)
- drivers/lis2dh12: clean up API (#16328)
- drivers/sx126x: fix netdev send and recv function (#16570)
- Fix Cortex-M hard faults when building with -O3 or -Ofast (#16414)
- gnrc_ipv6_nib: consider all local interfaces when looking for address (#16569)
- gnrc_ipv6_nib: consider all prefixes when deciding on-link next hop (#16532)
- gnrc_ipv6_nib: get node from pro...
Release-2021.04
RIOT-2021.04 - Release Notes
RIOT is a multi-threading operating system which enables soft real-time
capabilities and comes with support for a range of devices that are typically
found in the Internet of Things: 8-bit and 16-bit microcontrollers as well as
light-weight 32-bit processors.
RIOT is based on the following design principles: energy-efficiency, soft
real-time capabilities, small memory footprint, modularity, and uniform API
access, independent of the underlying hardware (with partial POSIX compliance).
RIOT is developed by an international open-source community which is
independent of specific vendors (e.g. similarly to the Linux community) and is
licensed with a non-viral copyleft license (LGPLv2.1), which allows indirect
business models around the free open-source software platform provided by RIOT.
About this release:
The 2021.04 release includes:
- netstats can now collect L1/L2 per neighbor statistics
- sock DTLS now allows using multiple credentials
- congure - a framework for implementing congestion control algorithms
- xfa (cross file arrays) - a mechanism to more easily define stuff across
files (e.g., shell commands) - nimble is now using low-power ztimer
- nrf5x now properly configures external HF clock, power use down 411µA -> 3.6µA
for examples/minimal on nrf52dk - many more modules and drivers have Kconfig support
- the semtech-loramac package now supports sx126x/llcc68 radios
- 8 new boards, 6 new drivers, 8 packages upgraded
We've also mostly finished our migration from mailing lists to forum.riot-os.org.
375 pull requests, composed of 992 commits, have been merged since the
last release, and 16 issues have been solved. 56 people contributed with
code in 103 days. 2564 files have been touched with 191220 (+) insertions and
91400 deletions (-).
Notations used below:
+ means new feature/item
* means modified feature/item
- means removed feature/item
New features and changes
Core
- clist: added clist_is_empty()
- xfa: initial support for XFA's (cross file arrays)
System Libraries
- shell: allow defining shell commands using XFA
- dbgpin: module for debugging and profiling
- ztimer: add ztimer_is_set()
- ztimer: add ZTIMER_SEC
- ztimer: add periph_ptp backend
Networking
- cord: Discovery patch altered to reflect changes in the underlying Resource Directory draft
- lwip: hook up sam0_eth support
- congure: framework to implement congestion control and use it in a reusable manner with
a number of protocols - netstats: L1/L2 per neighbor statistics
- sock DTLS: allow using multiple credentials
Packages
- emlearn: bump version to 0.11.6
- libfixmath: bump version to latest master
- nanocbor: bump version
- nanopb: bump version to 0.4.5
- fatfs: bump version to r0.14a
- littlefs2: Bump to v2.4
- monocypher: bump to version 3.1.2
- nimble: migrate to ztimer, allowing low power operation
- openthread: bump version to 20191113
- wakaama: add patch to cast macro to time_t
- pkg/semtech-loramac: switch to RIOT AES
- pkg/semtech-loramac: refactor to use netdev API only
- pkg/lwip: Start DHCP early for all Ethernet interfaces
Boards
- particle-mesh boards: Use USB serial as stdio by default
- nucleo-f303re: I2C pins remapped to match the data sheet
- nucleo-f722ze: Add periph_can support
- native: compile with
-Og
(was-O0
)
- boards/nucleo-f767zi: Add periph_can support
- New boards:
- atmega328p-xplained-mini
- atxmega-a1u-xpro
- atxmega-a3bu-xplained
- BastWAN
- Microbit v2
- samd20-xpro
- TI CC1350 LAUNCHXL
- Zigduino
CPU
- Initial support for ATxmega family of 8-bit AVR CPUs
- kinetis: enable floating point support
- nrf5x: enhance enabling of internal DC/DC converter
- nrf52: add VDDHDIV5 as ADC input
- nrf52: add periph_uart_non_blocking support
- native: add periph/flashpage implementation
- qn908x: Implement blocking SPI support
- qn908x: add ADC support
- sam0_common: add rtc_get_tamper_event()
- stm32f{2,4,7}: Initial flashpage support
- stm32f7: added ADC support
- stm32/can: add option to enable deep-sleep per device
Device Drivers
- new drivers:
- sensirion SGP30 gas sensor
- Amphenol sm-pwm-01c dust sensor
- Si705x sensors
- TI BQ2429x charger and power management ICs
- Netdev driver for nrf24l01p
- sx126x/llcc68 LoRa radios
- touch_dev & display_dev auto-initialization
- bmx280: increase accuracy of SAUL pressure readings
- lis2dh12: functionality extension
- cc110x: add hook cc1xxx_eui_get()
- ds3231: add alarm support
- at86rf2xx: add missing handler for TRX24_RX_START interrupt
- periph_rtt: add periph_rtt_set_counter feature
Documentation
- riotboot and its USB DFU version were added to the documentation
- cpu/cc26xx_cc13xx: add CPU documentation
- doc/SAUL: State expectations on blocking and interrupts
- sys/phydat: clarify use of phydat::scale in phydat_fit
- sys/ztimer: clarify doc on clock ops
- doc/Coding_Convention: clarify: void return is allowed
- sys/event: add missing precondition to doc
Build System / Tooling
- RIOT now defaults to C11
- RIOT now compiles with
-fwrapv
- compile_commands.json files can be produced, easing IDE integration
- riotboot USB DFU: Enter bootloader when board's bootloader button is pressed on power-up
- Make: enable SECONDEXPANSION globally
Testing
- Test utilities result output (turo) module for testing logic abstraction
- Github integration of static tests using annotations completed
Kconfig
-
Modules with dependency model added:
- drivers/{l, m, n, o, p, q, r, s, t, u, v, w}*
- pkg/c25519
- pkg/cayenne-lpp
- pkg/cifra
- pkg/cn-cbor
- pkg/driver_atwinc15x0
- pkg/driver_bme680
- pkg/emlearn
- pkg/gemmlowp
- pkg/hacl
- pkg/heatshrink
- pkg/jsmn
- pkg/libb2
- pkg/libcose
- pkg/libfixmath
- pkg/libhydrogen
- pkg/lora-serialization
- pkg/micro-ecc
- pkg/microcoap
- pkg/minmea
- pkg/monocypher
- pkg/nanocbor
- pkg/nanopb
- pkg/qDSA
- pkg/qcbor
- pkg/relic
- pkg/talking_leds
- pkg/tiny-asn1
- pkg/tinycbor
- pkg/tinycrypt
- pkg/tlsf
- pkg/tweetnacl
- pkg/u8g2
- pkg/ubasic
- pkg/ucglib
- pkg/umorse
- pkg/utensor
- pkg/yxml
- sys/{crypto, hashes, random}
- sys/analog_util
- sys/app_metadata
- sys/base64
- sys/bitfield
- sys/bloom
- sys/cb_mux
- sys/eepreg
- sys/matstat
- sys/memarray
- sys/mineplex
- sys/oneway
- sys/posix_{sleep, inet}
- sys/sema
- sys/seq
- sys/uri_parser
- sys/timex
- sys/ztimer
-
Modules with configurations exposed:
- cpu/stm32f2f4f7: clock configuration
- net/lorawan
- sys/shell
-
Source EXTERNAL_MODULES configurations
Examples
- examples/suit_update: update to aiocoap 0.4.1
- examples/dtls-sock: add multiple credentials
- examples/gnrc_border_router: enable ethernet uplink
API Changes
- mtd: rename mtd_write_page() -> mtd_write_page_raw(), add high-level mtd_write_page()
- sys/ztimer: rename required_pm_mode to block_pm_mode
- sock/async: add function to retrieve session object of current DTLS event
- sys/net/netopt: make NETOPT_TX_END_IRQ and friends read-only
Deprecations
Deprecations
- core/lifo: will be removed in 2021.07
Removals
- Remove deprecated features:
- flashrom API (was deprecated since 2017, use periph/flashpage)
- boards: remove AVRDUDE_PORT and PORT_BSL
Known issues
Networking related issues (48)
#16411: border_router: significant packet loss when sending out packets using
USB cdc-ecm on nrf52
#16398: gnrc_border_router stops routing after a while
#16359: at86rf231 initialization loses race against auto_init_gnrc_rpl
#16085: gnrc_rpl: missing bounds checks in _parse_options
#16054: pkg/tinydtls: auxiliary data API does not work for async sockets
#15926: Unclear how Router Solicitations are (or should be) handled
#15867: Address registration handling inappropriate
#14962: LoRaWan node ISR stack overflowed
#14689: dist/tools/sliptty/start_network.sh: IPv6 connectivity is broken on PC
#13997: ping6 is failing when testing with cc2538dk
#13745: ethos: Unable to choose global source address.
#13493: ethernet: Missing multicast addr assignment
#13280: nrf52: Not able to add global or ULA address to interface
#13088: Riot-os freezes with lwip + enc28j60 + stm32L4
#12943: driver/mrf24j40: blocks shell input with auto_init_gnrc_netif
#12884: examples/cord_ep: Dead lock when (re-)registering in callback function
#12761: samr30 xpro doesn't seem to use its radio ok
#12642: Emcute cannot create a double-byte name
#12565: gnrc_icmpv6_echo: flood-pinging another node leads to leaks in own
packet buffer
#12264: ethos: Unable to handle fragmented IPv6 packets from Linux kernel
#12210: stale border router does not get replaced
#11988: ethos: fails to respond to first message.
#11860: send data with UDP at 10HZ, the program die
#11852: scan-build errors found during 2019.07 testing
#11405: nrfmin: communication not possible after multicast ping with no interval
#11033: 6lo: RIOT does not receive packets from Linux when short_addr is set
#10969: net: netdev_driver_t::send() doc unclear
#10861: cpu/esp8266: Tracking open problems of esp_wifi netdev driver
#10809: openthread: does not build on current Arch
#10410: Missing drop implementations in netdev_driver_t::recv
#10389: gnrc_sock_udp: Possible Race condition on copy in application buffer
#10380: netdev_ieee802154: Mismatch between radio ll address and in memory
address
#10370: gomach: Resetting netif with cli doesn't return
#10338: xbee: setting PAN ID sometimes fails
#8779: CC2538 RF overlapping PIN usage
#8752: ...
Release-2021.01
RIOT-2021.01 - Release Notes
RIOT is a multi-threading operating system which enables soft real-time
capabilities and comes with support for a range of devices that are typically
found in the Internet of Things: 8-bit and 16-bit microcontrollers as well as
light-weight 32-bit processors.
RIOT is based on the following design principles: energy-efficiency, soft
real-time capabilities, small memory footprint, modularity, and uniform API
access, independent of the underlying hardware (with partial POSIX compliance).
RIOT is developed by an international open-source community which is
independent of specific vendors (e.g. similarly to the Linux community) and is
licensed with a non-viral copyleft license (LGPLv2.1), which allows indirect
business models around the free open-source software platform provided by RIOT.
About this release:
The 2021.01 release includes:
- Device Firmware Upgrade support for USBUS
- USB HID minimal implementation
- IEEE 802.15.4 security initial implementation
- 6LowPAN Minimal Forwarding and Selective Fragment Recovery initial
implementation - Initial support for QN808x, SAMD10 STM32MP1 and STM32L5 CPUs
- Initial support for Cortex-M33
- A module for selecting entropy sources
- Initial support for the Decawave Impulse Radio-Ultra Wideband (UWB Core)
- Capability to join or leave link layer multicast groups (GNRC)
- Support for IN865 region in GNRC LoRaWAN
- 83 additional modules supported by Kconfig
- 14 new boards, 6 new device drivers, 8 packages updated
In order to improve community interaction, during this release cycle we started
to migrate from a mailing-list-based communication to forum-based
communication. We are proud to present the RIOT-OS forum available at
forum.riot-os.org
533 pull requests, composed of 1440 commits, have been merged since the
last release, and 65 issues have been solved. 58 people contributed with
code in 119 days. 3852 files have been touched with 348619 (+) insertions and
52516 deletions (-).
Notations used below:
+ means new feature/item
* means modified feature/item
- means removed feature/item
New features and changes
Core
- msg_bus: allow to differ between messages form bus and from thread
- mutex: Add mutex_cancel
- mbox: add mbox_size(), mbox_avail()
- refactor thread info
- remove kernel_types.h
System Libraries
- Add thread-safe Malloc
- sys/tsrb: Make thread-safe
- mtd_mapper: implement pagewise functions
- xtimer: introduce xtimer_msleep()
- usbus: Add USB peripheral serial string support
- hashes: Add PBKDF2-sha256 implementation
- usbus/dfu: add Device Firmware Upgrade support for USBUS
- USB HID minimal implementation
- Add helpers for pointer tagging
- atomic_utils: Functions for atomic access
- entropy_source: add new module for entropy sources
- nimble_autoadv: add new module
- ztimer:
- add ztimer_mutex_lock_timeout()
- fix xtimer_compat
- increase xtimer_compat coverage
- oneway-malloc: check calloc args
- event: Allow single event_thread handling all queues
- irq_handler: Drop module
Networking
- gnrc_netif: add capability to join or leave link layer multicast groups
- gnrc_sixlowpan_frag:
- initial import of Minimal Forwarding according to RFC 8930
- initial import of Selective Fragment Recovery (RFC 8931)
- gnrc_netif_ethernet: Support RX timestamp
- Initial implementation of IEEE 802.15.4 security
- sock: add access to auxiliary data
- gnrc_pkt: refactor to not use utlist.h
- sys/net/gnrc: fix in-band signaling of no RSSI
- gnrc_netif_pktq: fix pktbuf leak
- Fixed a critical bug, allowing to crash the whole system with a specially
crafted LoRa frame - GNRC LoRaWAN:
- Support for IN865 region, Improve debugging
- GNRC LoRaWAN: Bug fix for zero CFList
- IEEE 802154 Radio HAL:
- add
read
function - add IEEE802154_RADIO_INDICATION_CRC_ERROR
- add IEEE802154_RADIO_INDICATION_TX_START
- add helpers for RSSI and dBm conversion
- fix wrong rssi conversions treewide
- add
- IEEE 802.15.4 SubMAC:
- add retransmission reporting
- enable ACK_REQ by default
- unify legacy and radio HAL bootstrap
- gcoap:
- Process CON responses
- make blocksize configurable
- Remove deprecated features
- gcoap: remove deprecated gcoap_add_qstring
- gnrc_nettype: remove GNRC_NETTYPE_IOVEC
- gnrc_pktbuf: drop gnrc_pktbuf_replace_snip()
- gnrc_sixlowpan_rb: remove GNRC_SIXLOWPAN_FRAG_RBUF_AGGRESSIVE_OVERRIDE
- sock/dtls: remove sock_dtls_session_create due to deprecation
Packages
- openthread: add support for radios compatible with SubMAC
- uwb_core: initial support
- Updates:
- littlefs2: Bump to v2.3
- jsmn: bump version
- libb2: update to latest release
- libhydrogen: bump version
- micro-ecc: bump version
- tinycrypt: bump version
- fatfs: bump version to r0.14
- gecko_sdk: update to v2.7.7
- hacl: switch upstream to backup copy
- lvgl: bump to v7.7.1
- openwsn:
- add ieee802154_hal based radio
- openwsn: add sock_udp
- nordic-softdevice: remove deprecated package
Boards
- Renode:
- stm32f4discovery: Add initial renode support
- firefly: add renode configuration
- hifive*: add renode support
- Arduino feature:
- waspmote-pro: add arduino feature
- remote-revb: add arduino feature
- New boards:
- ESP32-Ethernet-Kit
- arduino-nano-33-iot
- weact-f401cc / weact-f401ce / weact-f411ce
- e104-bt5011a-tb
- e180-zg120b-tb
- feather-m0-lora
- nrf52840-mdk-dongle
- nucleo-l011k4
- nucleo-l552ze-q
- frdm-kl43z
- slstk3400a
- stk3200
- SAM D10 Xplained Mini
- Particle boards: Support monofirmware builds and uploads
- saul_pwm: auto-init'able RGB LEDs and dimmers for:
- particle-argon / particle-boron / particle-xenon
- nrf52840-mdk-dongle
- nrf52840dongle
- native: allow to use ZEP instead of tap
- ikea-tradfri: add SPI NOR Flash configuration
CPU
- Cortex-M33: add initial support
- nrf5x: implement periph_timer_periodic
- nrf52: Add i2c reconfigure feature
- SAMD10: Add support
- stm32l5: add initial support
- stm32mp1: Add initial support
- QN908x: Add initial support
- atmega_common: Split into atmega_common and avr8_common
- Improve clock configuration
- stm32:
- rtc: add unlock/lock to rtc_clear_alarm
- uart: set flow control bits before enabling uart
- cpu/stm32: enable overdrive mode on f4 and f7 for high clock speeds
- cpu/stm32: Fix & cleanup periph_eth
- esp:
- implement ESP WiFi SoftAP mode
- Fix cast alignment issues
- sam3/periph_timer: fix trigger of cleared timer
- native:
- rtc: add rtc_set_time implementation
- fix memory leak
- remove unused can_linux module
- cc2538:
- add riotboot feature
- add flashpage & flashpage_raw
- add periph_uart_nonblocking
- efm32:
- add coretemp driver
- add watchdog peripheral
- sam0_common:
- cpu/sam0: add initial ethernet support
- flashpage: add functions to write to user config area / AUX page
- flashpage: rename to sam0_flashpage_aux_write()
- SPI: add support for QSPI in SPI mode
Device Drivers
- Add utilities for Ethernet Media-Independent Interface (MII) and use them in
STM32periph_eth
- cst816s: Initial include of cst816s touch screen driver
- gp2y10xx dust sensor
- DS3231 RTC
- periph_common: dac: add dac_play()
- scd30: Add reset function to Sensirion scd30 sensor
- si1133: New SI1133 UV/IR/Ambient light driver
- sc: Add driver for Honeywell HSC series pressure and temperature sensor
- ndev: add mcp2515 + driver/mcp2515: add driver
- net: Add netdev_driver_t::confirm_send
- PTP Clock
- cpu/stm32:
- periph_eth: Use auto-negotiation
- Fix periph_eth link status
- Fix reception bug in periph_eth
- nrf802154:
- change internal state to idle after rx
- fix set_cca_threshold range
- fix unwanted emissions at the end of ACK frame
- fix state transition and
off
function - nrf802154: default to netdev_ieee802154_submac
- cc2538_rf:
- fix transmit function
- default to netdev_ieee802154_submac
- at86rf2xx: fix null pointer check
- at86rf215:
- add functions to configure trim & clock output at run-time
- implement battery monitor, add power bus
- implement MR-FSK
- make use of packet queue if available
- fix dependency resolution for 2.4 GHz
- w5100.c: correct the pointer position when w5100's buf is full
- srf04: fix overflow on AVR
- periph/rtt: fix overflow in tick conversion macros
- mtd_flashpage: fix erasure of multiple sectors
- mtd_spi_nor: cleanup & bug fixes
Documentation
- README: Add merge-chance badge
- riotboot: add basic porting guide
- emulators: add emulators documentation in Doxygen
- SECURITY.md: Add initial security policy
- generate-changelog: add support for point releases
- add Docker info to doxygen
- drivers/netdev: Clarify documentation
- README.md: move tapsetup section to documentation
- native: Improve Documentation
- CONTRIBUTING: cleanup and reorganize
- core/msg_bus: enhance documentation
- cpu/stm32: rewrite clock configuration documentation
- doc: advertise forum.riot-os.org
- doc: Give examples of what DEVELHELP does
- gnrc/rpl: document implementation status
- ieee802154/radio: indicate that FCS is ignored when reading buffer
- uhcp: improve documentation
- update board porting documentation page
Build System / Tooling
- testbed-support: add iotlab mapping for dwm1001
- info.inc.mk: Add info-build-json as JSON-formatted build info
- makefiles/utils: add util to compare to software versions
- emulator: add debug feature with qemu emulator
- Makefile.include: avoid recursive expansion of USEMODULE
- makefiles/pseudomodules.inc.mk: netdev_ieee802154_legacy is a pseudomodule
- dist/tools/bmp: Fix flashing ...
Release-2020.10
RIOT-2020.10 - Release Notes
RIOT is a multi-threading operating system which enables soft real-time
capabilities and comes with support for a range of devices that are typically
found in the Internet of Things: 8-bit and 16-bit microcontrollers as well as
light-weight 32-bit processors.
RIOT is based on the following design principles: energy-efficiency, soft
real-time capabilities, small memory footprint, modularity, and uniform API
access, independent of the underlying hardware (with partial POSIX compliance).
RIOT is developed by an international open-source community which is
independent of specific vendors (e.g. similarly to the Linux community) and is
licensed with a non-viral copyleft license (LGPLv2.1), which allows indirect
business models around the free open-source software platform provided by RIOT.
About this release:
The 2020.10 release includes:
- Support for PicoLIBC as standard C library implementation
- A new radio abstraction layer for ieee802.15.4 radios
- Improvement to the linking of modules
- An improved algorithm for generating local unique identifiers
- Pagewise addressing support for MTD devices
- 23 additional modules supported by Kconfig
- Initial rework of the clock modelling on stm32 devices
- 5 new boards, 2 new device drivers, 7 packages updated
482 pull requests, composed of 1355 commits, have been merged since the
last release, and 84 issues have been solved. 64 people contributed with
code in 94 days. 2426 files have been touched with 133358 (+) insertions and
756906 deletions (-).
Notations used below:
+ means new feature/item
* means modified feature/item
- means removed feature/item
New features and changes
Core
- init: make boot message configurable
- panic: callback app during panic
- bitarithm: add bitarithm_test_and_clear()
- thread: Add THREAD_NAMES make flag
- kernel_defines.h: Fix container_of()
- core: Add and use helper functions for internal data
- treewide: Fix direct access to scheduler internals
- core/bitarithm: use __builtin_clz() for bitarithm_msb()
System Libraries
- architecture: New module to access architecture internals
- Add support for PicoLIBC
- ztimer: add ztimer_spin()
- ztimer: add periodic timers API
- byteorder:
- Moved to sys
- Add byteorder_bebuftohll() and inverse
- add uint32 from/to buffer funcs
- event: implement waiting on multiple queues
- evtimer: add mbox support
- random: add SHA256 mode to SHA1PRNG & tests
- sys/luid: improve luid_base() algorithm
- tsrb: Make thread-safe
- pipe_dynamic: fix possible null pointer dereference
Networking
- ieee802154_submac: add initial support for common MAC sub layer
- ieee802154/radio_hal: introduce Radio HAL for IEEE802.15.4 compatible radios
- EUI:
- luid: add luid_netdev_get_eui48() & luid_netdev_get_eui64()
- eui64: add eui64_to_eui48()
- link_layer: implement EUI provider
- luid: shuffle bytes
- uhcp: use LOG_xxx functions
- gcoap: Insert registrations at the front
- gnrc_ipv6_nib: only multicast probe UNREACHABLE neighbor if 6LR
- gnrc_ipv6_nib: set NCE stale on incoming ARO
- gnrc_ipv6_nib: don't add non-link-local to NC without ARSM
- gnrc_netif_pktq: add packets to optional send queue when device is busy
- emcute: fix buffer overflow in _willupd_msg()
- SUIT:
- Introduction of a payload storage API for SUIT manifest payloads
- Upgrade to draft-ietf-suit-manifest-09
- fail fetch if the image size doesn't match expected
- gnrc:
- Remove cyclic dependencies
- Remove deprecated module gnrc_nettest
- netopt: remove deprecated alias NETOPT_LINK_CONNECTED
Packages
- openwsn: add riot based openwsn scheduler
- openwsn: add shell commands
- openthread: migrate to event loop
- nimble/netif: fix deadlock on connection loss
- wolfssl: bump version to 4.5.0
- nanopb: bump version to 0.4.3
- ccn-lite: bump version
- cn-cbor bump to 1.0.0
- tinycbor: bump to v0.5.3
- tinydtls: enforce the selection of a crypto secure PRNG
- jerryscript: bump to version 2.3.0
- semtech-loramac: replace xtimer by ztimer
- lvgl:
- add logic for managing touch devices
- introduce screen_dev wrapper
- bump to v7
- emb6: remove deprecated package
Boards
- nrf52: Enable PWM on the LED pins
- nucleo-g071rb: add initial support
- nucleo-g070rb: add board
- nucleo-g431rb: add initial support
- Support for YARM board
- add Adafruit Itsy Bitsy
- samr21-xpro: fix reading EUI-64 from EDBG on cold boot
- nucleo-l452re: add i2c config
- hifive1b: add support for openocd programmer
- remove support for wsn430-1_3b and wsn430-1_4
CPU
- cortexm:
- Make no_thread_idle compatible with cortex-m0
- Add thread info to hard fault handler
- advertise puf_sram feature
- Skip context save/restore on scheduling the previous thread
- use mpu stack guard if DEVELHELP is enabled
- fix check for bitbanding
- Flush pipeline after triggering PendSV
- cc2538: add Watchdog implementation
- cc26xx_cc13xx:
- add & link CCFG configuration
- enable periph clocks on sleep
- fe310:
- Add custom PLIC driver as peripheral
- Merge and optimize trap_entry with irq_arch
- Unify linker scripts
- msp430: Update to inline-able IRQ API Area
- nrf5x_common: UART: add support for 1 MBaud
- stm32:
- generate vectors C files and IRQ defines from CMSIS headers
- stm32cmsis: retrieve STM32 CMSIS header from a package
- g0: add basic support
- implement periph_timer_periodic
- Add support for arbitrary SPI clock rate
- f0/f1/f3/l0/l1/l4/wb: rework clock initialization and configuration
- disable MPU for cortex-m0+
- sam0:
- GPIO: use tamper detection to wake from Deep Sleep
- add support to run PWM off TC timers
- ADC: add support for samd5x/same5x
- Add support for Single-cycle I/O Port for GPIO
- UART: implement arithmetic BAUD mode
- merge RTC & RTT implementation
- flashpage: clean up implementation
- saml1x: Remove MPU feature
Device Drivers
- at86rf2xx: spi security module
- at86rf2xx: support frame retry reporting on AT86RFR2
- soft_uart: add software based UART implementation
- scd30 : Add driver for scd30 sensor
- stm32_eth: add 'NETDEV_EVENT_LINK_UP' event
- Add support for Adafruit Seesaw Soil moisture sensor
- radio_hal:
- introduce Radio HAL for IEEE802.15.4 compatible radios
- cc2538_rf: implement Radio HAL
- nrf52840: implement Radio HAL
- mtd: add page addressed operation
- stmpe811: fix interrupt polarity & interrupt generation
- sps30: Update units of measurement
- sps30: Add sleep mode
- sdcard_spi: remove auto-init
Build System / Tooling
- Add libstdcpp feature
- gnrc_border_router: Add USB Ethernet support
- buspirate: add Bus Pirate as Debug Adapter
- README: Add more badges
- Convert remaining Python2 users to Python3
- openocd-adapters: select transport based on adapter
- Makefile.{base,include}: Fix linking for C++ code in external modules
- link object files instead of archives
- tapsetup:
- Add support for listing bridges
- Add support to configure addresses for bridge
- Add support for configuring routes and forwarding capabilities for bridge
- Add TUN support
Testing
- vagrant: add Vagrantfile to test native in FreeBSD
- compile_and_test_for_board.py: add optional JUnit XML support
- bench_*: Add ticks per iteration results
Kconfig
- Finished modelling provided features
- Modules with support added:
- credman
- cord
- nrf-based
- ek-lm4f120xl
- lpc1768-based
- lpc2387-based
- native
- mips32r2-based
- sam3-based
- sam0_common
- same54-xpro
- saml1x-based
- saml21-based
- stm32
- l2filter
- dhcpv6
- hifive1(b) clock area
- stm32gx clock configuration
- periph/timer
- netif
- skald
- sock_dtls
- lora
- add genconfig script
- enable incremental compilation on config changes
- include KCONFIG_OUT_CONFIG unconditionally
API Changes
- gcoap: remove gcoap_finish
- gpio: IRQs triggered after gpio_irq_disable() are discarded
- sched: Refactor to return the next scheduled thread
- sock: Application should pull in the pseudomodules
- driver-guide.md: Drivers are expected to return negative errno values
- nrf52xxxdk: configure LEDs as PWM
Known issues
Networking related issues (42)
#14962: LoRaWan node ISR stack overflowed
#14689: dist/tools/sliptty/start_network.sh: IPv6 connectivity is broken on PC
#13997: ping6 is failing when testing with cc2538dk
#13745: ethos: Unable to choose global source address.
#13493: ethernet: Missing multicast addr assignment
#13280: nrf52: Not able to add global or ULA address to interface
#13088: Riot-os freezes with lwip + enc28j60 + stm32L4
#12943: driver/mrf24j40: blocks shell input with auto_init_gnrc_netif
#12884: examples/cord_ep: Dead lock when (re-)registering in callback function
#12857: examples/gnrc_networking_mac broken on ATmega
#12761: samr30 xpro doesn't seem to use its radio ok
#12642: Emcute cannot create a double-byte name
#12565: gnrc_icmpv6_echo: flood-pinging another node leads to leaks in own
packet buffer
#12264: ethos: Unable to handle fragmented IPv6 packets from Linux kernel
#12210: stale border router does not get replaced
#11988: ethos: fails to respond to first message.
#11860: send data with UDP at 10HZ, the program die
#11852: scan-build errors found during 2019.07 testing
#11405: nrfmin: communication not possible after multicast ping with no interval
#11033: 6lo: RIOT does not receive packets from Linux when short_addr is set
#10969: net: netdev_driver_t::send() doc unclear
#10861: cpu/esp8266: Tracking open problems of esp_wifi netdev driver
#10809: openthread: does not build on current Arch
#10410: Missing drop impl...
Release-2020.07.1
RIOT-2020.07.1 - Release Notes
This is a bug fixing release for the RIOT 2020.07 release.
The following bugs were fixed:
#14670: tests/lwip_sock_tcp: fix -EADDRINUSE test
#14671: pkg/lwip: Use IS_ACTIVE() and bugfix
- pkg/lwip: Compatibility with IS_USED()
- pkg/lwip: Use IS_ACTIVE() & NETCONNTYPE_ISIPV6()
#14686: gnrc_sixlowpan_frag_vrb: fix cppcheck warning
#14693: cpu/msp430_common: fix thread_yield_higher() when called in isr
#14685: gnrc/nib: fix _idx_dsts() calculation
#14817: gnrc_sixlowpan_frag_rb: Check possibly uninitialized pointers
Release-2020.07
RIOT-2020.07 - Release Notes
RIOT is a multi-threading operating system which enables soft real-time
capabilities and comes with support for a range of devices that are typically
found in the Internet of Things: 8-bit and 16-bit microcontrollers as well as
light-weight 32-bit processors.
RIOT is based on the following design principles: energy-efficiency, soft
real-time capabilities, small memory footprint, modularity, and uniform API
access, independent of the underlying hardware (with partial POSIX compliance).
RIOT is developed by an international open-source community which is
independent of specific vendors (e.g. similarly to the Linux community) and is
licensed with a non-viral copyleft license (LGPLv2.1), which allows indirect
business models around the free open-source software platform provided by RIOT.
About this release:
The 2020.07 release puts a focus on the improvement of automated testing. In
that vein, various new CI integrations such as CircleCI for documentation
building and online presentation, and Github Actions to check the tooling of
RIOT when merged. The riotctrl_shell
python module allows to abstract shell
commands as python methods for testing using the newly created riotctrl
python package 1. Kconfig migration reached phase 2 with various board
features being exposed to Kconfig. New network protocols were ported for RIOT
such as MQTT (in form of the paho-mqtt
package) and the lookup client
component for CoRE RD cord_lc
. The OpenWSN network stack with 6TiSCH support
was reintegrated into RIOT. Support for several new boards and new sensors was
added. Additionally, this release contains a number of bug fixes and test
improvements.
546 pull requests, composed of 10452 commits, have been merged since the
last release, and 84 issues have been solved. 64 people contributed with
code in 106 days. 2371 files have been touched with 822149 (+) insertions and
700313 deletions (-).
Notations used below:
+ means new feature/item
* means modified feature/item
- means removed feature/item
New features and changes
Core
- core: make idle thread optional
- macros/units: add unit conversion helper macros
- msg: add message bus
- panic: launch USB bootloader on crash for easy recovery
System libraries
- auto_init: automatically determine auto_init_*.c
- base64: Clean up / improve implementation
- hashes: add sha224 and reuse sha256 code
- luid: provide luid_get_lb()
- phydat: added phydat to JSON converter
- posix: initial import of select() function (only support sockets for now)
- ps: show free stack space in addition to used and total
- shell:
- add optional hooks for shell commands
- native: stop RIOT when the shell reads EOF
- refactor readline function
- refactor tokenizer code
- shell_commands:
- alias ping=ping6
- provide command to reboot to bootloader
- stdio_semihosting: Initial include of Semihosting-based STDIO
- touch_dev: add generic API for touch device
- trace: add trace module
- pm: Add pm_get_blocker()
- random:
- add option to use HWRNG as source of randomness
- optimize sha1prng
- usb:
- allow for boards to define default custom VID/PID
- warn on test-ID usage in a unified location
- xtimer: xtimer_rmutex_lock_timeout
- ztimer:
- add power management for ztimer clocks
- expose ZTIMER_MSEC/USEC_BASE
Networking
- cord: add CoRE RD lookup client implementation
- gcoap: add CoAP ping request
- gnrc:
- gnrc_ipv6_ext_opt: initial import of hop-by-hop and destination option
handling
- gnrc_netif:
- add IPv6 event bus
- add option for non-std 6lo MTU
- add support for internal event loop
- use gnrc_netif-submodules to pull in upper-layer struct members
- gnrc_nettype: indirect NETTYPE definition via pseudo-modules
- gnrc_pktdump: fix dependencies
- gnrc_tcp:
- add retransmission timer
- rewrite API internal messaging
- rewrite recv buffer allocation/returning
- use exponent to configure message queue sizes
- gnrc_ipv6_ext_opt: initial import of hop-by-hop and destination option
- nanocoap: allow coap_opt_add_string() for non-zero-terminated strings
- netif: add functions to get and get by identifier
- sock_dtls: provide getter function for UDP sock
- sock_util: add interface descriptor parsing to str2ep
Packages
- pkg: rework checkout process
- avoid copying Makefiles in package source when possible
- store packages sources in a global package directory
- pkg: cleanup build system integration for
- cryptoauthlib, openthread, semtech-loramac, tinydtls, wakaama, u8g2,
ucglib, wolfssl
- cryptoauthlib, openthread, semtech-loramac, tinydtls, wakaama, u8g2,
- pkg: tools: ensure cmake based packages/tools are built out-of-source
- cryptoauthlib: wake pulse implementation for CPUs supporting
periph_i2c_reconfigure
- emlearn: add support to RIOT
- gecko_sdk: update to v2.7.6
- lwip:
- add IPv4 support for
netdev_tap
- add support for nrf802154
- enable IPv4/IPv6 dual stack mode
- lwip_sock: provide implementation for
sock_*_recv_buf()
- add IPv4 support for
- lua: remove unnecessary patch
- paho-mqtt: add package and example
- nimble:
- add static connection manager
statconn
- netif:
- set host thread prio to 1
- simplify mbuf pool initialization
- update NimBLE ver (cd7d7aa286) + timing param cleanup
- add static connection manager
- openwsn: re-integrate the network stack as a package
- tinydtls:
- add
sock_async
support forsock_dtls
- use latest development version (eda63f000c)
- add
- ucglib: refactoring and fixes
Boards
- cc1352p-launchpad: add support
- common/blxxxpill:
- provide periph_rtt
- improve adc
- dwm1001: add support to Decawave DWM1001 dev board
- mcb2388: misc enhancements
- nrf52840-dongle: add support
- nrf52840dk: Add MTD configuration
- nucleo-g474re: add support
- pic32-clicker: rename to 6lowpan-clicker
- samr30-xpro: add SPI dev for ext pin header
- samr3x-xpro: add riotboot feature
- serpente: add support
- sltb001a: enable CCS811 sensor
- sodaq-sff: add support for SODAQ SFF
- stm32f429i-disco: add support
- weact-f411ce: add support
- wemos-zero: add support
CPU
- arm7_common: Update to inlineable IRQ API
- atmega_common: Update to inlineable IRQ API
- cortexm:
- allow to define reserved fields in CortexM vector table
- "free" SVC
- cc26x2_cc13x2:
- add oscillator switching functions
- add periph_i2c implementation
- trim device registers on
cpu_init
- esp32:
- support of multiple heaps for newlib malloc
- replace RTC implementation by RTT implementation
- fe310: migrate to inlined IRQ API
- kinetis: implement power modes for pm_layered
- lpc2387:
- pm: enable SLEEP & POWERDOWN mode
- timer: use lpc2387_pclk_scale()
- mips_pic32_common: Implement GPIO IRQ
- native:
- add periph_eeprom driver implementation
- rename trace -> backtrace
- nrf52:
- add black magic probe config
- add missing vendor files
- implement EasyDMA-based SPI peripheral implementation
- nrf52811: initial support
- nrf5x_common:
- add configurable RTT_FREQUENCY
- enable bias correction in hwrng
- sam0_common:
- add DMA peripheral driver
- add PWM support for saml21, samd5x
- implement periph/dac
- make SPI peripheral DMA compatible
- move PWM to common code
- spi: move clk pin muxing into spi_acquire / spi_release
- UART: implement inverted RX & TX
- samd21: PWM don't hard-code number of channels to 3
- samd5x: allow to use XOSC as clock source
- saml1x: pm: set deep flag
- stm32:
- add QDEC support for CPU_FAM_STM32F1
- add non-blocking UART
- decrease latency in SPI DMA path
- implement reset to bootloader
- filter availability of RNG by CPU not by board
- stm32_common: make RTT_FREQUENCY configurable
- stm32f4: Add DMA config for SPI
- stm32g4: add support
Device Drivers
- atwinc15x0: add WiFi netdev driver
- at: Add at_urc_isr module to process URCs upon arrival
- at24cxxx: MTD wrapper for at24cxxx
- at86rf215:
- implement MR-O-QPSK
- implement MR-OFDM
- at86rf2xx: add support for high data rates
- dfplayer: New driver for the DFPlayer Mini MP3 player
- ethos: use luid_get_eui48()
- edbg_eui: add driver to get MAC address from Atmel EDBG
- mhz19: initial support
- mrf24j40: add Turbo Mode
- mtd_spi_eeprom: add MTD wrapper for AT25XXX EEPROMs
- pca9633: add new driver
- periph/timer: add timer_set_periodic()
- periph/i2c: add periph_i2c_reconfigure feature & implementation for sam0
- periph/rtt: introduce RTT_MIN_OFFSET
- periph/spi: add periph_spi_reconfigure feature & implementation for sam0
- pulse_counter: Use C11 atomics & bugfix
- sdp3x : Add driver for sdp3x sensor
Build System / Tooling
- make:
- add code generator targets
- add JLink support for stm32
- docker.inc.mk: add and use generic docker_run_make
- allow multiple external board dirs
- info-global.inc.mk: add info-boards-features-blacklisted
- resolve dependencies before Makefile.include
- riotctrl_shell:
- initial import of shell interaction spawn
- provide ipv6_nib interactions and parsers
- provide netif interactions and parsers
- tools:
- add script to run radvd on a tun interface
- provide tool to parse
pktbuf
output
- kconfiglib:
- add riot_kconfig to override default behaviours
- kconfiglib: bump to v14.1.0
Testing
- fuzzing framework:
- add AFL-based fuzzing setup for network modules
- add fuzzing application for gcoap
- ci: setup github actions
- sys/test_utils/dummy_thread: initial commit
- tests/irq_disable_restore: Add test for irq_disable() / irq_restore()
- tests/periph_spi: add benchmark for acquire / release
- tests/periph_spi_dma: Add test for SPI with DMA...
Release-2020.04
RIOT-2020.04 - Release Notes
RIOT is a multi-threading operating system which enables soft real-time
capabilities and comes with support for a range of devices that are typically
found in the Internet of Things: 8-bit and 16-bit microcontrollers as well as
light-weight 32-bit processors.
RIOT is based on the following design principles: energy-efficiency, soft
real-time capabilities, small memory footprint, modularity, and uniform API
access, independent of the underlying hardware (with partial POSIX compliance).
RIOT is developed by an international open-source community which is
independent of specific vendors (e.g. similarly to the Linux community) and is
licensed with a non-viral copyleft license (LGPLv2.1), which allows indirect
business models around the free open-source software platform provided by RIOT.
About this release:
The 2020.04 release includes:
- Add support for 6LoWPAN IPv6 extension header next header compression
- Add support for DHCPv6 prefix delegation client
- Add support for kw41zrf and at86rf215 IEEE 802.15.4 radios
- Improvements on power management for ESP32
- Improvements and extensions in support of fe310 and lpc2387
- lwIP: provide support for asynchronous sock
- Improvements on xtimer module and testing
- Initial addition of the new timer subsystem: ztimer
- Migration to Kconfig - phase I: add multiple GNRC and system modules
- +10 new boards, +11 new drivers, +7 new packages
555 pull requests, composed of 1514 commits, have been merged since the
last release, and 22 issues have been solved. 60 people contributed with
code in 102 days. 3346 files have been touched with 358398 (+) insertions and
184720 deletions (-).
Notations used below:
+ means new feature/item
* means modified feature/item
- means removed feature/item
New features and changes
System libraries
* core:
+ add optional support for executable space protections
* sched: sched.h: remove not needed bitarithm include to avoid conflict
+ turn kernel_init.c and panic.c into submodules of core
+ sys/auto_init: allow delayed initialization of SAUL & gnrc_netif
* sys/base64: implement Base 64 Encoding with URL and Filename Safe Alphabet
* sys/crypto: define cipher using a module instead of CFLAGS
* sys/crypto/modes/ccm: handle input_len = 0
* sys/ecc: fix assertion in golay2412
* sys/event:
+ add event_wait_timeout64()
+ add shared event threads
* sys/newlib:
+ enable multiple heaps in _sbrk_r()
* syscalls_default: update heap_stats for multiple heaps
* sys/puf_sram: counter based seed after soft reset
* sys/phydat: improvement of phydat_dump including test application
* sys/shell:
+ add rtt command
* correctly detect and handle long lines
+ sys/shell_commands: + provide command to print version
* sys/spp: randomize canary value on each build
* sys/suit:
* cleanup of TinyCBOR to NanoCBOR refactor
* coap: make use of exposed tree handler function
* update to draft-ietf-v3
+ sys/uri_parser: initial import of a minimal and non-destructive URI parsing
* sys/usb: use default VID/PID for RIOT-included peripherals
* sys/xtimer:
* set now pointer correctly in _update_short_timers() loop
+ add xtimer_set_timeout_flag64()
* xtimer_mutex_lock_timeout fix with short timeout
+ sys/ztimer: initial import
Networking
* net/coap:
* deprecate gcoap_add_qstring() and update uses
+ Packet API function to add Uri-Query option
+ net/dhcpv6: initial implementation of a client (with IA_PD support)
* net/dns: fix DNS resolution in ping6
* net/gcoap:
+ add canonical uri query function names
+ allow proxied client requests
* use sock_async and events
+ net/gnrc_dhcpv6_client_6lbr: initial import of a 6LBR DHCPv6 client
+ net/gnrc_ipv6_ext_frag: initial import of statistics module
* net/gnrc_ipv6_nib:
* do not ignore prefix list for route resolution
* fix border router with DNS & Context Compression
* only route to prefix list entry if on-link
* net/gnrc_lorawan:
* fix the handling of downlink frames without payload
* remove netdev layer from MAC
* net/gnrc_netif:
+ add gnrc_netif_send and gnrc_netif_highlander functions
* implementation of dynamic GNRC_NETIF_NUMOF approach
* net/gnrc_nettype: deprecate IOVEC type
* net/gnrc_pktbuf: deprecate gnrc_pktbuf_replace_snip()
+ net/gnrc_sixlowpan_iphc: add support for IPv6 extension header compression
+ net/gnrc_sock: provide implementation for `sock_*_recv_buf()`
* net/gnrc_sock_udp: choose random ephemeral port
- net/gnrc_tftp: remove module
* net/gnrc_uhcpc:
* ensure compression context is managed by the ABR
* only configure 6Lo-ND features if wireless-interface is 6LN
* update compression context with new prefix
* net/nanocoap:
+ add coap_opt_add_uquery2() with parameter key value length
+ add convenience function for adding path elements
* add uquery improvements
* make separate tree handling function
- remove obsolete functions for addition of Uri-Query option
+ net/netdev: add netdev_trigger_event_isr() function
- net/nhdp: remove module
+ net/sock:
* async: add optional callback argument
+ amend with zero-copy receive functions
+ amend API to iterate over stack-internal buffer chunks
Packages
+ pkg/cmsis-nn: add support
+ pkg/cryptoauthlib: add support
+ pkg/libbase58: add support
- pkg/libcose: remove monocypher crypto mode
+ pkg/littlefs2: add support for LittleFS v2.x.y
+ pkg/lvgl: add initial support for LittlevGL
* pkg/lwip:
+ add auto-init support for transceiver ENC28J60
+ provide sock_async support
* pkg/micropython: bump version for FreeBSD fix
* pkg/monocypher: bump to version 3.0.0
* pkg/nanopb: bump version to 0.4.1
* pkg/nimble/autoconn: various improvements
- pkg/oonf_api: remove support
+ pkg/qcbor: add support
* pkg/tinydtls: remove receive buffer indirection via mbox
* pkg/wolfssl: bump version to 4.3.0
+ pkg/yxml: add support Yxml XML parser library package
Boards
* boards: include common dfu logic where applicable
+ boards/adafruit-clue: add initial support
* boards/arduino-mkr: feather-m0: sodaq-*: provide stdio over USB and
setup automatic flash with bossa
+ board/arduino-nano-33-ble: add initial support
+ boards/cc1312-launchpad: add support and documentation
* boards/feather-nrf52840:
* use CDC ACM as default STDIO
* fix LED macros
+ boards/esp32-heltec-lora32-v2: add support
+ boards/im880b: add support
+ boards/kw41z-mini: add support
* boards/mega-xplained: fix ADC line definitions
* boards/nrf51: fix UART hardware flow-control configuration
* boards/nucleo-l152re: fix uart1 pinout config
+ boards/nucleo-l412kb: add initial support
* boards/sam[r/d]21-xpro: prefer XOSC32K for RTC/RTT (GCLK2)
* boards/same54-xpro:
* configure remaining EXT connectors
* don't source peripheral clocks from main clock
* boards/samr30: add helper for antenna switch
* boards/stm32l4: add common clock configuration
+ boards/olimexino-stm32: add support
+ boards/openlabs-kw41z-mini-256kib: add support
* boards/openmote-b: add SAUL configuration and note about flashing
+ boards/p-nucleo-wb55: add initial support
+ boards/pic32*: add GPIO SAUL configuration
* boards/pinetime:
* add defines for controlling the backlight pin
* update mtd_spi_nor config
* fix battery ADC line define
* doc/doxygen:
+ add 'Creating boards' section
* improvements on various board's documentation
CPU
* cpu:
* add CPU feature for stack smash protections
+ add UART RX implementation on PIC32 devices
* make default idle/main stacksizes configurable on all archs
* move cpu level dependencies in dedicated Makefile.dep files
* unify UART hardware flow control use to a generic module
* cpu/atmega_common: fix reboot issues
* cpu/cc13x2: rename cpu to cc26x2_cc13x2
* cpu/cc2538:
* fix spi_transfer_bytes()
+ implement periph/pm
* timer: handle power mode
* cpu/cc26xx_cc13xx: add power common code
* cpu/cortexm:
+ add support for Cortex-M interrupt sub-priorities
* cleanup dependencies
* move CPU_ARCH/FAM to Makefile.features
* only enable MPU during low low level init
* cpu/efm32:
* cleanup of makefiles
* fix incorrect ADC status register
* cpu/esp_common:
* allow WiFi modem sleep mode
+ esp-wifi: allow connecting to open networks
* fixes in common CPU configurations
* move dependency resolutions to Makefile.dep
* cpu/esp32:
* activate automatic XTAL detection
+ add support for light/deep sleep and pm_layered
* allow external 32 kHz crystal for the RTC hardware time
+ esp_wifi: add WPA2 enterprise mode with IEEE 802.1x/EAP authentication
* fix wake-up sources for sleep mode
+ cpu/esp8266: add RTT implementation
* cpu/fe310:
* fix power management configuration
+ implement driver for watchdog
* cpu/lpc2387:
* fix RTC leap year calculation
+ implement periph/adc
+ implement periph/i2c
* make SPI configurable
* cpu/native: fix c11_atomic sizes on FreeBSD
* cpu/native/can/candev_linux: add check for real can
+ cpu/nrf52/nRF802154: implement CCA
+ cpu/nrf5x: add and enable configuration for the built-in DC/DC converter
* cpu/sam0:
+ add gpio_disable_mux() function
+ add samd21j17d support
* enhance power saving by switching EIC clock source during STANDBY mode
* fix handling of PM_NUM_MODES
+ provide interface to query GCLK frequency
* use generic exti_config
* cpu/samd21: pwm: allow to use channels > 3
* cpu/samd5x: disable RTC on init to prevent...
Release-2020.01
RIOT-2020.01 - Release Notes
RIOT is a multi-threading operating system which enables soft real-time
capabilities and comes with support for a range of devices that are typically
found in the Internet of Things: 8-bit and 16-bit microcontrollers as well as
light-weight 32-bit processors.
RIOT is based on the following design principles: energy-efficiency, soft
real-time capabilities, small memory footprint, modularity, and uniform API
access, independent of the underlying hardware (with partial POSIX compliance).
RIOT is developed by an international open-source community which is
independent of specific vendors (e.g. similarly to the Linux community) and is
licensed with a non-viral copyleft license (LGPLv2.1), which allows indirect
business models around the free open-source software platform provided by RIOT.
About this release:
The 2020.01 release includes:
- Initial support for MicroPython
- Initial support for GNRC based LoRaWAN stack
- Initial (experimental) asynchronous sock support
- Extend support for lpc2387 and fe310 cpus
- Xtimer concurrency/robustness improvement, fixing #8388, #5338 & #5103
- Complete re-implementation of esp8266 based on ESP8266 RTOS SDK
- Improvements in automatic tests
- Introduce and start using Kconfig as a configuration tool
- +12 new boards, +7 new drivers, +4 new packages
About 527 pull requests, composed of 1367 commits, have been merged since the
last release, and about 29 issues have been solved. 61 people contributed with
code in 111 days. Approximately 3053 files have been touched with 134416 (+)
insertions and 31870 deletions (-).
Notations used below:
+ means new feature/item
* means modified feature/item
- means removed feature/item
New features and changes
System libraries
+ core/kernel_defines: Introduce 'IS_ACTIVE' macro
* core/assert: allow multiple static_asserts within a function
* core/ringbuffer: compensate 'ringbuffer_remove' underflow error
+ core/thread: add zombie thread state
+ sys: basic C++ compatibility with C11 atomics
+ sys/arduino:
+ added Wire (I2C) interface
+ added SPI interface
* allow use of arduino libraries without need for arduino sketch
* add implementation for analogWrite
* fixed frequency selection in SPI
* sys/bitfield: unify byte order and bit order to both be most significant
bX first
* sys/checksum: move crc8 implementation from sht3x to common code
* sys/color: add color_rgb_set_brightness() and color_rgb_shift()
* sys/crypto/modes/ccm: support length of AAD > 24
* sys/crypto/modes/ccm: support plain text length < 2^32
+ sys/frac: add frac library for integer scaling by semi-constant fractions
+ sys/luid: add luid_get_eui48() / luid_get_eui64()
+ sys/progress_bar: add module for managing a progress bar in stdout
* sys/posix/pthread/pthread.c: fix pthread reaper
* sys/shell: make shell_run run shell forever
* sys/shell_commands: make 6Lo compression contexts configurable on non-6LBR
+ sys/stdio_null: add null driver
* sys/suit: use c25519 instead of hacl
- sys/suit: remove dependency on tinycbor
* sys/usbus:
* add descriptor prefix support
* unify terminology to use 'descriptor' everywhere
* cdc_acm: add interface association descriptor, enable Windows
enumeration and usage of RIOT CDC ACM
* cdc_acm: fix to avoid lost characters on USBUS CDC ACM STDIO
* sys/xtimer:
* concurrency/robustness improvements
* fix xtimer_mutex_lock_timeout by having _mutex_timeout() check waiting
list
- remove dependency to core_msg
Networking
+ sys/gnrc_lorawan: add initial support for GNRC based LoRaWAN stack
* sys/gnrc_netif: make 6LoENC dynamically configurable
+ sys/gnrc_sock: provide asynchronous event implementation
* sys/gnrc_ipv6: fix source check for loopback address
* sys/gnrc_ipv6_ext_frag: remove fragment header when n-th fragment is first
* sys/gnrc_ipv6_nib: allow for configuration of static link-local addresses
* sys/gnrc_netif: highest source address scope wins selection
* sys/gnrc_netif: only use prefix matching as tie-breaker in source
selection
* sys/gnrc_sixlowpan_frag_rb: split out classic frag specific code
* sys/gnrc_sixlowpan_frag_rb: fix memory-leak in _rm_by_datagram() and in
interval marker inherited from base
* sys/gnrc_sixlowpan_frag: various optimizations on sending
* sys/gnrc_sixlowpan_iphc: add fragment forwarding stubs
* sys/gnrc_sixlowpan_iphc_nhc: determine UDP hdr length from reassembly
buffer, fix fragmented data size allocation
* sys/gnrc_tcp: return immediately on gnrc_tcp_recv if connection is closing
+ sys/net/gcoap: add macro to delay initialization of gcoap
* sys/net/gcoap: do not allocate RX buf on stack
* sys/pthread: check malloc() return value, prevent NULL pointer deference
* sys/shell/gnrc_netif: use netif API for ifconfig
* sys/shell/sc_nimble`_netif: allow connecting by name
+ sys/sock: initial definitions for asynchronous event handling
+ sys/sock_async: initial import of event-based implementation
Packages
* pkg: cleanup management of dependencies
* pkg/pkg.mk: use intermediate state files
* pkg/ccn-lite: bump version
+ pkg/flatbuffers: add support for FlatBuffers serialization library
* pkg/gecko_sdk: update to version 2.7
* pkg/libfixmath: several improvements and fixes to support 8bit
* pkg/littlefs: bump littlefs version to 1.7.2
* pkg/lora-serialization: bump to latest version and update test for AVR
* pkg/lwip:
* add support for esp32 Ethernet device
* add IPv4 support for LWIP-stm32
* start DHCP for a netif with lwip_dhcp
* add stm32 ethernet support
* enable lwIP for ESP8266
+ pkg/nanopb: add Nanopb protocol buffers library package
* pkg/nimble:
* bump version
+ add simple BLE connection manager: autoconn
+ add user event callback to autconn
+ nimble_netif: catch L2CAP connection failures
+ nimble_netif: add additional events
* pkg/tinydtls: add DTLS sock API implementation
* pkg/tinydtls: bump version
+ pkg/tensorflow-lite: add support to RIOT
+ pkg/utensor: add support to RIOT
* pkg/u8g2: refactor the U8g2 package
* pkg/wakaama: add basic LWM2M client implementation
Boards
- boards: remove RTT_NUMOF/RTC_NUMOF
- boards: unexport PROGRAMMER
+ boards/adafruit-nrf52840: initial support
* boards/arduino-zero: configure ADC channels
+ boards/atmega328p: initial support for standalone version
* boards/atmega328p: support variable xtimer frequencies
+ boards/atmega1284P: initial support for standalone version
+ boards/atmega256rfr2: initial support
+ boards/avr-rss2: initial support
+ boards/cc1252: initial support
* boards/common: clean up msba2 common files
+ boards/derfmega*: initial support
+ boards/esp32-ttgo-t-beam: initial support
- boards/frdm: remove support for OpenOCD < v0.10.0
+ boards/mcb2288: initial support
+ boards/microduino-corerf: initial support
* boards/nucleo-f207zg: add ethernet configuration
* boards/native: allow for native to be reset via SIGUSR1
* boards/particle-*: configure PCB antenna for 2.4GHz radio
* boards/pic32-clicker: cleanup uart configuration and initialization
* boards/pic32-clicker: use pic32prog as default programmer
+ boards/pinetime: initial support for the PINE64 PineTime smartwatch
+ boards/sodaq-*: add arduino support
* boards/sodaq-*: refactor common code
+ boards/stm32f030f4-demo: initial support
* boards/stm32-common:
* allow SPI signals routed on multiple alternate functions
* add 54MHz and 108MHz SPI divtable entries
* common programmer/debugger/serial config
* boards/thingy: add dependency for on-board hts221/lps22hb sensors
CPU
+ cpu/arm7_common: hook up puf_sram
+ cpu/atmega128rfa1: add initial support
+ cpu/atmega256rfr2: symbol counter based RTT support
+ cpu/atmega_common:
* clean ups and fix code run at end of ISR to behave like
`thread_yield_higher`
* fixed atmega_exit_isr
* uart: use TX_ISR to check uart transmission end
+ cpuid: provide for every device
+ rtt: initial peripheral driver support
+ wdt: initial peripheral driver support
* cpu/cortexm: fix -mfpu flag value for CortexM7
* cpu/fe310:
* several cleanup in implementation and clock setup
* change default optimization to "-Os"
* uart: rework driver and fixes
+ i2c: initial peripheral driver support
+ spi: initial peripheral driver support
+ cpp: add feature
* cpu/esp*: esp_wifi used as default netdev for lwip
* cpu/esp32:
* improvements and cleanup of log_module
* fix lwip + esp_wfi, esp_wifi send buffer should not be on stack
* use esptool.py from riot tools
* rtc: fixes, improvements and cleanups
* spi: fix CS handling in spi_transfer_bytes
* uart: workaround uart sporadically set to wrong value when the CPU
clock is changed
* spi: enable use of SPI flash drive with pkg_littlefs
* cpu/esp8266:
* complete re-implementation based on ESP8266 RTOS SDK
* fix of esp_wifi_send function
* fix bootloaders and log outputs in vendor code
* cpu/efm32: fix uart handling of RX when no RX callback is configured
* cpu/efm32: normalize time in rtc_series1
* cpu/lpc2387:
* allow for more flexible clock selection
+ add support for backup RAM
* uart: update t...