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.