1
0
mirror of https://github.com/RIOT-OS/RIOT.git synced 2024-12-29 04:50:03 +01:00

Merge branch 'master' into patch-3

This commit is contained in:
Oleg Hahm 2022-03-09 13:27:18 +01:00 committed by GitHub
commit a2d79e0664
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
11331 changed files with 1187134 additions and 883085 deletions

25
.circleci/config.yml Normal file
View File

@ -0,0 +1,25 @@
# CircleCI configuration file used to build and get a preview of the generated
# Doxygen documentation.
# Note that the job on CircleCI takes around 30 minutes to complete because
# copying +19k individual files to their cloud storage is very slow.
version: 2
jobs:
doc-build:
docker:
- image: riot/static-test-tools
steps:
- checkout
- run: make doc
- run:
command: |
cp -R doc/doxygen/html /doc
- store_artifacts:
path: /doc
workflows:
version: 2
doc-build:
jobs:
- doc-build

1
.gitattributes vendored
View File

@ -1,5 +1,6 @@
*.a binary
*.patch binary
Cargo.lock binary
# Default conflict marker size is 7 which causes some of the headings in
# release-notes.txt to trigger git diff --check: 'leftover conflict marker'
# when the heading is exactly 7 characters long.

View File

@ -11,8 +11,7 @@ IF YOUR ISSUE IS RELATED TO SECURITY
please submit it to the security mailing-list security@riot-os.org.
If your issue is a question related to the usage of RIOT, please submit it to
the user mailing-list users@riot-os.org or to the developer mailing-list
devel@riot-os.org.
our forum at https://forum.riot-os.org.
-->
#### Description

View File

@ -1,12 +0,0 @@
---
name: 'Security Bug report'
about: |
Don't use the issue tracker for this! Please write an e-mail to
security@riot-os.org. The button was just added to advertise this message.
---
# DON'T USE THE ISSUE TRACKER FOR THIS!
<!--
Please write an e-mail to security@riot-os.org. The button was just added to
advertise this message!
-->

View File

@ -2,7 +2,7 @@
The RIOT community cares a lot about code quality.
Therefore, before describing what your contribution is about, we would like
you to make sure that your modifications are compliant with the RIOT
coding conventions, see https://github.com/RIOT-OS/RIOT/wiki/Coding-conventions.
coding conventions, see https://github.com/RIOT-OS/RIOT/blob/master/CODING_CONVENTIONS.md.
-->
### Contribution description

156
.github/labeler.yml vendored Normal file
View File

@ -0,0 +1,156 @@
"Area: arduino API":
- "sys/arduino/**/*"
"Area: BLE":
- "pkg/nimble/**/*"
- "sys/net/ble/**/*"
- "sys/include/net/bluetil/**/*"
- "sys/include/net/skald/**/*"
- "sys/include/net/skald.h"
"Area: boards":
- "boards/**/*"
"Area: build system":
- "Makefile.*"
- "makefiles/**/*"
- "**/*.mk"
"Area: CI":
- ".circleci/**/*"
- ".github/**/*.yml"
- ".murdock"
"Area: CoAP":
- "sys/net/application_layer/*coap/**/*"
- "sys/include/net/*coap*/**/*"
"Area: core":
- "core/**/*"
"Area: cpu":
- "cpu/**/*"
"Area: doc":
- "doc/**/*"
- "**/*.md"
- "**/*.txt"
- "**/*.cff"
"Area: drivers":
- "drivers/**/*"
"Area: examples":
- "examples/**/*"
"Area: Kconfig":
- "dist/tools/kconfiglib/**/*"
- "makefiles/kconfig.mk"
- "kconfigs/*"
- "**/Kconfig"
"Area: LoRa":
- "drivers/llcc68/**/*"
- "drivers/sx126x/**/*"
- "drivers/sx127x/**/*"
- "drivers/include/llcc68.h"
- "drivers/include/sx126x.h"
- "drivers/include/sx127x.h"
- "pkg/semtech-loramac/**/*"
- "sys/net/lora/**/*"
- "sys/net/gnrc/link_layer/lorawan/**/*"
- "sys/include/net/lorawan/**/*"
- "sys/include/net/gnrc/lorawan/**/*"
- "sys/include/net/gnrc/lorawan.h"
- "sys/include/net/lora.h"
- "sys/include/net/loramac.h"
"Area: network":
- "sys/net/**/*"
- "sys/include/net/**/*"
- "pkg/lwip/**/*"
- "pkg/openthread/**/*"
- "pkg/openwsn/**/*"
- "pkg/paho-mqtt/**/*"
"Area: OTA":
- "sys/suit/**/*"
- "sys/include/suit/**/*"
- "sys/include/suit.h"
"Area: pkg":
- "pkg/**/*"
"Area: SAUL":
- "drivers/saul/**/*"
- "drivers/include/saul/**/*"
- "drivers/include/saul.h"
- "sys/saul_reg/**/*"
- "sys/include/saul_reg.h"
"Area: sys":
- "sys/**/*"
"Area: tests":
- "tests/**/*"
- "fuzzing/**/*"
- "dist/pythonlibs/**/*"
- "makefiles/tests/**/*"
"Area: timers":
- "sys/*timer/**/*"
- "sys/include/*timer/**/*"
- "sys/include/*timer.h"
"Area: toolchain":
- "makefiles/toolchain/**/*"
"Area: tools":
- "dist/tools/**/*"
- "dist/testbed-support/**/*"
- "makefiles/tools/**/*"
"Area: USB":
- "sys/usb/**/*"
- "sys/include/usb/**/*"
- "sys/include/usb.h"
"Platform: native":
- "boards/native/**/*"
- "cpu/native/**/*"
"Platform: ARM":
- "cpu/arm7_common/**/*"
- "cpu/cortexm_common/**/*"
- "cpu/cc2*/**/*"
- "cpu/efm32/**/*"
- "cpu/kinetis/**/*"
- "cpu/lm4f120/**/*"
- "cpu/lpc*/**/*"
- "cpu/nrf5*/**/*"
- "cpu/qn908x/**/*"
- "cpu/sam*/**/*"
- "cpu/stellaris_common/**/*"
- "cpu/stm32/**/*"
- "makefiles/arch/cortexm.inc.mk"
"Platform: AVR":
- "cpu/atmega*/**/*"
- "cpu/avr8_common/**/*"
- "makefiles/arch/avr8.inc.mk"
"Platform: ESP":
- "cpu/esp*/**/*"
"Platform: MIPS":
- "cpu/mips*/**/*"
- "makefiles/arch/mips.inc.mk"
"Platform: MSP":
- "cpu/msp*/**/*"
- "makefiles/arch/msp430.inc.mk"
"Platform: RISC-V":
- "cpu/riscv_common/**/*"
- "cpu/fe310/**/*"
- "makefiles/arch/riscv.inc.mk"

36
.github/workflows/check-pr.yml vendored Normal file
View File

@ -0,0 +1,36 @@
name: check-pr
on:
pull_request:
types: [opened, reopened, labeled, unlabeled, synchronize]
pull_request_review:
types: [submitted, dismissed]
jobs:
check-labels:
runs-on: ubuntu-latest
steps:
- uses: RIOT-OS/check-labels-action@v1.0.0
with:
access_token: ${{ secrets.GITHUB_TOKEN }}
unset_labels: 'CI: needs squashing,State: waiting for other PR,Process: blocked by feature freeze'
cond_labels: '(Process: needs >1 ACK,review.approvals>1),(Area: RDM,review.approvals>2)'
check-commits:
runs-on: ubuntu-latest
if: ${{ github.base_ref }}
strategy:
fail-fast: false
matrix:
check: [commit-msg, pr_check]
steps:
- uses: actions/checkout@master
with:
# Use the SHA of the PR branch as-is, not the PR branch merged
# in master (default behavior in GH actions)
# See https://github.com/actions/checkout#checkout-pull-request-head-commit-instead-of-merge-commit
ref: ${{ github.event.pull_request.head.sha }}
fetch-depth: 0
- name: Fetch base branch
run:
git fetch origin '${{ github.base_ref }}:${{ github.base_ref }}'
- name: Run checks
run: |
./dist/tools/${{ matrix.check }}/check.sh "${{ github.base_ref }}"

13
.github/workflows/circleci.yml vendored Normal file
View File

@ -0,0 +1,13 @@
name: doc-build-artifact
on: [status]
jobs:
circleci_artifacts_redirector_job:
runs-on: ubuntu-latest
name: Run CircleCI artifacts redirector
steps:
- name: GitHub Action step
uses: larsoner/circleci-artifacts-redirector-action@master
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
artifact-path: 0/doc/index.html
circleci-jobs: doc-build

14
.github/workflows/labeler.yml vendored Normal file
View File

@ -0,0 +1,14 @@
name: pr-labeler
on:
pull_request_target:
types: [opened, synchronize, reopened]
jobs:
triage:
runs-on: ubuntu-latest
steps:
- uses: actions/labeler@main
with:
repo-token: "${{ secrets.GITHUB_TOKEN }}"
sync-labels: true

175
.github/workflows/release-test.yml vendored Normal file
View File

@ -0,0 +1,175 @@
name: release-tests
# Run automated part of the tests specified by the release specs (see
# https://github.com/RIOT-OS/Release-Specs/) on `native` and IoT-LAB boards.
#
# It is split into `native` tests and IoT-LAB tests, as the tests are
# resource-wise disjunct and thus can be run parallel. For each IoT-LAB board
# test an IoT-LAB experiment is started using the `rici` account.
#
# This workflow is run periodically on master with a cron job, on new pushed
# release candidates tags and release tags, and can be triggered via workflow
# dispatch.
on:
schedule:
- cron: '0 3 * * 6'
push:
# Run on all new release candidates and release tags
tags:
- '[0-9][0-9][0-9][0-9].[0-9][0-9]-RC[0-9]*'
- '[0-9][0-9][0-9][0-9].[0-9][0-9]'
- '[0-9][0-9][0-9][0-9].[0-9][0-9].*'
workflow_dispatch:
inputs:
riot_version:
description: 'RIOT version to checkout'
required: true
default: 'master'
release_specs_version:
description: 'Release-Specs version to checkout'
required: true
default: 'master'
docker_version:
description: 'riot/riotbuild docker image version'
required: true
default: 'latest'
filter:
description: 'Pytest filter. Leave empty for all.'
required: false
env:
DOCKER_MAKE_ARGS: -j
# split up native and IoT-LAB tasks to parallelize somewhat and prevent
# to hit Github Limit of 6h per job.
jobs:
tasks:
runs-on: ubuntu-latest
timeout-minutes: 360
strategy:
fail-fast: false
matrix:
pytest_mark:
- "iotlab_creds"
include:
- pytest_mark: "not iotlab_creds"
sudo: "sudo"
steps:
- name: Generate .riotgithubtoken
run: |
if [ -z "${{ matrix.sudo }}" ]; then
echo '${{ secrets.RIOT_CI_ACCESS_TOKEN }}' > ~/.riotgithubtoken
else
sudo sh -c "echo '${{ secrets.RIOT_CI_ACCESS_TOKEN }}' > ~/.riotgithubtoken"
fi
- name: Setup IoT-LAB credentials
if: ${{ matrix.pytest_mark == 'iotlab_creds' }}
run: |
echo '${{ secrets.IOTLABRC }}' > ~/.iotlabrc
- name: Setup SSH agent
if: ${{ matrix.pytest_mark == 'iotlab_creds' }}
uses: webfactory/ssh-agent@v0.4.1
with:
ssh-private-key: ${{ secrets.IOTLAB_PRIVATE_KEY }}
- name: Fetch host key from IoT-LAB saclay site
if: ${{ matrix.pytest_mark == 'iotlab_creds' }}
run: |
IOTLAB_USER=$(cat ~/.iotlabrc | cut -f1 -d:)
ssh -oStrictHostKeyChecking=accept-new \
${IOTLAB_USER}@saclay.iot-lab.info exit
- name: Fetch host key from IoT-LAB lille site
if: ${{ matrix.pytest_mark == 'iotlab_creds' }}
run: |
IOTLAB_USER=$(cat ~/.iotlabrc | cut -f1 -d:)
ssh -oStrictHostKeyChecking=accept-new \
${IOTLAB_USER}@lille.iot-lab.info exit
- name: Checkout Release-Specs
uses: actions/checkout@v2
with:
repository: RIOT-OS/Release-Specs
path: Release-Specs
fetch-depth: 1
ref: ${{ github.event.inputs.release_specs_version }}
- name: Checkout RIOT
uses: actions/checkout@v2
with:
repository: RIOT-OS/RIOT
path: RIOT
fetch-depth: 1
ref: ${{ github.event.inputs.riot_version }}
- name: Set up Python 3.8
uses: actions/setup-python@v2
with:
python-version: 3.8
- name: Install Python dependencies
run: |
python -m pip install --upgrade pip
python -m pip install tox junit2html
- name: Pull riotbuild docker image
run: |
DOCKER_VERSION="${{ github.event.inputs.docker_version }}"
if [ -z "$DOCKER_VERSION" ]; then
DOCKER_VERSION="latest"
fi
docker pull riot/riotbuild:$DOCKER_VERSION
- name: Create TAP interfaces
if: ${{ matrix.pytest_mark == 'not iotlab_creds' }}
run: |
sudo RIOT/dist/tools/tapsetup/tapsetup -c 11
- name: Run release tests
timeout-minutes: 350
run: |
RIOTBASE="$GITHUB_WORKSPACE/RIOT"
TOX_ARGS=""
if ! echo ${{ github.event.inputs.riot_version }} | \
grep -q "[0-9]\{4\}.[0-9]\{2\}-RC[0-9]\+"; then
TOX_ARGS+="--non-RC "
fi
if [ -n "${{ github.event.inputs.filter }}" ]; then
K="-k"
fi
cd Release-Specs
# definition in env does not work since $GITHUB_WORKSPACE seems not to
# be accessible
${{ matrix.sudo }} \
BUILD_IN_DOCKER=1 \
DOCKER_MAKE_ARGS=${DOCKER_MAKE_ARGS} \
DOCKER_ENV_VARS="USEMODULE QUIETER" \
GITHUB_REPOSITORY=${GITHUB_REPOSITORY} \
GITHUB_RUN_ID=${GITHUB_RUN_ID} \
GITHUB_SERVER_URL=${GITHUB_SERVER_URL} \
APPKEY="${{ secrets.CI_TTN_APPKEY }}" \
NWKSKEY="${{ secrets.CI_TTN_NWKSKEY_ABP }}" \
APPSKEY="${{ secrets.CI_TTN_APPSKEY_ABP }}" \
DEVEUI="70B3D57ED00463E7" \
APPEUI="0000000000000000" \
DEVADDR="260B41C7" \
TTN_DL_KEY="${{ secrets.CI_TTN_DL_KEY }}" \
TTN_APP_ID="release-tests" \
TTN_DEV_ID="eui-70b3d57ed00463e7-otaa" \
TTN_DEV_ID_ABP="eui-70b3d57ed0046d5d-abp" \
RIOTBASE=${RIOTBASE} \
$(which tox) -e test -- ${TOX_ARGS} \
${K} "${{ github.event.inputs.filter }}" -m "${{ matrix.pytest_mark }}"
- name: junit2html and XML deploy
if: always()
run: |
DATE=$(date +"%Y-%m-%d-%H-%M-%S")
if echo ${{ github.event.inputs.riot_version }} | \
grep -q "[0-9]\{4\}.[0-9]\{2\}"; then
VER=${{ github.event.inputs.riot_version }}
else
VER=$(git -C $GITHUB_WORKSPACE/RIOT rev-parse --short HEAD)
fi
MARK=$(echo "${{ matrix.pytest_mark }}" | tr '[ _]' '-')
REPORT_XML=$GITHUB_WORKSPACE/Release-Specs/test-report.xml
REPORT_NAME=test-reports/test-report-$MARK-$VER-$DATE
mkdir test-reports/
junit2html ${REPORT_XML} ${REPORT_NAME}.html
cp ${REPORT_XML} ${REPORT_NAME}.xml
- uses: actions/upload-artifact@v2
if: always()
with:
name: Test Reports
path: test-reports/*

41
.github/workflows/static-test.yml vendored Normal file
View File

@ -0,0 +1,41 @@
name: static-tests
on:
push:
branches:
- master
tags:
- '[0-9][0-9][0-9][0-9].[0-9][0-9]-RC[0-9]*'
- '[0-9][0-9][0-9][0-9].[0-9][0-9]'
- '[0-9][0-9][0-9][0-9].[0-9][0-9].*'
pull_request:
branches:
- '*'
jobs:
static-tests:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
with:
fetch-depth: 0
- name: Setup git
run: |
# Note: ${{ github.base_ref }} is empty when not in a PR
if [ -n "${{ github.base_ref }}" ]; then
git fetch origin ${{ github.base_ref }}:${{ github.base_ref }} --no-tags
else
git config diff.renameLimit 16384
fi
git config apply.whitespace nowarn
- name: Fetch riot/static-test-tools Docker image
run: docker pull riot/static-test-tools:latest
- name: Run static-tests
run: |
# Note: ${{ github.base_ref }} is empty when not in a PR
docker run --rm \
-e CI_BASE_BRANCH=${{ github.base_ref }} \
-e GITHUB_RUN_ID=${GITHUB_RUN_ID} \
-v $(pwd):/data/riotbuild \
riot/static-test-tools:latest \
make static-test

145
.github/workflows/test-on-iotlab.yml vendored Normal file
View File

@ -0,0 +1,145 @@
name: test-on-iotlab
# Run 'compile_and_test_for_board.py' on IoT-LAB boards.
#
# This workflow will launch all tests on a list of IoT-LAB boards.
#
# This workflow is only run periodically on master with a cron and on new
# pushed release candidates tags.
on:
# Schedule weekly runs on Monday at 00:00 on master
schedule:
- cron: '00 0 * * 1'
push:
# Run on all new releases and release candidates tags
tags:
- '[0-9][0-9][0-9][0-9].[0-9][0-9]-RC[0-9]*'
- '[0-9][0-9][0-9][0-9].[0-9][0-9]'
- '[0-9][0-9][0-9][0-9].[0-9][0-9].*'
# Allow manual trigger
workflow_dispatch:
inputs:
riot_version:
description: 'RIOT version to checkout'
required: true
default: 'master'
jobs:
# Runs all tests on IoT-LAB boards
compile_and_test_for_board:
strategy:
max-parallel: 8
fail-fast: false
matrix:
boards:
- riot: dwm1001
iotlab:
archi: dwm1001:dw1000
site: saclay
- riot: iotlab-m3
iotlab:
archi: m3:at86rf231
site: saclay
- riot: nrf51dk
iotlab:
archi: nrf51dk:ble
site: saclay
- riot: nrf52dk
iotlab:
archi: nrf52dk:ble
site: saclay
- riot: nrf52840dk
iotlab:
archi: nrf52840dk:multi
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
site: saclay
- riot: b-l475e-iot01a
iotlab:
archi: st-iotnode:multi
site: saclay
runs-on: ubuntu-latest
name: ${{ matrix.boards.riot }}
env:
IOTLAB_NODE: auto
BUILD_IN_DOCKER: 1
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
# - tests/periph_timer_short_relative_set is expected to fail
# - tests/riotboot requires the riotboot feature and provides a test
# but flashing at a specific offset is not (yet) supported on IoT-LAB
# so it will always fail because of that limitation
APPLICATIONS_EXCLUDE: tests/periph_timer_short_relative_set tests/riotboot
# Increase tolerance error with `tests/periph_timer_periodic` because
# of timing issues with the test script when running in the github
# actions environment
TEST_PERIPH_TIMER_PERIODIC_PRECISION: 0.30
steps:
- name: Set up Python 3.8
uses: actions/setup-python@v2
with:
python-version: 3.8
- name: Install Python dependencies
run: |
python -m pip install --upgrade pip
pip install iotlabcli pexpect riotctrl[rapidjson] junit-xml
- name: Configure credentials
run: echo '${{ secrets.IOTLABRC }}' > ~/.iotlabrc
- name: Setup SSH agent
uses: webfactory/ssh-agent@v0.4.1
with:
ssh-private-key: ${{ secrets.IOTLAB_PRIVATE_KEY }}
- name: Fetch host key from IoT-LAB ${{ matrix.boards.iotlab.site }} site
run: |
IOTLAB_USER=$(cat ~/.iotlabrc | cut -f1 -d:)
ssh -oStrictHostKeyChecking=accept-new \
${IOTLAB_USER}@${{ matrix.boards.iotlab.site }}.iot-lab.info exit
- name: Pull riotbuild docker image
run: |
docker pull riot/riotbuild:latest
- name: Checkout RIOT
uses: actions/checkout@v2
with:
ref: ${{ github.event.inputs.riot_version }}
- name: Launch IoT-LAB experiment
run: |
IOTLAB_EXP_ID=$(iotlab-experiment --jmespath="id" submit \
-n "riot-ci-${{ matrix.boards.riot }}" -d 360 \
-l 1,site=${{ matrix.boards.iotlab.site }}+archi=${{ matrix.boards.iotlab.archi }})
iotlab-experiment wait -i ${IOTLAB_EXP_ID}
echo "IOTLAB_EXP_ID=${IOTLAB_EXP_ID}" >> $GITHUB_ENV
- name: Run compile_and_test_for_board.py on ${{ matrix.boards.riot }}
run: |
${COMPILE_AND_TEST_FOR_BOARD} . ${{ matrix.boards.riot }} \
results-${{ matrix.boards.riot }} ${COMPILE_AND_TEST_ARGS} \
--applications-exclude="${APPLICATIONS_EXCLUDE}"
- name: Stop IoT-LAB experiment
if: always()
run: iotlab-experiment stop -i ${IOTLAB_EXP_ID}
- name: Archive results
if: always()
# Store generated results-<riot board name> artifact
uses: actions/upload-artifact@v2
with:
name: ${{ matrix.boards.riot }}
path: results-${{ matrix.boards.riot }}

105
.github/workflows/test-on-ryot.yml vendored Normal file
View File

@ -0,0 +1,105 @@
---
# Run 'compile_and_test_for_board.py' on connected boards.
#
# This workflow will run on a RYOT (Run Your Own Test) machine and launch
# all tests on all boards currently connected to that machine. This
# workflow relies on self-hosted runners, this means building and
# flashing happens on the self-hosted runner (all in docker). An alternative
# approach was used in https://github.com/RIOT-OS/RIOT/pull/14600, where
# the RYOT machine was only used for remote flashing, this is a better
# alternative if ssh access is possible.
#
# Documentation:
#
# * Setup a RYOT machine:
# https://github.com/fjmolinas/riot-ryot/blob/master/setup.md
#
# * Requirements (already filled by a RYOT machine):
# * Add one or more self-hosted runners:
# https://docs.github.com/en/actions/hosting-your-own-runners/adding-self-hosted-runners
# * All required flashing tools installed
# * udev rules that map all BOARD to /dev/riot/tty-$(BOARD), see
# http://riot-os.org/api/advanced-build-system-tricks.html#multiple-boards-udev
# * RIOT_MAKEFILES_GLOBAL_PRE that sets PORT and DEBUG_ADAPTER_ID for each
# BOARD
# * A list of connected BOARDs in JSON format so that fromJSON can be used
# to dynamically setup the matrix, e.g. make target providing this:
# https://github.com/fjmolinas/riot-ryot/blob/72fc9ad710a2219e942c5965a014e934822e9da5/template/conf/makefiles.pre#L19-L24
# * RYOT: https://github.com/fjmolinas/riot-ryot
name: test-on-ryot
on:
# Schedule weekly runs Saturday at 00:00 on master
schedule:
- cron: '0 0 * * 6'
push:
# Run on all new release candidates
tags:
- '[0-9][0-9][0-9][0-9].[0-9][0-9]-RC[0-9]*'
- '[0-9][0-9][0-9][0-9].[0-9][0-9]'
- '[0-9][0-9][0-9][0-9].[0-9][0-9].*'
env:
# self-hosted runners are started by a systemd which is not a "login" shell
# this means that no local environment variables are loaded (e.g. /etc/environment)
# when the runner is started. So explicitly set RIOT_MAKEFILES_GLOBAL_PRE
# to set PORT and DEBUG_ADAPTER_ID per BOARD
RIOT_MAKEFILES_GLOBAL_PRE: '/builds/conf/makefiles.pre'
jobs:
connected_boards:
name: Get Connected Boards
runs-on: self-hosted
outputs:
boards: ${{ steps.ci-connected-boards.outputs.boards }}
steps:
# Get all currently connected boards if not passed through an input
- id: ci-connected-boards
run: echo "::set-output name=boards::$(make -C /builds/boards/ list-boards-json --no-print-directory)"
# Runs all tests on connected boards
compile_and_test_for_board:
name: ${{ matrix.board }}
runs-on: self-hosted
needs: connected_boards
# ci-riot-tribe has 8 cores, parallelism will depend on actually configured
# runners
strategy:
max-parallel: 7
fail-fast: false
matrix:
board: ${{ fromJson(needs.connected_boards.outputs.boards) }}
env:
BUILD_IN_DOCKER: 1
COMPILE_AND_TEST_FOR_BOARD: /builds/boards/RIOT/dist/tools/compile_and_test_for_board/compile_and_test_for_board.py
# args for compile_and_test_for_board script
COMPILE_AND_TEST_ARGS: --with-test-only --report-xml --incremental
# environment vars for compile_and_test_for_board script to pass
# USEMODULE and CFLAGS use:
# DOCKER_ENVIRONMENT_CMDLINE=\'-e USEMODULE=<name>\'
# DOCKER_ENVIRONMENT_CMDLINE=\'-e CFLAGS=-D<flag>\'
COMPILE_AND_TEST_VARS: ''
APPLICATIONS: ''
# Exclude 'tests/periph_timer_short_relative_set' since its expected
# to fail on most BOARDs
APPLICATIONS_EXCLUDE: 'tests/periph_timer_short_relative_set'
steps:
- name: Checkout RIOT
uses: actions/checkout@v2
with:
ref: ${{ github.event.inputs.riot_version }}
# Make sure it runs git clean -xdff before fetching
clean: true
- name: Run compile_and_test_for_board.py
run: |
${COMPILE_AND_TEST_VARS} ${COMPILE_AND_TEST_FOR_BOARD} . \
${{ matrix.board }} results-${{ matrix.board }} \
${COMPILE_AND_TEST_ARGS} \
--applications="${APPLICATIONS}" \
--applications-exclude="${APPLICATIONS_EXCLUDE}"
- name: Archive results
if: always()
uses: actions/upload-artifact@v2
with:
name: ${{ matrix.board }}
path: results-${{ matrix.board }}

81
.github/workflows/tools-buildtest.yml vendored Normal file
View File

@ -0,0 +1,81 @@
name: tools-buildtest
on:
push:
branches:
- master
tags:
- '*'
pull_request:
branches:
- '*'
jobs:
tools-build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@master
- name: Build flatc standalone
uses: aabadie/riot-action@v1
with:
cmd: make -C dist/tools/flatc
- name: Build mosquitto_rsmb standalone
uses: aabadie/riot-action@v1
with:
cmd: make -C dist/tools/mosquitto_rsmb
- name: Build bossa-1.8 standalone
uses: aabadie/riot-action@v1
with:
cmd: make -C dist/tools/bossa-1.8
- name: Build bossa-1.9 standalone
uses: aabadie/riot-action@v1
with:
cmd: make -C dist/tools/bossa-1.9
- name: Build bossa-nrf52 standalone
uses: aabadie/riot-action@v1
with:
cmd: make -C dist/tools/bossa-nrf52
- name: Build edbg standalone
uses: aabadie/riot-action@v1
with:
cmd: make -C dist/tools/edbg
- name: Build pic32prog standalone
uses: aabadie/riot-action@v1
with:
cmd: make -C dist/tools/pic32prog
- name: Build setsid standalone
uses: aabadie/riot-action@v1
with:
cmd: make -C dist/tools/setsid
- name: Build ethos
uses: aabadie/riot-action@v1
with:
cmd: make -C dist/tools/ethos
- name: Build uhcpd
uses: aabadie/riot-action@v1
with:
cmd: make -C dist/tools/uhcpd
- name: Build stm32 clk_conf
uses: aabadie/riot-action@v1
with:
cmd: make -C cpu/stm32/dist/clk_conf
- name: Build kinetis calc_spi_scalers
uses: aabadie/riot-action@v1
with:
cmd: make -C cpu/kinetis/dist/calc_spi_scalers
- name: Build fixdep tool
uses: aabadie/riot-action@v1
with:
cmd: make -C dist/tools/fixdep
- name: Build lpc2k_pgm tool
uses: aabadie/riot-action@v1
with:
cmd: make -C dist/tools/lpc2k_pgm
- name: Build riotboot_serial tool
uses: aabadie/riot-action@v1
with:
cmd: make -C dist/tools/riotboot_serial
- name: Build ZEP dispatcher & topology generator
uses: aabadie/riot-action@v1
with:
cmd: make -C dist/tools/zep_dispatch

38
.github/workflows/tools-test.yml vendored Normal file
View File

@ -0,0 +1,38 @@
name: tools-test
on:
push:
branches:
- master
tags:
- '*'
pull_request:
branches:
- '*'
jobs:
python-tests:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@master
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v1
with:
python-version: 3.8
- name: Install dependencies
run: |
python -m pip install --upgrade pip
python -m pip install tox
python -m pip install kconfiglib
sudo apt-get update
sudo apt-get install gcc-multilib
- name: Test backport_pr
run: cd dist/tools/backport_pr && tox
- name: Test compile_and_test_for_board
run: cd dist/tools/compile_and_test_for_board && tox
- name: Test riotctrl_ctrl
run: cd dist/pythonlibs/riotctrl_ctrl && tox
- name: Test riotctrl_shell
run: cd dist/pythonlibs/riotctrl_shell && tox
- name: Test kconfig script
run: cd dist/tools/kconfiglib/tests && ./test.sh

23
.gitignore vendored
View File

@ -1,5 +1,7 @@
# Object files
*.o
# Target files
*.elf
# Documentation artifacts
doc/doxygen/html
doc/doxygen/latex
@ -7,14 +9,22 @@ doc/doxygen/man
doc/doxygen/*.log
doc/doxygen/*.db
doc/doxygen/*.tmp
# Built binaries
*bin
# bin (e.g.:build directory) and .bin files
bin
*.bin
# Build directory
/build
# AFL findings
fuzzing/**/findings/
# Backup files
*~
*.orig
.*.swn
.*.swo
.*.swp
*.save
*.rej
\#*\#
cachegrind.out*
# Eclipse workspace files
.project
@ -69,8 +79,17 @@ results/
compile_commands.json
compile_flags.txt
# cache files of clangd (and probably other tools)
.cache/
# generated by clang-check for C++ code
*.plist
# suit manifest keys
keys/
# clangd language server
.clangd/
# custom clang-tidy flags, also used when using clangd language server
.clang-tidy

