diff --git a/.github/workflows/test-on-iotlab.yml b/.github/workflows/test-on-iotlab.yml index 10a0af31ba..fb9938a2ff 100644 --- a/.github/workflows/test-on-iotlab.yml +++ b/.github/workflows/test-on-iotlab.yml @@ -33,6 +33,10 @@ jobs: fail-fast: false matrix: boards: + - riot: dwm1001 + iotlab: + archi: dwm1001:dw1000 + site: saclay - riot: iotlab-m3 iotlab: archi: m3:at86rf231 @@ -49,18 +53,22 @@ jobs: iotlab: archi: nrf52840dk:multi site: saclay - - riot: dwm1001 - iotlab: - archi: dwm1001:dw1000 - site: saclay - riot: nrf52832-mdk iotlab: archi: nrf52832mdk:ble site: saclay + - riot: nucleo-wl55jc + iotlab: + archi: nucleo-wl55jc:stm32wl + site: grenoble - riot: samr21-xpro iotlab: archi: samr21:at86rf233 site: saclay + - riot: samr34-xpro + iotlab: + archi: samr34:sx1276 + site: grenoble - riot: b-l072z-lrwan1 iotlab: archi: st-lrwan1:sx1276 @@ -74,10 +82,6 @@ jobs: env: IOTLAB_NODE: auto BUILD_IN_DOCKER: 1 - # Force .bin files generation because these files are used to flash on IoT-LAB and - # because compile_and_test_for_board forces RIOT_CI_BUILD which skip .bin - # files generation - DOCKER_ENVIRONMENT_CMDLINE: -e BUILD_FILES=\$$\(BINFILE\) COMPILE_AND_TEST_FOR_BOARD: ./dist/tools/compile_and_test_for_board/compile_and_test_for_board.py COMPILE_AND_TEST_ARGS: --with-test-only --jobs=2 --report-xml # Exclude applications that are expected to fail or cannot run on iotlab diff --git a/.murdock b/.murdock index c6f2b70f14..2261ade97e 100755 --- a/.murdock +++ b/.murdock @@ -1,9 +1,9 @@ #!/bin/sh # uncomment and change this to limit builds, e.g., -#export BOARDS="samr21-xpro native" +export BOARDS="samr21-xpro native" # and / or -#export APPS="examples/hello-world tests/unittests" +export APPS="examples/hello-world tests/unittests" # : ${TEST_BOARDS_AVAILABLE:="esp32-wroom-32 samr21-xpro"} diff --git a/Makefile.base b/Makefile.base index 0132e8c7e7..cfc060c973 100644 --- a/Makefile.base +++ b/Makefile.base @@ -97,8 +97,8 @@ compile-commands: | $(DIRS:%=COMPILE-COMMANDS--%) $(file >>$(BINDIR)/$(MODULE)/compile_cmds.txt,TARGET_ARCH: $(TARGET_ARCH)) $(file >>$(BINDIR)/$(MODULE)/compile_cmds.txt,TARGET_ARCH_LLVM: $(TARGET_ARCH_LLVM)) -# include makefile snippets for packages in $(USEPKG) that modify GENSRC: --include $(USEPKG:%=$(RIOTPKG)/%/Makefile.gensrc) +# include makefile snippets for packages in $(PKG_PATHS) that modify GENSRC: +-include $(PKG_PATHS:%=%Makefile.gensrc) GENOBJC := $(GENSRC:%.c=%.o) OBJC_LTO := $(SRC:%.c=$(BINDIR)/$(MODULE)/%.o) diff --git a/Makefile.dep b/Makefile.dep index 6e0f815619..ad9c764824 100644 --- a/Makefile.dep +++ b/Makefile.dep @@ -10,7 +10,7 @@ # include external modules dependencies # processed before RIOT ones to be evaluated before the 'default' rules. --include $(EXTERNAL_MODULE_PATHS:%=%/Makefile.dep) +-include $(EXTERNAL_MODULE_PATHS:%=%Makefile.dep) # pull dependencies from sys and drivers include $(RIOTBASE)/sys/Makefile.dep @@ -20,7 +20,7 @@ include $(RIOTBASE)/drivers/Makefile.dep -include $(sort $(USEMODULE:%=$(RIOTBASE)/drivers/%/Makefile.dep)) # pull dependencies from packages --include $(USEPKG:%=$(RIOTPKG)/%/Makefile.dep) +-include $(PKG_PATHS:%=%Makefile.dep) ifneq (,$(filter mpu_stack_guard,$(USEMODULE))) FEATURES_REQUIRED += cortexm_mpu diff --git a/Makefile.include b/Makefile.include index a91c125ecc..640e19f150 100644 --- a/Makefile.include +++ b/Makefile.include @@ -386,6 +386,17 @@ ifneq (,$(IOTLAB_NODE)) PROGRAMMER ?= iotlab # iotlab uses ELFFILE by default for flashing boards. FLASHFILE ?= $(ELFFILE) + # RIOT_CI_BUILD disables the build of BINFILE which is required for flashing + # on IoT-LAB + ifeq (1,$(RIOT_CI_BUILD)) + BUILD_FILES += $(BINFILE) + endif + # Disable IOTLAB_NODE if inside Docker to avoid including the + # iotlab.single.inc.mk file which is useless there: it's only useful for + # flashing and this is done outside of Docker. + ifeq (1,$(INSIDE_DOCKER)) + IOTLAB_NODE := + endif endif # Add standard include directories @@ -416,6 +427,10 @@ ifeq (1,$(TEST_KCONFIG)) USEMODULE := $(KCONFIG_MODULES) KCONFIG_PACKAGES := $(call lowercase,$(patsubst CONFIG_PACKAGE_%,%,$(filter CONFIG_PACKAGE_%,$(.VARIABLES)))) USEPKG := $(KCONFIG_PACKAGES) + + # Locate used packages in $(RIOTPKG). + PKG_PATHS := $(sort $(foreach dir,$(RIOTPKG),\ + $(foreach pkg,$(USEPKG),$(dir $(wildcard $(dir)/$(pkg)/Makefile))))) else # always select provided architecture features FEATURES_REQUIRED += $(filter arch_%,$(FEATURES_PROVIDED)) @@ -559,11 +574,11 @@ include $(RIOTBASE)/sys/Makefile.include # include Makefile.includes of each driver modules if they exist -include $(USEMODULE:%=$(RIOTBASE)/drivers/%/Makefile.include) -# include Makefile.includes for packages in $(USEPKG) --include $(USEPKG:%=$(RIOTPKG)/%/Makefile.include) +# include Makefile.includes for packages in $(PKG_PATHS) +-include $(PKG_PATHS:%=%Makefile.include) # include external modules configuration --include $(EXTERNAL_MODULE_PATHS:%=%/Makefile.include) +-include $(EXTERNAL_MODULE_PATHS:%=%Makefile.include) # Deduplicate includes without sorting them # see https://stackoverflow.com/questions/16144115/makefile-remove-duplicate-words-without-sorting @@ -760,31 +775,30 @@ endif # The `clean` needs to be serialized before everything else. all $(BASELIBS) $(ARCHIVES) $(BUILDDEPS) ..in-docker-container: | $(CLEAN) -.PHONY: pkg-prepare pkg-build pkg-build-% +.PHONY: pkg-prepare pkg-build pkg-prepare: - -@for i in $(USEPKG) ; do "$(MAKE)" -C $(RIOTPKG)/$$i prepare ; done + -@$(foreach dir,$(PKG_PATHS),"$(MAKE)" -C $(dir) prepare $(NEWLINE)) -pkg-build: $(USEPKG:%=pkg-build-%) -pkg-build-%: $(BUILDDEPS) - $(QQ)"$(MAKE)" -C $(RIOTPKG)/$* +pkg-build: $(BUILDDEPS) + $(foreach dir,$(PKG_PATHS),$(QQ)"$(MAKE)" -C $(dir) $(NEWLINE)) clean: ifndef MAKE_RESTARTS - -@for i in $(USEPKG) ; do "$(MAKE)" -C $(RIOTPKG)/$$i clean ; done + -@$(foreach dir,$(PKG_PATHS),"$(MAKE)" -C $(dir) clean $(NEWLINE)) -@rm -rf $(BINDIR) -@rm -rf $(SCANBUILD_OUTPUTDIR) endif # Remove intermediates, but keep the .elf, .hex and .map etc. clean-intermediates: - -@for i in $(USEPKG) ; do "$(MAKE)" -C $(RIOTPKG)/$$i distclean ; done + -@$(foreach dir,$(PKG_PATHS),"$(MAKE)" -C $(dir) distclean $(NEWLINE)) -@rm -rf $(BINDIR)/*.a $(BINDIR)/*/ clean-pkg: - -@for i in $(USEPKG) ; do "$(MAKE)" -C $(RIOTPKG)/$$i distclean ; done + -@$(foreach dir,$(PKG_PATHS),"$(MAKE)" -C $(dir) distclean $(NEWLINE)) distclean: - -@for i in $(USEPKG) ; do "$(MAKE)" -C $(RIOTPKG)/$$i distclean ; done + -@$(foreach dir,$(PKG_PATHS),"$(MAKE)" -C $(dir) distclean $(NEWLINE)) -@rm -rf $(BINDIRBASE) # Include PROGRAMMER_FLASH/PROGRAMMER_RESET variables diff --git a/boards/p-nucleo-wb55/doc.txt b/boards/p-nucleo-wb55/doc.txt index b6d666415d..c972900528 100644 --- a/boards/p-nucleo-wb55/doc.txt +++ b/boards/p-nucleo-wb55/doc.txt @@ -1,6 +1,6 @@ /** @defgroup boards_p-nucleo-wb55 STM32 p-nucleo-wb55 -@ingroup boards_common_nucleo +@ingroup boards @brief Support for the STM32 p-nucleo-wb55 Hardware @@ -45,11 +45,7 @@ Flashing the device ------------------- The ST p-nucleo-wb55 board includes an on-board ST-LINK programmer and can be -flashed using OpenOCD. - -@note The latest release of OpenOCD doesn't contain support for this board, -so a recent development version must be built from source to be able to flash -this board. +flashed using OpenOCD (use version 0.11.0 at least). To flash this board, just use the following command: @@ -102,8 +98,8 @@ Implementation Status | | RTC | yes | | | | RNG | yes | | | | Timer | yes | TIM2 | -| | WDT | no | | -| | USB | no | | +| | WDT | yes | | +| | USB | yes | | | | PWM | no | | | | AES | no | | diff --git a/boards/samr34-xpro/doc.txt b/boards/samr34-xpro/doc.txt new file mode 100644 index 0000000000..7c92e0f2c4 --- /dev/null +++ b/boards/samr34-xpro/doc.txt @@ -0,0 +1,40 @@ +/** +@defgroup boards_samr34-xpro Microchip SAM R34 Xplained Pro +@ingroup boards +@brief Support for the Microchip SAM R34 Xplained Pro and WLR089 Xplained Pro + +## Overview + +The `SAMR34 Xplained Pro` is a compact evaluation board by Microchip featuring a +SAMR34J18 SoC. The SoC includes a SAML21 ARM Cortex-M0+ micro-controller +bundled with Semtech's SX1276, a 868/915 MHz LoRa compatible radio. +For programming the MCU comes with 40Kb of RAM and 256Kb of flash memory. + +## Hardware + +![samr34-xpro image](https://www.microchip.com/content/dam/mchp/mrt-dam/devtools/3072-180605-wpd-dm320111-2.jpg) + +An evaluation board for the radio certified WLR089 module exists as the WLR089 Xplained Pro, it is compatible with the `samr34-xpro`. + +![wlr089-xpro](https://www.microchip.com/content/dam/mchp/mrt-dam/devtools/3411-264438-1598368489-c14679-200616-wsg-ev23m25a-wlr089-explained-pro-evaluation-board.jpg) + + +### MCU +| MCU | SAMR34J18B | +|:---------- |:--------------------- | +| Family | ARM Cortex-M0+ | +| Vendor | Atmel | +| RAM | 32 kiB + 8 kiB battery RAM | +| Flash | 256 KiB | +| Frequency | up to 48MHz | +| FPU | no | +| Timers | 6 (3xTC (8,16,32 bit), 3xTCC (16 bit)) | +| ADCs | 1x 12-bit (8 channels)| +| UARTs | max 5 (shared with SPI and I2C) | +| SPIs | max 5 (see UART) | +| I2Cs | max 5 (see UART) | +| Vcc | 1.8V - 3.6V | +| Datasheet | [Datasheet](https://ww1.microchip.com/downloads/en/DeviceDoc/SAMR34-R35-Low-Power-LoRa-Sub-GHz-SiP-Data-Sheet-DS70005356B.pdf) | +| Board Manual | [SAM R34 XPro](https://www.microchip.com/en-us/development-tool/DM320111)
[WLR089 XPro](https://www.microchip.com/en-us/development-tool/EV23M25A)| + + */ diff --git a/boards/samr34-xpro/include/board.h b/boards/samr34-xpro/include/board.h index 80ada8ac1e..e2473d8fb9 100644 --- a/boards/samr34-xpro/include/board.h +++ b/boards/samr34-xpro/include/board.h @@ -7,9 +7,7 @@ */ /** - * @defgroup boards_samr34-xpro Microchip SAM R34 Xplained Pro - * @ingroup boards - * @brief Support for the Microchip SAM R34 Xplained Pro board. + * @ingroup boards_samr34-xpro * @{ * * @file @@ -32,50 +30,50 @@ extern "C" { * @name Semtech SX1276 configuration * @{ */ -#define SX127X_PARAM_SPI (SPI_DEV(0)) -#define SX127X_PARAM_SPI_NSS GPIO_PIN(1, 31) /* D10 */ -#define SX127X_PARAM_RESET GPIO_PIN(1, 15) /* A0 */ -#define SX127X_PARAM_DIO0 GPIO_PIN(1, 16) /* D2 */ -#define SX127X_PARAM_DIO1 GPIO_PIN(0, 11) /* D3 */ -#define SX127X_PARAM_DIO2 GPIO_PIN(0, 12) /* D4 */ -#define SX127X_PARAM_DIO3 GPIO_PIN(1, 17) /* D5 */ -#define SX127X_PARAM_PASELECT (SX127X_PA_RFO) +#define SX127X_PARAM_SPI SPI_DEV(0) /**< internal SPI */ +#define SX127X_PARAM_SPI_NSS GPIO_PIN(1, 31) /**< D10 */ +#define SX127X_PARAM_RESET GPIO_PIN(1, 15) /**< A0 */ +#define SX127X_PARAM_DIO0 GPIO_PIN(1, 16) /**< D2 */ +#define SX127X_PARAM_DIO1 GPIO_PIN(0, 11) /**< D3 */ +#define SX127X_PARAM_DIO2 GPIO_PIN(0, 12) /**< D4 */ +#define SX127X_PARAM_DIO3 GPIO_PIN(1, 17) /**< D5 */ +#define SX127X_PARAM_PASELECT SX127X_PA_RFO /**< no boost */ /** @}*/ /** * @name Board specific configuration * @{ */ -#define TCXO_PWR_PIN GPIO_PIN(PA, 9) -#define TX_OUTPUT_SEL_PIN GPIO_PIN(PA, 13) +#define TCXO_PWR_PIN GPIO_PIN(PA, 9) /**< 32 MHz oscillator for radio enable */ +#define TX_OUTPUT_SEL_PIN GPIO_PIN(PA, 13) /**< BAND_SEL */ /** @}*/ /** * @name LED pin definitions and handlers * @{ */ -#define LED_PORT PORT->Group[0] +#define LED_PORT PORT->Group[0] /**< GPIO port */ -#define LED0_PIN GPIO_PIN(PA, 18) -#define LED0_MASK (1 << 18) -#define LED0_ON (LED_PORT.OUTCLR.reg = LED0_MASK) -#define LED0_OFF (LED_PORT.OUTSET.reg = LED0_MASK) -#define LED0_TOGGLE (LED_PORT.OUTTGL.reg = LED0_MASK) +#define LED0_PIN GPIO_PIN(PA, 18) /**< GPIO pin */ +#define LED0_MASK (1 << 18) /**< GPIO pin mask */ +#define LED0_ON (LED_PORT.OUTCLR.reg = LED0_MASK) /**< enable LED */ +#define LED0_OFF (LED_PORT.OUTSET.reg = LED0_MASK) /**< disable LED */ +#define LED0_TOGGLE (LED_PORT.OUTTGL.reg = LED0_MASK) /**< toggle LED */ -#define LED1_PIN GPIO_PIN(PA, 19) -#define LED1_MASK (1 << 19) -#define LED1_ON (LED_PORT.OUTCLR.reg = LED1_MASK) -#define LED1_OFF (LED_PORT.OUTSET.reg = LED1_MASK) -#define LED1_TOGGLE (LED_PORT.OUTTGL.reg = LED1_MASK) +#define LED1_PIN GPIO_PIN(PA, 19) /**< GPIO pin */ +#define LED1_MASK (1 << 19) /**< GPIO pin mask */ +#define LED1_ON (LED_PORT.OUTCLR.reg = LED1_MASK) /**< enable LED */ +#define LED1_OFF (LED_PORT.OUTSET.reg = LED1_MASK) /**< disable LED */ +#define LED1_TOGGLE (LED_PORT.OUTTGL.reg = LED1_MASK) /**< toggle LED */ /** @} */ /** * @name BTN0 (SW0 Button) pin definitions * @{ */ -#define BTN0_PORT PORT->Group[0] -#define BTN0_PIN GPIO_PIN(PA, 28) -#define BTN0_MODE GPIO_IN_PU +#define BTN0_PORT PORT->Group[0] /**< GPIO port */ +#define BTN0_PIN GPIO_PIN(PA, 28) /**< GPIO pin */ +#define BTN0_MODE GPIO_IN_PU /**< Pull Up GPIO */ /** @} */ /** diff --git a/core/include/sched.h b/core/include/sched.h index 23cfc56d75..5a5c2bbb34 100644 --- a/core/include/sched.h +++ b/core/include/sched.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2014 Freie Universität Berlin + * Copyright (C) 2014-2017 Freie Universität Berlin * * This file is subject to the terms and conditions of the GNU Lesser * General Public License v2.1. See the file LICENSE in the top level @@ -75,6 +75,7 @@ * @brief Scheduler API definition * * @author Kaspar Schleiser + * @author Hauke Petersen */ #ifndef SCHED_H @@ -252,6 +253,19 @@ extern clist_node_t sched_runqueues[SCHED_PRIO_LEVELS]; */ NORETURN void sched_task_exit(void); +/** + * @brief Change the priority of the given thread + * + * @note This functions expects interrupts to be disabled when called! + * + * @pre (thread != NULL) + * @pre (priority < SCHED_PRIO_LEVELS) + * + * @param[in,out] thread target thread + * @param[in] priority new priority to assign to @p thread + */ +void sched_change_priority(thread_t *thread, uint8_t priority); + /** * @brief Set CPU to idle mode (CPU dependent) * diff --git a/core/sched.c b/core/sched.c index f59305b78d..8ff2ec1d6d 100644 --- a/core/sched.c +++ b/core/sched.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2014 Freie Universität Berlin + * Copyright (C) 2014-2017 Freie Universität Berlin * * This file is subject to the terms and conditions of the GNU Lesser * General Public License v2.1. See the file LICENSE in the top level @@ -15,6 +15,7 @@ * * @author Kaspar Schleiser * @author René Kijewski + * @author Hauke Petersen * * @} */ @@ -86,21 +87,21 @@ static void (*sched_cb)(kernel_pid_t active_thread, * and readout away, switching between the two orders depending on the CLZ * instruction availability */ -static inline void _set_runqueue_bit(thread_t *process) +static inline void _set_runqueue_bit(uint8_t priority) { #if defined(BITARITHM_HAS_CLZ) - runqueue_bitcache |= BIT31 >> process->priority; + runqueue_bitcache |= BIT31 >> priority; #else - runqueue_bitcache |= 1 << process->priority; + runqueue_bitcache |= 1 << priority; #endif } -static inline void _clear_runqueue_bit(thread_t *process) +static inline void _clear_runqueue_bit(uint8_t priority) { #if defined(BITARITHM_HAS_CLZ) - runqueue_bitcache &= ~(BIT31 >> process->priority); + runqueue_bitcache &= ~(BIT31 >> priority); #else - runqueue_bitcache &= ~(1 << process->priority); + runqueue_bitcache &= ~(1 << priority); #endif } @@ -218,41 +219,54 @@ thread_t *__attribute__((used)) sched_run(void) return next_thread; } +/* Note: Forcing the compiler to inline this function will reduce .text for applications + * not linking in sched_change_priority(), which benefits the vast majority of apps. + */ +static inline __attribute__((always_inline)) void _runqueue_push(thread_t *thread, uint8_t priority) +{ + DEBUG("sched_set_status: adding thread %" PRIkernel_pid " to runqueue %" PRIu8 ".\n", + thread->pid, priority); + clist_rpush(&sched_runqueues[priority], &(thread->rq_entry)); + _set_runqueue_bit(priority); + + /* some thread entered a runqueue + * if it is the active runqueue + * inform the runqueue_change callback */ +#if (IS_USED(MODULE_SCHED_RUNQ_CALLBACK)) + thread_t *active_thread = thread_get_active(); + if (active_thread && active_thread->priority == priority) { + sched_runq_callback(priority); + } +#endif +} + +/* Note: Forcing the compiler to inline this function will reduce .text for applications + * not linking in sched_change_priority(), which benefits the vast majority of apps. + */ +static inline __attribute__((always_inline)) void _runqueue_pop(thread_t *thread) +{ + DEBUG("sched_set_status: removing thread %" PRIkernel_pid " from runqueue %" PRIu8 ".\n", + thread->pid, thread->priority); + clist_lpop(&sched_runqueues[thread->priority]); + + if (!sched_runqueues[thread->priority].next) { + _clear_runqueue_bit(thread->priority); +#if (IS_USED(MODULE_SCHED_RUNQ_CALLBACK)) + sched_runq_callback(thread->priority); +#endif + } +} + void sched_set_status(thread_t *process, thread_status_t status) { if (status >= STATUS_ON_RUNQUEUE) { if (!(process->status >= STATUS_ON_RUNQUEUE)) { - DEBUG( - "sched_set_status: adding thread %" PRIkernel_pid " to runqueue %" PRIu8 ".\n", - process->pid, process->priority); - clist_rpush(&sched_runqueues[process->priority], - &(process->rq_entry)); - _set_runqueue_bit(process); - - /* some thread entered a runqueue - * if it is the active runqueue - * inform the runqueue_change callback */ -#if (IS_USED(MODULE_SCHED_RUNQ_CALLBACK)) - thread_t *active_thread = thread_get_active(); - if (active_thread && active_thread->priority == process->priority) { - sched_runq_callback(process->priority); - } -#endif + _runqueue_push(process, process->priority); } } else { if (process->status >= STATUS_ON_RUNQUEUE) { - DEBUG( - "sched_set_status: removing thread %" PRIkernel_pid " from runqueue %" PRIu8 ".\n", - process->pid, process->priority); - clist_lpop(&sched_runqueues[process->priority]); - - if (!sched_runqueues[process->priority].next) { - _clear_runqueue_bit(process); -#if (IS_USED(MODULE_SCHED_RUNQ_CALLBACK)) - sched_runq_callback(process->priority); -#endif - } + _runqueue_pop(process); } } @@ -306,3 +320,40 @@ void sched_register_cb(void (*callback)(kernel_pid_t, kernel_pid_t)) sched_cb = callback; } #endif + +void sched_change_priority(thread_t *thread, uint8_t priority) +{ + assert(thread && (priority < SCHED_PRIO_LEVELS)); + + if (thread->priority == priority) { + return; + } + + unsigned irq_state = irq_disable(); + + if (thread_is_active(thread)) { + _runqueue_pop(thread); + _runqueue_push(thread, priority); + } + thread->priority = priority; + + irq_restore(irq_state); + + thread_t *active = thread_get_active(); + + if ((active == thread) + || ((active != NULL) && (active->priority > priority) && thread_is_active(thread)) + ) { + /* If the change in priority would result in a different decision of + * the scheduler, we need to yield to make sure the change in priority + * takes effect immediately. This can be due to one of the following: + * + * 1) The priority of the thread currently running has been reduced + * (higher numeric value), so that other threads now have priority + * over the currently running. + * 2) The priority of a pending thread has been increased (lower numeric value) so that it + * now has priority over the running thread. + */ + thread_yield_higher(); + } +} diff --git a/cpu/cortexm_common/vectors_cortexm.c b/cpu/cortexm_common/vectors_cortexm.c index 175d6cb25c..232e0109fe 100644 --- a/cpu/cortexm_common/vectors_cortexm.c +++ b/cpu/cortexm_common/vectors_cortexm.c @@ -161,10 +161,7 @@ void reset_handler_default(void) #endif /* CPU_HAS_BACKUP_RAM */ #ifdef MODULE_MPU_NOEXEC_RAM - /* Mark the RAM non executable. This is a protection mechanism which - * makes exploitation of buffer overflows significantly harder. - * - * This marks the memory region from 0x20000000 to 0x3FFFFFFF as non + /* This marks the memory region from 0x20000000 to 0x3FFFFFFF as non * executable. This is the Cortex-M SRAM region used for on-chip RAM. */ mpu_configure( diff --git a/cpu/native/native_cpu.c b/cpu/native/native_cpu.c index cdbbcc629e..87370a89ea 100644 --- a/cpu/native/native_cpu.c +++ b/cpu/native/native_cpu.c @@ -102,11 +102,10 @@ int thread_isr_stack_usage(void) return -1; } -static inline void *align_stack(void *stack_start, int *stacksize) +static inline void *align_stack(uintptr_t start, int *stacksize) { const size_t alignment = sizeof(uintptr_t); const uintptr_t align_mask = alignment - 1; - uintptr_t start = (uintptr_t)stack_start; size_t unalignment = (start & align_mask) ? (alignment - (start & align_mask)) : 0; start += unalignment; @@ -117,10 +116,9 @@ static inline void *align_stack(void *stack_start, int *stacksize) char *thread_stack_init(thread_task_func_t task_func, void *arg, void *stack_start, int stacksize) { - char *stk; ucontext_t *p; - stack_start = align_stack(stack_start, &stacksize); + stack_start = align_stack((uintptr_t)stack_start, &stacksize); VALGRIND_STACK_REGISTER(stack_start, (char *)stack_start + stacksize); VALGRIND_DEBUG("VALGRIND_STACK_REGISTER(%p, %p)\n", @@ -128,18 +126,16 @@ char *thread_stack_init(thread_task_func_t task_func, void *arg, void *stack_sta DEBUG("thread_stack_init\n"); - stk = stack_start; - /* Use intermediate cast to uintptr_t to silence -Wcast-align. The stack * is aligned to word size above. */ - p = (ucontext_t *)(uintptr_t)(stk + (stacksize - sizeof(ucontext_t))); + p = (ucontext_t *)(uintptr_t)((uint8_t *)stack_start + (stacksize - sizeof(ucontext_t))); stacksize -= sizeof(ucontext_t); if (getcontext(p) == -1) { err(EXIT_FAILURE, "thread_stack_init: getcontext"); } - p->uc_stack.ss_sp = stk; + p->uc_stack.ss_sp = stack_start; p->uc_stack.ss_size = stacksize; p->uc_stack.ss_flags = 0; p->uc_link = &end_context; diff --git a/cpu/nrf52/radio/nrf802154/nrf802154_radio.c b/cpu/nrf52/radio/nrf802154/nrf802154_radio.c index b31389b510..1a97973bcb 100644 --- a/cpu/nrf52/radio/nrf802154/nrf802154_radio.c +++ b/cpu/nrf52/radio/nrf802154/nrf802154_radio.c @@ -259,6 +259,7 @@ static int _confirm_op(ieee802154_dev_t *dev, ieee802154_hal_op_t op, void *ctx) int radio_state = NRF_RADIO->STATE; switch (op) { case IEEE802154_HAL_OP_TRANSMIT: + info = ctx; eagain = (state != STATE_IDLE && state != STATE_CCA_BUSY && NRF_RADIO->STATE != RADIO_STATE_STATE_Disabled); diff --git a/cpu/riscv_common/Kconfig b/cpu/riscv_common/Kconfig index 707cf33278..ff8958aced 100644 --- a/cpu/riscv_common/Kconfig +++ b/cpu/riscv_common/Kconfig @@ -12,7 +12,7 @@ config CPU_ARCH_RISCV select HAS_NEWLIB select HAS_PERIPH_CORETIMER select HAS_PICOLIBC if '$(RIOT_CI_BUILD)' != '1' - #select HAS_RUST_TARGET + select HAS_RUST_TARGET select HAS_SSP select MODULE_MALLOC_THREAD_SAFE if TEST_KCONFIG diff --git a/cpu/riscv_common/Makefile.features b/cpu/riscv_common/Makefile.features index 39d2d1c083..23a8d9441f 100644 --- a/cpu/riscv_common/Makefile.features +++ b/cpu/riscv_common/Makefile.features @@ -8,7 +8,7 @@ FEATURES_PROVIDED += cpp FEATURES_PROVIDED += libstdcpp FEATURES_PROVIDED += newlib FEATURES_PROVIDED += periph_coretimer -#FEATURES_PROVIDED += rust_target +FEATURES_PROVIDED += rust_target FEATURES_PROVIDED += ssp # RISC-V toolchain on CI does not work properly with picolibc yet diff --git a/cpu/riscv_common/ldscripts/riscv_base.ld b/cpu/riscv_common/ldscripts/riscv_base.ld index 17f2f9406a..66860b05f4 100644 --- a/cpu/riscv_common/ldscripts/riscv_base.ld +++ b/cpu/riscv_common/ldscripts/riscv_base.ld @@ -35,8 +35,8 @@ SECTIONS __stack_size = DEFINED(__stack_size) ? __stack_size : 256; /* Populate information about rom size */ - _srom = ORIGIN(rom); - _erom = ORIGIN(rom) + LENGTH(rom); + _srom = ORIGIN(flash); + _erom = ORIGIN(flash) + LENGTH(flash); .init : { @@ -220,5 +220,5 @@ SECTIONS .end_fw (NOLOAD) : ALIGN(4) { _end_fw = . ; - } > rom + } > flash } diff --git a/dist/testbed-support/makefile.iotlab.archi.inc.mk b/dist/testbed-support/makefile.iotlab.archi.inc.mk index 5c5992613a..1b34034b97 100644 --- a/dist/testbed-support/makefile.iotlab.archi.inc.mk +++ b/dist/testbed-support/makefile.iotlab.archi.inc.mk @@ -13,8 +13,10 @@ IOTLAB_ARCHI_nrf52dk = nrf52dk:ble IOTLAB_ARCHI_nrf52832-mdk = nrf52832mdk:ble IOTLAB_ARCHI_nrf52840dk = nrf52840dk:multi IOTLAB_ARCHI_nrf52840-mdk = nrf52840mdk:multi +IOTLAB_ARCHI_nucleo-wl55jc = nucleo-wl55jc:stm32wl IOTLAB_ARCHI_pba-d-01-kw2x = phynode:kw2xrf IOTLAB_ARCHI_samr21-xpro = samr21:at86rf233 IOTLAB_ARCHI_samr30-xpro = samr30:at86rf212b +IOTLAB_ARCHI_samr34-xpro = samr34:sx1276 IOTLAB_ARCHI_zigduino = zigduino:atmega128rfa1 IOTLAB_ARCHI := $(IOTLAB_ARCHI_$(BOARD)) diff --git a/dist/tools/compile_commands/compile_commands.py b/dist/tools/compile_commands/compile_commands.py index bbb0ca89e1..bc46006ff4 100755 --- a/dist/tools/compile_commands/compile_commands.py +++ b/dist/tools/compile_commands/compile_commands.py @@ -228,6 +228,9 @@ def generate_module_compile_commands(path, state, args): except ValueError: pass + if args.clangd: + cdetails.cflags.append('-Wno-unknown-warning-option') + c_extra_includes = [] cxx_extra_includes = [] @@ -288,14 +291,16 @@ if __name__ == '__main__': help='Drop the given flag, if present (repeatable)') parser.add_argument('--clangd', default=False, action='store_const', const=True, help='Shorthand for --add-built-in-includes --add-libstdxx-includes ' + - '--filter-out=-Wformat-truncation --filter-out=-Wformat-overflow ' + - '--filter-out=-mno-thumb-interwork') + 'and some CFLAG adjustments throughy --filter-out, and ignores ' + + 'unknown warning flags') _args = parser.parse_args() if _args.clangd: _args.add_built_in_includes = True _args.add_libstdcxx_includes = True - _args.filter_out = ['-Wformat-truncation', '-Wformat-overflow', '-mno-thumb-interwork', + _args.filter_out = ['-mno-thumb-interwork', # Only even included for versions of GCC that support it '-malign-data=natural', + # Only supported starting with clang 11 + '-msmall-data-limit=8', ] generate_compile_commands(_args) diff --git a/dist/tools/doccheck/exclude_patterns b/dist/tools/doccheck/exclude_patterns index 398900ddf1..bd2ff2310f 100644 --- a/dist/tools/doccheck/exclude_patterns +++ b/dist/tools/doccheck/exclude_patterns @@ -13357,6 +13357,7 @@ drivers/sx127x/include/sx127x_registers\.h:[0-9]+: warning: Member SX127X_RNG_RE drivers/sx127x/include/sx127x_registers\.h:[0-9]+: warning: Member SX127X_RNG_REG_MODEM_CONFIG2 \(macro definition\) of file sx127x_registers\.h is not documented\. drivers/sx127x/include/sx127x_registers\.h:[0-9]+: warning: Member VERSION_SX1272 \(macro definition\) of file sx127x_registers\.h is not documented\. drivers/sx127x/include/sx127x_registers\.h:[0-9]+: warning: Member VERSION_SX1276 \(macro definition\) of file sx127x_registers\.h is not documented\. +drivers/sx127x/include/sx127x_registers\.h:[0-9]+: warning: Member VERSION_SX1276_WLR089 \(macro definition\) of file sx127x_registers\.h is not documented\. drivers/tcs37727/include/tcs37727\-internal\.h:[0-9]+: warning: Member B_COEF_IF \(macro definition\) of file tcs37727\-internal\.h is not documented\. drivers/tcs37727/include/tcs37727\-internal\.h:[0-9]+: warning: Member CT_COEF_IF \(macro definition\) of file tcs37727\-internal\.h is not documented\. drivers/tcs37727/include/tcs37727\-internal\.h:[0-9]+: warning: Member CT_OFFSET_IF \(macro definition\) of file tcs37727\-internal\.h is not documented\. diff --git a/dist/tools/zep_dispatch/README.md b/dist/tools/zep_dispatch/README.md index 6d862a17c2..92b632a727 100644 --- a/dist/tools/zep_dispatch/README.md +++ b/dist/tools/zep_dispatch/README.md @@ -144,3 +144,20 @@ instance [0 | Iface: 7 | mop: 2 | ocp: 0 | mhri: 256 | mri 0] ``` This should also be visible in Foren6. + +Topology generation +------------------- + +To generate a random topology use the `topogen.sh` script. +This will randomly distribute *N* nodes on on a *W* × *H* map. +Each node has a radio range *R* ± *V* where *V* is a random variance that can also be set to 0. + +The further away a node is from a sending node, the higher the packet loss probability. +Nodes outside the sending radius have a zero probability of receiving a packet. + +If you have `gnuplot` installed this will also generate a plot of the resulting node distribution: + +![example topology](https://gist.githubusercontent.com/benpicco/6fd6f7c79a30cbbc41c3a65e53ed3682/raw/33afb859b65d949238129096858d14e2319fb5fb/network.topo.svg) + +A light color means that a node only has a one-way connection to the network, gray means a node is +entirely isolated. diff --git a/dist/tools/zep_dispatch/topogen.sh b/dist/tools/zep_dispatch/topogen.sh index 733bfbdc2e..db19059282 100755 --- a/dist/tools/zep_dispatch/topogen.sh +++ b/dist/tools/zep_dispatch/topogen.sh @@ -16,11 +16,11 @@ else CRESET= fi -WIDTH=100 -HEIGHT=100 -RANGE=30 -VARIANCE=15 -NUM=10 +WIDTH=100 # X dimension of the simulated world +HEIGHT=100 # Y dimension of the simulated world +RANGE=30 # base node radio range +VARIANCE=15 # random offset to radio range +NUM=10 # number of nodes echo "writing to $FILE" diff --git a/doc.txt b/doc.txt index c88e9cdd19..78dca2c188 100644 --- a/doc.txt +++ b/doc.txt @@ -41,7 +41,8 @@ * The following list of what `DEVELHELP=1` enables is not comprehensive, but * should give a rough impression of what to expect: * - * * Many runtime checks are enabled (stack overflow protection, warnings when + * * Many runtime checks are enabled (stack overflow protection by means of + * @ref pseudomodule_mpu_stack_guard or @ref SCHED_TEST_STACK, warnings when * sending messages to invalid PIDs, …), some of which just log errors to * stdout, some even halt the system. * * Some structures contain additional information, e.g. threads store their diff --git a/doc/doxygen/riot.doxyfile b/doc/doxygen/riot.doxyfile index 1f3eb3b090..1771dbfb75 100644 --- a/doc/doxygen/riot.doxyfile +++ b/doc/doxygen/riot.doxyfile @@ -275,7 +275,9 @@ OPTIMIZE_OUTPUT_VHDL = NO # Note that for custom extensions you also need to set FILE_PATTERNS otherwise # the files are not read by doxygen. -EXTENSION_MAPPING = +# Python is close enough that we can have Makefile comments starting with `##` +# that are both recognized by Doxygen and comments to Make +EXTENSION_MAPPING = mk=Python # If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments # according to the Markdown format, which allows for more readable @@ -771,7 +773,8 @@ INPUT = ../../doc.txt \ src/emulators.md \ src/release-cycle.md \ src/changelog.md \ - ../../LOSTANDFOUND.md + ../../LOSTANDFOUND.md \ + ../../makefiles/pseudomodules.inc.mk # This tag can be used to specify the character encoding of the source files # that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses diff --git a/drivers/dose/Makefile.dep b/drivers/dose/Makefile.dep index c6bca1fe29..6f3cc3507b 100644 --- a/drivers/dose/Makefile.dep +++ b/drivers/dose/Makefile.dep @@ -12,4 +12,4 @@ USEMODULE += eui_provider USEMODULE += iolist USEMODULE += netdev_eth USEMODULE += random -USEMODULE += xtimer +USEMODULE += ztimer_usec diff --git a/drivers/dose/dose.c b/drivers/dose/dose.c index 0312713413..b15d04734b 100644 --- a/drivers/dose/dose.c +++ b/drivers/dose/dose.c @@ -28,6 +28,7 @@ #include "net/eui_provider.h" #include "net/netdev/eth.h" +#include "timex.h" #define ENABLE_DEBUG 0 #include "debug.h" @@ -40,7 +41,7 @@ static dose_signal_t state_transit_send(dose_t *ctx, dose_signal_t signal); static void state(dose_t *ctx, dose_signal_t src); static void _isr_uart(void *arg, uint8_t c); static void _isr_gpio(void *arg); -static void _isr_xtimer(void *arg); +static void _isr_ztimer(void *arg); static void clear_recv_buf(dose_t *ctx); static void _isr(netdev_t *netdev); static int _recv(netdev_t *dev, void *buf, size_t len, void *info); @@ -53,9 +54,6 @@ static int _init(netdev_t *dev); static void _poweron(dose_t *dev); static void _poweroff(dose_t *dev, dose_state_t sleep_state); -/* smallest possible xtimer timeout */ -static const xtimer_ticks32_t xtimer_min_timeout = {.ticks32 = XTIMER_BACKOFF}; - static uint16_t crc16_update(uint16_t crc, uint8_t octet) { crc = (uint8_t)(crc >> 8) | (crc << 8); @@ -163,7 +161,7 @@ static void _dose_watchdog_cb(void *arg, int chan) } DEBUG_PUTS("timeout"); - state(&_dose_base[i], DOSE_SIGNAL_XTIMER); + state(&_dose_base[i], DOSE_SIGNAL_ZTIMER); break; default: break; @@ -187,9 +185,8 @@ static dose_signal_t state_transit_blocked(dose_t *ctx, dose_signal_t signal) (void) signal; uint32_t backoff; - backoff = random_uint32_range(xtimer_usec_from_ticks(xtimer_min_timeout), - 2 * ctx->timeout_base); - xtimer_set(&ctx->timeout, backoff); + backoff = random_uint32_range(0, 2 * ctx->timeout_base); + ztimer_set(ZTIMER_USEC, &ctx->timeout, backoff); return DOSE_SIGNAL_NONE; } @@ -262,7 +259,7 @@ static dose_signal_t state_transit_recv(dose_t *ctx, dose_signal_t signal) if (rc == DOSE_SIGNAL_NONE && !IS_ACTIVE(MODULE_DOSE_WATCHDOG)) { /* No signal is returned. We stay in the RECV state. */ - xtimer_set(&ctx->timeout, ctx->timeout_base); + ztimer_set(ZTIMER_USEC, &ctx->timeout, ctx->timeout_base); } return rc; @@ -281,7 +278,7 @@ static dose_signal_t state_transit_send(dose_t *ctx, dose_signal_t signal) * will bring us back to the BLOCKED state after _send has emitted * its last octet. */ #ifndef MODULE_PERIPH_UART_COLLISION - xtimer_set(&ctx->timeout, ctx->timeout_base); + ztimer_set(ZTIMER_USEC, &ctx->timeout, ctx->timeout_base); #endif return DOSE_SIGNAL_NONE; @@ -305,10 +302,10 @@ static void state(dose_t *ctx, dose_signal_t signal) break; case DOSE_STATE_SEND + DOSE_SIGNAL_END: - case DOSE_STATE_SEND + DOSE_SIGNAL_XTIMER: + case DOSE_STATE_SEND + DOSE_SIGNAL_ZTIMER: case DOSE_STATE_INIT + DOSE_SIGNAL_INIT: case DOSE_STATE_RECV + DOSE_SIGNAL_END: - case DOSE_STATE_RECV + DOSE_SIGNAL_XTIMER: + case DOSE_STATE_RECV + DOSE_SIGNAL_ZTIMER: signal = state_transit_idle(ctx, signal); ctx->state = DOSE_STATE_IDLE; break; @@ -322,7 +319,7 @@ static void state(dose_t *ctx, dose_signal_t signal) ctx->state = DOSE_STATE_RECV; break; - case DOSE_STATE_BLOCKED + DOSE_SIGNAL_XTIMER: + case DOSE_STATE_BLOCKED + DOSE_SIGNAL_ZTIMER: case DOSE_STATE_SEND + DOSE_SIGNAL_UART: signal = state_transit_send(ctx, signal); ctx->state = DOSE_STATE_SEND; @@ -354,7 +351,7 @@ static void _isr_gpio(void *arg) state(dev, DOSE_SIGNAL_GPIO); } -static void _isr_xtimer(void *arg) +static void _isr_ztimer(void *arg) { dose_t *dev = arg; @@ -364,7 +361,7 @@ static void _isr_xtimer(void *arg) #endif case DOSE_STATE_BLOCKED: case DOSE_STATE_SEND: - state(dev, DOSE_SIGNAL_XTIMER); + state(dev, DOSE_SIGNAL_ZTIMER); break; default: ; @@ -516,7 +513,7 @@ static inline void _send_done(dose_t *ctx, bool collision) #ifdef MODULE_PERIPH_UART_COLLISION uart_collision_detect_disable(ctx->uart); if (collision) { - state(ctx, DOSE_SIGNAL_XTIMER); + state(ctx, DOSE_SIGNAL_ZTIMER); } #else (void)ctx; @@ -775,18 +772,12 @@ void dose_setup(dose_t *ctx, const dose_params_t *params, uint8_t index) ); /* The timeout base is the minimal timeout base used for this driver. - * We have to ensure it is above the XTIMER_BACKOFF. Otherwise state - * transitions are triggered from another state transition setting up the - * timeout. * To calculate how long it takes to transfer one byte we assume * 8 data bits + 1 start bit + 1 stop bit per byte. */ ctx->timeout_base = CONFIG_DOSE_TIMEOUT_BYTES * 10UL * US_PER_SEC / params->baudrate; - if (ctx->timeout_base < xtimer_usec_from_ticks(xtimer_min_timeout)) { - ctx->timeout_base = xtimer_usec_from_ticks(xtimer_min_timeout); - } DEBUG("dose timeout set to %" PRIu32 " µs\n", ctx->timeout_base); - ctx->timeout.callback = _isr_xtimer; + ctx->timeout.callback = _isr_ztimer; ctx->timeout.arg = ctx; #ifdef MODULE_DOSE_WATCHDOG diff --git a/drivers/include/dose.h b/drivers/include/dose.h index 2ecf00239d..2ee129d194 100644 --- a/drivers/include/dose.h +++ b/drivers/include/dose.h @@ -82,7 +82,7 @@ #include "net/eui48.h" #include "bitarithm.h" #include "mutex.h" -#include "xtimer.h" +#include "ztimer.h" #ifdef __cplusplus extern "C" { @@ -120,7 +120,7 @@ typedef enum { DOSE_SIGNAL_INIT = 0x10, /**< Init the state machine */ DOSE_SIGNAL_GPIO = 0x20, /**< Sense GPIO detected a falling edge */ DOSE_SIGNAL_UART = 0x30, /**< Octet has been received */ - DOSE_SIGNAL_XTIMER = 0x40, /**< Timer timed out */ + DOSE_SIGNAL_ZTIMER = 0x40, /**< Timer timed out */ DOSE_SIGNAL_SEND = 0x50, /**< Enter send state */ DOSE_SIGNAL_END = 0x60 /**< Leave send state */ } dose_signal_t; @@ -165,7 +165,7 @@ typedef enum { /** * @brief Hardware timer to use with the `dose_watchdog` module. * - * This will be used to detect RX timeout instead of xtimer to speed up + * This will be used to detect RX timeout instead of ztimer to speed up * the RX path when high data rates / less CPU overhead is required. */ #if DOXYGEN @@ -197,7 +197,7 @@ typedef struct { gpio_t sense_pin; /**< GPIO to sense for start bits on the UART's rx line */ #endif gpio_t standby_pin; /**< GPIO to put the CAN transceiver in standby mode */ - xtimer_t timeout; /**< Timeout timer ensuring always to get back to IDLE state */ + ztimer_t timeout; /**< Timeout timer ensuring always to get back to IDLE state */ uint32_t timeout_base; /**< Base timeout in us */ uart_t uart; /**< UART device to use */ uint8_t uart_octet; /**< Last received octet */ diff --git a/drivers/sx127x/include/sx127x_registers.h b/drivers/sx127x/include/sx127x_registers.h index 82fe55e44e..03da694325 100644 --- a/drivers/sx127x/include/sx127x_registers.h +++ b/drivers/sx127x/include/sx127x_registers.h @@ -558,6 +558,7 @@ extern "C" { /* Version */ #define SX127X_REG_VERSION (0x42) #define VERSION_SX1276 (0x12) +#define VERSION_SX1276_WLR089 (0x13) #define VERSION_SX1272 (0x22) /* Additional settings */ diff --git a/drivers/sx127x/sx127x_internal.c b/drivers/sx127x/sx127x_internal.c index e5323feb5e..d3b86b40ae 100644 --- a/drivers/sx127x/sx127x_internal.c +++ b/drivers/sx127x/sx127x_internal.c @@ -53,7 +53,7 @@ int sx127x_check_version(const sx127x_t *dev) } DEBUG("[sx127x] SX1272 transceiver detected\n"); #else /* MODULE_SX1276) */ - if (version != VERSION_SX1276) { + if (version != VERSION_SX1276 && version != VERSION_SX1276_WLR089) { DEBUG("[sx127x] sx1276 test failed, invalid version number: %d\n", version); return -1; diff --git a/examples/hello-world/main.c b/examples/hello-world/main.c index f51bf8c0a0..4968a3a30d 100644 --- a/examples/hello-world/main.c +++ b/examples/hello-world/main.c @@ -23,7 +23,7 @@ int main(void) { - puts("Hello World!"); + puts("Hello CI TEST"); printf("You are running RIOT on a(n) %s board.\n", RIOT_BOARD); printf("This board features a(n) %s MCU.\n", RIOT_MCU); diff --git a/makefiles/cargo-targets.inc.mk b/makefiles/cargo-targets.inc.mk index f9343e1ddf..e6b9809ed6 100644 --- a/makefiles/cargo-targets.inc.mk +++ b/makefiles/cargo-targets.inc.mk @@ -11,7 +11,9 @@ CARGO_COMPILE_COMMANDS_FLAGS = --clang $(CARGO_COMPILE_COMMANDS): $(BUILDDEPS) $(Q)DIRS="$(DIRS)" APPLICATION_BLOBS="$(BLOBS)" \ "$(MAKE)" -C $(APPDIR) -f $(RIOTMAKE)/application.inc.mk compile-commands + @# replacement addresses https://github.com/rust-lang/rust-bindgen/issues/1555 $(Q)$(RIOTTOOLS)/compile_commands/compile_commands.py $(CARGO_COMPILE_COMMANDS_FLAGS) $(BINDIR) \ + | sed 's/"riscv-none-embed"/"riscv32"/g' \ | $(LAZYSPONGE) $@ diff --git a/makefiles/dependency_resolution.inc.mk b/makefiles/dependency_resolution.inc.mk index a3a76223c2..55a142076c 100644 --- a/makefiles/dependency_resolution.inc.mk +++ b/makefiles/dependency_resolution.inc.mk @@ -6,6 +6,10 @@ EXTERNAL_MODULE_PATHS := $(sort $(foreach dir,$(EXTERNAL_MODULE_DIRS),\ $(foreach mod,$(USEMODULE),$(dir $(wildcard $(dir)/$(mod)/Makefile))))) +# Locate used packages in $(RIOTPKG). +PKG_PATHS := $(sort $(foreach dir,$(RIOTPKG),\ + $(foreach pkg,$(USEPKG),$(dir $(wildcard $(dir)/$(pkg)/Makefile))))) + # Back up current state to detect changes OLD_STATE := $(USEMODULE) $(USEPKG) $(FEATURES_USED) diff --git a/makefiles/docker.inc.mk b/makefiles/docker.inc.mk index cfa6cc7c4e..6a547fdeaf 100644 --- a/makefiles/docker.inc.mk +++ b/makefiles/docker.inc.mk @@ -47,6 +47,7 @@ export DOCKER_ENV_VARS += \ ELFFILE \ HEXFILE \ FLASHFILE \ + IOTLAB_NODE \ LINK \ LINKFLAGPREFIX \ LINKFLAGS \ @@ -241,6 +242,11 @@ DOCKER_APPDIR = $(DOCKER_RIOTPROJECT)/$(BUILDRELPATH) # Directory mapping in docker and directories environment variable configuration DOCKER_VOLUMES_AND_ENV += $(call docker_volume,$(ETC_LOCALTIME),/etc/localtime,ro) DOCKER_VOLUMES_AND_ENV += $(call docker_volume,$(RIOTBASE),$(DOCKER_RIOTBASE)) +# Selective components of Cargo to ensure crates are not re-downloaded (and +# subsequently rebuilt) on every run. Not using all of ~/.cargo as ~/.cargo/bin +# would be run by Cargo and that'd be very weird. +DOCKER_VOLUMES_AND_ENV += $(call docker_volume,$(HOME)/.cargo/registry,$(DOCKER_BUILD_ROOT)/.cargo/registry) +DOCKER_VOLUMES_AND_ENV += $(call docker_volume,$(HOME)/.cargo/git,$(DOCKER_BUILD_ROOT)/.cargo/git) DOCKER_VOLUMES_AND_ENV += -e 'RIOTBASE=$(DOCKER_RIOTBASE)' DOCKER_VOLUMES_AND_ENV += -e 'CCACHE_BASEDIR=$(DOCKER_RIOTBASE)' diff --git a/makefiles/pseudomodules.inc.mk b/makefiles/pseudomodules.inc.mk index c2a03b2d4a..bddf151864 100644 --- a/makefiles/pseudomodules.inc.mk +++ b/makefiles/pseudomodules.inc.mk @@ -1,6 +1,38 @@ +## @defgroup pseudomodules Generic pseudomodules +## @brief Modules influencing general RIOT behavior +## +## These are implemented in other modules or core components, +## and serve to enable certain functionality. +## +## Here, pseudomodules are used instead of plain defines (that would be set using `CFLAGS += -DMODULE_NAME`) +## because they can participate in dependency resolution: +## they can pull in other modules. +## +## Pseudomodules are often enabled automatically through module dependencies, +## but can also be enabled manually by stating `USEMODULE += module_name` in the Makefile. +## +## The list of documented pseudomodules is not comprehensive by far; +## @ref makefiles/pseudomodules.inc.mk lists all that are not defined inside their main modules. +## Not all modules listed there are "generic" pseudomodules; +## some are merely optional components of a particular subsystem and should be documented there. +## +## See also the documentation on pseudomodules in general. +## +## @{ + PSEUDOMODULES += atomic_utils PSEUDOMODULES += base64url + +## @defgroup pseudomodule_board_software_reset board_software_reset +## @brief Use any software-only reset button on the board to reboot +## +## Some boards have reset buttons that are not wired to the MCU's reset line, +## but merely are configured to cause a reset by convention. +## +## If this module is active, the button will be configured thusly (and then not +## be advertised in any other capacity, e.g. through @ref sys_auto_init_saul). PSEUDOMODULES += board_software_reset + PSEUDOMODULES += can_mbox PSEUDOMODULES += can_pm PSEUDOMODULES += can_raw @@ -87,8 +119,21 @@ PSEUDOMODULES += log PSEUDOMODULES += log_printfnoformat PSEUDOMODULES += log_color PSEUDOMODULES += lora + +## @defgroup pseudomodule_mpu_stack_guard mpu_stack_guard +## @brief MPU based stack guard +## +## When this module is active (which it is by default on supported MCUs), +## the Memory Protection Unit will be configured to detect stack overflows. PSEUDOMODULES += mpu_stack_guard + +## @defgroup pseudomodule_mpu_noexec_ram mpu_noexec_ram +## @brief Mark RAM as non-executable using the MPU +## +## Mark the RAM non executable. +## This is a protection mechanism which makes exploitation of buffer overflows significantly harder. PSEUDOMODULES += mpu_noexec_ram + PSEUDOMODULES += mtd_write_page PSEUDOMODULES += nanocoap_% PSEUDOMODULES += netdev_default @@ -114,6 +159,7 @@ PSEUDOMODULES += nimble_phy_2mbit PSEUDOMODULES += newlib PSEUDOMODULES += newlib_gnu_source PSEUDOMODULES += newlib_nano +PSEUDOMODULES += nice PSEUDOMODULES += nrf24l01p_ng_diagnostics PSEUDOMODULES += openthread PSEUDOMODULES += picolibc @@ -214,3 +260,5 @@ NO_PSEUDOMODULES += auto_init_usbus NO_PSEUDOMODULES += auto_init_screen # Packages and drivers may also add modules to PSEUDOMODULES in their `Makefile.include`. + +## @} diff --git a/makefiles/vars.inc.mk b/makefiles/vars.inc.mk index c8607d295b..70df740c53 100644 --- a/makefiles/vars.inc.mk +++ b/makefiles/vars.inc.mk @@ -45,6 +45,7 @@ export BINDIR # This is the folder where the application should b export CARGO_TARGET_DIR # This is the folder where Rust parts of the application should be built in. export BUILD_DIR # This is the base folder to store common build files and artifacts, e.g. test results. export APPDIR # The base folder containing the application +export PKG_PATHS # List of absolute paths where packages of $(USEPKG) can be found export PKGDIRBASE # The base folder for building packages export PYTHONPATH # Python default search path for module filesi, with RIOT specific packages diff --git a/pkg/Kconfig b/pkg/Kconfig index f396515be3..f44e88d899 100644 --- a/pkg/Kconfig +++ b/pkg/Kconfig @@ -21,6 +21,7 @@ rsource "esp32_sdk/Kconfig" rsource "esp32_sdk_libs/Kconfig" rsource "esp8266_sdk/Kconfig" rsource "fff/Kconfig" +rsource "fido2_tests/Kconfig" rsource "gecko_sdk/Kconfig" rsource "gemmlowp/Kconfig" rsource "hacl/Kconfig" diff --git a/pkg/esp32_sdk/Makefile b/pkg/esp32_sdk/Makefile index 0d0c813b5d..1538c7d02c 100644 --- a/pkg/esp32_sdk/Makefile +++ b/pkg/esp32_sdk/Makefile @@ -20,11 +20,13 @@ ESP32_SDK_LIBS = $(addprefix $(ESP32_SDK_BUILD_DIR)/, $(ESP32_SDK_COMPONENT_LIBS all: $(ESP32_SDK_LIBS) $(ESP32_SDK_VER_FILE) -$(ESP32_SDK_BUILD_DIR): +$(PKG_PREPARED): $(ESP32_SDK_BUILD_DIR) $(ESP32_SDK_VER_FILE) + +$(ESP32_SDK_BUILD_DIR): $(PKG_PATCHED) $(Q)mkdir -p $(ESP32_SDK_BUILD_DIR) # Set the SDK version from the SDK hash/tag. For example "v3.1-51-g913a06a9". -$(ESP32_SDK_VER_FILE): +$(ESP32_SDK_VER_FILE): $(PKG_PATCHED) | $(ESP32_SDK_BUILD_DIR) $(Q)echo "#define IDF_VER \"$(ESP32_SDK_VER_CMD)\"" > $@ $(ESP32_SDK_BUILD_DIR)/lib%.a: \ diff --git a/pkg/esp32_sdk_libs/Makefile b/pkg/esp32_sdk_libs/Makefile index 56760a4e25..0ce50096dd 100644 --- a/pkg/esp32_sdk_libs/Makefile +++ b/pkg/esp32_sdk_libs/Makefile @@ -31,7 +31,9 @@ ESP32_SDK_LIBS = $(addprefix $(ESP32_SDK_BUILD_DIR)/, $(ESP32_SDK_COMPONENT_LIBS all: $(ESP32_SDK_LIBS) -$(ESP32_SDK_BUILD_DIR): +$(PKG_PREPARED): $(ESP32_SDK_BUILD_DIR) + +$(ESP32_SDK_BUILD_DIR): $(PKG_PATCHED) $(Q)mkdir -p $(ESP32_SDK_BUILD_DIR) $(ESP32_SDK_BUILD_DIR)/lib%.a: \ diff --git a/pkg/esp8266_sdk/Makefile b/pkg/esp8266_sdk/Makefile index 1453c63006..59cde6131d 100644 --- a/pkg/esp8266_sdk/Makefile +++ b/pkg/esp8266_sdk/Makefile @@ -20,7 +20,9 @@ ESP_SDK_LIBS = $(addprefix $(ESP8266_SDK_BUILD_DIR)/, $(ESP_SDK_COMPONENT_LIBS)) all: $(ESP_SDK_LIBS) $(ESP8266_SDK_BUILD_DIR)/esp8266_idf_version.h -$(ESP8266_SDK_BUILD_DIR): +$(PKG_PREPARED): $(ESP8266_SDK_BUILD_DIR) + +$(ESP8266_SDK_BUILD_DIR): $(PKG_PATCHED) $(Q)mkdir -p $(ESP8266_SDK_BUILD_DIR) # Set the SDK version from the SDK hash/tag. For example "v3.1-51-g913a06a9". diff --git a/pkg/fido2_tests/Kconfig b/pkg/fido2_tests/Kconfig new file mode 100644 index 0000000000..9648b31c7d --- /dev/null +++ b/pkg/fido2_tests/Kconfig @@ -0,0 +1,4 @@ +config PACKAGE_FIDO2_TESTS + bool "FIDO2 tests" + help + Test suite for FIDO2, U2F, and other security key functions. diff --git a/release-notes.txt b/release-notes.txt index 868eef6cf1..7b024047bf 100644 --- a/release-notes.txt +++ b/release-notes.txt @@ -1,3 +1,801 @@ +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 timer selection (#17393) +* cpu/native/include: other stacksizes based on default (#16956) +* cpu/native: migrate periph_rtc to ztimer (#17125) +* cpu/qn908x: migrate ADC periph to ztimer (#17321) +* cpu/sam0_common: SPI: don't perform DMA transfer for small buffers (#16926) +* cpu/sam0_common: uart: set oversampling based on baud rate (#17186) +* cpu/stm32/include/cpu_conf_stm32_common.h: fix typo in macro (#17187) +* cpu/stm32: bump cmsis repositories to latest releases + extend CPU + models kconfig (#17293) +* cpu/stm32: duplicated ADC devices definitions (#16968) +* cpu/stm32: migrate adc and eth periphs to ztimer (#17320) +* cpu/stm32: split periph_cpu.h in sub headers (#17441) +* cpu: do not auto-select ztimer_periph_rtt for sam0, fe310 (#17395) +* drivers/periph: use uint_fast8_t as default type (#17191) +* esp8266: Download Espressif RTOS SDK as a new RIOT PKG (#16425) +* periph/flashpage: extend API (#16972) +* periph/flashpage: fix wrong doxygen group (#17202) +* stm32/usbdev: Use ztimer instead of xtimer (#17047) +* cpu/esp: compile optional modules in CI (#17314) +* cpu/stm32/wl: initial periph_adc implementation (#17183) +* cpu/stm32: enable USB OTG FS on high end L4 (#17302) + + +Device Drivers +-------------- + ++ drivers/dose: enable standby pin (#16752) ++ drivers/hm330x: initial commit (#16333) ++ drivers: add PCF857X I2C I/O expander driver (#10430) ++ drivers: only build saul interface if saul module is used + add + saul_drivers test application (#17470) ++ netdev: add netdev_register_signal (#16922) ++ drivers/ft5x06: add support for touch panel controller (#17448) ++ drivers/stmpe811: add spi mode (#17088) ++ drivers/dose: make use of UART collision detection feature (#16681) +* driver/at30tse75x: port to ztimer_usec (#17137) +* drivers/ads101x: migrate to ztimer (#17102) +* drivers/ata8520e: migrate to ztimer (#17105) +* drivers/atwinc15x0: migrate to ztimer (#17381) +* drivers/bmp180: migrate to ztimer (#17101) +* drivers/dose: calculate timeout based on symbol rate (#16768) +* drivers/dsp0401: migrate to ztimer (#17110) +* drivers/mhz19: migrate to ztimer (#17308) +* drivers/rn2xx3: migrate to ztimer (#17112) +* drivers/sdcard_spi: convert to ztimer_usec (#17361) +* drivers/stmpe811: improve interrupt callback management (#17487) +* drivers/xbee: migrate to ztimer_msec (#17114) +* drivers: migrate mpu9x50 and si70xx to ztimer (#17358) +* drivers: migrate some drivers to ztimer (#17315) +* drivers: remove some useless xtimer includes (#17303) +* drivers: several cleanups related to xtimer + some ztimer migration (#17375) +* makefiles: remove PCF857x pseudomodule definitions (#17343) +* drivers/periph_common: build periph module selectively (#17418) + +Documentation +------------- + ++ boards/lora-e5-dev: add warning in doc (#17185) ++ doc/getting-started.md: added beginner friendly instructions (#17050) ++ doc/rust: Add maintenance guidance (#17505) +* boards/lora-e5-dev: extended documentation (#17244) +* boards/stm32f746g-disco: extend documentation (#17310) +* doc/.../getting-started.md: update software requirements (#17002) +* doc/boards/rpi-pico: Addition of section concerning shell access (#17454) +* doc: fix libcoap removal commit (#17378) +* pkg/openwsn: update doc (#17131) +* tools/zep_dispatch: document foren6 usage (#17326) +* doc: fix missing or non matching arguments in Doxygen documentation (#17461) + +Build System / Tooling +---------------------- + ++ dist/tools/ci: add can_fast_ci_run.py (#17239) ++ dist/tools/doccheck/exclude_patterns: add new warnings (#17104) ++ dist/tools/doccheck: add create_pattern.sh (#17082) ++ make: add info-emulated-boards helper target (#16975) ++ Makefile.base: add SUBMODULES_NO_SRC to excluded a selected SUBMODULE + *.c (#17222) ++ tools/compile_and_test_for_board: apply black automatic code + formatter + add format checker in tox (#16905) ++ tools/insufficient_memory: add create_makefile.ci.sh and Makefile.ci + make target (#16109) ++ tools/pythonlibs/riotctrl_*: add code format check with black (#16915) ++ tools/zep_dispatch: add support for foren6 sniffer (#16879) ++ tools/zep_dispatch: add topology generator (#16889) ++ makefiles/cflags.inc.mk: Add -Wcast-align (#14955) +* cppcheck: output all annotations as error (#17134) +* dist/tools/coccinelle/force: remove static.cocci (#17139) +* Makefile.include: remove warning about EXTERNAL_MODULE_DIRS API + change (#16984) +* Makefile.include: rename Makefile.ci target to create-Makefile.ci (#17205) +* makefiles/docker.inc.mk: pass TEST_KCONFIG (#17398) +* murdock: make use of can_fast_ci_run.py (#17325) +* static-tests: disable cppcheck (#17282) +* tools/backport_pr: check code format with black (#16907) +* tools: can_fast_ci_run.py: ignore comment changes for `\.[ch]$` (#17405) + +Kconfig +------- + ++ cpu/avr8: model kconfig (#16929) ++ cpu/efm32: model kconfig (#16912) ++ cpu/esp: integrate CPU clock frequency selection in Kconfig (#17424) ++ cpu/msp430: add Kconfig (#17290) ++ cpu/nrf52: initial kconfig modeling (no netif) (#16837) ++ cpu/nrf9160: add Kconfig dependencies (#17291) ++ cpu/riscv: model Kconfig (#16909) ++ makefiles/kconfig: add board & CPU config variables (#17376) ++ pkg/uwb*: add Kconfig dependency modelling (#16780) ++ sys/trace: migrate to ztimer and add Kconfig support (#17319) ++ .murdock: Add modules/pkgs diff of make/kconfig (#17094) ++ .murdock: Add nucleo boards to kconfig test (#16845) ++ .murdock: Add same54-xpro to kconfig tests (#17255) +* .murdock: Kconfig test apps for all boards (#17402) +* boards/adafruit-itsybitsy-m4: Model kconfig (#17331) +* boards/feather-m0*: base board definition in Kconfig (#17445) +* boards/samd21-based: model Kconfig (#17355) +* boards/saml21-based: model kconfig (#17270) +* boards/stm32-based: model Kconfig (#17374) +* cpu/esp{32,8266}: model kconfig (#17232) +* cpu/kinetis: model kconfig (#17235) +* cpu/lpc23xx: model kconfig (#17279) +* cpu/nrf51: model kconfig (#17274) +* cpu/qn908x: model kconfig (#17277) +* cpu/{cc26xx, cc13xx}: model kconfig (#17236) +* drivers/sx126x/Kconfig: rework model selection (#17289) +* sys/benchmark/kconfig: cleanup ztimer dependency (#17317) +* sys/log: model Kconfig (#17286) +* sys/vfs: model Kconfig (#17287) + +Examples +-------- + ++ example/gcoap: add LWIP make option (#17130) +* examples/gcoap: split client and server implementation (#17471) +* examples/gnrc_networking_subnets: remove broken symlink (#17389) +* examples/lorawan: use ztimer_msec if not rtc (#17181) +* examples/gnrc_networking: cleanup and static function declarations in + udp.c (#17384) + +Testing +------- + ++ pkg/fff: Add fake functions framework package (#17076) ++ murdock: add some doc on how to efficiently limit builds (#17312) ++ tests/bench_ztimer: add port of bench_xtimer (#17391) ++ tests/pkg_ucglib: add missing function declaration (#17347) +* gh/workflows/release-tests: update LoRaWAN parameters to ttnv3 (#17009) +* gha/workflows/release-test: set python version to 3.8 (#17038) +* tests/*: Fix nightly failures due to f-string (#17283) +* tests/malloc: fix counting bugs (#17323) +* tests/periph_adc: migrate to ztimer (#17322) +* tests/periph_timer_periodic: spice up test (#17388) +* tests/unittests/tests-base64: enlarge test buffer for worst case (#17292) +* test/pkg_u8g2: increase main stacksize for SDL (#16954) +* tests/pkg_fatfs{_vfs}: drop whitelist (#17478) +* Fix some cppcheck errors (#17271) + +API Changes +----------- + +* core/kernel_defines.h: drop ALIGN_OF() (#17267) +* core/kernel_defines: drop BUILD_BUG_ON() (#17268) +* core/msg: make msg_avail() return 0 on no queue (#17262) +* cpu: call cpu_init() from startup code, not from board (#16055) +* drivers/periph_i2c: let i2c_acquire return void (#17275) +* sys/ztimer: ztimer_set() return the now value (#17385) +* USB: refactor to xmit-based API (#17064) + +Deprecations +============ + +Deprecations (2) +---------------- + +* cpu/mips: deprecate mips cpu (#17304) +* sys/include/xtimer.h: deprecate nanosleep (#17296) +* sys/include/evtimer.h: deprecate evtimer_now_min (#17357) +* usbdev/USBUS: deprecate transfer failure reporting report (#17046) + +Removals (9) +------------ + +- boards/fox: remove BOARD (#17021) +- dist/iotlab: remove deprecated auto-ssh backward compatibility (#17476) +- drivers/ethos: remove deprecated USE_ETHOS_FOR_STDIO define (#17499) +- make: remove deprecation warnings raised with flasher tools old vars (#17490) +- pkg/libcoap: remove (#17163) +- sys/asymcute: remove deprecated CONFIG_ASYMCUTE_BUFSIZE_EXP (#17481) +- sys/crypto: remove deprecated CIPHER_AES_128 (#17480) +- sys/saul_reg: remove deprecated saul_reg_rm function (#17489) +- sys/shell: remove deprecated SHELL_NO_{ECHO,PROMPT} defines (#17484) + +Bug fixes (66) +============== + +* cpu/native: add `-no-pie` to LINKFLAGS (#16186) +* boards/adafruit-clue: use internal RC oscillator (#17069) +* boards/feather-m0-*: fix Arduino feature in Kconfig (#17444) +* boards/nrf9160dk: fix LED macros (#17328) +* boards/nucleo-g07xrb: fix or exclude some doxygen warnings (#17079) +* boards/nucleo-g07xrb: fix or exclude some doxygen warnings [backport + 2021.10] (#17084) +* boards/stm32f723e-disco: use connect_assert_srst with openocd (#17462) +* boards/stm32f746g-disco: use connect_assert_srst with openocd (#17449) +* boards/stm32f769i-disco: fix and cleanup default configuration (#17199) +* cdc_ecm: Truncate frames at max ethernet size (#17200) +* cpu/atmega1281: fix pcint (#17227) +* cpu/esp*: small documentation fixes (#17456) +* cpu/esp32: fix esp_wifi_enterprise compilation problem (#17306) +* cpu/esp8266: fix problems with ESP WiFi and migration to ztimer (#17427) +* cpu/esp8266: place freertos functions in IRAM (#17080) +* cpu/esp: revert the change for default definition of ESP_WIFI_PASS (#17420) +* cpu/esp_common: fix unaligned access in periph_flashpage (#17150) +* cpu/native: align stack in thread_stack_init() (#17155) +* cpu/sam0: prevent disabled irq from being called (#17007) +* cpu/stm32/periph/usbdev: fix alignment issues (#17154) +* cpu/stm32: clone cmsis header in build/stm32 (#17212) +* dhcpv6_client: keep integers in retransmission calculations signed (#16992) +* doc: fix the reference to libcoap removal commit in LOSTANDFOUND.md (#17371) +* driver/css811: fix read status (#17340) +* drivers/ccs811: fix of documentation (#17169) +* drivers/dht: correct interpreting raw values (#16934) +* drivers/dose: fix standby mode (#17184) +* drivers/encx24j600: fix unaligned memory access (#17156) +* drivers/lis3dh: fix unaligned memory access (#17149) +* drivers/sx126x: fix sync word and TX PA configuration (#17138) +* ethos: move bulk of state machine out of ISR context (#17265) +* Fix NDEBUG compilation problems (#14364) +* gnrc_ipv6_nib: queue packets that trigger probing on border router (#16947) +* ieee802154 / tests/unittests: fix all-asan reported errors (#17329) +* Makefile.base: cleanup non selected source object files (#16945) +* Makefile.base: do not clean objects of bindist modules (#16981) +* makefile.dep: require `arch_%` `cpu_core_%` features first (#17224) +* murdock: don't run can_fast_ci_run if `FULL_BUILD==1` (#17495) +* nimble: fix nimble_scanner regression bugs (#17334) +* pkg/arduino_sdi_12: fix for the feather-m0 board (#17501) +* pkg/ccn-ndn: migrate to ztimer (#17377) +* pkg/littlefs{,2}: fix compilation with -Wcast-align (#17151) +* pkg/nimble: version bump to fix broken scanning (#16960) +* pkg/paho-mqtt: fix memory corruption (#17503) +* pkg/relic: bump to current master (#17161) +* pycrypto: use pycryptodome instead (#17107) +* SECURITY.md: fix broken email reference (#17118) +* shell/gnrc_icmpv6_echo: Fix hang with no msg queue (#17261) +* sys/fido2: fix CBOR parsing (#17192) +* sys/fido2: fix CBOR parsing [backport 2021.10] (#17193) +* sys/net/dns: mark dns_hdr_t as packed (#17153) +* sys/net/fib: fix compilation with -Wcast-align (#17194) +* sys/net/gcoap: Use socket _buf API to recognize truncated requests (#16378) +* sys/posix/socket: align struct sockaddr{,_storage} (#17152) +* sys/posix/socket: use explicit bind (#16852) +* sys/test_utils/result_output: fix turo_float() precision value (#17036) +* sys/ztimer/kconfig: enable xtimer compat only with timer backend (#17307) +* sys/ztimer: don't access non-existent timer (#17409) +* sys/ztimer: don't default to rtc for ztimer_sec (#17113) +* sys/ztimer: fix backend selection (#17372) +* tests/socket_zep: fix automatic test (#17432) +* tests/unittests: fix unaligned access (#17195) +* tools/openocd: check OPENOCD_VERIFY after IMAGE_OFFSET is computed (#17251) +* tools/zep_dispatch: forward based on source addr, not MAC addr (#16957) +* turo: some json fixes (#17027) +* usbus/dfu: fix underflow condition while updating firmware (#17128) + + +Known issues +============ + +Network related issues (53) +--------------------------- + +* 6lo gnrc fragmentation expects driver to block on TX (#7474) +* 6lo: RIOT does not receive packets from Linux when short_addr is set (#11033) +* Address registration handling inappropriate (#15867) +* app/netdev: application stops working after receiving frames with + assertion or completely without error (#8271) +* at86rf2xx: Dead lock when sending while receiving (#8242) +* at86rf2xx: lost interrupts (#5486) +* CC2538 RF overlapping PIN usage (#8779) +* core: "Invalid read of size 4" (#7199) +* cpu/esp8266: Tracking open problems of esp_wifi netdev driver (#10861) +* dist/tools/sliptty/start_network.sh: IPv6 connectivity is broken on + PC (#14689) +* driver/mrf24j40: blocks shell input with auto_init_gnrc_netif (#12943) +* drivers/at86rf215: Incorrect channel number set for subGHz (#15906) +* DTLS examples cannot send message to localhost (#14315) +* Emcute cannot create a double-byte name (#12642) +* ethernet: Missing multicast addr assignment (#13493) +* ethos: fails to respond to first message. (#11988) +* ethos: Unable to choose global source address. (#13745) +* ethos: Unable to handle fragmented IPv6 packets from Linux kernel (#12264) +* examples/cord_ep: Dead lock when (re-)registering in callback + function (#12884) +* examples/gnrc_border_router: esp_wifi crashes on disconnect (#14679) +* Forwarding a packet back to its link layer source should not be + allowed (#5051) +* gcoap example request on tap I/F fails with NIB issue (#8199) +* gcoap: Suspected crosstalk between requests (possible NULL call) (#14390) +* General 802.15.4/CC2538 RF driver dislikes fast ACKs (#7304) +* gnrc ipv6: multicast packets are not dispatched to the upper layers (#5230) +* gnrc_border_router stops routing after a while (#16398) +* gnrc_icmpv6_echo: flood-pinging another node leads to leaks in own + packet buffer (#12565) +* gnrc_ipv6: Multicast is not forwarded if routing node listens to the + address (#4527) +* gnrc_rpl: missing bounds checks in _parse_options (#16085) +* gnrc_rpl: nib route not updated when topology / DODAG changes (#17327) +* gnrc_sock_udp: Possible Race condition on copy in application buffer (#10389) +* gomach: Resetting netif with cli doesn't return (#10370) +* ieee802154_submac: IPv6 fragmentation broken (#16998) +* LoRaWan node ISR stack overflowed (#14962) +* lwip_sock_tcp / sock_async: received events before calling + sock_accept() are lost due to race condition. (#16303) +* Missing drop implementations in netdev_driver_t::recv (#10410) +* net: netdev_driver_t::send() doc unclear (#10969) +* netdev_ieee802154: Mismatch between radio ll address and in memory + address (#10380) +* nrf52: Not able to add global or ULA address to interface (#13280) +* nrfmin: communication not possible after multicast ping with no + interval (#11405) +* openthread: does not build on current Arch (#10809) +* ping6 is failing when testing with cc2538dk (#13997) +* pkg/tinydtls: auxiliary data API does not work for async sockets (#16054) +* Possible memory leak in RIOT/build/pkg/ndn-riot/app.c (#15638) +* Riot-os freezes with lwip + enc28j60 + stm32L4 (#13088) +* samr30 xpro doesn't seem to use its radio ok (#12761) +* scan-build errors found during 2019.07 testing (#11852) +* send data with UDP at 10HZ, the program die (#11860) +* stale border router does not get replaced (#12210) +* tests/lwip: does not compile for IPv4 on 6LoWPAN-based boards. (#17162) +* two nodes livelock sending neighbor solicitations back and forth + between each other (#16670) +* Unclear how Router Solicitations are (or should be) handled (#15926) +* xbee: setting PAN ID sometimes fails (#10338) + +Timer related issues (15) +------------------------- + +* cpu/native: timer interrupt issue (#6442) +* misc issues with tests/trickle (#9052) +* MSP430: periph_timer clock config wrong (#8251) +* periph/timer: `timer_set()` underflow safety check (tracking issue) (#13072) +* periph_timer: systematic proportional error in timer_set (#10545) +* saml21 system time vs rtc (#10523) +* Sleep mode for Arduino (#13321) +* stm32_common/periph/rtc: current implementation broken/poor accuracy (#8746) +* sys/newlib: gettimeofday() returns time since boot, not current wall + time. (#9187) +* tests: xtimer_drift gets stuck on native (#6052) +* xtimer mis-scaling with long sleep times (#9049) +* xtimer: add's items to the wrong list if the timer overflows between + _xtimer_now() and irq_disable() (#7114) +* xtimer_set_msg: crash when using same message for 2 timers (#10510) +* xtimer_usleep stuck for small values (#7347) +* xtimer_usleep wrong delay time (#10073) + +Drivers related issues (17) +--------------------------- + +* (almost solved) SPI SD-Card driver: SPI initialisation freeze until + timeout (#14439) +* adc is not a ADC-Driver but a analog pin abstraction (#14424) +* at86rf2xx: Simultaneous use of different transceiver types is not + supported (#4876) +* cpu/msp430: GPIO driver doesn't work properly (#9419) +* driver/hts221: Temperature and Humidity readings incorrect (#12445) +* ESP32 + DHT + SAUL reading two endpoints causes freeze. (#12057) +* examples/dtls-wolfssl not working on pba-d-01-kw2x (#13527) +* fail to send data to can bus (#12371) +* floats and doubles being used all over the place. (#12045) +* mdt_erase success, but vfs_format resets board (esp32-heltec- + lora32-v2) (#14506) +* periph/spi: Switching between CPOL=0,1 problems on Kinetis with + software CS (#6567) +* periph: GPIO drivers are not thread safe (#4866) +* Potential security and safety race conditions on attached devices (#13444) +* PWM: Single-phase initialization creates flicker (#15121) +* STM32: SPI clock not returning to idle state and generating + additional clock cycles (#11104) +* TCP client cannot send read only data (#16541) +* Two bugs may lead to NULL dereference. (#15006) + +Native related issues (6) +------------------------- + +* examples/ccn-lite: floating point exception while testing on native (#15878) +* examples/micropython: floating point exception while testing on + native (#15870) +* native getchar is blocking RIOT (#16834) +* native not float safe (#495) +* native: tlsf: early malloc will lead to a crash (#5796) +* SIGFPE on native architecture when printing double floats on Ubuntu + 21.04 (#16282) + +Other platforms related issues (21) +----------------------------------- + +* Failing tests on FE310 (Hifive1b) (#13086) +* [TRACKING] Fixes for automatic tests of ESP32 boards. (#12763) +* arm7: printf() with float/double not working (#11885) +* boards/hifive1: flashing issue (#13104) +* Cannot use LLVM with Cortex-M boards (#13390) +* cpu/cortexm_common: irq_enable returns the current state of + interrupts (not previous) (#10076) +* cpu/sam0: flashpage write / read cycle produces different results + depending on code layout in flash (#14929) +* cpu/stm32f1: CPU hangs after wake-up from STOP power mode (#13918) +* esp32-wroom-32: tests/netstats_l2 failing sometimes (#14237) +* esp8266 precompiled bootloaders don't support partitions past 1MB (#16402) +* gcoap/esp8266: Stack overflow with gcoap example (#13606) +* I found stm32 DMA periph driver bugs! when I tested stm32l431rc + board. (#16242) +* Incorrect default $PORT building for esp32-wroom-32 on macOS (#10258) +* MIPS: toolchain objcopy doesn't work and no .bin can be generated (#14410) +* MPU doesn't work on cortex-m0+ (#14822) +* newlib-nano: Printf formatting does not work properly for some + numeric types (#1891) +* periph_timer: Test coverage & broken on STM32F767ZI (#15072) +* riscv: ISR stack is too small for ENABLE_DEBUG in core files (#16395) +* stm32152re: hardfault when DBGMCU_CR_DBG* bits are set and branch + after __WFI() (#14015) +* stm32f7: Large performance difference between stm32f746 and stm32f767 (#14728) +* sys/riotboot/flashwrite: unaligned write when skipping + `RIOTBOOT_MAGIC` on stm32wb (#15917) + +Build system related issues (14) +-------------------------------- + +* `buildtest` uses wrong build directory (#9742) +* `make -j flash` fails due to missing make dependencies or `make + flash-only` rebuilds the .elf (#16385) +* Build dependencies - processing order issues (#9913) +* build: info-build doesn't work with boards without port set (#15185) +* BUILD_IN_DOCKER ignores USEMODULE (#14504) +* dist/tools/cppcheck/cppchck.sh: errors when running with Cppcheck + 1.89 (#12771) +* doxygen: riot.css modified by 'make doc' (#8122) +* LTO broken (binaries too large) (#16202) +* macros: RIOT_FILE_RELATIVE printing wrong file name for headers (#4053) +* make: ccache leads to differing binaries (#14264) +* make: Setting constants on compile time doesn't really set them + everywhere (#3256) +* make: use of immediate value of variables before they have their + final value (#8913) +* Tracking: remove harmful use of `export` in make and immediate + evaluation (#10850) +* Windows AVR Mega development makefile Error (#6120) + +Other issues (53) +----------------- + +* [TRACKING] sys/shell refactoring. (#12105) +* _NVIC_SystemReset stuck in infinite loop when calling pm_reboot + through shell after flashing with J-Link (#13044) +* `make term` no longer works with JLinkExe v6.94 (#16022) +* `make term` output is inconsistent between boards, `ethos` and + `native` (#12108) +* assert: c99 static_assert macro doesn't function for multiple + static_asserts in the same scope (#9371) +* Basic test for periph/rtt introduced in #15431 is incorrect (#15940) +* boards/esp32-wroom-32: tests/mtd_raw flakey (#16130) +* boards/saml11-xpro: second UART is broken (#17206) +* Bug: openocd 0.10.0-6 Ubuntu dies while debugging with -rtos auto (#13285) +* C++11 extensions in header files (#5561) +* Can't build relic with benchmarks or tests (#12897) +* CC2538DK board docs: broken links (#12889) +* cpu/stm32/periph/rtc overflow error (#16574) +* cpu/stm32: some tests are failing on CM33 (l5, u5) (#17439) +* doc/LOSTANDFOUND: not rendered as expected (#17063) +* edbg: long lines flooded over serial become garbled (#14548) +* examples / tests: LoRa tests fail on platforms that don't support + LoRa (#14520) +* File systems report names with leading slashes (#14635) +* flashing issue on frdm-k64f (#15903) +* frdm-k22f failing tests/periph_flashpage (#17057) +* gcoap_dtls: Selecting transport at run time is not possible (#16674) +* I2C not working under RIOT with U8G2 pkg (#16381) +* ieee802154_security: Nonce is reused after reboot (#16844) +* lwip: drivers/at86rf2xx/at86rf2xx_netdev.c invalid state during TCP + disconnect (#17209) +* lwip: invalid state transition on ieee802154_submac users (#17208) +* Making the newlib thread-safe (#4488) +* mcuboot: flashes but no output (#17524) +* nanocoap: incomplete response to /.well-known/core request (#10731) +* newlib-nano: Printf formatting does not work properly with `"PRIu8"` (#17083) +* Order of auto_init functions (#13541) +* pkg/tinydtls: Multiple issues (#16108) +* Possible memset optimized out in crypto code (#10751) +* Potential race condition in compile_and_test_for_board.py (#12621) +* pyterm on stdio_cdc_acm stops working after a few seconds (#16077) +* RIOT cannot compile with the latest version of macOS (10.14) and + Xcode 10 (#10121) +* RIOT is saw-toothing in energy consumption (even when idling) (#5009) +* riotboot/nrf52840dk: flashing slot1 with JLINK fails (#14576) +* scheduler: priority inversion problem (#7365) +* sys/fmt: Missing tests for fmt_float, fmt_lpad (#7220) +* sys/riotboot: documentation issues (#11243) +* sys/stdio_uart: dropped data when received at once (#10639) +* tests/cpp11_*: failing on i-nucleo-lrwan1 (#14578) +* tests/lwip target board for python test is hardcoded to native (#6533) +* tests/periph_flashpage: failing on stm32l475ve (#17280) +* tests/pkg_libhydrogen: test fails on master for the samr21-xpro with + LLVM (#15066) +* tests/pkg_tensorflow-lite: tests randomly failing on nrf52dk and + esp32-wroom-32 (#13133) +* tests/test_tools: test fails while testing on samr21-xpro/iotlab-m3 (#15888) +* tests/thread_float: crashes on avr-rss2 (#16908) +* tests: broken with stdio_rtt if auto_init is disabled (#13120) +* tests: some tests don't work with `newlib` lock functions. (#12732) +* Tracker: Reduce scope on unintended COMMON variables (#2346) +* usb-serial/list-ttys.sh: Broken when a debugger offers multiple + serial ports (#15814) +* Use of multiple CAN bus on compatible boards (#14801) + +There are 179 known issues in this release + +Fixed Issues since the last release (2021.10) +============================================= + +- sx127x: wrong RSSI values (#17451) +- drivers/aip31068: initialization fails in most cases when using + esp_i2c_sw (#17311) +- cpu/esp32: esp_wifi_enterprise compilation error (#17305) +- ethos: race condition seems to cause packet loss (#17254) +- tests/lwip_sock_ip: failing on `native` when using IPV4 (#17144) +- Sam boards: isr_eic call all IRQ raised without taking into account + their status (enabled/disabled) (#16978) +- esp8266: Hangs when erasing spi sector on mtd0 if using esp_wifi (#16281) +- esp32: can't use newer C++ standard than c++11 (#15685) +- tests/mpu_noexec_ram: fails on i-nucleo-lrwan1 (#14572) +- Different build behavior between `murdock` and + `riot/riotbuild:latest` image (#9645) +- pkg: libcoap is partially broken and outdated (#7737) + +11 fixed issues since last release (2021.10) + + +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 + + +Matrix and Forum +================ +* Join the RIOT Matrix room at: #riot-os:matrix.org +* Join the RIOT Forum at: forum.riot-os.org + + +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. + + + RIOT-2021.10 - Release Notes ============================ RIOT is a multi-threading operating system which enables soft real-time diff --git a/sys/Makefile.dep b/sys/Makefile.dep index a1d6651908..563136966e 100644 --- a/sys/Makefile.dep +++ b/sys/Makefile.dep @@ -843,7 +843,6 @@ ifneq (,$(filter fido2_ctap,$(USEMODULE))) USEMODULE += ztimer_msec USEMODULE += event USEMODULE += event_timeout - USEMODULE += prng_sha256prng USEMODULE += cipher_modes USEMODULE += crypto_aes_256 USEMODULE += hashes diff --git a/sys/fido2/Kconfig b/sys/fido2/Kconfig index 1b94a5b221..bd2edac28b 100644 --- a/sys/fido2/Kconfig +++ b/sys/fido2/Kconfig @@ -4,4 +4,17 @@ # General Public License v2.1. See the file LICENSE in the top level # directory for more details. +menuconfig MODULE_FIDO2 + bool "FIDO2" + help + FIDO2 is an authentication standard that seeks to solve the password + problem by enabling passwordless authentication. FIDO2 consists of the + W3C Web Authentication specification (WebAuthn) and the Client to + Authenticator Protocol (CTAP). For more information visit + https://fidoalliance.org/fido2. + +if MODULE_FIDO2 + rsource "ctap/Kconfig" + +endif # MODULE_FIDO2 diff --git a/sys/fido2/ctap/Kconfig b/sys/fido2/ctap/Kconfig index ce5c673bff..d64921ec1e 100644 --- a/sys/fido2/ctap/Kconfig +++ b/sys/fido2/ctap/Kconfig @@ -4,13 +4,37 @@ # General Public License v2.1. See the file LICENSE in the top level # directory for more details. -menuconfig KCONFIG_USEMODULE_FIDO2_CTAP +menuconfig MODULE_FIDO2_CTAP bool "FIDO2 CTAP" - depends on USEMODULE_FIDO2_CTAP + depends on HAS_PERIPH_FLASHPAGE + depends on HAS_PERIPH_GPIO + depends on HAS_PERIPH_GPIO_IRQ + depends on MODULE_FIDO2 + depends on TEST_KCONFIG + select PACKAGE_TINYCBOR + select PACKAGE_MICRO-ECC + select PACKAGE_TINY-ASN1 + select MODULE_PERIPH_GPIO + select MODULE_PERIPH_GPIO_IRQ + select MODULE_EVENT + select MODULE_EVENT_TIMEOUT + select MODULE_ZTIMER + select MODULE_ZTIMER_MSEC + select MODULE_MTD + select MODULE_MTD_FLASHPAGE + select MODULE_MTD_WRITE_PAGE + select MODULE_RANDOM + select MODULE_CRYPTO_AES_256 + select MODULE_CIPHER_MODES + select MODULE_HASHES help - Configure a FIDO2 CTAP authenticator via KConfig. + Y to enable CTAP protocol support. The Client-to-Authenticator + Protocol (CTAP) is an application layer protocol for the communication + between an authenticator and a host. CTAP is part of the FIDO2 Project. + For more information visit https://fidoalliance.org/fido2. -if KCONFIG_USEMODULE_FIDO2_CTAP + +if MODULE_FIDO2_CTAP config FIDO2_CTAP_STACK_SIZE int "CTAP thread stack size" @@ -93,4 +117,4 @@ config FIDO2_CTAP_FLASH_START_PAGE rsource "transport/Kconfig" -endif # KCONFIG_USEMODULE_FIDO2_CTAP +endif # MODULE_FIDO2_CTAP diff --git a/sys/fido2/ctap/transport/Kconfig b/sys/fido2/ctap/transport/Kconfig index 5ec3a7e824..b9525f2cb6 100644 --- a/sys/fido2/ctap/transport/Kconfig +++ b/sys/fido2/ctap/transport/Kconfig @@ -4,4 +4,9 @@ # General Public License v2.1. See the file LICENSE in the top level # directory for more details. +menuconfig MODULE_FIDO2_CTAP_TRANSPORT + bool "FIDO2 CTAP transport" + depends on MODULE_FIDO2_CTAP + depends on TEST_KCONFIG + rsource "hid/Kconfig" diff --git a/sys/fido2/ctap/transport/hid/Kconfig b/sys/fido2/ctap/transport/hid/Kconfig index b989225a11..20af9313c3 100644 --- a/sys/fido2/ctap/transport/hid/Kconfig +++ b/sys/fido2/ctap/transport/hid/Kconfig @@ -4,13 +4,16 @@ # General Public License v2.1. See the file LICENSE in the top level # directory for more details. -menuconfig KCONFIG_USEMODULE_FIDO2_CTAP_TRANSPORT_HID - bool "FIDO2 CTAP TRANSPORT HID" - depends on USEMODULE_FIDO2_CTAP_TRANSPORT_HID +menuconfig MODULE_FIDO2_CTAP_TRANSPORT_HID + bool "FIDO2 CTAP transport HID" + depends on MODULE_FIDO2_CTAP_TRANSPORT + depends on TEST_KCONFIG + select MODULE_ISRPIPE + select MODULE_USBUS_HID help Configure a FIDO2 CTAP authenticator via KConfig. -if KCONFIG_USEMODULE_FIDO2_CTAP_TRANSPORT_HID +if MODULE_FIDO2_CTAP_TRANSPORT_HID config FIDO2_CTAP_TRANSPORT_HID_TRANSACTION_TIMEOUT int "CTAPHID Transaction timeout in milliseconds" @@ -20,4 +23,4 @@ config FIDO2_CTAP_TRANSPORT_HID_TRANSACTION_TIMEOUT of time to prevent the authenticator from being locked by a stalling application. -endif # KCONFIG_USEMODULE_FIDO2_CTAP_TRANSPORT_HID +endif # MODULE_FIDO2_CTAP_TRANSPORT_HID diff --git a/sys/include/phydat.h b/sys/include/phydat.h index 4e7a99d72c..b83f11c2cc 100644 --- a/sys/include/phydat.h +++ b/sys/include/phydat.h @@ -97,6 +97,7 @@ enum { UNIT_V, /**< Volts */ UNIT_W, /**< Watt */ UNIT_GS, /**< gauss */ + UNIT_T, /**< Tesla */ UNIT_DBM, /**< decibel-milliwatts */ UNIT_COULOMB, /**< coulomb */ UNIT_F, /**< Farad */ diff --git a/sys/net/gnrc/Makefile.dep b/sys/net/gnrc/Makefile.dep index 6adb734191..36736af2fc 100644 --- a/sys/net/gnrc/Makefile.dep +++ b/sys/net/gnrc/Makefile.dep @@ -137,6 +137,7 @@ ifneq (,$(filter gnrc_netif,$(USEMODULE))) USEMODULE += netif USEMODULE += l2util USEMODULE += fmt + USEMODULE += ztimer_msec ifneq (,$(filter netdev_ieee802154_submac,$(USEMODULE))) USEMODULE += gnrc_netif_pktq endif diff --git a/sys/net/gnrc/netif/gnrc_netif.c b/sys/net/gnrc/netif/gnrc_netif.c index ff420bdad2..4c197e999e 100644 --- a/sys/net/gnrc/netif/gnrc_netif.c +++ b/sys/net/gnrc/netif/gnrc_netif.c @@ -41,8 +41,8 @@ #include "fmt.h" #include "log.h" #include "sched.h" -#if IS_USED(MODULE_XTIMER) || IS_USED(MODULE_ZTIMER_XTIMER_COMPAT) -#include "xtimer.h" +#if IS_USED(MODULE_ZTIMER) +#include "ztimer.h" #endif #include "net/gnrc/netif.h" @@ -1370,7 +1370,7 @@ bool gnrc_netif_ipv6_wait_for_global_address(gnrc_netif_t *netif, /* wait for global address */ msg_t m; while (!has_global) { - if (xtimer_msg_receive_timeout(&m, timeout_ms * US_PER_MS) < 0) { + if (ztimer_msg_receive_timeout(ZTIMER_MSEC, &m, timeout_ms) < 0) { DEBUG_PUTS("gnrc_netif: timeout waiting for prefix"); break; } @@ -1867,7 +1867,7 @@ static void *_gnrc_netif_thread(void *args) /* now let rest of GNRC use the interface */ gnrc_netif_release(netif); #if (CONFIG_GNRC_NETIF_MIN_WAIT_AFTER_SEND_US > 0U) - xtimer_ticks32_t last_wakeup = xtimer_now(); + uint32_t last_wakeup = ztimer_now(ZTIMER_USEC); #endif while (1) { @@ -1893,13 +1893,14 @@ static void *_gnrc_netif_thread(void *args) DEBUG("gnrc_netif: GNRC_NETDEV_MSG_TYPE_SND received\n"); _send(netif, msg.content.ptr, false); #if (CONFIG_GNRC_NETIF_MIN_WAIT_AFTER_SEND_US > 0U) - xtimer_periodic_wakeup( + ztimer_periodic_wakeup( + ZTIMER_USEC, &last_wakeup, CONFIG_GNRC_NETIF_MIN_WAIT_AFTER_SEND_US ); /* override last_wakeup in case last_wakeup + * CONFIG_GNRC_NETIF_MIN_WAIT_AFTER_SEND_US was in the past */ - last_wakeup = xtimer_now(); + last_wakeup = ztimer_now(ZTIMER_USEC); #endif break; case GNRC_NETAPI_MSG_TYPE_SET: diff --git a/sys/phydat/phydat_str.c b/sys/phydat/phydat_str.c index bbdea52bad..bad60643f3 100644 --- a/sys/phydat/phydat_str.c +++ b/sys/phydat/phydat_str.c @@ -114,6 +114,7 @@ const char *phydat_unit_to_str(uint8_t unit) case UNIT_W: return "W"; case UNIT_DBM: return "dBm"; case UNIT_GS: return "Gs"; + case UNIT_T: return "T"; case UNIT_BAR: return "Bar"; case UNIT_PA: return "Pa"; case UNIT_PERMILL: return "permille"; diff --git a/sys/shell/commands/Makefile b/sys/shell/commands/Makefile index 78f789acaa..eeddbbbb07 100644 --- a/sys/shell/commands/Makefile +++ b/sys/shell/commands/Makefile @@ -14,6 +14,9 @@ endif ifneq (,$(filter mci,$(USEMODULE))) SRC += sc_disk.c endif +ifneq (,$(filter nice,$(USEMODULE))) + SRC += sc_nice.c +endif ifneq (,$(filter periph_pm,$(USEMODULE))) SRC += sc_pm.c endif diff --git a/sys/shell/commands/sc_nice.c b/sys/shell/commands/sc_nice.c new file mode 100644 index 0000000000..2905f9c389 --- /dev/null +++ b/sys/shell/commands/sc_nice.c @@ -0,0 +1,53 @@ +/* + * Copyright (C) 2021 Otto-von-Guericke-Universität Magdeburg + * + * This file is subject to the terms and conditions of the GNU Lesser + * General Public License v2.1. See the file LICENSE in the top level + * directory for more details. + */ + +/** + * @ingroup sys_shell_commands + * @{ + * + * @file + * @brief A shell command to change the niceness (inverse priority) of a thread + * + * @note Enable this by using the modules shell_commands and nice + * + * @author Marian Buschsieweke + * + * @} + */ + +#include +#include + +#include "sched.h" +#include "thread.h" + +int _sc_nice(int argc, char **argv) +{ + if (argc != 3) { + printf("Usage: %s \n" + "Note: Lower number means higher priority (niceness)\n", + argv[0]); + return EXIT_FAILURE; + } + + /* Note: thread_get() does bounds checking and returns NULL on out of bounds PID */ + thread_t *thread = thread_get(atoi(argv[1])); + if (!thread) { + printf("No active thread found for ID \"%s\"\n", argv[1]); + return EXIT_FAILURE; + } + + uint8_t prio = atoi(argv[2]); + if (prio >= SCHED_PRIO_LEVELS) { + printf("Priority \"%s\" is invalid (try 0..%u)\n", + argv[2], (unsigned)SCHED_PRIO_LEVELS - 1); + } + + sched_change_priority(thread, prio); + return EXIT_SUCCESS; +} diff --git a/sys/shell/commands/shell_commands.c b/sys/shell/commands/shell_commands.c index 79d963f4f4..33a948a4d2 100644 --- a/sys/shell/commands/shell_commands.c +++ b/sys/shell/commands/shell_commands.c @@ -187,6 +187,10 @@ extern int _i2c_scan(int argc, char **argv); extern int _loramac_handler(int argc, char **argv); #endif +#ifdef MODULE_NICE +extern int _sc_nice(int argc, char **argv); +#endif + #ifdef MODULE_NIMBLE_NETIF extern int _nimble_netif_handler(int argc, char **argv); #endif @@ -267,6 +271,9 @@ const shell_command_t _shell_command_list[] = { #ifdef MODULE_GNRC_IPV6_NIB {"nib", "Configure neighbor information base", _gnrc_ipv6_nib}, #endif +#ifdef MODULE_NICE + {"nice", "Change priority of an active thread", _sc_nice}, +#endif #ifdef MODULE_NETSTATS_NEIGHBOR {"neigh", "Show neighbor statistics", _netstats_nb}, #endif diff --git a/sys/ztimer64/ztimer64.c b/sys/ztimer64/ztimer64.c index 4e1021c9e5..e1b8974c73 100644 --- a/sys/ztimer64/ztimer64.c +++ b/sys/ztimer64/ztimer64.c @@ -23,6 +23,8 @@ */ #include #include +/* stdio.h needs to be included before inttypes.h (newlibc) */ +#include #include #include "ztimer64.h" @@ -294,9 +296,7 @@ void ztimer64_clock_print(const ztimer64_clock_t *clock) const ztimer64_base_t *entry = clock->first; while (entry) { - printf("0x%08x:%" PRIu64 "\n", (unsigned)entry, - entry->target); - + printf("0x%08x:%" PRIu64 "\n", (unsigned)entry, entry->target); entry = entry->next; } puts(""); diff --git a/tests/driver_at86rf215/Makefile.ci b/tests/driver_at86rf215/Makefile.ci index 502cf84658..2ce525a914 100644 --- a/tests/driver_at86rf215/Makefile.ci +++ b/tests/driver_at86rf215/Makefile.ci @@ -31,4 +31,5 @@ BOARD_INSUFFICIENT_MEMORY := \ telosb \ waspmote-pro \ zigduino \ + z1 # diff --git a/tests/gnrc_netif_ipv6_wait_for_global_address/main.c b/tests/gnrc_netif_ipv6_wait_for_global_address/main.c index 30858dd8c6..1dd573de3a 100644 --- a/tests/gnrc_netif_ipv6_wait_for_global_address/main.c +++ b/tests/gnrc_netif_ipv6_wait_for_global_address/main.c @@ -27,7 +27,7 @@ #include "net/gnrc/netif.h" #include "net/gnrc/netif/raw.h" #include "net/netdev_test.h" -#include "xtimer.h" +#include "ztimer.h" #define TEST_NETIF_NUMOF 2 #define TEST_NETIF_PRIO 3 @@ -54,7 +54,7 @@ static void tear_down(void) static void *_adder_thread(void *netif) { - xtimer_msleep(10); + ztimer_sleep(ZTIMER_MSEC, 10); gnrc_netif_ipv6_addr_add(netif, &_test_addr, 64, GNRC_NETIF_IPV6_ADDRS_FLAGS_STATE_VALID); return NULL; @@ -74,16 +74,16 @@ static void _assert_wait_blocks(gnrc_netif_t *add_netif, gnrc_netif_t *wait_netif, bool success) { - uint32_t now = xtimer_now_usec(); + uint32_t now = ztimer_now(ZTIMER_MSEC); uint32_t timeout = 20; _add_delayed_addr(add_netif); TEST_ASSERT(gnrc_netif_ipv6_wait_for_global_address(wait_netif, timeout) == success); if (success) { - TEST_ASSERT(((xtimer_now_usec() - now) / US_PER_MS) < timeout); + TEST_ASSERT((ztimer_now(ZTIMER_MSEC) - now) < timeout); } else { - TEST_ASSERT(((xtimer_now_usec() - now) / US_PER_MS) >= timeout); + TEST_ASSERT((ztimer_now(ZTIMER_MSEC) - now) >= timeout); } } diff --git a/tests/phydat_dump/main.c b/tests/phydat_dump/main.c index b0c73f04a9..8ce6d1ff22 100644 --- a/tests/phydat_dump/main.c +++ b/tests/phydat_dump/main.c @@ -45,6 +45,7 @@ _phydat_test_t _test_vector[] = { .dim = 1, .dat = { .val = { 12345 }, .unit = UNIT_V, .scale = 6 } }, { .dim = 1, .dat = { .val = { 12345 }, .unit = UNIT_W, .scale = 7 } }, { .dim = 1, .dat = { .val = { 12345 }, .unit = UNIT_GS, .scale = -1 } }, + { .dim = 3, .dat = { .val = { 123, 456, 789 }, .unit = UNIT_T, .scale = -9 } }, { .dim = 1, .dat = { .val = { 12345 }, .unit = UNIT_DBM, .scale = -3 } }, { .dim = 1, .dat = { .val = { 12345 }, .unit = UNIT_COULOMB, .scale = 0 } }, { .dim = 1, .dat = { .val = { 12345 }, .unit = UNIT_F, .scale = -6 } }, diff --git a/tests/phydat_dump/tests/01-run.py b/tests/phydat_dump/tests/01-run.py index 39a781702f..670c589e06 100755 --- a/tests/phydat_dump/tests/01-run.py +++ b/tests/phydat_dump/tests/01-run.py @@ -44,6 +44,9 @@ def testfunc(child): child.expect(r'Data:\t 12345 MV\r\n') child.expect(r'Data:\t 12345e7 W\r\n') child.expect(r'Data:\t 1234.5 Gs\r\n') + child.expect(r'Data:\t\[0\] 123 nT\r\n') + child.expect(r'\t\[1\] 456 nT\r\n') + child.expect(r'\t\[2\] 789 nT\r\n') child.expect(r'Data:\t 12.345 dBm\r\n') child.expect(r'Data:\t 12345 C\r\n') child.expect(r'Data:\t 12345 uF\r\n') diff --git a/tests/pkg_edhoc_c/Makefile b/tests/pkg_edhoc_c/Makefile index 657147abe8..4fd47ac3c6 100644 --- a/tests/pkg_edhoc_c/Makefile +++ b/tests/pkg_edhoc_c/Makefile @@ -6,6 +6,9 @@ BOARD_WHITELIST += $(BOARD_PROVIDES_NETIF) # open(/dev/net/tun): No such file or directory TEST_ON_CI_BLACKLIST += native +# Test fails pretty regularly on CI +TEST_ON_CI_BLACKLIST += esp32-wroom-32 + # Edhoc related packages USEPKG += edhoc-c USEMODULE += edhoc-c_crypto_tinycrypt diff --git a/tests/pkg_mbedtls/Makefile b/tests/pkg_mbedtls/Makefile index 5634c3938c..033d86178a 100644 --- a/tests/pkg_mbedtls/Makefile +++ b/tests/pkg_mbedtls/Makefile @@ -3,6 +3,9 @@ include ../Makefile.tests_common USEPKG += mbedtls USEMODULE += mbedtls_entropy +# entropy test keeps failing on this board due to low entropy +TEST_ON_CI_BLACKLIST += samr21-xpro + # Increase stack size of main thread. CFLAGS += -DTHREAD_STACKSIZE_MAIN=THREAD_STACKSIZE_LARGE diff --git a/tests/sched_change_priority/Makefile b/tests/sched_change_priority/Makefile new file mode 100644 index 0000000000..a39f492c4a --- /dev/null +++ b/tests/sched_change_priority/Makefile @@ -0,0 +1,13 @@ +include ../Makefile.tests_common + +USEMODULE += nice +USEMODULE += ps +USEMODULE += shell +USEMODULE += shell_commands + +# Use a terminal that does not introduce extra characters into the stream. +RIOT_TERMINAL ?= socat + +APP_SHELL_FMT ?= NONE + +include $(RIOTBASE)/Makefile.include diff --git a/tests/sched_change_priority/Makefile.ci b/tests/sched_change_priority/Makefile.ci new file mode 100644 index 0000000000..b5de876337 --- /dev/null +++ b/tests/sched_change_priority/Makefile.ci @@ -0,0 +1,9 @@ +BOARD_INSUFFICIENT_MEMORY := \ + arduino-duemilanove \ + arduino-leonardo \ + arduino-nano \ + arduino-uno \ + atmega328p \ + atmega328p-xplained-mini \ + nucleo-l011k4 \ + # diff --git a/tests/sched_change_priority/main.c b/tests/sched_change_priority/main.c new file mode 100644 index 0000000000..68a9dd7a6e --- /dev/null +++ b/tests/sched_change_priority/main.c @@ -0,0 +1,102 @@ +/* + * Copyright (C) 2019 Otto-von-Guericke-Universität Magdeburg + * + * This file is subject to the terms and conditions of the GNU Lesser + * General Public License v2.1. See the file LICENSE in the top level + * directory for more details. + */ + +/** + * @ingroup tests + * @{ + * + * @file + * @brief Test application for sched_change_priority / nice + * + * @author Marian Buschsieweke + * + * @} + */ + +#include +#include + +#include "architecture.h" +#include "sched.h" +#include "shell.h" +#include "shell_commands.h" +#include "thread.h" + +static int sc_hint(int argc, char **argv); + +static WORD_ALIGNED char t2_stack[THREAD_STACKSIZE_TINY]; +static WORD_ALIGNED char t3_stack[THREAD_STACKSIZE_DEFAULT]; +static kernel_pid_t t3_pid; + +static const shell_command_t cmds[] = { + { "hint", "Display the correct invocation of nice for this teset", sc_hint }, + { NULL, NULL, NULL } +}; + +/* + * Note: An extra shell command just for displaying this hint is very much of + * an overkill for a human being, especially since the ps command already + * provides all the details. However, for automatic testing this makes it + * easy to extract the pid of t3 and the numeric value of + * THREAD_PRIORITY_MAIN - 1, resulting in more robust automatic testing. + * A shell command also has the convenient side effect of synchronizing + * with the shell. + */ +static int sc_hint(int argc, char **argv) +{ + (void)argc; + (void)argv; + + printf("Run \"nice %" PRIkernel_pid " %u\"\n", + t3_pid, (unsigned)THREAD_PRIORITY_MAIN - 1); + + return EXIT_SUCCESS; +} + +static void *t2_func(void *unused) +{ + (void)unused; + + while (1) { + /* blocking t3 from running with busy loop while t3 has lower prio than me */ + } + + return NULL; +} + +static void *t3_func(void *unused) +{ + (void)unused; + + while (1) { + uint8_t prio = THREAD_PRIORITY_MAIN + 2; + printf("[t3] Setting my priority to THREAD_PRIORITY_MAIN + 2 = %u\n", + (unsigned)prio); + sched_change_priority(thread_get_active(), prio); + puts("[t3] Running again."); + } + + return NULL; +} + +int main(void) +{ + thread_create(t2_stack, sizeof(t2_stack), THREAD_PRIORITY_MAIN + 1, + THREAD_CREATE_STACKTEST, t2_func, NULL, "t2"); + + t3_pid = thread_create(t3_stack, sizeof(t3_stack), THREAD_PRIORITY_MAIN - 1, + THREAD_CREATE_STACKTEST, t3_func, NULL, "t3"); + + puts("[main] Use shell command \"nice\" to increase prio of t3.\n" + "[main] If it works, it will run again. The \"hint\" cmd can be useful."); + + char line_buf[SHELL_DEFAULT_BUFSIZE]; + shell_run(cmds, line_buf, SHELL_DEFAULT_BUFSIZE); + + return 0; +} diff --git a/tests/sched_change_priority/tests/01-run.py b/tests/sched_change_priority/tests/01-run.py new file mode 100755 index 0000000000..c6ebaf4aee --- /dev/null +++ b/tests/sched_change_priority/tests/01-run.py @@ -0,0 +1,17 @@ +#!/usr/bin/env python3 + +import sys +from testrunner import run + + +def testfunc(child): + child.sendline("hint") + child.expect(r"Run \"nice (\d+) (\d+)\"\r\n") + pid = int(child.match.group(1)) + prio = int(child.match.group(2)) + child.sendline("nice {} {}".format(pid, prio)) + child.expect_exact('[t3] Running again.') + + +if __name__ == "__main__": + sys.exit(run(testfunc)) diff --git a/tests/sys_fido2_ctap/app.config.test b/tests/sys_fido2_ctap/app.config.test new file mode 100644 index 0000000000..5d3f10b646 --- /dev/null +++ b/tests/sys_fido2_ctap/app.config.test @@ -0,0 +1,13 @@ +CONFIG_MODULE_AUTO_INIT_USBUS=n +CONFIG_MODULE_USBUS=y +CONFIG_MODULE_FIDO2=y +CONFIG_MODULE_FIDO2_CTAP=y +CONFIG_MODULE_FIDO2_CTAP_TRANSPORT=y +CONFIG_MODULE_FIDO2_CTAP_TRANSPORT_HID=y + +CONFIG_PACKAGE_FIDO2_TESTS=y + +# Should be autoselecting the MODULE_PRNG_HWRNG if possible +# Since the makefile cannot we have to override until end of migration +# Remove when TEST_KCONFIG is complete +CONFIG_MODULE_PRNG_MUSL_LCG=y diff --git a/tests/unittests/tests-phydat/tests-phydat.c b/tests/unittests/tests-phydat/tests-phydat.c index de5cce7408..504f029db5 100644 --- a/tests/unittests/tests-phydat/tests-phydat.c +++ b/tests/unittests/tests-phydat/tests-phydat.c @@ -212,6 +212,7 @@ static void test_unitstr__success(void) TEST_ASSERT_EQUAL_STRING("W", phydat_unit_to_str_verbose(UNIT_W)); TEST_ASSERT_EQUAL_STRING("dBm", phydat_unit_to_str_verbose(UNIT_DBM)); TEST_ASSERT_EQUAL_STRING("Gs", phydat_unit_to_str_verbose(UNIT_GS)); + TEST_ASSERT_EQUAL_STRING("T", phydat_unit_to_str_verbose(UNIT_T)); TEST_ASSERT_EQUAL_STRING("Bar", phydat_unit_to_str_verbose(UNIT_BAR)); TEST_ASSERT_EQUAL_STRING("Pa", phydat_unit_to_str_verbose(UNIT_PA)); TEST_ASSERT_EQUAL_STRING("permille", phydat_unit_to_str_verbose(UNIT_PERMILL));