diff --git a/.gitignore b/.gitignore
index 5a7a724..309f969 100644
--- a/.gitignore
+++ b/.gitignore
@@ -99,4 +99,4 @@ CMakeUserPresets.json
# These folders are cloned by conan, so there isn't a need to track them.
lib/atsam-component-drivers
-lib/cross-platform-software
+lib/cobs-c
diff --git a/.gitmodules b/.gitmodules
index 7bbed01..e69de29 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -1,4 +0,0 @@
-[submodule "lib/cobs-c"]
- path = lib/cobs-c
- url = git@github.com:cmcqueen/cobs-c.git
-
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
index 21d1130..55a96ca 100644
--- a/.idea/vcs.xml
+++ b/.idea/vcs.xml
@@ -3,7 +3,6 @@
-
-
+
\ No newline at end of file
diff --git a/AutoGenerated.X/nbproject/Makefile-default.mk b/AutoGenerated.X/nbproject/Makefile-default.mk
index 52f23e7..8ab9e6c 100644
--- a/AutoGenerated.X/nbproject/Makefile-default.mk
+++ b/AutoGenerated.X/nbproject/Makefile-default.mk
@@ -44,6 +44,12 @@ else
COMPARISON_BUILD=
endif
+ifdef SUB_IMAGE_ADDRESS
+
+else
+SUB_IMAGE_ADDRESS_COMMAND=
+endif
+
# Object Directory
OBJECTDIR=build/${CND_CONF}/${IMAGE_TYPE}
@@ -64,7 +70,7 @@ OBJECTFILES=${OBJECTDIR}/_ext/1865065685/plib_afec0.o ${OBJECTDIR}/_ext/60165520
SOURCEFILES=../src/config/default/peripheral/afec/plib_afec0.c ../src/config/default/peripheral/clk/plib_clk.c ../src/config/default/peripheral/efc/plib_efc.c ../src/config/default/peripheral/mcan/plib_mcan1.c ../src/config/default/peripheral/mcan/plib_mcan0.c ../src/config/default/peripheral/mpu/plib_mpu.c ../src/config/default/peripheral/nvic/plib_nvic.c ../src/config/default/peripheral/pio/plib_pio.c ../src/config/default/peripheral/pwm/plib_pwm0.c ../src/config/default/peripheral/rtc/plib_rtc.c ../src/config/default/peripheral/smc/plib_smc.c ../src/config/default/peripheral/systick/plib_systick.c ../src/config/default/peripheral/twihs/master/plib_twihs1_master.c ../src/config/default/peripheral/uart/plib_uart0.c ../src/config/default/peripheral/wdt/plib_wdt.c ../src/config/default/peripheral/xdmac/plib_xdmac.c ../src/config/default/stdio/gcc_monitor.c ../src/config/default/stdio/xc32_monitor.c ../src/config/default/system/cache/sys_cache.c ../src/config/default/system/int/src/sys_int.c ../src/config/default/system/time/src/sys_time.c ../src/config/default/initialization.c ../src/config/default/interrupts.c ../src/config/default/exceptions.c ../src/config/default/libc_syscalls.c ../src/config/default/tasks.c ../src/config/default/startup_gcc.c ../src/config/default/startup_xc32.c ../src/main.c ../src/app.c
# Pack Options
-PACK_COMMON_OPTIONS=-I "${DFP_DIR}/samv71b/include" -I "${CMSIS_DIR}/CMSIS/Core/Include"
+PACK_COMMON_OPTIONS=
@@ -103,362 +109,362 @@ endif
# ------------------------------------------------------------------------------------
# Rules for buildStep: compile
ifeq ($(TYPE_IMAGE), DEBUG_RUN)
-${OBJECTDIR}/_ext/1865065685/plib_afec0.o: ../src/config/default/peripheral/afec/plib_afec0.c .generated_files/flags/default/856ac8f2b1683a285049bdc82c9e79fa5b9048a2 .generated_files/flags/default/da39a3ee5e6b4b0d3255bfef95601890afd80709
+${OBJECTDIR}/_ext/1865065685/plib_afec0.o: ../src/config/default/peripheral/afec/plib_afec0.c .generated_files/flags/default/cfd6f815e5c35a4ef8b6d1218d939eded7de1e40 .generated_files/flags/default/49b7bfe10dcf6079d79f4fef45d6fc682c6e5b92
@${MKDIR} "${OBJECTDIR}/_ext/1865065685"
@${RM} ${OBJECTDIR}/_ext/1865065685/plib_afec0.o.d
@${RM} ${OBJECTDIR}/_ext/1865065685/plib_afec0.o
${MP_CC} $(MP_EXTRA_CC_PRE) -mcpu=cortex-m7 -g -D__DEBUG -gdwarf-2 -x c -c -D__$(MP_PROCESSOR_OPTION)__ -mthumb -I "../src" -I "../src/config/default" -I "../src/packs/ATSAMV71Q21B_DFP" ${PACK_COMMON_OPTIONS} -Os -ffunction-sections -mlong-calls -Wall -MP -MMD -MF "${OBJECTDIR}/_ext/1865065685/plib_afec0.o.d" -o ${OBJECTDIR}/_ext/1865065685/plib_afec0.o ../src/config/default/peripheral/afec/plib_afec0.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD)
-${OBJECTDIR}/_ext/60165520/plib_clk.o: ../src/config/default/peripheral/clk/plib_clk.c .generated_files/flags/default/eca14de26d7b8161ba8484fff3ed99e69244806e .generated_files/flags/default/da39a3ee5e6b4b0d3255bfef95601890afd80709
+${OBJECTDIR}/_ext/60165520/plib_clk.o: ../src/config/default/peripheral/clk/plib_clk.c .generated_files/flags/default/37df53916f7b28f5f8179e99da4b109560836503 .generated_files/flags/default/49b7bfe10dcf6079d79f4fef45d6fc682c6e5b92
@${MKDIR} "${OBJECTDIR}/_ext/60165520"
@${RM} ${OBJECTDIR}/_ext/60165520/plib_clk.o.d
@${RM} ${OBJECTDIR}/_ext/60165520/plib_clk.o
${MP_CC} $(MP_EXTRA_CC_PRE) -mcpu=cortex-m7 -g -D__DEBUG -gdwarf-2 -x c -c -D__$(MP_PROCESSOR_OPTION)__ -mthumb -I "../src" -I "../src/config/default" -I "../src/packs/ATSAMV71Q21B_DFP" ${PACK_COMMON_OPTIONS} -Os -ffunction-sections -mlong-calls -Wall -MP -MMD -MF "${OBJECTDIR}/_ext/60165520/plib_clk.o.d" -o ${OBJECTDIR}/_ext/60165520/plib_clk.o ../src/config/default/peripheral/clk/plib_clk.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD)
-${OBJECTDIR}/_ext/60167248/plib_efc.o: ../src/config/default/peripheral/efc/plib_efc.c .generated_files/flags/default/cfbdfa70b1b8cb36e88f106b4a067e375268b93b .generated_files/flags/default/da39a3ee5e6b4b0d3255bfef95601890afd80709
+${OBJECTDIR}/_ext/60167248/plib_efc.o: ../src/config/default/peripheral/efc/plib_efc.c .generated_files/flags/default/2c979bdd5310089a630e4f438aca7551974e26a2 .generated_files/flags/default/49b7bfe10dcf6079d79f4fef45d6fc682c6e5b92
@${MKDIR} "${OBJECTDIR}/_ext/60167248"
@${RM} ${OBJECTDIR}/_ext/60167248/plib_efc.o.d
@${RM} ${OBJECTDIR}/_ext/60167248/plib_efc.o
${MP_CC} $(MP_EXTRA_CC_PRE) -mcpu=cortex-m7 -g -D__DEBUG -gdwarf-2 -x c -c -D__$(MP_PROCESSOR_OPTION)__ -mthumb -I "../src" -I "../src/config/default" -I "../src/packs/ATSAMV71Q21B_DFP" ${PACK_COMMON_OPTIONS} -Os -ffunction-sections -mlong-calls -Wall -MP -MMD -MF "${OBJECTDIR}/_ext/60167248/plib_efc.o.d" -o ${OBJECTDIR}/_ext/60167248/plib_efc.o ../src/config/default/peripheral/efc/plib_efc.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD)
-${OBJECTDIR}/_ext/1865420181/plib_mcan1.o: ../src/config/default/peripheral/mcan/plib_mcan1.c .generated_files/flags/default/fa1a10440f571b7288d81994a052ee232b136583 .generated_files/flags/default/da39a3ee5e6b4b0d3255bfef95601890afd80709
+${OBJECTDIR}/_ext/1865420181/plib_mcan1.o: ../src/config/default/peripheral/mcan/plib_mcan1.c .generated_files/flags/default/e23d63005fdd29984d352ff8d96ca6afa6781230 .generated_files/flags/default/49b7bfe10dcf6079d79f4fef45d6fc682c6e5b92
@${MKDIR} "${OBJECTDIR}/_ext/1865420181"
@${RM} ${OBJECTDIR}/_ext/1865420181/plib_mcan1.o.d
@${RM} ${OBJECTDIR}/_ext/1865420181/plib_mcan1.o
${MP_CC} $(MP_EXTRA_CC_PRE) -mcpu=cortex-m7 -g -D__DEBUG -gdwarf-2 -x c -c -D__$(MP_PROCESSOR_OPTION)__ -mthumb -I "../src" -I "../src/config/default" -I "../src/packs/ATSAMV71Q21B_DFP" ${PACK_COMMON_OPTIONS} -Os -ffunction-sections -mlong-calls -Wall -MP -MMD -MF "${OBJECTDIR}/_ext/1865420181/plib_mcan1.o.d" -o ${OBJECTDIR}/_ext/1865420181/plib_mcan1.o ../src/config/default/peripheral/mcan/plib_mcan1.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD)
-${OBJECTDIR}/_ext/1865420181/plib_mcan0.o: ../src/config/default/peripheral/mcan/plib_mcan0.c .generated_files/flags/default/8df678a5fd589fb111fe3b044e591c4dc8bc63d5 .generated_files/flags/default/da39a3ee5e6b4b0d3255bfef95601890afd80709
+${OBJECTDIR}/_ext/1865420181/plib_mcan0.o: ../src/config/default/peripheral/mcan/plib_mcan0.c .generated_files/flags/default/2909460ef55667e2c5913daa7f61ed23597f4aa1 .generated_files/flags/default/49b7bfe10dcf6079d79f4fef45d6fc682c6e5b92
@${MKDIR} "${OBJECTDIR}/_ext/1865420181"
@${RM} ${OBJECTDIR}/_ext/1865420181/plib_mcan0.o.d
@${RM} ${OBJECTDIR}/_ext/1865420181/plib_mcan0.o
${MP_CC} $(MP_EXTRA_CC_PRE) -mcpu=cortex-m7 -g -D__DEBUG -gdwarf-2 -x c -c -D__$(MP_PROCESSOR_OPTION)__ -mthumb -I "../src" -I "../src/config/default" -I "../src/packs/ATSAMV71Q21B_DFP" ${PACK_COMMON_OPTIONS} -Os -ffunction-sections -mlong-calls -Wall -MP -MMD -MF "${OBJECTDIR}/_ext/1865420181/plib_mcan0.o.d" -o ${OBJECTDIR}/_ext/1865420181/plib_mcan0.o ../src/config/default/peripheral/mcan/plib_mcan0.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD)
-${OBJECTDIR}/_ext/60175264/plib_mpu.o: ../src/config/default/peripheral/mpu/plib_mpu.c .generated_files/flags/default/21ce48e030511a40ce9386627e942d9a2ea30dc8 .generated_files/flags/default/da39a3ee5e6b4b0d3255bfef95601890afd80709
+${OBJECTDIR}/_ext/60175264/plib_mpu.o: ../src/config/default/peripheral/mpu/plib_mpu.c .generated_files/flags/default/3ec5f93cd859b84ee8de4ea113fc5e3e7e510431 .generated_files/flags/default/49b7bfe10dcf6079d79f4fef45d6fc682c6e5b92
@${MKDIR} "${OBJECTDIR}/_ext/60175264"
@${RM} ${OBJECTDIR}/_ext/60175264/plib_mpu.o.d
@${RM} ${OBJECTDIR}/_ext/60175264/plib_mpu.o
${MP_CC} $(MP_EXTRA_CC_PRE) -mcpu=cortex-m7 -g -D__DEBUG -gdwarf-2 -x c -c -D__$(MP_PROCESSOR_OPTION)__ -mthumb -I "../src" -I "../src/config/default" -I "../src/packs/ATSAMV71Q21B_DFP" ${PACK_COMMON_OPTIONS} -Os -ffunction-sections -mlong-calls -Wall -MP -MMD -MF "${OBJECTDIR}/_ext/60175264/plib_mpu.o.d" -o ${OBJECTDIR}/_ext/60175264/plib_mpu.o ../src/config/default/peripheral/mpu/plib_mpu.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD)
-${OBJECTDIR}/_ext/1865468468/plib_nvic.o: ../src/config/default/peripheral/nvic/plib_nvic.c .generated_files/flags/default/d9b443bb5052f5b8929c3556fc5f2adc28fe674c .generated_files/flags/default/da39a3ee5e6b4b0d3255bfef95601890afd80709
+${OBJECTDIR}/_ext/1865468468/plib_nvic.o: ../src/config/default/peripheral/nvic/plib_nvic.c .generated_files/flags/default/d201da034569b7bf5843c78ea777f0f398f9e9f2 .generated_files/flags/default/49b7bfe10dcf6079d79f4fef45d6fc682c6e5b92
@${MKDIR} "${OBJECTDIR}/_ext/1865468468"
@${RM} ${OBJECTDIR}/_ext/1865468468/plib_nvic.o.d
@${RM} ${OBJECTDIR}/_ext/1865468468/plib_nvic.o
${MP_CC} $(MP_EXTRA_CC_PRE) -mcpu=cortex-m7 -g -D__DEBUG -gdwarf-2 -x c -c -D__$(MP_PROCESSOR_OPTION)__ -mthumb -I "../src" -I "../src/config/default" -I "../src/packs/ATSAMV71Q21B_DFP" ${PACK_COMMON_OPTIONS} -Os -ffunction-sections -mlong-calls -Wall -MP -MMD -MF "${OBJECTDIR}/_ext/1865468468/plib_nvic.o.d" -o ${OBJECTDIR}/_ext/1865468468/plib_nvic.o ../src/config/default/peripheral/nvic/plib_nvic.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD)
-${OBJECTDIR}/_ext/60177924/plib_pio.o: ../src/config/default/peripheral/pio/plib_pio.c .generated_files/flags/default/cdfbb2945f08f0f47d0efbceb1cda7048c8fb3d5 .generated_files/flags/default/da39a3ee5e6b4b0d3255bfef95601890afd80709
+${OBJECTDIR}/_ext/60177924/plib_pio.o: ../src/config/default/peripheral/pio/plib_pio.c .generated_files/flags/default/cd3f7cb7168e47f3861e5883c10aad0ea10112fa .generated_files/flags/default/49b7bfe10dcf6079d79f4fef45d6fc682c6e5b92
@${MKDIR} "${OBJECTDIR}/_ext/60177924"
@${RM} ${OBJECTDIR}/_ext/60177924/plib_pio.o.d
@${RM} ${OBJECTDIR}/_ext/60177924/plib_pio.o
${MP_CC} $(MP_EXTRA_CC_PRE) -mcpu=cortex-m7 -g -D__DEBUG -gdwarf-2 -x c -c -D__$(MP_PROCESSOR_OPTION)__ -mthumb -I "../src" -I "../src/config/default" -I "../src/packs/ATSAMV71Q21B_DFP" ${PACK_COMMON_OPTIONS} -Os -ffunction-sections -mlong-calls -Wall -MP -MMD -MF "${OBJECTDIR}/_ext/60177924/plib_pio.o.d" -o ${OBJECTDIR}/_ext/60177924/plib_pio.o ../src/config/default/peripheral/pio/plib_pio.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD)
-${OBJECTDIR}/_ext/60178356/plib_pwm0.o: ../src/config/default/peripheral/pwm/plib_pwm0.c .generated_files/flags/default/6c04650904e8bc9a99f53783f9818a54baaa63b9 .generated_files/flags/default/da39a3ee5e6b4b0d3255bfef95601890afd80709
+${OBJECTDIR}/_ext/60178356/plib_pwm0.o: ../src/config/default/peripheral/pwm/plib_pwm0.c .generated_files/flags/default/16328a37dd8c944198d85078d53ab2e749c26046 .generated_files/flags/default/49b7bfe10dcf6079d79f4fef45d6fc682c6e5b92
@${MKDIR} "${OBJECTDIR}/_ext/60178356"
@${RM} ${OBJECTDIR}/_ext/60178356/plib_pwm0.o.d
@${RM} ${OBJECTDIR}/_ext/60178356/plib_pwm0.o
${MP_CC} $(MP_EXTRA_CC_PRE) -mcpu=cortex-m7 -g -D__DEBUG -gdwarf-2 -x c -c -D__$(MP_PROCESSOR_OPTION)__ -mthumb -I "../src" -I "../src/config/default" -I "../src/packs/ATSAMV71Q21B_DFP" ${PACK_COMMON_OPTIONS} -Os -ffunction-sections -mlong-calls -Wall -MP -MMD -MF "${OBJECTDIR}/_ext/60178356/plib_pwm0.o.d" -o ${OBJECTDIR}/_ext/60178356/plib_pwm0.o ../src/config/default/peripheral/pwm/plib_pwm0.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD)
-${OBJECTDIR}/_ext/60180175/plib_rtc.o: ../src/config/default/peripheral/rtc/plib_rtc.c .generated_files/flags/default/440d36384478caa760571447e66eca1f49313028 .generated_files/flags/default/da39a3ee5e6b4b0d3255bfef95601890afd80709
+${OBJECTDIR}/_ext/60180175/plib_rtc.o: ../src/config/default/peripheral/rtc/plib_rtc.c .generated_files/flags/default/dd0cfba75bae814ca9437d5d75fdc67e548ec596 .generated_files/flags/default/49b7bfe10dcf6079d79f4fef45d6fc682c6e5b92
@${MKDIR} "${OBJECTDIR}/_ext/60180175"
@${RM} ${OBJECTDIR}/_ext/60180175/plib_rtc.o.d
@${RM} ${OBJECTDIR}/_ext/60180175/plib_rtc.o
${MP_CC} $(MP_EXTRA_CC_PRE) -mcpu=cortex-m7 -g -D__DEBUG -gdwarf-2 -x c -c -D__$(MP_PROCESSOR_OPTION)__ -mthumb -I "../src" -I "../src/config/default" -I "../src/packs/ATSAMV71Q21B_DFP" ${PACK_COMMON_OPTIONS} -Os -ffunction-sections -mlong-calls -Wall -MP -MMD -MF "${OBJECTDIR}/_ext/60180175/plib_rtc.o.d" -o ${OBJECTDIR}/_ext/60180175/plib_rtc.o ../src/config/default/peripheral/rtc/plib_rtc.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD)
-${OBJECTDIR}/_ext/60180919/plib_smc.o: ../src/config/default/peripheral/smc/plib_smc.c .generated_files/flags/default/f04241d7dae35eb2bd7d5d13d4732ed1ee795dc2 .generated_files/flags/default/da39a3ee5e6b4b0d3255bfef95601890afd80709
+${OBJECTDIR}/_ext/60180919/plib_smc.o: ../src/config/default/peripheral/smc/plib_smc.c .generated_files/flags/default/1dc3dbc3995efdff7dd05b41eeb194897f011c0 .generated_files/flags/default/49b7bfe10dcf6079d79f4fef45d6fc682c6e5b92
@${MKDIR} "${OBJECTDIR}/_ext/60180919"
@${RM} ${OBJECTDIR}/_ext/60180919/plib_smc.o.d
@${RM} ${OBJECTDIR}/_ext/60180919/plib_smc.o
${MP_CC} $(MP_EXTRA_CC_PRE) -mcpu=cortex-m7 -g -D__DEBUG -gdwarf-2 -x c -c -D__$(MP_PROCESSOR_OPTION)__ -mthumb -I "../src" -I "../src/config/default" -I "../src/packs/ATSAMV71Q21B_DFP" ${PACK_COMMON_OPTIONS} -Os -ffunction-sections -mlong-calls -Wall -MP -MMD -MF "${OBJECTDIR}/_ext/60180919/plib_smc.o.d" -o ${OBJECTDIR}/_ext/60180919/plib_smc.o ../src/config/default/peripheral/smc/plib_smc.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD)
-${OBJECTDIR}/_ext/1827571544/plib_systick.o: ../src/config/default/peripheral/systick/plib_systick.c .generated_files/flags/default/d99a382a7fd224b6e46aba16a7b3e961d6f3eda9 .generated_files/flags/default/da39a3ee5e6b4b0d3255bfef95601890afd80709
+${OBJECTDIR}/_ext/1827571544/plib_systick.o: ../src/config/default/peripheral/systick/plib_systick.c .generated_files/flags/default/ae990134387d221195d3a171c9ece3e6d7c53f2e .generated_files/flags/default/49b7bfe10dcf6079d79f4fef45d6fc682c6e5b92
@${MKDIR} "${OBJECTDIR}/_ext/1827571544"
@${RM} ${OBJECTDIR}/_ext/1827571544/plib_systick.o.d
@${RM} ${OBJECTDIR}/_ext/1827571544/plib_systick.o
${MP_CC} $(MP_EXTRA_CC_PRE) -mcpu=cortex-m7 -g -D__DEBUG -gdwarf-2 -x c -c -D__$(MP_PROCESSOR_OPTION)__ -mthumb -I "../src" -I "../src/config/default" -I "../src/packs/ATSAMV71Q21B_DFP" ${PACK_COMMON_OPTIONS} -Os -ffunction-sections -mlong-calls -Wall -MP -MMD -MF "${OBJECTDIR}/_ext/1827571544/plib_systick.o.d" -o ${OBJECTDIR}/_ext/1827571544/plib_systick.o ../src/config/default/peripheral/systick/plib_systick.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD)
-${OBJECTDIR}/_ext/621496242/plib_twihs1_master.o: ../src/config/default/peripheral/twihs/master/plib_twihs1_master.c .generated_files/flags/default/dfa95ae3931c64eea4021fc9603507b5644c65ec .generated_files/flags/default/da39a3ee5e6b4b0d3255bfef95601890afd80709
+${OBJECTDIR}/_ext/621496242/plib_twihs1_master.o: ../src/config/default/peripheral/twihs/master/plib_twihs1_master.c .generated_files/flags/default/a0269656790a566b81bb4342dbb80bf7f6942ff5 .generated_files/flags/default/49b7bfe10dcf6079d79f4fef45d6fc682c6e5b92
@${MKDIR} "${OBJECTDIR}/_ext/621496242"
@${RM} ${OBJECTDIR}/_ext/621496242/plib_twihs1_master.o.d
@${RM} ${OBJECTDIR}/_ext/621496242/plib_twihs1_master.o
${MP_CC} $(MP_EXTRA_CC_PRE) -mcpu=cortex-m7 -g -D__DEBUG -gdwarf-2 -x c -c -D__$(MP_PROCESSOR_OPTION)__ -mthumb -I "../src" -I "../src/config/default" -I "../src/packs/ATSAMV71Q21B_DFP" ${PACK_COMMON_OPTIONS} -Os -ffunction-sections -mlong-calls -Wall -MP -MMD -MF "${OBJECTDIR}/_ext/621496242/plib_twihs1_master.o.d" -o ${OBJECTDIR}/_ext/621496242/plib_twihs1_master.o ../src/config/default/peripheral/twihs/master/plib_twihs1_master.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD)
-${OBJECTDIR}/_ext/1865657120/plib_uart0.o: ../src/config/default/peripheral/uart/plib_uart0.c .generated_files/flags/default/577a7e478ddc2aa139d19a8380f495574f947b0a .generated_files/flags/default/da39a3ee5e6b4b0d3255bfef95601890afd80709
+${OBJECTDIR}/_ext/1865657120/plib_uart0.o: ../src/config/default/peripheral/uart/plib_uart0.c .generated_files/flags/default/f5e70ade1b71e663902610dfc73fce5e2b534241 .generated_files/flags/default/49b7bfe10dcf6079d79f4fef45d6fc682c6e5b92
@${MKDIR} "${OBJECTDIR}/_ext/1865657120"
@${RM} ${OBJECTDIR}/_ext/1865657120/plib_uart0.o.d
@${RM} ${OBJECTDIR}/_ext/1865657120/plib_uart0.o
${MP_CC} $(MP_EXTRA_CC_PRE) -mcpu=cortex-m7 -g -D__DEBUG -gdwarf-2 -x c -c -D__$(MP_PROCESSOR_OPTION)__ -mthumb -I "../src" -I "../src/config/default" -I "../src/packs/ATSAMV71Q21B_DFP" ${PACK_COMMON_OPTIONS} -Os -ffunction-sections -mlong-calls -Wall -MP -MMD -MF "${OBJECTDIR}/_ext/1865657120/plib_uart0.o.d" -o ${OBJECTDIR}/_ext/1865657120/plib_uart0.o ../src/config/default/peripheral/uart/plib_uart0.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD)
-${OBJECTDIR}/_ext/60184501/plib_wdt.o: ../src/config/default/peripheral/wdt/plib_wdt.c .generated_files/flags/default/7c294b5da4051d716259e0d22a8b95c72a4b5bd8 .generated_files/flags/default/da39a3ee5e6b4b0d3255bfef95601890afd80709
+${OBJECTDIR}/_ext/60184501/plib_wdt.o: ../src/config/default/peripheral/wdt/plib_wdt.c .generated_files/flags/default/a4d629452e58362ac6d4a6d7b95c3297708e5a72 .generated_files/flags/default/49b7bfe10dcf6079d79f4fef45d6fc682c6e5b92
@${MKDIR} "${OBJECTDIR}/_ext/60184501"
@${RM} ${OBJECTDIR}/_ext/60184501/plib_wdt.o.d
@${RM} ${OBJECTDIR}/_ext/60184501/plib_wdt.o
${MP_CC} $(MP_EXTRA_CC_PRE) -mcpu=cortex-m7 -g -D__DEBUG -gdwarf-2 -x c -c -D__$(MP_PROCESSOR_OPTION)__ -mthumb -I "../src" -I "../src/config/default" -I "../src/packs/ATSAMV71Q21B_DFP" ${PACK_COMMON_OPTIONS} -Os -ffunction-sections -mlong-calls -Wall -MP -MMD -MF "${OBJECTDIR}/_ext/60184501/plib_wdt.o.d" -o ${OBJECTDIR}/_ext/60184501/plib_wdt.o ../src/config/default/peripheral/wdt/plib_wdt.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD)
-${OBJECTDIR}/_ext/2003650513/plib_xdmac.o: ../src/config/default/peripheral/xdmac/plib_xdmac.c .generated_files/flags/default/21574e18144b9b1cd3e02e1a7113e5c258c3be49 .generated_files/flags/default/da39a3ee5e6b4b0d3255bfef95601890afd80709
+${OBJECTDIR}/_ext/2003650513/plib_xdmac.o: ../src/config/default/peripheral/xdmac/plib_xdmac.c .generated_files/flags/default/df138deeb0595a895d04b35e41fec7aa40536ce2 .generated_files/flags/default/49b7bfe10dcf6079d79f4fef45d6fc682c6e5b92
@${MKDIR} "${OBJECTDIR}/_ext/2003650513"
@${RM} ${OBJECTDIR}/_ext/2003650513/plib_xdmac.o.d
@${RM} ${OBJECTDIR}/_ext/2003650513/plib_xdmac.o
${MP_CC} $(MP_EXTRA_CC_PRE) -mcpu=cortex-m7 -g -D__DEBUG -gdwarf-2 -x c -c -D__$(MP_PROCESSOR_OPTION)__ -mthumb -I "../src" -I "../src/config/default" -I "../src/packs/ATSAMV71Q21B_DFP" ${PACK_COMMON_OPTIONS} -Os -ffunction-sections -mlong-calls -Wall -MP -MMD -MF "${OBJECTDIR}/_ext/2003650513/plib_xdmac.o.d" -o ${OBJECTDIR}/_ext/2003650513/plib_xdmac.o ../src/config/default/peripheral/xdmac/plib_xdmac.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD)
-${OBJECTDIR}/_ext/163028504/gcc_monitor.o: ../src/config/default/stdio/gcc_monitor.c .generated_files/flags/default/94a1fb7ffe4ec41b09433a81800986fdca65718b .generated_files/flags/default/da39a3ee5e6b4b0d3255bfef95601890afd80709
+${OBJECTDIR}/_ext/163028504/gcc_monitor.o: ../src/config/default/stdio/gcc_monitor.c .generated_files/flags/default/29b906cb5f29c80f5e15f4681b107aff8827d4ae .generated_files/flags/default/49b7bfe10dcf6079d79f4fef45d6fc682c6e5b92
@${MKDIR} "${OBJECTDIR}/_ext/163028504"
@${RM} ${OBJECTDIR}/_ext/163028504/gcc_monitor.o.d
@${RM} ${OBJECTDIR}/_ext/163028504/gcc_monitor.o
${MP_CC} $(MP_EXTRA_CC_PRE) -mcpu=cortex-m7 -g -D__DEBUG -gdwarf-2 -x c -c -D__$(MP_PROCESSOR_OPTION)__ -mthumb -I "../src" -I "../src/config/default" -I "../src/packs/ATSAMV71Q21B_DFP" ${PACK_COMMON_OPTIONS} -Os -ffunction-sections -mlong-calls -Wall -MP -MMD -MF "${OBJECTDIR}/_ext/163028504/gcc_monitor.o.d" -o ${OBJECTDIR}/_ext/163028504/gcc_monitor.o ../src/config/default/stdio/gcc_monitor.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD)
-${OBJECTDIR}/_ext/163028504/xc32_monitor.o: ../src/config/default/stdio/xc32_monitor.c .generated_files/flags/default/6b6c631eecfcc9b94b3b5c9eb9faf1f8310b7a2e .generated_files/flags/default/da39a3ee5e6b4b0d3255bfef95601890afd80709
+${OBJECTDIR}/_ext/163028504/xc32_monitor.o: ../src/config/default/stdio/xc32_monitor.c .generated_files/flags/default/219c7fcdda4f66958dbb5ea422f6ac2eed5e361d .generated_files/flags/default/49b7bfe10dcf6079d79f4fef45d6fc682c6e5b92
@${MKDIR} "${OBJECTDIR}/_ext/163028504"
@${RM} ${OBJECTDIR}/_ext/163028504/xc32_monitor.o.d
@${RM} ${OBJECTDIR}/_ext/163028504/xc32_monitor.o
${MP_CC} $(MP_EXTRA_CC_PRE) -mcpu=cortex-m7 -g -D__DEBUG -gdwarf-2 -x c -c -D__$(MP_PROCESSOR_OPTION)__ -mthumb -I "../src" -I "../src/config/default" -I "../src/packs/ATSAMV71Q21B_DFP" ${PACK_COMMON_OPTIONS} -Os -ffunction-sections -mlong-calls -Wall -MP -MMD -MF "${OBJECTDIR}/_ext/163028504/xc32_monitor.o.d" -o ${OBJECTDIR}/_ext/163028504/xc32_monitor.o ../src/config/default/stdio/xc32_monitor.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD)
-${OBJECTDIR}/_ext/1014039709/sys_cache.o: ../src/config/default/system/cache/sys_cache.c .generated_files/flags/default/788276c53499918394d0190961532ab102453cc5 .generated_files/flags/default/da39a3ee5e6b4b0d3255bfef95601890afd80709
+${OBJECTDIR}/_ext/1014039709/sys_cache.o: ../src/config/default/system/cache/sys_cache.c .generated_files/flags/default/6b5286c341909d6e08d5072c84e9a6d6d72316ea .generated_files/flags/default/49b7bfe10dcf6079d79f4fef45d6fc682c6e5b92
@${MKDIR} "${OBJECTDIR}/_ext/1014039709"
@${RM} ${OBJECTDIR}/_ext/1014039709/sys_cache.o.d
@${RM} ${OBJECTDIR}/_ext/1014039709/sys_cache.o
${MP_CC} $(MP_EXTRA_CC_PRE) -mcpu=cortex-m7 -g -D__DEBUG -gdwarf-2 -x c -c -D__$(MP_PROCESSOR_OPTION)__ -mthumb -I "../src" -I "../src/config/default" -I "../src/packs/ATSAMV71Q21B_DFP" ${PACK_COMMON_OPTIONS} -Os -ffunction-sections -mlong-calls -Wall -MP -MMD -MF "${OBJECTDIR}/_ext/1014039709/sys_cache.o.d" -o ${OBJECTDIR}/_ext/1014039709/sys_cache.o ../src/config/default/system/cache/sys_cache.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD)
-${OBJECTDIR}/_ext/1881668453/sys_int.o: ../src/config/default/system/int/src/sys_int.c .generated_files/flags/default/9669656104ba4cfaf46599aa45c6bfb06b93ba5d .generated_files/flags/default/da39a3ee5e6b4b0d3255bfef95601890afd80709
+${OBJECTDIR}/_ext/1881668453/sys_int.o: ../src/config/default/system/int/src/sys_int.c .generated_files/flags/default/e2257f9e4541ad43b1c783abe82bc19784e55bb3 .generated_files/flags/default/49b7bfe10dcf6079d79f4fef45d6fc682c6e5b92
@${MKDIR} "${OBJECTDIR}/_ext/1881668453"
@${RM} ${OBJECTDIR}/_ext/1881668453/sys_int.o.d
@${RM} ${OBJECTDIR}/_ext/1881668453/sys_int.o
${MP_CC} $(MP_EXTRA_CC_PRE) -mcpu=cortex-m7 -g -D__DEBUG -gdwarf-2 -x c -c -D__$(MP_PROCESSOR_OPTION)__ -mthumb -I "../src" -I "../src/config/default" -I "../src/packs/ATSAMV71Q21B_DFP" ${PACK_COMMON_OPTIONS} -Os -ffunction-sections -mlong-calls -Wall -MP -MMD -MF "${OBJECTDIR}/_ext/1881668453/sys_int.o.d" -o ${OBJECTDIR}/_ext/1881668453/sys_int.o ../src/config/default/system/int/src/sys_int.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD)
-${OBJECTDIR}/_ext/101884895/sys_time.o: ../src/config/default/system/time/src/sys_time.c .generated_files/flags/default/7d08b663f12937f390d6d4b00d1f9d2e9dc8d192 .generated_files/flags/default/da39a3ee5e6b4b0d3255bfef95601890afd80709
+${OBJECTDIR}/_ext/101884895/sys_time.o: ../src/config/default/system/time/src/sys_time.c .generated_files/flags/default/a3d79734d63c33215348254f7514b44418906ada .generated_files/flags/default/49b7bfe10dcf6079d79f4fef45d6fc682c6e5b92
@${MKDIR} "${OBJECTDIR}/_ext/101884895"
@${RM} ${OBJECTDIR}/_ext/101884895/sys_time.o.d
@${RM} ${OBJECTDIR}/_ext/101884895/sys_time.o
${MP_CC} $(MP_EXTRA_CC_PRE) -mcpu=cortex-m7 -g -D__DEBUG -gdwarf-2 -x c -c -D__$(MP_PROCESSOR_OPTION)__ -mthumb -I "../src" -I "../src/config/default" -I "../src/packs/ATSAMV71Q21B_DFP" ${PACK_COMMON_OPTIONS} -Os -ffunction-sections -mlong-calls -Wall -MP -MMD -MF "${OBJECTDIR}/_ext/101884895/sys_time.o.d" -o ${OBJECTDIR}/_ext/101884895/sys_time.o ../src/config/default/system/time/src/sys_time.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD)
-${OBJECTDIR}/_ext/1171490990/initialization.o: ../src/config/default/initialization.c .generated_files/flags/default/ebec2c7380889c3405e1ae628c6978b21777d783 .generated_files/flags/default/da39a3ee5e6b4b0d3255bfef95601890afd80709
+${OBJECTDIR}/_ext/1171490990/initialization.o: ../src/config/default/initialization.c .generated_files/flags/default/730f9e99e4cf0c5b158b4bde5021ada66fa7de14 .generated_files/flags/default/49b7bfe10dcf6079d79f4fef45d6fc682c6e5b92
@${MKDIR} "${OBJECTDIR}/_ext/1171490990"
@${RM} ${OBJECTDIR}/_ext/1171490990/initialization.o.d
@${RM} ${OBJECTDIR}/_ext/1171490990/initialization.o
${MP_CC} $(MP_EXTRA_CC_PRE) -mcpu=cortex-m7 -g -D__DEBUG -gdwarf-2 -x c -c -D__$(MP_PROCESSOR_OPTION)__ -mthumb -I "../src" -I "../src/config/default" -I "../src/packs/ATSAMV71Q21B_DFP" ${PACK_COMMON_OPTIONS} -Os -ffunction-sections -mlong-calls -Wall -MP -MMD -MF "${OBJECTDIR}/_ext/1171490990/initialization.o.d" -o ${OBJECTDIR}/_ext/1171490990/initialization.o ../src/config/default/initialization.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD)
-${OBJECTDIR}/_ext/1171490990/interrupts.o: ../src/config/default/interrupts.c .generated_files/flags/default/b7f2fd2a876664ae3720511be3477717b29189c .generated_files/flags/default/da39a3ee5e6b4b0d3255bfef95601890afd80709
+${OBJECTDIR}/_ext/1171490990/interrupts.o: ../src/config/default/interrupts.c .generated_files/flags/default/3f940f503ea493f31589fae986f9a776c573b85f .generated_files/flags/default/49b7bfe10dcf6079d79f4fef45d6fc682c6e5b92
@${MKDIR} "${OBJECTDIR}/_ext/1171490990"
@${RM} ${OBJECTDIR}/_ext/1171490990/interrupts.o.d
@${RM} ${OBJECTDIR}/_ext/1171490990/interrupts.o
${MP_CC} $(MP_EXTRA_CC_PRE) -mcpu=cortex-m7 -g -D__DEBUG -gdwarf-2 -x c -c -D__$(MP_PROCESSOR_OPTION)__ -mthumb -I "../src" -I "../src/config/default" -I "../src/packs/ATSAMV71Q21B_DFP" ${PACK_COMMON_OPTIONS} -Os -ffunction-sections -mlong-calls -Wall -MP -MMD -MF "${OBJECTDIR}/_ext/1171490990/interrupts.o.d" -o ${OBJECTDIR}/_ext/1171490990/interrupts.o ../src/config/default/interrupts.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD)
-${OBJECTDIR}/_ext/1171490990/exceptions.o: ../src/config/default/exceptions.c .generated_files/flags/default/b9bdd71c05801ca68e17f78861a6a42d6b82001 .generated_files/flags/default/da39a3ee5e6b4b0d3255bfef95601890afd80709
+${OBJECTDIR}/_ext/1171490990/exceptions.o: ../src/config/default/exceptions.c .generated_files/flags/default/3c00cff5fa2b89a5d4068a572ce4920f191a6bef .generated_files/flags/default/49b7bfe10dcf6079d79f4fef45d6fc682c6e5b92
@${MKDIR} "${OBJECTDIR}/_ext/1171490990"
@${RM} ${OBJECTDIR}/_ext/1171490990/exceptions.o.d
@${RM} ${OBJECTDIR}/_ext/1171490990/exceptions.o
${MP_CC} $(MP_EXTRA_CC_PRE) -mcpu=cortex-m7 -g -D__DEBUG -gdwarf-2 -x c -c -D__$(MP_PROCESSOR_OPTION)__ -mthumb -I "../src" -I "../src/config/default" -I "../src/packs/ATSAMV71Q21B_DFP" ${PACK_COMMON_OPTIONS} -Os -ffunction-sections -mlong-calls -Wall -MP -MMD -MF "${OBJECTDIR}/_ext/1171490990/exceptions.o.d" -o ${OBJECTDIR}/_ext/1171490990/exceptions.o ../src/config/default/exceptions.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD)
-${OBJECTDIR}/_ext/1171490990/libc_syscalls.o: ../src/config/default/libc_syscalls.c .generated_files/flags/default/e8090c38b81e97e855728848be565ded0133811c .generated_files/flags/default/da39a3ee5e6b4b0d3255bfef95601890afd80709
+${OBJECTDIR}/_ext/1171490990/libc_syscalls.o: ../src/config/default/libc_syscalls.c .generated_files/flags/default/735746682d3e7d2ddd8e8908ee4183d77ce5ad3d .generated_files/flags/default/49b7bfe10dcf6079d79f4fef45d6fc682c6e5b92
@${MKDIR} "${OBJECTDIR}/_ext/1171490990"
@${RM} ${OBJECTDIR}/_ext/1171490990/libc_syscalls.o.d
@${RM} ${OBJECTDIR}/_ext/1171490990/libc_syscalls.o
${MP_CC} $(MP_EXTRA_CC_PRE) -mcpu=cortex-m7 -g -D__DEBUG -gdwarf-2 -x c -c -D__$(MP_PROCESSOR_OPTION)__ -mthumb -I "../src" -I "../src/config/default" -I "../src/packs/ATSAMV71Q21B_DFP" ${PACK_COMMON_OPTIONS} -Os -ffunction-sections -mlong-calls -Wall -MP -MMD -MF "${OBJECTDIR}/_ext/1171490990/libc_syscalls.o.d" -o ${OBJECTDIR}/_ext/1171490990/libc_syscalls.o ../src/config/default/libc_syscalls.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD)
-${OBJECTDIR}/_ext/1171490990/tasks.o: ../src/config/default/tasks.c .generated_files/flags/default/27d12583d52deaedfd9df239add2681e1c2bdb2c .generated_files/flags/default/da39a3ee5e6b4b0d3255bfef95601890afd80709
+${OBJECTDIR}/_ext/1171490990/tasks.o: ../src/config/default/tasks.c .generated_files/flags/default/13dc22dcfa7ee1191fc26ac323e89ba7e70fe6a1 .generated_files/flags/default/49b7bfe10dcf6079d79f4fef45d6fc682c6e5b92
@${MKDIR} "${OBJECTDIR}/_ext/1171490990"
@${RM} ${OBJECTDIR}/_ext/1171490990/tasks.o.d
@${RM} ${OBJECTDIR}/_ext/1171490990/tasks.o
${MP_CC} $(MP_EXTRA_CC_PRE) -mcpu=cortex-m7 -g -D__DEBUG -gdwarf-2 -x c -c -D__$(MP_PROCESSOR_OPTION)__ -mthumb -I "../src" -I "../src/config/default" -I "../src/packs/ATSAMV71Q21B_DFP" ${PACK_COMMON_OPTIONS} -Os -ffunction-sections -mlong-calls -Wall -MP -MMD -MF "${OBJECTDIR}/_ext/1171490990/tasks.o.d" -o ${OBJECTDIR}/_ext/1171490990/tasks.o ../src/config/default/tasks.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD)
-${OBJECTDIR}/_ext/1171490990/startup_gcc.o: ../src/config/default/startup_gcc.c .generated_files/flags/default/29174ce4014587440211fb5753a8f929f085ce50 .generated_files/flags/default/da39a3ee5e6b4b0d3255bfef95601890afd80709
+${OBJECTDIR}/_ext/1171490990/startup_gcc.o: ../src/config/default/startup_gcc.c .generated_files/flags/default/b4ff8e7cada4f4148e20d01496a906083ae6559f .generated_files/flags/default/49b7bfe10dcf6079d79f4fef45d6fc682c6e5b92
@${MKDIR} "${OBJECTDIR}/_ext/1171490990"
@${RM} ${OBJECTDIR}/_ext/1171490990/startup_gcc.o.d
@${RM} ${OBJECTDIR}/_ext/1171490990/startup_gcc.o
${MP_CC} $(MP_EXTRA_CC_PRE) -mcpu=cortex-m7 -g -D__DEBUG -gdwarf-2 -x c -c -D__$(MP_PROCESSOR_OPTION)__ -mthumb -I "../src" -I "../src/config/default" -I "../src/packs/ATSAMV71Q21B_DFP" ${PACK_COMMON_OPTIONS} -Os -ffunction-sections -mlong-calls -Wall -MP -MMD -MF "${OBJECTDIR}/_ext/1171490990/startup_gcc.o.d" -o ${OBJECTDIR}/_ext/1171490990/startup_gcc.o ../src/config/default/startup_gcc.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD)
-${OBJECTDIR}/_ext/1171490990/startup_xc32.o: ../src/config/default/startup_xc32.c .generated_files/flags/default/76f26e96bbd34f33413502a9dfca2c55ca01e98c .generated_files/flags/default/da39a3ee5e6b4b0d3255bfef95601890afd80709
+${OBJECTDIR}/_ext/1171490990/startup_xc32.o: ../src/config/default/startup_xc32.c .generated_files/flags/default/de8dc0d10d93ef339ec87a16e76c184e75e0232c .generated_files/flags/default/49b7bfe10dcf6079d79f4fef45d6fc682c6e5b92
@${MKDIR} "${OBJECTDIR}/_ext/1171490990"
@${RM} ${OBJECTDIR}/_ext/1171490990/startup_xc32.o.d
@${RM} ${OBJECTDIR}/_ext/1171490990/startup_xc32.o
${MP_CC} $(MP_EXTRA_CC_PRE) -mcpu=cortex-m7 -g -D__DEBUG -gdwarf-2 -x c -c -D__$(MP_PROCESSOR_OPTION)__ -mthumb -I "../src" -I "../src/config/default" -I "../src/packs/ATSAMV71Q21B_DFP" ${PACK_COMMON_OPTIONS} -Os -ffunction-sections -mlong-calls -Wall -MP -MMD -MF "${OBJECTDIR}/_ext/1171490990/startup_xc32.o.d" -o ${OBJECTDIR}/_ext/1171490990/startup_xc32.o ../src/config/default/startup_xc32.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD)
-${OBJECTDIR}/_ext/1360937237/main.o: ../src/main.c .generated_files/flags/default/475526cf2ae0617b3d0541e3addc4338bdff7073 .generated_files/flags/default/da39a3ee5e6b4b0d3255bfef95601890afd80709
+${OBJECTDIR}/_ext/1360937237/main.o: ../src/main.c .generated_files/flags/default/5a15880261247ef9b23ee405dacc09d3c013087 .generated_files/flags/default/49b7bfe10dcf6079d79f4fef45d6fc682c6e5b92
@${MKDIR} "${OBJECTDIR}/_ext/1360937237"
@${RM} ${OBJECTDIR}/_ext/1360937237/main.o.d
@${RM} ${OBJECTDIR}/_ext/1360937237/main.o
${MP_CC} $(MP_EXTRA_CC_PRE) -mcpu=cortex-m7 -g -D__DEBUG -gdwarf-2 -x c -c -D__$(MP_PROCESSOR_OPTION)__ -mthumb -I "../src" -I "../src/config/default" -I "../src/packs/ATSAMV71Q21B_DFP" ${PACK_COMMON_OPTIONS} -Os -ffunction-sections -mlong-calls -Wall -MP -MMD -MF "${OBJECTDIR}/_ext/1360937237/main.o.d" -o ${OBJECTDIR}/_ext/1360937237/main.o ../src/main.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD)
-${OBJECTDIR}/_ext/1360937237/app.o: ../src/app.c .generated_files/flags/default/167f1c07471cdcbb60d10a0d0490ffa21d899ab1 .generated_files/flags/default/da39a3ee5e6b4b0d3255bfef95601890afd80709
+${OBJECTDIR}/_ext/1360937237/app.o: ../src/app.c .generated_files/flags/default/4660dddfe18015a356511c5f4570ea4925b459be .generated_files/flags/default/49b7bfe10dcf6079d79f4fef45d6fc682c6e5b92
@${MKDIR} "${OBJECTDIR}/_ext/1360937237"
@${RM} ${OBJECTDIR}/_ext/1360937237/app.o.d
@${RM} ${OBJECTDIR}/_ext/1360937237/app.o
${MP_CC} $(MP_EXTRA_CC_PRE) -mcpu=cortex-m7 -g -D__DEBUG -gdwarf-2 -x c -c -D__$(MP_PROCESSOR_OPTION)__ -mthumb -I "../src" -I "../src/config/default" -I "../src/packs/ATSAMV71Q21B_DFP" ${PACK_COMMON_OPTIONS} -Os -ffunction-sections -mlong-calls -Wall -MP -MMD -MF "${OBJECTDIR}/_ext/1360937237/app.o.d" -o ${OBJECTDIR}/_ext/1360937237/app.o ../src/app.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD)
else
-${OBJECTDIR}/_ext/1865065685/plib_afec0.o: ../src/config/default/peripheral/afec/plib_afec0.c .generated_files/flags/default/af6e02fe4e7ca32c07ba16e17698b42d618d9e38 .generated_files/flags/default/da39a3ee5e6b4b0d3255bfef95601890afd80709
+${OBJECTDIR}/_ext/1865065685/plib_afec0.o: ../src/config/default/peripheral/afec/plib_afec0.c .generated_files/flags/default/1bb0805e9a2370285177a24ef3898609a93b3e6d .generated_files/flags/default/49b7bfe10dcf6079d79f4fef45d6fc682c6e5b92
@${MKDIR} "${OBJECTDIR}/_ext/1865065685"
@${RM} ${OBJECTDIR}/_ext/1865065685/plib_afec0.o.d
@${RM} ${OBJECTDIR}/_ext/1865065685/plib_afec0.o
${MP_CC} $(MP_EXTRA_CC_PRE) -mcpu=cortex-m7 -x c -c -D__$(MP_PROCESSOR_OPTION)__ -mthumb -I "../src" -I "../src/config/default" -I "../src/packs/ATSAMV71Q21B_DFP" ${PACK_COMMON_OPTIONS} -Os -ffunction-sections -mlong-calls -Wall -MP -MMD -MF "${OBJECTDIR}/_ext/1865065685/plib_afec0.o.d" -o ${OBJECTDIR}/_ext/1865065685/plib_afec0.o ../src/config/default/peripheral/afec/plib_afec0.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD)
-${OBJECTDIR}/_ext/60165520/plib_clk.o: ../src/config/default/peripheral/clk/plib_clk.c .generated_files/flags/default/253ac2cbc016813bcc1b5621b88a1b3eb47f975a .generated_files/flags/default/da39a3ee5e6b4b0d3255bfef95601890afd80709
+${OBJECTDIR}/_ext/60165520/plib_clk.o: ../src/config/default/peripheral/clk/plib_clk.c .generated_files/flags/default/3d8547732477a8c42f4cd5783f61e66fa75f7659 .generated_files/flags/default/49b7bfe10dcf6079d79f4fef45d6fc682c6e5b92
@${MKDIR} "${OBJECTDIR}/_ext/60165520"
@${RM} ${OBJECTDIR}/_ext/60165520/plib_clk.o.d
@${RM} ${OBJECTDIR}/_ext/60165520/plib_clk.o
${MP_CC} $(MP_EXTRA_CC_PRE) -mcpu=cortex-m7 -x c -c -D__$(MP_PROCESSOR_OPTION)__ -mthumb -I "../src" -I "../src/config/default" -I "../src/packs/ATSAMV71Q21B_DFP" ${PACK_COMMON_OPTIONS} -Os -ffunction-sections -mlong-calls -Wall -MP -MMD -MF "${OBJECTDIR}/_ext/60165520/plib_clk.o.d" -o ${OBJECTDIR}/_ext/60165520/plib_clk.o ../src/config/default/peripheral/clk/plib_clk.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD)
-${OBJECTDIR}/_ext/60167248/plib_efc.o: ../src/config/default/peripheral/efc/plib_efc.c .generated_files/flags/default/88848133fac46f9d26fbae6493ed0b59272aeb6a .generated_files/flags/default/da39a3ee5e6b4b0d3255bfef95601890afd80709
+${OBJECTDIR}/_ext/60167248/plib_efc.o: ../src/config/default/peripheral/efc/plib_efc.c .generated_files/flags/default/c2e7651707ace2b48ab0c18ff770a61fc4a8608c .generated_files/flags/default/49b7bfe10dcf6079d79f4fef45d6fc682c6e5b92
@${MKDIR} "${OBJECTDIR}/_ext/60167248"
@${RM} ${OBJECTDIR}/_ext/60167248/plib_efc.o.d
@${RM} ${OBJECTDIR}/_ext/60167248/plib_efc.o
${MP_CC} $(MP_EXTRA_CC_PRE) -mcpu=cortex-m7 -x c -c -D__$(MP_PROCESSOR_OPTION)__ -mthumb -I "../src" -I "../src/config/default" -I "../src/packs/ATSAMV71Q21B_DFP" ${PACK_COMMON_OPTIONS} -Os -ffunction-sections -mlong-calls -Wall -MP -MMD -MF "${OBJECTDIR}/_ext/60167248/plib_efc.o.d" -o ${OBJECTDIR}/_ext/60167248/plib_efc.o ../src/config/default/peripheral/efc/plib_efc.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD)
-${OBJECTDIR}/_ext/1865420181/plib_mcan1.o: ../src/config/default/peripheral/mcan/plib_mcan1.c .generated_files/flags/default/cdc83945514c1e7cf6c7e0e0ded5fee5718666c1 .generated_files/flags/default/da39a3ee5e6b4b0d3255bfef95601890afd80709
+${OBJECTDIR}/_ext/1865420181/plib_mcan1.o: ../src/config/default/peripheral/mcan/plib_mcan1.c .generated_files/flags/default/5b419b40fff0abb7507d1b1b62d285a9b601e0c6 .generated_files/flags/default/49b7bfe10dcf6079d79f4fef45d6fc682c6e5b92
@${MKDIR} "${OBJECTDIR}/_ext/1865420181"
@${RM} ${OBJECTDIR}/_ext/1865420181/plib_mcan1.o.d
@${RM} ${OBJECTDIR}/_ext/1865420181/plib_mcan1.o
${MP_CC} $(MP_EXTRA_CC_PRE) -mcpu=cortex-m7 -x c -c -D__$(MP_PROCESSOR_OPTION)__ -mthumb -I "../src" -I "../src/config/default" -I "../src/packs/ATSAMV71Q21B_DFP" ${PACK_COMMON_OPTIONS} -Os -ffunction-sections -mlong-calls -Wall -MP -MMD -MF "${OBJECTDIR}/_ext/1865420181/plib_mcan1.o.d" -o ${OBJECTDIR}/_ext/1865420181/plib_mcan1.o ../src/config/default/peripheral/mcan/plib_mcan1.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD)
-${OBJECTDIR}/_ext/1865420181/plib_mcan0.o: ../src/config/default/peripheral/mcan/plib_mcan0.c .generated_files/flags/default/b1ba5c5a9aeae83a05ba4c14baf69490de02e98e .generated_files/flags/default/da39a3ee5e6b4b0d3255bfef95601890afd80709
+${OBJECTDIR}/_ext/1865420181/plib_mcan0.o: ../src/config/default/peripheral/mcan/plib_mcan0.c .generated_files/flags/default/bb5cdbe91dec261e3a4cf64b386a82d6feb6197e .generated_files/flags/default/49b7bfe10dcf6079d79f4fef45d6fc682c6e5b92
@${MKDIR} "${OBJECTDIR}/_ext/1865420181"
@${RM} ${OBJECTDIR}/_ext/1865420181/plib_mcan0.o.d
@${RM} ${OBJECTDIR}/_ext/1865420181/plib_mcan0.o
${MP_CC} $(MP_EXTRA_CC_PRE) -mcpu=cortex-m7 -x c -c -D__$(MP_PROCESSOR_OPTION)__ -mthumb -I "../src" -I "../src/config/default" -I "../src/packs/ATSAMV71Q21B_DFP" ${PACK_COMMON_OPTIONS} -Os -ffunction-sections -mlong-calls -Wall -MP -MMD -MF "${OBJECTDIR}/_ext/1865420181/plib_mcan0.o.d" -o ${OBJECTDIR}/_ext/1865420181/plib_mcan0.o ../src/config/default/peripheral/mcan/plib_mcan0.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD)
-${OBJECTDIR}/_ext/60175264/plib_mpu.o: ../src/config/default/peripheral/mpu/plib_mpu.c .generated_files/flags/default/60c7595541d5d7935bd6e4bc272089d0bde73e3a .generated_files/flags/default/da39a3ee5e6b4b0d3255bfef95601890afd80709
+${OBJECTDIR}/_ext/60175264/plib_mpu.o: ../src/config/default/peripheral/mpu/plib_mpu.c .generated_files/flags/default/43ce3f5dbd0e60f95afbfd430a7de219352ac898 .generated_files/flags/default/49b7bfe10dcf6079d79f4fef45d6fc682c6e5b92
@${MKDIR} "${OBJECTDIR}/_ext/60175264"
@${RM} ${OBJECTDIR}/_ext/60175264/plib_mpu.o.d
@${RM} ${OBJECTDIR}/_ext/60175264/plib_mpu.o
${MP_CC} $(MP_EXTRA_CC_PRE) -mcpu=cortex-m7 -x c -c -D__$(MP_PROCESSOR_OPTION)__ -mthumb -I "../src" -I "../src/config/default" -I "../src/packs/ATSAMV71Q21B_DFP" ${PACK_COMMON_OPTIONS} -Os -ffunction-sections -mlong-calls -Wall -MP -MMD -MF "${OBJECTDIR}/_ext/60175264/plib_mpu.o.d" -o ${OBJECTDIR}/_ext/60175264/plib_mpu.o ../src/config/default/peripheral/mpu/plib_mpu.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD)
-${OBJECTDIR}/_ext/1865468468/plib_nvic.o: ../src/config/default/peripheral/nvic/plib_nvic.c .generated_files/flags/default/fb50daab4c99a8614f9be266fa873a4a42bc09e4 .generated_files/flags/default/da39a3ee5e6b4b0d3255bfef95601890afd80709
+${OBJECTDIR}/_ext/1865468468/plib_nvic.o: ../src/config/default/peripheral/nvic/plib_nvic.c .generated_files/flags/default/bcf9aac3ad0cf34980c39d731919891c264a9651 .generated_files/flags/default/49b7bfe10dcf6079d79f4fef45d6fc682c6e5b92
@${MKDIR} "${OBJECTDIR}/_ext/1865468468"
@${RM} ${OBJECTDIR}/_ext/1865468468/plib_nvic.o.d
@${RM} ${OBJECTDIR}/_ext/1865468468/plib_nvic.o
${MP_CC} $(MP_EXTRA_CC_PRE) -mcpu=cortex-m7 -x c -c -D__$(MP_PROCESSOR_OPTION)__ -mthumb -I "../src" -I "../src/config/default" -I "../src/packs/ATSAMV71Q21B_DFP" ${PACK_COMMON_OPTIONS} -Os -ffunction-sections -mlong-calls -Wall -MP -MMD -MF "${OBJECTDIR}/_ext/1865468468/plib_nvic.o.d" -o ${OBJECTDIR}/_ext/1865468468/plib_nvic.o ../src/config/default/peripheral/nvic/plib_nvic.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD)
-${OBJECTDIR}/_ext/60177924/plib_pio.o: ../src/config/default/peripheral/pio/plib_pio.c .generated_files/flags/default/a9b473d70d19bab997485a06518ca437159db235 .generated_files/flags/default/da39a3ee5e6b4b0d3255bfef95601890afd80709
+${OBJECTDIR}/_ext/60177924/plib_pio.o: ../src/config/default/peripheral/pio/plib_pio.c .generated_files/flags/default/1d620e67b44fc706a081601130862a03df115124 .generated_files/flags/default/49b7bfe10dcf6079d79f4fef45d6fc682c6e5b92
@${MKDIR} "${OBJECTDIR}/_ext/60177924"
@${RM} ${OBJECTDIR}/_ext/60177924/plib_pio.o.d
@${RM} ${OBJECTDIR}/_ext/60177924/plib_pio.o
${MP_CC} $(MP_EXTRA_CC_PRE) -mcpu=cortex-m7 -x c -c -D__$(MP_PROCESSOR_OPTION)__ -mthumb -I "../src" -I "../src/config/default" -I "../src/packs/ATSAMV71Q21B_DFP" ${PACK_COMMON_OPTIONS} -Os -ffunction-sections -mlong-calls -Wall -MP -MMD -MF "${OBJECTDIR}/_ext/60177924/plib_pio.o.d" -o ${OBJECTDIR}/_ext/60177924/plib_pio.o ../src/config/default/peripheral/pio/plib_pio.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD)
-${OBJECTDIR}/_ext/60178356/plib_pwm0.o: ../src/config/default/peripheral/pwm/plib_pwm0.c .generated_files/flags/default/8fbeb7730c049216c0f0e6ea5a9d9246a18f1444 .generated_files/flags/default/da39a3ee5e6b4b0d3255bfef95601890afd80709
+${OBJECTDIR}/_ext/60178356/plib_pwm0.o: ../src/config/default/peripheral/pwm/plib_pwm0.c .generated_files/flags/default/5480d1d19c685d1fd029c07a9dd360779826cc0c .generated_files/flags/default/49b7bfe10dcf6079d79f4fef45d6fc682c6e5b92
@${MKDIR} "${OBJECTDIR}/_ext/60178356"
@${RM} ${OBJECTDIR}/_ext/60178356/plib_pwm0.o.d
@${RM} ${OBJECTDIR}/_ext/60178356/plib_pwm0.o
${MP_CC} $(MP_EXTRA_CC_PRE) -mcpu=cortex-m7 -x c -c -D__$(MP_PROCESSOR_OPTION)__ -mthumb -I "../src" -I "../src/config/default" -I "../src/packs/ATSAMV71Q21B_DFP" ${PACK_COMMON_OPTIONS} -Os -ffunction-sections -mlong-calls -Wall -MP -MMD -MF "${OBJECTDIR}/_ext/60178356/plib_pwm0.o.d" -o ${OBJECTDIR}/_ext/60178356/plib_pwm0.o ../src/config/default/peripheral/pwm/plib_pwm0.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD)
-${OBJECTDIR}/_ext/60180175/plib_rtc.o: ../src/config/default/peripheral/rtc/plib_rtc.c .generated_files/flags/default/76e4c0f2842a125ce3fdc4b50d4f23b2743ed7f9 .generated_files/flags/default/da39a3ee5e6b4b0d3255bfef95601890afd80709
+${OBJECTDIR}/_ext/60180175/plib_rtc.o: ../src/config/default/peripheral/rtc/plib_rtc.c .generated_files/flags/default/11913a656c15b81a7cb6893b60ac81744eb1b975 .generated_files/flags/default/49b7bfe10dcf6079d79f4fef45d6fc682c6e5b92
@${MKDIR} "${OBJECTDIR}/_ext/60180175"
@${RM} ${OBJECTDIR}/_ext/60180175/plib_rtc.o.d
@${RM} ${OBJECTDIR}/_ext/60180175/plib_rtc.o
${MP_CC} $(MP_EXTRA_CC_PRE) -mcpu=cortex-m7 -x c -c -D__$(MP_PROCESSOR_OPTION)__ -mthumb -I "../src" -I "../src/config/default" -I "../src/packs/ATSAMV71Q21B_DFP" ${PACK_COMMON_OPTIONS} -Os -ffunction-sections -mlong-calls -Wall -MP -MMD -MF "${OBJECTDIR}/_ext/60180175/plib_rtc.o.d" -o ${OBJECTDIR}/_ext/60180175/plib_rtc.o ../src/config/default/peripheral/rtc/plib_rtc.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD)
-${OBJECTDIR}/_ext/60180919/plib_smc.o: ../src/config/default/peripheral/smc/plib_smc.c .generated_files/flags/default/165e5c9cf0f81ca71766c7b9fe57630d07e6944f .generated_files/flags/default/da39a3ee5e6b4b0d3255bfef95601890afd80709
+${OBJECTDIR}/_ext/60180919/plib_smc.o: ../src/config/default/peripheral/smc/plib_smc.c .generated_files/flags/default/b85ceb4ea96319eab828ebe69692b881046d395d .generated_files/flags/default/49b7bfe10dcf6079d79f4fef45d6fc682c6e5b92
@${MKDIR} "${OBJECTDIR}/_ext/60180919"
@${RM} ${OBJECTDIR}/_ext/60180919/plib_smc.o.d
@${RM} ${OBJECTDIR}/_ext/60180919/plib_smc.o
${MP_CC} $(MP_EXTRA_CC_PRE) -mcpu=cortex-m7 -x c -c -D__$(MP_PROCESSOR_OPTION)__ -mthumb -I "../src" -I "../src/config/default" -I "../src/packs/ATSAMV71Q21B_DFP" ${PACK_COMMON_OPTIONS} -Os -ffunction-sections -mlong-calls -Wall -MP -MMD -MF "${OBJECTDIR}/_ext/60180919/plib_smc.o.d" -o ${OBJECTDIR}/_ext/60180919/plib_smc.o ../src/config/default/peripheral/smc/plib_smc.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD)
-${OBJECTDIR}/_ext/1827571544/plib_systick.o: ../src/config/default/peripheral/systick/plib_systick.c .generated_files/flags/default/ed98e8bb197924f92f717c2634c5f31527103e .generated_files/flags/default/da39a3ee5e6b4b0d3255bfef95601890afd80709
+${OBJECTDIR}/_ext/1827571544/plib_systick.o: ../src/config/default/peripheral/systick/plib_systick.c .generated_files/flags/default/b40202aef2fc7bfd89214bb6da6ec92071d3ea66 .generated_files/flags/default/49b7bfe10dcf6079d79f4fef45d6fc682c6e5b92
@${MKDIR} "${OBJECTDIR}/_ext/1827571544"
@${RM} ${OBJECTDIR}/_ext/1827571544/plib_systick.o.d
@${RM} ${OBJECTDIR}/_ext/1827571544/plib_systick.o
${MP_CC} $(MP_EXTRA_CC_PRE) -mcpu=cortex-m7 -x c -c -D__$(MP_PROCESSOR_OPTION)__ -mthumb -I "../src" -I "../src/config/default" -I "../src/packs/ATSAMV71Q21B_DFP" ${PACK_COMMON_OPTIONS} -Os -ffunction-sections -mlong-calls -Wall -MP -MMD -MF "${OBJECTDIR}/_ext/1827571544/plib_systick.o.d" -o ${OBJECTDIR}/_ext/1827571544/plib_systick.o ../src/config/default/peripheral/systick/plib_systick.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD)
-${OBJECTDIR}/_ext/621496242/plib_twihs1_master.o: ../src/config/default/peripheral/twihs/master/plib_twihs1_master.c .generated_files/flags/default/8e32975a6ae0f6003933d33fbb269fea212b793a .generated_files/flags/default/da39a3ee5e6b4b0d3255bfef95601890afd80709
+${OBJECTDIR}/_ext/621496242/plib_twihs1_master.o: ../src/config/default/peripheral/twihs/master/plib_twihs1_master.c .generated_files/flags/default/f0429ec672544f922701c3aa3e82231ef33b370c .generated_files/flags/default/49b7bfe10dcf6079d79f4fef45d6fc682c6e5b92
@${MKDIR} "${OBJECTDIR}/_ext/621496242"
@${RM} ${OBJECTDIR}/_ext/621496242/plib_twihs1_master.o.d
@${RM} ${OBJECTDIR}/_ext/621496242/plib_twihs1_master.o
${MP_CC} $(MP_EXTRA_CC_PRE) -mcpu=cortex-m7 -x c -c -D__$(MP_PROCESSOR_OPTION)__ -mthumb -I "../src" -I "../src/config/default" -I "../src/packs/ATSAMV71Q21B_DFP" ${PACK_COMMON_OPTIONS} -Os -ffunction-sections -mlong-calls -Wall -MP -MMD -MF "${OBJECTDIR}/_ext/621496242/plib_twihs1_master.o.d" -o ${OBJECTDIR}/_ext/621496242/plib_twihs1_master.o ../src/config/default/peripheral/twihs/master/plib_twihs1_master.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD)
-${OBJECTDIR}/_ext/1865657120/plib_uart0.o: ../src/config/default/peripheral/uart/plib_uart0.c .generated_files/flags/default/e37c278e76f0aff80e4daf9cc13d1c5973fc50ea .generated_files/flags/default/da39a3ee5e6b4b0d3255bfef95601890afd80709
+${OBJECTDIR}/_ext/1865657120/plib_uart0.o: ../src/config/default/peripheral/uart/plib_uart0.c .generated_files/flags/default/f17fe9ad15064c4d162b437870747692efae4c0a .generated_files/flags/default/49b7bfe10dcf6079d79f4fef45d6fc682c6e5b92
@${MKDIR} "${OBJECTDIR}/_ext/1865657120"
@${RM} ${OBJECTDIR}/_ext/1865657120/plib_uart0.o.d
@${RM} ${OBJECTDIR}/_ext/1865657120/plib_uart0.o
${MP_CC} $(MP_EXTRA_CC_PRE) -mcpu=cortex-m7 -x c -c -D__$(MP_PROCESSOR_OPTION)__ -mthumb -I "../src" -I "../src/config/default" -I "../src/packs/ATSAMV71Q21B_DFP" ${PACK_COMMON_OPTIONS} -Os -ffunction-sections -mlong-calls -Wall -MP -MMD -MF "${OBJECTDIR}/_ext/1865657120/plib_uart0.o.d" -o ${OBJECTDIR}/_ext/1865657120/plib_uart0.o ../src/config/default/peripheral/uart/plib_uart0.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD)
-${OBJECTDIR}/_ext/60184501/plib_wdt.o: ../src/config/default/peripheral/wdt/plib_wdt.c .generated_files/flags/default/dd0d6d574740f15efe56df1e2b0e7af76866929f .generated_files/flags/default/da39a3ee5e6b4b0d3255bfef95601890afd80709
+${OBJECTDIR}/_ext/60184501/plib_wdt.o: ../src/config/default/peripheral/wdt/plib_wdt.c .generated_files/flags/default/a19e3303202022e464a80865a1cbfa98800d610b .generated_files/flags/default/49b7bfe10dcf6079d79f4fef45d6fc682c6e5b92
@${MKDIR} "${OBJECTDIR}/_ext/60184501"
@${RM} ${OBJECTDIR}/_ext/60184501/plib_wdt.o.d
@${RM} ${OBJECTDIR}/_ext/60184501/plib_wdt.o
${MP_CC} $(MP_EXTRA_CC_PRE) -mcpu=cortex-m7 -x c -c -D__$(MP_PROCESSOR_OPTION)__ -mthumb -I "../src" -I "../src/config/default" -I "../src/packs/ATSAMV71Q21B_DFP" ${PACK_COMMON_OPTIONS} -Os -ffunction-sections -mlong-calls -Wall -MP -MMD -MF "${OBJECTDIR}/_ext/60184501/plib_wdt.o.d" -o ${OBJECTDIR}/_ext/60184501/plib_wdt.o ../src/config/default/peripheral/wdt/plib_wdt.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD)
-${OBJECTDIR}/_ext/2003650513/plib_xdmac.o: ../src/config/default/peripheral/xdmac/plib_xdmac.c .generated_files/flags/default/5c1b44b4e625f2c76ac69a0e861f818864099ae7 .generated_files/flags/default/da39a3ee5e6b4b0d3255bfef95601890afd80709
+${OBJECTDIR}/_ext/2003650513/plib_xdmac.o: ../src/config/default/peripheral/xdmac/plib_xdmac.c .generated_files/flags/default/db8272b8257547efd67f4ee290ad2117b7ca22bd .generated_files/flags/default/49b7bfe10dcf6079d79f4fef45d6fc682c6e5b92
@${MKDIR} "${OBJECTDIR}/_ext/2003650513"
@${RM} ${OBJECTDIR}/_ext/2003650513/plib_xdmac.o.d
@${RM} ${OBJECTDIR}/_ext/2003650513/plib_xdmac.o
${MP_CC} $(MP_EXTRA_CC_PRE) -mcpu=cortex-m7 -x c -c -D__$(MP_PROCESSOR_OPTION)__ -mthumb -I "../src" -I "../src/config/default" -I "../src/packs/ATSAMV71Q21B_DFP" ${PACK_COMMON_OPTIONS} -Os -ffunction-sections -mlong-calls -Wall -MP -MMD -MF "${OBJECTDIR}/_ext/2003650513/plib_xdmac.o.d" -o ${OBJECTDIR}/_ext/2003650513/plib_xdmac.o ../src/config/default/peripheral/xdmac/plib_xdmac.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD)
-${OBJECTDIR}/_ext/163028504/gcc_monitor.o: ../src/config/default/stdio/gcc_monitor.c .generated_files/flags/default/3f39130237b579b60588f8292eedccee19503396 .generated_files/flags/default/da39a3ee5e6b4b0d3255bfef95601890afd80709
+${OBJECTDIR}/_ext/163028504/gcc_monitor.o: ../src/config/default/stdio/gcc_monitor.c .generated_files/flags/default/165b0918bac2092aa267f3a49543cfdffc4da3a .generated_files/flags/default/49b7bfe10dcf6079d79f4fef45d6fc682c6e5b92
@${MKDIR} "${OBJECTDIR}/_ext/163028504"
@${RM} ${OBJECTDIR}/_ext/163028504/gcc_monitor.o.d
@${RM} ${OBJECTDIR}/_ext/163028504/gcc_monitor.o
${MP_CC} $(MP_EXTRA_CC_PRE) -mcpu=cortex-m7 -x c -c -D__$(MP_PROCESSOR_OPTION)__ -mthumb -I "../src" -I "../src/config/default" -I "../src/packs/ATSAMV71Q21B_DFP" ${PACK_COMMON_OPTIONS} -Os -ffunction-sections -mlong-calls -Wall -MP -MMD -MF "${OBJECTDIR}/_ext/163028504/gcc_monitor.o.d" -o ${OBJECTDIR}/_ext/163028504/gcc_monitor.o ../src/config/default/stdio/gcc_monitor.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD)
-${OBJECTDIR}/_ext/163028504/xc32_monitor.o: ../src/config/default/stdio/xc32_monitor.c .generated_files/flags/default/f1b1092b49203f38623898e3b26cc396f567026 .generated_files/flags/default/da39a3ee5e6b4b0d3255bfef95601890afd80709
+${OBJECTDIR}/_ext/163028504/xc32_monitor.o: ../src/config/default/stdio/xc32_monitor.c .generated_files/flags/default/f1f62185b1d77a2516458e852b7ecea815213fb5 .generated_files/flags/default/49b7bfe10dcf6079d79f4fef45d6fc682c6e5b92
@${MKDIR} "${OBJECTDIR}/_ext/163028504"
@${RM} ${OBJECTDIR}/_ext/163028504/xc32_monitor.o.d
@${RM} ${OBJECTDIR}/_ext/163028504/xc32_monitor.o
${MP_CC} $(MP_EXTRA_CC_PRE) -mcpu=cortex-m7 -x c -c -D__$(MP_PROCESSOR_OPTION)__ -mthumb -I "../src" -I "../src/config/default" -I "../src/packs/ATSAMV71Q21B_DFP" ${PACK_COMMON_OPTIONS} -Os -ffunction-sections -mlong-calls -Wall -MP -MMD -MF "${OBJECTDIR}/_ext/163028504/xc32_monitor.o.d" -o ${OBJECTDIR}/_ext/163028504/xc32_monitor.o ../src/config/default/stdio/xc32_monitor.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD)
-${OBJECTDIR}/_ext/1014039709/sys_cache.o: ../src/config/default/system/cache/sys_cache.c .generated_files/flags/default/11af903e2c005f72618803e08ecf70b594776cb0 .generated_files/flags/default/da39a3ee5e6b4b0d3255bfef95601890afd80709
+${OBJECTDIR}/_ext/1014039709/sys_cache.o: ../src/config/default/system/cache/sys_cache.c .generated_files/flags/default/efc95f1e5b6fa7342564333802fbec247fc36af .generated_files/flags/default/49b7bfe10dcf6079d79f4fef45d6fc682c6e5b92
@${MKDIR} "${OBJECTDIR}/_ext/1014039709"
@${RM} ${OBJECTDIR}/_ext/1014039709/sys_cache.o.d
@${RM} ${OBJECTDIR}/_ext/1014039709/sys_cache.o
${MP_CC} $(MP_EXTRA_CC_PRE) -mcpu=cortex-m7 -x c -c -D__$(MP_PROCESSOR_OPTION)__ -mthumb -I "../src" -I "../src/config/default" -I "../src/packs/ATSAMV71Q21B_DFP" ${PACK_COMMON_OPTIONS} -Os -ffunction-sections -mlong-calls -Wall -MP -MMD -MF "${OBJECTDIR}/_ext/1014039709/sys_cache.o.d" -o ${OBJECTDIR}/_ext/1014039709/sys_cache.o ../src/config/default/system/cache/sys_cache.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD)
-${OBJECTDIR}/_ext/1881668453/sys_int.o: ../src/config/default/system/int/src/sys_int.c .generated_files/flags/default/56717e9c34487e556b310d041a819ab19862a754 .generated_files/flags/default/da39a3ee5e6b4b0d3255bfef95601890afd80709
+${OBJECTDIR}/_ext/1881668453/sys_int.o: ../src/config/default/system/int/src/sys_int.c .generated_files/flags/default/40a22bb09f112818554818556819656fac5fda77 .generated_files/flags/default/49b7bfe10dcf6079d79f4fef45d6fc682c6e5b92
@${MKDIR} "${OBJECTDIR}/_ext/1881668453"
@${RM} ${OBJECTDIR}/_ext/1881668453/sys_int.o.d
@${RM} ${OBJECTDIR}/_ext/1881668453/sys_int.o
${MP_CC} $(MP_EXTRA_CC_PRE) -mcpu=cortex-m7 -x c -c -D__$(MP_PROCESSOR_OPTION)__ -mthumb -I "../src" -I "../src/config/default" -I "../src/packs/ATSAMV71Q21B_DFP" ${PACK_COMMON_OPTIONS} -Os -ffunction-sections -mlong-calls -Wall -MP -MMD -MF "${OBJECTDIR}/_ext/1881668453/sys_int.o.d" -o ${OBJECTDIR}/_ext/1881668453/sys_int.o ../src/config/default/system/int/src/sys_int.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD)
-${OBJECTDIR}/_ext/101884895/sys_time.o: ../src/config/default/system/time/src/sys_time.c .generated_files/flags/default/23b5612ca8061dcf87c15fbe97f940a8dc50efa .generated_files/flags/default/da39a3ee5e6b4b0d3255bfef95601890afd80709
+${OBJECTDIR}/_ext/101884895/sys_time.o: ../src/config/default/system/time/src/sys_time.c .generated_files/flags/default/77d6d29b22012fb4ca75c4c3820857bc2e63493f .generated_files/flags/default/49b7bfe10dcf6079d79f4fef45d6fc682c6e5b92
@${MKDIR} "${OBJECTDIR}/_ext/101884895"
@${RM} ${OBJECTDIR}/_ext/101884895/sys_time.o.d
@${RM} ${OBJECTDIR}/_ext/101884895/sys_time.o
${MP_CC} $(MP_EXTRA_CC_PRE) -mcpu=cortex-m7 -x c -c -D__$(MP_PROCESSOR_OPTION)__ -mthumb -I "../src" -I "../src/config/default" -I "../src/packs/ATSAMV71Q21B_DFP" ${PACK_COMMON_OPTIONS} -Os -ffunction-sections -mlong-calls -Wall -MP -MMD -MF "${OBJECTDIR}/_ext/101884895/sys_time.o.d" -o ${OBJECTDIR}/_ext/101884895/sys_time.o ../src/config/default/system/time/src/sys_time.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD)
-${OBJECTDIR}/_ext/1171490990/initialization.o: ../src/config/default/initialization.c .generated_files/flags/default/69a33438811ad461fbb6f99dae1c67d481bea934 .generated_files/flags/default/da39a3ee5e6b4b0d3255bfef95601890afd80709
+${OBJECTDIR}/_ext/1171490990/initialization.o: ../src/config/default/initialization.c .generated_files/flags/default/46ec4f096fc30d4f136aa76a7aaec8c4bfb456fa .generated_files/flags/default/49b7bfe10dcf6079d79f4fef45d6fc682c6e5b92
@${MKDIR} "${OBJECTDIR}/_ext/1171490990"
@${RM} ${OBJECTDIR}/_ext/1171490990/initialization.o.d
@${RM} ${OBJECTDIR}/_ext/1171490990/initialization.o
${MP_CC} $(MP_EXTRA_CC_PRE) -mcpu=cortex-m7 -x c -c -D__$(MP_PROCESSOR_OPTION)__ -mthumb -I "../src" -I "../src/config/default" -I "../src/packs/ATSAMV71Q21B_DFP" ${PACK_COMMON_OPTIONS} -Os -ffunction-sections -mlong-calls -Wall -MP -MMD -MF "${OBJECTDIR}/_ext/1171490990/initialization.o.d" -o ${OBJECTDIR}/_ext/1171490990/initialization.o ../src/config/default/initialization.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD)
-${OBJECTDIR}/_ext/1171490990/interrupts.o: ../src/config/default/interrupts.c .generated_files/flags/default/f9705166529cd804c0693778c99736694730deca .generated_files/flags/default/da39a3ee5e6b4b0d3255bfef95601890afd80709
+${OBJECTDIR}/_ext/1171490990/interrupts.o: ../src/config/default/interrupts.c .generated_files/flags/default/4f1e2379df8196a1600414bc9c5e12b34f881e2b .generated_files/flags/default/49b7bfe10dcf6079d79f4fef45d6fc682c6e5b92
@${MKDIR} "${OBJECTDIR}/_ext/1171490990"
@${RM} ${OBJECTDIR}/_ext/1171490990/interrupts.o.d
@${RM} ${OBJECTDIR}/_ext/1171490990/interrupts.o
${MP_CC} $(MP_EXTRA_CC_PRE) -mcpu=cortex-m7 -x c -c -D__$(MP_PROCESSOR_OPTION)__ -mthumb -I "../src" -I "../src/config/default" -I "../src/packs/ATSAMV71Q21B_DFP" ${PACK_COMMON_OPTIONS} -Os -ffunction-sections -mlong-calls -Wall -MP -MMD -MF "${OBJECTDIR}/_ext/1171490990/interrupts.o.d" -o ${OBJECTDIR}/_ext/1171490990/interrupts.o ../src/config/default/interrupts.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD)
-${OBJECTDIR}/_ext/1171490990/exceptions.o: ../src/config/default/exceptions.c .generated_files/flags/default/da33c62fff7c2ea6108e5bd367844932461eda91 .generated_files/flags/default/da39a3ee5e6b4b0d3255bfef95601890afd80709
+${OBJECTDIR}/_ext/1171490990/exceptions.o: ../src/config/default/exceptions.c .generated_files/flags/default/cee5a94c9b43bb95e460ef4ec0aa5147f30008cb .generated_files/flags/default/49b7bfe10dcf6079d79f4fef45d6fc682c6e5b92
@${MKDIR} "${OBJECTDIR}/_ext/1171490990"
@${RM} ${OBJECTDIR}/_ext/1171490990/exceptions.o.d
@${RM} ${OBJECTDIR}/_ext/1171490990/exceptions.o
${MP_CC} $(MP_EXTRA_CC_PRE) -mcpu=cortex-m7 -x c -c -D__$(MP_PROCESSOR_OPTION)__ -mthumb -I "../src" -I "../src/config/default" -I "../src/packs/ATSAMV71Q21B_DFP" ${PACK_COMMON_OPTIONS} -Os -ffunction-sections -mlong-calls -Wall -MP -MMD -MF "${OBJECTDIR}/_ext/1171490990/exceptions.o.d" -o ${OBJECTDIR}/_ext/1171490990/exceptions.o ../src/config/default/exceptions.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD)
-${OBJECTDIR}/_ext/1171490990/libc_syscalls.o: ../src/config/default/libc_syscalls.c .generated_files/flags/default/dcef4d9933915516951148cdd5b19419288a6754 .generated_files/flags/default/da39a3ee5e6b4b0d3255bfef95601890afd80709
+${OBJECTDIR}/_ext/1171490990/libc_syscalls.o: ../src/config/default/libc_syscalls.c .generated_files/flags/default/e4fa41bf748ecff97bc083a9fc7e72c14e575051 .generated_files/flags/default/49b7bfe10dcf6079d79f4fef45d6fc682c6e5b92
@${MKDIR} "${OBJECTDIR}/_ext/1171490990"
@${RM} ${OBJECTDIR}/_ext/1171490990/libc_syscalls.o.d
@${RM} ${OBJECTDIR}/_ext/1171490990/libc_syscalls.o
${MP_CC} $(MP_EXTRA_CC_PRE) -mcpu=cortex-m7 -x c -c -D__$(MP_PROCESSOR_OPTION)__ -mthumb -I "../src" -I "../src/config/default" -I "../src/packs/ATSAMV71Q21B_DFP" ${PACK_COMMON_OPTIONS} -Os -ffunction-sections -mlong-calls -Wall -MP -MMD -MF "${OBJECTDIR}/_ext/1171490990/libc_syscalls.o.d" -o ${OBJECTDIR}/_ext/1171490990/libc_syscalls.o ../src/config/default/libc_syscalls.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD)
-${OBJECTDIR}/_ext/1171490990/tasks.o: ../src/config/default/tasks.c .generated_files/flags/default/2c14e2077a532a7e48d8b9e6ece4bcc1d846a885 .generated_files/flags/default/da39a3ee5e6b4b0d3255bfef95601890afd80709
+${OBJECTDIR}/_ext/1171490990/tasks.o: ../src/config/default/tasks.c .generated_files/flags/default/5b2cb169af4985703c0b60e8bbbe4e4a4821595c .generated_files/flags/default/49b7bfe10dcf6079d79f4fef45d6fc682c6e5b92
@${MKDIR} "${OBJECTDIR}/_ext/1171490990"
@${RM} ${OBJECTDIR}/_ext/1171490990/tasks.o.d
@${RM} ${OBJECTDIR}/_ext/1171490990/tasks.o
${MP_CC} $(MP_EXTRA_CC_PRE) -mcpu=cortex-m7 -x c -c -D__$(MP_PROCESSOR_OPTION)__ -mthumb -I "../src" -I "../src/config/default" -I "../src/packs/ATSAMV71Q21B_DFP" ${PACK_COMMON_OPTIONS} -Os -ffunction-sections -mlong-calls -Wall -MP -MMD -MF "${OBJECTDIR}/_ext/1171490990/tasks.o.d" -o ${OBJECTDIR}/_ext/1171490990/tasks.o ../src/config/default/tasks.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD)
-${OBJECTDIR}/_ext/1171490990/startup_gcc.o: ../src/config/default/startup_gcc.c .generated_files/flags/default/4b01e0bd5cf781f8c735f57c765ce28514c5f079 .generated_files/flags/default/da39a3ee5e6b4b0d3255bfef95601890afd80709
+${OBJECTDIR}/_ext/1171490990/startup_gcc.o: ../src/config/default/startup_gcc.c .generated_files/flags/default/8a36da1eceb5a6441f31f2081bb689c8b376572a .generated_files/flags/default/49b7bfe10dcf6079d79f4fef45d6fc682c6e5b92
@${MKDIR} "${OBJECTDIR}/_ext/1171490990"
@${RM} ${OBJECTDIR}/_ext/1171490990/startup_gcc.o.d
@${RM} ${OBJECTDIR}/_ext/1171490990/startup_gcc.o
${MP_CC} $(MP_EXTRA_CC_PRE) -mcpu=cortex-m7 -x c -c -D__$(MP_PROCESSOR_OPTION)__ -mthumb -I "../src" -I "../src/config/default" -I "../src/packs/ATSAMV71Q21B_DFP" ${PACK_COMMON_OPTIONS} -Os -ffunction-sections -mlong-calls -Wall -MP -MMD -MF "${OBJECTDIR}/_ext/1171490990/startup_gcc.o.d" -o ${OBJECTDIR}/_ext/1171490990/startup_gcc.o ../src/config/default/startup_gcc.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD)
-${OBJECTDIR}/_ext/1171490990/startup_xc32.o: ../src/config/default/startup_xc32.c .generated_files/flags/default/55abd96ece1393b68ecd10b455ee9d098bcbba72 .generated_files/flags/default/da39a3ee5e6b4b0d3255bfef95601890afd80709
+${OBJECTDIR}/_ext/1171490990/startup_xc32.o: ../src/config/default/startup_xc32.c .generated_files/flags/default/fd4931703a9feaac59a8f1d8c7faf62e98fd3456 .generated_files/flags/default/49b7bfe10dcf6079d79f4fef45d6fc682c6e5b92
@${MKDIR} "${OBJECTDIR}/_ext/1171490990"
@${RM} ${OBJECTDIR}/_ext/1171490990/startup_xc32.o.d
@${RM} ${OBJECTDIR}/_ext/1171490990/startup_xc32.o
${MP_CC} $(MP_EXTRA_CC_PRE) -mcpu=cortex-m7 -x c -c -D__$(MP_PROCESSOR_OPTION)__ -mthumb -I "../src" -I "../src/config/default" -I "../src/packs/ATSAMV71Q21B_DFP" ${PACK_COMMON_OPTIONS} -Os -ffunction-sections -mlong-calls -Wall -MP -MMD -MF "${OBJECTDIR}/_ext/1171490990/startup_xc32.o.d" -o ${OBJECTDIR}/_ext/1171490990/startup_xc32.o ../src/config/default/startup_xc32.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD)
-${OBJECTDIR}/_ext/1360937237/main.o: ../src/main.c .generated_files/flags/default/9656e3365c1c01b072d7b477ef01ff4ed68999e2 .generated_files/flags/default/da39a3ee5e6b4b0d3255bfef95601890afd80709
+${OBJECTDIR}/_ext/1360937237/main.o: ../src/main.c .generated_files/flags/default/8494f00e0a31fa354a6adfabc17f227a7b7bc1e .generated_files/flags/default/49b7bfe10dcf6079d79f4fef45d6fc682c6e5b92
@${MKDIR} "${OBJECTDIR}/_ext/1360937237"
@${RM} ${OBJECTDIR}/_ext/1360937237/main.o.d
@${RM} ${OBJECTDIR}/_ext/1360937237/main.o
${MP_CC} $(MP_EXTRA_CC_PRE) -mcpu=cortex-m7 -x c -c -D__$(MP_PROCESSOR_OPTION)__ -mthumb -I "../src" -I "../src/config/default" -I "../src/packs/ATSAMV71Q21B_DFP" ${PACK_COMMON_OPTIONS} -Os -ffunction-sections -mlong-calls -Wall -MP -MMD -MF "${OBJECTDIR}/_ext/1360937237/main.o.d" -o ${OBJECTDIR}/_ext/1360937237/main.o ../src/main.c -DXPRJ_default=$(CND_CONF) $(COMPARISON_BUILD)
-${OBJECTDIR}/_ext/1360937237/app.o: ../src/app.c .generated_files/flags/default/946eed79f95dee9af452b30ce57d4b7326a7d305 .generated_files/flags/default/da39a3ee5e6b4b0d3255bfef95601890afd80709
+${OBJECTDIR}/_ext/1360937237/app.o: ../src/app.c .generated_files/flags/default/bf7e83f4aa5b44cd64bff53d22b5e83eeecb1db6 .generated_files/flags/default/49b7bfe10dcf6079d79f4fef45d6fc682c6e5b92
@${MKDIR} "${OBJECTDIR}/_ext/1360937237"
@${RM} ${OBJECTDIR}/_ext/1360937237/app.o.d
@${RM} ${OBJECTDIR}/_ext/1360937237/app.o
diff --git a/AutoGenerated.X/nbproject/Makefile-local-default.mk b/AutoGenerated.X/nbproject/Makefile-local-default.mk
index 8bd3cfc..51862f4 100644
--- a/AutoGenerated.X/nbproject/Makefile-local-default.mk
+++ b/AutoGenerated.X/nbproject/Makefile-local-default.mk
@@ -14,11 +14,11 @@
# You can invoke make with the values of the macros:
# $ makeMP_CC="/opt/microchip/mplabc30/v3.30c/bin/pic30-gcc" ...
#
-PATH_TO_IDE_BIN=/opt/microchip/mplabx/v6.05/mplab_platform/platform/../mplab_ide/modules/../../bin/
+PATH_TO_IDE_BIN=/opt/microchip/mplabx/v6.00/mplab_platform/platform/../mplab_ide/modules/../../bin/
# Adding MPLAB X bin directory to path.
-PATH:=/opt/microchip/mplabx/v6.05/mplab_platform/platform/../mplab_ide/modules/../../bin/:$(PATH)
+PATH:=/opt/microchip/mplabx/v6.00/mplab_platform/platform/../mplab_ide/modules/../../bin/:$(PATH)
# Path to java used to run MPLAB X when this makefile was created
-MP_JAVA_PATH="/opt/microchip/mplabx/v6.05/sys/java/zulu8.64.0.19-ca-fx-jre8.0.345-linux_x64/bin/"
+MP_JAVA_PATH="/opt/microchip/mplabx/v6.00/sys/java/zulu8.54.0.21-ca-fx-jre8.0.292-linux_x64/bin/"
OS_CURRENT="$(shell uname -s)"
MP_CC="/usr/bin/arm-none-eabi-gcc"
MP_CPPC="/usr/bin/arm-none-eabi-g++"
@@ -26,12 +26,12 @@ MP_CPPC="/usr/bin/arm-none-eabi-g++"
MP_AS="/usr/bin/arm-none-eabi-as"
MP_LD="/usr/bin/arm-none-eabi-ld"
MP_AR="/usr/bin/arm-none-eabi-ar"
-DEP_GEN=${MP_JAVA_PATH}java -jar "/opt/microchip/mplabx/v6.05/mplab_platform/platform/../mplab_ide/modules/../../bin/extractobjectdependencies.jar"
+DEP_GEN=${MP_JAVA_PATH}java -jar "/opt/microchip/mplabx/v6.00/mplab_platform/platform/../mplab_ide/modules/../../bin/extractobjectdependencies.jar"
MP_CC_DIR="/usr/bin"
MP_CPPC_DIR="/usr/bin"
# MP_BC_DIR is not defined
MP_AS_DIR="/usr/bin"
MP_LD_DIR="/usr/bin"
MP_AR_DIR="/usr/bin"
-DFP_DIR=/opt/microchip/mplabx/v6.05/packs/Microchip/SAMV71_DFP/4.9.117
-CMSIS_DIR=/opt/microchip/mplabx/v6.05/packs/arm/CMSIS/5.4.0
+# MP_BC_DIR is not defined
+CMSIS_DIR=/opt/microchip/mplabx/v6.00/packs/arm/CMSIS/5.4.0
diff --git a/AutoGenerated.X/nbproject/configurations.xml b/AutoGenerated.X/nbproject/configurations.xml
index 8ffe43e..1d3a67a 100644
--- a/AutoGenerated.X/nbproject/configurations.xml
+++ b/AutoGenerated.X/nbproject/configurations.xml
@@ -320,23 +320,23 @@
displayName="Important Files"
projectFiles="false">
- ../src/config/default/default.mhc/settings.yml
../src/config/default/default.mhc/HarmonyCore.yml
- ../src/config/default/default.mhc/afec0.yml
- ../src/config/default/default.mhc/cmsis.yml
- ../src/config/default/default.mhc/smc.yml
+ ../src/config/default/default.mhc/project.yml
+ ../src/config/default/default.mhc/GraphSettings.yml
+ ../src/config/default/default.mhc/uart0.yml
+ ../src/config/default/default.mhc/core.yml
../src/config/default/default.mhc/mcan1.yml
- ../src/config/default/default.mhc/efc.yml
+ ../src/config/default/default.mhc/dfp.yml
../src/config/default/default.mhc/sys_time.yml
+ ../src/config/default/default.mhc/afec0.yml
../src/config/default/default.mhc/rtc.yml
+ ../src/config/default/default.mhc/settings.yml
+ ../src/config/default/default.mhc/twihs1.yml
+ ../src/config/default/default.mhc/efc.yml
+ ../src/config/default/default.mhc/smc.yml
../src/config/default/default.mhc/pwm0.yml
- ../src/config/default/default.mhc/core.yml
- ../src/config/default/default.mhc/uart0.yml
- ../src/config/default/default.mhc/GraphSettings.yml
../src/config/default/default.mhc/mcan0.yml
- ../src/config/default/default.mhc/twihs1.yml
- ../src/config/default/default.mhc/dfp.yml
- ../src/config/default/default.mhc/project.yml
+ ../src/config/default/default.mhc/cmsis.yml
Makefile
../src/config/default/harmony-manifest-success.yml
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 19e81c0..c6729ae 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -13,9 +13,10 @@ find_package(ecss-services CONFIG REQUIRED COMPONENTS common)
include_directories(.)
include_directories(inc)
-include_directories(inc/Platform)
include_directories(inc/FreeRTOSTasks)
+include_directories(inc/Platform)
include_directories(inc/Platform/Parameters)
+include_directories(inc/Platform/CAN)
include_directories(inc/Helpers)
include_directories(src)
include_directories(src/config)
@@ -65,8 +66,9 @@ include_directories(lib/atsam-component-drivers/SMC/inc)
include_directories(lib/atsam-component-drivers/MRAM/inc)
include_directories(lib/atsam-component-drivers/LCL/inc)
include_directories(lib/atsam-component-drivers/NANDFlash/inc)
-include_directories(lib/cross-platform-software)
-add_subdirectory(lib/cross-platform-software)
+include_directories(lib/atsam-component-drivers/NANDFlash/MT29F_Nand_Driver_Micron)
+include_directories(lib/atsam-component-drivers/NANDFlash/src)
+include_directories(lib/cobs-c)
file(GLOB_RECURSE DRIVER_SOURCES "lib/atsam-component-drivers/MCP9808/*.cpp" "lib/atsam-component-drivers/LCL/*.cpp"
"lib/atsam-component-drivers/NANDFlash/*.cpp")
@@ -74,9 +76,9 @@ file(GLOB_RECURSE SOURCES "src/*.c" "src/*.cpp" "lib/SEGGER/RTT/*.c" "AutoGenera
file(GLOB_RECURSE FREERTOS_SOURCES "lib/FreeRTOS/*.c")
file(GLOB_RECURSE EXTRA_SOURCES "lib/cobs-c/cobs.c" "lib/cobs-c/cobsr.c")
-add_executable(${PROJECT_NAME}.elf ${SOURCES} ${LINKER_SCRIPT} ${FREERTOS_SOURCES} ${DRIVER_SOURCES})
+add_executable(${PROJECT_NAME}.elf ${SOURCES} ${LINKER_SCRIPT} ${FREERTOS_SOURCES} ${DRIVER_SOURCES} ${EXTRA_SOURCES})
-target_link_libraries(${PROJECT_NAME}.elf PRIVATE common common_cross etl log_common)
+target_link_libraries(${PROJECT_NAME}.elf PRIVATE common etl log_common)
set(CMAKE_EXE_LINKER_FLAGS
"${CMAKE_EXE_LINKER_FLAGS_INIT} -Wl,-Map=${PROJECT_BINARY_DIR}/${PROJECT_NAME}.map")
diff --git a/README.md b/README.md
index 31a2a67..6f4c2e0 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,6 @@
-# OBC Software Repository
+# OBC Software EQM Repository
-In this repository is where all of the OBC Software is housed. This is the final version that will be used on the satellite.
+In this repository is where all of the OBC EQM Software is housed. This is the final version that will be used on the satellite.
The software runs on the Microchip ATSAMV71Q21B Microcontroller Unit, which is a 32-bit ARM Cortex-M7 core.
We use FreeRTOS to handle the tasking of the MCU.
More information regarding OBC can be found [here](https://gitlab.com/groups/acubesat/obc/-/wikis/home).
@@ -8,42 +8,68 @@ More information regarding OBC can be found [here](https://gitlab.com/groups/acu
There is the `env-tests` branch that contains the test code, to be used in the Environmental Tests campaign.
## Build
+The `eqm` repository can be built without any access to specialised hardware. We provide build
+instructions for Linux (or WSL) command-line, and the CLion IDE.
+
+The dependencies of this repository are managed through the [conan](https://conan.io/) package manager, with repositories
+from [ConanCenter](https://conan.io/center/) and [SpaceDot's packages](https://artifactory.spacedot.gr).
+
+For more detailed installation instructions, including how to integrate with a microcontroller, visit the
+[corresponding documentation page](https://acubesat.gitlab.io/obc/ecss-services/docs/md_docs_installation.html).
+
+### From the Command Line (CLI)
+
+1. Install a modern C++ compiler, CMake, and Conan.
+ CMake >= 3.23 and Conan >= 2.0 are recommended.
+
+ Getting conan
+
+ You can install [conan](https://conan.io/) following the instructions [from here](https://docs.conan.io/2/installation.html).
+
+2. Clone the repository and enter the directory:
+ ```shell
+ git clone git@gitlab.com:acubesat/obc/environmental-campaign/obc-eqm-software.git
+ cd obc-eqm-software
+ ```
+3. (If you haven't already) create a conan profile for your system:
+ ```shell
+ conan profile detect
+ ```
+4. (If you haven't already) add the SpaceDot repository to conan:
+ ```shell
+ conan remote add spacedot https://artifactory.spacedot.gr/artifactory/api/conan/conan
+ ```
+5. Download all dependencies and build the project through conan:
+ ```shell
+ conan install . --output-folder=cmake-build-debug --build="*" -u -pr conan-arm-profile
+ ```
+6. Download all submodules:
+ ```shell
+ conan source .
+ ```
+7. Add CMake flags:
+ ```shell
+ cmake -B cmake-build-debug/build/Debug -DCMAKE_TOOLCHAIN_FILE=cmake-build-debug/build/Debug/generators/conan_toolchain.cmake -DCMAKE_CXX_COMPILER="/usr/bin/arm-none-eabi-g++" -DCMAKE_C_COMPILER="/usr/bin/arm-none-eabi-gcc" -DCMAKE_BUILD_TYPE=Debug .
+ ```
+8. Build the project:
+ ```shell
+ cd cmake-build-debug/build/Debug
+ make
+ ```
+### From CLion
+
+CLion will automatically try to set up a CMake project for you. However, without the conan packages installed, this
+will quickly fail. Follow these steps to set up the conan project:
+
+1. Follow steps 1-6 from the CLI instructions above.
+2. Add the following to the CMake Options (File -> Settings -> Build, Execution, Deployment -> CMake -> CMake Options):
+ ```
+ -DCMAKE_TOOLCHAIN_FILE=cmake-build-debug/build/Debug/generators/conan_toolchain.cmake -DCMAKE_CXX_COMPILER="/usr/bin/arm-none-eabi-g++" -DCMAKE_C_COMPILER="/usr/bin/arm-none-eabi-gcc"
+ ```
+3. If your CMake project doesn't reload automatically, reload it manually (Tools -> CMake -> Reload CMake Project).
+
+We do not recommend using a Conan plugin for your IDE, as it may tamper with the default configuration for this repository.
-After cloning the repo, run the command `conan source .` to clone the needed repositories, which currently are:
-- [cross-platform-software](https://gitlab.com/acubesat/obc/cross-platform-software)
-- [atsam-component-drivers](https://gitlab.com/acubesat/obc/atsam-component-drivers)
- If cloning `COBS` throws a permission/access error, setup an SSH key in GitHub to fix it.
-
-If you're using CLion, you need to add in CMake options (File -> Settings -> Build, Execution, Deployment -> CMake ->
-CMake Options) this `-DCMAKE_TOOLCHAIN_FILE=cmake-build-debug/build/Debug/generators/conan_toolchain.cmake -DCMAKE_CXX_COMPILER="/usr/bin/arm-none-eabi-g++" -DCMAKE_C_COMPILER="/usr/bin/arm-none-eabi-gcc"`.
-
-If you just cmake from cli, just add the same flags in your command.
-
-To be able to build, however, you need to install the required `conan` packages. See the `Conan` section for more info.
-
-### Conan
-This repository uses [conan 2.0](https://conan.io/) to manage dependencies.
-
-#### AcubeSAT Conan Packages
-Some of the Conan packages ([logger](https://gitlab.com/acubesat/obc/logger) and [ecss-services](https://gitlab.com/acubesat/obc/ecss-services)) are hosted on a private repository, so you
-need to either:
-- have access to the [repository](https://artifactory.spacedot.gr) (if you're already on GitLab, it's the same
- credentials, and you should login at least once) and add the
- remote to your conan remotes. To do that run the following two commands
- `conan remote add conan https://artifactory.spacedot.gr/artifactory/api/conan/conan` and
- `conan remote login conan $YOUR_USERNAME`, which will prompt you to add your password.
-- or, clone the repo on your own, and package it locally use `conan create . --build=missing` in the root of the repo. This way, you don't need to add the remote repository, as conan will add it in local cache.
-- or, clone the repo on your own and add it as a submodule in the `lib` folder, and make the necessary CMakeLists.
- txt changes to include it in the build.
-
-To install the necessary packages, you need to follow these steps:
-- Make sure you performed one of the `AcubeSAT Conan Packages` sections teps
-- Run `conan profile detect --force`: Generates default profile detecting GCC. However, for this project, you need to set up
- the correct architecture. Find where `conan` sets up profiles (probably `~/.conan2/profiles`) and run `cp conan-arm-profile ~/.conan2/profiles` (or another directory if conan2 stores the profiles elsewhere) in this project's folder.
-- Then run `conan install . --output-folder=cmake-build-debug --build="*" -u -pr conan-arm-profile`. If you're using CLion and don't see `cmake-build-debug`, you have to `Reload CMake project` to have it generated.
- After you've run `conan install...` you can `Reload CMake project` and build as per usual.
-- Make sure you followed the steps under the `Build` section
-- If the *Imported target "common" included non-existent path* appears, just delete the `cmake-build-debug` folder and redo the `conan install...` command
Getting conan
@@ -52,7 +78,6 @@ You can install [conan](https://conan.io/) following the instructions from
[here](https://docs.conan.io/2/installation.html).:
-
## Implemented Software
Prototypes of ECSS Services
@@ -69,7 +94,57 @@ Peripherals:
- UART with DMA
- Parameter updating of ST[20]
-## Note
+## Using Minicom to monitor the U(S)ART of ATSAM
+
+#### Downloading Minicom
+
+`minicom` is found in almost all package managers for Linux and macOS. For Linux you can use:
+
+For Pop/Ubuntu/Debian derivatives
+```shell
+sudo apt install minicom
+```
+
+For Fedora
+```shell
+sudo dnf install minicom
+```
+
+For Arch
+```shell
+sudo pacman -S minicom
+```
+
+#### Running minicom
+
+`minicom` is a program that displays the serial input of a port on your computer. To run it, you must specify such a port.
+
+On Linux systems, the serial ports for connected embedded devices are `/dev/ttyACMX`, where X is a number. The first device you connect will start at 0, and each new device increases the number by 1. Note that removing a device "frees" the port, so if you have two devices connnected and you remove the first, `/dev/ttyACM0` will be disconnected while `/dev/ttyACM1` will be connected to the remaining target device. When using `UART-to-USB` devices such as an `FTDI`, the naming scheme changes and the devices will be at `/dev/ttyUSBX`, however the above scheme remains the same.
+
+You can use the command `ls /dev/ttyACM*` to view all connected devices on the `/dev/ttyACMX` spectrum.
+If a device is connected to port `/dev/ttyACM0`, you can use:
+```shell
+minicom -D /dev/ttyACM0
+```
+to get its ouput.
+
+#### Using minicom
+
+All actions inside the program require pressing the `Meta` key first. If you want to exit the program, you need to press `Meta`, then `x`. On Linux the `Meta` key is `CTRL+A`, while on macOS it is `Escape`. You can use `Meta`, then `z` to view a list of shortcuts.
+
+#### Line Feeds
+
+Our embedded devices send only a `\n` delimiter on the end of each log message. Thus, when you open the `minicom` instance, you will see that each line starts at the end of the previous line. After a couple of log messages, the new lines will start at the right edge of the screen and the messages will be invisible. To control this, you can press `Meta`, then `u` to toggle interpreting `\n` as `\r\n`. Each new message will now start at the beginning of the next line.
+
+#### Saving output to file
+
+In case you need to save the output of a session to a file, use the option `-C filename.txt` when opening the program. For example:
+```shell
+minicom -D /dev/ttyACM0 -C output.txt
+```
+will save the logs to the file `output.txt` in your current directory.
+
+## Watchdog
The internal watchdog has been disabled for debugging reasons.
diff --git a/atmel_samv71_xplained_ultra.cfg b/atmel_samv71_xplained_ultra.cfg
index b3cba41..a7dfadc 100644
--- a/atmel_samv71_xplained_ultra.cfg
+++ b/atmel_samv71_xplained_ultra.cfg
@@ -1,5 +1,4 @@
set CHIPNAME samv71
source [find interface/stlink.cfg]
-source [find target/atsamv.cfg]
-
+source [find target/atsamv.cfg]
\ No newline at end of file
diff --git a/conanfile.py b/conanfile.py
index b2f0532..6aea802 100644
--- a/conanfile.py
+++ b/conanfile.py
@@ -8,16 +8,16 @@
class EQMSoftwareRecipe(ConanFile):
- name = "obc-adcs-eqm-sw"
+ name = "obc-eqm-sw"
version = "1.0"
revision_mode = "scm"
# Optional metadata
license = "MIT"
author = "SpaceDot - AcubeSAT, acubesat.obc@spacedot.gr"
- url = "https://gitlab.com/acubesat/obc/environmental-campaign/obc-eqm-software/"
- description = "EQM Software for OBC-ADCS campaign test"
- topics = ("satellite", "acubesat", "obc", "obc-software")
+ url = "https://github.com/PeakSat/OBC-EQM-Software"
+ description = "EQM Software for OBCcampaign test"
+ topics = ("satellite", "peaksat", "obc", "obc-software")
# Binary configuration
settings = "os", "compiler", "build_type", "arch"
@@ -34,12 +34,10 @@ def config_options(self):
def source(self):
git = Git(self)
- git.clone(url="git@gitlab.com:acubesat/obc/cross-platform-software.git", target=join(str(self.source_folder), "lib/cross-platform-software"))
- self.run("cd lib/cross-platform-software && git submodule update --init --recursive")
- self.run("cd lib/cross-platform-software && git checkout campaign-obc")
+ git.clone(url="git@github.com:cmcqueen/cobs-c.git", target=join(str(self.source_folder), "lib/cobs-c"))
git = Git(self)
git.clone(url="git@gitlab.com:acubesat/obc/atsam-component-drivers.git", target=join(str(self.source_folder), "lib/atsam-component-drivers"))
- self.run("cd lib/atsam-component-drivers && git checkout NAND-implementation")
+ self.run("cd lib/atsam-component-drivers && git checkout NAND-partial-implementation")
def layout(self):
cmake_layout(self)
diff --git a/inc/FreeRTOSTasks/AmbientTemperatureTask.hpp b/inc/FreeRTOSTasks/AmbientTemperatureTask.hpp
new file mode 100644
index 0000000..3e57237
--- /dev/null
+++ b/inc/FreeRTOSTasks/AmbientTemperatureTask.hpp
@@ -0,0 +1,53 @@
+#pragma once
+
+#include "Task.hpp"
+#include "MCP9808.hpp"
+
+/**
+ * FreeRTOS task for periodically printing the value of the MCP9808 external temperature sensor.
+ */
+class AmbientTemperatureTask : public Task {
+private:
+ const uint16_t DelayMs = 1000;
+
+ /**
+ * Number of sensors on the PCB
+ */
+ static inline constexpr uint8_t NumberOfTemperatureSensors = 2;
+
+ /**
+ * The I2C addresses of the sensors based on the pin configuration of the physical devices
+ */
+ inline static constexpr etl::array
+ SensorI2CAddress = {0, 1};
+
+ /**
+ * The driver for the MCP9808 temperature sensor
+ */
+ etl::array sensors = {MCP9808(SensorI2CAddress[0]),
+ MCP9808(SensorI2CAddress[1])};
+
+ /**
+ * The value of the temperature, measured in Celsius
+ */
+ etl::array ambientTemperature = {0, 0};
+
+ const static inline uint16_t TaskStackDepth = 2000;
+
+ StackType_t taskStack[TaskStackDepth];
+
+public:
+ void execute();
+
+ AmbientTemperatureTask() : Task("ExternalTemperatureSensors") {}
+
+ void createTask() {
+ taskHandle = xTaskCreateStatic(vClassTask < AmbientTemperatureTask > , this->TaskName,
+ AmbientTemperatureTask::TaskStackDepth, this,
+ tskIDLE_PRIORITY + 2, this->taskStack,
+ &(this->taskBuffer));
+ }
+
+};
+
+inline std::optional ambientTemperatureTask;
diff --git a/inc/FreeRTOSTasks/CANGatekeeperTask.hpp b/inc/FreeRTOSTasks/CANGatekeeperTask.hpp
new file mode 100644
index 0000000..ad1fbe6
--- /dev/null
+++ b/inc/FreeRTOSTasks/CANGatekeeperTask.hpp
@@ -0,0 +1,158 @@
+#pragma once
+
+#include "CAN/ApplicationLayer.hpp"
+#include "CAN/Frame.hpp"
+#include "Task.hpp"
+#include "queue.h"
+#include "Peripheral_Definitions.hpp"
+#ifdef OBC_EQM_LCL
+#include "LCLDefinitions.hpp"
+#endif
+
+/**
+ * Contains functionality of a Gatekeeper Task for the CAN Bus. It has the sole access to CAN, to avoid any
+ * deadlocks that might be caused by simultaneous requests of access to the same resource. It works by having anyone
+ * needing to access CAN, send the data in a queue. Then this task receives queue elements and sends them via CAN.
+ *
+ * @example @code
+ * uint32_t id = 0x4; // Specify the sending Node ID.
+ * etl::vector data = {0,1,2,3,4,5,6,7}; // Specify an array of data, up to 64 bytes.
+ * CAN::Frame message = {id, data}; // Create a CAN::Frame object.
+ * canGatekeeperTask->addToQueue(message); // Add the message to the outgoing queue.
+ * @endcode
+ */
+class CANGatekeeperTask : public Task {
+private:
+ /**
+ * A freeRTOS queue to handle outgoing messages, to keep order in case tasks interrupt each other.
+ */
+ QueueHandle_t outgoingQueue;
+
+ /**
+ * The variable used to hold the queue's data structure.
+ */
+ static inline StaticQueue_t outgoingQueueBuffer;
+
+ /**
+ * Storage area given to freeRTOS to manage the queue items.
+ */
+ static inline uint8_t outgoingQueueStorageArea[CAN::FrameQueueSize * sizeof(CAN::Frame)];
+
+ /**
+ * A freeRTOS queue to handle incoming frames part of a CAN-TP message, since they need to be parsed as a whole.
+ */
+ QueueHandle_t incomingQueue;
+
+ /**
+ * The variable used to hold the queue's data structure.
+ */
+ static inline StaticQueue_t incomingQueueBuffer;
+
+ /**
+ * Storage area given to freeRTOS to manage the queue items.
+ */
+ static inline uint8_t incomingQueueStorageArea[CAN::FrameQueueSize * sizeof(CAN::Frame)];
+
+ const static inline uint16_t TaskStackDepth = 1300;
+
+ StackType_t taskStack[TaskStackDepth];
+
+public:
+ TickType_t lastTransmissionTime = 0;
+
+ void execute();
+
+ /**
+ * The constructor calls the initialize() function of the CAN::Driver. It also initializes the FreeRTOS queues for
+ * incoming/outgoing messages.
+ */
+ CANGatekeeperTask();
+
+ /**
+ * Adds an CAN::Frame to the CAN Gatekeeper's queue.
+ *
+ * This function was added as an extra abstraction layer to house the `xQueueSendToBack` function.
+ * It can be used from anywhere in the code to get access to the CAN queue/CAN Gatekeeper task, without having to
+ * know the low level details of the queue.
+ *
+ * If the queue is full, the message is not added to the queue and an error is logged.
+ *
+ * @param message the CAN::Frame to be added in the queue of the CAN Gatekeeper task.
+ * @param isISR indicating if the message is a response to another CAN Message, thus composed through an ISR
+ */
+ inline void send(const CAN::Frame &message, bool isISR = false) {
+ BaseType_t status;
+
+ if (isISR) {
+ BaseType_t taskShouldYield = pdFALSE;
+
+ status = xQueueSendToBackFromISR(outgoingQueue, &message, &taskShouldYield);
+
+ if (taskShouldYield) {
+ taskYIELD();
+ }
+ } else {
+ status = xQueueSendToBack(outgoingQueue, &message, 0);
+ }
+
+ if (status == errQUEUE_FULL) {
+ LOG_ERROR << "Tried sending CAN Message while outgoing queue is full!";
+ }
+ }
+
+ /**
+ * Adds a CAN::Frame to the incomingQueue.
+ * If the queue is full the message is lost.
+ *
+ * @note This function is designed to be used from within the ISR of a CAN Message Receipt. Thus, it uses
+ * freeRTOS's ISR-Specific functions.
+ *
+ * @param message The incoming CAN::Frame.
+ */
+ inline void addToIncoming(const CAN::Frame &message) {
+ BaseType_t taskShouldYield = pdFALSE;
+
+ xQueueSendToBackFromISR(incomingQueue, &message, &taskShouldYield);
+
+ if (taskShouldYield) {
+ taskYIELD();
+ }
+ }
+
+ /**
+ * An abstraction layer over the freeRTOS queue API to get the number of messages in the incoming queue.
+ * @return The number of messages in the queue.
+ */
+ inline uint8_t getIncomingMessagesCount() {
+ return uxQueueMessagesWaiting(incomingQueue);
+ }
+
+ /**
+ * Receives a CAN::Frame from the CAN Gatekeeper's incoming queue.
+ *
+ * This function was added as an extra abstraction layer to house the `xQueueReceive` function.
+ * It can be used from anywhere in the code to get access to the CAN queue/CAN Gatekeeper task, without having to
+ * know the low level details of the queue.
+ *
+ * If the queue is empty, the returned message is empty.
+ */
+ inline CAN::Frame getFromQueue() {
+ CAN::Frame message;
+ xQueueReceive(incomingQueue, &message, 0);
+ return message;
+ }
+
+ /**
+ * Deletes all items present in the incoming queue.
+ */
+ void emptyIncomingQueue() {
+ xQueueReset(incomingQueue);
+ }
+
+ void createTask() {
+ xTaskCreateStatic(vClassTask < CANGatekeeperTask > , this->TaskName, CANGatekeeperTask::TaskStackDepth, this,
+ tskIDLE_PRIORITY + 2, this->taskStack, &(this->taskBuffer));
+ }
+};
+
+inline std::optional canGatekeeperTask;
diff --git a/inc/FreeRTOSTasks/CANTestTask.hpp b/inc/FreeRTOSTasks/CANTestTask.hpp
new file mode 100644
index 0000000..39d3f0d
--- /dev/null
+++ b/inc/FreeRTOSTasks/CANTestTask.hpp
@@ -0,0 +1,27 @@
+#pragma once
+
+#include "CAN/Driver.hpp"
+#include "Task.hpp"
+
+class CANTestTask : public Task {
+private:
+
+public:
+ const static inline uint16_t TaskStackDepth = 2300;
+
+ StackType_t taskStack[TaskStackDepth];
+
+ void execute();
+
+ CANTestTask() : Task("CAN Test") {}
+
+ /**
+ * Create freeRTOS Task
+ */
+ void createTask() {
+ xTaskCreateStatic(vClassTask < CANTestTask > , this->TaskName, CANTestTask::TaskStackDepth, this,
+ configMAX_PRIORITIES - 1, this->taskStack, &(this->taskBuffer));
+ }
+};
+
+inline std::optional canTestTask;
diff --git a/inc/FreeRTOSTasks/MCUTemperatureTask.hpp b/inc/FreeRTOSTasks/MCUTemperatureTask.hpp
new file mode 100644
index 0000000..5b1dcab
--- /dev/null
+++ b/inc/FreeRTOSTasks/MCUTemperatureTask.hpp
@@ -0,0 +1,28 @@
+#pragma once
+
+#include "Task.hpp"
+
+/**
+ * FreeRTOS task for periodically printing the value of the internal temperature sensor.
+ */
+class MCUTemperatureTask : public Task {
+private:
+ const uint16_t delayMs = 10000;
+
+ const static inline uint16_t TaskStackDepth = 1000;
+
+ StackType_t taskStack[TaskStackDepth];
+
+public:
+ void execute();
+
+ MCUTemperatureTask() : Task("MCUTemperatureSensor") {}
+
+ void createTask() {
+ xTaskCreateStatic(vClassTask, this->TaskName, MCUTemperatureTask::TaskStackDepth, this,
+ tskIDLE_PRIORITY + 2, this->taskStack, &(this->taskBuffer));
+ }
+
+};
+
+inline std::optional mcuTemperatureTask;
diff --git a/inc/FreeRTOSTasks/NANDTask.hpp b/inc/FreeRTOSTasks/NANDTask.hpp
index 9c4507b..d31db15 100644
--- a/inc/FreeRTOSTasks/NANDTask.hpp
+++ b/inc/FreeRTOSTasks/NANDTask.hpp
@@ -1,7 +1,7 @@
#pragma once
#include "Task.hpp"
-#include "NANDFlash.h"
+#include "NANDFlash.hpp"
class NANDTask : public Task {
diff --git a/inc/FreeRTOSTasks/Task.hpp b/inc/FreeRTOSTasks/Task.hpp
new file mode 100644
index 0000000..5c5a267
--- /dev/null
+++ b/inc/FreeRTOSTasks/Task.hpp
@@ -0,0 +1,54 @@
+#pragma once
+
+#include "FreeRTOS.h"
+#include "task.h"
+#include "ServicePool.hpp"
+#include "BootCounter.hpp"
+#include "definitions.h"
+#include "Logger.hpp"
+#include "AcubeSATParameters.hpp"
+#include "CommonParameters.hpp"
+#include "Definitions.hpp"
+
+/**
+ * Base class, whose method 'execute' is meant to be inherited by each and every individual FreeRTOS task.
+ */
+class Task {
+public:
+ /**
+ * taskBuffer parameter of each FreeRTOS task that holds the new task's data structures
+ */
+ StaticTask_t taskBuffer;
+
+ /**
+ * A native FreeRTOS task that calls the `->execute()` function of a C++ Task.
+ *
+ * Useful for converting between native C-style tasks, and tasks defined as C++ classes.
+ *
+ * @tparam T A class with an `execute()` function that represent the state of a FreeRTOS task
+ * @param pvParameters This argument is passed by FreeRTOS and should contain a pointer to the Task object
+ */
+ template
+ static void vClassTask(void *pvParameters) {
+ (static_cast(pvParameters))->execute();
+ }
+
+public:
+ /**
+ * Name of each task.
+ */
+ const char *TaskName;
+
+ /**
+ * Handle of each FreeRTOS task.
+ */
+ TaskHandle_t taskHandle;
+
+ /**
+ * The stack depth of each FreeRTOS task, defined as the number of words the stack can hold. For example, in an
+ * architecture with 4 byte stack, assigning 100 to the usStackDepth argument, will allocate 4x100=400 bytes.
+ */
+ const uint16_t TaskStackDepth = 1000;
+
+ Task(const char *TaskName) : TaskName(TaskName) {}
+};
diff --git a/inc/FreeRTOSTasks/TimeKeepingTask.hpp b/inc/FreeRTOSTasks/TimeKeepingTask.hpp
new file mode 100644
index 0000000..95d642c
--- /dev/null
+++ b/inc/FreeRTOSTasks/TimeKeepingTask.hpp
@@ -0,0 +1,47 @@
+#pragma once
+
+#include "Task.hpp"
+
+class TimeKeepingTask : public Task {
+private:
+ const uint16_t DelayMs = 1100;
+
+ const static inline uint16_t TaskStackDepth = 2000;
+
+ StackType_t taskStack[TaskStackDepth];
+
+public:
+ void execute();
+
+ /**
+ * Sets the year base, used to acquire the current time from a tm structure.
+ */
+ uint16_t yearBase = 1900;
+
+ /**
+ * This function sets the epoch time.
+ * @param dateTime is a tm struct witch keeps the time from MCU.
+ */
+ void setEpoch(tm &dateTime);
+
+ /**
+ * This function sets the AcubeSAT's time parameters using a tm struct.
+ * @param dateTime is a tm struct witch keeps the time from MCU.
+ */
+ void setTimePlatformParameters(tm &dateTime);
+
+ /**
+ * This function prints the on-board time.
+ */
+ void printOnBoardTime();
+
+ TimeKeepingTask() : Task("Timekeeping") {}
+
+ void createTask() {
+ xTaskCreateStatic(vClassTask, this->TaskName, TimeKeepingTask::TaskStackDepth, this,
+ tskIDLE_PRIORITY + 1, this->taskStack, &(this->taskBuffer));
+ }
+
+};
+
+inline std::optional timeKeepingTask;
diff --git a/inc/FreeRTOSTasks/UARTGatekeeperTask.hpp b/inc/FreeRTOSTasks/UARTGatekeeperTask.hpp
new file mode 100644
index 0000000..1ce6cf7
--- /dev/null
+++ b/inc/FreeRTOSTasks/UARTGatekeeperTask.hpp
@@ -0,0 +1,51 @@
+#pragma once
+
+#include "COBS.hpp"
+#include "Task.hpp"
+#include "queue.h"
+#include "Peripheral_Definitions.hpp"
+
+/**
+ * Contains functionality of a Gatekeeper Task for the UART resource. It has the sole access to UART, to avoid any
+ * deadlocks that might be caused by simultaneous requests of access to the same resource. It works by having anyone
+ * needing to access UART, send the data in a queue. Then, this task receives queue elements and sends them to UART.
+ */
+class UARTGatekeeperTask : public Task {
+private:
+ QueueHandle_t xUartQueue;
+
+ StaticQueue_t xStaticQueue;
+
+ uint8_t ucQueueStorageArea[UARTQueueSize * sizeof(etl::string)];
+
+ const static inline uint16_t TaskStackDepth = 2000;
+
+ StackType_t taskStack[TaskStackDepth];
+
+public:
+ void execute();
+
+ UARTGatekeeperTask();
+
+ /**
+ * Adds an etl::string to the UART Gatekeeper's queue.
+ *
+ * This function was added as an extra abstraction layer to house the `xQueueSendToBack` function.
+ * It can be used from anywhere in the code to get access to the UART queue/UART Gatekeeper task, without having to
+ * know the low level details of the queue.
+ *
+ * If the queue is full, the string is not added to the queue and is lost.
+ * @param message the etl::string to be added in the queue of the UART Gatekeeper task.
+ */
+ void addToQueue(const etl::string &message) {
+ xQueueSendToBack(xUartQueue, &message, 0);
+ }
+
+ void createTask() {
+ xTaskCreateStatic(vClassTask < UARTGatekeeperTask > , this->TaskName, UARTGatekeeperTask::TaskStackDepth, this,
+ tskIDLE_PRIORITY + 2, this->taskStack, &(this->taskBuffer));
+ }
+
+};
+
+inline std::optional uartGatekeeperTask;
diff --git a/inc/FreeRTOSTasks/WatchdogTask.hpp b/inc/FreeRTOSTasks/WatchdogTask.hpp
new file mode 100644
index 0000000..41afe75
--- /dev/null
+++ b/inc/FreeRTOSTasks/WatchdogTask.hpp
@@ -0,0 +1,32 @@
+#pragma once
+
+#include "Task.hpp"
+
+class WatchdogTask : public Task {
+private:
+ /**
+ * The delay in milliseconds between each watchdog reset. It is set to 14000ms, since the
+ * maximum timeout is 16000ms, so the timer needs to clear before the next reset.
+ * @see config/default/peripheral/wdt.c for the specific configuration.
+ * Do not change this value, without also modifying the value in Harmony configurator.
+ */
+ const uint16_t WatchdogWindow = 14000;
+
+ const static inline uint16_t TaskStackDepth = 1000;
+
+ StackType_t taskStack[TaskStackDepth];
+
+public:
+ void execute();
+
+ WatchdogTask() : Task("Watchdog") {}
+
+ void createTask() {
+ xTaskCreateStatic(vClassTask, this->TaskName, WatchdogTask::TaskStackDepth, this,
+ tskIDLE_PRIORITY, this->taskStack, &(this->taskBuffer));
+ }
+
+};
+
+inline std::optional watchdogTask;
+
diff --git a/inc/Helpers/COBS.hpp b/inc/Helpers/COBS.hpp
new file mode 100644
index 0000000..1493623
--- /dev/null
+++ b/inc/Helpers/COBS.hpp
@@ -0,0 +1,40 @@
+#pragma once
+
+#include
+#include "cobs.h"
+
+template
+etl::string COBSencode(const uint8_t* input, uint16_t length) {
+ char output[MaxLength];
+
+ auto cobsOutput = cobs_encode(output, MaxLength, input, length);
+
+ return { output, cobsOutput.out_len };
+}
+
+template
+etl::string COBSencode(const etl::string& input) {
+ char output[MaxLength];
+
+ auto cobsOutput = cobs_encode(output, MaxLength, input.data(), input.length());
+
+ return { output, cobsOutput.out_len };
+}
+
+template
+etl::string COBSdecode(const uint8_t* input, uint16_t length) {
+ char output[MaxLength];
+
+ auto cobsOutput = cobs_decode(output, MaxLength, input, length);
+
+ return { output, cobsOutput.out_len };
+}
+
+template
+etl::string COBSdecode(const etl::string& input) {
+ char output[MaxLength];
+
+ auto cobsOutput = cobs_decode(output, MaxLength, input.data(), input.length());
+
+ return { output, cobsOutput.out_len };
+}
diff --git a/inc/Helpers/FreeRTOSHandlers.hpp b/inc/Helpers/FreeRTOSHandlers.hpp
new file mode 100644
index 0000000..107e978
--- /dev/null
+++ b/inc/Helpers/FreeRTOSHandlers.hpp
@@ -0,0 +1,8 @@
+#pragma once
+
+#include "FreeRTOS.h"
+#include "Logger.hpp"
+
+extern "C" void vApplicationStackOverflowHook(TaskHandle_t xTask, char *pcTaskName) {
+ LOG_DEBUG << "Stack overflow on task " << pcTaskName;
+}
diff --git a/inc/Platform/CAN/ApplicationLayer.hpp b/inc/Platform/CAN/ApplicationLayer.hpp
new file mode 100644
index 0000000..0b33552
--- /dev/null
+++ b/inc/Platform/CAN/ApplicationLayer.hpp
@@ -0,0 +1,214 @@
+#pragma once
+
+#include "Driver.hpp"
+#include "etl/map.h"
+#include "etl/array.h"
+#include "etl/String.hpp"
+#include "Frame.hpp"
+#include "Logger_Definitions.hpp"
+#include "Message.hpp"
+#include "Peripheral_Definitions.hpp"
+#include "AcubeSATParameters.hpp"
+#include "TPMessage.hpp"
+#include "Definitions.hpp"
+
+namespace CAN::Application {
+ /**
+ * Entity that maps subsystem names to strings for use in logging functions.
+ */
+ inline etl::map, LogSource::NumberOfLogSources> nodeIdToString = {
+ {OBC, "OBC"},
+ {COMMS, "COMMS"},
+ {ADCS, "ADCS"},
+ {SU, "SU"},
+ {ExternalMCU, "External"}
+ };
+
+ /**
+ * CAN-TP message IDs, as specified in DDJF_OBDH.
+ */
+ enum MessageIDs : uint16_t {
+ SendParameters = 0x01,
+ RequestParameters = 0x02,
+ PerformFunction = 0x03,
+ EventReport = 0x10,
+ TMPacket = 0x20,
+ TCPacket = 0x21,
+ CCSDSPacket = 0x022,
+ Ping = 0x30,
+ Pong = 0x31,
+ LogMessage = 0x40,
+ UTCTime = 0x200,
+ BusSwitchover = 0x400,
+ Heartbeat = 0x700
+ };
+
+ /**
+ * Toggles the active CAN Bus.
+ * @param bus A default argument that uses the currentBus member variable if a value is not provided.
+ * @return The ID of the bus to be switched to.
+ */
+ CAN::Driver::ActiveBus switchBus(CAN::Driver::ActiveBus newBus);
+
+ /**
+ * The available Event Report Types, for an Event Report CAN-TP Message.
+ */
+ enum EventReportType : uint8_t {
+ Informative = 0x0, LowSeverity = 0x1, MediumSeverity = 0x2, HighSeverity = 0x3
+ };
+
+ /**
+ * The size in bytes for the function ID required in Perform Function Messages.
+ */
+ static constexpr uint8_t FunctionIdSize = 6;
+
+ /**
+ * Milliseconds per day.
+ */
+ inline constexpr uint64_t millisecondsPerDay = 24 * 60 * 60 * 1000;
+
+
+ /**
+ * Removes the ID of the sender in an incoming CAN Message.
+ * @param id The ID to be filtered.
+ * @return The filtered ID.
+ */
+ inline uint32_t filterMessageID(uint32_t id) {
+ return id & 0x700;
+ }
+
+ /**
+ * Adds a Ping message to the outgoing queue, according to DDJF_OBDH.
+ */
+ void sendPingMessage(NodeIDs destinationAddress, bool isMulticast);
+
+ /**
+ * Adds a Pong message to the outgoing queue, to be sent in response to a Ping message, according to DDJF_OBDH.
+ */
+ void sendPongMessage();
+
+ /**
+ * Adds a Heartbeat message to the outgoing queue, to be called periodically, according to DDJF_OBDH.
+ */
+ void sendHeartbeatMessage();
+
+ /**
+ * Creates a CAN Bus switchover message to be sent whenever the FDIR responsible determines the bus quality
+ * is not satisfactory, according to DDJF_OBDH.
+ */
+ void sendBusSwitchoverMessage();
+
+ /**
+ * Creates a CAN Bus switchover message to be sent whenever the FDIR responsible determines the bus quality
+ * is not satisfactory, according to DDJF_OBDH.
+ * @param newBus The Bus to switch to.
+ */
+ void sendBusSwitchoverMessage(Driver::ActiveBus newBus);
+
+ /**
+ * Adds a message to the outgoing queue with the current UTC Time, according to DDJF_OBDH.
+ */
+ void sendUTCTimeMessage();
+
+ /**
+ * Sends a Send Parameters CAN-TP Message as described in DDJF_OBDH.
+ * @param destinationAddress The ID of the destination node.
+ * @param isMulticast Whether the message is to be sent to a multicast group.
+ * @param parameterIDs The IDs of the parameters to be sent.
+ */
+ void createSendParametersMessage(NodeIDs destinationAddress, bool isMulticast,
+ const etl::array ¶meterIDs,
+ bool isISR);
+
+ /**
+ * Sends a Request Parameters CAN-TP Message as described in DDJF_OBDH.
+ * @param destinationAddress The ID of the destination node.
+ * @param isMulticast Whether the message is to be sent to a multicast group.
+ * @param parameterIDs The IDs of the parameters to be requested.
+ */
+ void createRequestParametersMessage(NodeIDs destinationAddress, bool isMulticast,
+ const etl::array ¶meterIDs,
+ bool isISR);
+
+ /**
+ * Sends a Request Parameters CAN-TP Message as described in DDJF_OBDH.
+ * @param destinationAddress The ID of the destination node.
+ * @param isMulticast Whether the message is to be sent to a multicast group.
+ * @param functionId The ID of the function to be called.
+ * @param arguments The map containing the arguments of the function to be called.
+ * @TODO This map should be changed to accommodate arguments of differing types, not just uint64_t
+ * */
+ void createPerformFunctionMessage(NodeIDs destinationAddress, bool isMulticast,
+ const etl::string &functionId,
+ const etl::map &arguments,
+ bool isISR);
+
+ /**
+ * Sends a Event Report CAN-TP Message as described in DDJF_OBDH.
+ * @param destinationAddress The ID of the destination node.
+ * @param isMulticast Whether the message is to be sent to a multicast group.
+ * @param type The event report type.
+ * @param eventID The ID of the event.
+ * @param payload An array of the event data.
+ */
+ void createEventReportMessage(NodeIDs destinationAddress, bool isMulticast, EventReportType type, uint16_t eventID,
+ const Message &eventData, bool isISR);
+
+ /**
+ * Creates an ECSS-E-ST-70-41C Services TM/TC packet to be sent. After creation the packet is split into CAN-TP
+ * Protocol frames to be transmitted.
+ * @param destinationAddress The ID of the destination node.
+ * @param isMulticast Whether the message is to be sent to a multicast group.
+ * @param message An ECSS Message.
+ */
+ void createPacketMessage(NodeIDs destinationAddress, bool isMulticast, const etl::string<128> &incomingMessage, Message::PacketType packetType, bool isISR);
+
+ /**
+ * Creates a CCSDS packet to be sent. After creation the packet is split into CAN-TP
+ * Protocol frames to be transmitted.
+ * @param destinationAddress The ID of the destination node.
+ * @param isMulticast Whether the message is to be sent to a multicast group.
+ * @param message An ECSS Message.
+ */
+ void
+ createCCSDSPacketMessage(NodeIDs destinationAddress, bool isMulticast, const Message &message, bool isISR);
+
+ /**
+ * Sends a Log CAN-TP Message as described in DDJF_OBDH.
+ * @param destinationAddress The ID of the destination node.
+ * @param isMulticast Whether the message is to be sent to a multicast group.
+ * @param log A LogEntry to be sent.
+ */
+ void createLogMessage(NodeIDs destinationAddress, bool isMulticast, const String &log,
+ bool isISR);
+
+ /**
+ * Parses an incoming non-TP frame for the appropriate response.
+ * @param message The incoming CAN::Frame.
+ */
+ void parseMessage(const CAN::Frame &message);
+
+ /**
+ * Parses an incoming Send Parameters Message and updates the according parameters
+ * @param message An incoming TPMessage
+ */
+ void parseSendParametersMessage(TPMessage &message);
+
+ /**
+ * Parses an incoming Request Parameters Message and sends the according parameters back, if they exist.
+ * @param message An incoming TPMessage
+ */
+ void parseRequestParametersMessage(TPMessage &message);
+
+ /**
+ * Parses an incoming TM Packet and logs it.
+ * @param message An incoming TMPacket
+ */
+ void parseTMMessage(TPMessage &message);
+
+ /**
+ * Parses an incoming TC Packet and executes it.
+ * @param message An incoming TCPacket
+ */
+ void parseTCMessage(TPMessage &message);
+}
diff --git a/inc/Platform/CAN/Driver.hpp b/inc/Platform/CAN/Driver.hpp
new file mode 100644
index 0000000..e92763c
--- /dev/null
+++ b/inc/Platform/CAN/Driver.hpp
@@ -0,0 +1,218 @@
+#ifndef OBC_SOFTWARE_CANDRIVER_H
+#define OBC_SOFTWARE_CANDRIVER_H
+
+#include
+#include "ECSS_Definitions.hpp"
+#include "Frame.hpp"
+#include "peripheral/mcan/plib_mcan1.h"
+#include "peripheral/mcan/plib_mcan0.h"
+
+namespace CAN {
+ /**
+ * A basic driver for the CAN Peripherals of the SAMV71 family of processors. This driver includes encoding/decoding
+ * functions for the Data Length Code as well as the ID when used in normal addressing mode. There are two interrupt
+ * callback functions, one for registering a transmission plus logging an error if needed, and one for passing the
+ * incoming CAN::Frames to the higher level services in the application. This driver handles both peripherals,
+ * while keeping only one active through a parameter for transmission, and disabling interrupts for receipt.
+ *
+ * @note CAN Normal Addressing requires the NodeID to be at most 11 bits long.
+ *
+ * @note There are two peripherals for the CAN Bus. The main bus is considered as MCAN1, since that is the one
+ * available on the development board.
+ *
+ * @example @code
+ * uint32_t id = 0x4; // Specify the sending Node ID.
+ * etl::vector data = {0,1,2,3,4,5,6,7}; // Specify an array of data, up to 64 bytes.
+ * CAN::Frame message = {id, data}; // Create a CAN::Frame object.
+ * CAN::Driver::send(message, Application::Main); // Use the included send function to send a message on the Main bus.
+ * @endcode
+ */
+ class Driver {
+ private:
+ /**
+ * Buffer that stores a message that is ready to be sent
+ */
+ static inline MCAN_TX_BUFFER txFifo;
+
+ /**
+ * Buffer that stores a received message that is to be processed.
+ * In this setup, rxFifo0 is used to store TP Messages that usually span across multiple CAN::Frames
+ */
+ static inline MCAN_RX_BUFFER rxFifo0;
+
+ /**
+ * Buffer that stores a received message that is to be processed.
+ * In this setup, rxFifo1 is used to store normal messages that are contained in a single CAN::Frame
+ */
+ static inline MCAN_RX_BUFFER rxFifo1;
+
+ public:
+ /**
+ * An area of memory the HAL uses to house incoming/outgoing buffers for the peripheral.
+ */
+ static inline uint8_t mcan0MessageRAM[MCAN0_MESSAGE_RAM_CONFIG_SIZE] __attribute__((aligned (32))) __attribute__((section (".ram_nocache")));
+
+ /**
+ * An area of memory the HAL uses to house incoming/outgoing buffers for the peripheral.
+ */
+ static inline uint8_t mcan1MessageRAM[MCAN1_MESSAGE_RAM_CONFIG_SIZE] __attribute__((aligned (32))) __attribute__((section (".ram_nocache")));
+
+ /**
+ * Possible states for the peripheral, to be used as arguments in the callback functions.
+ */
+ enum AppStates : uint8_t {
+ Receive, Transmit,
+ };
+
+ /**
+ * The available buses to use.
+ */
+ enum ActiveBus : uint8_t {
+ Redundant = 0x0, Main = 0x1
+ };
+
+ /**
+ * Sets the appropriate interrupt handlers, configures the storage area for incoming/outgoing buffers and
+ * keeps only a single peripheral's interrupts active.
+ */
+ static void initialize();
+
+ /**
+ * Logs a successful CAN Bus transmission.
+ * It is registered as a callback to be automatically called by Microchip's HAL whenever
+ * there is a message transmission on TX FIFO.
+ *
+ * @param context The state of the peripheral when the function is called.
+ * The above parameter is a uintptr_t type for compatibility with the HAL, and is casted to APPStates.
+ */
+ static void mcan0TxFifoCallback(uintptr_t context);
+
+ /**
+ * Initiates a message receipt from the peripheral to the processor.
+ * It is registered as a callback to be automatically called by Microchip's HAL whenever
+ * there is a message receipt on RX FIFO 0.
+ *
+ * In this setup, messages using the TP Protocol will be moved to RX FIFO 0, requiring further parsing
+ * using the gatekeeper task.
+ *
+ * @param numberOfMessages The number of messages to be received from the peripheral
+ * @param context The state of the peripheral when the function is called.
+ * The above parameter is a uintptr_t type for compatibility with the HAL, and is casted to APPStates.
+ */
+ static void mcan0RxFifo0Callback(uint8_t numberOfMessages, uintptr_t context);
+
+ /**
+ * Initiates a message receipt from the peripheral to the processor.
+ * It is registered as a callback to be automatically called by Microchip's HAL whenever
+ * there is a message receipt on RX FIFO 1.
+ *
+ * In this setup, all received messages are contained in a single frame and will immediately be processed
+ * in this callback.
+ *
+ * @param numberOfMessages The number of messages to be received from the peripheral
+ * @param context The state of the peripheral when the function is called.
+ * The above parameter is a uintptr_t type for compatibility with the HAL, and is casted to APPStates.
+ */
+ static void mcan0RxFifo1Callback(uint8_t numberOfMessages, uintptr_t context);
+
+ /**
+ * Logs a successful CAN Bus transmission.
+ * It is registered as a callback to be automatically called by Microchip's HAL whenever
+ * there is a message transmission on TX FIFO.
+ *
+ * @param context The state of the peripheral when the function is called.
+ * The above parameter is a uintptr_t type for compatibility with the HAL, and is casted to APPStates.
+ */
+ static void mcan1TxFifoCallback(uintptr_t context);
+
+ /**
+ * Initiates a message receipt from the peripheral to the processor.
+ * It is registered as a callback to be automatically called by Microchip's HAL whenever
+ * there is a message receipt on RX FIFO 0.
+ *
+ * In this setup, messages using the TP Protocol will be moved to RX FIFO 0, requiring further parsing
+ * using the gatekeeper task.
+ *
+ * @param numberOfMessages The number of messages to be received from the peripheral
+ * @param context The state of the peripheral when the function is called.
+ * The above parameter is a uintptr_t type for compatibility with the HAL, and is casted to APPStates.
+ */
+ static void mcan1RxFifo0Callback(uint8_t numberOfMessages, uintptr_t context);
+
+ /**
+ * Initiates a message receipt from the peripheral to the processor.
+ * It is registered as a callback to be automatically called by Microchip's HAL whenever
+ * there is a message receipt on RX FIFO 1.
+ *
+ * In this setup, all received messages are contained in a single frame and will immediately be processed
+ * in this callback.
+ *
+ * @param numberOfMessages The number of messages to be received from the peripheral
+ * @param context The state of the peripheral when the function is called.
+ * The above parameter is a uintptr_t type for compatibility with the HAL, and is casted to APPStates.
+ */
+ static void mcan1RxFifo1Callback(uint8_t numberOfMessages, uintptr_t context);
+
+ /**
+ * Logs messages that are in the Rx buffer
+ * @param rxBuf The RX Buffer that the messages are stored
+ */
+ static void logMessage(const MCAN_RX_BUFFER &rxBuf, ActiveBus incomingBus);
+
+ /**
+ * Decodes the data length code to get the largest expected size of the message.
+ *
+ * @param dlc The data length code
+ * @return The length of the message in bytes
+ */
+ static uint8_t convertDlcToLength(uint8_t dlc);
+
+ /**
+ * Encodes the length of the message body to the smallest data length code that it fits in.
+ *
+ * @param length The length of the message in bytes
+ * @return The data length code
+ */
+ static uint8_t convertLengthToDLC(uint8_t length);
+
+ /**
+ * Transforms a frame ID to conform to the CAN Standard.
+ * The implementation shifts non-extended IDs by 18 bits to ease debugging with example projects.
+ * @param id The ID as specified in the standard.
+ * @return The ID that's sent over the network.
+ *
+ * @note All IDs should be at most 11 bits long as the non-extended ID scheme is used. The function gets/returns
+ * a 32-bit ID to accomodate the shift.
+ */
+ static inline uint32_t writeId(uint32_t id) {
+ return id << 18;
+ }
+
+ /**
+ * Transforms the ID from the CAN Standard to match a frame ID.
+ * @param id The ID that was received from the network.
+ * @return The ID as specified in the standard.
+ *
+ * @note All IDs should be at most 11 bits long as the non-extended ID scheme is used. The function gets/returns
+ * a 32-bit ID to accomodate the shift.
+ */
+ static inline uint32_t readId(uint32_t id) {
+ return id >> 18;
+ }
+
+ /**
+ * Immediately ends a CAN Message
+ * @param message The message to be sent.
+ */
+ static void send(const CAN::Frame &message);
+
+ /**
+ * Converts an MCAN_RX_BUFFER object into a CAN::Frame.
+ * @param rxBuffer The incoming buffer.
+ * @return A CAN::Frame.
+ */
+ static CAN::Frame getFrame(const MCAN_RX_BUFFER &rxBuffer);
+ };
+}
+
+#endif //OBC_SOFTWARE_CANDRIVER_H
diff --git a/inc/Platform/CAN/Frame.hpp b/inc/Platform/CAN/Frame.hpp
new file mode 100644
index 0000000..e58aa06
--- /dev/null
+++ b/inc/Platform/CAN/Frame.hpp
@@ -0,0 +1,51 @@
+#pragma once
+
+#include "etl/array.h"
+#include "Peripheral_Definitions.hpp"
+
+namespace CAN {
+ /**
+ * A CAN::Frame is a single message that is going to be sent over the CAN Bus. It could be part of collection of
+ * CAN::Frames composing a CAN::TPMessage, a Single Frame TP Message, or a non-TP Message.
+ *
+ * It consists of an ID which specifies the message's function, as in DDJF_OBDH + an etl::array that contains the
+ * message payload. A CAN::Frame is merely a carrier of information and has no functionality.
+ */
+ class Frame {
+ public:
+ /**
+ * The maximum data length that is currently configured in the peripheral.
+ */
+ static constexpr uint8_t MaxDataLength = 64;
+
+ /**
+ * The right aligned ID of the message to be sent. Since the protocol doesn't make use of extended IDs,
+ * they should be at most 11 bits long.
+ *
+ * @note The ID here must match one of the IDs found in DDJF_OBDH.
+ */
+ uint32_t id = 0;
+
+ /**
+ * A array containing the message payload.
+ *
+ * @note Users should use data.push_back() instead of data[i] while adding items to avoid errors caused by
+ * copying the array to the gatekeeper queue.
+ */
+ etl::array data = {};
+
+ Frame() = default;
+
+ Frame(uint32_t id) : id(id) {};
+
+ Frame(uint32_t id, const etl::array &data) : id(id), data(data) {};
+
+ /**
+ * Zeroes out the current frame. Use this if you're using a single static object in a recurring function.
+ */
+ inline void empty() {
+ id = 0;
+ data.fill(0);
+ }
+ };
+}
diff --git a/inc/Platform/CAN/TPMessage.hpp b/inc/Platform/CAN/TPMessage.hpp
new file mode 100644
index 0000000..ff3d605
--- /dev/null
+++ b/inc/Platform/CAN/TPMessage.hpp
@@ -0,0 +1,52 @@
+#pragma once
+
+#include "Message.hpp"
+
+namespace CAN {
+ class TPMessage : public Message {
+ public:
+ /**
+ * The ID information of a CAN-TP Message, as specified in DDJF_OBDH.
+ */
+ struct IdInfo {
+ NodeIDs sourceAddress;
+ NodeIDs destinationAddress;
+ bool isMulticast: 1;
+ };
+
+ IdInfo idInfo = {};
+
+ TPMessage() = default;
+
+ TPMessage(IdInfo _idInfo) : idInfo(_idInfo) {};
+
+ TPMessage(IdInfo _idInfo, bool _isResponse) : idInfo(_idInfo) {};
+
+ /**
+ * Decodes the ID of a CAN-TP Message, and sets the idInfo field of the current message.
+ * @param canID The received ID.
+ * @return A struct containing the ID information.
+ */
+ [[maybe_unused]] inline IdInfo decodeId(uint32_t canID) {
+ idInfo.sourceAddress = static_cast((canID >> 4) & 0b111);
+ idInfo.destinationAddress = static_cast((canID >> 1) & 0b111);
+ idInfo.isMulticast = canID & 0b1;
+
+ return idInfo;
+ }
+
+ /**
+ * Encodes the ID of a CAN-TP Message, using the already set idInfo member.
+ * @return The encoded ID.
+ */
+ inline uint32_t encodeId() const {
+ uint16_t id = 0b0111 << 7;
+
+ id |= idInfo.sourceAddress << 4;
+ id |= idInfo.destinationAddress << 1;
+ id |= idInfo.isMulticast;
+
+ return id;
+ }
+ };
+}
diff --git a/inc/Platform/CAN/TPProtocol.hpp b/inc/Platform/CAN/TPProtocol.hpp
new file mode 100644
index 0000000..53cc960
--- /dev/null
+++ b/inc/Platform/CAN/TPProtocol.hpp
@@ -0,0 +1,61 @@
+#pragma once
+
+#include "CAN/ApplicationLayer.hpp"
+#include "CAN/Frame.hpp"
+#include "CAN/TPMessage.hpp"
+
+namespace CAN::TPProtocol {
+ /**
+ * Types of CAN-TP protocol frames.
+ */
+ enum Frame : uint8_t {
+ Single = 0x00, First = 0x01, Consecutive = 0x02, Final = 0x03
+ };
+
+ /**
+ * How many bytes of information are contained in a consecutive frame
+ */
+ static constexpr uint8_t BytesInConsecutiveFrame = 6;
+
+ /**
+ * A pointer indicating the information starting point.
+ */
+ static constexpr uint8_t BytesStartingPoint = 2;
+
+ /**
+ * The usable data length for a consecutive message.
+ */
+ static constexpr uint8_t UsableDataLength = CAN::Frame::MaxDataLength - 1;
+
+ /**
+ * Creates a TPMessage object from a single frame, and passes it over to the parse function.
+ * @param message A received CAN::Frame.
+ */
+ void processSingleFrame(const CAN::Frame &message);
+
+ /**
+ * Receives a collection of messages from the Gatekeeper Task's incomingQueue, and processes them.
+ */
+ void processMultipleFrames();
+
+ /**
+ * Processes the stored messages received and acts on their content accordingly.
+ * @param message the complete CAN-TP message.
+ */
+ void parseMessage(TPMessage &message);
+
+ /**
+ * Splits a CAN-TP Message into a collection of CAN frames according to the TP protocol and adds them to the CAN
+ * Gatekeeper Task queue.
+ * For more information about the CAN-TP Protocol check
+ * https://piembsystech.com/can-tp-protocol/
+ * @param message A CAN-TP message.
+ * @param isISR Whether the function is called from an Interrupt Service Routine. The function is simply passed to
+ * canGatekeeperTask->send().
+ *
+ * @note For the consecutive frame fill loop idx + 1 is used since the first byte of each frame is already filled,
+ * however idx only reaches a maximum value of 62 which makes the position in the consecutiveFrame array valid.
+ * The message.data[] part reaches the maximum index of 62 for the first frame, continues from 63 up to 125 etc.
+ */
+ void createCANTPMessage(const TPMessage &message, bool isISR);
+}
diff --git a/inc/Platform/Parameters/AcubeSATParameters.hpp b/inc/Platform/Parameters/AcubeSATParameters.hpp
new file mode 100644
index 0000000..4e1b9d0
--- /dev/null
+++ b/inc/Platform/Parameters/AcubeSATParameters.hpp
@@ -0,0 +1,1051 @@
+#pragma once
+
+#include "Helpers/Parameter.hpp"
+#include "CAN/Driver.hpp"
+
+namespace AcubeSATParameters {
+ /**
+ * ID enumeration of OBDH subsystem's specific parameters.
+ */
+ enum ParameterID : uint16_t {
+ OBCUseRTT = 8,
+ OBCUseUART = 9,
+ OBCUseCAN = 10,
+
+ /* OBDH Parameters */
+ OBCPCBTemperature1 = 5000,
+ OBCPCBTemperature2 = 5001,
+ OBCMCUTemperature = 5002,
+ OBCMCUInputVoltage = 5003,
+ OBCMCUBootCounter = 5004,
+ OBCFlashInt = 5005,
+ OBCSRAMInt = 5006,
+ OBCAvailableMRAM = 5007,
+ OBCAvailableNAND = 5008,
+ OBCSpacecraftTimeRef = 5009, ///< which subsystem holds the correct time
+ OBCOnBoardTime = 5010,
+ OBCOperationalMode = 5011,
+ OBCMemoryPartition = 5012,
+ OBCReconfigurationTimer = 5013, ///< timer responsible to reset the spacecraft to a known working state unless it has been
+ ///< reset by a ground station pass.
+ OBCLastFailedEvent = 5014,
+ OBCMCUSystick = 5015,
+ OBCCANBUSLoad1 = 5016, ///< the CAN bus load is based on the used capacity (bandwidth) divided by maximum capacity
+ OBCCANBUSLoad2 = 5017,
+ OBCCANBUSActive = 5018,
+ OBCMCUFDIR = 5019,
+ OBCMCURestartSafeModeThreshold = 5020,
+ OBCNANDFLASHLCLThreshold = 5021,
+ OBCMRAMLCLThreshold = 5022,
+ OBCNANDFLASHON = 5023,
+ OBCMRAMON = 5024,
+ OBCNANDFLASHScrubbingFrequency = 5025,
+ OBCRAMScrubbingFrequency = 5026,
+ OBCProgramFlashScrubbingFrequency = 5027,
+
+ /* SU */
+ SUPCBTemperature1 = 4000,
+ SUPCBTemperature2 = 4001,
+ SUPCBTemperatureControlValves = 4002,
+ SUPCBTemperatureFlowValves = 4003,
+ SUPDMSTemperature = 4004,
+ SUGrowthMediumTemperature = 4005,
+ SULEDIntensity1 = 4006,
+ SULEDIntensity2 = 4007,
+ SULEDIntensity3 = 4008,
+ SULEDIntensity4 = 4009,
+ SUPressureLevelSensor1 = 4010,
+ SUPressureLevelSensor2 = 4011,
+ SUHumidityLevelSensor1 = 4012,
+ SUHumidityLevelSensor2 = 4013,
+ SUNumberOfPhotosTaken = 4014,
+ SUPumpFlowRate1 = 4015,
+ SUPumpFlowRate2 = 4016,
+ SUControlChamberValve1 = 4017,
+ SUControlChamberValve2 = 4018,
+ SUControlChamberValve3 = 4019,
+ SUControlSandwitchValve1 = 4020,
+ SUControlSandwitchValve2 = 4021,
+ SUControlSandwitchValve3 = 4022,
+ SUFlowValveInlet1 = 4023,
+ SUFlowValveInlet2 = 4024,
+ SUFlowValveInlet3 = 4025,
+ SUFlowValveOutlet1 = 4026,
+ SUFlowValveOutlet2 = 4027,
+ SUFlowValveOutlet3 = 4028,
+ SUFlowValveTest1 = 4029,
+ SUFlowValveTest2 = 4030,
+ SUPhotoExposureTime = 4031,
+ SUPhotoInterval = 4032,
+ SUPhotoCroppedResolution = 4033,
+ SUPhotoCompressionRate = 4034,
+ SUExperimentNumber = 4035,
+ SURADFET = 4036,
+ SUCameraTemperature = 4037,
+ SUMCUTemperature = 4038,
+ SUMCUInputVoltage = 4039,
+ SUMCUBootCounter = 4040,
+ SUFlashIntUsedPercentage = 4041,
+ SUFlashUsedPercentage = 4042,
+ SUSRAMUsedPercentage = 4043,
+ SUOnBoardTime = 4044,
+ SUNANDCurrentlyUsedPartition = 4045,
+ SULastFailedEvent = 4046,
+ SUMCUSysTick = 4047,
+ SUNANDFlashLCLThreshold = 4048,
+ SUFlowPumpFlashLCLThreshold = 4049,
+ SUControlPumpFlashLCLThreshold = 4050,
+ SUCameraLCLThreshold = 4051,
+ SUNANDFlashLCLOn = 4052,
+ SUFlowPumpFlashOn = 4053,
+ SUControlPumpFlashLCLOn = 4054,
+ SUCameraON = 4055,
+ SUNANDFlashScrubbingFrequency = 4056,
+ SURAMScrubbingFrequency = 4057,
+ SUProgramFlashScrubbingFrequency = 4058,
+ SUTemperatureFromHumiditySensor1 = 4059,
+ SUTemperatureFromHumiditySensor2 = 4060,
+
+
+ /* ADCS */
+ ADCSUseRTT = 11,
+ ADCSUseUART = 12,
+ ADCSUseCAN = 13,
+
+ ADCSXBodyFrameRegardingOrbitFrame = 1000,
+ ADCSYBodyFrameRegardingOrbitFrame = 1001,
+ ADCSZBodyFrameRegardingOrbitFrame = 1002,
+ ADCSAngularVelocityOnX = 1003,
+ ADCSAngularVelocityOnY = 1004,
+ ADCSAngularVelocityOnZ = 1005,
+ ADCSBDotXAxis = 1006,
+ ADCSBDotYAxis = 1007,
+ ADCSBDotZAxis = 1008,
+ ADCSQuaternionOrbitFrameToBodyScalar = 1009,
+ ADCSQuaternionOrbitFrameToBodyVectorElem1 = 1010,
+ ADCSQuaternionOrbitFrameToBodyVectorElem2 = 1011,
+ ADCSQuaternionOrbitFrameToBodyVectorElem3 = 1012,
+
+ ADCSMagnetometerRawX = 1013,
+ ADCSMagnetometerRawY = 1014,
+ ADCSMagnetometerRawZ = 1015,
+ ADCSMagnetometerFrequency = 1016,
+ ADCSMagnetometerCycleCountX = 1017,
+ ADCSMagnetometerCycleCountY = 1018,
+ ADCSMagnetometerCycleCountZ = 1019,
+ ADCSMagnetometerSelfTest = 1020,
+
+ ADCSMagnetometerISISCalibratedXAxis = 1021,
+ ADCSMagnetometerISISCalibratedYAxis = 1022,
+ ADCSMagnetometerISISCalibratedZAxis = 1023,
+ ADCSMagnetometerISISFilteredXAxis = 1024,
+ ADCSMagnetometerISISFilteredYAxis = 1025,
+ ADCSMagnetometerISISFilteredZAxis = 1026,
+ ADCSMagnetometerISISRawXAxis = 1027,
+ ADCSMagnetometerISISRawYAxis = 1028,
+ ADCSMagnetometerISISRawZAxis = 1029,
+ ADCSFineSunSensorRawTopLeft = 1030,
+ ADCSFineSunSensorRawTopRight = 1031,
+ ADCSFineSunSensorRawBottomLeft = 1032,
+ ADCSFineSunSensorRawBottomRight = 1033,
+ ADCSFineSunSensorFilteredTopLeft = 1034,
+ ADCSFineSunSensorFilteredTopRight = 1035,
+ ADCSFineSunSensorFilteredBottomLeft = 1036,
+ ADCSFineSunSensorFilteredBottomRight = 1037,
+ ADCSFineSunSensorAngularAlphaAngle = 1038,
+ ADCSFineSunSensorAngularBetaAngle = 1039,
+ ADCSFineSunSensorCalculatedX = 1040,
+ ADCSFineSunSensorCalculatedY = 1041,
+ ADCSFineSunSensorCalculatedZ = 1042,
+
+ ADCSGyroscopeRateX = 1043,
+ ADCSGyroscopeRateY = 1044,
+ ADCSGyroscopeRateZ = 1045,
+ ADCSGyroXLOCSTRegister = 1046,
+ ADCSGyroXHICSTRegister = 1047,
+ ADCSGyroXQUADRegister = 1048,
+ ADCSGyroXFAULTRegister = 1049,
+ ADCSGyroYLOCSTRegister = 1050,
+ ADCSGyroYHICSTRegister = 1051,
+ ADCSGyroYQUADRegister = 1052,
+ ADCSGyroYFAULTRegister = 1053,
+ ADCSGyroZLOCSTRegister = 1054,
+ ADCSGyroZHICSTRegister = 1055,
+ ADCSGyroZQUADRegister = 1056,
+ ADCSGyroZFAULTRegister = 1057,
+
+ ADCSMagnetorquerOnXAxisHBridgePolarity = 1058,
+ ADCSMagnetorquerOnYAxisHBridgePolarity = 1059,
+ ADCSMagnetorquerOnZAxisHBridgePolarity = 1060,
+ ADCSMagnetorquerOnXAxisOnOff = 1061,
+ ADCSMagnetorquerOnYAxisOnOff = 1062,
+ ADCSMagnetorquerOnZAxisOnOff = 1063,
+ ADCSGainBdotXAxis = 1064,
+ ADCSGainBdotYAxis = 1065,
+ ADCSGainBdotZAxis = 1066,
+ ADCSGainProportionalPDXAxis = 1067,
+ ADCSGainProportionalPDYAxis = 1068,
+ ADCSGainProportionalPDZAxis = 1069,
+ ADCSGainDerivativePDXAxis = 1070,
+ ADCSGainDerivativePDYAxis = 1071,
+ ADCSGainDerivativePDZAxis = 1072,
+ ADCSiMQTBoardCoilXTemperatureSensor = 1073,
+ ADCSiMQTBoardCoilYTemperatureSensor = 1074,
+ ADCSiMQTBoardCoilZTemperatureSensor = 1075,
+ ADCSiMQTBoardExtraTemperatureSensor = 1076,
+
+ ADCSGyroscopeXTemperature = 1077,
+ ADCSGyroscopeYTemperature = 1078,
+ ADCSGyroscopeZTemperature = 1079,
+ ADCSBoardTemperature1 = 1080,
+ ADCSBoardTemperature2 = 1081,
+
+ ADCSMode = 1082,
+ ADCSTLE = 1083,
+ ADCSInitialKalmanQuaternionECIFrameToBodyScalar = 1084,
+ ADCSInitialKalmanQuaternionECIFrameToBodyVectorElem1 = 1085,
+ ADCSInitialKalmanQuaternionECIFrameToBodyVectorElem2 = 1086,
+ ADCSInitialKalmanQuaternionECIFrameToBodyVectorElem3 = 1087,
+ ADCSTLEOrbitalElementsArgumentPerigee = 1088,
+ ADCSTLEOrbitalElementsRAAN = 1089,
+ ADCSTLEOrbitalElementsInclination = 1090,
+ ADCSTLEOrbitalElementsEccentricity = 1091,
+ ADCSTLEOrbitalElementsMeanAnomaly = 1092,
+ ADCSSGP4OrbitalElementsArgumentPerigee = 1093,
+ ADCSSGP4OrbitalElementsRAAN = 1094,
+ ADCSSGP4OrbitalElementsInclination = 1095,
+ ADCSSGP4OrbitalElementsMeanAnomaly = 1096,
+ ADCSTimeGST_JD = 1097,
+ ADCSDeterminationInitialMatricesQ1 = 1098,
+ ADCSDeterminationInitialMatricesQ2 = 1099,
+ ADCSDeterminationInitialMatricesQ3 = 1100,
+ ADCSDeterminationInitialMatricesQ4 = 1101,
+ ADCSDeterminationInitialMatricesQ5 = 1102,
+ ADCSDeterminationInitialMatricesQ6 = 1103,
+ ADCSDeterminationInitialMatricesQ7 = 1104,
+ ADCSDeterminationInitialMatricesQ8 = 1105,
+ ADCSDeterminationInitialMatricesQ9 = 1106,
+ ADCSDeterminationInitialMatricesQ10 = 1107,
+ ADCSDeterminationInitialMatricesR1 = 1108,
+ ADCSDeterminationInitialMatricesR2 = 1109,
+ ADCSDeterminationInitialMatricesR3 = 1110,
+ ADCSDeterminationInitialMatricesR4 = 1111,
+ ADCSDeterminationInitialMatricesR5 = 1112,
+ ADCSDeterminationInitialMatricesR6 = 1113,
+ ADCSDeterminationInitialMatricesR7 = 1114,
+ ADCSDeterminationInitialMatricesR8 = 1115,
+ ADCSDeterminationInitialMatricesR9 = 1116,
+ ADCSDeterminationInitialMatricesPInitial1 = 1117,
+ ADCSDeterminationInitialMatricesPInitial2 = 1118,
+ ADCSDeterminationInitialMatricesPInitial3 = 1119,
+ ADCSDeterminationInitialMatricesPInitial4 = 1120,
+ ADCSDeterminationInitialMatricesPInitial5 = 1121,
+ ADCSDeterminationInitialMatricesPInitial6 = 1122,
+ ADCSDeterminationInitialMatricesPInitial7 = 1123,
+ ADCSDeterminationInitialMatricesPInitial8 = 1124,
+ ADCSDeterminationInitialMatricesPInitial9 = 1125,
+ ADCSDeterminationInitialMatricesPInitial10 = 1126,
+ ADCSReactionWheelOn = 1127,
+ ADCSReactionWheelAngularVelocity = 1128,
+ ADCSMagnetorquerAxisAssignment = 1129,
+ ADCSControlProfileSwitching = 1130,
+ ADCSTransformationAxisXAssignment = 1131,
+ ADCSTransformationAxisYAssignment = 1132,
+ ADCSTransformationAxisZAssignment = 1133,
+ ADCSMagnetometerAxisAssignment = 1134,
+ ADCSSunSensorAxisAssignment = 1135,
+ ADCSGyroscopeAxisAssignment = 1136,
+ ADCSFrameAxisSignECIToECEF_X = 1137,
+ ADCSFrameAxisSignECIToECEF_Y = 1138,
+ ADCSFrameAxisSignECIToECEF_Z = 1139,
+ ADCSFrameAxisSignECIToOrbit_X = 1140,
+ ADCSFrameAxisSignECIToOrbit_Y = 1141,
+ ADCSFrameAxisSignECIToOrbit_Z = 1142,
+ ADCSFrameAxisSignNEDToECEF_X = 1143,
+ ADCSFrameAxisSignNEDToECEF_Y = 1144,
+ ADCSFrameAxisSignNEDToECEF_Z = 1145,
+
+ ADCSMagnetometerSignX = 1146,
+ ADCSMagnetometerSignY = 1147,
+ ADCSMagnetometerSignZ = 1148,
+
+ ADCSSunSensorXAxisSign = 1149,
+ ADCSSunSensorYAxisSign = 1150,
+ ADCSSunSensorZAxisSign = 1151,
+
+ ADCSGyroSignX = 1152,
+ ADCSGyroSignY = 1153,
+ ADCSGyroSignZ = 1154,
+
+ ADCSDetumblingNominalThresholds = 1155,
+ ADCSNominalDetumblingThresholds = 1156,
+ ADCSStandByDetumblingThresholds = 1157,
+ ADCSDetumblingStandByThresholds = 1158,
+ ADCSNominalStandByThresholds = 1159,
+ ADCSMagnetorquerMagneticDipoleX = 1160,
+ ADCSMagnetorquerMagneticDipoleY = 1161,
+ ADCSMagnetorquerMagneticDipoleZ = 1162,
+ ADCSMagnetorquerDutyCycle = 1163,
+ ADCSMagnetorquerCurrentX = 1164,
+ ADCSMagnetorquerCurrentY = 1165,
+ ADCSMagnetorquerCurrentZ = 1166,
+ ADCSMagnetorquerBDot = 1167,
+ ADCSReactionWheelTorque = 1168,
+ ADCSReactionWheelAngularAcceleration = 1169,
+ ADCSDesiredQuaternionOrbitToBodyScalar = 1170,
+ ADCSDesiredQuaternionVectorElem1 = 1171,
+ ADCSDesiredQuaternionVectorElem2 = 1172,
+ ADCSDesiredQuaternionVectorElem3 = 1173,
+ ADCSAngularVelocityDesiredX = 1174,
+ ADCSAngularVelocityDesiredY = 1175,
+ ADCSAngularVelocityDesiredZ = 1176,
+
+ ADCSGyroBiasX = 1177,
+ ADCSGyroBiasY = 1178,
+ ADCSGyroBiasZ = 1179,
+
+ ADCSSatellitePositionLatitude = 1180,
+ ADCSSatellitePositionLongitude = 1181,
+ ADCSSatellitePositionHeight = 1182,
+ ADCSSatellitePositionECIX = 1183,
+ ADCSSatellitePositionECIY = 1184,
+ ADCSSatellitePositionECIZ = 1185,
+ ADCSSatelliteLinearVelocityECIX = 1186,
+ ADCSSatelliteLinearVelocityECIY = 1187,
+ ADCSSatelliteLinearVelocityECIZ = 1188,
+ ADCSMagneticFieldNEDX = 1189,
+ ADCSMagneticFieldNEDY = 1190,
+ ADCSMagneticFieldNEDZ = 1191,
+ ADCSMagneticFieldECIX = 1192,
+ ADCSMagneticFieldECIY = 1193,
+ ADCSMagneticFieldECIZ = 1194,
+ ADCSSunPositionECIX = 1195,
+ ADCSSunPositionECIY = 1196,
+ ADCSSunPositionECIZ = 1197,
+ ADCSEclipse = 1198,
+ ADCSDesaturationPecentageParameter = 1199,
+ ADCSISISMTQModes = 1200,
+ ADCSMagnetorquerActuationMethod = 1201,
+ ADCSDutyCycleDetermination = 1202,
+ ADCSDutyCycleControl = 1203,
+ ADCSDutyCycleOther = 1204,
+ ADCSDesatInitialAngularVelocityParam = 1205,
+
+ ADCSMCUTemperature = 1206,
+
+ ADCSMCUInputVoltage = 1207,
+
+ ADCSBootCounter = 1208,
+ ADCSOnBoardTime = 1209,
+
+ ADCSMemoryPartition = 1210,
+ ADCSLastFailedEvent = 1211,
+
+ ADCSSystick = 1212,
+
+ ADCSRAMScrubbingFrequency = 1213,
+ ADCSProgramFlashScrubbingFrequency = 1214,
+ ADCSFLASHInt = 1215,
+ ADCSSRAMInt = 1216,
+
+ /* EPS Parameters */
+ EPSSwitch3V1 = 3000,
+ EPSSwitch3V2 = 3001,
+ EPSSwitch3V3 = 3002,
+ EPSSwitch3V4 = 3003,
+ EPSSwitch5V1 = 3004,
+ EPSSwitch5V2 = 3005,
+ EPSSwitch5V3 = 3006,
+ EPSSwitch5V4 = 3007,
+ EPSSwitch1 = 3008,
+ EPSSwitch2 = 3009,
+ EPSSwitch3 = 3010,
+ EPSSwitch4 = 3011,
+ EPSSwitch5 = 3012,
+ EPSCurrentForRail3V1 = 3013,
+ EPSCurrentForRail3V2 = 3014,
+ EPSCurrentForRail3V3 = 3015,
+ EPSCurrentForRail3V4 = 3016,
+ EPSCurrentForRail5V1 = 3017,
+ EPSCurrentForRail5V2 = 3018,
+ EPSCurrentForRail5V3 = 3019,
+ EPSCurrentForRail5V4 = 3020,
+ EPSCurrentForRail1 = 3021,
+ EPSCurrentForRail2 = 3022,
+ EPSCurrentForRail3 = 3023,
+ EPSCurrentForRail4 = 3024,
+ EPSCurrentForRail5 = 3025,
+ EPSVoltageForEachRail3V1 = 3026,
+ EPSVoltageForEachRail3V2 = 3027,
+ EPSVoltageForEachRail3V3 = 3028,
+ EPSVoltageForEachRail3V4 = 3029,
+ EPSVoltageForEachRail5V1 = 3030,
+ EPSVoltageForEachRail5V2 = 3031,
+ EPSVoltageForEachRail5V3 = 3032,
+ EPSVoltageForEachRail5V4 = 3033,
+ EPSVoltageForEachRail12V1 = 3034,
+ EPSVoltageForEachRail12V2 = 3035,
+ EPSVoltageForEachRail12V3 = 3036,
+ EPSVoltageForEachRail12V4 = 3037,
+ EPSPanelVoltageXPlus = 3038,
+ EPSPanelVoltageXMinus = 3039,
+ EPSPanelVoltageYPlus = 3040,
+ EPSPanelVoltageYMinus = 3041,
+ EPSPanelVoltageZ = 3042,
+ EPSPanelCurrentXPlus = 3043,
+ EPSPanelCurrentXMinus = 3044,
+ EPSPanelCurrentYPlus = 3045,
+ EPSPanelCurrentYMinus = 3046,
+ EPSPanelCurrentZ = 3047,
+ EPSBatteryPackVoltage = 3048,
+ EPSPanelTemperatureXPlus = 3049,
+ EPSPanelTemperatureXMinus = 3050,
+ EPSPanelTemperatureYPlus = 3051,
+ EPSPanelTemperatureYMinus = 3052,
+ EPSPanelTemperatureZ = 3053,
+ EPSPCBTemperatureSensor1 = 3054,
+ EPSPCBTemperatureSensor2 = 3055,
+ EPSBatteryTemperatureSensor1 = 3056,
+ EPSBatteryTemperatureSensor2 = 3057,
+
+ /* COMMS Parameters */
+ COMMSUHFBandPATemperature = 2000,
+ COMMSSBandPATemperature = 2001,
+ COMMSPCBTemperature = 2002,
+ COMMSAntennaDeploymentStatus = 2003,
+ COMMSDataRateUHFTX = 2004,
+ COMMSDataRateUHFRX = 2005,
+ COMMSSymbolRateSBand = 2006,
+ COMMSCWInterval = 2007,
+ COMMSGMSKBeaconInterval = 2008,
+ COMMSUHFBandTXPower = 2009,
+ COMMSSBandTXPower = 2010,
+ COMMSChannelNumberUHFBand = 2011,
+ COMMSChannelNumberSBand = 2012,
+ COMMSLNAGain = 2013,
+ COMMSPAGainUHFBand = 2014,
+ COMMSPAGainSBand = 2015,
+ COMMSVGAGain = 2016,
+ COMMSRSSI = 2017,
+ COMMSUHFBandTXOnOff = 2018,
+ COMMSUHFBandRXOnOff = 2019,
+ COMMSSBandTXOnOff = 2020,
+ COMMSPacketsRejectedCOMMS = 2021,
+ COMMSInvalidHMAC = 2022,
+ COMMSInvalidPacketStructure = 2023,
+ COMMSInvalidSpacecraftID = 2024,
+ COMMSFrameSequenceCounter = 2025,
+ COMMSPCBTemperature1 = 2026,
+ COMMSPCBTemperature2 = 2027,
+ COMMSMCUTemperature = 2028,
+ COMMSMCUInputVoltage = 2029,
+ COMMSMCUBootCounter = 2030,
+ COMMSOnBoardTime = 2031,
+ COMMSNANDCurrentlyUsedMemoryPartition = 2032,
+ COMMSLastFailedEvent = 2033,
+ COMMSMCUSystick = 2034,
+ COMMSFlashInt = 2035,
+ COMMSSRAMInt = 2036
+ };
+
+ /******************* OBDH ENUMS *******************/
+ enum SpacecraftTimeRef : uint8_t {
+ Spacecraft = 0,
+ GroundStation = 1
+ };
+
+ enum OperationalMode : uint8_t {
+ CommissioningMode = 0,
+ NominalMode = 1,
+ ScienceMode = 2,
+ SafeMode = 3
+ };
+
+ enum MemoryPartition : uint8_t {
+ First = 0,
+ Second = 1
+ };
+
+ enum CANBUSActive : uint8_t {
+ Main = 0,
+ Reductant = 1
+ };
+
+ enum MCUFDIR : uint8_t {
+ OBC = 0,
+ ADCS = 1
+ };
+
+ /******************* ADCS ENUMS *******************/
+ enum ADCSModeOfOperation : uint8_t {
+ StandByModeADCS = 0,
+ DetumbingModeADCS = 1,
+ NominalModeADCS = 2
+ };
+
+ enum AxisAssignment : uint8_t {
+ Xaxis = 0,
+ Yaxis = 1,
+ Zaxis = 2
+ };
+
+ enum MangetorquerDutyCycle : uint8_t {
+ VeryHigh = 0,
+ High = 1,
+ Medium = 2,
+ Low = 3
+ };
+
+ enum MagnetorquerModes : uint8_t {
+ Idle = 0,
+ SelfTest = 1,
+ Detumbling =2
+ };
+
+ enum MagnetorquerActuationMethod : uint8_t {
+ Current = 0,
+ Dipole = 1,
+ PWM =2
+ };
+
+ /******************* SU ENUMS *******************/
+ enum CroppingResolution : uint64_t {
+ Default = 0
+ };
+
+ enum CompressionRate : uint32_t {
+ None = 0
+ };
+
+ enum ExprerimentNumber : uint8_t {
+ FirstExperiment = 0,
+ SecondExperiment = 1,
+ ThirdExperiment = 2
+ };
+
+ /******************* COMMS ENUMS *******************/
+ enum AntennaDeploymentStatus : uint8_t {
+ Closed = 0,
+ OneDoorOpen = 1,
+ TwoDoorOpen = 2,
+ ThreeDoorOpen = 3,
+ FullyDeployed = 4
+ };
+
+ enum SampleRateUHFTX : uint8_t {
+ Rate = 0
+ };
+
+ enum AntennaGains : uint8_t {
+ Gain = 0
+ };
+
+ /******************* OBDH PARAMETERS *******************/
+ inline Parameter obcUseRTT(true);
+ inline Parameter obcUseUART(true);
+ inline Parameter obcUseCAN(false);
+
+ inline Parameter obcPCBTemperature1(0);
+ inline Parameter obcPCBTemperature2(0);
+ inline Parameter obcMCUTemperature(0);
+ inline Parameter obcMCUInputVoltage(0);
+
+ inline Parameter obcMCUBootCounter(0);
+ inline Parameter obcFlashInt(0);
+ inline Parameter obcSRAMInt(0);
+ inline Parameter obcAvailableMRAM(0);
+ inline Parameter obcAvailableNAND(0);
+
+ inline Parameter obcOnBoardTime(Time::DefaultCUC(0));
+
+ inline Parameter obcSpacecraftTimeRef(Spacecraft); // enum
+ inline Parameter obcOperationalMode(NominalMode); // enum
+ inline Parameter obcMemoryPartition(First); // enum
+
+ inline Parameter obcReconfigurationTimer(0);
+ inline Parameter obcLastFailedEvent(0);
+ inline Parameter obcMCUSystick(0);
+
+ inline Parameter obcCANBUSLoad1(0);
+ inline Parameter obcCANBUSLoad2(0);
+
+ inline Parameter obcCANBUSActive(CAN::Driver::Main); // enum
+ inline Parameter obcMCUFDIR(OBC); // enum
+
+ inline Parameter obcMCURestartSafeModeThreshold(0);
+ inline Parameter obcNANDFLASHLCLThreshold(0);
+ inline Parameter obcMRAMLCLThreshold(0);
+ inline Parameter obcNANDFLASHON(0);
+ inline Parameter obcNANDFlashScrubbingFrequency(0);
+ inline Parameter obcMRAMON(0);
+ inline Parameter obcRAMScrubbingFrequency(0);
+ inline Parameter obcProgramFlashScrubbingFrequency(0);
+
+ /******************* SU PARAMETERS *******************/
+ // MCU
+ inline Parameter suMCUBootCounter(0);
+ inline Parameter suMCUSysTick(0);
+
+ inline Parameter suMCUTemperature(0);
+ inline Parameter suMCUInputVoltage(0);
+
+ // Memory
+ inline Parameter suFlashIntUsedPercentage(0);
+ inline Parameter suFlashUsedPercentage(0);
+ inline Parameter suSRAMUsedPercentage(0);
+
+ inline Parameter suNANDCurrentlyUsedPartition(First); // enum
+ inline Parameter suNANDFlashLclOn(0);
+ inline Parameter suNANDFlashLclThreshold(0);
+
+ inline Parameter suNANDFlashScrubbingFrequency(0);
+ inline Parameter suRAMScrubbingFrequency(0);
+ inline Parameter suProgramFlashScrubbingFrequency(0);
+
+ // Components
+ inline Parameter suControlPumpFlashLclOn(0);
+ inline Parameter suControlPumpFlashLclThreshold(0);
+
+ inline Parameter suFlowPumpFlashOn(0);
+ inline Parameter suFlowPumpFlashLclThreshold(0);
+
+ inline Parameter suCameraOn(0);
+ inline Parameter suCameraLCLThreshold(0);
+
+ // Temperatures
+ inline Parameter suPCBTemperature1(0);
+ inline Parameter suPCBTemperature2(0);
+
+ inline Parameter suPCBTemperatureControlValves(0);
+ inline Parameter suPCBTemperatureFlowValves(0);
+
+ inline Parameter suCameraTemperature(0);
+ inline Parameter suPDMSTemperature(0);
+ inline Parameter suGrowthMediumTemperature(0);
+
+ // Sensors
+ inline Parameter suPressureLevelSensor1(0);
+ inline Parameter suPressureLevelSensor2(0);
+
+ inline Parameter suHumidityLevelSensor1(0);
+ inline Parameter suHumidityLevelSensor2(0);
+
+ inline Parameter suRadfet(0);
+
+ // Components
+ inline Parameter suPumpFlowRate1(0);
+ inline Parameter suPumpFlowRate2(0);
+
+ inline Parameter suCcontrolChamberValve1(0);
+ inline Parameter suControlChamberValve2(0);
+ inline Parameter suControlChamberValve3(0);
+
+ inline Parameter suControlSandwitchValve1(0);
+ inline Parameter suControlSandwitchValve2(0);
+ inline Parameter suControlSandwitchValve3(0);
+
+ inline Parameter suFlowValveInlet1(0);
+ inline Parameter suFlowValveInlet2(0);
+ inline Parameter suFlowValveInlet3(0);
+
+ inline Parameter suFlowValveOutlet1(0);
+ inline Parameter suFlowValveOutlet2(0);
+ inline Parameter suFlowValveOutlet3(0);
+
+ inline Parameter suFlowValveTest1(0);
+ inline Parameter suFlowValveTest2(0);
+
+ inline Parameter suLEDIntensity1(0);
+ inline Parameter suLEDIntensity2(0);
+ inline Parameter suLEDIntensity3(0);
+ inline Parameter suLEDIntensity4(0);
+
+ // Photos
+ inline Parameter suNumberOfPhotosTaken(0);
+ inline Parameter suPhotoExposureTime(0);
+ inline Parameter suPhotoInterval(0);
+ inline Parameter suPhotoCroppedResolution(Default); // enum
+ inline Parameter suPhotoCompressionRate(None); // enum
+
+ // Misc
+ inline Parameter suExperimentNumber(FirstExperiment); // enum
+ inline Parameter suOnBoardTime(Time::DefaultCUC(0));
+ inline Parameter suLastFailedEvent(0);
+
+ inline Parameter suTemperatureFromHumiditySensor1(0);
+ inline Parameter suTemperatureFromHumiditySensor2(0);
+
+ /******************* ADCS PARAMETERS *******************/
+ inline Parameter adcsUseRTT(false);
+ inline Parameter adcsUseUART(true);
+ inline Parameter adcsUseCAN(false);
+
+ inline Parameter adcsXBodyFrameRegardingOrbitFrame(0);
+ inline Parameter adcsYBodyFrameRegardingOrbitFrame(0);
+ inline Parameter adcsZBodyFrameRegardingOrbitFrame(0);
+ inline Parameter adcsAngularVelocityOnX(0);
+ inline Parameter adcsAngularVelocityOnY(0);
+ inline Parameter adcsAngularVelocityOnZ(0);
+ inline Parameter adcsBDotXAxis(0);
+ inline Parameter adcsBDotYAxis(0);
+ inline Parameter adcsBDotZAxis(0);
+ inline Parameter adcsQuaternionOrbitFrameToBodyScalar(0);
+ inline Parameter adcsQuaternionOrbitFrameToBodyVectorElem1(0);
+ inline Parameter adcsQuaternionOrbitFrameToBodyVectorElem2(0);
+ inline Parameter adcsQuaternionOrbitFrameToBodyVectorElem3(0);
+
+ inline Parameter adcsMagnetometerRawX(0);
+ inline Parameter adcsMagnetometerRawY(0);
+ inline Parameter adcsMagnetometerRawZ(0);
+ inline Parameter adcsMagnetometerFrequency(0);
+ inline Parameter adcsMagnetometerCycleCountX(0);
+ inline Parameter adcsMagnetometerCycleCountY(0);
+ inline Parameter adcsMagnetometerCycleCountZ(0);
+ inline Parameter adcsMagnetometerSelfTest(0);
+
+ inline Parameter adcsMagnetometerISISCalibratedXAxis(0);
+ inline Parameter adcsMagnetometerISISCalibratedYAxis(0);
+ inline Parameter adcsMagnetometerISISCalibratedZAxis(0);
+ inline Parameter adcsMagnetometerISISFilteredXAxis(0);
+ inline Parameter adcsMagnetometerISISFilteredYAxis(0);
+ inline Parameter adcsMagnetometerISISFilteredZAxis(0);
+ inline Parameter adcsMagnetometerISISRawXAxis(0);
+ inline Parameter adcsMagnetometerISISRawYAxis(0);
+ inline Parameter adcsMagnetometerISISRawZAxis(0);
+
+ inline Parameter adcsFineSunSensorRawTopLeft(0);
+ inline Parameter adcsFineSunSensorRawTopRight(0);
+ inline Parameter adcsFineSunSensorRawBottomLeft(0);
+ inline Parameter adcsFineSunSensorRawBottomRight(0);
+ inline Parameter adcsFineSunSensorFilteredTopLeft(0);
+ inline Parameter adcsFineSunSensorFilteredTopRight(0);
+ inline Parameter adcsFineSunSensorFilteredBottomLeft(0);
+ inline Parameter adcsFineSunSensorFilteredBottomRight(0);
+ inline Parameter adcsFineSunSensorAngularAlphaAngle(0);
+ inline Parameter adcsFineSunSensorAngularBetaAngle(0);
+ inline Parameter adcsFineSunSensorCalculatedX(0);
+ inline Parameter adcsFineSunSensorCalculatedY(0);
+ inline Parameter adcsFineSunSensorCalculatedZ(0);
+
+ inline Parameter adcsGyroscopeRateX(0);
+ inline Parameter adcsGyroscopeRateY(0);
+ inline Parameter adcsGyroscopeRateZ(0);
+
+ inline Parameter adcsGyroXLOCSTRegister(0);
+ inline Parameter adcsGyroXHICSTRegister(0);
+ inline Parameter adcsGyroXQUADRegister(0);
+ inline Parameter adcsGyroXFAULTRegister(0);
+
+ inline Parameter adcsGyroYLOCSTRegister(0);
+ inline Parameter adcsGyroYHICSTRegister(0);
+ inline Parameter adcsGyroYQUADRegister(0);
+ inline Parameter adcsGyroYFAULTRegister(0);
+
+ inline Parameter adcsGyroZLOCSTRegister(0);
+ inline Parameter adcsGyroZHICSTRegister(0);
+ inline Parameter adcsGyroZQUADRegister(0);
+ inline Parameter adcsGyroZFAULTRegister(0);
+
+ inline Parameter adcsMagnetorquerOnXAxisHBridgePolarity(0);
+ inline Parameter adcsMagnetorquerOnYAxisHBridgePolarity(0);
+ inline Parameter adcsMagnetorquerOnZAxisHBridgePolarity(0);
+ inline Parameter adcsMagnetorquerOnXAxisOnOff(0);
+ inline Parameter adcsMagnetorquerOnYAxisOnOff(0);
+ inline Parameter adcsMagnetorquerOnZAxisOnOff(0);
+
+ inline Parameter adcsGainBdotXAxis(0);
+ inline Parameter adcsGainBdotYAxis(0);
+ inline Parameter adcsGainBdotZAxis(0);
+ inline Parameter adcsGainProportionalPDXAxis(0);
+ inline Parameter adcsGainProportionalPDYAxis(0);
+ inline Parameter adcsGainProportionalPDZAxis(0);
+ inline Parameter adcsGainDerivativePDXAxis(0);
+ inline Parameter adcsGainDerivativePDYAxis(0);
+ inline Parameter adcsGainDerivativePDZAxis(0);
+
+ inline Parameter adcsiMQTBoardCoilXTemperatureSensor(0);
+ inline Parameter adcsiMQTBoardCoilYTemperatureSensor(0);
+ inline Parameter adcsiMQTBoardCoilZTemperatureSensor(0);
+ inline Parameter adcsiMQTBoardExtraTemperatureSensor(0);
+
+ inline Parameter adcsGyroscopeXTemperature(0);
+ inline Parameter adcsGyroscopeYTemperature(0);
+ inline Parameter adcsGyroscopeZTemperature(0);
+
+ inline Parameter adcsBoardTemperature1(0);
+ inline Parameter adcsBoardTemperature2(0);
+
+ inline Parameter adcsMode(StandByModeADCS); // enum
+ inline Parameter adcsTLE(0);
+
+ inline Parameter adcsInitialKalmanQuaternionECIFrameToBodyScalar(0);
+ inline Parameter adcsInitialKalmanQuaternionECIFrameToBodyVectorElem1(0);
+ inline Parameter adcsInitialKalmanQuaternionECIFrameToBodyVectorElem2(0);
+ inline Parameter adcsInitialKalmanQuaternionECIFrameToBodyVectorElem3(0);
+ inline Parameter adcsTLEOrbitalElementsArgumentPerigee(0);
+ inline Parameter adcsTLEOrbitalElementsRAAN(0);
+ inline Parameter adcsTLEOrbitalElementsInclination(0);
+ inline Parameter adcsTLEOrbitalElementsEccentricity(0);
+ inline Parameter adcsTLEOrbitalElementsMeanAnomaly(0);
+
+ inline Parameter adcsSGP4OrbitalElementsArgumentPerigee(0);
+ inline Parameter adcsSGP4OrbitalElementsRAAN(0);
+ inline Parameter adcsSGP4OrbitalElementsInclination(0);
+ inline Parameter adcsSGP4OrbitalElementsMeanAnomaly(0);
+ inline Parameter adcsTimeGST_JD(0); ///< Greenwich Sidereal Time
+
+ inline Parameter adcsDeterminationInitialMatricesQ1(0);
+ inline Parameter adcsDeterminationInitialMatricesQ2(0);
+ inline Parameter adcsDeterminationInitialMatricesQ3(0);
+ inline Parameter adcsDeterminationInitialMatricesQ4(0);
+ inline Parameter adcsDeterminationInitialMatricesQ5(0);
+ inline Parameter adcsDeterminationInitialMatricesQ6(0);
+ inline Parameter adcsDeterminationInitialMatricesQ7(0);
+ inline Parameter adcsDeterminationInitialMatricesQ8(0);
+ inline Parameter adcsDeterminationInitialMatricesQ9(0);
+ inline Parameter adcsDeterminationInitialMatricesQ10(0);
+ inline Parameter adcsDeterminationInitialMatricesR1(0);
+ inline Parameter adcsDeterminationInitialMatricesR2(0);
+ inline Parameter adcsDeterminationInitialMatricesR3(0);
+ inline Parameter adcsDeterminationInitialMatricesR4(0);
+ inline Parameter adcsDeterminationInitialMatricesR5(0);
+ inline Parameter adcsDeterminationInitialMatricesR6(0);
+ inline Parameter adcsDeterminationInitialMatricesR7(0);
+ inline Parameter adcsDeterminationInitialMatricesR8(0);
+ inline Parameter adcsDeterminationInitialMatricesR9(0);
+ inline Parameter adcsDeterminationInitialMatricesPInitial1(0);
+ inline Parameter