Skip to content
RELEASE 2019.07

RIOT-2019.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 2019.07 release includes a number of new features including many new
boards and cpu, riotboot added to many new and old boards, USB is now available,
BLE improvements, Ethernet on stm32 platforms, as well as many bug fixes and
documentation updates.  Testing has also improved with both On-Target Testing
increasing and now Hardware Assisted Automated Tests being run.

About 300 pull requests with about 659 commits have been merged since the last
release and about 50 issues have been solved. 26 people contributed with code
in 106 days. Approximately 1377 files have been touched with 181993 insertions
and 19668 deletions.

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

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

System libraries
----------------
    + Add OCB encryption mode
    + sys/shell: add loramac shell command
    * Fletcher16: extend with multi-part functions
    + USBUS: Initial work towards an USB stack
    + usbus: Initial simple auto init structure
    * sys: make uart_stdio RX optional
    + sys/event: add event_wait_until()
    + sys/bluetil: add bluetil_addr_from_str()
    + usbus: Add CDC-ECM (Ethernet Control Model) function
    * usbus: simplify adding entry to list
    * sys/stdio_ethos: replace USE_ETHOS_FOR_STDIO by stdio_ethos pseudomodule

Networking
----------
    * gnrc_ipv6_nib: add address from netif to address validation timer
    + netdev_ieee802154: add txpower and page
    + net/lorawan/hdr: add lorawan header helpers
    + ble/nimble: add support for build-in IPSS service
    * pkg/semtech-loramac: rework interaction with the MAC
    * pkg/semtech-loramac: provide basic persistence for MAC state
    * RPL: API update suggestions
    + ipv6_ext: add fragmentation extension definitions
    * net/sock_util: Accept NULL pointers in urlsplit
    + sys/net: add netopt options for lorawan
    * gnrc_tftp: Fix out-of-bounds memory access when comparing modes
    - gnrc_pktbuf: remove gnrc_pktbuf_duplicate_upto
    - gnrc_ipv6: remove obsolete and harmful reception code
    * gnrc_tftp: set port on server init
    + ble/softdevice: add ble_nordic_softdevice feature
    * net/mqttsn: fix client ID length to comply to the standard
    + gnrc_tftp: Add minimum packet length check

Packages
--------
    * pkg/monocypher: bump version to 2.0.5
    * ble/nimble: bump version to 9d4bda2
    * openthread: update to release 20180926
    * minmea: bump version to current master
    + nanocbor: Initial support for the nanocbor package
    * pkg/lua: Make the module searchers conform to the API

Boards
------
    + boards/stm32l0538-disco: add initial support
    + boards/nucleo-l4r5zi: initial basic support
    + boards/particle-{xenon,argon,boron}: add initial support
    * boards/kw41z: add common configuration and use it with existing
      kw41z boards
    + added SPI support for Nucleo-F767ZI
    + boards: Add support for the Arduino-Leonardo
    * boards/nucleof7*: SPI and refactoring
    + boards/stm32: introduce and use new common rtt configuration header
    + boards/stm32l0/l4: add rtt feature
    + boards: add support for i-nucleo-lrwan1 (Arduino-like shield)
    + boards/nrf52840-mdk: added I2C config
    + boards/lsn50: add support for Dragino LSN50 LoRa Sensor Node
    * boards/stm32l0: introduce common clock configuration and apply it to
      related boards
    * boards/b-l072z-lrwan1: use STM32 common i2C configuration
    + Add usbdev feature to Sodaq boards
    + boards/pba-d-01-kw2x: add riotboot support
    + sensebox: add usbdev feature
    + boards/stm32f429i-disc1: add i2c configuration
    + boards/nucleo-l476rg: add riotboot
    + boards/same54-xpro: add riotboot support
    + boards: Add FLASHFILE support
    + boards/nucleo-l476rg: Add DMA support
    + nrf52: Add suspend/resume detection to usbdev
    + nrf5x: Add UART modecfg feature implementation
    + boards/stm32f3: add support for riotboot feature
    + boards/lobaro-lorabox: add sx1272 radio driver dependency
      to netdev_default
    + boards/stm32l4: add riotboot support
    + boards/microbit: add QEMU emulation
    + boards/frdm-kw41z-k64f: add riotboot
    * boards/sltb001a: reset before flashing

