Skip to content
RELEASE 2019.10

RIOT-2019.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 2019.10 release includes:

 - initial support for SUIT firmware updates
 - USB CDC-ACM serial communication
 - complete rewrite of TI CC110x radio driver
 - initial support for IPv6 fragmentation
 - DTLS support in the sock networking stack
 - complete blockwise messaging for gcoap and nanocoap
 - as always, bug fixes and documentation updates

About 460 pull requests, composed of 950 commits, have been merged since the
last release, and about 60 issues have been solved. 57 people contributed with
code in 105 days. Approximately 2000 files have been touched with 129000
insertions and 25000 deletions.

Notations used below:
=====================
    + means new feature/item
    * means modified feature/item
    - means removed feature/item

New features and changes
========================

System libraries
----------------
    + sys/arduino: Added millis()
    * sys/arduino: make ADC feature optional
    + sys/fmt: Added submodule fmt_table for printing tables
    + sys/log: add module for colorized logging
    + sys/riotboot: add initial image digest verification
    * riotboot: define if building the bootloader
    + sys/shell: add heap command
    + sys/shell: cancel current line on CTRL-C.
    * shell/sc_gnrc_ipv6_nib: list and edit authoritative border router (ABR) list
    + sys/suit: initial support for SUIT firmware updates
    * sys: add schedstatistics module to remove dependency on xtimer
    * can: use memarray for pkt and router allocation
    + sys: single interrupt handler thread for interrupts in modules with blocking
      functions (but likely to be removed -- see Deprecations section below)

Networking
----------
    + sys: Add (CoAP) Link Format module
    + sys: add credman (D)TLS credential management module
    + sys: new sock submodule for DTLS
    + gnrc_ipv6_ext_frag: Initial import of IPv6 fragmentation and reassembly
    + gnrc_netif: allow for wait of minimum time between sends
    * gnrc_netif: add netif setter (part of refactoring to a pointer-based
      approach)
    * gnrc_sixlowpan_frag_vrb: add gnrc_sixlowpan_frag_vrb_from_route()
    + gnrc_sixlowpan_frag_rb: move reassembly buffer functions to their own module
    + gcoap: add Blockwise support
    * nanocoap: complete Blockwise support
    + nanocoap: add coap_opt_get_next() to iterate over options
    + nanocoap: add coap_opt_get_opaque() to retrieve option bytes
    * gnrc_tcp: several small improvements

Packages
--------
    * ccn-lite: version bump
    * pkg/libcose: bump version and update crypto support
    * nimble: adapt to nrf51 family
    + nimble: add IP-over-BLE support via netif/GNRC
    * nimble: bump version to 1.2.0
    * nimble/netif: set max conn explicitly
    * semtech-loramac: add uplink_counter get/set functions
    + Cifra: add AES crypto library
    * cayenne-lpp: bump version to 0.1.1
    + wolfSSL pkg addition with examples

Boards
------
    + board: add support for SAMR34-XPRO
    + boards/arduino-mkrwan1300: add initial support (without LoRa)
    * boards: Split off 128KiB version of bl*pill
    + boards/doc: Add a guide to find physical board pins
    + boards: Initial support for board HiFive1B
    - boards/mips-malta: remove board.
    + boards/nrf52: introduce shared dependencies in common/nrf52 and update
      boards
    * boards/nrf52832-mdk: enable I2C and use default configuration
    * board/nucleo-l031k6: Add i2c to periph_conf
    * board/nucleo-l432kc: Implementing I2C for board
    * boards: move CPU/CPU_MODEL definition to Makefile.features
    + boards/p-l496g-cell02: add support
    - boards: Remove support for the Jiminy-Mega256RFR2
    * boards/sam0: refactor ADC_0 into plain ADC
    * boards/slwstk6000b-*: split one board for each module
    * boards/slwstk6000b: move CPU definition to Makefile.features
    + boards/stm32f723e-disco: add initial support
    * boards/stm32: introduce common timer configurations and use them where
      possible
    + boards/stm32l0538-disco: add initial support
    * pic32-wifire: add support for flashing with pic32prog

CPU
---
    + cpu/esp32: lwIP netdev
    * cpu/esp*: various improvements
    * cpu/kinetis: enable HWRNG for k64f
    - cpu/mips32r2_generic: remove cpu.
    * cpu: Moved stdio_init() prior to periph_init() for ARM targets
    * cpu/nrf5x: declare radio_nrfble feat for all nrfs
    + cpu/nrf5x: implement wdt peripheral driver
    + cpu/sam0_common: add hwrng driver
    * cpu/sam0_common/gpio: don't hard-code number of ports
    * cpu/sam0: update doc.txt with new MCU families
    * cpu/saml21: Make Low-Power SRAM available to programs
    + cpu/stm32_common: add watchdog for stm32
    * stm32-common/spi: allow custom pin modes on spi to minimize power
      consumption
    * cpu/stm32f(2|4|7): add riotboot requirements
    * cpu/stm32l1: optimize power consumption
    * stm32l1/vendor: update vendor files to v2.3.0
    * sam0: allow flashing with JLinkExe
    + sam0: Implement watchdog driver
    * cpu/samr30: update vendor files using ASF 3.35.1
    + cpu/efm32: provide periph_uart_mode

Device Drivers
--------------
    + drivers: add mtd wrapper for periph_flashpage
    + drivers/cc110x: Complete rewrite from scratch, and detailed documentation
    * drivers/include/periph/eeprom: Changed uint8_t* to void* in API
    * drivers/periph/i2c: Updated i2c_release() to return void
    + drivers/ph_oem: support for Atlas Scientific pH OEM sensor
    + drivers: support for NXP PCA9685 I2C 16-channel, 12-bit PWM controller
    + usbus: Add CDC-ACM (Serial console) function
    * periph/timer: Fix return codes of timer API
    + can: add ncv7356 SW transceiver driver
    + drivers/lis2dh12: add I2C mode
    + drivers/periph: add doc on power management aspects
    * drivers/mrf24j40: add pseudomodules for MRF24J40MA/B/C/D/E

