Merge commit '2c8e4219593acdae0acbe1916731be753a85f1c4' into pull/fca7ed39434b4f7386110050314f29a21181e40f/2c8e4219593acdae0acbe1916731be753a85f1c4
This commit is contained in:
commit
cc72a9f552
20
.github/workflows/test-on-iotlab.yml
vendored
20
.github/workflows/test-on-iotlab.yml
vendored
@ -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
|
||||
|
||||
4
.murdock
4
.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"}
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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 | |
|
||||
|
||||
|
||||
40
boards/samr34-xpro/doc.txt
Normal file
40
boards/samr34-xpro/doc.txt
Normal file
@ -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)<br>[WLR089 XPro](https://www.microchip.com/en-us/development-tool/EV23M25A)|
|
||||
|
||||
*/
|
||||
@ -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 */
|
||||
/** @} */
|
||||
|
||||
/**
|
||||
|
||||
@ -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 <kaspar@schleiser.de>
|
||||
* @author Hauke Petersen <hauke.petersen@fu-berlin.de>
|
||||
*/
|
||||
|
||||
#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)
|
||||
*
|
||||
|
||||
119
core/sched.c
119
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 <kaspar@schleiser.de>
|
||||
* @author René Kijewski <rene.kijewski@fu-berlin.de>
|
||||
* @author Hauke Petersen <hauke.petersen@fu-berlin.de>
|
||||
*
|
||||
* @}
|
||||
*/
|
||||
@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
@ -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(
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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);
|
||||
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
}
|
||||
|
||||
@ -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))
|
||||
|
||||
11
dist/tools/compile_commands/compile_commands.py
vendored
11
dist/tools/compile_commands/compile_commands.py
vendored
@ -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)
|
||||
|
||||
1
dist/tools/doccheck/exclude_patterns
vendored
1
dist/tools/doccheck/exclude_patterns
vendored
@ -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\.
|
||||
|
||||
17
dist/tools/zep_dispatch/README.md
vendored
17
dist/tools/zep_dispatch/README.md
vendored
@ -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.
|
||||
|
||||
10
dist/tools/zep_dispatch/topogen.sh
vendored
10
dist/tools/zep_dispatch/topogen.sh
vendored
@ -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"
|
||||
|
||||
|
||||
3
doc.txt
3
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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -12,4 +12,4 @@ USEMODULE += eui_provider
|
||||
USEMODULE += iolist
|
||||
USEMODULE += netdev_eth
|
||||
USEMODULE += random
|
||||
USEMODULE += xtimer
|
||||
USEMODULE += ztimer_usec
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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 */
|
||||
|
||||
@ -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 */
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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) $@
|
||||
|
||||
|
||||
|
||||
@ -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)
|
||||
|
||||
|
||||
@ -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)'
|
||||
|
||||
|
||||
@ -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 <a href="creating-modules.html#pseudomodules">the documentation on pseudomodules in general</a>.
|
||||
##
|
||||
## @{
|
||||
|
||||
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`.
|
||||
|
||||
## @}
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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"
|
||||
|
||||
@ -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: \
|
||||
|
||||
@ -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: \
|
||||
|
||||
@ -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".
|
||||
|
||||
4
pkg/fido2_tests/Kconfig
Normal file
4
pkg/fido2_tests/Kconfig
Normal file
@ -0,0 +1,4 @@
|
||||
config PACKAGE_FIDO2_TESTS
|
||||
bool "FIDO2 tests"
|
||||
help
|
||||
Test suite for FIDO2, U2F, and other security key functions.
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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"
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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 */
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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:
|
||||
|
||||
@ -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";
|
||||
|
||||
@ -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
|
||||
|
||||
53
sys/shell/commands/sc_nice.c
Normal file
53
sys/shell/commands/sc_nice.c
Normal file
@ -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 <marian.buschsieweke@ovgu.de>
|
||||
*
|
||||
* @}
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "sched.h"
|
||||
#include "thread.h"
|
||||
|
||||
int _sc_nice(int argc, char **argv)
|
||||
{
|
||||
if (argc != 3) {
|
||||
printf("Usage: %s <THREAD_ID> <PRIORITY>\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;
|
||||
}
|
||||
@ -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
|
||||
|
||||
@ -23,6 +23,8 @@
|
||||
*/
|
||||
#include <assert.h>
|
||||
#include <stdint.h>
|
||||
/* stdio.h needs to be included before inttypes.h (newlibc) */
|
||||
#include <stdio.h>
|
||||
#include <inttypes.h>
|
||||
|
||||
#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("");
|
||||
|
||||
@ -31,4 +31,5 @@ BOARD_INSUFFICIENT_MEMORY := \
|
||||
telosb \
|
||||
waspmote-pro \
|
||||
zigduino \
|
||||
z1
|
||||
#
|
||||
|
||||
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -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 } },
|
||||
|
||||
@ -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')
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
|
||||
13
tests/sched_change_priority/Makefile
Normal file
13
tests/sched_change_priority/Makefile
Normal file
@ -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
|
||||
9
tests/sched_change_priority/Makefile.ci
Normal file
9
tests/sched_change_priority/Makefile.ci
Normal file
@ -0,0 +1,9 @@
|
||||
BOARD_INSUFFICIENT_MEMORY := \
|
||||
arduino-duemilanove \
|
||||
arduino-leonardo \
|
||||
arduino-nano \
|
||||
arduino-uno \
|
||||
atmega328p \
|
||||
atmega328p-xplained-mini \
|
||||
nucleo-l011k4 \
|
||||
#
|
||||
102
tests/sched_change_priority/main.c
Normal file
102
tests/sched_change_priority/main.c
Normal file
@ -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 <marian.buschsieweke@ovgu.de>
|
||||
*
|
||||
* @}
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#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;
|
||||
}
|
||||
17
tests/sched_change_priority/tests/01-run.py
Executable file
17
tests/sched_change_priority/tests/01-run.py
Executable file
@ -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))
|
||||
13
tests/sys_fido2_ctap/app.config.test
Normal file
13
tests/sys_fido2_ctap/app.config.test
Normal file
@ -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
|
||||
@ -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));
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user