CPU
---
    * cpu/esp8266: added/changed helper functions
    + cpu/cc2538: Add periph_uart_mode implementation
    * saml1x: enable pm_layered by default
    + cpu/cc26x0: implement uart_mode()
    + cpu/sam0: add support for SAMD5x/SAME5x
    + sam0_common: add uart modecfg support
    + cpu/stm32f3: add support for flashpage and flashpage_raw
    * cpu/stm32l{1,4}: refactor flashpage numof macros
    * cpu/stm32: optimize stop mode for stm32f*
    * cpu/nrf5x_common: map hwrng to SoC library if SoftDevice is present

Device Drivers
--------------
    + devfs: add /dev/urandom and /dev/hwrng
    * drivers/mrf24j40 : support of NETOPT_LAST_ED_LEVEL
    + drivers/mrf24j40: add external PA/LNA control on MC/MD/ME devices
    * drivers/at86rf2xx: enable NETOPT_RX_END_IRQ and fix RSSI values
    * drivers/adt7310: Replace binary literal with hex literal
    + drivers/ds75lx: add basic driver for temperature sensor
    + drivers/include: add header definition for wdt
    + drivers/at: Add 'at_recv_bytes_until_string' function
    + sx127x: add several NETOPT for GNRC LoRaWAN
    * drivers/sx127x: fix device reset
    + drivers: stm32 eth peripheral driver
    + drivers/periph/gpio_util: add gpio_util_shiftin()

Build System / Tooling
----------------------
    * makefiles/docker: export BOARDS
    + makefiles: add bootloaders to the list of applications
    * Makefile.include: allow overwriting flash-recipe
    * dist/tools/buildsystem_sanity_check: add an export variable check
    * sys/Makefile.include: include riotboot headers when
      FEATURES_REQUIRED=riotboot
    + make: add print-versions helper target
    + make: add LOG_LEVEL to overridable variables
    * riotboot/Makefile.include: increase RIOTBOOT_HDR_LEN for ARMv7*-M
    * dist/tools/build_system_sanity_check: BUG fix errors being ignored
    * boards/common: use Makefile.features
    + make: add termdeps target
    * periph_common: add as dependency to periph drivers
    + nrf52: Add USB peripheral driver
    + makefiles/boards.inc.mk: list boards variables
    + makefiles/app_dirs.inc.mk: target to list supported applications/boards
    + Makefile.features: add a common file for the features parsing
    + Makefile.features: add declarative FEATURES_ variables definition
    + makefiles/utils/variables: add functions to help managing variables
    * Migrate all boards to define FLASHFILE
    * tools/openocd.sh: try to probe the board for real flash address

Testing
-------
    * tests/periph_flashpage: add RWWEE automatic test if hw supports it
    * tests/pthread_tls: allow negative key values
    * tests/gnrc_udp: include `gnrc_pktbuf_cmd` per default
    + tests/periph_hwrng: add automated python test
    * tests/periph_timer: include kw41z boards in low-power timer boards
    * tests/pkg_c25519: increase timeout for arduino-mega2560
    + tests/xtimer_usleep: fail with negative offsets
    + unittests: add tsrb tests
    + tests/stdin: add non regression test for stdin module
    + tests/xtimer_mutex_lock_timeout: add simple case test
    + Add NimBLE heart rate sensor example (GATT notifications)
    * tests/driver_rn2xx3: fix invalid element index for txmode
    * tests/pkg_semtech-loramac: don't init the mac from main
    * tests/devfs: move tests-devfs out of unittests
    + examples/lorawan: fix semtech_loramac_send TX ret code
    * tests/unittests: split remaining packages tests to different test
                       directory

