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.