View File

@ -1,3 +1,8 @@
Benjamin Valentin <benjamin.valentin@ml-pa.com> <benjamin.valentin@ml-pa.com>
Benjamin Valentin <benjamin.valentin@ml-pa.com> <benpicco@googlemail.com>
Benjamin Valentin <benjamin.valentin@ml-pa.com> <benpicco@beuth-hochschule.de>
Benjamin Valentin <benjamin.valentin@ml-pa.com> <benpicco@zedat.fu-berlin.de>
Benjamin Valentin <benjamin.valentin@ml-pa.com> <benpicco@flauschlabor.de>
Cenk Gündoğan <mail-github@cgundogan.de> <cnkgndgn@gmail.com>
Cenk Gündoğan <mail-github@cgundogan.de> <mail@cgundogan.de>
Hauke Petersen <devel@haukepetersen.de> <hauke.petersen@fu-berlin.de>

394
.murdock
View File

@ -1,13 +1,141 @@
#!/bin/sh
: ${TEST_BOARDS_AVAILABLE:="nrf52dk samr21-xpro"}
: ${TEST_BOARDS_LLVM_COMPILE:="iotlab-m3 native nrf52dk mulle nucleo-f401re samr21-xpro slstk3402a"}
# uncomment and change this to limit builds, e.g.,
#export BOARDS="samr21-xpro native"
# and / or
#export APPS="examples/hello-world tests/unittests"
#
: ${TEST_BOARDS_AVAILABLE:="esp32-wroom-32 samr21-xpro"}
# temporarily disabling llvm builds until https://github.com/RIOT-OS/RIOT/pull/15595
# is in
#: ${TEST_BOARDS_LLVM_COMPILE:="iotlab-m3 native nrf52dk mulle nucleo-f401re samr21-xpro slstk3402a"}
: ${TEST_BOARDS_LLVM_COMPILE:=""}
: ${TEST_KCONFIG_BOARDS_AVAILABLE:="
adafruit-itsybitsy-m4
arduino-due
arduino-leonardo
arduino-mkrzero
arduino-mega2560
arduino-nano
atxmega-a1-xplained
atxmega-a3bu-xplained
avr-rss2
avsextrem
bastwan
bluepill
b-l475e-iot01a
cc1352-launchpad
cc2650-launchpad
derfmega128
dwm1001
esp32-ci
esp32-heltec-lora32-v2
esp8266-ci
esp8266-esp-12x
hamilton
hifive1
mbed_lpc1768
mega-xplained
microbit
mulle
native
nrf52840dk
nrf9160dk
nucleo-f072rb
nucleo-f103rb
nucleo-f207zg
nucleo-f334r8
nucleo-f429zi
nucleo-f767zi
nucleo-g071rb
nucleo-g474re
nucleo-l011k4
nucleo-l073rz
nucleo-l152re
nucleo-l433rc
nucleo-l552ze-q
p-nucleo-wb55
qn9080dk
remote-revb
same54-xpro
samr21-xpro
seeedstudio-gd32
slstk3400a
sltb001a
slwstk6220a
stm32f723e-disco
stm32mp157c-dk2
waspmote-pro
weact-f401ce
z1
"}
: ${TEST_KCONFIG_ENFORCE_APP_GROUPS:="
tests/cb_mux*
tests/congure_*
tests/driver_b*
tests/driver_f*
tests/driver_g*
tests/driver_h*
tests/driver_i*
tests/driver_j*
tests/driver_l*
tests/driver_o*
tests/driver_p*
tests/driver_q*
tests/driver_r*
tests/driver_s*
tests/driver_t*
tests/driver_u*
tests/driver_v*
tests/external_board_dirs
tests/periph_*
tests/pkg_elk
tests/pkg_uzlib
tests/prng_*
tests/trace
tests/xtimer_*
tests/ztimer_*
examples/hello-world
tests/ieee802154_hal
"}
# This list prevents boards from being tested by the TEST_KCONFIG_TEST_ALLOWLIST
# This should only be used for boards that require a lot of work, such as,
# requiring modelling of a clock tree.
# As a rule of thumb, only add boards here if there are not differences in
# modules or packages.
# Eventually this list will be removed...
#
: ${TEST_KCONFIG_BOARD_BLOCKLIST:="
6lowpan-clicker
pic32-wifire
"}
# This list will force all boards that are not in the TEST_KCONFIG_BOARD_BLOCKLIST
# to be tested on the apps. The purpose is to prevent new boards from skipping
# the kconfig implementations.
: ${TEST_KCONFIG_TEST_ALLOWLIST:="
examples/hello-world
tests/saul
tests/mtd_mapper
"}
: ${TEST_WITH_CONFIG_SUPPORTED:="examples/suit_update tests/driver_at86rf2xx_aes"}
export RIOT_CI_BUILD=1
export STATIC_TESTS=${STATIC_TESTS:-1}
export CC_NOCOLOR=1
export STATIC_TESTS=0
export CFLAGS_DBG=""
export DLCACHE_DIR=${DLCACHE_DIR:-~/.dlcache}
export ENABLE_TEST_CACHE=${ENABLE_TEST_CACHE:-1}
export MURDOCK_REDIS_HOST=${MURDOCK_REDIS_HOST:-127.0.0.1}
NIGHTLY=${NIGHTLY:-0}
RUN_TESTS=${RUN_TESTS:-${NIGHTLY}}
FULL_BUILD=${FULL_BUILD:-${NIGHTLY}}
# This is a work around for a bug in CCACHE which interacts very badly with
# some features of RIOT and of murdock. The result is that ccache is
@ -26,10 +154,63 @@ export ENABLE_TEST_CACHE=${ENABLE_TEST_CACHE:-1}
# It is only the combination of these three factors which causes this bug.
export OPTIONAL_CFLAGS_BLACKLIST="-gz"
NIGHTLY=${NIGHTLY:-0}
RUN_TESTS=${RUN_TESTS:-${NIGHTLY}}
DWQ_ENV="-E BOARDS -E APPS -E NIGHTLY -E RUN_TESTS -E ENABLE_TEST_CACHE
-E TEST_HASH -E CI_PULL_LABELS -ECI_BASE_BRANCH -ECI_BASE_COMMIT
-EPKG_USE_MIRROR -EAPPS_CHANGED -EBOARDS_CHANGED -ESTATIC_TESTS"
DWQ_ENV="-E BOARDS -E APPS -E NIGHTLY -E RUN_TESTS -E ENABLE_TEST_CACHE -E TEST_HASH"
if [ ${NIGHTLY} -eq 1 ]; then
export PKG_USE_MIRROR=0
fi
CFCR_ARGS="--upstreambranch ${CI_BASE_COMMIT}"
get_supported_kconfig_board_app() {
local board=$1
local appdir=$2
if is_in_list "${board}" "${TEST_KCONFIG_BOARD_BLOCKLIST}"; then
return 1
fi
# On nightlies run all possible kconfig tests on all boards
# Normally we don't want to do this as it adds quite a bit to build time
# and the subset of boards we are testing for are pretty good at catching
# any bugs...
# This will be over one day, I promise.
if [ ${NIGHTLY} -eq 1 ]; then
if is_in_list "${appdir}" "${TEST_KCONFIG_ENFORCE_APP_GROUPS}"; then
return 0
fi
if [ -f "${appdir}/app.config.test" ]; then
return 0
fi
fi
if is_in_list "${appdir}" "${TEST_KCONFIG_TEST_ALLOWLIST}"; then
return 0
fi
if is_in_list "${board}" "${TEST_KCONFIG_BOARDS_AVAILABLE}"; then
if is_in_list "${appdir}" "${TEST_KCONFIG_ENFORCE_APP_GROUPS}"; then
return 0
fi
if [ -f "${appdir}/app.config.test" ]; then
return 0
fi
fi
return 1
}
kconfig_module_packages_diff() {
local board=$1
local appdir=$2
make clean --no-print-directory -C ${appdir} BOARD=${board}
mmp=$(make --no-print-directory info-modules info-packages -C ${appdir} BOARD=${board})
make clean --no-print-directory -C ${appdir} BOARD=${board}
kmp=$(TEST_KCONFIG=1 make --no-print-directory info-modules info-packages -C ${appdir} BOARD=${board})
bash -c "diff <(echo \"${mmp}\") <(echo \"${kmp}\")"
}
check_label() {
local label="${1}"
@ -116,8 +297,36 @@ get_apps() {
# Only print for boards in $BOARDS.
get_supported_boards() {
local appdir=$1
local only_changed=0
if [ -n "$APPS_CHANGED" ]; then
if is_in_list "$appdir" "${APPS_CHANGED}"; then
# this app has changed -> build for all boards
true
else
# this is not a changed app -> build for changed boards
only_changed=1
fi
else
if [ -n "$BOARDS_CHANGED" ]; then
echo d
# no changed apps, some changed boards -> build for changed boards
only_changed=1
else
# no changed apps list, no changed boards list -> build all boards
true
fi
fi
if [ $only_changed -eq 1 ]; then
BOARDS_=${BOARDS}
export BOARDS="$BOARDS_CHANGED"
fi
local boards="$(make --no-print-directory -C$appdir info-boards-supported 2>/dev/null || echo broken)"
export BOARDS="${BOARDS_}"
if [ "$boards" = broken ]; then
echo "makefile_broken"
return
@ -168,8 +377,12 @@ get_app_board_toolchain_pairs() {
# use dwqc to create full "appdir board toolchain" compile job list
get_compile_jobs() {
check_label "CI: skip compile test" && return
update_changed_modules || return
get_apps | \
dwqc ${DWQ_ENV} -s \
maybe_filter_changed_apps | \
dwqc ${DWQ_ENV} --queue default-first -s \
${DWQ_JOBID:+--subjob} \
"$0 get_app_board_toolchain_pairs \${1} $0 compile"
}
@ -196,11 +409,11 @@ test_hash_calc() {
test_cache_get() {
test "${ENABLE_TEST_CACHE}" = "1" || return 1
test -n "$(redis-cli get $1)" > /dev/null
test -n "$(redis-cli -h ${MURDOCK_REDIS_HOST} get $1)" > /dev/null
}
test_cache_put() {
redis-cli set "$1" ok
redis-cli -h ${MURDOCK_REDIS_HOST} set "$1" ok
}
# compile one app for one board with one toolchain. delete intermediates.
@ -228,13 +441,44 @@ compile() {
# sanity checks
[ $# -ne 2 ] && error "$0: compile: invalid parameters (expected \$appdir \$board:\$toolchain)"
[ ! -d "$appdir" ] && error "$0: compile: error: application directory \"$appdir\" doesn't exist"
[ ! -d "boards/$board" ] && error "$0: compile: error: board directory \"boards/$board\" doesn't exist"
# compile
# We compile a first time with Kconfig based dependency
# resolution for regression purposes. $TEST_KCONFIG contains a
# list of board-application tuples that are currently modeled to
# run with Kconfig
should_check_kconfig_hash=0
if get_supported_kconfig_board_app "${board}" "${appdir}"; then
should_check_kconfig_hash=1
BOARD=${board} make -C${appdir} clean
CCACHE_BASEDIR="$(pwd)" BOARD=${board} TOOLCHAIN=${toolchain} RIOT_CI_BUILD=1 TEST_KCONFIG=1 \
make -C${appdir} all test-input-hash -j${JOBS:-4}
RES=$?
if [ $RES -eq 0 ]; then
kconfig_test_hash=$(test_hash_calc "${BINDIR}")
else
kconfig_test_hash=0
echo "An error occurred while compiling using Kconfig";
fi
fi
# compile without Kconfig
CCACHE_BASEDIR="$(pwd)" BOARD=$board TOOLCHAIN=$toolchain RIOT_CI_BUILD=1 \
make -C${appdir} clean all test-input-hash -j${JOBS:-4}
RES=$?
test_hash=$(test_hash_calc "$BINDIR")
if [ ${should_check_kconfig_hash} != 0 ]; then
if [ ${kconfig_test_hash} != ${test_hash} ]; then
echo "Hashes of binaries with and without Kconfig mismatch for ${appdir} with ${board}";
echo "Please check that all used modules are modelled in Kconfig and enabled";
kconfig_module_packages_diff ${board} ${appdir}
RES=1
fi
fi
# run tests
if [ $RES -eq 0 ]; then
if [ $RUN_TESTS -eq 1 -o "$board" = "native" ]; then
@ -243,7 +487,6 @@ compile() {
BOARD=$board make -C${appdir} test
RES=$?
elif is_in_list "$board" "$TEST_BOARDS_AVAILABLE"; then
test_hash=$(test_hash_calc "$BINDIR")
echo "-- test_hash=$test_hash"
if test_cache_get $test_hash; then
echo "-- skipping test due to positive cache hit"
@ -314,7 +557,11 @@ run_test() {
BOARD=$board TOOLCHAIN=${toolchain} make -C$appdir flash-only termdeps -j2
# now run the actual test
BOARD=$board TOOLCHAIN=${toolchain} make -C$appdir test
if is_in_list "${appdir}" "${TEST_WITH_CONFIG_SUPPORTED}"; then
BOARD=${board} TOOLCHAIN=${toolchain} make -C${appdir} test-with-config
else
BOARD=$board TOOLCHAIN=${toolchain} make -C$appdir test
fi
RES=$?
if [ $RES -eq 0 -a -n "$TEST_HASH" ]; then
@ -325,26 +572,119 @@ run_test() {
return $RES
}
# execute static tests
static_tests() {
local repo=${CI_BASE_REPO:-https://github.com/RIOT-OS/RIOT}
local branch=${CI_BASE_BRANCH:-master}
basename_list () {
for path in $*; do
basename $path
done
}
print_worker
OUT="$(git remote add upstream $repo 2>&1 && git fetch upstream ${branch}:${branch} 2>&1)"
RES=$?
if [ $RES -ne 0 ]; then
echo "$OUT"
exit 1
# calls out to can_fast_ci_run.py.
#
# returns 1 if nothing should be built.
# or, returns 0, potentially meddling with BOARDS, APPS, BOARDS_CHANGED, APPS_CHANGED.
update_changed_modules() {
# early out if there's no base commit info
if [ -z "${CI_BASE_COMMIT}" ]; then
return 0
fi
BUILDTEST_MCU_GROUP=static-tests ./dist/tools/ci/build_and_test.sh
# early out if a full build is requested
if [ $FULL_BUILD -eq 1 ]; then
return 0
fi
# if these are set, just build what's requested.
if [ -n "$BOARDS" -o -n "$APPS" ]; then
return 0
fi
# do full build if requested by label
check_label "CI: full build" && return 0
# call out to can_fast_ci_run.py
# that script will output e.g.,
# APPS_CHANGED="foo/bar foo/barfoo"
# BOARDS_CHANGED="foo/bar foo/barfoo"
# just eval that output, so we set those variables directly in this shell.
eval $(dist/tools/ci/can_fast_ci_run.py \
${CFCR_ARGS} \
--changed-boards --changed-apps \
2>/dev/null || echo CFCR_ERROR=1)
# if this errors, it means we cannot skip any builds.
if [ -n "$CFCR_ERROR" ]; then
return 0
fi
# if can_fast_ci_run exits 0 but doesn't output any changed apps or boards,
# it means we can skip all compile jobs.
if [ -z "$APPS_CHANGED" -a -z "$BOARDS_CHANGED" ]; then
return 1
fi
# can_fast_ci_run.py outputs "board/fooboard", but the rest of this script
# expects a board name without leading "board/".
if [ -n "$BOARDS_CHANGED" ]; then
export BOARDS_CHANGED="$(basename_list $BOARDS_CHANGED)"
fi
# if no board has changed, filter by just setting APPS.
# same for apps -> BOARDS.
if [ -z "$APPS_CHANGED" -a -n "$BOARDS_CHANGED" ]; then
export BOARDS="$(echo $BOARDS_CHANGED | $(_greplist ${BOARDS}))"
unset BOARDS_CHANGED
elif [ -n "$APPS_CHANGED" -a -z "$BOARDS_CHANGED" ]; then
export APPS="$(echo $APPS_CHANGED | $(_greplist ${APPS}))"
unset APPS_CHANGED
fi
export APPS_CHANGED
export BOARDS_CHANGED
}
maybe_filter_changed_apps() {
# if no boards have changes, only a subset of the apps need to be built.
# else, all apps need to be passed, as they'll need to be built for
# the changed boards.
if [ -n "$BOARDS_CHANGED" ]; then
cat
else
$(_greplist $APPS_CHANGED)
fi
}
# execute static tests
static_tests() {
print_worker
build_filter_status
[ "$STATIC_TESTS" = "1" ] && \
./dist/tools/ci/static_tests.sh
true
}
build_filter_status() {
echo "--- can_fast_ci_run:"
if [ $FULL_BUILD -eq 1 ]; then
echo "--- doing full build."
return
fi
dist/tools/ci/can_fast_ci_run.py ${CFCR_ARGS} --explain --json --changed-boards --changed-apps
if [ -n "$MURDOCK_TEST_CHANGE_FILTER" ]; then
echo MURDOCK_TEST_CHANGE_FILTER=$MURDOCK_TEST_CHANGE_FILTER
fi
echo ""
update_changed_modules
if [ -n "$CFCR_ERROR" ]; then
echo "-- can_fast_ci_run.py exited non-zero"
fi
}
get_non_compile_jobs() {
[ "$STATIC_TESTS" = "1" ] && \
echo "$0 static_tests###{ \"jobdir\" : \"exclusive\" }"
echo "$0 static_tests"
}
get_jobs() {

View File

@ -1,19 +0,0 @@
sudo: required
language: minimal
services:
- docker
before_install:
- docker pull riot/riotbuild
before_script:
# Fetch the base branch when it is not `master`
- git fetch origin "${TRAVIS_BRANCH}:${TRAVIS_BRANCH}"
script:
- docker run -a STDIN -a STDOUT -a STDERR --rm -u "$(id -u)"
-e CI_BASE_BRANCH="${TRAVIS_BRANCH}"
-v "${PWD}:/data/riotbuild" -v /etc/localtime:/etc/localtime:ro
riot/riotbuild make static-test

49
CITATION.cff Normal file
View File

@ -0,0 +1,49 @@
cff-version: 1.2.0
message: "If you use this software, please cite it as below."
title: RIOT - The friendly Operating System for the IoT
url: https://www.riot-os.org/
preferred-citation:
type: article
authors:
- family-names: Baccelli
given-names: Emmanuel
- family-names: Gündoğan
given-names: Cenk
- family-names: Hahm
given-names: Oliver
- family-names: Kietzmann
given-names: Peter
- family-names: Lenders
given-names: Martine S.
- family-names: Petersen
given-names: Hauke
- family-names: Schleiser
given-names: Kaspar
- family-names: Schmidt
given-names: Thomas C.
- family-names: Wählisch
given-names: Matthias
title: "RIOT: An Open Source Operating System for Low-End Embedded Devices in the IoT"
url: https://www.riot-os.org/assets/pdfs/riot-ieeeiotjournal-2018.pdf
journal: IEEE Internet of Things Journal
scope: "If you use this software, we prefer that you cite our paper as below."
publisher:
- name: IEEE
month: 3
year: 2018
volume: 5
issue: 6
pages: 4428-4440
doi: 10.1109/JIOT.2018.2815038
abstract: >
As the Internet of Things (IoT) emerges, compact operating systems (OSs) are
required on low-end devices to ease development and portability of IoT
applications. RIOT is a prominent free and open source OS in this space. In
this paper, we provide the first comprehensive overview of RIOT. We cover
the key components of interest to potential developers and users: the
kernel, hardware abstraction, and software modularity, both conceptually and
in practice for various example configurations. We explain operational
aspects like system boot-up, timers, power management, and the use of
networking. Finally, the relevant APIs as exposed by the OS are discussed
along with the larger ecosystem around RIOT, including development and open
source community aspects.

155
CODEOWNERS Normal file
View File

@ -0,0 +1,155 @@
## CODEOWNERS for autoreview assigning in github
# https://help.github.com/en/articles/about-code-owners#codeowners-syntax
# Order is important; for each modified file, the last matching
# pattern takes the most precedence.
*.md @jia200x
/.murdock @kaspar030
/boards/common/atxmega/ @nandojve
/boards/common/esp*/ @gschorcht
/boards/common/nrf*/ @aabadie @haukepetersen
/boards/common/nucleo*/ @aabadie
/boards/common/silabs/ @basilfx
/boards/common/slwstk6000b/ @basilfx
/boards/common/stm32/ @aabadie @fjmolinas
/boards/e180-zg120b-tb/ @basilfx
/boards/esp*/ @gschorcht @yegorich
/boards/hamilton/ @Hyungsin
/boards/ikea-tradfri/ @basilfx
/boards/lobaro-lorabox/ @leandrolanzieri
/boards/nrf*/ @aabadie @haukepetersen
/boards/nucleo*/ @aabadie @fjmolinas
/boards/phynode-kw41z/ @jia200x
/boards/sam*-xpro/ @dylad
/boards/same54-xpro/ @benpicco
/boards/sensebox_samd21/ @leandrolanzieri @jia200x
/boards/slstk340*/ @basilfx
/boards/sltb001a/ @basilfx
/boards/slwstk6000b/ @basilfx
/boards/slwstk6220a/ @basilfx
/boards/sodaq-sara-aff/ @leandrolanzieri
/boards/stk3*00/ @basilfx
/boards/openmote*/ @MrKevinWeiss
/boards/cc1352p-launchpad @luisan00
/boards/atxmega*/ @nandojve
/core/ @kaspar030
/cpu/arm7_common/ @kaspar030 @maribu
/cpu/avr8_common/ @kYc0o @maribu @nandojve
/cpu/atmega*/ @kYc0o @maribu
/cpu/atxmega/ @nandojve
/cpu/cc2538/ @hexluthor @smlng @fjmolinas
/cpu/cc26x0/ @hexluthor @smlng
/cpu/cc26x2_cc13x2/ @hexluthor @smlng
/cpu/cc26xx_cc13xx/ @hexluthor @smlng
/cpu/cortexm_common/ @kaspar030 @bergzand
/cpu/efm32/ @basilfx
/cpu/esp*/ @gschorcht
/cpu/fe310/ @aabadie @kaspar030 @bergzand
/cpu/kinetis/ @fjmolinas
/cpu/lpc2387/ @benpicco @maribu
/cpu/mips*/ @kaspar030 @francois-berder
/cpu/msp430*/ @kaspar030 @gschorcht
/cpu/nrf*/ @aabadie @haukepetersen
/cpu/nrf52/radio/nrf802154/ @bergzand @SemjonKerner @jia200x
/cpu/sam0_common/ @benpicco @dylad @keestux
/cpu/samd21/ @dylad @biboc
/cpu/samd5x/ @benpicco @dylad
/cpu/saml1x/ @dylad
/cpu/saml21/ @dylad
/cpu/stm32*/ @aabadie @fjmolinas @DipSwitch @vincent-d
/cpu/stm32/periph/eth* @maribu
/cpu/stm32/periph/ptp.c @maribu
/doc/ @aabadie @jia200x
/dist/tools/sliptty/ @miri64
/dist/tools/dhcpv6-pd_ia/ @miri64
/drivers/ad7746/ @leandrolanzieri
/drivers/at24mac/ @benpicco
/drivers/at86rf215/ @benpicco
/drivers/at86rf2xx/ @daniel-k @Hyungsin @jia200x @smlng @miri64
/drivers/bh1900nux/ @wosym
/drivers/bq2429x/ @jeandudey
/drivers/cc110x/ @maribu
/drivers/cc1xxx_common/ @maribu
/drivers/ccs811/ @gschorcht
/drivers/enc28j60/ @haukepetersen
/drivers/dcf77/ @daexel
/drivers/dht/ @wosym
/drivers/dose/ @jue89
/drivers/ds18/ @leandrolanzieri
/drivers/itg320x/ @gschorcht
/drivers/mcp2515/ @wosym
/drivers/mrf24j40/ @bergzand
/drivers/pca9685/ @gschorcht
/drivers/sht3x/ @gschorcht
/drivers/si70xx/ @basilfx
/drivers/slipdev/ @miri64
/drivers/sx127x/ @aabadie @jia200x
/drivers/ws281x/ @maribu
/drivers/xbee/ @haukepetersen @miri64
/drivers/include/periph/ @MrKevinWeiss
/drivers/periph_common/ @MrKevinWeiss
/drivers/include/periph/ptp.h @maribu
/pkg/cryptoauthlib/ @Einhornhool @PeterKietzmann
/pkg/lua/ @jcarrano
/pkg/lwip/ @miri64
/pkg/gecko_sdk/ @basilfx
/pkg/lora-serialization/ @leandrolanzieri
/pkg/micropython/ @bergzand @kaspar030
/pkg/openthread/ @Hyungsin @jia200x
/pkg/semtech-loramac/ @aabadie @jia200x
/pkg/tinydtls/ @rfuentess @leandrolanzieri
/pkg/u8g2/ @basilfx
/pkg/ucglib/ @basilfx
/pkg/wakaama/ @leandrolanzieri
/sys/clif/ @leandrolanzieri
/sys/event/ @kaspar030
/sys/evtimer/ @kaspar030
/sys/fmt/ @kaspar030
/sys/net/application_layer/gcoap/ @haukepetersen @kb2ma @chrysn
/sys/net/application_layer/nanocoap/ @kaspar030 @haukepetersen @kb2ma @chrysn
/sys/include/net/sock* @maribu
/sys/net/netif/ @miri64 @jia200x
/sys/net/gnrc/network_layer/ @miri64
/sys/net/gnrc/transport_layer/tcp/ @brummer-simon @miri64
/sys/net/gnrc/transport_layer/udp/ @miri64
/sys/net/gnrc/link_layer/lorawan/ @jia200x
/sys/net/gnrc/netif/ @miri64 @jia200x
/sys/net/gnrc/routing/rpl/ @cgundogan @emmanuelsearch
/sys/net/ @miri64 @haukepetersen @PeterKietzmann @cgundogan
/sys/pm_layered/ @kaspar030
/sys/random/fortuna/ @basilfx
/sys/riotboot/ @kaspar030 @fjmolinas
/sys/suit @kaspar030 @fjmolinas @bergzand
/sys/tsrb/ @kaspar030
/sys/usb/ @bergzand @dylad @aabadie
/sys/xtimer/ @kaspar030 @MichelRottleuthner
/sys/include/ztimer.h @kaspar030 @bergzand
/sys/include/ztimer/ @kaspar030 @bergzand
/sys/ztimer/ @kaspar030 @bergzand
/tests/ @smlng @leandrolanzieri @aabadie @MichelRottleuthner @fjmolinas
/tests/candev/ @wosym
/tests/driver_bq2429x/ @jeandudey
/tests/driver_dht/ @wosym
/tests/gnrc* @miri64
/tests/lwip* @miri64
/tests/slip/ @miri64
/tests/unittests @miri64
/tests/*/tests/*.py @miri64
/tests/cpu_efm32_features/ @basilfx
# KConfig maintainers will be notified about all KConfig changes
Kconfig @leandrolanzieri @jia200x @cgundogan
pm.c @kaspar030

View File

@ -2,11 +2,20 @@
## General
* Code shall be [C99](http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1256.pdf)
* Code shall be [C11](http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf)
compliant.
* Avoid dynamic memory allocation (malloc/free, new, etc.)! It will break
real-time guarantees, increase code complexity, and make it more likely to use
more memory than available.
* Avoid the use of floating point arithmetic. Not every MCU has a FPU and software
floating point libraries cause unnecessary overhead.
Instead use fixed-point integers and transform equations so that they stay within
the range of integer math.
An easy way to ensure this is by multiplying by a constant factor, ideally a power
of two - this is a simple shift operation.
Take care that intermediate values do not exceed the range of the data type you are using.
When writing drivers, do not convert the measurement data into float, but instead
choose an appropriate integer format / SI prefix.
* Please obey the Linux coding style as described in
https://www.kernel.org/doc/Documentation/process/coding-style.rst with the
following modifications and additions:
@ -49,7 +58,7 @@
uint8_t b;
} foobar_t;
```
* Use of a seperate line typedef for structs is allowed for forward
* Use of a separate line typedef for structs is allowed for forward
declarations, e.g.,
```
typedef struct mystruct mystruct_t;
@ -88,7 +97,7 @@
## Return values
* Any function must return one of the following values:
* Every function must return one of the following values or none (void):
* logical value (zero or not zero)
* an error code (given as a negative number or zero) or a positive status
value

View File

@ -158,15 +158,6 @@ void my_class::do_something_else() {
- Keywords are always followed by a whitespace: `if (...)`, `template <...>`,
`while (...)`, etc.
- Leave a whitespace after `!` to make negations easily recognizable:
```cpp
if (! sunny())
stay_home();
else
go_outside();
```
- Opening braces belong to the same line:
```cpp

View File

@ -4,78 +4,153 @@ Thank you for your interest in contributing to RIOT! There are many ways to
contribute, and we appreciate all of them. You can jump to the major sections
of this document using the following links:
* [Feature Requests][feature-requests]
* [Bug Reports][bug-reports]
* [Pull Requests][pull-requests]
* [Getting Started][getting-started]
* [Bug Reports and Feature Requests][issues]
* [Contributing code][contributing-code]
* [Writing Documentation][writing-documentation]
* [Working with Git][working with git]
If you have questions, please send an email to users@riot-os.org or
devel@riot-os.org mailing list or chat on [#riot-os][riot-chat].
If you have questions, please write a post over at our [forum] or chat on
`#riot-os:matrix.org` on [Matrix].
As a reminder, all contributors are expected to follow our
[Code of Conduct](CODE_OF_CONDUCT.md).
[riot-chat]: http://webchat.freenode.net?channels=riot-os
[forum]: https://forum.riot-os.org
[Matrix]: https://matrix.to/#/#riot-os:matrix.org
## Feature Requests
[feature-requests]: #feature-requests
## Getting Started
[getting-started]: #getting-started
If you are just beginning to work with RIOT you might first want to read our
[documentation]. Especially the following sections might be of interest to you
Before opening a new feature request, check the
[existing feature requests][existing-feature-request] if there's one already
open on the same topic.
- [Getting Started](https://doc.riot-os.org/getting-started.html)
- [Creating modules](https://doc.riot-os.org/creating-modules.html)
- [Creating an application](https://doc.riot-os.org/creating-an-application.html)
To request new features or enhancements, just open a new
[feature request issue][new-feature-request]. Describe your use case, why you
need this feature and why this feature is important for RIOT.
[documentation]: https://doc.riot-os.org
[existing-feature-request]: https://github.com/RIOT-OS/RIOT/issues?q=state:open+type:issue+label:"Type:+new+feature"
[new-feature-request]: https://github.com/RIOT-OS/RIOT/issues/new?template=feature_request.md&title=Feature+Request:
## Bug reports and feature requests
[issues]: #bug-reports-and-feature-requests
Both bug reports and feature request, big or small, are welcome.
## Bug Reports
[bug-reports]: #bug-reports
Before submitting a feature request, please check if an [open issue][existing-feature-request]
already exists. If this is not the case, [submit a feature request][feature-request].
Describe your use case, why you need this feature and why this feature is important for RIOT.
While bugs are unfortunate, they're a reality in software. We can't fix what we
don't know about, so please report liberally. If you're not sure if something
is a bug or not, feel free to file a bug report anyway.
Before filing a bug report, please check if an [open issue][existing-bug]
already exists. If this is not the case, [submit a new bug report][bug-report].
If you're not sure if something is a bug or not, feel free to file a bug report anyway.
**If you believe reporting your bug publicly represents a security risk to
RIOT users, please send an email describing the bug to security@riot-os.org**.
RIOT users, please send an email describing the bug to <security@riot-os.org>**.
We would appreciate waiting for a 6 months grace period before reporting it on
public channels, to allow us adequate time to release the fix.
Before reporting a bug, have a look at [open bugs][existing-bugs-link]. Maybe
someone has already reported your error.
[bug reports]: https://github.com/RIOT-OS/RIOT/issues/new?template=bug_report.md
[feature requests]: https://github.com/RIOT-OS/RIOT/issues/new?template=feature_request.md
Once you have verified that the bug you have found hasn't been reported, opening an issue is as easy as
clicking on [this link][bug-report-link] and filling out the fields.
[existing-feature-request]: https://github.com/RIOT-OS/RIOT/issues?q=state:open+type:issue+label:"Type:+new+feature"
[feature-request]: https://github.com/RIOT-OS/RIOT/issues/new?template=feature_request.md&title=Feature+Request:
[existing-bug]: https://github.com/RIOT-OS/RIOT/issues?q=state:open+type:issue+label:"Type:+bug"
[bug-report]: https://github.com/RIOT-OS/RIOT/issues/new?template=bug_report.md&title=Bug:
[existing-bugs-link]: https://github.com/RIOT-OS/RIOT/issues?q=state:open+type:issue+label:"Type:+bug"
[bug-report-link]: https://github.com/RIOT-OS/RIOT/issues/new?template=bug_report.md&title=Bug:
## Contributing code
[contributing-code]: #contributing-code
If you think your work should be integrated in the main RIOT repository, take
the following steps:
Each bug report issue uses a template with 5 sections that are there to help
other contributors understand your issue and eventually reproduce it:
1. Fork the RIOT git repository (if you haven't done this already).
1. Create a branch for your contribution.
1. Make sure your code is in compliance with RIOTs [coding conventions].
1. Make commits. Make sure to follow RIOTs [commit conventions].
1. Push this branch to your fork on GitHub.
1. Open a [pull request][open-a-pull-request]. See [pull requests].
1. RIOT maintainers will set [labels] and provide feedback.
1. Address this feedback. See [working with git].
1. Your code is merged in RIOT master branch when it passes review.
#### Description
Be sure to read the [general tips] below.
#### Steps to reproduce the issue
[open-an-issue]: https://github.com/RIOT-OS/RIOT/issues?q=state:open+type:issue+label:"Type:+bug"
[labels]: https://github.com/RIOT-OS/RIOT/wiki/RIOT%27s-labeling-system
[open-a-pull-request]: https://help.github.com/articles/using-pull-requests
#### Expected results
### General Tips
[general tips]: #general-tips
From experience, the following recommendations help to get a software
contribution into RIOT master faster:
#### Actual results
- **Ask around for help!** Either offline or through one of our communication
channels (see above). The earlier you check your feature design with other
people, the less likely it is that it is denied during the review process.
- **Verify your concept early!** If you work on your own until the code
*looks* good enough to show publicly, you might miss some design flaws others
might have spotted earlier.
- **Keep it simple!** Try to use what is already there and don't change existing
APIs if not absolutely necessary.
- **Keep it small!** A PR with >1000 lines of changes will very likely make
even the most active reviewer put your review on their long to-do list.
- **Keep it modular!** Make extensions to a feature or new features for a
platform optionally to use.
- **Provide tests!** They should be comprehensible and easy to be executed.
Alternatively comprehensive testing procedures should be provided with your
pull request.
#### Versions
### Coding conventions
[coding conventions]: #coding-conventions
To fill the `Versions` section, you can use the script provided in the RIOT git
repository:
```
make print-versions
```
RIOT has extensive [coding conventions][coding-conventions].
It is possible to check if your code follows these conventions:
In summary, try to include as much information as possible to help maintainers
or other developers fix the bug quickly.
* You can [uncrustify] `.c` and `.h` files:
## Pull Requests
[pull-requests]: #pull-requests
```console
$ uncrustify -c $RIOTBASE/uncrustify-riot.cfg --no-backup <your file>
```
**Note**: The `--no-backup` flag makes uncrustify *replace* the current file
with a formatted version.
* RIOT provides static test tools to verify the quality of changes (cppcheck,
trailing whitespaces, documentation, etc). These tools are wrapped in a
single `make` target: `static-test`.
*Watch out:* the command below will rebase your branch on your master branch,
so make sure they can be rebased (e.g. there's no potential conflict).
```console
$ make static-test
```
Use it before opening a PR to perform last time checks.
[coding-conventions]: CODING_CONVENTIONS.md
### Commit conventions
[commit conventions]: #commit-conventions
* Each commit should target changes of specific parts/modules of RIOT. The
commits use the following pattern:
```
area of code: description of changes
```
You can use multi-line commit messages if you want to detail more the
changes.
For example:
```
periph/timer: Document that set_absolute is expected to wrap
Most timers are implemented this way already, and keeping (documenting)
it that way allows the generic timer_set implementation to stay as
simple as it is.
```
### Pull Requests
[pull requests]: #pull-requests
GitHub's Pull Request (PR) feature is the primary mechanism used to make
contributions to the RIOT codebase. GitHub itself has some great documentation
@ -84,11 +159,6 @@ We use the [fork and pull model][development-models], where contributors push
changes to their personal fork and create pull requests to bring those changes
into the source repository.
[about-pull-requests]: https://help.github.com/articles/about-pull-requests/
[development-models]: https://help.github.com/articles/creating-a-pull-request-from-a-fork
### General rules
* Before opening a new Pull Request, have a look at
[existing ones][existing-pull-requests]. Maybe someone has already opened one
about the same thing. If it's the case, you might be able to help with the
@ -97,168 +167,44 @@ into the source repository.
Old and stalled [PRs are sometimes archived][archived-pull-requests] with the
"State: archived" label, maybe one of them is also about the same topic.
* Each Pull Request form uses a template with 3 sections that are there to help
maintainers understand your contribution and help them in testing it:
#### Contribution description
#### Testing procedure
#### Issues/PRs references
* The Pull Request title should reflect what it is about and be in the same form
as the [commit conventions].
* Each Pull Request form uses a template that is there to help
maintainers understand your contribution and help them in testing it.
Please fill each section with as much information as possible.
* The Pull Request title should reflect what it is about and be in the form:
`area of change: description of changes`
* We recommend that you leave the *'Allow edits from maintainers'* check box ticked.
This will allow maintainer finalizing your PR by pushing in your branch.
In general, this speeds up the PR merge in the main repository.
Note that this is not an obligation.
* Remember that smaller PRs tend to be merged faster, so keep your changes as
concise as possible. They should be confined to a single explainable
change, and be runnable on their own. So don't hesitate to split your PRs
into smaller ones when possible.
* In the Pull Request form, we recommend that you leave the
"Allow edits from maintainers" check box ticked. This will allow maintainer
finalizing your PR by pushing in your branch. In general, this speeds up the
PR merge in the main repository. Note that this is not an obligation.
* Check if your code follows the [coding conventions][coding-conventions]. If
it doesn't, you can [uncrustify][uncrustify] a file:
$ uncrustify -c $RIOTBASE/uncrustify-riot.cfg <your file>
* RIOT provides static test tools to verify the quality of changes (cppcheck,
trailing whitespaces, documentation, etc). These tools are wrapped in a
single `make` target: `static-test`.
*Watch out:* the command below will rebase your branch on your master branch,
so make sure they can be rebased (e.g. there's no potential conflict).
$ make static-test
Use it before opening a PR to perform last time checks.
* Each commit should target changes of specific parts/modules of RIOT. The
commits use the following pattern:
`area of code: description of changes`.
You can use multi-line commit messages if you want to detail more the
changes.
* Try to answer reviews as quickly as possible to speed up the review process
and avoid stalled PRs.
* Maintainers try their best to review every PR as fast as possible, but they
are also only human and it can happen that they miss a few PRs or might be
preoccupied with other PRs. If it happens that your PR receives no review for
a long time, don't hesitate to gently solicit a review by commenting or
by explicitly mentioning a maintainer that you know is knowledgeable in the
area of the PR. You can also advertise the PR on devel@riot-os.org mailing
list and ask for a review there.
area of the PR. You can also advertise the PR on the [forum] and ask for a
review there.
* Try to answer reviews as quickly as possible to speed up the review process
and avoid stalled PRs.
You can find more information about RIOT development procedure on this
[wiki page][development-procedures].
[about-pull-requests]: https://help.github.com/articles/about-pull-requests/
[development-models]: https://help.github.com/articles/creating-a-pull-request-from-a-fork
[existing-pull-requests]: https://github.com/RIOT-OS/RIOT/pulls
[archived-pull-requests]: https://github.com/RIOT-OS/RIOT/pulls?q=is:pr+label:"State:+archived"
[coding-conventions]: CODING_CONVENTIONS.md
[uncrustify]: http://uncrustify.sourceforge.net
[development-procedures]: https://github.com/RIOT-OS/RIOT/wiki/Development-procedures
### Git usage
Using git is a bit difficult for newcomers. If you are completely new to git,
we recommend that you [start by learning it][try-github-io] a bit. You can also
read the official [getting started documentation][git-scm-getting-started].
In this section, we give the bare minimum for a better experience with our
development workflow on GitHub.
[try-github-io]: https://try.github.io/
[git-scm-getting-started]: https://git-scm.com/book/en/v2/Getting-Started-Git-Basics
#### Setup your local RIOT repository
Before you start modifying code, you need to fork the RIOT upstream repository
from the [RIOT main GitHub page][riot-github].
If it's your first time with git, configure your name and emails:
$ git config --global user.name = "<your name here>"
$ git config --global user.email = "<your email address here>"
Then clone locally your fork of RIOT (replace `account name` with your actual
login on GitHub):
$ git clone git@github.com:<account name>/RIOT.git
You can keep any branch of your local repository up-to-date with the upstream
master branch with the following commands:
$ git checkout <branch name>
$ git pull --rebase https://github.com/RIOT-OS/RIOT.git
Use it before opening a PR. This will at least ensure the PR is mergeable but
also that it is up-to-date with the upstream repository.
[riot-github]: https://github.com/RIOT-OS/RIOT
#### Work on branches
Avoid opening PR from the `master` branch of your fork to the master branch of
the RIOT upstream repository: update your master branch and start a new branch
from it.
$ git checkout master
$ git pull --rebase https://github.com/RIOT-OS/RIOT.git
$ git checkout -b <new branch>
# Do your changes, commit, update with latest upstream master
$ git push
#### Add fixup commits during review
To keep the history of changes easier to track for reviewers, it is recommended
to push your review request updates in fixup commits.
Let's say your PR contains 3 commits with comments: `prefix1: change 1`,
`prefix2: change 2` and `prefix3: change 3`.
Instead of committing changes in `prefix2` in a 4th commit `prefix2: change 4`,
you can use the `--fixup` option:
$ git add /path/of/prefix2
$ git commit --fixup <prefix2 commit hash>
#### Squash commits after review
Squashing a commit is done using the rebase subcommand of git in interactive
mode:
$ git rebase master -i
You can find information on rebasing in
[GitHub rebase documentation][about-git-rebase].
[about-git-rebase]: https://help.github.com/articles/about-git-rebase/
If you used [fixup commits](#add-fixup-commits-during-review) during the review
phase, squashing commits can be performed in a single command:
$ git rebase -i --autosquash
**Watch out: Don't squash your commit until a maintainer asks you to do it.**
Otherwise the history of review changes is lost and for large PRs, it
makes it difficult for the reviewer to follow them. It might also happen that
you introduce regression and won't be able to recover them from previous
commits.
Once squashing is done, you will have to force push your branch to update the
PR:
$ git push --force-with-lease
## Writing Documentation
[writing-documentation]: #writing-documentation
@ -271,12 +217,146 @@ the modules, cpus, boards and packages documentation.
General documentation pages are written in Markdown and located in
`doc/doxygen/src`.
To generate the documentation, simply run:
$ make doc
To generate the documentation, simply run the following
from the base directory of the RIOT source code.
```console
$ make doc
```
The generated documentation is located in `doc/doxygen/html`
[doxygen]: http://www.doxygen.nl/
## Working with Git
[working with git]: #working-with-git
Using git is a bit difficult for newcomers. If you are completely new to git,
we recommend that you [start by learning it][try-github-io] a bit. You can also
read the official [getting started documentation][git-scm-getting-started].
In this section, we give the bare minimum for a better experience with our
development workflow on GitHub.
[try-github-io]: https://try.github.io/
[git-scm-getting-started]: https://git-scm.com/book/en/v2/Getting-Started-Git-Basics
### Setup your local RIOT repository
Before you start modifying code, you need to fork the RIOT upstream repository
from the [RIOT main GitHub page][riot-github].
If it's your first time with git, configure your name and emails:
```console
$ git config --global user.name = "<your name here>"
$ git config --global user.email = "<your email address here>"
```
Then clone locally your fork of RIOT (replace `account name` with your actual
login on GitHub):
```console
$ git clone git@github.com:<account name>/RIOT.git
```
You can keep any branch of your local repository up-to-date with the upstream
master branch with the following commands:
```console
$ git checkout <branch name>
$ git pull --rebase https://github.com/RIOT-OS/RIOT.git
```
Use it before opening a PR. This will at least ensure the PR is mergeable but
also that it is up-to-date with the upstream repository.
[riot-github]: https://github.com/RIOT-OS/RIOT
### Work on branches
Avoid opening PR from the `master` branch of your fork to the master branch of
the RIOT upstream repository: update your master branch and start a new branch
from it.
```console
$ git checkout master
$ git pull --rebase https://github.com/RIOT-OS/RIOT.git
$ git checkout -b <new branch>
```
Do your changes, commit, update with latest upstream master
```console
$ git push
```
### Add fixup commits during review
To keep the history of changes easier to track for reviewers, it is recommended
to push your review request updates in fixup commits.
Let's say your PR contains 3 commits with comments: `prefix1: change 1`,
`prefix2: change 2` and `prefix3: change 3`.
Instead of committing changes in `prefix2` in a 4th commit `prefix2: change 4`,
you can use the `--fixup` option:
```console
$ git add /path/of/prefix2
$ git commit --fixup <prefix2 commit hash>
```
### Squash commits after review
Squashing a commit is done using the rebase subcommand of git in interactive
mode:
```console
$ git rebase master -i
```
You can find information on rebasing in
[GitHub rebase documentation][about-git-rebase].
[about-git-rebase]: https://help.github.com/articles/about-git-rebase/
If you used [fixup commits](#add-fixup-commits-during-review) during the review
phase, squashing commits can be performed in a single command:
```console
$ git rebase -i --autosquash
```
**Watch out: Don't squash your commit until a maintainer asks you to do it.**
Otherwise the history of review changes is lost and for large PRs, it
makes it difficult for the reviewer to follow them. It might also happen that
you introduce regression and won't be able to recover them from previous
commits.
If you encounter a merge conflict you could either resolve it by hand with an
editor and use
```console
$ git add -p
```
To add your changes or use a merge tool like [meld](https://meldmerge.org/) to
resolve your merge conflict.
```console
$ git mergetool
```
After the merge conflict is resolved you can continue to rebase by using
```console
$ git rebase --continue
```
Once squashing is done, you will have to force push your branch to update the
PR:
```console
$ git push --force-with-lease
```

63
Kconfig Normal file
View File

@ -0,0 +1,63 @@
# Copyright (c) 2019 HAW Hamburg
#
# 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.
#
mainmenu "RIOT Configuration"
# Load macro definitions
rsource "kconfigs/Kconfig.consts"
# Load feature declarations
rsource "kconfigs/Kconfig.features"
# Load error symbols
rsource "kconfigs/Kconfig.errors"
# For now, get used modules as macros from this file (see kconfig.mk)
osource "$(KCONFIG_GENERATED_DEPENDENCIES)"
# Load first board configurations, which might override CPU's
orsource "$(BOARDDIR)/Kconfig"
orsource "$(RIOTCPU)/$(CPU)/Kconfig"
rsource "$(RIOTBOARD)/Kconfig"
rsource "$(RIOTCPU)/Kconfig"
# The application may declare new symbols as well
osource "$(APPDIR)/Kconfig"
rsource "core/Kconfig"
rsource "drivers/Kconfig"
rsource "sys/Kconfig"
rsource "pkg/Kconfig"
menu "External Modules"
osource "$(KCONFIG_EXTERNAL_MODULE_CONFIGS)"
endmenu # External Modules
menu "External Packages"
osource "$(KCONFIG_EXTERNAL_PKG_CONFIGS)"
endmenu # External Packages
comment "RIOT is in a migration phase."
comment "Some configuration options may not be here. Use CFLAGS instead."
comment "!! ERROR: There are conflicting modules active !!"
depends on ERROR_MODULES_CONFLICT != ""
config TEST_KCONFIG
bool
default y if '$(TEST_KCONFIG)' = '1'
help
This is used during the Kconfig migration to test the module dependency
modelling. Don't change the default value unless you know what you are
doing.
config DEVELHELP
bool "Development Help"
help
Set to enable code in RIOT that does safety checking which might not be
needed in a production environment but helps in the development
process.

View File

@ -31,6 +31,8 @@ Reason for removal:
- feature was never used and there is no reason for keeping it
~~~~~~~~~~~~~~~~~~~
Additionally, a link reference for the commit on GitHub is added to the bottom of this document.
By putting the name of the removed feature and the commit hash in the same line,
one can very quickly find the commit using `git grep`.
@ -40,6 +42,69 @@ This way, their names are never removed from the RIOT repository.
# Removed Features
### pkg/libcoap [d83d08f0995a88f399e70a7d07b44dd780082436]
Author:
- Martine Lenders <mlenders@inf.fu-berlin.de>
Reasons for removal:
- Not maintained anymore, no updates for 8 years
- Upstream libcoap allows building with RIOT, so there is a migration path for users
### sys/net/gnrc/nettest [cdc252ab7bd4161cc046bf93a3e55995704b24d4]
Author:
- Martine Lenders <mlenders@inf.fu-berlin.de>
Reasons for removal:
- Not maintained anymore
- Not used in GNRC
### boards/chronos [ed3887ac5c1e95308c2827bce3cdca8b0f146c22]
Author(s):
- Oliver Hahm <oliver.hahm@inria.fr>
- Kaspar Schleiser <kaspar@schleiser.de>
Reason for removal:
- board is quite outdated
- board cannot be automatically tested for lack of UART
- board has many special cases, which hurt upgrade to msp430-elf-gcc 9.x
- the onboard radio has been unsupported for a while
- no one seems to use the board, no one seems to maintain it
### sys/net/gnrc/application_layer/tftp [0e2a62078850e1ecc74db2db4d639cf2d8fb96d3]
Author:
- DipSwitch <dipswitch@ownage4u.nl>
Reasons for removal:
- Not maintained anymore.
- Existing quality and security defects.
### pkg/oonf_api [c829f820ee870bffc60c7df688d2da8373553212]
Author:
- Benjamin Valentin <benpicco@googlemail.com>
Reasons for removal:
- Package has not been update since 2013.
- Tests were never integrated to the CI.
- NHDP, which was the only upstream user, has been removed.
### sys/net/routing/nhdp [9026823bb906f64168d7d38e52be92f390353dc8]
Author:
- Fabian Nack <nack@inf.fu-berlin.de>
Reasons for removal:
- Not maintained anymore.
- Does not comply with the current RIOT programming practices.
### sys/ubjson [bea30c3f8949ebd9fdf4a9bf0a987652889930f5]
Author(s):
- René Kijewski <rene.kijewski@fu-berlin.de>
Reasons for removal:
- Unsafe code.
- Did not comply with RIOT standards.
- More standard alternatives available (such as CBOR).
### boards/jiminy-mega256rfr2 [232aed3e18118624b862d36bfec7cd1c21ca2d26]
Author:
- Josua Arndt <jarndt@ias.rwth-aachen.de>
@ -137,5 +202,109 @@ Author(s):
Reason for removal:
- broke the abstraction of `gnrc_pktbuf`
- its only user within the RIOT code base `gnrc_ipv6_ext` was reworked in
f671a87fe2c539c3aecd595ae03fa4f6f209d042 so it is not needed anymore.
- the function was deprecated in f2760c033c5f332be076b25aa212aca4007c3d65
[f671a87fe2c539c3aecd595ae03fa4f6f209d042] so it is not needed anymore.
- the function was deprecated in [f2760c033c5f332be076b25aa212aca4007c3d65]
### boards/wsn430-v1_3b, boards/wsn430-v1_4 [e63cd54f3b1e002a7895bb7c46af889b341c1a15]
Author(s):
- Hauke Petersen <hauke.petersen@fu-berlin.de>
- Martine Lenders <m.lenders@fu-berlin.de>
- Milan Babel <babel@inf.fu-berlin.de>
- Oliver Hahm <oliver.hahm@inria.fr>
Reason for removal:
- no longer accessible on the IoT-LAB testbed
### pkg/emb6 [4f243c52eabefe709d78560ce7f1d502d737a999]
Author(s):
- Martine S. Lenders <m.lenders@fu-berlin.de>
Reason for removal:
- Stale upstream (last update to date in Mar 2018)
- Ported version even older (last update Feb 2016)
- Updating to more recent version would be more effort than its worth
### GNRC_NETTYPE_IOVEC [4f243c52eabefe709d78560ce7f1d502d737a999]
Author(s):
- Martine S. Lenders <m.lenders@fu-berlin.de>
- Hauke Petersen <devel@haukepetersen.de>
Reason for removal:
- Unused since [9fb2f541baca469e34fa01b004d6f19385700ce9]
### pkg/nordic_softdevice_ble [35b6ccedf31f10a5f8e4f97609ad5b10c28bdc34]
Author(s):
- Hauke Petersen <hauke.petersen@fu-berlin.de>
- Kaspar Schleiser <kaspar@schleiser.de>
- Martine Lenders <m.lenders@fu-berlin.de>
- Wojciech Bober <wojciech.bober@nordicsemi.no>
Reason for removal:
- Outdated, unmaintained and no longer working
### gnrc_pktbuf_replace_snip() [72821a502f073006643cb4ef7815fc8c42563ce6]
Author(s):
- Joakim Nohlgård <joakim.nohlgard@eistec.se>
- Martine S. Lenders <m.lenders@fu-berlin.de>
Reason for removal:
- Unused, untested and no longer needed
### sys/irq_handler [a2dd6f90e51ca9edef643ba72bd1fd18113cf0d2]
Author(s):
- Gunar Schorcht <gunar@schorcht.net>
Reason for removal:
- Provides some feature as `sys/event_thread`
- Has been deprecated directly in the first release it was provided
### boards/slwstk6220a [cab1ea66b49e3c72e2827c8686c09d84ae3ef9a9]
Author(s):
- Hauke Petersen <hauke.petersen@fu-berlin.de>
- Bas Stottelaar <basstottelaar@gmail.com>
Reason for removal:
- The old implementation of the SLWSTK6220A based on `cpu/ezr32wg` did not use
the Gecko SDK, that other EFM32-based boards do use
- The old implementation had limited peripherals supported
- New implementation (with the same name) that is based on `cpu/efm32` was
added in commit [fe941ac9fe3f81c0f08ff3b8564cf439639abcda]
### boards/fox [81458c8eed8949c686d5ded652dbee10748e860b]
Author(s):
- Thomas Eichinger <thomas.eichinger@fu-berlin.de>
Reason for removal:
- Hardware not available so can't be tested
[d83d08f0995a88f399e70a7d07b44dd780082436]: https://github.com/RIOT-OS/RIOT/commit/d83d08f0995a88f399e70a7d07b44dd780082436
[cdc252ab7bd4161cc046bf93a3e55995704b24d4]: https://github.com/RIOT-OS/RIOT/commit/cdc252ab7bd4161cc046bf93a3e55995704b24d4
[ed3887ac5c1e95308c2827bce3cdca8b0f146c22]: https://github.com/RIOT-OS/RIOT/commit/ed3887ac5c1e95308c2827bce3cdca8b0f146c22
[0e2a62078850e1ecc74db2db4d639cf2d8fb96d3]: https://github.com/RIOT-OS/RIOT/commit/0e2a62078850e1ecc74db2db4d639cf2d8fb96d3
[c829f820ee870bffc60c7df688d2da8373553212]: https://github.com/RIOT-OS/RIOT/commit/c829f820ee870bffc60c7df688d2da8373553212
[9026823bb906f64168d7d38e52be92f390353dc8]: https://github.com/RIOT-OS/RIOT/commit/9026823bb906f64168d7d38e52be92f390353dc8
[bea30c3f8949ebd9fdf4a9bf0a987652889930f5]: https://github.com/RIOT-OS/RIOT/commit/bea30c3f8949ebd9fdf4a9bf0a987652889930f5
[232aed3e18118624b862d36bfec7cd1c21ca2d26]: https://github.com/RIOT-OS/RIOT/commit/232aed3e18118624b862d36bfec7cd1c21ca2d26
[a2bcd7539ce1931b7aec0077ea71dadd62c96edd]: https://github.com/RIOT-OS/RIOT/commit/a2bcd7539ce1931b7aec0077ea71dadd62c96edd
[ee6b6b9c388b78fcec7ba6e239a6c76041b9bbb7]: https://github.com/RIOT-OS/RIOT/commit/ee6b6b9c388b78fcec7ba6e239a6c76041b9bbb7
[9447cb303426d7c6348bb84999f88bf929cd6263]: https://github.com/RIOT-OS/RIOT/commit/9447cb303426d7c6348bb84999f88bf929cd6263
[ea73cc49eacd45640b9660134c4c92b887cb2716]: https://github.com/RIOT-OS/RIOT/commit/ea73cc49eacd45640b9660134c4c92b887cb2716
[99009af25e201bbc182d376e99df34133417be6c]: https://github.com/RIOT-OS/RIOT/commit/99009af25e201bbc182d376e99df34133417be6c
[cfa9580f319508f858c8fe30ecce8b2b59b6caa3]: https://github.com/RIOT-OS/RIOT/commit/cfa9580f319508f858c8fe30ecce8b2b59b6caa3
[b3eb9b8cf23f0702fa725d536df6ad6528f84189]: https://github.com/RIOT-OS/RIOT/commit/b3eb9b8cf23f0702fa725d536df6ad6528f84189
[7bc271807cecbffbb01a37c56a367b98fb823573]: https://github.com/RIOT-OS/RIOT/commit/7bc271807cecbffbb01a37c56a367b98fb823573
[fc45d7c5ac3d46bfdfb21c243cd3d4881bc5c836]: https://github.com/RIOT-OS/RIOT/commit/fc45d7c5ac3d46bfdfb21c243cd3d4881bc5c836
[b83430aa625a1d42f11f9badf5e5cfbb8efacd99]: https://github.com/RIOT-OS/RIOT/commit/b83430aa625a1d42f11f9badf5e5cfbb8efacd99
[f671a87fe2c539c3aecd595ae03fa4f6f209d042]: https://github.com/RIOT-OS/RIOT/commit/f671a87fe2c539c3aecd595ae03fa4f6f209d042
[f2760c033c5f332be076b25aa212aca4007c3d65]: https://github.com/RIOT-OS/RIOT/commit/f2760c033c5f332be076b25aa212aca4007c3d65
[e63cd54f3b1e002a7895bb7c46af889b341c1a15]: https://github.com/RIOT-OS/RIOT/commit/e63cd54f3b1e002a7895bb7c46af889b341c1a15
[4f243c52eabefe709d78560ce7f1d502d737a999]: https://github.com/RIOT-OS/RIOT/commit/4f243c52eabefe709d78560ce7f1d502d737a999
[3cac6e0979468ba56659291fd1cd11096611589d]: https://github.com/RIOT-OS/RIOT/commit/3cac6e0979468ba56659291fd1cd11096611589d
[9fb2f541baca469e34fa01b004d6f19385700ce9]: https://github.com/RIOT-OS/RIOT/commit/9fb2f541baca469e34fa01b004d6f19385700ce9
[35b6ccedf31f10a5f8e4f97609ad5b10c28bdc34]: https://github.com/RIOT-OS/RIOT/commit/35b6ccedf31f10a5f8e4f97609ad5b10c28bdc34
[72821a502f073006643cb4ef7815fc8c42563ce6]: https://github.com/RIOT-OS/RIOT/commit/72821a502f073006643cb4ef7815fc8c42563ce6
[a2dd6f90e51ca9edef643ba72bd1fd18113cf0d2]: https://github.com/RIOT-OS/RIOT/commit/a2dd6f90e51ca9edef643ba72bd1fd18113cf0d2
[cab1ea66b49e3c72e2827c8686c09d84ae3ef9a9]: https://github.com/RIOT-OS/RIOT/commit/cab1ea66b49e3c72e2827c8686c09d84ae3ef9a9
[fe941ac9fe3f81c0f08ff3b8564cf439639abcda]: https://github.com/RIOT-OS/RIOT/commit/fe941ac9fe3f81c0f08ff3b8564cf439639abcda
[81458c8eed8949c686d5ded652dbee10748e860b]: https://github.com/RIOT-OS/RIOT/commit/81458c8eed8949c686d5ded652dbee10748e860b

View File

@ -117,6 +117,11 @@ complete that no input from the original developer or maintainer is required.
- Be friendly. Respect the original author, bearing in mind that their coding
style or their design may be just as valid as the way you would have done
it and of course, always follow the [Code of Conduct].
- If a contributor has opened a PR, the reviewer should attempt to
help the author of the contribution to get it to its best shape and
according to the RIOT Standard™. If there is disagreement, its important
to understand the reasons behind and always give technical arguments,
pros and cons or snippets.
### Organisation of reviewing between maintainers
@ -155,6 +160,28 @@ GitHub's review sidebar.
If there are multiple maintainers reviewing a PR, always give the other
maintainers reasonable time to ACK before dismissing their review.
### Release, Feature Freeze, and Backports
Before the official release of a new RIOT version, two feature freeze periods
are announced on the
[RIOT development email list](https://lists.riot-os.org/mailman/listinfo/devel):
The soft feature freeze and the hard feature freeze. During the soft feature
freeze only PRs with minor impact should be merged into master. The hard feature
freeze begins when the release manager creates a new release branch. Therefore,
the restriction on merging PRs into the master branch are lifted at that point.
Once the release branch is created, no backports of new features will be
accepted. Instead, backports should consist only of bug fixes or of reverting
features that were added during the last development period (and not part of any
release), but didn't reach the required maturity or API stability yet. For
bigger changes (which explicitly includes any revert), the PR has to be
announced to the maintainer mailing list and should be merged no sooner than
48h after the announcement and needs at least two ACKs.
In case of security relevant backports (both bug fixes and reverts), the
announcement can be skipped and the fix merged once at least two ACKs are
there.
[list of maintainers]: https://github.com/RIOT-OS/RIOT/wiki/Maintainers
[Best Practices]: https://github.com/RIOT-OS/RIOT/wiki/Best-Practice-for-RIOT-Programming
[Comparing build sizes]: https://github.com/RIOT-OS/RIOT/wiki/Comparing-build-sizes

View File

@ -22,7 +22,11 @@ clean:
@echo "Cleaning all build products for the current board"
@for dir in $(APPLICATION_DIRS); do "$(MAKE)" -C$$dir clean; done
distclean: docclean
pkg-clean:
@echo "Cleaning all package sources"
rm -rf build/pkg
distclean: docclean pkg-clean
@echo "Cleaning all build products"
@for dir in $(APPLICATION_DIRS); do "$(MAKE)" -C$$dir distclean; done
@ -34,8 +38,8 @@ welcome:
@echo ""
@echo "Please see our Quick Start Guide at:"
@echo " https://doc.riot-os.org/getting-started.html"
@echo "Or ask questions on our mailing list:"
@echo " users@riot-os.org (http://lists.riot-os.org/mailman/listinfo/users)"
@echo "You can ask questions or discuss with other users on our forum:"
@echo " https://forum.riot-os.org"
print-versions:
@./dist/tools/ci/print_toolchain_versions.sh
@ -43,4 +47,5 @@ print-versions:
include makefiles/boards.inc.mk
include makefiles/app_dirs.inc.mk
include makefiles/tools/riotgen.inc.mk
-include makefiles/tests.inc.mk

View File

@ -5,7 +5,7 @@ endif
#
# enable second expansion of prerequisites.
#
# Doing that here enables it globally for all modules and the application.
# Doing that here enables it globally for all modules
#
# See https://www.gnu.org/software/make/manual/html_node/Secondary-Expansion.html
# for what it can be used for.
@ -14,11 +14,13 @@ endif
unexport DIRS
DIRS := $(sort $(abspath $(DIRS)))
MODULE ?= $(shell basename $(CURDIR))
_MOD := $(shell basename $(CURDIR))
MODULE ?= $(_MOD)
.PHONY: all clean $(DIRS:%=ALL--%) $(DIRS:%=CLEAN--%)
.PHONY: all clean $(DIRS:%=ALL--%) $(DIRS:%=CLEAN--%) $(MODULE).module \
compile-commands $(DIRS:%=COMPILE-COMMANDS--%) $(MODULE).cleanup
all: $(BINDIR)/$(MODULE).a ..nothing
all: $(MODULE).module ..nothing
..nothing:
@:
@ -31,6 +33,9 @@ $(DIRS:%=ALL--%):
$(DIRS:%=CLEAN--%):
$(QQ)"$(MAKE)" -C $(@:CLEAN--%=%) clean
$(DIRS:%=COMPILE-COMMANDS--%):
$(QQ)"$(MAKE)" -C $(@:COMPILE-COMMANDS--%=%) compile-commands
## submodules
ifeq (1, $(SUBMODULES))
# don't use *.c as SRC if SRC is empty (e.g., no module selected)
@ -40,19 +45,24 @@ ifeq (1, $(SUBMODULES))
BASE_MODULE ?= $(MODULE)
# for each $(BASE_MODULE)_<name> in USEMODULE, add <name>.c to SRC
SRC += $(patsubst $(BASE_MODULE)_%,%.c,$(filter $(BASE_MODULE)_%,$(USEMODULE)))
# unless in SUBMODULES_NO_SRC
SRC += $(wildcard \
$(filter-out $(SUBMODULES_NO_SRC),\
$(patsubst $(BASE_MODULE)_%,%.c,\
$(filter $(BASE_MODULE)_%,$(USEMODULE)))))
# don't fail if a selected *.c file does not exist
ifeq (1, $(SUBMODULES_NOFORCE))
SRC := $(filter $(SRC), $(wildcard *.c))
endif
# remove duplicates
SRC := $(sort $(SRC))
endif
# By default consider C++ files has a .cpp extension
SRCXXEXT ?= cpp
ifeq ($(strip $(SRC))$(NO_AUTO_SRC),)
SRC := $(filter-out $(SRC_NOLTO), $(wildcard *.c))
endif
ifeq ($(strip $(SRCXX))$(NO_AUTO_SRC),)
SRCXX := $(wildcard *.cpp)
SRCXX := $(filter-out $(SRCXXEXCLUDE),$(wildcard *.$(SRCXXEXT)))
endif
ifeq ($(strip $(ASMSRC))$(NO_AUTO_SRC),)
ASMSRC := $(wildcard *.s)
@ -61,14 +71,40 @@ ifeq ($(strip $(ASSMSRC))$(NO_AUTO_SRC),)
ASSMSRC := $(wildcard *.S)
endif
# include makefile snippets for packages in $(USEPKG) that modify GENSRC:
-include $(USEPKG:%=$(RIOTPKG)/%/Makefile.gensrc)
ifneq (,$(SRCXX))
ifeq (,$(filter cpp,$(USEMODULE)))
ifneq (1,$(TEST_KCONFIG))
$(error Found C++ source, but feature "cpp" is not used. Add "FEATURES_REQUIRED += cpp")
else
$(error Found C++ source, but "cpp" module is not used. Enable the MODULE_CPP in Kconfig)
endif
endif
endif
compile-commands: | $(DIRS:%=COMPILE-COMMANDS--%)
$(file >$(BINDIR)/$(MODULE)/compile_cmds.txt,SRC: $(sort $(SRC) $(SRC_NO_LTO)))
$(file >>$(BINDIR)/$(MODULE)/compile_cmds.txt,SRC_NO_LTO: $(sort $(SRC_NO_LTO)))
$(file >>$(BINDIR)/$(MODULE)/compile_cmds.txt,SRCXX: $(sort $(SRCXX)))
$(file >>$(BINDIR)/$(MODULE)/compile_cmds.txt,CURDIR: $(CURDIR))
$(file >>$(BINDIR)/$(MODULE)/compile_cmds.txt,CFLAGS: $(CFLAGS))
$(file >>$(BINDIR)/$(MODULE)/compile_cmds.txt,LTOFLAGS: $(LTOFLAGS))
$(file >>$(BINDIR)/$(MODULE)/compile_cmds.txt,INCLUDES: $(INCLUDES))
$(file >>$(BINDIR)/$(MODULE)/compile_cmds.txt,CXXFLAGS: $(CXXFLAGS))
$(file >>$(BINDIR)/$(MODULE)/compile_cmds.txt,CXXINCLUDES: $(CXXINCLUDES))
$(file >>$(BINDIR)/$(MODULE)/compile_cmds.txt,CC: $(CC))
$(file >>$(BINDIR)/$(MODULE)/compile_cmds.txt,CXX: $(CXX))
$(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 $(PKG_PATHS) that modify GENSRC:
-include $(PKG_PATHS:%=%Makefile.gensrc)
GENOBJC := $(GENSRC:%.c=%.o)
OBJC_LTO := $(SRC:%.c=$(BINDIR)/$(MODULE)/%.o)
OBJC_NOLTO := $(SRC_NOLTO:%.c=$(BINDIR)/$(MODULE)/%.o)
OBJC := $(OBJC_NOLTO) $(OBJC_LTO)
OBJCXX := $(SRCXX:%.cpp=$(BINDIR)/$(MODULE)/%.o)
OBJCXX := $(SRCXX:%.$(SRCXXEXT)=$(BINDIR)/$(MODULE)/%.o)
ASMOBJ := $(ASMSRC:%.s=$(BINDIR)/$(MODULE)/%.o)
ASSMOBJ := $(ASSMSRC:%.S=$(BINDIR)/$(MODULE)/%.o)
@ -76,18 +112,25 @@ OBJ := $(OBJC) $(OBJCXX) $(ASMOBJ) $(ASSMOBJ) $(GENOBJC)
DEP := $(OBJC:.o=.d) $(OBJCXX:.o=.d) $(ASSMOBJ:.o=.d)
include $(RIOTMAKE)/blob.inc.mk
include $(RIOTMAKE)/tools/fixdep.inc.mk
$(BINDIR)/$(MODULE)/:
$(Q)mkdir -p $@
$(BINDIR)/$(MODULE).a $(OBJ): | $(BINDIR)/$(MODULE)/
OLD_OBJECTS = $(wildcard $(BINDIR)/$(MODULE)/*.o)
# Build the archive from the output directory to create relative thin archives
# This allows having them valid in and outside of docker
$(BINDIR)/$(MODULE).a: $(OBJ) | $(DIRS:%=ALL--%)
@# Recreate archive to cleanup deleted/non selected source files objects
$(Q)$(RM) $@
$(Q)cd $(@D) && $(AR) $(ARFLAGS) $(@F) $(subst $(@D)/,,$^)
# do not clean objects from bindist modules
ifeq (,$(filter $(MODULE),$(BIN_USEMODULE)))
OBJECTS_TO_REMOVE = $(filter-out $(OBJ),$(OLD_OBJECTS))
endif
$(MODULE).module compile-commands $(OBJ): | $(BINDIR)/$(MODULE)/
$(MODULE).module: $(OBJ) $(if $(OBJECTS_TO_REMOVE),$(MODULE).cleanup) | $(DIRS:%=ALL--%)
$(MODULE).cleanup:
$(Q)# cleanup non selected source files objects
$(Q)$(RM) $(OBJECTS_TO_REMOVE)
CXXFLAGS = $(filter-out $(CXXUWFLAGS), $(CFLAGS)) $(CXXEXFLAGS)
CCASFLAGS = $(filter-out $(CCASUWFLAGS), $(CFLAGS)) $(CCASEXFLAGS)
@ -96,29 +139,48 @@ CCASFLAGS = $(filter-out $(CCASUWFLAGS), $(CFLAGS)) $(CCASEXFLAGS)
$(OBJC_LTO): CFLAGS+=$(LTOFLAGS)
$(OBJC): $(BINDIR)/$(MODULE)/%.o: %.c $(RIOTBUILD_CONFIG_HEADER_C)
# Define dependencies for object files
OBJ_DEPS += $(RIOTBUILD_CONFIG_HEADER_C)
$(OBJC): $(BINDIR)/$(MODULE)/%.o: %.c $(OBJ_DEPS) | $(if $(SHOULD_RUN_KCONFIG),$(KCONFIG_GENERATED_AUTOCONF_HEADER_C))
$(Q)$(CCACHE) $(CC) \
-DRIOT_FILE_RELATIVE=\"$(patsubst $(RIOTBASE)/%,%,$(abspath $<))\" \
-DRIOT_FILE_NOPATH=\"$(notdir $<)\" \
$(CFLAGS) $(INCLUDES) -MD -MP -c -o $@ $(abspath $<)
$(CFLAGS) $(INCLUDES) -MQ '$@' -MD -MP -c -o $@ $(abspath $<)
ifneq (,$(SHOULD_RUN_KCONFIG))
$(Q)$(FIXDEP) $(@:.o=.d) $@ $(KCONFIG_SYNC_DIR) > $(@:.o=.tmp)
$(Q)mv $(@:.o=.tmp) $(@:.o=.d)
endif
$(GENOBJC): %.o: %.c $(RIOTBUILD_CONFIG_HEADER_C)
$(GENOBJC): %.o: %.c $(OBJ_DEPS) | $(if $(SHOULD_RUN_KCONFIG),$(KCONFIG_GENERATED_AUTOCONF_HEADER_C))
$(Q) $(CCACHE) $(CC) \
-DRIOT_FILE_RELATIVE=\"$(patsubst $(RIOTBASE)/%,%,$<)\" \
-DRIOT_FILE_NOPATH=\"$(notdir $<)\" \
$(CFLAGS) $(INCLUDES) -MD -MP -c -o $@ $<
$(CFLAGS) $(INCLUDES) -MQ '$@' -MD -MP -c -o $@ $<
ifneq (,$(SHOULD_RUN_KCONFIG))
$(Q)$(FIXDEP) $(@:.o=.d) $@ $(KCONFIG_SYNC_DIR) > $(@:.o=.tmp)
$(Q)mv $(@:.o=.tmp) $(@:.o=.d)
endif
$(OBJCXX): $(BINDIR)/$(MODULE)/%.o: %.cpp $(RIOTBUILD_CONFIG_HEADER_C)
$(OBJCXX): $(BINDIR)/$(MODULE)/%.o: %.$(SRCXXEXT) $(OBJ_DEPS) | $(if $(SHOULD_RUN_KCONFIG),$(KCONFIG_GENERATED_AUTOCONF_HEADER_C))
$(Q)$(CCACHE) $(CXX) \
-DRIOT_FILE_RELATIVE=\"$(patsubst $(RIOTBASE)/%,%,$(abspath $<))\" \
-DRIOT_FILE_NOPATH=\"$(notdir $<)\" \
$(CXXFLAGS) $(CXXINCLUDES) $(INCLUDES) -MD -MP -c -o $@ $(abspath $<)
$(CXXFLAGS) $(CXXINCLUDES) $(INCLUDES) -MQ '$@' -MD -MP -c -o $@ $(abspath $<)
ifneq (,$(SHOULD_RUN_KCONFIG))
$(Q)$(FIXDEP) $(@:.o=.d) $@ $(KCONFIG_SYNC_DIR) > $(@:.o=.tmp)
$(Q)mv $(@:.o=.tmp) $(@:.o=.d)
endif
$(ASMOBJ): $(BINDIR)/$(MODULE)/%.o: %.s
$(Q)$(AS) $(ASFLAGS) -o $@ $(abspath $<)
$(ASSMOBJ): $(BINDIR)/$(MODULE)/%.o: %.S $(RIOTBUILD_CONFIG_HEADER_C)
$(Q)$(CCAS) $(CCASFLAGS) $(INCLUDES) -MD -MP -c -o $@ $(abspath $<)
$(ASSMOBJ): $(BINDIR)/$(MODULE)/%.o: %.S $(OBJ_DEPS) | $(if $(SHOULD_RUN_KCONFIG),$(KCONFIG_GENERATED_AUTOCONF_HEADER_C))
$(Q)$(CCAS) $(CCASFLAGS) $(INCLUDES) -MQ '$@' -MD -MP -c -o $@ $(abspath $<)
ifneq (,$(SHOULD_RUN_KCONFIG))
$(Q)$(FIXDEP) $(@:.o=.d) $@ $(KCONFIG_SYNC_DIR) > $(@:.o=.tmp)
$(Q)mv $(@:.o=.tmp) $(@:.o=.d)
endif
# pull in dependency info for *existing* .o files
# deleted header files will be silently ignored

File diff suppressed because it is too large Load Diff

View File

@ -1,11 +1,15 @@
# Process FEATURES variables
# Process provided FEATURES
#
# The board/board common are responsible for defining the CPU and CPU_MODEL
# variables in their Makefile.features.
# This makes them available when setting features based on CPU_MODEL in the cpu
# Makefile.features and also during dependency resolution.
include $(RIOTBOARD)/$(BOARD)/Makefile.features
# Transition:
# Moving 'CPU/CPU_MODEL' to Makefile.features is an ongoing work and may not
# reflect the state of all boards for the moment.
include $(BOARDDIR)/Makefile.features
# Sanity check
ifeq (,$(CPU))
@ -14,37 +18,9 @@ endif
include $(RIOTCPU)/$(CPU)/Makefile.features
# Provide CPU as a feature to allow listing all boards with a CPU
FEATURES_PROVIDED += cpu_$(CPU)
# Resolve FEATURES_ variables
# Their value will only be complete after resolving dependencies
# Features that are required by the application but not provided by the BSP and
# features that are used but blacklisted (prepended with "!").
# Having features missing may case the build to fail.
FEATURES_MISSING = $(sort $(filter-out $(FEATURES_PROVIDED),$(FEATURES_REQUIRED)))
# Features that are only optional and not required at the same time.
# The policy is to by default use by features if they are provided by the BSP.
FEATURES_OPTIONAL_ONLY = $(sort $(filter-out $(FEATURES_REQUIRED),$(FEATURES_OPTIONAL)))
FEATURES_OPTIONAL_USED = $(sort $(filter $(FEATURES_PROVIDED),$(FEATURES_OPTIONAL_ONLY)))
# Optional features that will not be used because they are not provided
FEATURES_OPTIONAL_MISSING = $(sort $(filter-out $(FEATURES_PROVIDED),$(FEATURES_OPTIONAL_ONLY)))
# Features that are used for an application
FEATURES_USED = $(sort $(FEATURES_REQUIRED) $(FEATURES_OPTIONAL_USED))
# Used features that conflict when used together
FEATURES_CONFLICTING = $(sort $(foreach conflict,$(FEATURES_CONFLICT),$(call _features_conflicting,$(conflict))))
# Return conflicting features from the conflict string feature1:feature2
# $1: feature1:feature2
# Return the list of conflicting features
_features_conflicting = $(if $(call _features_used_conflicting,$(subst :, ,$1)),$(subst :, ,$1))
# Check if all features from the list are used
# $1: list of features that conflict together
# Return non empty on error
_features_used_conflicting = $(filter $(words $1),$(words $(filter $(FEATURES_USED),$1)))
# Features that are used by the application but blacklisted by the BSP.
# Having blacklisted features may cause the build to fail.
FEATURES_USED_BLACKLISTED = $(sort $(filter $(FEATURES_USED), $(FEATURES_BLACKLIST)))
# Features that are conflicting for all architectures
FEATURES_CONFLICT += picolibc:newlib
FEATURES_CONFLICT_MSG += "Only one standard C library can be used"

File diff suppressed because it is too large Load Diff

View File

@ -1,6 +1,14 @@
[![Nightly CI status master][master-ci-badge]][master-ci-link]
[![IRC][irc-badge]][irc-link]
[![Nightly HiL CI overview][hil-ci-badge]][hil-ci-link]
[![GitHub release][release-badge]][release-link]
[![License][license-badge]][license-link]
[![API docs][api-badge]][api-link]
[![Wiki][wiki-badge]][wiki-link]
[![Stack Overflow questions][stackoverflow-badge]][stackoverflow-link]
[![Twitter][twitter-badge]][twitter-link]
[![Matrix][matrix-badge]][matrix-link]
<p align="center"><img src="doc/doxygen/src/riot-logo.svg" width="66%"><!--
ZZZZZZ
ZZZZZZZZZZZZ
ZZZZZZZZZZZZZZZZ
@ -25,7 +33,7 @@
ZZZZZZ ZZZZZZ ZZZZZ 777 7777777777 777
ZZZZZZZZZZZZZZZ ZZZZ 777 77777777 777
ZZZZZZZZZZZ Z
ZZZZZ
ZZZZZ --></p>
The friendly Operating System for IoT!
@ -67,6 +75,30 @@ but not limited to:
* Sigfox
* LoRaWAN
## GETTING RIOT
The most convenient way to get RIOT is to clone it via Git
```console
$ git clone https://github.com/RIOT-OS/RIOT
```
this will ensure that you get all the newest features and bug fixes with the
caveat of an ever changing work environment.
If you prefer things more stable, you can download the source code of one of our
quarter annual releases [via Github][releases] as ZIP file or tarball. You can
also checkout a release in a cloned Git repository using
```console
$ git pull --tags
$ git checkout <YYYY.MM>
```
For more details on our release cycle, check our [documentation][release cycle].
[releases]: https://github.com/RIOT-OS/RIOT/releases
[release cycle]: https://doc.riot-os.org/release-cycle.html
## GETTING STARTED
* You want to start the RIOT? Just follow our
@ -77,21 +109,14 @@ For specific toolchain installation, follow instructions in the
[getting started](https://doc.riot-os.org/getting-started.html) page.
* The RIOT API itself can be built from the code using doxygen. The latest
version of the documentation is uploaded daily to
[riot-os.org/api](https://riot-os.org/api).
[doc.riot-os.org](https://doc.riot-os.org).
### USING THE NATIVE PORT WITH NETWORKING
If you compile RIOT for the native cpu and include the `netdev_tap` module,
you can specify a network interface like this: `PORT=tap0 make term`
## FORUM
Do you have a question, want to discuss a new feature, or just want to present
your latest project using RIOT? Come over to our [forum] and post to your hearts
content.
#### SETTING UP A TAP NETWORK
There is a shell script in `RIOT/dist/tools/tapsetup` called `tapsetup` which
you can use to create a network of tap interfaces.
*USAGE*
To create a bridge and two (or `count` at your option) tap interfaces:
./dist/tools/tapsetup/tapsetup [-c [<count>]]
[forum]: https://forum.riot-os.org
## CONTRIBUTE
@ -99,15 +124,8 @@ To contribute something to RIOT, please refer to our
[contributing document](CONTRIBUTING.md).
## MAILING LISTS
* RIOT OS kernel developers list
* devel@riot-os.org (https://lists.riot-os.org/mailman/listinfo/devel)
* RIOT OS users list
* users@riot-os.org (https://lists.riot-os.org/mailman/listinfo/users)
* RIOT commits
* commits@riot-os.org (https://lists.riot-os.org/mailman/listinfo/commits)
* Github notifications
* notifications@riot-os.org
(https://lists.riot-os.org/mailman/listinfo/notifications)
* RIOT commits: [commits@riot-os.org](https://lists.riot-os.org/mailman/listinfo/commits)
* Github notifications: [notifications@riot-os.org](https://lists.riot-os.org/mailman/listinfo/notifications)
## LICENSE
* Most of the code developed by the RIOT community is licensed under the GNU
@ -123,7 +141,22 @@ For more information, see the RIOT website:
https://www.riot-os.org
[api-badge]: https://img.shields.io/badge/docs-API-informational.svg
[api-link]: https://doc.riot-os.org/
[license-badge]: https://img.shields.io/github/license/RIOT-OS/RIOT
[license-link]: https://github.com/RIOT-OS/RIOT/blob/master/LICENSE
[master-ci-badge]: https://ci.riot-os.org/RIOT-OS/RIOT/master/latest/badge.svg
[master-ci-link]: https://ci.riot-os.org/nightlies.html#master
[irc-badge]: https://img.shields.io/badge/IRC-join%20chat%20%E2%86%92-blue.svg
[irc-link]: https://webchat.freenode.net?channels=%23riot-os
[matrix-badge]: https://img.shields.io/badge/chat-Matrix-brightgreen.svg
[matrix-link]: https://matrix.to/#/#riot-os:matrix.org
[merge-chance-link]: https://merge-chance.info/target?repo=RIOT-OS/RIOT
[release-badge]: https://img.shields.io/github/release/RIOT-OS/RIOT.svg
[release-link]: https://github.com/RIOT-OS/RIOT/releases/latest
[stackoverflow-badge]: https://img.shields.io/badge/stackoverflow-%5Briot--os%5D-yellow
[stackoverflow-link]: https://stackoverflow.com/questions/tagged/riot-os
[twitter-badge]: https://img.shields.io/badge/social-Twitter-informational.svg
[twitter-link]: https://twitter.com/RIOT_OS
[wiki-badge]: https://img.shields.io/badge/docs-Wiki-informational.svg
[wiki-link]: https://github.com/RIOT-OS/RIOT/wiki
[hil-ci-link]: https://hil.riot-os.org/results/nightly/latest/overview
[hil-ci-badge]: https://img.shields.io/badge/CI-HiL-blue

66
SECURITY.md Normal file
View File

@ -0,0 +1,66 @@
# RIOT Security Policy
All security bugs reported will be silently fixed in `master` and backported
to the previous release.
## Reporting a Vulnerability
If a security issue is discovered, please report it to security@riot-os.org.
A response will be provided within one week.
The issue will be tracked in the [security mailing list](mailto:security@riot-os.org).
The original reporter will be included in the discussion of the issue.
You can encrypt your report using gpg key id
[44C6AE441172F88D3423E81F5F7964D0F4239033][security-gpg], also included at the
bottom of this file.
[security-gpg]: https://riot-os.org/assets/keys/security.asc
## Notification of a Vulnerability
After a fix is provided the security issue will be privately disclosed to the
original reporter, RIOT security maintainers, and "Trusted RIOT Users".
A public announcement of the security fix will be made two weeks after the
point release, though this may vary depending on the severity and ability of
trusted RIOT users to provide the fix.
## Trusted RIOT Users
To access the "Trusted RIOT Users" notifications on the
[RIOT forum](https://forum.riot-os.org) please send information
on the RIOT based service or product as well as your
[forum](https://forum.riot-os.org) username to the
[security mailing list](mailto:security@riot-os.org).
Early notification of security bugs will be available and should not be shared
publicly.
If done, it will result in access removal from the "Trusted RIOT Users"
notifications.
## RIOT community GPG key
```
-----BEGIN PGP PUBLIC KEY BLOCK-----
mDMEYY4plhYJKwYBBAHaRw8BAQdALRZ/IJmifuwoSUYTVbKUy9z/m3y0ux6DLMD6
kMs13/+0J1JJT1QtT1Mgc2VjdXJpdHkgPHNlY3VyaXR5QHJpb3Qtb3Mub3JnPoiW
BBMWCAA+FiEERMauRBFy+I00I+gfX3lk0PQjkDMFAmGOKZYCGwMFCQPCZwAFCwkI
BwIGFQoJCAsCBBYCAwECHgECF4AACgkQX3lk0PQjkDMyggEA4lp3RDz+qj1K1veV
AlTh/L90rft7v7hZ9ROWD8mssD8BAI3sc+AESdkNf9lATsuH39/9jIi3CqLDdDxK
TJ9SQwcNiQIzBBABCAAdFiEEZi0l9uxO8DMbg2ZS/bt7xc+P5tsFAmGOKbkACgkQ
/bt7xc+P5tvQLA//fCVUg3B5N5J1gCOSGRlplzFO0DELNl8akecxxFuCUU74Hjyc
NSR4r8lQGhGvAVZLanBTprTWeYXtCuLAFfCwvNitbWXnmXRJawQ4k0TQfUXWNsbf
o84QHtKvxEEwLnubVfz+uATw0eahmU2beh2lEl1PKPnpnvc2q9eM019Ff7RV1poe
UD2ctDZ9yn1GDN6A1E9ejAqxowwPxZfafH6uvPcGnDtvBZ0SB2x+EXvFNDpdaFBm
GEqAOY+wBabk6XV9B5qhu0KeVy0ePHni8JaZQJZX+xo2Nzk14IG66nxBF0zz0qTj
2hntxygrS44lQffqkDl+W/Vyc31/k3vsemLQAaC+/ZV1ULxew1VCmBHKE201+8bS
VmQweoiVBa30HtftOhMtlSi+WHyzwG7KGiD148PJIuQx42Dj/iY0MLHCR5c32giF
tW0xJ6fDkVVC0LkLPfBbMJrKxpX5xyWnWVibWHyAXaI/Sh2oK9uIkvdPFh+rWNe7
Wr3Sokn3oUUE2BVkcOiZO9gMYngx6sDWazYwBMTaDxPISIdQofAPZ3LiW/f12wXq
V39RPXrlR3wDf8frhb8Jfxt1q0KHRbU3Drf8cGjpC42H/HazhH4QugbqfUv3BH0C
zJTYg+S79aDgIqUaW5ASxIi5e20jNKoaRnYg7Y1rYk4ttMtH72XylP1vuCK4OARh
jimWEgorBgEEAZdVAQUBAQdAQCSgXzft+sMtSz1vOEaT/s28u/LVmLjUoGtuAcns
in0DAQgHiH4EGBYIACYWIQRExq5EEXL4jTQj6B9feWTQ9COQMwUCYY4plgIbDAUJ
A8JnAAAKCRBfeWTQ9COQM+6YAP4w2R2qD9yO7ILcDWVyityM7+rmYrpqabbz07kh
CST7fgEAgvz7lVIT4bq7IqhdvcpOERC0Wu9c4AjyX9Y6KB3kIwI=
=3GfE
-----END PGP PUBLIC KEY BLOCK-----
```

34
Vagrantfile vendored
View File

@ -5,28 +5,20 @@ require 'fileutils'
RIOTBASE ||= "./"
Vagrant.configure(2) do |config|
# For a complete reference, please see the online documentation at https://docs.vagrantup.com.
Vagrant.configure("2") do |config|
config.vm.define "RIOT-VM"
config.vm.box = "RIOT/ubuntu1804"
config.ssh.username = "user"
config.vm.synced_folder RIOTBASE, "/home/user/RIOT"
config.vm.box = "RIOT/ubuntu1604"
if File.exists?(File.join(Dir.home, ".gitconfig"))
config.vm.provision "file", source: File.join(Dir.home, ".gitconfig"), destination: ".gitconfig"
end
config.vm.provider "virtualbox" do |vb|
vb.name = "RIOT-VM"
config.vm.provider :virtualbox do |v, override|
v.customize [ "guestproperty", "set", :id, "/VirtualBox/GuestAdd/VBoxService/--timesync-set-on-restore", 0]
vb.customize [ "guestproperty", "set", :id, "/VirtualBox/GuestAdd/VBoxService/--timesync-interval", 10000]
vb.customize [ "guestproperty", "set", :id, "/VirtualBox/GuestAdd/VBoxService/--timesync-min-adjust", 100]
vb.customize [ "guestproperty", "set", :id, "/VirtualBox/GuestAdd/VBoxService/--timesync-set-on-restore", 1]
vb.customize [ "guestproperty", "set", :id, "/VirtualBox/GuestAdd/VBoxService/--timesync-set-threshold", 10000]
# additional USB passthrough entries
# vb.customize ['usbfilter', 'add', '0', '--target', :id, '--name', '<custom_name>', '--vendorid', '<vID>', '--productid', '<pID>']
end
config.vm.synced_folder RIOTBASE, "/home/vagrant/RIOT"
if File.exists?(File.join(Dir.home, ".gitconfig"))
config.vm.provision "file", source: File.join(Dir.home, ".gitconfig"), destination: ".gitconfig"
end
# use a custom provisioning script
# config.vm.provision "shell", path: "dist/tools/vagrant/bootstrap.sh"
# additional USB passthrough entries
# v.customize ['usbfilter', 'add', '0', '--target', :id, '--name', '<custom_name>', '--vendorid', '<vID>', '--productid', '<pID>']
end
end

View File

@ -0,0 +1,15 @@
# Copyright (c) 2020 HAW Hamburg
#
# 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.
config BOARD
default "6lowpan-clicker" if BOARD_6LOWPAN_CLICKER
config BOARD_6LOWPAN_CLICKER
bool
default y
select CPU_MODEL_P32MX470F512H
select HAS_PERIPH_TIMER
select HAS_PERIPH_UART

View File

@ -0,0 +1,5 @@
ifneq (,$(filter saul_default,$(USEMODULE)))
USEMODULE += saul_gpio
endif
USEMODULE += newlib_syscalls_mips_uhi

View File

@ -0,0 +1,6 @@
CPU = mips_pic32mx
CPU_MODEL = p32mx470f512h
# Put defined MCU peripherals here (in alphabetical order)
FEATURES_PROVIDED += periph_timer
FEATURES_PROVIDED += periph_uart

View File

@ -0,0 +1,15 @@
# use pic32prog by default to program this board
PROGRAMMER ?= pic32prog
PROGRAMMERS_SUPPORTED += pic32prog
ifeq ($(PROGRAMMER),pic32prog)
# pic32prog
#
# For PICkit3:
#
# * Connect the chipKIT-Wi-Fire to USB
# * Connect the PICkit3 to ICSP holes
# * https://docs.creatordev.io/wifire/guides/wifire-programming/
# * The triangle `▶` goes into the port number 1 (a hole with a square around it)
# opposite side of the JP1 ICSP text.
FLASHFILE ?= $(HEXFILE)
endif

View File

@ -0,0 +1,20 @@
/*
* Copyright(C) 2016,2017, Imagination Technologies Limited and/or its
* affiliated group companies.
*
* 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.
*
*/
#include "board.h"
#include "periph/gpio.h"
extern void dummy(void);
void board_init(void)
{
/* Stop the linker from throwing away the PIC32 config register settings */
dummy();
}

View File

@ -0,0 +1,95 @@
/**
@defgroup boards_6lowpan-clicker MikroE 6LoWPAN Clicker
@ingroup boards
@brief Support for the MikroE 6LoWPAN Clicker
@deprecated Will not be available after the 2022.07 release. This includes
all MIPS based boards and cpus.
## Overview
The `6lowpan clicker` is an evaluation board by Mikroe featuring a
PIC32MX470F512H, a 6lowpan radio (CA810) by Cascoda and a Mikrobus
socket for expansion boards.
More general information on the board and related documentation can be found
[here](https://www.mikroe.com/clicker-6lowpan). Schematics for the board can be
found in the [manual](https://download.mikroe.com/documents/starter-boards/clicker/6lowpan/6lowpan-clicker-manual-v100.pdf).
## Hardware
### MCU
| MCU | PIC32MX470F512H |
|:---------- |:-------------------- |
| Family | PIC32MX (MIPS M4K) |
| Vendor | Microchip |
| RAM | 128KiB |
| Flash | 512KiB |
| Frequency | 120MHz |
| FPU | no |
| Timers | 5 (all 16-bit) |
| ADCs | 1x 28-channel 10-bit |
| USB 2.0 | 1 |
| UARTs | 4 |
| SPIs | 2 |
| I2Cs | 2 |
| RTC | yes |
| RNG | no |
| Vcc | 2.3V - 3.6V |
| Datasheet | [Datasheet](http://ww1.microchip.com/downloads/en/DeviceDoc/PIC32MX330350370430450470_Datasheet_DS60001185H.pdf) |
### User Interface
2 Buttons:
| NAME | T1 | T2 |
|:----- |:--- |:--- |
| Pin | RE7 | RB0 |
2 LEDs:
| NAME | LD1 | LD2 |
| ----- | --- | --- |
| Color | red | red |
| Pin | RB1 | RB2 |
## Implementation Status
| Device | ID | Supported | Comments |
|:---------------- |:--------------- |:--------- |:---------------------- |
| MCU | pic32mx470f512h | partly | |
| Low-level driver | GPIO | partly | gpio_irq not supported |
| | ADC | no | |
| | PWM | no | |
| | UART | yes | |
| | I2C | no | |
| | SPI | no | |
| | USB | no | |
| | RTT | no | |
| | RTC | no | |
| | Timer | no | |
## Using UART
This board doesn't open an UART or serial interface through the USB
automatically, and the USB device driver hasn't been implemented to RIOT.
Therefore, to open an UART interface one has to connect a usb/ttl converter to
the UART3 pins RF5 (RX) and RF4 (TX) available on the Mikrobus socket.
## Flashing the device
There are two ways to flash the MCU:
* Using MPLAB-IPE and a PICkit 3 (The RIOT build generates a hexfile
compatible with MPLAB-IPE)
* Using pic32prog and a PICkit 2 or a PICkit 3 (other devices might be
supported by pic32prog but were not tested). This is the preferred option
as it makes possible to flash the device using `make flash` command.
## Supported Toolchains
For using the 6lowpan-clicker board we strongly recommend the usage of the
[Codescape GNU Tools](https://codescape.mips.com) toolchain.
*/

View File

@ -0,0 +1,77 @@
/*
* Copyright(C) 2016,2017, Imagination Technologies Limited and/or its
* affiliated group companies.
*
* 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 boards_6lowpan-clicker
* @details
* see:
* https://www.mikroe.com/clicker-6lowpan
* For more information on the board.
*
* @{
*
* @file
* @brief board configuration for the MikroE 6LoWPAN Clicker
*
* @author Neil Jones <Neil.Jones@imgtec.com>
*/
#ifndef BOARD_H
#define BOARD_H
#include "cpu.h"
#include "periph_conf.h"
#ifdef __cplusplus
extern "C" {
#endif
/**
* @brief Set how many increments of the count register per uS
* needed by the timer code.
*/
#define TICKS_PER_US (48)
/**
* @name LED pin configuration
* @{
*/
#define LED1_PIN GPIO_PIN(PORT_B, 1)
#define LED2_PIN GPIO_PIN(PORT_B, 2)
#define LED1_MASK (1 << 1)
#define LED2_MASK (1 << 2)
#define LED1_ON (LATBSET = LED1_MASK)
#define LED1_OFF (LATBCLR = LED1_MASK)
#define LED1_TOGGLE (LATBINV = LED1_MASK)
#define LED2_ON (LATBSET = LED2_MASK)
#define LED2_OFF (LATBCLR = LED2_MASK)
#define LED2_TOGGLE (LATBINV = LED2_MASK)
/** @} */
/**
* @name Button pin configuration
* @{
*/
#define BTN0_PIN GPIO_PIN(PORT_E, 7)
#define BTN0_MODE GPIO_IN
#define BTN1_PIN GPIO_PIN(PORT_B, 0)
#define BTN1_MODE GPIO_IN
/** @} */
#ifdef __cplusplus
}
#endif
#endif /* BOARD_H */
/** @} */

View File

@ -0,0 +1,61 @@
/*
* Copyright (C) 2020 Francois Berder
*
* 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 boards_6lowpan-clicker
* @{
*
* @file
* @brief Configuration of SAUL mapped GPIO pins
*
* @author Francois Berder <fberder@outlook.fr>
*/
#ifndef GPIO_PARAMS_H
#define GPIO_PARAMS_H
#include "board.h"
#include "saul/periph.h"
#ifdef __cplusplus
extern "C" {
#endif
/**
* @brief GPIO configuration
*/
static const saul_gpio_params_t saul_gpio_params[] =
{
{
.name = "LD1",
.pin = LED1_PIN,
.mode = GPIO_OUT,
},
{
.name = "LD2",
.pin = LED2_PIN,
.mode = GPIO_OUT,
},
{
.name = "T1",
.pin = BTN0_PIN,
.mode = BTN0_MODE,
},
{
.name = "T2",
.pin = BTN1_PIN,
.mode = BTN1_MODE,
},
};
#ifdef __cplusplus
}
#endif
#endif /* GPIO_PARAMS_H */
/** @} */

View File

@ -0,0 +1,82 @@
/*
* Copyright(C) 2016,2017, Imagination Technologies Limited and/or its
* affiliated group companies.
*
* 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 boards_6lowpan-clicker
* @{
*
* @file
* @brief peripheral configuration for the MikroE 6LoWPAN Clicker
*
* @author Neil Jones <Neil.Jones@imgtec.com>
*/
#ifndef PERIPH_CONF_H
#define PERIPH_CONF_H
#include "cpu.h"
#include "macros/units.h"
#include "periph_cpu.h"
#ifdef __cplusplus
extern "C" {
#endif
/**
* @name Clock configurations
* @{
*/
/**
* @brief The peripheral clock is required for the UART Baud rate calculation
* It is configured by the 'config' registers (see pic32_config_settings.c)
* Note 120MHz is the max F for this device.
*/
#define PERIPHERAL_CLOCK MHZ(96)
#define CLOCK_CORECLOCK MHZ(120)
/** @} */
/**
* @name Timer definitions
* @{
*/
#define TIMER_NUMOF (1)
#define TIMER_0_CHANNELS (3)
/** @} */
/**
* @name UART Definitions
* @{
*/
static const uart_conf_t uart_config[] = {
{ /* UART port available on MikroBus */
.base = (volatile unsigned int *)_UART3_BASE_ADDRESS,
.clock = PERIPHERAL_CLOCK,
.rx_pin = GPIO_PIN(PORT_F, 5),
.tx_pin = GPIO_PIN(PORT_F, 4),
.rx_mux_reg = &U3RXR,
.tx_mux_reg = &RPF4R,
.rx_af = GPIO_AF2,
.tx_af = GPIO_AF1,
.vector = _UART_3_VECTOR,
.irq = _UART3_RX_IRQ,
},
};
#define UART_0_ISR (isr_usart3)
#define UART_NUMOF ((unsigned int)ARRAY_SIZE(uart_config))
/** @} */
#ifdef __cplusplus
}
#endif
#endif /* PERIPH_CONF_H */
/** @} */

View File

@ -31,8 +31,6 @@ volatile uint32_t _DEVCFG3 __attribute__((used, section(".devcfg3"))) =
| (_DEVCFG3_FUSBIDIO_MASK & 0 << _DEVCFG3_FUSBIDIO_POSITION)
| (_DEVCFG3_FVBUSONIO_MASK & 1 << _DEVCFG3_FVBUSONIO_POSITION);
/* Note this sets the PLL to 96MHz (8/2 * 24) which is only supported by 3xx
* and 4xx parts and assumes an 8MHz XTAL.
*
@ -86,7 +84,6 @@ volatile uint32_t _DEVCFG1 __attribute__ ((used, section(".devcfg1"))) =
& (~_DEVCFG1_FWDTEN_MASK | 0 << _DEVCFG1_FWDTEN_POSITION)
& (~_DEVCFG1_FWDTWINSZ_MASK | 3 << _DEVCFG1_FWDTWINSZ_POSITION);
/*
* DEVCFG0 @ 0x1FC02FFC
*

24
boards/Kconfig Normal file
View File

@ -0,0 +1,24 @@
# Copyright (c) 2020 HAW Hamburg
#
# 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.
#
config BOARD
string
help
Name of the currently selected board.
config MODULE_BOARD
bool
default y
depends on TEST_KCONFIG
help
Module which holds all board-specific files.
config MODULE_BOARD_COMMON_INIT
bool
default y
depends on TEST_KCONFIG
help
Common board initialization module

21
boards/acd52832/Kconfig Normal file
View File

@ -0,0 +1,21 @@
# Copyright (c) 2020 HAW Hamburg
#
# 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.
config BOARD
default "acd52832" if BOARD_ACD52832
config BOARD_ACD52832
bool
default y
select BOARD_COMMON_NRF52
select CPU_MODEL_NRF52832XXAA
select HAS_PERIPH_I2C
select HAS_PERIPH_SPI
select HAS_PERIPH_UART
select HAVE_SAUL_GPIO
source "$(RIOTBOARD)/common/nrf52xxxdk/Kconfig"

View File

@ -1,32 +0,0 @@
/*
* Copyright (C) 2017 HAW Hamburg
*
* 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 boards_acd52832
* @{
*
* @file
* @brief Board initialization for the ACD52832
*
* @author Dimitri Nahm <dimitri.nahm@haw-hamburg.de>
*
* @}
*/
#include "board.h"
#include "periph/gpio.h"
void board_init(void)
{
/* initialize the boards LEDs */
gpio_init(LED0_PIN, GPIO_OUT);
gpio_set(LED0_PIN);
/* initialize the CPU */
cpu_init();
}

View File

@ -50,11 +50,6 @@ extern "C" {
#define BTN0_MODE GPIO_IN_PU
/** @} */
/**
* @brief Initialize board specific hardware, including clock, LEDs and std-IO
*/
void board_init(void);
#ifdef __cplusplus
}
#endif

View File

@ -46,7 +46,6 @@ static const saul_gpio_params_t saul_gpio_params[] =
}
};
#ifdef __cplusplus
}
#endif

View File

@ -54,10 +54,11 @@ extern "C" {
*/
static const spi_conf_t spi_config[] = {
{
.dev = NRF_SPI0,
.dev = NRF_SPIM0,
.sclk = 4,
.mosi = 3,
.miso = 13
.miso = 13,
.ppi = 0
}
};

View File

@ -0,0 +1,28 @@
# Copyright (c) 2020 HAW Hamburg
#
# 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.
config BOARD
default "adafruit-clue" if BOARD_ADAFRUIT_CLUE
config BOARD_ADAFRUIT_CLUE
bool
default y
select BOARD_COMMON_NRF52
select CPU_MODEL_NRF52840XXAA
select HAS_PERIPH_I2C
select HAS_PERIPH_SPI
select HAS_PERIPH_UART
select HAS_PERIPH_USBDEV
select HAS_HIGHLEVEL_STDIO
select HAVE_APDS9960
select HAVE_BMP280_I2C
select HAVE_ILI9341
select HAVE_LIS3MDL
select HAVE_SAUL_GPIO
select HAVE_SHT3X
source "$(RIOTBOARD)/common/nrf52/Kconfig"

View File

@ -0,0 +1,14 @@
ifneq (,$(filter saul_default,$(USEMODULE)))
USEMODULE += saul_gpio
USEMODULE += apds9960
USEMODULE += bmp280_i2c
USEMODULE += lis3mdl
USEMODULE += sht3x
endif
ifneq (,$(filter disp_dev,$(USEMODULE)))
USEMODULE += ili9341
endif
include $(RIOTBOARD)/common/nrf52/bootloader_nrfutil.dep.mk
include $(RIOTBOARD)/common/nrf52/Makefile.dep

View File

@ -0,0 +1,18 @@
CPU_MODEL = nrf52840xxaa
# Put defined MCU peripherals here (in alphabetical order)
FEATURES_PROVIDED += periph_i2c
FEATURES_PROVIDED += periph_spi
FEATURES_PROVIDED += periph_uart
FEATURES_PROVIDED += periph_usbdev
# Various other features (if any)
FEATURES_PROVIDED += highlevel_stdio
# This configuration enables modules that are only available when using Kconfig
# module modelling
ifeq (1,$(TEST_KCONFIG))
KCONFIG_BOARD_CONFIG += $(RIOTBOARD)/common/nrf52/nrf52_bootloader.config
endif
include $(RIOTBOARD)/common/nrf52/Makefile.features

View File

@ -0,0 +1,25 @@
# Adafruit-nrfutil is the default programmer
PROGRAMMER ?= adafruit-nrfutil
include $(RIOTBOARD)/common/nrf52/Makefile.include
PROGRAMMERS_SUPPORTED += adafruit-nrfutil
ifeq ($(PROGRAMMER),adafruit-nrfutil)
# The preinstalled bootloader must also be taken into account so
# ROM_OFFSET skips the space taken by such bootloader.
ROM_OFFSET = 0x26000
ifneq (,$(filter reset flash flash-only, $(MAKECMDGOALS)))
# Add 2 seconds delay before opening terminal: this is required when opening
# the terminal right after flashing. In this case, the stdio over USB needs
# some time after reset before being ready.
TERM_DELAY = 2
TERMDEPS += term-delay
endif
endif
term-delay:
sleep $(TERM_DELAY)
TESTRUNNER_CONNECT_DELAY ?= $(TERM_DELAY)
$(call target-export-variables,test,TESTRUNNER_CONNECT_DELAY)

View File

@ -0,0 +1,31 @@
/*
* Copyright (C) 2020 Inria
*
* 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 boards_adafruit-clue
* @{
*
* @file
* @brief Board initialization for the Adafruit Clue
*
* @author Alexandre Abadie <alexandre.abadie@inria.fr>
*
* @}
*/
#include "cpu.h"
#include "board.h"
#include "periph/gpio.h"
void board_init(void)
{
/* initialize the screen backlight, turn it off by default */
gpio_init(BACKLIGHT_PIN, GPIO_OUT);
gpio_clear(BACKLIGHT_PIN);
}

View File

@ -0,0 +1,45 @@
/**
@defgroup boards_adafruit-clue Adafruit Clue
@ingroup boards
@brief Support for the Adafruit Clue
### General information
The [Adafruit Clue](https://www.adafruit.com/clue) board
is an opensource, micro development kit using the nRF52840 SoC.
This board provides 802.15.4 and BLE connectivity.
<img src="https://raw.githubusercontent.com/adafruit/Adafruit-CLUE-PCB/master/assets/4500.jpg"
alt="Adafruit Clue" style="height:800px;"/>
### Schematics
The board detailed description and schematic is available
[here](https://github.com/adafruit/Adafruit-CLUE-PCB).
### Flash the board
The board is flashed using the `adafruit-nrfutil` Python package:
```
$ pip install --user adafruit-nrfutil
```
Example with `hello-world` application:
```
make BOARD=adafruit-clue -C examples/hello-world flash
```
### Accessing STDIO via UART
The STDIO is directly accessible via the USB port. On a Linux host, it's
generally mapped to `/dev/ttyACM0`.
Use the `term` target to connect to the board serial port<br/>
```
make BOARD=adafruit-clue -C examples/hello-world term
```
The `TERM_DELAY` environment variable can be used to add a delay (in second)
before opening the serial terminal. The default value is 2s which should be
enough in most of the situations.
*/

View File

@ -0,0 +1,118 @@
/*
* Copyright (C) 2020 Inria
*
* 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 boards_adafruit-clue
* @{
*
* @file
* @brief Board specific configuration for the Adafruit Clue board
*
* @author Alexandre Abadie <alexandre.abadie@inria.fr>
*/
#ifndef BOARD_H
#define BOARD_H
#include "cpu.h"
#include "board_common.h"
#ifdef __cplusplus
extern "C" {
#endif
/**
* @name LEDs pin configuration
* @{
*/
#define LED0_PIN GPIO_PIN(1, 1) /**< LED0 pin */
#define LED0_MASK (1 << 1) /**< LED0 mask */
#define LED0_ON (NRF_P1->OUTSET = LED0_MASK) /**< Turn LED0 on */
#define LED0_OFF (NRF_P1->OUTCLR = LED0_MASK) /**< Turn LED0 off */
#define LED0_TOGGLE (NRF_P1->OUT ^= LED0_MASK) /**< Toggle LED0 */
/** @} */
/**
* @name Buttons pin configuration
* @{
*/
#define BTN0_PIN GPIO_PIN(1, 2) /**< Button A pin */
#define BTN0_MODE GPIO_IN_PU /**< Button A mode */
#define BTN1_PIN GPIO_PIN(1, 10) /**< Button B pin */
#define BTN1_MODE GPIO_IN_PU /**< Button B mode */
/** @} */
/**
* @name APDS9960 sensor configuration
* @{
*/
#define APDS99XX_PARAM_DEV I2C_DEV(1) /**< I2C device */
#define APDS99XX_PARAM_INT_PIN GPIO_PIN(0, 9) /**< Interrupt pin */
/** @} */
/**
* @name BMP280 sensor configuration
* @{
*/
#define BMX280_PARAM_I2C_DEV I2C_DEV(1) /**< I2C device */
/** @} */
/**
* @name LIS3MDL 3-axis magnetometer
* @{
*/
#define LIS3MDL_PARAM_I2C I2C_DEV(1) /**< I2C device */
#define LIS3MDL_PARAM_ADDR (0x1C) /**< I2C address */
/** @} */
/**
* @name STH31 temperature and humidity sensor
* @{
*/
#define SHT3X_PARAM_I2C_DEV I2C_DEV(1) /**< I2C device */
#define SHT3X_PARAM_I2C_ADDR (SHT3X_I2C_ADDR_1) /**< I2C address */
/** @} */
/**
* @name Speaker pin
* @{
*/
#define SPKR_PIN GPIO_PIN(1, 0) /**< Speaker pin */
/** @} */
/**
* @name Backlight control defines, default uses LCD_BACKLIGHT_LOW values
* @{
*/
#define BACKLIGHT_PIN GPIO_PIN(1, 5) /**< Backlight pin */
#define BACKLIGHT_MASK (1 << 5) /**< Backlight pin mask */
#define BACKLIGHT_ON (NRF_P1->OUTSET = BACKLIGHT_MASK) /**< Turn backlight on */
#define BACKLIGHT_OFF (NRF_P1->OUTCLR = BACKLIGHT_MASK) /**< Turn backlight off */
/** @ */
/**
* @name Display configuration
* @{
*/
#define ILI9341_PARAM_SPI SPI_DEV(1) /**< SPI device */
#define ILI9341_PARAM_CS GPIO_PIN(0, 12) /**< Chip select pin */
#define ILI9341_PARAM_DCX GPIO_PIN(0, 13) /**< DCX pin */
#define ILI9341_PARAM_RST GPIO_PIN(1, 3) /**< Reset pin */
#define ILI9341_PARAM_NUM_LINES (240U) /**< Number of screen lines */
#define ILI9341_PARAM_RGB (1) /**< RGB configuration */
#define ILI9341_PARAM_INVERTED (1) /**< Inversion configuration */
#define ILI9341_PARAM_ROTATION (ILI9341_ROTATION_HORZ_FLIP) /**< Rotation mode */
/** @} */
#ifdef __cplusplus
}
#endif
#endif /* BOARD_H */
/** @} */

View File

@ -0,0 +1,58 @@
/*
* Copyright (C) 2020 Inria
*
* 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 boards_adafruit-clue
* @{
*
* @file
* @brief Configuration of SAUL mapped GPIO pins
*
* @author Alexandre Abadie <alexandre.abadie@inria.fr>
*/
#ifndef GPIO_PARAMS_H
#define GPIO_PARAMS_H
#include "board.h"
#include "saul/periph.h"
#ifdef __cplusplus
extern "C" {
#endif
/**
* @brief LED configuration
*/
static const saul_gpio_params_t saul_gpio_params[] =
{
{
.name = "LED0 (Red)",
.pin = LED0_PIN,
.mode = GPIO_OUT,
},
{
.name = "Button A",
.pin = BTN0_PIN,
.mode = BTN0_MODE,
.flags = SAUL_GPIO_INVERTED,
},
{
.name = "Button B",
.pin = BTN1_PIN,
.mode = BTN1_MODE,
.flags = SAUL_GPIO_INVERTED,
},
};
#ifdef __cplusplus
}
#endif
#endif /* GPIO_PARAMS_H */
/** @} */

View File

@ -0,0 +1,123 @@
/*
* Copyright (C) 2020 Inria
*
* 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 boards_adafruit-clue
* @{
*
* @file
* @brief Peripheral configuration for the Adafruit Clue board
*
* @author Alexandre Abadie <alexandre.abadie@inria.fr>
*
*/
#ifndef PERIPH_CONF_H
#define PERIPH_CONF_H
#include "periph_cpu.h"
#include "cfg_clock_32_0.h"
#include "cfg_rtt_default.h"
#include "cfg_timer_default.h"
#ifdef __cplusplus
extern "C" {
#endif
/**
* @name UART configuration
* @{
*/
/**
* @brief UART configuration.
*/
static const uart_conf_t uart_config[] = {
{
.dev = NRF_UARTE0,
.rx_pin = GPIO_PIN(0, 4),
.tx_pin = GPIO_PIN(0, 5),
#ifdef MODULE_PERIPH_UART_HW_FC
.rts_pin = GPIO_UNDEF,
.cts_pin = GPIO_UNDEF,
#endif
.irqn = UARTE0_UART0_IRQn,
},
};
/**
* @brief UART 0 Interrupt Service Routine.
*/
#define UART_0_ISR (isr_uart0)
/**
* @brief Number of UART peripherals.
*/
#define UART_NUMOF ARRAY_SIZE(uart_config)
/** @} */
/**
* @name I2C configuration
* @{
*/
/**
* @brief I2C configuration.
*/
static const i2c_conf_t i2c_config[] = {
{ /* External connectors */
.dev = NRF_TWIM0,
.scl = GPIO_PIN(0, 0), /* D19 */
.sda = GPIO_PIN(0, 30), /* D20 */
.speed = I2C_SPEED_NORMAL
},
{ /* On board sensors */
.dev = NRF_TWIM1,
.scl = GPIO_PIN(0, 25),
.sda = GPIO_PIN(0, 24),
.speed = I2C_SPEED_NORMAL
},
};
/**
* @brief Number of I2C peripherals.
*/
#define I2C_NUMOF (sizeof(i2c_config) / sizeof(i2c_config[0]))
/** @} */
/**
* @name SPI configuration
* @{
*/
/**
* @brief SPI configuration.
*/
static const spi_conf_t spi_config[] = {
{ /* External connectors */
.dev = NRF_SPIM0,
.sclk = GPIO_PIN(0, 23), /* D13 */
.mosi = GPIO_PIN(0, 21), /* D15 */
.miso = GPIO_PIN(0, 22), /* D14 */
},
{ /* TFT LCD screen */
.dev = NRF_SPIM1,
.sclk = GPIO_PIN(0, 14),
.mosi = GPIO_PIN(0, 15),
.miso = GPIO_PIN(0, 0),
},
};
/**
* @brief Number of SPI peripherals.
*/
#define SPI_NUMOF ARRAY_SIZE(spi_config)
/** @} */
#ifdef __cplusplus
}
#endif
#endif /* PERIPH_CONF_H */
/** @} */

View File

@ -0,0 +1,38 @@
/*
* Copyright (C) 2020 Inria
*
* 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 boards_adafruit-clue
* @{
* @file
* @brief Implementation for managing the nrfutil bootloader
*
* @author Alexandre Abadie <alexandre.abadie@inria.fr>
*
* @}
*/
#ifdef MODULE_USB_BOARD_RESET
#define USB_H_USER_IS_RIOT_INTERNAL
#include "cpu.h"
#include "usb_board_reset.h"
/* Set the value used by the bootloader to select between boot in
application and boot in bootloader mode. */
#define NRF52_DOUBLE_TAP_MAGIC_NUMBER (0x4e)
void usb_board_reset_in_bootloader(void)
{
NRF_POWER->GPREGRET = NRF52_DOUBLE_TAP_MAGIC_NUMBER;
usb_board_reset_in_application();
}
#endif /* MODULE_USB_BOARD_RESET */

View File

@ -0,0 +1,31 @@
# Copyright (c) 2021 ML!PA Consulting GmbH
#
# 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.
config BOARD
default "adafruit-itsybitsy-m4" if BOARD_ADAFRUIT_ITSYBITSY_M4
config BOARD_ADAFRUIT_ITSYBITSY_M4
bool
default y
select CPU_MODEL_SAMD51G19A
select HAS_HIGHLEVEL_STDIO
select HAS_PERIPH_DAC
select HAS_PERIPH_ADC
select HAS_PERIPH_I2C
select HAS_PERIPH_RTC
select HAS_PERIPH_RTT
select HAS_PERIPH_PWM
select HAS_PERIPH_SPI
select HAS_PERIPH_TIMER
select HAS_PERIPH_UART
select HAS_PERIPH_USBDEV
select HAVE_SAUL_GPIO
select HAVE_MTD_SPI_NOR
# This specific board requires SPI_ON_QSPI for the MTD_SPI_NOR
select MODULE_PERIPH_SPI_ON_QSPI if MODULE_MTD_SPI_NOR
source "$(RIOTBOARD)/common/samdx1-arduino-bootloader/Kconfig"

View File

@ -0,0 +1,5 @@
MODULE = board
DIRS = $(RIOTBOARD)/common/samdx1-arduino-bootloader
include $(RIOTBASE)/Makefile.base

View File

@ -0,0 +1,11 @@
ifneq (,$(filter saul_default,$(USEMODULE)))
USEMODULE += saul_gpio
endif
ifneq (,$(filter mtd,$(USEMODULE)))
FEATURES_REQUIRED += periph_spi_on_qspi
USEMODULE += mtd_spi_nor
endif
# setup the samd21 arduino bootloader related dependencies
include $(RIOTBOARD)/common/samdx1-arduino-bootloader/Makefile.dep

View File

@ -0,0 +1,21 @@
CPU = samd5x
CPU_MODEL = samd51g19a
# Put defined MCU peripherals here (in alphabetical order)
FEATURES_PROVIDED += highlevel_stdio
FEATURES_PROVIDED += periph_adc
FEATURES_PROVIDED += periph_dac
FEATURES_PROVIDED += periph_i2c
FEATURES_PROVIDED += periph_pwm
FEATURES_PROVIDED += periph_rtc
FEATURES_PROVIDED += periph_rtt
FEATURES_PROVIDED += periph_spi
FEATURES_PROVIDED += periph_timer
FEATURES_PROVIDED += periph_uart
FEATURES_PROVIDED += periph_usbdev
# This configuration enables modules that are only available when using Kconfig
# module modelling
ifeq (1, $(TEST_KCONFIG))
KCONFIG_ADD_CONFIG += $(RIOTBOARD)/common/samdx1-arduino-bootloader/samdx1-arduino-bootloader.config
endif

View File

@ -0,0 +1,6 @@
CFLAGS += -DBOOTLOADER_UF2
# Include all definitions for flashing with bossa other USB
include $(RIOTBOARD)/common/samdx1-arduino-bootloader/Makefile.include
# Include handling of serial and non-bossa programmers (if selected by user)
include $(RIOTMAKE)/boards/sam0.inc.mk

View File

@ -0,0 +1,55 @@
/*
* Copyright (C) 2021 ML!PA Consulting GmbH
*
* 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 boards_adafruit-itsybitsy-m4
* @{
*
* @file
* @brief Board specific implementations for the Adafruit ItsyBitsy M4
*
* @author Benjamin Valentin <benjamin.valentin@ml-pa.com>
* @}
*/
#include "board.h"
#include "periph/gpio.h"
#include "mtd_spi_nor.h"
#include "timex.h"
#ifdef MODULE_MTD
/* GD25x16 */
static const mtd_spi_nor_params_t _samd51_nor_params = {
.opcode = &mtd_spi_nor_opcode_default,
.wait_chip_erase = 15 * US_PER_SEC,
.wait_32k_erase = 150 * US_PER_MS,
.wait_64k_erase = 250 * US_PER_MS,
.wait_sector_erase = 50 * US_PER_MS,
.wait_chip_wake_up = 1 * US_PER_MS,
.clk = MHZ(54),
.flag = SPI_NOR_F_SECT_4K
| SPI_NOR_F_SECT_32K
| SPI_NOR_F_SECT_64K,
.spi = SPI_DEV(1),
.mode = SPI_MODE_0,
.cs = SAM0_QSPI_PIN_CS,
.wp = SAM0_QSPI_PIN_DATA_2,
.hold = SAM0_QSPI_PIN_DATA_3,
};
static mtd_spi_nor_t samd51_nor_dev = {
.base = {
.driver = &mtd_spi_nor_driver,
.page_size = 256,
.pages_per_sector = 16,
},
.params = &_samd51_nor_params,
};
mtd_dev_t *mtd0 = (mtd_dev_t *)&samd51_nor_dev;
#endif /* MODULE_MTD */

View File

@ -0,0 +1,37 @@
/**
@defgroup boards_adafruit-itsybitsy-m4 Adafruit-Itsybitsy-M4
@ingroup boards
@brief Support for the Adafruit-Itsybitsy-M4
### General information
![Adafruit-Itsybitsy-M4 compared to a quarter dollar](https://cdn-learn.adafruit.com/assets/assets/000/055/465/large1024/adafruit_products_3800_quarter_ORIG_2018_06.jpg?1529192175)
This is a small formfactor (only 1.4" long by 0.7" wide) SAM D51 board made by Adafruit.
The board features one red LED (LD1), one DotStar / APA102 RGB LED, a reset button as well as
21 configurable external pins(6 of which can be analog in).
### Links
- [Overview](https://learn.adafruit.com/introducing-adafruit-itsybitsy-m4?view=all)
- [Schematics](https://learn.adafruit.com/assets/55481)
### Flash the board
The board is flashed using its on-board [boot loader](https://github.com/adafruit/uf2-samdx1).
The process is automated in the usual `make flash` target.
If RIOT is already running on the board, it will automatically reset the CPU and enter
the bootloader.
If some other firmware is running or RIOT crashed, you need to enter the bootloader
manually by double tapping the board's reset button.
Readiness of the bootloader is indicated by LD1 pulsing in red.
### Accessing STDIO
The usual way to obtain a console on this board is using an emulated USB serial port.
*/

View File

@ -0,0 +1,73 @@
/*
* Copyright (C) 2021 ML!PA Consulting GmbH
*
* 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 boards_adafruit-itsybitsy-m4
* @{
*
* @file
* @brief Board specific definitions for the Adafruit ItsyBitsy M4
*
* @author Benjamin Valentin <benjamin.valentin@ml-pa.com>
*/
#ifndef BOARD_H
#define BOARD_H
#include "cpu.h"
#include "mtd.h"
#ifdef __cplusplus
extern "C" {
#endif
/**
* @name LED pin definitions and handlers
* @{
*/
#define LED0_PIN GPIO_PIN(PA, 22)
#define LED_PORT PORT->Group[PA]
#define LED0_MASK (1 << 22)
#define LED0_ON (LED_PORT.OUTSET.reg = LED0_MASK)
#define LED0_OFF (LED_PORT.OUTCLR.reg = LED0_MASK)
#define LED0_TOGGLE (LED_PORT.OUTTGL.reg = LED0_MASK)
/** @} */
/**
* @name APA102 / DotStar configuration
* @{
*/
#define APA102_PARAM_LED_NUMOF (1)
#define APA102_PARAM_DATA_PIN GPIO_PIN(PB, 3)
#define APA102_PARAM_CLK_PIN GPIO_PIN(PB, 2)
/** @} */
/**
* @name MTD configuration
* @{
*/
extern mtd_dev_t *mtd0;
#define MTD_0 mtd0
/** @} */
/**
* @name Xtimer configuration
* @{
*/
#define XTIMER_WIDTH (32)
#define XTIMER_HZ (1000000ul)
/** @} */
#ifdef __cplusplus
}
#endif
#endif /* BOARD_H */
/** @} */

View File

@ -0,0 +1,46 @@
/*
* Copyright (C) 2021 ML!PA Consulting GmbH
*
* 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 boards_adafruit-itsybitsy-m4
* @{
*
* @file
* @brief Board specific configuration of direct mapped GPIOs
*
* @author Benjamin Valentin <benjamin.valentin@ml-pa.com>
*/
#ifndef GPIO_PARAMS_H
#define GPIO_PARAMS_H
#include "board.h"
#include "saul/periph.h"
#ifdef __cplusplus
extern "C" {
#endif
/**
* @brief GPIO pin configuration
*/
static const saul_gpio_params_t saul_gpio_params[] =
{
{
.name = "LED(red)",
.pin = LED0_PIN,
.mode = GPIO_OUT,
},
};
#ifdef __cplusplus
}
#endif
#endif /* GPIO_PARAMS_H */
/** @} */

View File

@ -0,0 +1,273 @@
/*
* Copyright (C) 2021 ML!PA Consulting GmbH
*
* 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 boards_adafruit-itsybitsy-m4
* @{
*
* @file
* @brief Configuration of CPU peripherals for the Adafruit ItsyBitsy M4
*
* @author Benjamin Valentin <benjamin.valentin@ml-pa.com>
*/
#ifndef PERIPH_CONF_H
#define PERIPH_CONF_H
#include "periph_cpu.h"
#ifdef __cplusplus
extern "C" {
#endif
/**
* @name desired core clock frequency
* @{
*/
#ifndef CLOCK_CORECLOCK
#define CLOCK_CORECLOCK MHZ(120)
#endif
/** @} */
/**
* @name 32kHz Oscillator configuration
* @{
*/
#define EXTERNAL_OSC32_SOURCE 0
#define ULTRA_LOW_POWER_INTERNAL_OSC_SOURCE 1
/** @} */
/**
* @brief Enable the internal DC/DC converter
* The board is equipped with the necessary inductor.
*/
#define USE_VREG_BUCK (1)
/**
* @name Timer peripheral configuration
* @{
*/
static const tc32_conf_t timer_config[] = {
{ /* Timer 0 - System Clock */
.dev = TC0,
.irq = TC0_IRQn,
.mclk = &MCLK->APBAMASK.reg,
.mclk_mask = MCLK_APBAMASK_TC0 | MCLK_APBAMASK_TC1,
.gclk_id = TC0_GCLK_ID,
.gclk_src = SAM0_GCLK_TIMER,
.flags = TC_CTRLA_MODE_COUNT32,
},
{ /* Timer 1 */
.dev = TC2,
.irq = TC2_IRQn,
.mclk = &MCLK->APBBMASK.reg,
.mclk_mask = MCLK_APBBMASK_TC2 | MCLK_APBBMASK_TC3,
.gclk_id = TC2_GCLK_ID,
.gclk_src = SAM0_GCLK_TIMER,
.flags = TC_CTRLA_MODE_COUNT32,
}
};
/* Timer 0 configuration */
#define TIMER_0_CHANNELS 2
#define TIMER_0_ISR isr_tc0
/* Timer 1 configuration */
#define TIMER_1_CHANNELS 2
#define TIMER_1_ISR isr_tc2
#define TIMER_NUMOF ARRAY_SIZE(timer_config)
/** @} */
/**
* @name UART configuration
* @{
*/
static const uart_conf_t uart_config[] = {
{
.dev = &SERCOM3->USART,
.rx_pin = GPIO_PIN(PA, 16),
.tx_pin = GPIO_PIN(PA, 17),
#ifdef MODULE_PERIPH_UART_HW_FC
.rts_pin = GPIO_UNDEF,
.cts_pin = GPIO_UNDEF,
#endif
.mux = GPIO_MUX_D,
.rx_pad = UART_PAD_RX_1,
.tx_pad = UART_PAD_TX_0,
.flags = UART_FLAG_NONE,
.gclk_src = SAM0_GCLK_PERIPH,
},
};
/* interrupt function name mapping */
#define UART_0_ISR isr_sercom3_2
#define UART_0_ISR_TX isr_sercom3_0
#define UART_NUMOF ARRAY_SIZE(uart_config)
/** @} */
/**
* @name PWM configuration
* @{
*/
#define PWM_0_EN 1
#if PWM_0_EN
/* PWM0 channels */
static const pwm_conf_chan_t pwm_chan0_config[] = {
/* GPIO pin, MUX value, TCC channel */
{ GPIO_PIN(PA, 22), GPIO_MUX_G, 2 },
};
#endif
/* PWM device configuration */
static const pwm_conf_t pwm_config[] = {
#if PWM_0_EN
{ .tim = TCC_CONFIG(TCC0),
.chan = pwm_chan0_config,
.chan_numof = ARRAY_SIZE(pwm_chan0_config),
.gclk_src = SAM0_GCLK_PERIPH,
},
#endif
};
/* number of devices that are actually defined */
#define PWM_NUMOF ARRAY_SIZE(pwm_config)
/** @} */
/**
* @name SPI configuration
* @{
*/
static const spi_conf_t spi_config[] = {
{
.dev = &(SERCOM1->SPI),
.miso_pin = GPIO_PIN(PB, 23),
.mosi_pin = GPIO_PIN(PA, 0),
.clk_pin = GPIO_PIN(PA, 1),
.miso_mux = GPIO_MUX_C,
.mosi_mux = GPIO_MUX_D,
.clk_mux = GPIO_MUX_D,
.miso_pad = SPI_PAD_MISO_3,
.mosi_pad = SPI_PAD_MOSI_0_SCK_1,
.gclk_src = SAM0_GCLK_PERIPH,
#ifdef MODULE_PERIPH_DMA
.tx_trigger = SERCOM1_DMAC_ID_TX,
.rx_trigger = SERCOM1_DMAC_ID_RX,
#endif
},
#ifdef MODULE_PERIPH_SPI_ON_QSPI
{ /* QSPI in SPI mode */
.dev = QSPI,
.miso_pin = SAM0_QSPI_PIN_DATA_1,
.mosi_pin = SAM0_QSPI_PIN_DATA_0,
.clk_pin = SAM0_QSPI_PIN_CLK,
.miso_mux = SAM0_QSPI_MUX,
.mosi_mux = SAM0_QSPI_MUX,
.clk_mux = SAM0_QSPI_MUX,
.miso_pad = SPI_PAD_MISO_0, /* unused */
.mosi_pad = SPI_PAD_MOSI_0_SCK_1, /* unused */
.gclk_src = SAM0_GCLK_MAIN, /* unused */
#ifdef MODULE_PERIPH_DMA
.tx_trigger = QSPI_DMAC_ID_TX,
.rx_trigger = QSPI_DMAC_ID_RX,
#endif
},
#endif
};
#define SPI_NUMOF ARRAY_SIZE(spi_config)
/** @} */
/**
* @name I2C configuration
* @{
*/
static const i2c_conf_t i2c_config[] = {
{
.dev = &(SERCOM2->I2CM),
.speed = I2C_SPEED_NORMAL,
.scl_pin = GPIO_PIN(PA, 12),
.sda_pin = GPIO_PIN(PA, 13),
.mux = GPIO_MUX_C,
.gclk_src = SAM0_GCLK_PERIPH,
.flags = I2C_FLAG_NONE
},
};
#define I2C_NUMOF ARRAY_SIZE(i2c_config)
/** @} */
/**
* @name RTT configuration
* @{
*/
#ifndef RTT_FREQUENCY
#define RTT_FREQUENCY (32768U)
#endif
/** @} */
/**
* @name USB peripheral configuration
* @{
*/
static const sam0_common_usb_config_t sam_usbdev_config[] = {
{
.dm = GPIO_PIN(PA, 24),
.dp = GPIO_PIN(PA, 25),
.d_mux = GPIO_MUX_H,
.device = &USB->DEVICE,
.gclk_src = SAM0_GCLK_PERIPH,
}
};
/** @} */
/**
* @name ADC Configuration
* @{
*/
/* ADC Default values */
#define ADC_PRESCALER ADC_CTRLA_PRESCALER_DIV128
#define ADC_NEG_INPUT ADC_INPUTCTRL_MUXNEG(0x18u)
#define ADC_REF_DEFAULT ADC_REFCTRL_REFSEL_INTVCC1
#define ADC_DEV ADC0
static const adc_conf_chan_t adc_channels[] = {
/* port, pin, muxpos */
{GPIO_PIN(PA, 2), ADC_INPUTCTRL_MUXPOS(ADC_INPUTCTRL_MUXPOS_AIN0)},
{GPIO_PIN(PA, 5), ADC_INPUTCTRL_MUXPOS(ADC_INPUTCTRL_MUXPOS_AIN5)},
{GPIO_PIN(PB, 8), ADC_INPUTCTRL_MUXPOS(ADC_INPUTCTRL_MUXPOS_AIN2)},
{GPIO_PIN(PB, 9), ADC_INPUTCTRL_MUXPOS(ADC_INPUTCTRL_MUXPOS_AIN3)},
{GPIO_PIN(PA, 4), ADC_INPUTCTRL_MUXPOS(ADC_INPUTCTRL_MUXPOS_AIN4)},
{GPIO_PIN(PA, 6), ADC_INPUTCTRL_MUXPOS(ADC_INPUTCTRL_MUXPOS_AIN6)},
};
#define ADC_NUMOF ARRAY_SIZE(adc_channels)
/** @} */
/**
* @name DAC configuration
* @{
*/
/* Must not exceed 12 MHz */
#define DAC_CLOCK SAM0_GCLK_TIMER
/* Use external reference voltage on PA03 */
/* (You have to manually connect PA03 with Vcc) */
/* Internal reference only gives 1V */
#define DAC_VREF DAC_CTRLB_REFSEL_VREFPU
/** @} */
#ifdef __cplusplus
}
#endif
#endif /* PERIPH_CONF_H */
/** @} */

View File

@ -0,0 +1,23 @@
# Copyright (c) 2020 HAW Hamburg
#
# 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.
config BOARD
default "adafruit-itsybitsy-nrf52" if BOARD_ADAFRUIT_ITSYBITSY_NRF52
config BOARD_ADAFRUIT_ITSYBITSY_NRF52
bool
default y
select BOARD_COMMON_NRF52
select CPU_MODEL_NRF52840XXAA
select HAS_PERIPH_I2C
select HAS_PERIPH_SPI
select HAS_PERIPH_UART
select HAS_PERIPH_USBDEV
select HAS_HIGHLEVEL_STDIO
select HAVE_SAUL_GPIO
source "$(RIOTBOARD)/common/nrf52/Kconfig"

View File

@ -0,0 +1,3 @@
MODULE = board
include $(RIOTBASE)/Makefile.base

View File

@ -0,0 +1,6 @@
ifneq (,$(filter saul_default,$(USEMODULE)))
USEMODULE += saul_gpio
endif
include $(RIOTBOARD)/common/nrf52/bootloader_nrfutil.dep.mk
include $(RIOTBOARD)/common/nrf52/Makefile.dep

View File

@ -0,0 +1,18 @@
CPU_MODEL = nrf52840xxaa
# Put defined MCU peripherals here (in alphabetical order)
FEATURES_PROVIDED += periph_i2c
FEATURES_PROVIDED += periph_spi
FEATURES_PROVIDED += periph_uart
FEATURES_PROVIDED += periph_usbdev
# Various other features (if any)
FEATURES_PROVIDED += highlevel_stdio
# This configuration enables modules that are only available when using Kconfig
# module modelling
ifeq (1,$(TEST_KCONFIG))
KCONFIG_BOARD_CONFIG += $(RIOTBOARD)/common/nrf52/nrf52_bootloader.config
endif
include $(RIOTBOARD)/common/nrf52/Makefile.features

View File

@ -0,0 +1,31 @@
# This board uses the vendor's serial bootloader
PROGRAMMER ?= nrfutil
ifeq (nrfutil,$(PROGRAMMER))
# For this board it is required to use Adafruit's implementation of nrfutil.
# https://github.com/adafruit/Adafruit_nRF52_nrfutil
#
# This boards comes with Adafruit's bootloader:
# https://github.com/adafruit/Adafruit_nRF52_Bootloader
# In order to burn the application in the correct location, a offset of
# 0x26000 is required
ROM_OFFSET = 0x26000
ROM_LEN = 0xda000
FLASHFILE = $(HEXFILE)
FLASHDEPS += $(HEXFILE).zip
FLASHER = adafruit-nrfutil
FFLAGS = --verbose dfu serial -p ${PORT} -b 115200 --singlebank --package=$(HEXFILE).zip
include $(RIOTMAKE)/tools/usb_board_reset.mk
endif
%.hex.zip: %.hex
$(call check_cmd,$(FLASHER),Flash program and preparation tool)
$(FLASHER) dfu genpkg --dev-type 0x0052 --sd-req 0x00B6 --application $< $@
include $(RIOTBOARD)/common/nrf52/Makefile.include
PROGRAMMERS_SUPPORTED += nrfutil

View File

@ -0,0 +1,50 @@
/**
@defgroup boards_adafruit-itsybitsy-nrf52 Adafruit-Itsybitsy-nRF52
@ingroup boards
@brief Support for the Adafruit-Itsybitsy-nRF52
### General information
This is a small formfactor (only 1.4" long by 0.7" wide) nRF52840 board made by Adafruit.
The board features one LED (LD1: blue), a user (SW1) and a
reset button as well as 21 configurable external pins(6 of which can be analog in).
### Links
- [Overview](https://learn.adafruit.com/adafruit-itsybitsy-nrf52840-express?view=all)
- [Pinouts](https://learn.adafruit.com/adafruit-itsybitsy-nrf52840-express/pinouts)
### Flash the board
The board is flashed using its on-board [boot loader](https://github.com/adafruit/Adafruit_nRF52_Bootloader).
Adafruit has a special version of the [nrfutil](https://github.com/adafruit/Adafruit_nRF52_nrfutil) that program needs to
be installed. It can turn the binary into a suitable zip file and send it to the DFU
bootloader.
The process is automated in the usual `make flash` target.
If RIOT is already running on the board, it will automatically reset the CPU and enter
the bootloader.
If some other firmware is running or RIOT crashed, you need to enter the bootloader
manually by double tapping the board's reset button.
Readiness of the bootloader is indicated by LD1 pulsing in blue.
Important to note that Adafruit's nrfutil is not compatible with Nordic's nrfutil.
#### nrfutil installation
On systems with Python 3, a recent version of pip is required to install all dependencies;
you may need to run `pip3 install --upgrade pip3` before being able to run `pip3 install adafruit-nrfutil` successfully.
### Accessing STDIO
The usual way to obtain a console on this board is using an emulated USB serial port.
### Todo
Add support for the mini DotStar RGB LED
*/

View File

@ -0,0 +1,68 @@
/*
* Copyright (C) 2020 Bruno Chianca <brunobcf@gmail.com>
*
* 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 boards_adafruit-itsybitsy-nrf52
* @{
*
* @file
* @brief Board specific configuration for Adafruit ItsyBitsy nRF52840
*
* @author Bruno Chianca <brunobcf@gmail.com>
*/
#ifndef BOARD_H
#define BOARD_H
#include "cpu.h"
#include "board_common.h"
#include "periph/gpio.h"
#ifdef __cplusplus
extern "C" {
#endif
/**
* @name LED pin configuration
* @{
*/
/** @brief The LED labelled LD1 */
#define LED0_PIN GPIO_PIN(0, 6)
/** @} */
/**
* @name LED access macros
* @{
*/
/** Enable LD1 */
#define LED0_ON gpio_clear(LED0_PIN)
/** Disable LD1 */
#define LED0_OFF gpio_set(LED0_PIN)
/** Toggle LD1 */
#define LED0_TOGGLE gpio_toggle(LED0_PIN)
/** @} */
/**
* @name Button pin configuration
* @{
*/
/** @brief The button labelled SW1 */
#define BTN0_PIN GPIO_PIN(0, 29)
/** @brief The GPIO pin mode of the button labelled SW1 */
#define BTN0_MODE GPIO_IN_PU
/** @} */
#ifdef __cplusplus
}
#endif
#endif /* BOARD_H */
/** @} */

View File

@ -0,0 +1,54 @@
/*
* Copyright (C) 2020 Bruno Chianca <brunobcf@gmail.com>
*
* 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 boards_adafruit-itsybitsy-nrf52
* @{
*
* @file
* @brief Configuration of SAUL mapped GPIO pins for the Adafruit
* ItsyBitsy nRF52840
*
* @author Bruno Chianca <brunobcf@gmail.com>
*/
#ifndef GPIO_PARAMS_H
#define GPIO_PARAMS_H
#include "board.h"
#include "saul/periph.h"
#ifdef __cplusplus
extern "C" {
#endif
/**
* @brief LED and button configuration for SAUL
*/
static const saul_gpio_params_t saul_gpio_params[] =
{
{
.name = "LD 1",
.pin = LED0_PIN,
.mode = GPIO_OUT,
.flags = SAUL_GPIO_INVERTED | SAUL_GPIO_INIT_CLEAR,
},
{
.name = "SW 1",
.pin = BTN0_PIN,
.mode = GPIO_IN_PU,
.flags = SAUL_GPIO_INVERTED,
},
};
#ifdef __cplusplus
}
#endif
#endif /* GPIO_PARAMS_H */
/** @} */

View File

@ -0,0 +1,93 @@
/*
* Copyright (C) 2020 Bruno Chianca <brunobcf@gmail.com>
*
* 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 boards_adafruit-itsybitsy-nrf52
* @{
*
* @file
* @brief Peripheral configuration for the Adafruit ItsyBitsy nRF52840
*
* @author Bruno Chianca <brunobcf@gmail.com>
*
*/
#ifndef PERIPH_CONF_H
#define PERIPH_CONF_H
#include "periph_cpu.h"
#include "cfg_clock_32_1.h"
#include "cfg_rtt_default.h"
#include "cfg_timer_default.h"
#ifdef __cplusplus
extern "C" {
#endif
/**
* @name UART configuration
*
* This board does RX and TX defined as pins 0 and 1 on the board.
*
* @{
*/
static const uart_conf_t uart_config[] = {
{
.dev = NRF_UARTE0,
.rx_pin = GPIO_PIN(0, 25),
.tx_pin = GPIO_PIN(0, 24),
#ifdef MODULE_PERIPH_UART_HW_FC
.rts_pin = GPIO_UNDEF,
.cts_pin = GPIO_UNDEF,
#endif
.irqn = UARTE0_UART0_IRQn,
},
};
#define UART_0_ISR isr_uart0
#define UART_NUMOF ARRAY_SIZE(uart_config)
/** @} */
/**
* @name SPI configuration
* @{
*/
static const spi_conf_t spi_config[] = {
{
.dev = NRF_SPIM0,
.sclk = GPIO_PIN(0, 13),
.mosi = GPIO_PIN(0, 15),
.miso = GPIO_PIN(0, 20),
}
};
#define SPI_NUMOF ARRAY_SIZE(spi_config)
/** @} */
/**
* @name I2C configuration
* @{
*/
static const i2c_conf_t i2c_config[] = {
{
.dev = NRF_TWIM1,
.scl = GPIO_PIN(0, 14),
.sda = GPIO_PIN(0, 16),
.speed = I2C_SPEED_NORMAL
}
};
#define I2C_NUMOF ARRAY_SIZE(i2c_config)
/** @} */
#ifdef __cplusplus
}
#endif
#endif /* PERIPH_CONF_H */

View File

@ -0,0 +1,34 @@
/*
* Copyright (C) 2020 Bruno Chianca
*
* 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 boards_adafruit-itsybitsy-nrf52
* @{
* @file
* @brief Allows reboot into bootloader via prompt
*
* @author Bruno Chianca
*
* @}
*/
#ifdef MODULE_USB_BOARD_RESET
#include "periph/gpio.h"
#include "usb_board_reset.h"
#define NRF52_DOUBLE_TAP_MAGIC_NUMBER (0x4e)
void usb_board_reset_in_bootloader(void)
{
NRF_POWER->GPREGRET = NRF52_DOUBLE_TAP_MAGIC_NUMBER;
usb_board_reset_in_application();
}
#endif /* MODULE_USB_BOARD_RESET */

View File

@ -0,0 +1,21 @@
# Copyright (c) 2020 HAW Hamburg
#
# 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.
config BOARD
default "airfy-beacon" if BOARD_AIRFY_BEACON
config BOARD_AIRFY_BEACON
bool
default y
select BOARD_COMMON_NRF51
select CPU_MODEL_NRF51X22XXAA
select HAS_PERIPH_ADC
select HAS_PERIPH_I2C
select HAS_PERIPH_SPI
select HAS_PERIPH_UART
select MODULE_BOARDS_COMMON_NRF51 if TEST_KCONFIG
source "$(RIOTBOARD)/common/nrf51/Kconfig"

View File

@ -1 +1,4 @@
# include common nrf51 boards module into the build
USEMODULE += boards_common_nrf51
include $(RIOTBOARD)/common/nrf51/Makefile.dep

View File

@ -1,15 +1,10 @@
# include common nrf51 boards module into the build
USEMODULE += boards_common_nrf51
# define the default port depending on the host OS
PORT_LINUX ?= /dev/ttyUSB0
PORT_DARWIN ?= $(firstword $(sort $(wildcard /dev/tty.SLAB_USBtoUART*)))
# this board uses an ST-Link v2 debug adapter
DEBUG_ADAPTER ?= stlink
OPENOCD_DEBUG_ADAPTER ?= stlink
STLINK_VERSION ?= 2
PROGRAMMER = openocd
# include nrf51 boards common configuration
include $(RIOTBOARD)/common/nrf51/Makefile.include

View File

@ -6,35 +6,35 @@
## Overview
The Airfy Beacon is utilizing a Nordics NRF51822QFAA SoC.
The SoC features 16Kb of RAM, 256Kb of flash ROM and comes on top of the
The SoC features 16KiB of RAM, 256KiB of flash ROM and comes on top of the
usual micro-controller peripherals with a 2.4GHz radio that supports both
Nordics proprietary ShockBurst as well as Bluetooth Low Energy (BLE).
The board was available via
[Indiegogo](https://www.indiegogo.com/projects/airfy-beacon-make-your-smart-
home-even-smarter).
[Indiegogo]
(https://www.indiegogo.com/projects/airfy-beacon-make-your-smart-home-even-smarter).
## Hardware
![airfy-beacon](https://raw.githubusercontent.com/wiki/RIOT-
OS/RIOT/images/airfy-beacon.jpg)
| MCU | NRF51822QFAA |
|:------------- |:--------------------- |
| Family | ARM Cortex-M0 |
| Vendor | Nordic Semiconductor |
| RAM | 16Kb |
| Flash | 256Kb |
| Frequency | 16MHz |
| FPU | no |
| Timers | 3 (2x 16-bit, 1x 32-bit [TIMER0]) |
| ADCs | 1x 10-bit (8 channels) |
| UARTs | 1 |
| SPIs | 2 |
| I2Cs | 2 |
| Vcc | 1.8V - 3.6V |
| Reference Manual | [Reference Manual](http://www.100y.com.tw/pdf_file/39-Nordic-NRF51822.pdf) |
![airfy-beacon]
(https://raw.githubusercontent.com/wiki/RIOT-OS/RIOT/images/airfy-beacon.jpg)
| MCU | NRF51822QFAA |
|:--------------------- |:--------------------------------- |
| Family | ARM Cortex-M0 |
| Vendor | Nordic Semiconductor |
| RAM | 16KiB |
| Flash | 256KiB |
| Frequency | 16MHz |
| FPU | no |
| Timers | 3 (2x 16-bit, 1x 32-bit [TIMER0]) |
| ADCs | 1x 10-bit (8 channels) |
| UARTs | 1 |
| SPIs | 2 |
| I2Cs | 2 |
| Vcc | 1.8V - 3.6V |
| Product Specification | [Product Specification](https://infocenter.nordicsemi.com/pdf/nRF51822_PS_v3.3.pdf) |
| Reference Manual | [Reference Manual](https://infocenter.nordicsemi.com/pdf/nRF51_RM_v3.0.1.pdf) |
## Unlocking the flash memory
@ -47,8 +47,8 @@ registers. Just follow these steps:
1. Follow the steps described above for manually flashing the device:
1. start openocd using the correct config file `openocd -f boards/airfy-
beacon/dist/openocd.cfg`
1. start openocd using the correct config file
`openocd -f boards/airfy-beacon/dist/openocd.cfg`
2. connect to openocd using telnet `telnet localhost 4444`
2. type `halt` to stop the device
@ -92,8 +92,8 @@ SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="3748", \
```
now replug the usb cable and flash.
Have a look at the 'Setting up udev rules' section in this [README
file](https://github.com/texane/stlink/blob/master/README) if you need help.
Have a look at the 'Setting up udev rules' section in the
[README file](https://github.com/texane/stlink) if you need help.
Second you need to enable the standalone ST-Link mode of the discovery board
by removing the two `CN2` jumpers, found somewhere in the upper left part of the
@ -114,11 +114,12 @@ SWD data I/O: SWDIO <-----------> SWDIO (CN3, pin4)
The following image shows the wiring for an SWD flasher board:
![airfy-beacon-flash-connect](https://raw.githubusercontent.com/wiki/RIOT-
OS/RIOT/images/airfy-beacon-flash-connect.jpg)
![airfy-beacon-flash-connect]
(https://raw.githubusercontent.com/wiki/RIOT-OS/RIOT/images/airfy-beacon-flash-connect.jpg)
### Software
Debugging and programming this module works well with [[OpenOCD]].
Debugging and programming this module works well with
[OpenOCD](http://openocd.org/).
We suggest to use a fairly recent version, best use the upstream version from
their [git repository](http://sourceforge.net/p/openocd/code/ci/master/tree/).

View File

@ -86,8 +86,9 @@ static const i2c_conf_t i2c_config[] = {
* The configuration consists simply of a list of channels that should be used
* @{
*/
#define ADC_CONFIG {3, 4, 5, 6}
#define ADC_NUMOF (4)
static const adc_conf_t adc_config[] = {3, 4, 5, 6};
#define ADC_NUMOF ARRAY_SIZE(adc_config)
/** @} */
#ifdef __cplusplus

View File

@ -0,0 +1,30 @@
# Copyright (C) 2021 Luo Jia (HUST IoT Security Lab)
#
# 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.
#
config BOARD
default "alientek-pandora" if BOARD_ALIENTEK_PANDORA
config BOARD_ALIENTEK_PANDORA
bool
default y
select CPU_MODEL_STM32L475VE
# Put defined MCU peripherals here (in alphabetical order)
select HAS_PERIPH_RTC
select HAS_PERIPH_RTT
select HAS_PERIPH_TIMER
select HAS_PERIPH_UART
# Put other features for this board (in alphabetical order)
select HAS_RIOTBOOT
# Clock configuration
select BOARD_HAS_LSE
select HAVE_SAUL_GPIO
source "$(RIOTBOARD)/common/stm32/Kconfig"

View File

@ -0,0 +1,3 @@
MODULE = board
include $(RIOTBASE)/Makefile.base

View File

@ -0,0 +1,3 @@
ifneq (,$(filter saul_default,$(USEMODULE)))
USEMODULE += saul_gpio
endif

View File

@ -0,0 +1,11 @@
CPU = stm32
CPU_MODEL = stm32l475ve
# Put defined MCU peripherals here (in alphabetical order)
FEATURES_PROVIDED += periph_rtc
FEATURES_PROVIDED += periph_rtt
FEATURES_PROVIDED += periph_timer
FEATURES_PROVIDED += periph_uart
# Put other features for this board (in alphabetical order)
FEATURES_PROVIDED += riotboot

View File

@ -0,0 +1,13 @@
# we use shared STM32 configuration snippets
INCLUDES += -I$(RIOTBOARD)/common/stm32/include
# this board uses openocd with st-link
PROGRAMMER ?= openocd
OPENOCD_DEBUG_ADAPTER ?= stlink
# This board can become un-flashable after a hardfault,
# use connect_assert_srst to always be able to flash or reset the board.
OPENOCD_RESET_USE_CONNECT_ASSERT_SRST ?= 1
# openocd programmer is supported
PROGRAMMERS_SUPPORTED += openocd

View File

@ -0,0 +1,40 @@
/**
@defgroup boards_alientek-pandora Alientek Pandora
@ingroup boards
@brief Support for the Alientek Pandora board
## Overview
The Alientek Pandora is a development board manufactured jointly by Alientek and RT-Thread company.
It is based on STM32L475VET6 and have on-board LCD, SD card and WiFi access.
Users may connect to its on board ST-Link 2.1 compatible debugger to flash or debug.
Documents of this board are available on its [Alientek official website](http://www.alientek.com/productinfo/716137.html).
It may require a translation software to read it in English.
Additional resources may be found on [RT-Thread bsp support page](https://gitee.com/rtthread/rt-thread/tree/master/bsp/stm32/stm32l475-atk-pandora).
### Flashing the board
To flash the board, use the on board ST-Link programmer/debugger.
Input the following command:
make BOARD=alientek-pandora -C examples/hello-world flash
The NRST pin is connected to the on board debugger, so users do not need to reset manually
every time it requires to flash.
If the operating system raised a fault, users may manually reset the chip by pressing the reset button.
This button has a black color and is located between the four keys and the LED light.
### STDIO
STDIO is connected to pins PA9 (TX) and PA10 (RX).
Before you begin, check that the both the jumper caps marked as 'USART1' is connected.
Use the `term` target to open a terminal:
make BOARD=alientek-pandora -C examples/hello-world term
An on-board ST-Link compatible debugger is used to transport serial STDIO message.
*/

View File

@ -0,0 +1,79 @@
/*
* Copyright (C) 2021 Luo Jia (HUST IoT Security Lab)
*
* 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 boards_alientek-pandora
* @{
*
* @file
* @brief Board specific definitions for the Alientek Pandora board
*
* @author Luo Jia <luojia@hust.edu.cn>
*/
#ifndef BOARD_H
#define BOARD_H
#include <stdint.h>
#include "cpu.h"
#ifdef __cplusplus
extern "C" {
#endif
/**
* @name LED pin definitions and handlers
* @{
*/
#define LED0_PIN GPIO_PIN(PORT_E, 7) /**< LED0 gpio pin */
#define LED0_MASK (1 << 7) /**< LED0 gpio mask */
#define LED0_ON (GPIOB->BSRR = LED0_MASK) /**< Turn on LED0 */
#define LED0_OFF (GPIOB->BSRR = (LED0_MASK << 16)) /**< Turn off LED0 */
#define LED0_TOGGLE (GPIOB->ODR ^= LED0_MASK) /**< Toggle LED0 */
#define LED1_PIN GPIO_PIN(PORT_E, 8) /**< LED1 gpio pin */
#define LED1_MASK (1 << 8) /**< LED1 gpio mask */
#define LED1_ON (GPIOE->BSRR = LED1_MASK) /**< Turn on LED1 */
#define LED1_OFF (GPIOE->BSRR = (LED1_MASK << 16)) /**< Turn off LED1 */
#define LED1_TOGGLE (GPIOE->ODR ^= LED1_MASK) /**< Toggle LED1 */
#define LED2_PIN GPIO_PIN(PORT_E, 9) /**< LED2 gpio pin */
#define LED2_MASK (1 << 9) /**< LED2 gpio mask */
#define LED2_ON (GPIOE->BSRR = LED2_MASK) /**< Turn on LED2 */
#define LED2_OFF (GPIOE->BSRR = (LED2_MASK << 16)) /**< Turn off LED2 */
#define LED2_TOGGLE (GPIOE->ODR ^= LED2_MASK) /**< Toggle LED2 */
/** @} */
/**
* @name Wake-up and key buttons
* @{
*/
#define BTNWK_PIN GPIO_PIN(PORT_C, 13) /**< Wake button pin */
#define BTNWK_MODE GPIO_IN_PD /**< Wake button mode */
#define BTN0_PIN GPIO_PIN(PORT_D, 10) /**< Button 0 pin */
#define BTN0_MODE GPIO_IN_PD /**< Button 0 mode */
#define BTN1_PIN GPIO_PIN(PORT_D, 9) /**< Button 1 pin */
#define BTN1_MODE GPIO_IN_PD /**< Button 1 mode */
#define BTN2_PIN GPIO_PIN(PORT_D, 8) /**< Button 2 pin */
#define BTN2_MODE GPIO_IN_PD /**< Button 2 mode */
/** @} */
#ifdef __cplusplus
}
#endif
#endif /* BOARD_H */
/** @} */

View File

@ -0,0 +1,84 @@
/*
* Copyright (C) 2021 Luo Jia (HUST IoT Security Lab)
*
* 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 boards_alientek-pandora
* @{
*
* @file
* @brief Board specific configuration of direct mapped GPIOs
*
* @author Luo Jia <luojia@hust.edu.cn>
*/
#ifndef GPIO_PARAMS_H
#define GPIO_PARAMS_H
#include "board.h"
#include "saul/periph.h"
#ifdef __cplusplus
extern "C" {
#endif
/**
* @brief GPIO pin configuration
*/
static const saul_gpio_params_t saul_gpio_params[] =
{
#ifndef MODULE_SAUL_PWM
{
.name = "LED Red",
.pin = LED0_PIN,
.mode = GPIO_OUT,
.flags = (SAUL_GPIO_INVERTED | SAUL_GPIO_INIT_CLEAR),
},
{
.name = "LED Green",
.pin = LED1_PIN,
.mode = GPIO_OUT,
.flags = (SAUL_GPIO_INVERTED | SAUL_GPIO_INIT_CLEAR),
},
{
.name = "LED Blue",
.pin = LED2_PIN,
.mode = GPIO_OUT,
.flags = (SAUL_GPIO_INVERTED | SAUL_GPIO_INIT_CLEAR),
},
#endif
{
.name = "Wakeup Key",
.pin = BTNWK_PIN,
.mode = BTNWK_MODE
},
{
.name = "Key 0",
.pin = BTN0_PIN,
.mode = BTN0_MODE,
.flags = SAUL_GPIO_INVERTED
},
{
.name = "Key 1",
.pin = BTN1_PIN,
.mode = BTN1_MODE,
.flags = SAUL_GPIO_INVERTED
},
{
.name = "Key 2",
.pin = BTN2_PIN,
.mode = BTN2_MODE,
.flags = SAUL_GPIO_INVERTED
}
};
#ifdef __cplusplus
}
#endif
#endif /* GPIO_PARAMS_H */
/** @} */

View File

@ -0,0 +1,89 @@
/*
* Copyright (C) 2021 Luo Jia (HUST IoT Security Lab)
*
* 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 boards_alientek-pandora
* @{
*
* @file
* @brief Peripheral MCU configuration for the Alientek Pandora board
*
* @author Luo Jia <luojia@hust.edu.cn>
*/
#ifndef PERIPH_CONF_H
#define PERIPH_CONF_H
/* Add specific clock configuration (HSE, LSE) for this board here */
#ifndef CONFIG_BOARD_HAS_LSE
#define CONFIG_BOARD_HAS_LSE 1 /**< This board provides LSE */
#endif
#include "periph_cpu.h"
#include "clk_conf.h"
#include "cfg_rtt_default.h"
#ifdef __cplusplus
extern "C" {
#endif
/**
* @name Timer configuration
* @{
*/
/** All timers on board */
static const timer_conf_t timer_config[] = {
{
.dev = TIM5,
.max = 0xffffffff,
.rcc_mask = RCC_APB1ENR1_TIM5EN,
.bus = APB1,
.irqn = TIM5_IRQn
}
};
#define TIMER_0_ISR isr_tim5 /**< Timer 0 ISR number */
#define TIMER_NUMOF ARRAY_SIZE(timer_config) /**< Number of timers on this board */
/** @} */
/**
* @name UART configuration
* @{
*/
/** All UARTs on board */
static const uart_conf_t uart_config[] = {
{
.dev = USART1,
.rcc_mask = RCC_APB2ENR_USART1EN,
.rx_pin = GPIO_PIN(PORT_A, 10),
.tx_pin = GPIO_PIN(PORT_A, 9),
.rx_af = GPIO_AF7,
.tx_af = GPIO_AF7,
.bus = APB2,
.irqn = USART1_IRQn,
.type = STM32_USART,
.clk_src = 0, /* Use APB clock */
#ifdef UART_USE_DMA
.dma_stream = 6,
.dma_chan = 4
#endif
}
};
#define UART_0_ISR (isr_usart1) /**< Usart1 ISR number */
#define UART_NUMOF ARRAY_SIZE(uart_config) /**< Number of uarts on this board */
/** @} */
#ifdef __cplusplus
}
#endif
#endif /* PERIPH_CONF_H */
/** @} */

View File

@ -0,0 +1,15 @@
# Copyright (c) 2020 HAW Hamburg
#
# 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.
config BOARD
default "arduino-due" if BOARD_ARDUINO_DUE
config BOARD_ARDUINO_DUE
bool
default y
select BOARD_COMMON_ARDUINO_DUE
source "$(RIOTBOARD)/common/arduino-due/Kconfig"

View File

@ -0,0 +1,17 @@
# Copyright (c) 2020 HAW Hamburg
#
# 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.
config BOARD_ARDUINO_DUEMILANOVE
bool
default y
select BOARD_COMMON_ARDUINO_ATMEGA
select CPU_MODEL_ATMEGA328P
select MODULE_BOARDS_COMMON_ARDUINO-ATMEGA if TEST_KCONFIG
config BOARD
default "arduino-duemilanove" if BOARD_ARDUINO_DUEMILANOVE
source "$(RIOTBOARD)/common/arduino-atmega/Kconfig"

View File

@ -3,14 +3,6 @@ PORT_LINUX ?= /dev/ttyUSB0
PORT_DARWIN ?= $(firstword $(sort $(wildcard /dev/tty.usbmodem*)))
BAUD ?= 9600
# PROGRAMMER defaults to arduino which is the internal flasher via USB
# using avrdude. Can be overridden for debugging (which requires changes
# that require to use an ISP)
PROGRAMMER ?= arduino
# configure programmer speed in baud
FFLAGS_EXTRA += -b 57600
BOOTLOADER_SIZE ?= 2K
ROM_RESERVED ?= $(BOOTLOADER_SIZE)
ARDUINO_DUEMILANOVE_BOOTLOADER ?= atmegaboot
include $(RIOTBOARD)/common/arduino-atmega/Makefile.include

Some files were not shown because too many files have changed in this diff Show More