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
+
+
+
+An evaluation board for the radio certified WLR089 module exists as the WLR089 Xplained Pro, it is compatible with the `samr34-xpro`.
+
+
+
+
+### 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:
+
+
+
+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));