Build System / Tooling
----------------------
    * dist/tools/pyterm: drop loglevel from output
    * make: docker: delegate bind mounts to the containers
    * Makefile.base: implement relative path linking without 'realpath'
    * Makefile.base: use thin static archives.
    * Makefile.include: add flash-only as dependency of term
    * Makefile.include: do not build HEXFILE by default anymore
    * Makefile.include: require make version 4.
    * makefiles: add support for sysfs gpio debug adapter
    * Makefiles: add support to generate both `.hex` and `.bin` file and add
      FLASHFILE variable
    * makefiles/docker.inc.mk: various improvements
    * makefiles/murdock.inc.mk: change policy to run tests by default
    * make: introduce $(CLEAN)
    + murdock: introduce 'TEST_ON_CI_BLACKLIST'
    * toolchain/cflags: enable dwarf compression (save 50% HDD)
    * edbg: verify before flash
    + ci: add codespell check script for tracking typos
    + Makefile.include: add cleanterm target and use it for tests
    * arduino/sketches: build sketches as a module
    + github: use stale-bot to mark and close PRs without activity

Testing
-------
    + tests: add distinct test app for nrfmin driver
    + tests: add Nordic SoftDevice test app
    * tests/gnrc_ndp: enhance coverage
    * tests/lua_loader: run the test in CI
    * tests/mcuboot: handle building in docker
    * tests/pkg_u8g2: run the test in CI
    * tests: provide test case for malformed IEEE 802.15.4 packets
    * tests/pthread_rwlock: run the test in CI
    * tests: re-enable utf-8 tests on native
    + tests/riotboot: add automatic test
    + tests/sys_crypto: add RFC3610 and NIST SP 800-38C tests
    * tests/test_tools: add a test for the testing tools environment
    * tools/compile_and_test_for_board: allow setting the flash targets
    * tests/gnrc_tcp: provide regression tests for fixed issues

API Changes
========================

```
/* no error handling possible, so no need to return a value */
- int i2c_release(i2c_t dev)
+ void i2c_release(i2c_t dev)

/* return 0 on success, rather than 1; so like timer_init() */
int timer_set(tim_t dev, int channel, unsigned int timeout)
int timer_set_absolute(tim_t dev, int channel, unsigned int value)
int timer_clear(tim_t dev, int channel)

/* implementations already cast the argument to uint8_t* internally, so not
   a significant semantic change */
- size_t eeprom_read(uint32_t pos, uint8_t *data, size_t len)
+ size_t eeprom_read(uint32_t pos, void *data, size_t len)

- size_t eeprom_write(uint32_t pos, const uint8_t *data, size_t len)
+ size_t eeprom_write(uint32_t pos, const void *data, size_t len)

/* now returns CIPHER_ERR_INVALID_KEY_SIZE on invalid keySize */
int aes_init(cipher_context_t *context, const uint8_t *key, uint8_t keySize)

/* add setter for netif of interface header */
+ void gnrc_netif_hdr_set_netif(gnrc_netif_hdr_t *hdr, const gnrc_netif_t *netif)

```

Deprecations
========================

Warnings
--------
net/emb6
net/nhdp
pkg/oonf_api

As the release was finalized, rough consensus was reached on a system event
thread handler (#12474) that likely will remove the interrupt handler thread
(#10555) just introduced with this release.

Removals
--------
net/coap: remove deprecated COAP_CT_... defines

Known issues
============

Networking related issues
-------------------------
        packet buffer
        address
       assertion or completely without error
       configured prefix
       chars
       address

Timer related issues
--------------------
       time.
       _xtimer_now()  and irq_disable()

Drivers related issues
----------------------
        MHz
        clock cycles
       supported

Native related issues
---------------------

Other platforms related issues
------------------------------
        on host
        (not previous)
       boards
       CS
       LTO

Build system related issues
---------------------------
        flashfile
        evaluation
       image
       value

Other issues
------------
-none-  tests/pkg_fatfs: vol_idx print overflow on large negative value
        10
       static_asserts in the same scope
       everywhere

Fixed Issues from the last release (2019.07)
============================================

        echo -n
        causes Segmentation fault
        optimization
        in udp.c
        log_printfnoformat
       Makefile.include
       R21
       types

Acknowledgements
================
We would like to thank all companies that provided us with hardware for porting
and testing RIOT-OS. Further thanks go to companies and institutions that
directly sponsored development time. And finally, big thanks to all of you
contributing in so many different ways to make RIOT worthwhile!

More information
================
http://www.riot-os.org

Mailing lists
-------------
* RIOT OS kernel developers list
  devel@riot-os.org (http://lists.riot-os.org/mailman/listinfo/devel)
* RIOT OS users list
  users@riot-os.org (http://lists.riot-os.org/mailman/listinfo/users)
* RIOT commits
  commits@riot-os.org (http://lists.riot-os.org/mailman/listinfo/commits)
* Github notifications
  notifications@riot-os.org (http://lists.riot-os.org/mailman/listinfo/notifications)

IRC
---
* Join the RIOT IRC channel at: irc.freenode.net, #riot-os

License
=======
* The code developed by the RIOT community is licensed under the GNU Lesser
  General Public License (LGPL) version 2.1 as published by the Free Software
  Foundation.
* Some external sources and packages are published under a separate license.

All code files contain licensing information.