Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found
Select Git revision

Target

Select target project
  • avn/swd/skyward-boardcore
  • emilio.corigliano/skyward-boardcore
  • ettore.pane/skyward-boardcore
  • giulia.facchi/skyward-boardcore
  • valerio.flamminii/skyward-boardcore
  • nicolo.caruso/skyward-boardcore
6 results
Select Git revision
Show changes
Commits on Source (186)
Showing with 866 additions and 490 deletions
{ BasedOnStyle: Google
BasedOnStyle: Google,
AccessModifierOffset: -4, ColumnLimit: 80
AlignConsecutiveAssignments: true, IndentWidth: 4
AllowShortIfStatementsOnASingleLine: false, AccessModifierOffset: -4
AllowShortLoopsOnASingleLine: false,
BreakBeforeBraces: Allman, BreakBeforeBraces: Allman
ColumnLimit: 80, # Allow braceless single line if/else/for/while statements
ConstructorInitializerAllOnOneLineOrOnePerLine: false, RemoveBracesLLVM: true
IndentCaseLabels: true,
IndentWidth: 4, AlignConsecutiveAssignments: Consecutive
KeepEmptyLinesAtTheStartOfBlocks: true, AllowShortIfStatementsOnASingleLine: false
} AllowShortLoopsOnASingleLine: false
PackConstructorInitializers: BinPack
IndentCaseLabels: true
# Empty lines behavior
InsertNewlineAtEOF: true
KeepEmptyLinesAtEOF: true
KeepEmptyLinesAtTheStartOfBlocks: false
# Align pointers/references to the type, not the variable
DerivePointerAlignment: false
PointerAlignment: Left
...@@ -21,13 +21,13 @@ STM32F429zi_Discovery.xml ...@@ -21,13 +21,13 @@ STM32F429zi_Discovery.xml
._* ._*
.DS_Store .DS_Store
build build
build-host
cmake-build-* cmake-build-*
*.sublime-workspace *.sublime-workspace
*.sublime-project *.sublime-project
store.json store.json
**/generated/ **/generated/
core
__pycache__ __pycache__
/scripts/generators/generated /scripts/generators/generated
......
# Copyright (c) 2021 Skyward Experimental Rocketry # Copyright (c) 2024 Skyward Experimental Rocketry
# Authors: Luca Erbetta, Luca Conterio, Alberto Nidasio, Damiano Amatruda # Authors: Luca Erbetta, Luca Conterio, Alberto Nidasio, Damiano Amatruda, Giacomo Caironi
# #
# Permission is hereby granted, free of charge, to any person obtaining a copy # Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal # of this software and associated documentation files (the "Software"), to deal
...@@ -22,75 +22,74 @@ ...@@ -22,75 +22,74 @@
variables: variables:
GIT_SUBMODULE_STRATEGY: recursive GIT_SUBMODULE_STRATEGY: recursive
default:
image: registry.skywarder.eu/avn/swd/docker/miosix:v2
stages: stages:
- lint
- build - build
- test - test
- lint
- documentation - documentation
# Stage build
release:
stage: build
tags:
- miosix
script:
- ./sbs
debug:
stage: build
tags:
- miosix
script:
- ./sbs --debug
logdecoder:
stage: build
tags:
- miosix
script:
- cd scripts/logdecoder
- make
# Stage test
test:
stage: test
tags:
- miosix
script:
- ./sbs --test catch-tests-boardcore
# Stage lint # Stage lint
cppcheck: cppcheck:
stage: lint stage: lint
tags:
- miosix
script: script:
- cppcheck --version
- ./scripts/linter.py --cppcheck src - ./scripts/linter.py --cppcheck src
format: format:
stage: lint stage: lint
tags:
- miosix
script: script:
- clang-tidy --version
- clang-format --version
- ./scripts/linter.py --format src - ./scripts/linter.py --format src
copyright: copyright:
stage: lint stage: lint
tags:
- miosix
script: script:
- /usr/bin/python3 --version
- ./scripts/linter.py --copyright src - ./scripts/linter.py --copyright src
find: find:
stage: lint stage: lint
tags:
- miosix
script: script:
- /usr/bin/python3 --version
- ./scripts/linter.py --find src - ./scripts/linter.py --find src
# Stage build
build-debug:
stage: build
script:
- cmake --version
- ccache --version
- ninja --version
- ./sbs build --debug
build-release:
stage: build
script:
- cmake --version
- ccache --version
- ninja --version
- ./sbs build
logdecoder:
stage: build
script:
- g++ --version
- cd scripts/logdecoder
- make
# Stage test
test:
stage: test
script:
- ./sbs test
# Stage documentation # Stage documentation
pages: pages:
...@@ -98,6 +97,7 @@ pages: ...@@ -98,6 +97,7 @@ pages:
only: only:
- main - main
script: script:
- doxygen --version
- doxygen doc/Doxyfile - doxygen doc/Doxyfile
- mv doc/output/html public - mv doc/output/html public
artifacts: artifacts:
......
# Default ignored files
/shelf/
/workspace.xml
# Datasource local storage ignored files
/dataSources/
/dataSources.local.xml
# Editor-based HTTP Client requests
/httpRequests/
SkywardBoardcore
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="CMakeSharedSettings">
<configurations>
<configuration PROFILE_NAME="Debug" ENABLED="true" CONFIG_NAME="Debug" GENERATION_OPTIONS="-DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DCMAKE_TOOLCHAIN_FILE=$CMakeProjectDir$/libs/miosix-kernel/miosix/_tools/toolchain.cmake -GNinja" />
<configuration PROFILE_NAME="Release" ENABLED="true" CONFIG_NAME="Release" GENERATION_OPTIONS="-DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DCMAKE_TOOLCHAIN_FILE=$CMakeProjectDir$/libs/miosix-kernel/miosix/_tools/toolchain.cmake -GNinja" />
</configurations>
</component>
</project>
<component name="ProjectCodeStyleConfiguration">
<code_scheme name="Project" version="173">
<clangFormatSettings>
<option name="ENABLED" value="true" />
</clangFormatSettings>
</code_scheme>
</component>
<component name="ProjectCodeStyleConfiguration">
<state>
<option name="USE_PER_PROJECT_SETTINGS" value="true" />
</state>
</component>
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="CMakeWorkspace" PROJECT_DIR="$PROJECT_DIR$" />
<component name="CidrRootsConfiguration">
<sourceRoots>
<file path="$PROJECT_DIR$/src" />
</sourceRoots>
<excludeRoots>
<file path="$PROJECT_DIR$/build" />
<file path="$PROJECT_DIR$/libs" />
</excludeRoots>
</component>
</project>
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/skyward-boardcore.iml" filepath="$PROJECT_DIR$/.idea/skyward-boardcore.iml" />
</modules>
</component>
</project>
<?xml version="1.0" encoding="UTF-8"?>
<module classpath="CMake" type="CPP_MODULE" version="4" />
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$" vcs="Git" />
<mapping directory="$PROJECT_DIR$/libs/Catch2" vcs="Git" />
<mapping directory="$PROJECT_DIR$/libs/eigen" vcs="Git" />
<mapping directory="$PROJECT_DIR$/libs/fmt" vcs="Git" />
<mapping directory="$PROJECT_DIR$/libs/mavlink_skyward_lib" vcs="Git" />
<mapping directory="$PROJECT_DIR$/libs/miosix-kernel" vcs="Git" />
<mapping directory="$PROJECT_DIR$/libs/miosix-kernel/miosix/_examples/datalogger/tscpp" vcs="Git" />
<mapping directory="$PROJECT_DIR$/libs/mxgui" vcs="Git" />
<mapping directory="$PROJECT_DIR$/libs/tscpp" vcs="Git" />
</component>
</project>
This diff is collapsed.
...@@ -19,51 +19,54 @@ ...@@ -19,51 +19,54 @@
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE. # THE SOFTWARE.
cmake_minimum_required(VERSION 3.16) cmake_minimum_required(VERSION 3.25)
enable_testing() enable_testing()
include(cmake/sbs.cmake)
#-----------------------------------------------------------------------------# #-----------------------------------------------------------------------------#
# Project # # Project #
#-----------------------------------------------------------------------------# #-----------------------------------------------------------------------------#
project(SkywardBoardcore) project(Boardcore)
include(cmake/sbs.cmake)
#-----------------------------------------------------------------------------# #-----------------------------------------------------------------------------#
# Entrypoints # # Entrypoints #
#-----------------------------------------------------------------------------# #-----------------------------------------------------------------------------#
add_executable(bmx160-calibration-v2 src/entrypoints/bmx160-calibration-entry.cpp) add_executable(bmx160-calibration-v2 src/entrypoints/bmx160-calibration-entry.cpp)
sbs_target(bmx160-calibration-v2 stm32f429zi_skyward_death_stack_x) sbs_target(bmx160-calibration-v2 stm32f429zi_death_stack_v2)
add_executable(bmx160-calibration-v3 src/entrypoints/bmx160-calibration-entry.cpp) add_executable(bmx160-calibration-v3 src/entrypoints/bmx160-calibration-entry.cpp)
sbs_target(bmx160-calibration-v3 stm32f429zi_skyward_death_stack_v3) sbs_target(bmx160-calibration-v3 stm32f429zi_death_stack_v3)
add_executable(config-dsgamma src/entrypoints/config-dsgamma.cpp) add_executable(config-dsgamma src/entrypoints/config-dsgamma.cpp)
sbs_target(config-dsgamma stm32f429zi_stm32f4discovery) sbs_target(config-dsgamma stm32f429zi_stm32f4discovery)
add_executable(imu-calibration src/entrypoints/imu-calibration.cpp) add_executable(imu-calibration src/entrypoints/imu-calibration.cpp)
sbs_target(imu-calibration stm32f429zi_skyward_parafoil) sbs_target(imu-calibration stm32f429zi_parafoil)
add_executable(mxgui-helloworld src/entrypoints/examples/mxgui-helloworld.cpp) add_executable(mxgui-helloworld src/entrypoints/examples/mxgui-helloworld.cpp)
sbs_target(mxgui-helloworld stm32f429zi_stm32f4discovery) sbs_target(mxgui-helloworld stm32f429zi_stm32f4discovery)
add_executable(kernel-testsuite src/entrypoints/kernel-testsuite.cpp) add_executable(compute-unit-v2-testsuite src/entrypoints/compute-unit-v2-testsuite.cpp)
sbs_target(kernel-testsuite stm32f767zi_compute_unit) sbs_target(compute-unit-v2-testsuite stm32f767zi_compute_unit_v2_no_xram)
# add_executable(kernel-testsuite src/entrypoints/kernel-testsuite.cpp)
# sbs_target(kernel-testsuite stm32f767zi_compute_unit)
add_executable(runcam-settings src/entrypoints/runcam-settings.cpp) add_executable(runcam-settings src/entrypoints/runcam-settings.cpp)
sbs_target(runcam-settings stm32f407vg_stm32f4discovery) sbs_target(runcam-settings stm32f407vg_stm32f4discovery)
add_executable(sdcard-benchmark src/entrypoints/sdcard-benchmark.cpp) add_executable(sdcard-benchmark src/entrypoints/sdcard-benchmark.cpp)
sbs_target(sdcard-benchmark stm32f429zi_skyward_death_stack_x) sbs_target(sdcard-benchmark stm32f429zi_death_stack_v2)
add_executable(sx1278fsk-ra01-serial src/entrypoints/sx1278-serial.cpp) add_executable(sx1278fsk-ra01-serial src/entrypoints/sx1278-serial.cpp)
target_compile_definitions(sx1278fsk-ra01-serial PRIVATE SX1278_IS_FSK) target_compile_definitions(sx1278fsk-ra01-serial PRIVATE SX1278_IS_FSK)
sbs_target(sx1278fsk-ra01-serial stm32f429zi_skyward_groundstation_v2) sbs_target(sx1278fsk-ra01-serial stm32f429zi_nokia)
add_executable(sx1278lora-ra01-serial src/entrypoints/sx1278-serial.cpp) add_executable(sx1278lora-ra01-serial src/entrypoints/sx1278-serial.cpp)
target_compile_definitions(sx1278lora-ra01-serial PRIVATE SX1278_IS_LORA) target_compile_definitions(sx1278lora-ra01-serial PRIVATE SX1278_IS_LORA)
sbs_target(sx1278lora-ra01-serial stm32f429zi_skyward_groundstation_v2) sbs_target(sx1278lora-ra01-serial stm32f429zi_nokia)
add_executable(sx1278fsk-skyward433-serial src/entrypoints/sx1278-serial.cpp) add_executable(sx1278fsk-skyward433-serial src/entrypoints/sx1278-serial.cpp)
target_compile_definitions(sx1278fsk-skyward433-serial PRIVATE SX1278_IS_FSK SX1278_IS_SKYWARD433) target_compile_definitions(sx1278fsk-skyward433-serial PRIVATE SX1278_IS_FSK SX1278_IS_SKYWARD433)
...@@ -71,11 +74,11 @@ sbs_target(sx1278fsk-skyward433-serial stm32f767zi_gemini_gs) ...@@ -71,11 +74,11 @@ sbs_target(sx1278fsk-skyward433-serial stm32f767zi_gemini_gs)
add_executable(sx1278lora-skyward433-serial src/entrypoints/sx1278-serial.cpp) add_executable(sx1278lora-skyward433-serial src/entrypoints/sx1278-serial.cpp)
target_compile_definitions(sx1278lora-skyward433-serial PRIVATE SX1278_IS_LORA SX1278_IS_SKYWARD433) target_compile_definitions(sx1278lora-skyward433-serial PRIVATE SX1278_IS_LORA SX1278_IS_SKYWARD433)
sbs_target(sx1278lora-skyward433-serial stm32f429zi_skyward_groundstation_v2) sbs_target(sx1278lora-skyward433-serial stm32f429zi_nokia)
add_executable(sx1278fsk-ebyterig-serial src/entrypoints/sx1278-serial.cpp) add_executable(sx1278fsk-ebyterig-serial src/entrypoints/sx1278-serial.cpp)
target_compile_definitions(sx1278fsk-ebyterig-serial PRIVATE SX1278_IS_FSK) target_compile_definitions(sx1278fsk-ebyterig-serial PRIVATE SX1278_IS_FSK)
sbs_target(sx1278fsk-ebyterig-serial stm32f429zi_skyward_rig) sbs_target(sx1278fsk-ebyterig-serial stm32f429zi_rig)
#-----------------------------------------------------------------------------# #-----------------------------------------------------------------------------#
# Tests # # Tests #
...@@ -103,10 +106,10 @@ add_executable(test-rtc src/tests/test-rtc.cpp) ...@@ -103,10 +106,10 @@ add_executable(test-rtc src/tests/test-rtc.cpp)
sbs_target(test-rtc stm32f767zi_compute_unit) sbs_target(test-rtc stm32f767zi_compute_unit)
add_executable(test-sensormanager src/tests/test-sensormanager.cpp) add_executable(test-sensormanager src/tests/test-sensormanager.cpp)
sbs_target(test-sensormanager stm32f429zi_skyward_death_stack_x) sbs_target(test-sensormanager stm32f429zi_death_stack_v2)
add_executable(test-serial src/tests/test-serial.cpp) add_executable(test-serial src/tests/test-serial.cpp)
sbs_target(test-serial stm32f756zg_nucleo) sbs_target(test-serial stm32f767zi_lyra_biscotto)
add_executable(test-taskscheduler src/tests/scheduler/test-taskscheduler.cpp) add_executable(test-taskscheduler src/tests/scheduler/test-taskscheduler.cpp)
sbs_target(test-taskscheduler stm32f407vg_stm32f4discovery) sbs_target(test-taskscheduler stm32f407vg_stm32f4discovery)
...@@ -114,26 +117,38 @@ sbs_target(test-taskscheduler stm32f407vg_stm32f4discovery) ...@@ -114,26 +117,38 @@ sbs_target(test-taskscheduler stm32f407vg_stm32f4discovery)
add_executable(test-trace-logger src/tests/test-trace-logger.cpp) add_executable(test-trace-logger src/tests/test-trace-logger.cpp)
sbs_target(test-trace-logger stm32f429zi_stm32f4discovery) sbs_target(test-trace-logger stm32f429zi_stm32f4discovery)
add_executable(test-hil
src/tests/hil/test-hil.cpp
src/tests/hil/Sensors/Sensors.cpp
)
sbs_target(test-hil stm32f767zi_death_stack_v4)
#-----------------------------------------------------------------------------# #-----------------------------------------------------------------------------#
# Tests - Catch # # Tests - Catch #
#-----------------------------------------------------------------------------# #-----------------------------------------------------------------------------#
add_executable(catch-tests-boardcore add_executable(catch-tests-boardcore
src/tests/catch/catch-tests-entry.cpp src/tests/catch/catch-tests-entry.cpp
src/tests/catch/skyQuaternion/test-skyquaternion.cpp
src/tests/catch/examples/example-test-factorial.cpp src/tests/catch/examples/example-test-factorial.cpp
src/tests/catch/test-aero.cpp src/tests/catch/test-aero.cpp
# src/tests/catch/test-buttonhandler.cpp # src/tests/catch/test-buttonhandler.cpp
src/tests/catch/test-circularbuffer.cpp src/tests/catch/test-circularbuffer.cpp
src/tests/catch/test-eventbroker.cpp src/tests/catch/test-eventbroker.cpp
src/tests/catch/test-timestamptimer.cpp src/tests/catch/test-gptimer.cpp
src/tests/catch/test-kalman.cpp src/tests/catch/test-kalman.cpp
src/tests/catch/test-numeric.cpp
src/tests/catch/test-packetqueue.cpp src/tests/catch/test-packetqueue.cpp
src/tests/catch/test-sensormanager-catch.cpp src/tests/catch/test-sensormanager-catch.cpp
src/tests/catch/xbee/test-xbee-parser.cpp src/tests/catch/xbee/test-xbee-parser.cpp
src/tests/catch/test-modulemanager.cpp src/tests/catch/test-modulemanager.cpp
src/tests/catch/test-dependencymanager.cpp
src/tests/catch/test-MEA.cpp src/tests/catch/test-MEA.cpp
src/tests/catch/test-airbrakesInterp.cpp src/tests/catch/test-airbrakesInterp.cpp
src/tests/catch/test-pitot.cpp src/tests/catch/test-pitot.cpp
src/tests/catch/test-units.cpp
src/tests/catch/test-registry-frontend.cpp
src/tests/catch/propagator/test-propagator.cpp
) )
target_compile_definitions(catch-tests-boardcore PRIVATE USE_MOCK_PERIPHERALS) target_compile_definitions(catch-tests-boardcore PRIVATE USE_MOCK_PERIPHERALS)
sbs_target(catch-tests-boardcore stm32f429zi_stm32f4discovery) sbs_target(catch-tests-boardcore stm32f429zi_stm32f4discovery)
...@@ -149,8 +164,8 @@ sbs_target(test-hbridge stm32f429zi_stm32f4discovery) ...@@ -149,8 +164,8 @@ sbs_target(test-hbridge stm32f429zi_stm32f4discovery)
add_executable(test-servo src/tests/actuators/test-servo.cpp) add_executable(test-servo src/tests/actuators/test-servo.cpp)
sbs_target(test-servo stm32f429zi_stm32f4discovery) sbs_target(test-servo stm32f429zi_stm32f4discovery)
add_executable(test-buzzer src/tests/actuators/test-buzzer.cpp) # add_executable(test-buzzer src/tests/actuators/test-buzzer.cpp)
sbs_target(test-buzzer stm32f429zi_hre_test_stand) # sbs_target(test-buzzer stm32f429zi_hre_test_stand)
add_executable(test-stepper src/tests/actuators/test-stepper.cpp) add_executable(test-stepper src/tests/actuators/test-stepper.cpp)
sbs_target(test-stepper stm32f767zi_nucleo) sbs_target(test-stepper stm32f767zi_nucleo)
...@@ -166,28 +181,28 @@ add_executable(test-kalman-benchmark src/tests/algorithms/Kalman/test-kalman-ben ...@@ -166,28 +181,28 @@ add_executable(test-kalman-benchmark src/tests/algorithms/Kalman/test-kalman-ben
sbs_target(test-kalman-benchmark stm32f429zi_stm32f4discovery) sbs_target(test-kalman-benchmark stm32f429zi_stm32f4discovery)
add_executable(test-attitude-parafoil src/tests/algorithms/NAS/test-attitude-parafoil.cpp) add_executable(test-attitude-parafoil src/tests/algorithms/NAS/test-attitude-parafoil.cpp)
sbs_target(test-attitude-parafoil stm32f429zi_skyward_parafoil) sbs_target(test-attitude-parafoil stm32f429zi_parafoil)
add_executable(test-attitude-stack src/tests/algorithms/NAS/test-attitude-stack.cpp) add_executable(test-attitude-stack src/tests/algorithms/NAS/test-attitude-stack.cpp)
sbs_target(test-attitude-stack stm32f429zi_skyward_death_stack_x) sbs_target(test-attitude-stack stm32f429zi_death_stack_v2)
add_executable(test-nas-parafoil src/tests/algorithms/NAS/test-nas-parafoil.cpp) add_executable(test-nas-parafoil src/tests/algorithms/NAS/test-nas-parafoil.cpp)
sbs_target(test-nas-parafoil stm32f429zi_skyward_parafoil) sbs_target(test-nas-parafoil stm32f429zi_parafoil)
add_executable(test-nas src/tests/algorithms/NAS/test-nas.cpp) add_executable(test-nas src/tests/algorithms/NAS/test-nas.cpp)
sbs_target(test-nas stm32f429zi_skyward_death_stack_v3) sbs_target(test-nas stm32f429zi_death_stack_v3)
add_executable(test-nas-with-triad src/tests/algorithms/NAS/test-nas-with-triad.cpp) add_executable(test-nas-with-triad src/tests/algorithms/NAS/test-nas-with-triad.cpp)
sbs_target(test-nas-with-triad stm32f429zi_skyward_death_stack_x) sbs_target(test-nas-with-triad stm32f429zi_death_stack_v2)
add_executable(test-triad src/tests/algorithms/NAS/test-triad.cpp) add_executable(test-triad src/tests/algorithms/NAS/test-triad.cpp)
sbs_target(test-triad stm32f429zi_skyward_death_stack_v3) sbs_target(test-triad stm32f429zi_death_stack_v3)
add_executable(test-triad-parafoil src/tests/algorithms/NAS/test-triad-parafoil.cpp) add_executable(test-triad-parafoil src/tests/algorithms/NAS/test-triad-parafoil.cpp)
sbs_target(test-triad-parafoil stm32f429zi_skyward_parafoil) sbs_target(test-triad-parafoil stm32f429zi_parafoil)
add_executable(test-ada src/tests/algorithms/ADA/test-ada.cpp) add_executable(test-ada src/tests/algorithms/ADA/test-ada.cpp)
sbs_target(test-ada stm32f429zi_skyward_death_stack_v3) sbs_target(test-ada stm32f429zi_death_stack_v3)
#-----------------------------------------------------------------------------# #-----------------------------------------------------------------------------#
# Tests - Boards # # Tests - Boards #
...@@ -204,19 +219,19 @@ sbs_target(test-qspi-flash stm32f767zi_compute_unit) ...@@ -204,19 +219,19 @@ sbs_target(test-qspi-flash stm32f767zi_compute_unit)
#-----------------------------------------------------------------------------# #-----------------------------------------------------------------------------#
add_executable(test-ad5204 src/tests/drivers/test-ad5204.cpp) add_executable(test-ad5204 src/tests/drivers/test-ad5204.cpp)
sbs_target(test-ad5204 stm32f205rc_skyward_ciuti) sbs_target(test-ad5204 stm32f205rc_ciuti)
add_executable(test-can-2way src/tests/drivers/canbus/CanDriver/test-can-2way.cpp) add_executable(test-can-2way src/tests/drivers/canbus/CanDriver/test-can-2way.cpp)
sbs_target(test-can-2way stm32f429zi_skyward_pyxis_auxiliary) sbs_target(test-can-2way stm32f429zi_pyxis_auxiliary)
add_executable(test-can-filters src/tests/drivers/canbus/CanDriver/test-can-filters.cpp) add_executable(test-can-filters src/tests/drivers/canbus/CanDriver/test-can-filters.cpp)
sbs_target(test-can-filters stm32f429zi_skyward_pyxis_auxiliary) sbs_target(test-can-filters stm32f429zi_pyxis_auxiliary)
add_executable(test-can-loopback src/tests/drivers/canbus/CanDriver/test-can-loopback.cpp) add_executable(test-can-loopback src/tests/drivers/canbus/CanDriver/test-can-loopback.cpp)
sbs_target(test-can-loopback stm32f429zi_skyward_death_stack_x) sbs_target(test-can-loopback stm32f429zi_death_stack_v2)
add_executable(test-can-protocol src/tests/drivers/canbus/CanProtocol/test-can-protocol.cpp) add_executable(test-can-protocol src/tests/drivers/canbus/CanProtocol/test-can-protocol.cpp)
sbs_target(test-can-protocol stm32f429zi_skyward_death_stack_x) sbs_target(test-can-protocol stm32f429zi_death_stack_v2)
add_executable(test-dsgamma src/tests/drivers/test-dsgamma.cpp) add_executable(test-dsgamma src/tests/drivers/test-dsgamma.cpp)
sbs_target(test-dsgamma stm32f429zi_stm32f4discovery) sbs_target(test-dsgamma stm32f429zi_stm32f4discovery)
...@@ -249,7 +264,7 @@ add_executable(test-timestamptimer src/tests/drivers/timer/test-timestamptimer.c ...@@ -249,7 +264,7 @@ add_executable(test-timestamptimer src/tests/drivers/timer/test-timestamptimer.c
sbs_target(test-timestamptimer stm32f429zi_stm32f4discovery) sbs_target(test-timestamptimer stm32f429zi_stm32f4discovery)
add_executable(test-xbee-bidir src/tests/drivers/xbee/test-xbee-bidir.cpp) add_executable(test-xbee-bidir src/tests/drivers/xbee/test-xbee-bidir.cpp)
sbs_target(test-xbee-bidir stm32f429zi_skyward_death_stack_x) sbs_target(test-xbee-bidir stm32f429zi_death_stack_v2)
add_executable(test-xbee-gui add_executable(test-xbee-gui
src/tests/drivers/xbee/test-xbee-gui.cpp src/tests/drivers/xbee/test-xbee-gui.cpp
...@@ -269,6 +284,9 @@ sbs_target(test-usart-f4 stm32f429zi_stm32f4discovery) ...@@ -269,6 +284,9 @@ sbs_target(test-usart-f4 stm32f429zi_stm32f4discovery)
add_executable(test-usart-f7 src/tests/drivers/usart/test-usart.cpp) add_executable(test-usart-f7 src/tests/drivers/usart/test-usart.cpp)
sbs_target(test-usart-f7 stm32f767zi_nucleo) sbs_target(test-usart-f7 stm32f767zi_nucleo)
add_executable(test-dma-mem-to-mem src/tests/drivers/test-dma-mem-to-mem.cpp)
sbs_target(test-dma-mem-to-mem stm32f767zi_compute_unit)
add_executable(test-i2c-driver-f4 src/tests/drivers/i2c/test-i2c-driver.cpp) add_executable(test-i2c-driver-f4 src/tests/drivers/i2c/test-i2c-driver.cpp)
sbs_target(test-i2c-driver-f4 stm32f429zi_stm32f4discovery) sbs_target(test-i2c-driver-f4 stm32f429zi_stm32f4discovery)
...@@ -284,6 +302,12 @@ sbs_target(test-i2c-f7 stm32f767zi_nucleo) ...@@ -284,6 +302,12 @@ sbs_target(test-i2c-f7 stm32f767zi_nucleo)
add_executable(test-wiz5500 src/tests/drivers/test-wiz5500.cpp) add_executable(test-wiz5500 src/tests/drivers/test-wiz5500.cpp)
sbs_target(test-wiz5500 stm32f767zi_gemini_gs) sbs_target(test-wiz5500 stm32f767zi_gemini_gs)
add_executable(test-bsram src/tests/drivers/test-bsram.cpp)
sbs_target(test-bsram stm32f767zi_lyra_biscotto)
add_executable(test-dipswitch src/tests/drivers/test-dipswitch.cpp)
sbs_target(test-dipswitch stm32f767zi_lyra_gs)
#-----------------------------------------------------------------------------# #-----------------------------------------------------------------------------#
# Tests - Events # # Tests - Events #
#-----------------------------------------------------------------------------# #-----------------------------------------------------------------------------#
...@@ -296,59 +320,59 @@ sbs_target(test-fsm stm32f429zi_stm32f4discovery) ...@@ -296,59 +320,59 @@ sbs_target(test-fsm stm32f429zi_stm32f4discovery)
#-----------------------------------------------------------------------------# #-----------------------------------------------------------------------------#
add_executable(test-sx1278fsk-bidir src/tests/radio/sx1278/fsk/test-sx1278-bidir.cpp) add_executable(test-sx1278fsk-bidir src/tests/radio/sx1278/fsk/test-sx1278-bidir.cpp)
sbs_target(test-sx1278fsk-bidir stm32f429zi_skyward_groundstation_v2) sbs_target(test-sx1278fsk-bidir stm32f429zi_nokia)
add_executable(test-sx1278fsk-tx src/tests/radio/sx1278/test-sx1278-bench-serial.cpp) add_executable(test-sx1278fsk-tx src/tests/radio/sx1278/test-sx1278-bench-serial.cpp)
target_compile_definitions(test-sx1278fsk-tx PRIVATE DISABLE_RX) target_compile_definitions(test-sx1278fsk-tx PRIVATE DISABLE_RX)
sbs_target(test-sx1278fsk-tx stm32f429zi_skyward_groundstation_v2) sbs_target(test-sx1278fsk-tx stm32f429zi_nokia)
add_executable(test-sx1278fsk-rx src/tests/radio/sx1278/test-sx1278-bench-serial.cpp) add_executable(test-sx1278fsk-rx src/tests/radio/sx1278/test-sx1278-bench-serial.cpp)
target_compile_definitions(test-sx1278fsk-rx PRIVATE DISABLE_TX) target_compile_definitions(test-sx1278fsk-rx PRIVATE DISABLE_TX)
sbs_target(test-sx1278fsk-rx stm32f429zi_skyward_groundstation_v2) sbs_target(test-sx1278fsk-rx stm32f429zi_nokia)
add_executable(test-sx1278fsk-gui-tx src/tests/radio/sx1278/test-sx1278-bench-gui.cpp) add_executable(test-sx1278fsk-gui-tx src/tests/radio/sx1278/test-sx1278-bench-gui.cpp)
target_compile_definitions(test-sx1278fsk-gui-tx PRIVATE DISABLE_RX) target_compile_definitions(test-sx1278fsk-gui-tx PRIVATE DISABLE_RX)
sbs_target(test-sx1278fsk-gui-tx stm32f429zi_skyward_groundstation_v2) sbs_target(test-sx1278fsk-gui-tx stm32f429zi_nokia)
add_executable(test-sx1278fsk-gui-rx src/tests/radio/sx1278/test-sx1278-bench-gui.cpp) add_executable(test-sx1278fsk-gui-rx src/tests/radio/sx1278/test-sx1278-bench-gui.cpp)
target_compile_definitions(test-sx1278fsk-gui-rx PRIVATE DISABLE_TX) target_compile_definitions(test-sx1278fsk-gui-rx PRIVATE DISABLE_TX)
sbs_target(test-sx1278fsk-gui-rx stm32f429zi_skyward_groundstation_v2) sbs_target(test-sx1278fsk-gui-rx stm32f429zi_nokia)
add_executable(test-sx1278fsk-mavlink src/tests/radio/sx1278/fsk/test-sx1278-mavlink.cpp) add_executable(test-sx1278fsk-mavlink src/tests/radio/sx1278/fsk/test-sx1278-mavlink.cpp)
sbs_target(test-sx1278fsk-mavlink stm32f429zi_skyward_groundstation_v2) sbs_target(test-sx1278fsk-mavlink stm32f429zi_nokia)
# add_executable(test-mavlinkdriver src/tests/radio/test-mavlinkdriver.cpp) # add_executable(test-mavlinkdriver src/tests/radio/test-mavlinkdriver.cpp)
# sbs_target(test-mavlinkdriver stm32f407vg_stm32f4discovery) # sbs_target(test-mavlinkdriver stm32f407vg_stm32f4discovery)
add_executable(test-sx1278lora-bidir src/tests/radio/sx1278/lora/test-sx1278-bidir.cpp) add_executable(test-sx1278lora-bidir src/tests/radio/sx1278/lora/test-sx1278-bidir.cpp)
sbs_target(test-sx1278lora-bidir stm32f429zi_skyward_groundstation_v2) sbs_target(test-sx1278lora-bidir stm32f429zi_nokia)
add_executable(test-sx1278lora-mavlink src/tests/radio/sx1278/lora/test-sx1278-mavlink.cpp) add_executable(test-sx1278lora-mavlink src/tests/radio/sx1278/lora/test-sx1278-mavlink.cpp)
sbs_target(test-sx1278lora-mavlink stm32f429zi_skyward_groundstation_v2) sbs_target(test-sx1278lora-mavlink stm32f429zi_nokia)
add_executable(test-sx1278lora-simple-rx src/tests/radio/sx1278/lora/test-sx1278-simple.cpp) add_executable(test-sx1278lora-simple-rx src/tests/radio/sx1278/lora/test-sx1278-simple.cpp)
target_compile_definitions(test-sx1278lora-simple-rx PRIVATE ENABLE_RX) target_compile_definitions(test-sx1278lora-simple-rx PRIVATE ENABLE_RX)
sbs_target(test-sx1278lora-simple-rx stm32f429zi_skyward_groundstation_v2) sbs_target(test-sx1278lora-simple-rx stm32f429zi_nokia)
add_executable(test-sx1278lora-simple-tx src/tests/radio/sx1278/lora/test-sx1278-simple.cpp) add_executable(test-sx1278lora-simple-tx src/tests/radio/sx1278/lora/test-sx1278-simple.cpp)
target_compile_definitions(test-sx1278lora-simple-tx PRIVATE ENABLE_TX) target_compile_definitions(test-sx1278lora-simple-tx PRIVATE ENABLE_TX)
sbs_target(test-sx1278lora-simple-tx stm32f429zi_skyward_groundstation_v2) sbs_target(test-sx1278lora-simple-tx stm32f429zi_nokia)
add_executable(test-sx1278lora-tx src/tests/radio/sx1278/test-sx1278-bench-serial.cpp) add_executable(test-sx1278lora-tx src/tests/radio/sx1278/test-sx1278-bench-serial.cpp)
target_compile_definitions(test-sx1278lora-tx PRIVATE DISABLE_RX SX1278_IS_LORA) target_compile_definitions(test-sx1278lora-tx PRIVATE DISABLE_RX SX1278_IS_LORA)
sbs_target(test-sx1278lora-tx stm32f429zi_skyward_groundstation_v2) sbs_target(test-sx1278lora-tx stm32f429zi_nokia)
add_executable(test-sx1278lora-rx src/tests/radio/sx1278/test-sx1278-bench-serial.cpp) add_executable(test-sx1278lora-rx src/tests/radio/sx1278/test-sx1278-bench-serial.cpp)
target_compile_definitions(test-sx1278lora-rx PRIVATE DISABLE_TX SX1278_IS_LORA) target_compile_definitions(test-sx1278lora-rx PRIVATE DISABLE_TX SX1278_IS_LORA)
sbs_target(test-sx1278lora-rx stm32f429zi_skyward_groundstation_v2) sbs_target(test-sx1278lora-rx stm32f429zi_nokia)
add_executable(test-sx1278lora-gui-rx src/tests/radio/sx1278/test-sx1278-bench-gui.cpp) add_executable(test-sx1278lora-gui-rx src/tests/radio/sx1278/test-sx1278-bench-gui.cpp)
target_compile_definitions(test-sx1278lora-gui-rx PRIVATE DISABLE_TX SX1278_IS_LORA) target_compile_definitions(test-sx1278lora-gui-rx PRIVATE DISABLE_TX SX1278_IS_LORA)
sbs_target(test-sx1278lora-gui-rx stm32f429zi_skyward_groundstation_v2) sbs_target(test-sx1278lora-gui-rx stm32f429zi_nokia)
add_executable(test-sx1278lora-gui-tx src/tests/radio/sx1278/test-sx1278-bench-gui.cpp) add_executable(test-sx1278lora-gui-tx src/tests/radio/sx1278/test-sx1278-bench-gui.cpp)
target_compile_definitions(test-sx1278lora-gui-tx PRIVATE DISABLE_RX SX1278_IS_LORA) target_compile_definitions(test-sx1278lora-gui-tx PRIVATE DISABLE_RX SX1278_IS_LORA)
sbs_target(test-sx1278lora-gui-tx stm32f429zi_skyward_groundstation_v2) sbs_target(test-sx1278lora-gui-tx stm32f429zi_nokia)
#-----------------------------------------------------------------------------# #-----------------------------------------------------------------------------#
# Tests - Sensors # # Tests - Sensors #
...@@ -358,7 +382,7 @@ add_executable(test-ads1118 src/tests/sensors/test-ads1118.cpp) ...@@ -358,7 +382,7 @@ add_executable(test-ads1118 src/tests/sensors/test-ads1118.cpp)
sbs_target(test-ads1118 stm32f407vg_stm32f4discovery) sbs_target(test-ads1118 stm32f407vg_stm32f4discovery)
add_executable(test-ads131m04 src/tests/sensors/test-ads131m04.cpp) add_executable(test-ads131m04 src/tests/sensors/test-ads131m04.cpp)
sbs_target(test-ads131m04 stm32f429zi_skyward_death_stack_v3) sbs_target(test-ads131m04 stm32f429zi_death_stack_v3)
add_executable(test-ads131m08 src/tests/sensors/test-ads131m08.cpp) add_executable(test-ads131m08 src/tests/sensors/test-ads131m08.cpp)
sbs_target(test-ads131m08 stm32f767zi_compute_unit) sbs_target(test-ads131m08 stm32f767zi_compute_unit)
...@@ -391,10 +415,10 @@ add_executable(test-bmp280-i2c src/tests/sensors/test-bmp280-i2c.cpp) ...@@ -391,10 +415,10 @@ add_executable(test-bmp280-i2c src/tests/sensors/test-bmp280-i2c.cpp)
sbs_target(test-bmp280-i2c stm32f429zi_stm32f4discovery) sbs_target(test-bmp280-i2c stm32f429zi_stm32f4discovery)
add_executable(test-bmx160 src/tests/sensors/test-bmx160.cpp) add_executable(test-bmx160 src/tests/sensors/test-bmx160.cpp)
sbs_target(test-bmx160 stm32f429zi_skyward_death_stack_x) sbs_target(test-bmx160 stm32f429zi_death_stack_v2)
add_executable(test-bmx160-with-correction src/tests/sensors/test-bmx160-with-correction.cpp) add_executable(test-bmx160-with-correction src/tests/sensors/test-bmx160-with-correction.cpp)
sbs_target(test-bmx160-with-correction stm32f429zi_skyward_death_stack_x) sbs_target(test-bmx160-with-correction stm32f429zi_death_stack_v2)
add_executable(test-hx711 src/tests/sensors/test-hx711.cpp) add_executable(test-hx711 src/tests/sensors/test-hx711.cpp)
sbs_target(test-hx711 stm32f429zi_stm32f4discovery) sbs_target(test-hx711 stm32f429zi_stm32f4discovery)
...@@ -409,10 +433,10 @@ add_executable(test-lis3dsh src/tests/sensors/test-lis3dsh.cpp) ...@@ -409,10 +433,10 @@ add_executable(test-lis3dsh src/tests/sensors/test-lis3dsh.cpp)
sbs_target(test-lis3dsh stm32f407vg_stm32f4discovery) sbs_target(test-lis3dsh stm32f407vg_stm32f4discovery)
add_executable(test-lis3mdl src/tests/sensors/test-lis3mdl.cpp) add_executable(test-lis3mdl src/tests/sensors/test-lis3mdl.cpp)
sbs_target(test-lis3mdl stm32f429zi_skyward_death_stack_x) sbs_target(test-lis3mdl stm32f429zi_death_stack_v2)
add_executable(test-lis331hh src/tests/sensors/test-lis331hh.cpp) add_executable(test-lis331hh src/tests/sensors/test-lis331hh.cpp)
sbs_target(test-lis331hh stm32f205rc_skyward_ciuti) sbs_target(test-lis331hh stm32f205rc_ciuti)
add_executable(test-lps331ap src/tests/sensors/test-lps331ap.cpp) add_executable(test-lps331ap src/tests/sensors/test-lps331ap.cpp)
sbs_target(test-lps331ap stm32f429zi_stm32f4discovery) sbs_target(test-lps331ap stm32f429zi_stm32f4discovery)
...@@ -427,22 +451,29 @@ add_executable(test-max31856 src/tests/sensors/test-max31856.cpp) ...@@ -427,22 +451,29 @@ add_executable(test-max31856 src/tests/sensors/test-max31856.cpp)
sbs_target(test-max31856 stm32f767zi_compute_unit) sbs_target(test-max31856 stm32f767zi_compute_unit)
add_executable(test-mpu9250 src/tests/sensors/test-mpu9250.cpp) add_executable(test-mpu9250 src/tests/sensors/test-mpu9250.cpp)
sbs_target(test-mpu9250 stm32f429zi_skyward_parafoil) sbs_target(test-mpu9250 stm32f429zi_parafoil)
add_executable(test-ms5803-spi src/tests/sensors/test-ms5803-spi.cpp) add_executable(test-ms5803-spi src/tests/sensors/test-ms5803-spi.cpp)
sbs_target(test-ms5803-spi stm32f429zi_skyward_death_stack_x) sbs_target(test-ms5803-spi stm32f429zi_death_stack_v2)
add_executable(test-ms5803-i2c src/tests/sensors/test-ms5803-i2c.cpp) add_executable(test-ms5803-i2c src/tests/sensors/test-ms5803-i2c.cpp)
sbs_target(test-ms5803-i2c stm32f429zi_stm32f4discovery) sbs_target(test-ms5803-i2c stm32f429zi_stm32f4discovery)
add_executable(test-ubxgps-serial src/tests/sensors/test-ubxgps-serial.cpp) add_executable(test-ubxgps-serial src/tests/sensors/test-ubxgps-serial.cpp)
sbs_target(test-ubxgps-serial stm32f429zi_skyward_death_stack_x) sbs_target(test-ubxgps-serial stm32f429zi_death_stack_v2)
add_executable(test-ubxgps-spi src/tests/sensors/test-ubxgps-spi.cpp) add_executable(test-ubxgps-spi src/tests/sensors/test-ubxgps-spi.cpp)
sbs_target(test-ubxgps-spi stm32f429zi_skyward_death_stack_x) sbs_target(test-ubxgps-spi stm32f429zi_death_stack_v2)
add_executable(test-vn100-serial src/tests/sensors/test-vn100-serial.cpp)
sbs_target(test-vn100-serial stm32f407vg_stm32f4discovery)
add_executable(test-vn100-spi src/tests/sensors/test-vn100-spi.cpp)
sbs_target(test-vn100-spi stm32f407vg_stm32f4discovery)
add_executable(test-vn300 src/tests/sensors/test-vn300.cpp)
sbs_target(test-vn300 stm32f767zi_compute_unit)
add_executable(test-vn100 src/tests/sensors/test-vn100.cpp)
sbs_target(test-vn100 stm32f407vg_stm32f4discovery)
add_executable(test-lis2mdl src/tests/sensors/test-lis2mdl.cpp) add_executable(test-lis2mdl src/tests/sensors/test-lis2mdl.cpp)
sbs_target(test-lis2mdl stm32f429zi_stm32f4discovery) sbs_target(test-lis2mdl stm32f429zi_stm32f4discovery)
...@@ -459,6 +490,9 @@ sbs_target(test-lps22df stm32f767zi_nucleo) ...@@ -459,6 +490,9 @@ sbs_target(test-lps22df stm32f767zi_nucleo)
add_executable(test-lsm6dsrx src/tests/sensors/test-lsm6dsrx.cpp) add_executable(test-lsm6dsrx src/tests/sensors/test-lsm6dsrx.cpp)
sbs_target(test-lsm6dsrx stm32f407vg_stm32f4discovery) sbs_target(test-lsm6dsrx stm32f407vg_stm32f4discovery)
add_executable(test-nd015x src/tests/sensors/test-nd015x.cpp)
sbs_target(test-nd015x stm32f767zi_lyra_biscotto)
#-----------------------------------------------------------------------------# #-----------------------------------------------------------------------------#
# Tests - Utils # # Tests - Utils #
#-----------------------------------------------------------------------------# #-----------------------------------------------------------------------------#
......
<div align="center"> <div align="center">
<img src="https://avatars2.githubusercontent.com/u/8077370?s=200&v=4" alt="Skyward" width="200"></a> <img src="https://avatars2.githubusercontent.com/u/8077370?s=200&v=4" alt="Skyward Experimental Rocketry" width="200"></a>
<h2>Skyward Boardcore</h2> <h1>Skyward Boardcore</h1>
<a href="https://git.skywarder.eu/avn/swd/skyward-boardcore/-/pipelines"><img src="https://git.skywarder.eu/avn/swd/skyward-boardcore/badges/main/pipeline.svg"></a> <a href="https://git.skywarder.eu/avn/swd/skyward-boardcore/-/pipelines"><img src="https://git.skywarder.eu/avn/swd/skyward-boardcore/badges/main/pipeline.svg"></a>
</div> </div>
Boardcore is a framework for developing and building rockets software for custom boards with Miosix. Boardcore is a C++14 rocket software framework targeting custom embedded boards designed by Skyward Experimental Rocketry.
[Miosix](https://miosix.org/) is a lightweight OS for embedded developing which provides support for basic things such as Threads, GPIO, Time and many other. You can find our fork of the kernel here: [skyward/miosix-kernel](https://git.skywarder.eu/avn/swd/miosix-kernel) Boardcore runs on top of [Miosix](https://miosix.org/), a lightweight operating system for microcontrollers. It implements a POSIX-like API, the C standard library and the C++ standard library. It also provides a pre-emptive scheduler (among others) and a custom concurrency API with support for Threads and synchronization primitives.
A FAT32 filesystem, a serial port driver, platform timers and General Purpose I/O functionalities (GPIO) are also exposed through a custom API.
Building is made with [SBS](https://git.skywarder.eu/avn/swd/skyward-boardcore/wikis/Skyward-Build-System-(SBS)), which was created to easily compile and reuse code for different boards. We maintain a fork of the Miosix OS to fit our needs: [skyward/miosix-kernel](https://git.skywarder.eu/avn/swd/miosix-kernel)
The project is built with the CMake build system. We also have our own script that is built on top of CMake, to automate compilation and deployment to different hardware targets, [SBS](https://git.skywarder.eu/avn/swd/skyward-boardcore/wikis/Skyward-Build-System-(SBS)).
## Content ## Content
| Path | Description | | Path | Description |
| ---------------- | ----------------------------------------------------------- | | ---------------- | ----------------------------------------------------------- |
| src/shared/ | Objects, drivers and other stuff written by us | | src/bsps/ | Board Support Packages (BSP) |
| src/entrypoints/ | Each file here is a 'main' | | src/shared/ | Device drivers and general-purpose classes/utilities |
| src/tests/ | Contains the 'main' of every test | | src/entrypoints/ | Entry points for general tasks (e.g. calibration) |
| build/ | Compiled binaries that can be flashed on a target board | | src/tests/ | Entry points for on-device unit testing |
| libs/ | External libs (Miosix kernel and others as a git submodule) | | build/ | Build output directory |
| scripts/ | Some tools (e.g. script for flashing on the boards) | | libs/ | External libraries (git submodules) |
| scripts/ | Various tools and utilities (e.g. linting, log decoder) |
In the main folder you will find **CMakeLists.txt** which is used to configure the build system.
## Getting Started ## Getting Started
### Dependencies ### Dependencies
* CMake The following are required to build the project:
* Git * `CMake` 3.25
* Miosix Toolchain * `Git`
* `Miosix` Toolchain
You will also need the following tools for linting and formatting:
* `Python3`
* `Cppcheck 2.7`
* `ClangFormat 18`
Also, Ccache, Ninja, OpenOCD, Cppcheck, clang-format and pre-commit are recommended for a better experience. We also recommend to install `Ccache`, `Ninja`, `OpenOCD`, and `pre-commit` for a smoother development experience.
### Cloning the repo ### Cloning the repo
Clone this repo with the `--recursive` option. Clone the repository with the `--recursive` option:
```sh ```sh
git clone --recursive https://git.skywarder.eu/avn/swd/skyward-boardcore.git git clone --recursive https://git.skywarder.eu/avn/swd/skyward-boardcore.git
cd skyward-boardcore cd skyward-boardcore
...@@ -43,14 +51,14 @@ cd skyward-boardcore ...@@ -43,14 +51,14 @@ cd skyward-boardcore
## Building ## Building
You can build everything using the SBS script: Using the SBS script is the recommended way to build the project. When called with no arguments, it will build all targets:
```sh ```sh
./sbs ./sbs
``` ```
The build system will start building all the targets (entrypoints and tests). Depending on how many targets there are, this operation may take several minutes. If you installed ccache, subsequent runs will be much faster. This may take a while depending on how many targets there are. If `ccache` is installed, it will be used to cache intermediate compilation artifacts to speed-up incremental builds.
Or you can use directly CMake: Alternatively, you can build with CMake commands:
```sh ```sh
mkdir build mkdir build
cd build cd build
...@@ -60,7 +68,7 @@ cmake --build . ...@@ -60,7 +68,7 @@ cmake --build .
## Documentation ## Documentation
The code is documented with Doxygen, check it [here](http://avn.pages.skywarder.eu/swd/skyward-boardcore). The code is documented with Doxygen, check it out [here](http://avn.pages.skywarder.eu/swd/skyward-boardcore).
## Contributing ## Contributing
...@@ -72,8 +80,8 @@ pre-commit install ...@@ -72,8 +80,8 @@ pre-commit install
## What's next? ## What's next?
In the [Wiki](https://git.skywarder.eu/avn/swd/skyward-boardcore/wikis/home) you will find some first-steps **guides** (configuring the IDE, building a firmware, etc.) as well as the **coding guidelines** and some **best practices** we adopt. You can find first-step **guides** in the [Wiki](https://git.skywarder.eu/avn/swd/skyward-boardcore/wikis/home) (configuring the IDE, building examples, etc.) as well our **code guidelines** and **best practices** that we follow.
If you want to contribute to this repository, please read [Git Workflow](https://git.skywarder.eu/avn/swd/skyward-boardcore/wikis/Git-Workflow). If you want to contribute to this repository, please read our [Git Workflow](https://git.skywarder.eu/avn/swd/skyward-boardcore/wikis/Git-Workflow).
If you just want to start messing around, try [this](https://git.skywarder.eu/avn/swd/skyward-boardcore/-/wikis/LED-Blink). If you want to start messing around with the code, check out the [LED blink guide](https://git.skywarder.eu/avn/swd/skyward-boardcore/-/wikis/LED-Blink).
...@@ -19,7 +19,8 @@ ...@@ -19,7 +19,8 @@
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE. # THE SOFTWARE.
add_library(boardcore-host STATIC EXCLUDE_FROM_ALL # Boardcore source files used when compiling for host
set(BOARDCORE_HOST_SRC
# Debug # Debug
${SBS_BASE}/src/shared/utils/Debug.cpp ${SBS_BASE}/src/shared/utils/Debug.cpp
${SBS_BASE}/src/shared/diagnostic/CpuMeter/CpuMeter.cpp ${SBS_BASE}/src/shared/diagnostic/CpuMeter/CpuMeter.cpp
...@@ -28,16 +29,14 @@ add_library(boardcore-host STATIC EXCLUDE_FROM_ALL ...@@ -28,16 +29,14 @@ add_library(boardcore-host STATIC EXCLUDE_FROM_ALL
# Actuators # Actuators
${SBS_BASE}/src/shared/actuators/Servo/Servo.cpp ${SBS_BASE}/src/shared/actuators/Servo/Servo.cpp
# Drivers
${SBS_BASE}/src/shared/drivers/timer/TimestampTimer.cpp
# Events # Events
${SBS_BASE}/src/shared/events/EventBroker.cpp ${SBS_BASE}/src/shared/events/EventBroker.cpp
# Algorithms # Algorithms
${SBS_BASE}/src/shared/algorithms/MEA/MEA.cpp ${SBS_BASE}/src/shared/algorithms/MEA/MEA.cpp
${SBS_BASE}/src/shared/algorithms/AirBrakes/AirBrakesPI.cpp
${SBS_BASE}/src/shared/algorithms/AirBrakes/AirBrakesInterp.cpp ${SBS_BASE}/src/shared/algorithms/AirBrakes/AirBrakesInterp.cpp
${SBS_BASE}/src/shared/algorithms/AirBrakes/AirBrakes.cpp ${SBS_BASE}/src/shared/algorithms/Propagator/Propagator.cpp
# Logger # Logger
${SBS_BASE}/src/shared/logger/Logger.cpp ${SBS_BASE}/src/shared/logger/Logger.cpp
...@@ -57,9 +56,18 @@ add_library(boardcore-host STATIC EXCLUDE_FROM_ALL ...@@ -57,9 +56,18 @@ add_library(boardcore-host STATIC EXCLUDE_FROM_ALL
${SBS_BASE}/src/shared/utils/SkyQuaternion/SkyQuaternion.cpp ${SBS_BASE}/src/shared/utils/SkyQuaternion/SkyQuaternion.cpp
${SBS_BASE}/src/shared/utils/Stats/Stats.cpp ${SBS_BASE}/src/shared/utils/Stats/Stats.cpp
${SBS_BASE}/src/shared/utils/TestUtils/TestHelper.cpp ${SBS_BASE}/src/shared/utils/TestUtils/TestHelper.cpp
${SBS_BASE}/src/shared/utils/Registry/RegistryFrontend.cpp
${SBS_BASE}/src/shared/utils/Registry/RegistrySerializer.cpp
${SBS_BASE}/src/shared/utils/DependencyManager/DependencyManager.cpp
) )
add_library(SkywardBoardcore::Boardcore::host ALIAS boardcore-host)
target_include_directories(boardcore-host PUBLIC ${SBS_BASE}/src/shared) # Create a library specific for host builds
add_library(boardcore-host STATIC EXCLUDE_FROM_ALL ${BOARDCORE_HOST_SRC})
# Only one include directory for Boardcore!
target_include_directories(boardcore-host PUBLIC ${BOARDCORE_PATH}/src/shared)
# Link libraries
target_link_libraries(boardcore-host PUBLIC target_link_libraries(boardcore-host PUBLIC
Miosix::Miosix::host Miosix::Miosix::host
TSCPP::TSCPP TSCPP::TSCPP
...@@ -68,3 +76,6 @@ target_link_libraries(boardcore-host PUBLIC ...@@ -68,3 +76,6 @@ target_link_libraries(boardcore-host PUBLIC
Catch2::Catch2 Catch2::Catch2
Mavlink::Mavlink Mavlink::Mavlink
) )
# Create a nice alias for the library
add_library(Skyward::Boardcore::host ALIAS boardcore-host)
\ No newline at end of file
...@@ -19,123 +19,158 @@ ...@@ -19,123 +19,158 @@
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE. # THE SOFTWARE.
include(dependencies) # Load in BOARDCORE_PATH the project path if not already defined
if (NOT DEFINED BOARDCORE_PATH)
include(boardcore-host) cmake_path(GET CMAKE_CURRENT_LIST_DIR PARENT_PATH BOARDCORE_PATH)
endif()
foreach(OPT_BOARD ${BOARDS}) # Include dependencies and board list
set(BOARDCORE_LIBRARY boardcore-${OPT_BOARD}) include(${BOARDCORE_PATH}/cmake/dependencies.cmake)
add_library(${BOARDCORE_LIBRARY} STATIC EXCLUDE_FROM_ALL include(${BOARDCORE_PATH}/cmake/boardcore-host.cmake)
include(${BOARDCORE_PATH}/cmake/boards.cmake)
# Boardcore source files
set(BOARDCORE_SRC
# Actuators # Actuators
${SBS_BASE}/src/shared/actuators/HBridge/HBridge.cpp ${BOARDCORE_PATH}/src/shared/actuators/HBridge/HBridge.cpp
${SBS_BASE}/src/shared/actuators/Servo/Servo.cpp ${BOARDCORE_PATH}/src/shared/actuators/Servo/Servo.cpp
${SBS_BASE}/src/shared/actuators/stepper/Stepper.cpp ${BOARDCORE_PATH}/src/shared/actuators/stepper/Stepper.cpp
${SBS_BASE}/src/shared/actuators/stepper/StepperPWM.cpp ${BOARDCORE_PATH}/src/shared/actuators/stepper/StepperPWM.cpp
# Algorithms # Algorithms
${SBS_BASE}/src/shared/algorithms/ADA/ADA.cpp ${BOARDCORE_PATH}/src/shared/algorithms/ADA/ADA.cpp
${SBS_BASE}/src/shared/algorithms/MEA/MEA.cpp ${BOARDCORE_PATH}/src/shared/algorithms/MEA/MEA.cpp
${SBS_BASE}/src/shared/algorithms/AirBrakes/AirBrakes.cpp ${BOARDCORE_PATH}/src/shared/algorithms/AirBrakes/AirBrakesPI.cpp
${SBS_BASE}/src/shared/algorithms/AirBrakes/AirBrakesPI.cpp ${BOARDCORE_PATH}/src/shared/algorithms/AirBrakes/AirBrakesInterp.cpp
${SBS_BASE}/src/shared/algorithms/AirBrakes/AirBrakesInterp.cpp ${BOARDCORE_PATH}/src/shared/algorithms/NAS/NAS.cpp
${SBS_BASE}/src/shared/algorithms/NAS/NAS.cpp ${BOARDCORE_PATH}/src/shared/algorithms/NAS/StateInitializer.cpp
${SBS_BASE}/src/shared/algorithms/NAS/StateInitializer.cpp ${SBS_BASE}/src/shared/algorithms/Propagator/Propagator.cpp
${SBS_BASE}/src/shared/algorithms/Follower/Follower.cpp
# Debug # Debug
${SBS_BASE}/src/shared/utils/Debug.cpp ${BOARDCORE_PATH}/src/shared/utils/Debug.cpp
${SBS_BASE}/src/shared/diagnostic/CpuMeter/CpuMeter.cpp ${BOARDCORE_PATH}/src/shared/diagnostic/CpuMeter/CpuMeter.cpp
${SBS_BASE}/src/shared/diagnostic/PrintLogger.cpp ${BOARDCORE_PATH}/src/shared/diagnostic/PrintLogger.cpp
# Drivers # Drivers
${SBS_BASE}/src/shared/drivers/AD5204/AD5204.cpp ${BOARDCORE_PATH}/src/shared/drivers/AD5204/AD5204.cpp
${SBS_BASE}/src/shared/drivers/adc/InternalADC.cpp ${BOARDCORE_PATH}/src/shared/drivers/adc/InternalADC.cpp
${SBS_BASE}/src/shared/drivers/canbus/CanDriver/CanDriver.cpp ${BOARDCORE_PATH}/src/shared/drivers/canbus/CanDriver/CanDriver.cpp
${SBS_BASE}/src/shared/drivers/canbus/CanDriver/CanInterrupt.cpp ${BOARDCORE_PATH}/src/shared/drivers/canbus/CanDriver/CanInterrupt.cpp
${SBS_BASE}/src/shared/drivers/canbus/CanProtocol/CanProtocol.cpp ${BOARDCORE_PATH}/src/shared/drivers/canbus/CanProtocol/CanProtocol.cpp
${SBS_BASE}/src/shared/drivers/interrupt/external_interrupts.cpp ${BOARDCORE_PATH}/src/shared/drivers/dma/DMA.cpp
${SBS_BASE}/src/shared/drivers/timer/PWM.cpp ${BOARDCORE_PATH}/src/shared/drivers/dma/DMADefs.cpp
${SBS_BASE}/src/shared/drivers/timer/CountedPWM.cpp ${BOARDCORE_PATH}/src/shared/drivers/interrupt/external_interrupts.cpp
${SBS_BASE}/src/shared/drivers/timer/TimestampTimer.cpp ${BOARDCORE_PATH}/src/shared/drivers/timer/PWM.cpp
${SBS_BASE}/src/shared/drivers/runcam/Runcam.cpp ${BOARDCORE_PATH}/src/shared/drivers/timer/CountedPWM.cpp
${SBS_BASE}/src/shared/drivers/spi/SPITransaction.cpp ${BOARDCORE_PATH}/src/shared/drivers/runcam/Runcam.cpp
${SBS_BASE}/src/shared/drivers/usart/USART.cpp ${BOARDCORE_PATH}/src/shared/drivers/spi/SPITransaction.cpp
${SBS_BASE}/src/shared/drivers/i2c/I2CDriver-f4.cpp ${BOARDCORE_PATH}/src/shared/drivers/usart/USART.cpp
${SBS_BASE}/src/shared/drivers/i2c/I2CDriver-f7.cpp ${BOARDCORE_PATH}/src/shared/drivers/i2c/I2CDriver-f4.cpp
${SBS_BASE}/src/shared/drivers/i2c/I2C.cpp ${BOARDCORE_PATH}/src/shared/drivers/i2c/I2CDriver-f7.cpp
${SBS_BASE}/src/shared/drivers/WIZ5500/WIZ5500.cpp ${BOARDCORE_PATH}/src/shared/drivers/i2c/I2C.cpp
${BOARDCORE_PATH}/src/shared/drivers/WIZ5500/WIZ5500.cpp
${BOARDCORE_PATH}/src/shared/drivers/DipSwitch/DipSwitch.cpp
# Events # Events
${SBS_BASE}/src/shared/events/EventBroker.cpp ${BOARDCORE_PATH}/src/shared/events/EventBroker.cpp
# Logger # Logger
${SBS_BASE}/src/shared/logger/Logger.cpp ${BOARDCORE_PATH}/src/shared/logger/Logger.cpp
# Radio # Radio
${SBS_BASE}/src/shared/radio/gamma868/Gamma868.cpp ${BOARDCORE_PATH}/src/shared/radio/gamma868/Gamma868.cpp
${SBS_BASE}/src/shared/radio/Xbee/APIFrameParser.cpp ${BOARDCORE_PATH}/src/shared/radio/Xbee/APIFrameParser.cpp
${SBS_BASE}/src/shared/radio/Xbee/Xbee.cpp ${BOARDCORE_PATH}/src/shared/radio/Xbee/Xbee.cpp
${SBS_BASE}/src/shared/radio/SX1278/SX1278Fsk.cpp ${BOARDCORE_PATH}/src/shared/radio/SX1278/SX1278Fsk.cpp
${SBS_BASE}/src/shared/radio/SX1278/SX1278Lora.cpp ${BOARDCORE_PATH}/src/shared/radio/SX1278/SX1278Lora.cpp
${SBS_BASE}/src/shared/radio/SX1278/SX1278Common.cpp ${BOARDCORE_PATH}/src/shared/radio/SX1278/SX1278Common.cpp
# Scheduler # Scheduler
${SBS_BASE}/src/shared/scheduler/TaskScheduler.cpp ${BOARDCORE_PATH}/src/shared/scheduler/TaskScheduler.cpp
# Sensors # Sensors
${SBS_BASE}/src/shared/sensors/ADS1118/ADS1118.cpp ${BOARDCORE_PATH}/src/shared/sensors/ADS1118/ADS1118.cpp
${SBS_BASE}/src/shared/sensors/ADS131M04/ADS131M04.cpp ${BOARDCORE_PATH}/src/shared/sensors/ADS131M04/ADS131M04.cpp
${SBS_BASE}/src/shared/sensors/ADS131M08/ADS131M08.cpp ${BOARDCORE_PATH}/src/shared/sensors/ADS131M08/ADS131M08.cpp
${SBS_BASE}/src/shared/sensors/BME280/BME280.cpp ${BOARDCORE_PATH}/src/shared/sensors/BME280/BME280.cpp
${SBS_BASE}/src/shared/sensors/BME280/BME280I2C.cpp ${BOARDCORE_PATH}/src/shared/sensors/BME280/BME280I2C.cpp
${SBS_BASE}/src/shared/sensors/BMP280/BMP280.cpp ${BOARDCORE_PATH}/src/shared/sensors/BMP280/BMP280.cpp
${SBS_BASE}/src/shared/sensors/BMP280/BMP280I2C.cpp ${BOARDCORE_PATH}/src/shared/sensors/BMP280/BMP280I2C.cpp
${SBS_BASE}/src/shared/sensors/BMX160/BMX160.cpp ${BOARDCORE_PATH}/src/shared/sensors/BMX160/BMX160.cpp
${SBS_BASE}/src/shared/sensors/BMX160/BMX160WithCorrection.cpp ${BOARDCORE_PATH}/src/shared/sensors/BMX160/BMX160WithCorrection.cpp
${SBS_BASE}/src/shared/sensors/H3LIS331DL/H3LIS331DL.cpp ${BOARDCORE_PATH}/src/shared/sensors/H3LIS331DL/H3LIS331DL.cpp
${SBS_BASE}/src/shared/sensors/HX711/HX711.cpp ${BOARDCORE_PATH}/src/shared/sensors/HX711/HX711.cpp
${SBS_BASE}/src/shared/sensors/LIS3MDL/LIS3MDL.cpp ${BOARDCORE_PATH}/src/shared/sensors/LIS3MDL/LIS3MDL.cpp
${SBS_BASE}/src/shared/sensors/LIS331HH/LIS331HH.cpp ${BOARDCORE_PATH}/src/shared/sensors/LIS331HH/LIS331HH.cpp
${SBS_BASE}/src/shared/sensors/LPS331AP/LPS331AP.cpp ${BOARDCORE_PATH}/src/shared/sensors/LPS331AP/LPS331AP.cpp
${SBS_BASE}/src/shared/sensors/MAX6675/MAX6675.cpp ${BOARDCORE_PATH}/src/shared/sensors/MAX6675/MAX6675.cpp
${SBS_BASE}/src/shared/sensors/MAX31855/MAX31855.cpp ${BOARDCORE_PATH}/src/shared/sensors/MAX31855/MAX31855.cpp
${SBS_BASE}/src/shared/sensors/MAX31856/MAX31856.cpp ${BOARDCORE_PATH}/src/shared/sensors/MAX31856/MAX31856.cpp
${SBS_BASE}/src/shared/sensors/MBLoadCell/MBLoadCell.cpp ${BOARDCORE_PATH}/src/shared/sensors/MBLoadCell/MBLoadCell.cpp
${SBS_BASE}/src/shared/sensors/MPU9250/MPU9250.cpp ${BOARDCORE_PATH}/src/shared/sensors/MPU9250/MPU9250.cpp
${SBS_BASE}/src/shared/sensors/MS5803/MS5803.cpp ${BOARDCORE_PATH}/src/shared/sensors/MS5803/MS5803.cpp
${SBS_BASE}/src/shared/sensors/MS5803/MS5803I2C.cpp ${BOARDCORE_PATH}/src/shared/sensors/MS5803/MS5803I2C.cpp
${SBS_BASE}/src/shared/sensors/SensorManager.cpp ${BOARDCORE_PATH}/src/shared/sensors/RotatedIMU/RotatedIMU.cpp
${SBS_BASE}/src/shared/sensors/SensorSampler.cpp ${BOARDCORE_PATH}/src/shared/sensors/SensorManager.cpp
${SBS_BASE}/src/shared/sensors/UBXGPS/UBXGPSSerial.cpp ${BOARDCORE_PATH}/src/shared/sensors/SensorSampler.cpp
${SBS_BASE}/src/shared/sensors/UBXGPS/UBXGPSSpi.cpp ${BOARDCORE_PATH}/src/shared/sensors/UBXGPS/UBXGPSSerial.cpp
${SBS_BASE}/src/shared/sensors/VN100/VN100.cpp ${BOARDCORE_PATH}/src/shared/sensors/UBXGPS/UBXGPSSpi.cpp
${SBS_BASE}/src/shared/sensors/LIS2MDL/LIS2MDL.cpp ${BOARDCORE_PATH}/src/shared/sensors/Vectornav/VNCommonSerial.cpp
${SBS_BASE}/src/shared/sensors/LPS28DFW/LPS28DFW.cpp ${BOARDCORE_PATH}/src/shared/sensors/Vectornav/VN100/VN100Serial.cpp
${SBS_BASE}/src/shared/sensors/LPS22DF/LPS22DF.cpp ${BOARDCORE_PATH}/src/shared/sensors/Vectornav/VN100/VN100Spi.cpp
${SBS_BASE}/src/shared/sensors/LSM6DSRX/LSM6DSRX.cpp ${BOARDCORE_PATH}/src/shared/sensors/Vectornav/VN300/VN300.cpp
${BOARDCORE_PATH}/src/shared/sensors/LIS2MDL/LIS2MDL.cpp
${BOARDCORE_PATH}/src/shared/sensors/LPS28DFW/LPS28DFW.cpp
${BOARDCORE_PATH}/src/shared/sensors/LPS22DF/LPS22DF.cpp
${BOARDCORE_PATH}/src/shared/sensors/LSM6DSRX/LSM6DSRX.cpp
${BOARDCORE_PATH}/src/shared/sensors/ND015X/ND015D.cpp
${BOARDCORE_PATH}/src/shared/sensors/ND015X/ND015A.cpp
# Calibration # Calibration
${SBS_BASE}/src/shared/sensors/calibration/BiasCalibration/BiasCalibration.cpp ${BOARDCORE_PATH}/src/shared/sensors/calibration/BiasCalibration/BiasCalibration.cpp
${SBS_BASE}/src/shared/sensors/calibration/SensorDataExtra/SensorDataExtra.cpp ${BOARDCORE_PATH}/src/shared/sensors/calibration/SensorDataExtra/SensorDataExtra.cpp
${SBS_BASE}/src/shared/sensors/calibration/SixParameterCalibration/SixParameterCalibration.cpp ${BOARDCORE_PATH}/src/shared/sensors/calibration/SixParameterCalibration/SixParameterCalibration.cpp
${SBS_BASE}/src/shared/sensors/calibration/SoftAndHardIronCalibration/SoftAndHardIronCalibration.cpp ${BOARDCORE_PATH}/src/shared/sensors/calibration/SoftAndHardIronCalibration/SoftAndHardIronCalibration.cpp
# Correction # Correction
${SBS_BASE}/src/shared/sensors/correction/BiasCorrector/BiasCorrector.cpp ${BOARDCORE_PATH}/src/shared/sensors/correction/BiasCorrector/BiasCorrector.cpp
${SBS_BASE}/src/shared/sensors/correction/SixParametersCorrector/SixParametersCorrector.cpp ${BOARDCORE_PATH}/src/shared/sensors/correction/SixParametersCorrector/SixParametersCorrector.cpp
# Utils # Utils
${SBS_BASE}/src/shared/utils/AeroUtils/AeroUtils.cpp ${BOARDCORE_PATH}/src/shared/utils/AeroUtils/AeroUtils.cpp
${SBS_BASE}/src/shared/utils/ButtonHandler/ButtonHandler.cpp ${BOARDCORE_PATH}/src/shared/utils/ButtonHandler/ButtonHandler.cpp
${SBS_BASE}/src/shared/utils/PinObserver/PinObserver.cpp ${BOARDCORE_PATH}/src/shared/utils/PinObserver/PinObserver.cpp
${SBS_BASE}/src/shared/utils/SkyQuaternion/SkyQuaternion.cpp ${BOARDCORE_PATH}/src/shared/utils/SkyQuaternion/SkyQuaternion.cpp
${SBS_BASE}/src/shared/utils/Stats/Stats.cpp ${BOARDCORE_PATH}/src/shared/utils/Stats/Stats.cpp
${SBS_BASE}/src/shared/utils/TestUtils/TestHelper.cpp ${BOARDCORE_PATH}/src/shared/utils/TestUtils/TestHelper.cpp
${BOARDCORE_PATH}/src/shared/utils/Registry/RegistryFrontend.cpp
${BOARDCORE_PATH}/src/shared/utils/Registry/RegistrySerializer.cpp
${BOARDCORE_PATH}/src/shared/utils/Registry/Backend/FileBackend.cpp
${BOARDCORE_PATH}/src/shared/utils/DependencyManager/DependencyManager.cpp
) )
add_library(SkywardBoardcore::Boardcore::${OPT_BOARD} ALIAS ${BOARDCORE_LIBRARY})
target_include_directories(${BOARDCORE_LIBRARY} PUBLIC ${SBS_BASE}/src/shared) # Creates the Skyward::Boardcore::${BOARD_NAME} library
target_link_libraries(${BOARDCORE_LIBRARY} PUBLIC function(add_boardcore_library BOARD_OPTIONS_FILE)
Miosix::Miosix::${OPT_BOARD} # Get board options
include(${BOARD_OPTIONS_FILE})
# Create a library for the board
set(BOARDCORE_LIB boardcore-${BOARD_NAME})
add_library(${BOARDCORE_LIB} STATIC EXCLUDE_FROM_ALL ${BOARDCORE_SRC})
# Only one include directory for Boardcore!
target_include_directories(${BOARDCORE_LIB} PUBLIC ${BOARDCORE_PATH}/src/shared)
# Define DEBUG when in Debug mode
target_compile_definitions(${BOARDCORE_LIB} PUBLIC $<$<CONFIG:Debug>:DEBUG>)
# Define NDEBUG when not in Debug mode
target_compile_definitions(${BOARDCORE_LIB} PUBLIC $<$<NOT:$<CONFIG:Debug>>:NDEBUG>)
# Link libraries
target_link_libraries(${BOARDCORE_LIB} PUBLIC
$<TARGET_OBJECTS:Miosix::Boot::${BOARD_NAME}>
$<LINK_GROUP:RESCAN,Miosix::Kernel::${BOARD_NAME},stdc++,c,m,gcc,atomic>
TSCPP::TSCPP TSCPP::TSCPP
Eigen3::Eigen Eigen3::Eigen
fmt::fmt-header-only fmt::fmt-header-only
...@@ -143,8 +178,23 @@ foreach(OPT_BOARD ${BOARDS}) ...@@ -143,8 +178,23 @@ foreach(OPT_BOARD ${BOARDS})
Mavlink::Mavlink Mavlink::Mavlink
) )
# Link MxGui only if supported by the target # Link MxGui if supported by the target
if(${OPT_BOARD} IN_LIST MXGUI_BOARDS) if(DEFINED MXGUI_BASE_BOARD_NAME)
target_link_libraries(${BOARDCORE_LIBRARY} PUBLIC Mxgui::Mxgui::${OPT_BOARD}) target_link_libraries(${BOARDCORE_LIB} PUBLIC MxGui::${MXGUI_BASE_BOARD_NAME})
elseif(TARGET MxGui::${BOARD_NAME})
target_link_libraries(${BOARDCORE_LIB} PUBLIC MxGui::${BOARD_NAME})
endif() endif()
# Create a nice alias for the library
add_library(Skyward::Boardcore::${BOARD_NAME} ALIAS ${BOARDCORE_LIB})
endfunction()
# Create the Miosix libraries for Boardcore custom boards
foreach(BOARD_OPTIONS_FILE ${BOARDCORE_BOARDS_OPTIONS_FILES})
add_miosix_libraries(${BOARD_OPTIONS_FILE})
endforeach()
# Create Boardcore library for each board
foreach(BOARD_OPTIONS_FILE ${MIOSIX_BOARDS_OPTIONS_FILES} ${BOARDCORE_BOARDS_OPTIONS_FILES})
add_boardcore_library(${BOARD_OPTIONS_FILE})
endforeach() endforeach()
# Copyright (c) 2023 Skyward Experimental Rocketry
# Authors: Alberto Nidasio
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
set(BOARDCORE_BOARDS_OPTIONS_FILES
${BOARDCORE_PATH}/src/bsps/stm32f205rc_ciuti/config/board_options.cmake
${BOARDCORE_PATH}/src/bsps/stm32f429zi_nokia/config/board_options.cmake
${BOARDCORE_PATH}/src/bsps/stm32f429zi_parafoil/config/board_options.cmake
${BOARDCORE_PATH}/src/bsps/stm32f429zi_death_stack_v1/config/board_options.cmake
${BOARDCORE_PATH}/src/bsps/stm32f429zi_death_stack_v2/config/board_options.cmake
${BOARDCORE_PATH}/src/bsps/stm32f429zi_death_stack_v3/config/board_options.cmake
${BOARDCORE_PATH}/src/bsps/stm32f429zi_pyxis_auxiliary/config/board_options.cmake
${BOARDCORE_PATH}/src/bsps/stm32f429zi_rig/config/board_options.cmake
${BOARDCORE_PATH}/src/bsps/stm32f429zi_con_rig/config/board_options.cmake
${BOARDCORE_PATH}/src/bsps/stm32f756zg_nucleo/config/board_options.cmake
${BOARDCORE_PATH}/src/bsps/stm32f767zi_automated_antennas/config/board_options.cmake
${BOARDCORE_PATH}/src/bsps/stm32f767zi_compute_unit/config/board_options.cmake
${BOARDCORE_PATH}/src/bsps/stm32f767zi_compute_unit_v2/config/board_options.cmake
${BOARDCORE_PATH}/src/bsps/stm32f767zi_compute_unit_v2/config/board_options_no_xram.cmake
${BOARDCORE_PATH}/src/bsps/stm32f767zi_gemini_gs/config/board_options.cmake
${BOARDCORE_PATH}/src/bsps/stm32f767zi_gemini_motor/config/board_options.cmake
${BOARDCORE_PATH}/src/bsps/stm32f767zi_death_stack_v4/config/board_options.cmake
${BOARDCORE_PATH}/src/bsps/stm32f767zi_rig_v2/config/board_options.cmake
${BOARDCORE_PATH}/src/bsps/stm32f767zi_conrig_v2/config/board_options.cmake
${BOARDCORE_PATH}/src/bsps/stm32f767zi_lyra_biscotto/config/board_options.cmake
${BOARDCORE_PATH}/src/bsps/stm32f767zi_lyra_motor/config/board_options.cmake
${BOARDCORE_PATH}/src/bsps/stm32f767zi_lyra_gs/config/board_options.cmake
${BOARDCORE_PATH}/src/bsps/stm32f429zi_lyra_cubesat/config/board_options.cmake
${BOARDCORE_PATH}/src/bsps/stm32f767zi_orion_biscotto/config/board_options.cmake
${BOARDCORE_PATH}/src/bsps/stm32f767zi_orion_engine/config/board_options.cmake
)
...@@ -19,33 +19,34 @@ ...@@ -19,33 +19,34 @@
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE. # THE SOFTWARE.
file(GLOB KPATH ${SBS_BASE}/libs/miosix-kernel/miosix) # Miosix Kernel
if(NOT KPATH) include(${SBS_BASE}/libs/miosix-kernel/miosix/cmake/miosix.cmake EXCLUDE_FROM_ALL)
message(FATAL_ERROR "Kernel directory not found")
endif()
add_subdirectory(${KPATH} EXCLUDE_FROM_ALL)
include(${KPATH}/config/boards.cmake)
# Miosix Host
add_subdirectory(${SBS_BASE}/libs/miosix-host EXCLUDE_FROM_ALL) add_subdirectory(${SBS_BASE}/libs/miosix-host EXCLUDE_FROM_ALL)
set(KPATH ${KPATH} CACHE PATH "Path to kernel directory") # MxGui graphical library
add_subdirectory(${SBS_BASE}/libs/mxgui EXCLUDE_FROM_ALL) include(${SBS_BASE}/libs/mxgui/cmake/mxgui.cmake)
include(${SBS_BASE}/libs/mxgui/cmake/boards.cmake)
# Serialization library
add_subdirectory(${SBS_BASE}/libs/tscpp EXCLUDE_FROM_ALL) add_subdirectory(${SBS_BASE}/libs/tscpp EXCLUDE_FROM_ALL)
# Eigen library
set(CMAKE_BUILD_WITH_INSTALL_RPATH ON) set(CMAKE_BUILD_WITH_INSTALL_RPATH ON)
set(EIGEN_TEST_NOQT ON CACHE BOOL "Disable Qt support in unit tests") set(EIGEN_TEST_NOQT ON CACHE BOOL "Disable Qt support in unit tests")
set(CMAKE_Fortran_COMPILER NOTFOUND) set(CMAKE_Fortran_COMPILER NOTFOUND)
add_subdirectory(${SBS_BASE}/libs/eigen EXCLUDE_FROM_ALL) add_subdirectory(${SBS_BASE}/libs/eigen EXCLUDE_FROM_ALL)
target_compile_definitions(eigen INTERFACE EIGEN_MAX_ALIGN_BYTES=0) target_compile_definitions(eigen INTERFACE EIGEN_MAX_ALIGN_BYTES=0)
# Format library
add_subdirectory(${SBS_BASE}/libs/fmt EXCLUDE_FROM_ALL) add_subdirectory(${SBS_BASE}/libs/fmt EXCLUDE_FROM_ALL)
target_compile_definitions(fmt-header-only INTERFACE _GLIBCXX_USE_WCHAR_T FMT_UNICODE=0 FMT_STATIC_THOUSANDS_SEPARATOR=0) target_compile_definitions(fmt-header-only INTERFACE _GLIBCXX_USE_WCHAR_T FMT_UNICODE=0 FMT_STATIC_THOUSANDS_SEPARATOR=0)
target_compile_options(fmt-header-only INTERFACE -fno-math-errno) target_compile_options(fmt-header-only INTERFACE -fno-math-errno)
# Catch2 library
add_subdirectory(${SBS_BASE}/libs/Catch2 EXCLUDE_FROM_ALL) add_subdirectory(${SBS_BASE}/libs/Catch2 EXCLUDE_FROM_ALL)
list(APPEND CMAKE_MODULE_PATH ${SBS_BASE}/libs/Catch2/contrib) list(APPEND CMAKE_MODULE_PATH ${SBS_BASE}/libs/Catch2/contrib)
include(Catch) include(Catch)
# MavLink library
add_subdirectory(${SBS_BASE}/libs/mavlink-skyward-lib EXCLUDE_FROM_ALL) add_subdirectory(${SBS_BASE}/libs/mavlink-skyward-lib EXCLUDE_FROM_ALL)
...@@ -21,33 +21,54 @@ ...@@ -21,33 +21,54 @@
enable_language(C CXX ASM) enable_language(C CXX ASM)
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR}) set(CMAKE_CXX_STANDARD 14)
get_filename_component(SBS_BASE ${CMAKE_CURRENT_LIST_DIR} DIRECTORY) set(CMAKE_CXX_STANDARD_REQUIRED ON)
if(NOT CMAKE_CURRENT_SOURCE_DIR STREQUAL SBS_BASE) # Load in SBS_BASE the project path
add_subdirectory(${SBS_BASE} EXCLUDE_FROM_ALL) cmake_path(GET CMAKE_CURRENT_LIST_DIR PARENT_PATH SBS_BASE)
list(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake) # Load in BOARDCORE_PATH the boardcore path
include(${CMAKE_SOURCE_DIR}/cmake/dependencies.cmake OPTIONAL) cmake_path(GET CMAKE_CURRENT_LIST_DIR PARENT_PATH BOARDCORE_PATH)
return()
endif()
include(boardcore) # Add the version information header to the global include path, so that all
# targets defined after this point will have access to it (Boardcore, Kernel)
include_directories(${BOARDCORE_PATH}/version)
string(REPLACE ";" "\\n" BOARDS_STR "${BOARDS}") # Include the Boardcore libraries
add_custom_target( list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR})
help-boards include(boardcore)
COMMAND printf ${BOARDS_STR}
COMMENT "All boards available:"
VERBATIM
)
# Function to link the Boardcore library to the target
function(sbs_target TARGET OPT_BOARD) function(sbs_target TARGET OPT_BOARD)
if(NOT OPT_BOARD) if(NOT OPT_BOARD)
message(FATAL_ERROR "No board selected") message(FATAL_ERROR "No board selected")
endif() endif()
target_include_directories(${TARGET} PRIVATE src/shared) target_include_directories(${TARGET} PRIVATE src/shared)
# Define the version information generation command
add_custom_target(${TARGET}-version-info
BYPRODUCTS ${CMAKE_CURRENT_BINARY_DIR}/generated/${TARGET}/version.cpp
COMMAND "${CMAKE_COMMAND}"
"-D" "TARGET_NAME=${TARGET}"
"-D" "CMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}"
"-D" "BOARDCORE_PATH=${BOARDCORE_PATH}"
"-D" "OUT_DIR=${CMAKE_CURRENT_BINARY_DIR}/generated/${TARGET}"
"-P" "${BOARDCORE_PATH}/cmake/version.cmake"
COMMENT "Generating version information file for ${TARGET}"
VERBATIM
)
# Build the generated version information file as part of the target
target_sources(${TARGET} PRIVATE
${CMAKE_CURRENT_BINARY_DIR}/generated/${TARGET}/version.cpp
)
if(CMAKE_CROSSCOMPILING) if(CMAKE_CROSSCOMPILING)
target_link_libraries(${TARGET} PRIVATE SkywardBoardcore::Boardcore::${OPT_BOARD}) # Link the embedded Boardcore library
target_link_libraries(${TARGET} PRIVATE Skyward::Boardcore::${OPT_BOARD})
# Linker script and linking options are inherited from the kernel library
# Add a post build command to create the hex file to flash on the board
add_custom_command( add_custom_command(
TARGET ${TARGET} POST_BUILD TARGET ${TARGET} POST_BUILD
COMMAND ${CMAKE_OBJCOPY} -O ihex ${TARGET} ${TARGET}.hex COMMAND ${CMAKE_OBJCOPY} -O ihex ${TARGET} ${TARGET}.hex
...@@ -56,7 +77,7 @@ function(sbs_target TARGET OPT_BOARD) ...@@ -56,7 +77,7 @@ function(sbs_target TARGET OPT_BOARD)
VERBATIM VERBATIM
) )
else() else()
target_link_libraries(${TARGET} PRIVATE SkywardBoardcore::Boardcore::host) target_link_libraries(${TARGET} PRIVATE Skyward::Boardcore::host)
endif() endif()
endfunction() endfunction()
......