API Changes
========================
- uart_stdio RX is now optional
- CPU_MODEL declared in boards/Makefile.features

```c
- void isrpipe_init(isrpipe_t *isrpipe, char *buf, size_t bufsize);
+ void isrpipe_init(isrpipe_t *isrpipe, uint8_t *buf, size_t bufsize);

- int isrpipe_write_one(isrpipe_t *isrpipe, char c);
+ int isrpipe_write_one(isrpipe_t *isrpipe, uint8_t c);

- int isrpipe_read(isrpipe_t *isrpipe, char *buf, size_t count);
+ int isrpipe_read(isrpipe_t *isrpipe, uint8_t *buf, size_t count);

- int isrpipe_read_timeout(isrpipe_t *isrpipe, char *buf, size_t count,\
                           int32_t timeout);
+ int isrpipe_read_timeout(isrpipe_t *isrpipe, uint8_t *buf, size_t count,\
                           uint32_t timeout);

- int isrpipe_read_all_timeout(isrpipe_t *isrpipe, char *buf, size_t count,\
                               uint32_t timeout);
+ int isrpipe_read_all_timeout(isrpipe_t *isrpipe, uint8_t *buf, size_t count,\
                               uint32_t timeout);

typedef struct tsrb {
...
-    char *buf;                  /**< Buffer to operate on. */
+    uint8_t *buf;               /**< Buffer to operate on. */
...
} tsrb_t

- int tsrb_get(tsrb_t *rb, char *dst, size_t n);
+ int tsrb_get(tsrb_t *rb, uint8_t *dst, size_t n);

- int tsrb_add_one(tsrb_t *rb, char c);
+ int tsrb_add_one(tsrb_t *rb, uint8_t c);

- int tsrb_add(tsrb_t *rb, const char *src, size_t n);
+ int tsrb_add(tsrb_t *rb, const uint8_t *src, size_t n);

typedef struct {
...
-   uint16_t (*calc_rank)(gnrc_rpl_parent_t *parent, uint16_t base_rank);
-   gnrc_rpl_parent_t *(*which_parent)(gnrc_rpl_parent_t *, gnrc_rpl_parent_t *);
+  uint16_t (*calc_rank)(gnrc_rpl_dodag_t *dodag, uint16_t base_rank);

-   void (*reset)(gnrc_rpl_dodag_t *);    /**< resets the OF */
+  void (*reset)(gnrc_rpl_dodag_t *dodag);
...
-   void (*init)(void);  /**< OF specific init function */
+  void (*init)(gnrc_rpl_dodag_t *dodag);
} gnrc_rpl_of_t;

- thread_state_t
+ thread_status_t

- void sched_set_status(thread_t *process, thread_state_t status);
+ void sched_set_status(thread_t *process, thread_status_t status);

struct _thread {
...
-   thread_state_t status;
+  thread_status_t status;
...
}

- bool mrf24j40_cca(mrf24j40_t *dev);
+ bool mrf24j40_cca(mrf24j40_t *dev, int8_t *rssi);
```

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

Warnings
--------
`gnrc_tftp` module
`ubjson` module

Removals
--------
`gcoap_req_send()` replaced with `gcoap_req_send2()->gcoap_req_send2()`

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

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

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

Drivers related issues
----------------------
        clock cycles
       R21
       supported

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

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

Build system related issues
---------------------------
        bionic`.
        evaluation
       image
       Makefile.include
       value
* buildtest with BUILD_IN_DOCKER hides host toolchain errors

Other issues
------------
        optimization
        in udp.c
        10
       static_asserts in the same scope
       everywhere

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

        and no error

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!
A special thanks to @fjmolinas, @leandrolanzieri, @cladmi, @jia200x, @miri64
for helping run the release tests

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.