diff --git a/.gitignore b/.gitignore
index 1dbc687d..4f119819 100644
--- a/.gitignore
+++ b/.gitignore
@@ -8,21 +8,21 @@ __pycache__/
# Distribution / packaging
.Python
-env/
-build/
-develop-eggs/
-dist/
-downloads/
-eggs/
-.eggs/
-lib/
-lib64/
-parts/
-sdist/
-var/
-*.egg-info/
-.installed.cfg
-*.egg
+#env/
+#build/
+#develop-eggs/
+#dist/
+#downloads/
+#eggs/
+#.eggs/
+#lib/
+#lib64/
+#parts/
+#sdist/
+#var/
+#*.egg-info/
+#.installed.cfg
+#*.egg
# PyInstaller
# Usually these files are written by a python script from a template
@@ -60,3 +60,6 @@ target/
#Ipython Notebook
.ipynb_checkpoints
+
+# Tup
+.tup
diff --git a/.travis.yml b/.travis.yml
index ba888a75..531bce18 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -3,10 +3,10 @@
language: c
sudo: false
-addons:
- apt:
- packages:
- libc6-i386
+addons:
+ apt:
+ packages:
+ libc6-i386
cache:
directories:
@@ -18,6 +18,14 @@ install:
- export GCC_URL=https://launchpad.net/gcc-arm-embedded/5.0/5-2015-q4-major/+download/gcc-arm-none-eabi-5_2-2015q4-20151219-linux.tar.bz2
- if [ ! -e $GCC_DIR/bin/arm-none-eabi-gcc ]; then wget $GCC_URL -O $GCC_ARCHIVE; tar xfj $GCC_ARCHIVE -C $HOME/dl; fi
- export PATH=$PATH:$GCC_DIR/bin
+ - export TUP_DIR=$HOME/dl/tup_0.7.2.12+ga582fee_amd64
+ - export TUP_ARCHIVE=$HOME/dl/tup_0.7.2.12+ga582fee_amd64.deb
+ - export TUP_URL=http://ppa.launchpad.net/anatol/tup/ubuntu/pool/main/t/tup/tup_0.7.2.12+ga582fee_amd64.deb
+ - if [ ! -e $TUP_DIR/bin/tup ]; then wget $TUP_URL -O $TUP_ARCHIVE; dpkg-deb -R $TUP_ARCHIVE $TUP_DIR; fi
+ - export PATH=$PATH:$TUP_DIR/usr/bin
script:
- - make clean && make
+ - cd Firmware
+ - mkdir -p build
+ - tup generate ./build.sh
+ - bash -xe ./build.sh
diff --git a/Firmware/Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f405xx.h b/Firmware/Board/v3.3/Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f405xx.h
similarity index 100%
rename from Firmware/Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f405xx.h
rename to Firmware/Board/v3.3/Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f405xx.h
diff --git a/Firmware/Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h b/Firmware/Board/v3.3/Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h
similarity index 100%
rename from Firmware/Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h
rename to Firmware/Board/v3.3/Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h
diff --git a/Firmware/Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h b/Firmware/Board/v3.3/Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h
similarity index 100%
rename from Firmware/Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h
rename to Firmware/Board/v3.3/Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h
diff --git a/Firmware/Drivers/CMSIS/Include/arm_common_tables.h b/Firmware/Board/v3.3/Drivers/CMSIS/Include/arm_common_tables.h
similarity index 100%
rename from Firmware/Drivers/CMSIS/Include/arm_common_tables.h
rename to Firmware/Board/v3.3/Drivers/CMSIS/Include/arm_common_tables.h
diff --git a/Firmware/Drivers/CMSIS/Include/arm_const_structs.h b/Firmware/Board/v3.3/Drivers/CMSIS/Include/arm_const_structs.h
similarity index 100%
rename from Firmware/Drivers/CMSIS/Include/arm_const_structs.h
rename to Firmware/Board/v3.3/Drivers/CMSIS/Include/arm_const_structs.h
diff --git a/Firmware/Drivers/CMSIS/Include/arm_math.h b/Firmware/Board/v3.3/Drivers/CMSIS/Include/arm_math.h
similarity index 100%
rename from Firmware/Drivers/CMSIS/Include/arm_math.h
rename to Firmware/Board/v3.3/Drivers/CMSIS/Include/arm_math.h
diff --git a/Firmware/Drivers/CMSIS/Include/cmsis_armcc.h b/Firmware/Board/v3.3/Drivers/CMSIS/Include/cmsis_armcc.h
similarity index 100%
rename from Firmware/Drivers/CMSIS/Include/cmsis_armcc.h
rename to Firmware/Board/v3.3/Drivers/CMSIS/Include/cmsis_armcc.h
diff --git a/Firmware/Drivers/CMSIS/Include/cmsis_armcc_V6.h b/Firmware/Board/v3.3/Drivers/CMSIS/Include/cmsis_armcc_V6.h
similarity index 100%
rename from Firmware/Drivers/CMSIS/Include/cmsis_armcc_V6.h
rename to Firmware/Board/v3.3/Drivers/CMSIS/Include/cmsis_armcc_V6.h
diff --git a/Firmware/Drivers/CMSIS/Include/cmsis_gcc.h b/Firmware/Board/v3.3/Drivers/CMSIS/Include/cmsis_gcc.h
similarity index 100%
rename from Firmware/Drivers/CMSIS/Include/cmsis_gcc.h
rename to Firmware/Board/v3.3/Drivers/CMSIS/Include/cmsis_gcc.h
diff --git a/Firmware/Drivers/CMSIS/Include/core_cm0.h b/Firmware/Board/v3.3/Drivers/CMSIS/Include/core_cm0.h
similarity index 100%
rename from Firmware/Drivers/CMSIS/Include/core_cm0.h
rename to Firmware/Board/v3.3/Drivers/CMSIS/Include/core_cm0.h
diff --git a/Firmware/Drivers/CMSIS/Include/core_cm0plus.h b/Firmware/Board/v3.3/Drivers/CMSIS/Include/core_cm0plus.h
similarity index 100%
rename from Firmware/Drivers/CMSIS/Include/core_cm0plus.h
rename to Firmware/Board/v3.3/Drivers/CMSIS/Include/core_cm0plus.h
diff --git a/Firmware/Drivers/CMSIS/Include/core_cm3.h b/Firmware/Board/v3.3/Drivers/CMSIS/Include/core_cm3.h
similarity index 100%
rename from Firmware/Drivers/CMSIS/Include/core_cm3.h
rename to Firmware/Board/v3.3/Drivers/CMSIS/Include/core_cm3.h
diff --git a/Firmware/Drivers/CMSIS/Include/core_cm4.h b/Firmware/Board/v3.3/Drivers/CMSIS/Include/core_cm4.h
similarity index 100%
rename from Firmware/Drivers/CMSIS/Include/core_cm4.h
rename to Firmware/Board/v3.3/Drivers/CMSIS/Include/core_cm4.h
diff --git a/Firmware/Drivers/CMSIS/Include/core_cm7.h b/Firmware/Board/v3.3/Drivers/CMSIS/Include/core_cm7.h
similarity index 100%
rename from Firmware/Drivers/CMSIS/Include/core_cm7.h
rename to Firmware/Board/v3.3/Drivers/CMSIS/Include/core_cm7.h
diff --git a/Firmware/Drivers/CMSIS/Include/core_cmFunc.h b/Firmware/Board/v3.3/Drivers/CMSIS/Include/core_cmFunc.h
similarity index 100%
rename from Firmware/Drivers/CMSIS/Include/core_cmFunc.h
rename to Firmware/Board/v3.3/Drivers/CMSIS/Include/core_cmFunc.h
diff --git a/Firmware/Drivers/CMSIS/Include/core_cmInstr.h b/Firmware/Board/v3.3/Drivers/CMSIS/Include/core_cmInstr.h
similarity index 100%
rename from Firmware/Drivers/CMSIS/Include/core_cmInstr.h
rename to Firmware/Board/v3.3/Drivers/CMSIS/Include/core_cmInstr.h
diff --git a/Firmware/Drivers/CMSIS/Include/core_cmSimd.h b/Firmware/Board/v3.3/Drivers/CMSIS/Include/core_cmSimd.h
similarity index 100%
rename from Firmware/Drivers/CMSIS/Include/core_cmSimd.h
rename to Firmware/Board/v3.3/Drivers/CMSIS/Include/core_cmSimd.h
diff --git a/Firmware/Drivers/CMSIS/Include/core_sc000.h b/Firmware/Board/v3.3/Drivers/CMSIS/Include/core_sc000.h
similarity index 100%
rename from Firmware/Drivers/CMSIS/Include/core_sc000.h
rename to Firmware/Board/v3.3/Drivers/CMSIS/Include/core_sc000.h
diff --git a/Firmware/Drivers/CMSIS/Include/core_sc300.h b/Firmware/Board/v3.3/Drivers/CMSIS/Include/core_sc300.h
similarity index 100%
rename from Firmware/Drivers/CMSIS/Include/core_sc300.h
rename to Firmware/Board/v3.3/Drivers/CMSIS/Include/core_sc300.h
diff --git a/Firmware/Drivers/CMSIS/Lib/libarm_cortexM4lf_math.a b/Firmware/Board/v3.3/Drivers/CMSIS/Lib/libarm_cortexM4lf_math.a
similarity index 100%
rename from Firmware/Drivers/CMSIS/Lib/libarm_cortexM4lf_math.a
rename to Firmware/Board/v3.3/Drivers/CMSIS/Lib/libarm_cortexM4lf_math.a
diff --git a/Firmware/Drivers/DRV8301/drv8301.c b/Firmware/Board/v3.3/Drivers/DRV8301/drv8301.c
similarity index 100%
rename from Firmware/Drivers/DRV8301/drv8301.c
rename to Firmware/Board/v3.3/Drivers/DRV8301/drv8301.c
diff --git a/Firmware/Drivers/DRV8301/drv8301.h b/Firmware/Board/v3.3/Drivers/DRV8301/drv8301.h
similarity index 100%
rename from Firmware/Drivers/DRV8301/drv8301.h
rename to Firmware/Board/v3.3/Drivers/DRV8301/drv8301.h
diff --git a/Firmware/Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h b/Firmware/Board/v3.3/Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h
similarity index 100%
rename from Firmware/Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h
rename to Firmware/Board/v3.3/Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h
diff --git a/Firmware/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h b/Firmware/Board/v3.3/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h
similarity index 100%
rename from Firmware/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h
rename to Firmware/Board/v3.3/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h
diff --git a/Firmware/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_adc.h b/Firmware/Board/v3.3/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_adc.h
similarity index 100%
rename from Firmware/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_adc.h
rename to Firmware/Board/v3.3/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_adc.h
diff --git a/Firmware/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_adc_ex.h b/Firmware/Board/v3.3/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_adc_ex.h
similarity index 100%
rename from Firmware/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_adc_ex.h
rename to Firmware/Board/v3.3/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_adc_ex.h
diff --git a/Firmware/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_can.h b/Firmware/Board/v3.3/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_can.h
similarity index 100%
rename from Firmware/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_can.h
rename to Firmware/Board/v3.3/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_can.h
diff --git a/Firmware/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h b/Firmware/Board/v3.3/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h
similarity index 100%
rename from Firmware/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h
rename to Firmware/Board/v3.3/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h
diff --git a/Firmware/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h b/Firmware/Board/v3.3/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h
similarity index 100%
rename from Firmware/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h
rename to Firmware/Board/v3.3/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h
diff --git a/Firmware/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h b/Firmware/Board/v3.3/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h
similarity index 100%
rename from Firmware/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h
rename to Firmware/Board/v3.3/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h
diff --git a/Firmware/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h b/Firmware/Board/v3.3/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h
similarity index 100%
rename from Firmware/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h
rename to Firmware/Board/v3.3/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h
diff --git a/Firmware/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h b/Firmware/Board/v3.3/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h
similarity index 100%
rename from Firmware/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h
rename to Firmware/Board/v3.3/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h
diff --git a/Firmware/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h b/Firmware/Board/v3.3/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h
similarity index 100%
rename from Firmware/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h
rename to Firmware/Board/v3.3/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h
diff --git a/Firmware/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h b/Firmware/Board/v3.3/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h
similarity index 100%
rename from Firmware/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h
rename to Firmware/Board/v3.3/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h
diff --git a/Firmware/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h b/Firmware/Board/v3.3/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h
similarity index 100%
rename from Firmware/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h
rename to Firmware/Board/v3.3/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h
diff --git a/Firmware/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h b/Firmware/Board/v3.3/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h
similarity index 100%
rename from Firmware/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h
rename to Firmware/Board/v3.3/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h
diff --git a/Firmware/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h b/Firmware/Board/v3.3/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h
similarity index 100%
rename from Firmware/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h
rename to Firmware/Board/v3.3/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h
diff --git a/Firmware/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h b/Firmware/Board/v3.3/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h
similarity index 100%
rename from Firmware/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h
rename to Firmware/Board/v3.3/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h
diff --git a/Firmware/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h b/Firmware/Board/v3.3/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h
similarity index 100%
rename from Firmware/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h
rename to Firmware/Board/v3.3/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h
diff --git a/Firmware/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h b/Firmware/Board/v3.3/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h
similarity index 100%
rename from Firmware/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h
rename to Firmware/Board/v3.3/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h
diff --git a/Firmware/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h b/Firmware/Board/v3.3/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h
similarity index 100%
rename from Firmware/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h
rename to Firmware/Board/v3.3/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h
diff --git a/Firmware/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h b/Firmware/Board/v3.3/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h
similarity index 100%
rename from Firmware/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h
rename to Firmware/Board/v3.3/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h
diff --git a/Firmware/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_spi.h b/Firmware/Board/v3.3/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_spi.h
similarity index 100%
rename from Firmware/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_spi.h
rename to Firmware/Board/v3.3/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_spi.h
diff --git a/Firmware/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h b/Firmware/Board/v3.3/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h
similarity index 100%
rename from Firmware/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h
rename to Firmware/Board/v3.3/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h
diff --git a/Firmware/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h b/Firmware/Board/v3.3/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h
similarity index 100%
rename from Firmware/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h
rename to Firmware/Board/v3.3/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h
diff --git a/Firmware/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h b/Firmware/Board/v3.3/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h
similarity index 100%
rename from Firmware/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h
rename to Firmware/Board/v3.3/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h
diff --git a/Firmware/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h b/Firmware/Board/v3.3/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h
similarity index 100%
rename from Firmware/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h
rename to Firmware/Board/v3.3/Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h
diff --git a/Firmware/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c b/Firmware/Board/v3.3/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c
similarity index 100%
rename from Firmware/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c
rename to Firmware/Board/v3.3/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c
diff --git a/Firmware/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_adc.c b/Firmware/Board/v3.3/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_adc.c
similarity index 100%
rename from Firmware/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_adc.c
rename to Firmware/Board/v3.3/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_adc.c
diff --git a/Firmware/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_adc_ex.c b/Firmware/Board/v3.3/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_adc_ex.c
similarity index 100%
rename from Firmware/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_adc_ex.c
rename to Firmware/Board/v3.3/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_adc_ex.c
diff --git a/Firmware/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_can.c b/Firmware/Board/v3.3/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_can.c
similarity index 100%
rename from Firmware/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_can.c
rename to Firmware/Board/v3.3/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_can.c
diff --git a/Firmware/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c b/Firmware/Board/v3.3/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c
similarity index 100%
rename from Firmware/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c
rename to Firmware/Board/v3.3/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c
diff --git a/Firmware/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c b/Firmware/Board/v3.3/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c
similarity index 100%
rename from Firmware/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c
rename to Firmware/Board/v3.3/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c
diff --git a/Firmware/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.c b/Firmware/Board/v3.3/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.c
similarity index 100%
rename from Firmware/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.c
rename to Firmware/Board/v3.3/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.c
diff --git a/Firmware/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c b/Firmware/Board/v3.3/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c
similarity index 100%
rename from Firmware/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c
rename to Firmware/Board/v3.3/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c
diff --git a/Firmware/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c b/Firmware/Board/v3.3/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c
similarity index 100%
rename from Firmware/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c
rename to Firmware/Board/v3.3/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c
diff --git a/Firmware/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.c b/Firmware/Board/v3.3/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.c
similarity index 100%
rename from Firmware/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.c
rename to Firmware/Board/v3.3/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.c
diff --git a/Firmware/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.c b/Firmware/Board/v3.3/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.c
similarity index 100%
rename from Firmware/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.c
rename to Firmware/Board/v3.3/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.c
diff --git a/Firmware/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c b/Firmware/Board/v3.3/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c
similarity index 100%
rename from Firmware/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c
rename to Firmware/Board/v3.3/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c
diff --git a/Firmware/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.c b/Firmware/Board/v3.3/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.c
similarity index 100%
rename from Firmware/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.c
rename to Firmware/Board/v3.3/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.c
diff --git a/Firmware/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c b/Firmware/Board/v3.3/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c
similarity index 100%
rename from Firmware/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c
rename to Firmware/Board/v3.3/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c
diff --git a/Firmware/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.c b/Firmware/Board/v3.3/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.c
similarity index 100%
rename from Firmware/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.c
rename to Firmware/Board/v3.3/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.c
diff --git a/Firmware/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c b/Firmware/Board/v3.3/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c
similarity index 100%
rename from Firmware/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c
rename to Firmware/Board/v3.3/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c
diff --git a/Firmware/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c b/Firmware/Board/v3.3/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c
similarity index 100%
rename from Firmware/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c
rename to Firmware/Board/v3.3/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c
diff --git a/Firmware/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_spi.c b/Firmware/Board/v3.3/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_spi.c
similarity index 100%
rename from Firmware/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_spi.c
rename to Firmware/Board/v3.3/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_spi.c
diff --git a/Firmware/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c b/Firmware/Board/v3.3/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c
similarity index 100%
rename from Firmware/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c
rename to Firmware/Board/v3.3/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c
diff --git a/Firmware/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c b/Firmware/Board/v3.3/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c
similarity index 100%
rename from Firmware/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c
rename to Firmware/Board/v3.3/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c
diff --git a/Firmware/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c b/Firmware/Board/v3.3/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c
similarity index 100%
rename from Firmware/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c
rename to Firmware/Board/v3.3/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c
diff --git a/Firmware/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c b/Firmware/Board/v3.3/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c
similarity index 100%
rename from Firmware/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c
rename to Firmware/Board/v3.3/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c
diff --git a/Firmware/Inc/FreeRTOSConfig.h b/Firmware/Board/v3.3/Inc/FreeRTOSConfig.h
similarity index 100%
rename from Firmware/Inc/FreeRTOSConfig.h
rename to Firmware/Board/v3.3/Inc/FreeRTOSConfig.h
diff --git a/Firmware/Inc/adc.h b/Firmware/Board/v3.3/Inc/adc.h
similarity index 100%
rename from Firmware/Inc/adc.h
rename to Firmware/Board/v3.3/Inc/adc.h
diff --git a/Firmware/Inc/can.h b/Firmware/Board/v3.3/Inc/can.h
similarity index 100%
rename from Firmware/Inc/can.h
rename to Firmware/Board/v3.3/Inc/can.h
diff --git a/Firmware/Inc/dma.h b/Firmware/Board/v3.3/Inc/dma.h
similarity index 100%
rename from Firmware/Inc/dma.h
rename to Firmware/Board/v3.3/Inc/dma.h
diff --git a/Firmware/Inc/freertos_vars.h b/Firmware/Board/v3.3/Inc/freertos_vars.h
similarity index 100%
rename from Firmware/Inc/freertos_vars.h
rename to Firmware/Board/v3.3/Inc/freertos_vars.h
diff --git a/Firmware/Inc/gpio.h b/Firmware/Board/v3.3/Inc/gpio.h
similarity index 100%
rename from Firmware/Inc/gpio.h
rename to Firmware/Board/v3.3/Inc/gpio.h
diff --git a/Firmware/Inc/main.h b/Firmware/Board/v3.3/Inc/main.h
similarity index 100%
rename from Firmware/Inc/main.h
rename to Firmware/Board/v3.3/Inc/main.h
diff --git a/Firmware/Inc/mxconstants.h b/Firmware/Board/v3.3/Inc/mxconstants.h
similarity index 100%
rename from Firmware/Inc/mxconstants.h
rename to Firmware/Board/v3.3/Inc/mxconstants.h
diff --git a/Firmware/Inc/prev_board_ver/main_V3_2.h b/Firmware/Board/v3.3/Inc/prev_board_ver/main_V3_2.h
similarity index 100%
rename from Firmware/Inc/prev_board_ver/main_V3_2.h
rename to Firmware/Board/v3.3/Inc/prev_board_ver/main_V3_2.h
diff --git a/Firmware/Inc/spi.h b/Firmware/Board/v3.3/Inc/spi.h
similarity index 100%
rename from Firmware/Inc/spi.h
rename to Firmware/Board/v3.3/Inc/spi.h
diff --git a/Firmware/Inc/stm32f4xx_hal_conf.h b/Firmware/Board/v3.3/Inc/stm32f4xx_hal_conf.h
similarity index 100%
rename from Firmware/Inc/stm32f4xx_hal_conf.h
rename to Firmware/Board/v3.3/Inc/stm32f4xx_hal_conf.h
diff --git a/Firmware/Inc/stm32f4xx_it.h b/Firmware/Board/v3.3/Inc/stm32f4xx_it.h
similarity index 100%
rename from Firmware/Inc/stm32f4xx_it.h
rename to Firmware/Board/v3.3/Inc/stm32f4xx_it.h
diff --git a/Firmware/Inc/tim.h b/Firmware/Board/v3.3/Inc/tim.h
similarity index 100%
rename from Firmware/Inc/tim.h
rename to Firmware/Board/v3.3/Inc/tim.h
diff --git a/Firmware/Inc/usart.h b/Firmware/Board/v3.3/Inc/usart.h
similarity index 100%
rename from Firmware/Inc/usart.h
rename to Firmware/Board/v3.3/Inc/usart.h
diff --git a/Firmware/Inc/usb_device.h b/Firmware/Board/v3.3/Inc/usb_device.h
similarity index 100%
rename from Firmware/Inc/usb_device.h
rename to Firmware/Board/v3.3/Inc/usb_device.h
diff --git a/Firmware/Inc/usbd_cdc_if.h b/Firmware/Board/v3.3/Inc/usbd_cdc_if.h
similarity index 100%
rename from Firmware/Inc/usbd_cdc_if.h
rename to Firmware/Board/v3.3/Inc/usbd_cdc_if.h
diff --git a/Firmware/Inc/usbd_conf.h b/Firmware/Board/v3.3/Inc/usbd_conf.h
similarity index 100%
rename from Firmware/Inc/usbd_conf.h
rename to Firmware/Board/v3.3/Inc/usbd_conf.h
diff --git a/Firmware/Inc/usbd_desc.h b/Firmware/Board/v3.3/Inc/usbd_desc.h
similarity index 100%
rename from Firmware/Inc/usbd_desc.h
rename to Firmware/Board/v3.3/Inc/usbd_desc.h
diff --git a/Firmware/Board/v3.3/Makefile b/Firmware/Board/v3.3/Makefile
new file mode 100644
index 00000000..82cdc7d2
--- /dev/null
+++ b/Firmware/Board/v3.3/Makefile
@@ -0,0 +1,78 @@
+
+######################################
+# source
+######################################
+C_SOURCES = \
+ Middlewares/Third_Party/FreeRTOS/Source/queue.c \
+ Middlewares/Third_Party/FreeRTOS/Source/tasks.c \
+ Middlewares/Third_Party/FreeRTOS/Source/list.c \
+ Middlewares/Third_Party/FreeRTOS/Source/event_groups.c \
+ Middlewares/Third_Party/FreeRTOS/Source/croutine.c \
+ Middlewares/Third_Party/FreeRTOS/Source/timers.c \
+ Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM4F/port.c \
+ Middlewares/Third_Party/FreeRTOS/Source/portable/MemMang/heap_4.c \
+ Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS/cmsis_os.c \
+ Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c \
+ Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.c \
+ Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.c \
+ Middlewares/ST/STM32_USB_Device_Library/Class/CDC/Src/usbd_cdc.c \
+ Src/system_stm32f4xx.c \
+ Src/stm32f4xx_it.c \
+ Src/stm32f4xx_hal_msp.c \
+ Src/stm32f4xx_hal_timebase_TIM.c \
+ Src/tim.c \
+ Src/gpio.c \
+ Src/main.c \
+ Src/adc.c \
+ Src/freertos.c \
+ Src/spi.c \
+ Src/can.c \
+ Src/usart.c \
+ Src/dma.c \
+ Src/usbd_conf.c \
+ Src/usbd_desc.c \
+ Src/usb_device.c \
+ Drivers/DRV8301/drv8301.c \
+ Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c \
+ Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c \
+ Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c \
+ Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.c \
+ Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_spi.c \
+ Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c \
+ Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c \
+ Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c \
+ Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_can.c \
+ Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_adc.c \
+ Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c \
+ Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c \
+ Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.c \
+ Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c \
+ Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.c \
+ Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.c \
+ Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c \
+ Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_adc_ex.c \
+ Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c \
+ Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.c \
+ Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c \
+ Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c \
+ Src/usbd_cdc_if.c \
+ Src/syscalls.c
+CPP_SOURCES =
+ASM_SOURCES = \
+ startup/startup_stm32f405xx.s
+
+#######################################
+# Includes
+#######################################
+AS_INCLUDES =
+C_INCLUDES = -IMiddlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM4F \
+ -IMiddlewares/Third_Party/FreeRTOS/Source/include \
+ -IMiddlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS \
+ -IDrivers/DRV8301 \
+ -IMiddlewares/ST/STM32_USB_Device_Library/Core/Inc \
+ -IMiddlewares/ST/STM32_USB_Device_Library/Class/CDC/Inc \
+ -IDrivers/STM32F4xx_HAL_Driver/Inc \
+ -IDrivers/STM32F4xx_HAL_Driver/Inc/Legacy \
+ -IDrivers/CMSIS/Device/ST/STM32F4xx/Include \
+ -IDrivers/CMSIS/Include \
+ -IInc
diff --git a/Firmware/Middlewares/ST/STM32_USB_Device_Library/Class/CDC/Inc/usbd_cdc.h b/Firmware/Board/v3.3/Middlewares/ST/STM32_USB_Device_Library/Class/CDC/Inc/usbd_cdc.h
similarity index 100%
rename from Firmware/Middlewares/ST/STM32_USB_Device_Library/Class/CDC/Inc/usbd_cdc.h
rename to Firmware/Board/v3.3/Middlewares/ST/STM32_USB_Device_Library/Class/CDC/Inc/usbd_cdc.h
diff --git a/Firmware/Middlewares/ST/STM32_USB_Device_Library/Class/CDC/Src/usbd_cdc.c b/Firmware/Board/v3.3/Middlewares/ST/STM32_USB_Device_Library/Class/CDC/Src/usbd_cdc.c
similarity index 100%
rename from Firmware/Middlewares/ST/STM32_USB_Device_Library/Class/CDC/Src/usbd_cdc.c
rename to Firmware/Board/v3.3/Middlewares/ST/STM32_USB_Device_Library/Class/CDC/Src/usbd_cdc.c
diff --git a/Firmware/Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_core.h b/Firmware/Board/v3.3/Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_core.h
similarity index 100%
rename from Firmware/Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_core.h
rename to Firmware/Board/v3.3/Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_core.h
diff --git a/Firmware/Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ctlreq.h b/Firmware/Board/v3.3/Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ctlreq.h
similarity index 100%
rename from Firmware/Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ctlreq.h
rename to Firmware/Board/v3.3/Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ctlreq.h
diff --git a/Firmware/Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_def.h b/Firmware/Board/v3.3/Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_def.h
similarity index 100%
rename from Firmware/Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_def.h
rename to Firmware/Board/v3.3/Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_def.h
diff --git a/Firmware/Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ioreq.h b/Firmware/Board/v3.3/Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ioreq.h
similarity index 100%
rename from Firmware/Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ioreq.h
rename to Firmware/Board/v3.3/Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ioreq.h
diff --git a/Firmware/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c b/Firmware/Board/v3.3/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c
similarity index 100%
rename from Firmware/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c
rename to Firmware/Board/v3.3/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c
diff --git a/Firmware/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.c b/Firmware/Board/v3.3/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.c
similarity index 100%
rename from Firmware/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.c
rename to Firmware/Board/v3.3/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.c
diff --git a/Firmware/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.c b/Firmware/Board/v3.3/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.c
similarity index 100%
rename from Firmware/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.c
rename to Firmware/Board/v3.3/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.c
diff --git a/Firmware/Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS/cmsis_os.c b/Firmware/Board/v3.3/Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS/cmsis_os.c
similarity index 100%
rename from Firmware/Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS/cmsis_os.c
rename to Firmware/Board/v3.3/Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS/cmsis_os.c
diff --git a/Firmware/Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS/cmsis_os.h b/Firmware/Board/v3.3/Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS/cmsis_os.h
similarity index 100%
rename from Firmware/Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS/cmsis_os.h
rename to Firmware/Board/v3.3/Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS/cmsis_os.h
diff --git a/Firmware/Middlewares/Third_Party/FreeRTOS/Source/croutine.c b/Firmware/Board/v3.3/Middlewares/Third_Party/FreeRTOS/Source/croutine.c
similarity index 100%
rename from Firmware/Middlewares/Third_Party/FreeRTOS/Source/croutine.c
rename to Firmware/Board/v3.3/Middlewares/Third_Party/FreeRTOS/Source/croutine.c
diff --git a/Firmware/Middlewares/Third_Party/FreeRTOS/Source/event_groups.c b/Firmware/Board/v3.3/Middlewares/Third_Party/FreeRTOS/Source/event_groups.c
similarity index 100%
rename from Firmware/Middlewares/Third_Party/FreeRTOS/Source/event_groups.c
rename to Firmware/Board/v3.3/Middlewares/Third_Party/FreeRTOS/Source/event_groups.c
diff --git a/Firmware/Middlewares/Third_Party/FreeRTOS/Source/include/FreeRTOS.h b/Firmware/Board/v3.3/Middlewares/Third_Party/FreeRTOS/Source/include/FreeRTOS.h
similarity index 100%
rename from Firmware/Middlewares/Third_Party/FreeRTOS/Source/include/FreeRTOS.h
rename to Firmware/Board/v3.3/Middlewares/Third_Party/FreeRTOS/Source/include/FreeRTOS.h
diff --git a/Firmware/Middlewares/Third_Party/FreeRTOS/Source/include/FreeRTOSConfig_template.h b/Firmware/Board/v3.3/Middlewares/Third_Party/FreeRTOS/Source/include/FreeRTOSConfig_template.h
similarity index 100%
rename from Firmware/Middlewares/Third_Party/FreeRTOS/Source/include/FreeRTOSConfig_template.h
rename to Firmware/Board/v3.3/Middlewares/Third_Party/FreeRTOS/Source/include/FreeRTOSConfig_template.h
diff --git a/Firmware/Middlewares/Third_Party/FreeRTOS/Source/include/StackMacros.h b/Firmware/Board/v3.3/Middlewares/Third_Party/FreeRTOS/Source/include/StackMacros.h
similarity index 100%
rename from Firmware/Middlewares/Third_Party/FreeRTOS/Source/include/StackMacros.h
rename to Firmware/Board/v3.3/Middlewares/Third_Party/FreeRTOS/Source/include/StackMacros.h
diff --git a/Firmware/Middlewares/Third_Party/FreeRTOS/Source/include/croutine.h b/Firmware/Board/v3.3/Middlewares/Third_Party/FreeRTOS/Source/include/croutine.h
similarity index 100%
rename from Firmware/Middlewares/Third_Party/FreeRTOS/Source/include/croutine.h
rename to Firmware/Board/v3.3/Middlewares/Third_Party/FreeRTOS/Source/include/croutine.h
diff --git a/Firmware/Middlewares/Third_Party/FreeRTOS/Source/include/deprecated_definitions.h b/Firmware/Board/v3.3/Middlewares/Third_Party/FreeRTOS/Source/include/deprecated_definitions.h
similarity index 100%
rename from Firmware/Middlewares/Third_Party/FreeRTOS/Source/include/deprecated_definitions.h
rename to Firmware/Board/v3.3/Middlewares/Third_Party/FreeRTOS/Source/include/deprecated_definitions.h
diff --git a/Firmware/Middlewares/Third_Party/FreeRTOS/Source/include/event_groups.h b/Firmware/Board/v3.3/Middlewares/Third_Party/FreeRTOS/Source/include/event_groups.h
similarity index 100%
rename from Firmware/Middlewares/Third_Party/FreeRTOS/Source/include/event_groups.h
rename to Firmware/Board/v3.3/Middlewares/Third_Party/FreeRTOS/Source/include/event_groups.h
diff --git a/Firmware/Middlewares/Third_Party/FreeRTOS/Source/include/list.h b/Firmware/Board/v3.3/Middlewares/Third_Party/FreeRTOS/Source/include/list.h
similarity index 100%
rename from Firmware/Middlewares/Third_Party/FreeRTOS/Source/include/list.h
rename to Firmware/Board/v3.3/Middlewares/Third_Party/FreeRTOS/Source/include/list.h
diff --git a/Firmware/Middlewares/Third_Party/FreeRTOS/Source/include/mpu_prototypes.h b/Firmware/Board/v3.3/Middlewares/Third_Party/FreeRTOS/Source/include/mpu_prototypes.h
similarity index 100%
rename from Firmware/Middlewares/Third_Party/FreeRTOS/Source/include/mpu_prototypes.h
rename to Firmware/Board/v3.3/Middlewares/Third_Party/FreeRTOS/Source/include/mpu_prototypes.h
diff --git a/Firmware/Middlewares/Third_Party/FreeRTOS/Source/include/mpu_wrappers.h b/Firmware/Board/v3.3/Middlewares/Third_Party/FreeRTOS/Source/include/mpu_wrappers.h
similarity index 100%
rename from Firmware/Middlewares/Third_Party/FreeRTOS/Source/include/mpu_wrappers.h
rename to Firmware/Board/v3.3/Middlewares/Third_Party/FreeRTOS/Source/include/mpu_wrappers.h
diff --git a/Firmware/Middlewares/Third_Party/FreeRTOS/Source/include/portable.h b/Firmware/Board/v3.3/Middlewares/Third_Party/FreeRTOS/Source/include/portable.h
similarity index 100%
rename from Firmware/Middlewares/Third_Party/FreeRTOS/Source/include/portable.h
rename to Firmware/Board/v3.3/Middlewares/Third_Party/FreeRTOS/Source/include/portable.h
diff --git a/Firmware/Middlewares/Third_Party/FreeRTOS/Source/include/projdefs.h b/Firmware/Board/v3.3/Middlewares/Third_Party/FreeRTOS/Source/include/projdefs.h
similarity index 100%
rename from Firmware/Middlewares/Third_Party/FreeRTOS/Source/include/projdefs.h
rename to Firmware/Board/v3.3/Middlewares/Third_Party/FreeRTOS/Source/include/projdefs.h
diff --git a/Firmware/Middlewares/Third_Party/FreeRTOS/Source/include/queue.h b/Firmware/Board/v3.3/Middlewares/Third_Party/FreeRTOS/Source/include/queue.h
similarity index 100%
rename from Firmware/Middlewares/Third_Party/FreeRTOS/Source/include/queue.h
rename to Firmware/Board/v3.3/Middlewares/Third_Party/FreeRTOS/Source/include/queue.h
diff --git a/Firmware/Middlewares/Third_Party/FreeRTOS/Source/include/semphr.h b/Firmware/Board/v3.3/Middlewares/Third_Party/FreeRTOS/Source/include/semphr.h
similarity index 100%
rename from Firmware/Middlewares/Third_Party/FreeRTOS/Source/include/semphr.h
rename to Firmware/Board/v3.3/Middlewares/Third_Party/FreeRTOS/Source/include/semphr.h
diff --git a/Firmware/Middlewares/Third_Party/FreeRTOS/Source/include/task.h b/Firmware/Board/v3.3/Middlewares/Third_Party/FreeRTOS/Source/include/task.h
similarity index 100%
rename from Firmware/Middlewares/Third_Party/FreeRTOS/Source/include/task.h
rename to Firmware/Board/v3.3/Middlewares/Third_Party/FreeRTOS/Source/include/task.h
diff --git a/Firmware/Middlewares/Third_Party/FreeRTOS/Source/include/timers.h b/Firmware/Board/v3.3/Middlewares/Third_Party/FreeRTOS/Source/include/timers.h
similarity index 100%
rename from Firmware/Middlewares/Third_Party/FreeRTOS/Source/include/timers.h
rename to Firmware/Board/v3.3/Middlewares/Third_Party/FreeRTOS/Source/include/timers.h
diff --git a/Firmware/Middlewares/Third_Party/FreeRTOS/Source/list.c b/Firmware/Board/v3.3/Middlewares/Third_Party/FreeRTOS/Source/list.c
similarity index 100%
rename from Firmware/Middlewares/Third_Party/FreeRTOS/Source/list.c
rename to Firmware/Board/v3.3/Middlewares/Third_Party/FreeRTOS/Source/list.c
diff --git a/Firmware/Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM4F/port.c b/Firmware/Board/v3.3/Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM4F/port.c
similarity index 100%
rename from Firmware/Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM4F/port.c
rename to Firmware/Board/v3.3/Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM4F/port.c
diff --git a/Firmware/Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM4F/portmacro.h b/Firmware/Board/v3.3/Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM4F/portmacro.h
similarity index 100%
rename from Firmware/Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM4F/portmacro.h
rename to Firmware/Board/v3.3/Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM4F/portmacro.h
diff --git a/Firmware/Middlewares/Third_Party/FreeRTOS/Source/portable/MemMang/heap_4.c b/Firmware/Board/v3.3/Middlewares/Third_Party/FreeRTOS/Source/portable/MemMang/heap_4.c
similarity index 100%
rename from Firmware/Middlewares/Third_Party/FreeRTOS/Source/portable/MemMang/heap_4.c
rename to Firmware/Board/v3.3/Middlewares/Third_Party/FreeRTOS/Source/portable/MemMang/heap_4.c
diff --git a/Firmware/Middlewares/Third_Party/FreeRTOS/Source/queue.c b/Firmware/Board/v3.3/Middlewares/Third_Party/FreeRTOS/Source/queue.c
similarity index 100%
rename from Firmware/Middlewares/Third_Party/FreeRTOS/Source/queue.c
rename to Firmware/Board/v3.3/Middlewares/Third_Party/FreeRTOS/Source/queue.c
diff --git a/Firmware/Middlewares/Third_Party/FreeRTOS/Source/tasks.c b/Firmware/Board/v3.3/Middlewares/Third_Party/FreeRTOS/Source/tasks.c
similarity index 100%
rename from Firmware/Middlewares/Third_Party/FreeRTOS/Source/tasks.c
rename to Firmware/Board/v3.3/Middlewares/Third_Party/FreeRTOS/Source/tasks.c
diff --git a/Firmware/Middlewares/Third_Party/FreeRTOS/Source/timers.c b/Firmware/Board/v3.3/Middlewares/Third_Party/FreeRTOS/Source/timers.c
similarity index 100%
rename from Firmware/Middlewares/Third_Party/FreeRTOS/Source/timers.c
rename to Firmware/Board/v3.3/Middlewares/Third_Party/FreeRTOS/Source/timers.c
diff --git a/Firmware/Odrive.ioc b/Firmware/Board/v3.3/Odrive.ioc
similarity index 100%
rename from Firmware/Odrive.ioc
rename to Firmware/Board/v3.3/Odrive.ioc
diff --git a/Firmware/STM32F405RGTx_FLASH.ld b/Firmware/Board/v3.3/STM32F405RGTx_FLASH.ld
similarity index 100%
rename from Firmware/STM32F405RGTx_FLASH.ld
rename to Firmware/Board/v3.3/STM32F405RGTx_FLASH.ld
diff --git a/Firmware/Src/adc.c b/Firmware/Board/v3.3/Src/adc.c
similarity index 100%
rename from Firmware/Src/adc.c
rename to Firmware/Board/v3.3/Src/adc.c
diff --git a/Firmware/Src/can.c b/Firmware/Board/v3.3/Src/can.c
similarity index 100%
rename from Firmware/Src/can.c
rename to Firmware/Board/v3.3/Src/can.c
diff --git a/Firmware/Src/dma.c b/Firmware/Board/v3.3/Src/dma.c
similarity index 100%
rename from Firmware/Src/dma.c
rename to Firmware/Board/v3.3/Src/dma.c
diff --git a/Firmware/Src/freertos.c b/Firmware/Board/v3.3/Src/freertos.c
similarity index 100%
rename from Firmware/Src/freertos.c
rename to Firmware/Board/v3.3/Src/freertos.c
diff --git a/Firmware/Src/gpio.c b/Firmware/Board/v3.3/Src/gpio.c
similarity index 100%
rename from Firmware/Src/gpio.c
rename to Firmware/Board/v3.3/Src/gpio.c
diff --git a/Firmware/Src/main.c b/Firmware/Board/v3.3/Src/main.c
similarity index 100%
rename from Firmware/Src/main.c
rename to Firmware/Board/v3.3/Src/main.c
diff --git a/Firmware/Src/prev_board_ver/adc_V3_2.c b/Firmware/Board/v3.3/Src/prev_board_ver/adc_V3_2.c
similarity index 100%
rename from Firmware/Src/prev_board_ver/adc_V3_2.c
rename to Firmware/Board/v3.3/Src/prev_board_ver/adc_V3_2.c
diff --git a/Firmware/Src/prev_board_ver/gpio_V3_2.c b/Firmware/Board/v3.3/Src/prev_board_ver/gpio_V3_2.c
similarity index 100%
rename from Firmware/Src/prev_board_ver/gpio_V3_2.c
rename to Firmware/Board/v3.3/Src/prev_board_ver/gpio_V3_2.c
diff --git a/Firmware/Src/spi.c b/Firmware/Board/v3.3/Src/spi.c
similarity index 100%
rename from Firmware/Src/spi.c
rename to Firmware/Board/v3.3/Src/spi.c
diff --git a/Firmware/Src/stm32f4xx_hal_msp.c b/Firmware/Board/v3.3/Src/stm32f4xx_hal_msp.c
similarity index 100%
rename from Firmware/Src/stm32f4xx_hal_msp.c
rename to Firmware/Board/v3.3/Src/stm32f4xx_hal_msp.c
diff --git a/Firmware/Src/stm32f4xx_hal_timebase_TIM.c b/Firmware/Board/v3.3/Src/stm32f4xx_hal_timebase_TIM.c
similarity index 100%
rename from Firmware/Src/stm32f4xx_hal_timebase_TIM.c
rename to Firmware/Board/v3.3/Src/stm32f4xx_hal_timebase_TIM.c
diff --git a/Firmware/Src/stm32f4xx_it.c b/Firmware/Board/v3.3/Src/stm32f4xx_it.c
similarity index 100%
rename from Firmware/Src/stm32f4xx_it.c
rename to Firmware/Board/v3.3/Src/stm32f4xx_it.c
diff --git a/Firmware/Src/syscalls.c b/Firmware/Board/v3.3/Src/syscalls.c
similarity index 100%
rename from Firmware/Src/syscalls.c
rename to Firmware/Board/v3.3/Src/syscalls.c
diff --git a/Firmware/Src/system_stm32f4xx.c b/Firmware/Board/v3.3/Src/system_stm32f4xx.c
similarity index 100%
rename from Firmware/Src/system_stm32f4xx.c
rename to Firmware/Board/v3.3/Src/system_stm32f4xx.c
diff --git a/Firmware/Src/tim.c b/Firmware/Board/v3.3/Src/tim.c
similarity index 100%
rename from Firmware/Src/tim.c
rename to Firmware/Board/v3.3/Src/tim.c
diff --git a/Firmware/Src/usart.c b/Firmware/Board/v3.3/Src/usart.c
similarity index 100%
rename from Firmware/Src/usart.c
rename to Firmware/Board/v3.3/Src/usart.c
diff --git a/Firmware/Src/usb_device.c b/Firmware/Board/v3.3/Src/usb_device.c
similarity index 100%
rename from Firmware/Src/usb_device.c
rename to Firmware/Board/v3.3/Src/usb_device.c
diff --git a/Firmware/Src/usbd_cdc_if.c b/Firmware/Board/v3.3/Src/usbd_cdc_if.c
similarity index 100%
rename from Firmware/Src/usbd_cdc_if.c
rename to Firmware/Board/v3.3/Src/usbd_cdc_if.c
diff --git a/Firmware/Src/usbd_conf.c b/Firmware/Board/v3.3/Src/usbd_conf.c
similarity index 100%
rename from Firmware/Src/usbd_conf.c
rename to Firmware/Board/v3.3/Src/usbd_conf.c
diff --git a/Firmware/Src/usbd_desc.c b/Firmware/Board/v3.3/Src/usbd_desc.c
similarity index 100%
rename from Firmware/Src/usbd_desc.c
rename to Firmware/Board/v3.3/Src/usbd_desc.c
diff --git a/Firmware/startup/startup_stm32f405xx.s b/Firmware/Board/v3.3/startup/startup_stm32f405xx.s
similarity index 100%
rename from Firmware/startup/startup_stm32f405xx.s
rename to Firmware/Board/v3.3/startup/startup_stm32f405xx.s
diff --git a/Firmware/CHANGELOG.md b/Firmware/CHANGELOG.md
index 10c8cadd..7c9738c1 100644
--- a/Firmware/CHANGELOG.md
+++ b/Firmware/CHANGELOG.md
@@ -7,6 +7,10 @@ Please add a note of your changes below this heading if you make a PR
* DRV status read script
* Microsecond delay function
* Ability to start anticogging calibration over USB protocol
+* Travis-CI
+
+### Changed
+* Build system is now tup instead of make
## [0.3.4] - 2018-02-13
diff --git a/Firmware/Makefile b/Firmware/Makefile
index 3ad6d167..347ae37d 100644
--- a/Firmware/Makefile
+++ b/Firmware/Makefile
@@ -1,213 +1,27 @@
-######################################
-# Makefile by CubeMX2Makefile.py
-######################################
-######################################
-# target
-######################################
-TARGET = ODriveFirmware
+# This is only a stub for various commands.
+# Tup is used for the actual compilation.
-######################################
-# building variables
-######################################
-# debug build?
-DEBUG = 1
-# optimization
-OPT = -Og -ffast-math
-
-#######################################
-# pathes
-#######################################
-# Build path
BUILD_DIR = build
+FIRMWARE = $(BUILD_DIR)/ODriveFirmware.elf
-######################################
-# source
-######################################
-C_SOURCES = \
- Middlewares/Third_Party/FreeRTOS/Source/queue.c \
- Middlewares/Third_Party/FreeRTOS/Source/tasks.c \
- Middlewares/Third_Party/FreeRTOS/Source/list.c \
- Middlewares/Third_Party/FreeRTOS/Source/event_groups.c \
- Middlewares/Third_Party/FreeRTOS/Source/croutine.c \
- Middlewares/Third_Party/FreeRTOS/Source/timers.c \
- Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM4F/port.c \
- Middlewares/Third_Party/FreeRTOS/Source/portable/MemMang/heap_4.c \
- Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS/cmsis_os.c \
- Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c \
- Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.c \
- Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.c \
- Middlewares/ST/STM32_USB_Device_Library/Class/CDC/Src/usbd_cdc.c \
- Src/system_stm32f4xx.c \
- Src/stm32f4xx_it.c \
- Src/stm32f4xx_hal_msp.c \
- Src/stm32f4xx_hal_timebase_TIM.c \
- Src/tim.c \
- Src/gpio.c \
- Src/main.c \
- Src/adc.c \
- Src/freertos.c \
- Src/spi.c \
- Src/can.c \
- Src/usart.c \
- Src/dma.c \
- Src/usbd_conf.c \
- Src/usbd_desc.c \
- Src/usb_device.c \
- Drivers/DRV8301/drv8301.c \
- Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.c \
- Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.c \
- Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.c \
- Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.c \
- Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_spi.c \
- Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.c \
- Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.c \
- Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.c \
- Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_can.c \
- Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_adc.c \
- Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.c \
- Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.c \
- Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.c \
- Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.c \
- Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.c \
- Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.c \
- Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.c \
- Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_adc_ex.c \
- Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.c \
- Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.c \
- Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.c \
- Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c \
- Src/usbd_cdc_if.c \
- Src/syscalls.c \
- MotorControl/utils.c \
- MotorControl/legacy_commands.c \
- MotorControl/low_level.c
-CPP_SOURCES = \
- MotorControl/axis.cpp \
- MotorControl/commands.cpp \
- MotorControl/protocol.cpp
-ASM_SOURCES = \
- startup/startup_stm32f405xx.s
+all:
+ @tup --quiet
-#######################################
-# binaries
-#######################################
-CC = arm-none-eabi-gcc
-CXX = arm-none-eabi-g++
-AS = arm-none-eabi-gcc -x assembler-with-cpp
-CP = arm-none-eabi-objcopy
-AR = arm-none-eabi-ar
-SZ = arm-none-eabi-size
-HEX = $(CP) -O ihex
-BIN = $(CP) -O binary -S
-
-#######################################
-# CFLAGS
-#######################################
-# macros for gcc
-AS_DEFS =
-C_DEFS = -D__weak="__attribute__((weak))" -D__packed="__attribute__((__packed__))" -DUSE_HAL_DRIVER -DSTM32F405xx
-# includes for gcc
-AS_INCLUDES =
-C_INCLUDES = -IMiddlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM4F
-C_INCLUDES += -IMiddlewares/Third_Party/FreeRTOS/Source/include
-C_INCLUDES += -IMiddlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS
-C_INCLUDES += -IDrivers/DRV8301
-C_INCLUDES += -IMiddlewares/ST/STM32_USB_Device_Library/Core/Inc
-C_INCLUDES += -IMiddlewares/ST/STM32_USB_Device_Library/Class/CDC/Inc
-C_INCLUDES += -IDrivers/STM32F4xx_HAL_Driver/Inc
-C_INCLUDES += -IDrivers/STM32F4xx_HAL_Driver/Inc/Legacy
-C_INCLUDES += -IDrivers/CMSIS/Device/ST/STM32F4xx/Include
-C_INCLUDES += -IDrivers/CMSIS/Include
-C_INCLUDES += -IInc
-C_INCLUDES += -IMotorControl
-# compile gcc flags
-ASFLAGS = -mthumb -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard $(AS_DEFS) $(AS_INCLUDES) $(OPT) -Wall -fdata-sections -ffunction-sections
-CFLAGS = -mthumb -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard $(C_DEFS) $(C_INCLUDES) $(OPT) -Wall -fdata-sections -ffunction-sections
-CXXFLAGS = -mthumb -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard $(C_DEFS) $(C_INCLUDES) $(OPT) -Wall -fdata-sections -ffunction-sections
-ifeq ($(DEBUG), 1)
-CFLAGS += -g -gdwarf-2
-CXXFLAGS += -g -gdwarf-2
-endif
-# Generate dependency information
-CFLAGS += -std=c99 -MD -MP -MF .dep/$(@F).d
-CXXFLAGS += -std=c++14 -MD -MP -MF .dep/$(@F).d
+flash: all
+ openocd -f interface/stlink-v2.cfg -f target/stm32f4x.cfg -c init -c reset\ halt -c flash\ write_image\ erase\ $(FIRMWARE) -c reset\ run -c exit
-#######################################
-# LDFLAGS
-#######################################
-# link script
-LDSCRIPT = STM32F405RGTx_FLASH.ld
-# libraries
-LIBS = -lc -lm -lnosys -larm_cortexM4lf_math
-LIBDIR = -LDrivers/CMSIS/Lib
-LDFLAGS = -mthumb -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard -specs=nosys.specs -specs=nano.specs -u _printf_float -u _scanf_float $(OPT) -T$(LDSCRIPT) $(LIBDIR) $(LIBS) -Wl,-Map=$(BUILD_DIR)/$(TARGET).map,--cref -Wl,--gc-sections
+gdb: all
+ arm-none-eabi-gdb $(FIRMWARE) -x openocd.gdbinit
-# default action: build all
-all: $(BUILD_DIR)/$(TARGET).elf $(BUILD_DIR)/$(TARGET).hex $(BUILD_DIR)/$(TARGET).bin
-
-#######################################
-# build the application
-#######################################
-# list of objects
-OBJECTS = $(addprefix $(BUILD_DIR)/,$(notdir $(C_SOURCES:.c=.o)))
-vpath %.c $(sort $(dir $(C_SOURCES)))
-# list of C++ objects
-OBJECTS += $(addprefix $(BUILD_DIR)/,$(notdir $(CPP_SOURCES:.cpp=.o)))
-vpath %.cpp $(sort $(dir $(CPP_SOURCES)))
-# list of ASM program objects
-OBJECTS += $(addprefix $(BUILD_DIR)/,$(notdir $(ASM_SOURCES:.s=.o)))
-vpath %.s $(sort $(dir $(ASM_SOURCES)))
-
-$(BUILD_DIR)/%.o: %.c Makefile | $(BUILD_DIR)
- @$(CC) -c $(CFLAGS) -Wa,-a,-ad,-alms=$(BUILD_DIR)/$(notdir $(<:.c=.lst)) $< -o $@
-
-$(BUILD_DIR)/%.o: %.cpp Makefile | $(BUILD_DIR)
- @$(CXX) -c $(CXXFLAGS) -Wa,-a,-ad,-alms=$(BUILD_DIR)/$(notdir $(<:.cpp=.lst)) $< -o $@
-
-$(BUILD_DIR)/%.o: %.s Makefile | $(BUILD_DIR)
- @$(AS) -c $(CFLAGS) $< -o $@
-
-$(BUILD_DIR)/$(TARGET).elf: $(OBJECTS) Makefile
- @$(CXX) $(OBJECTS) $(LDFLAGS) -o $@
- $(SZ) $@
-
-$(BUILD_DIR)/%.hex: $(BUILD_DIR)/%.elf | $(BUILD_DIR)
- @$(HEX) $< $@
-
-$(BUILD_DIR)/%.bin: $(BUILD_DIR)/%.elf | $(BUILD_DIR)
- @$(BIN) $< $@
-
-$(BUILD_DIR):
- mkdir -p $@
-
-#######################################
-# clean up
-#######################################
-clean:
- -rm -fR .dep $(BUILD_DIR)
-
-#######################################
-# flashing / debug
-#######################################
-
-flash: $(BUILD_DIR)/$(TARGET).elf
- openocd -f interface/stlink-v2.cfg -f target/stm32f4x.cfg -c init -c reset\ halt -c flash\ write_image\ erase\ $(BUILD_DIR)/$(TARGET).elf -c reset\ run -c exit
-
-gdb: $(BUILD_DIR)/$(TARGET).elf
- arm-none-eabi-gdb $(BUILD_DIR)/$(TARGET).elf -x openocd.gdbinit
-
-bmp: $(BUILD_DIR)/$(TARGET).elf
+bmp: all
arm-none-eabi-gdb --ex 'target extended-remote /dev/stlink' \
--ex 'monitor swdp_scan' \
--ex 'attach 1' \
- --ex 'load' $(BUILD_DIR)/$(TARGET).elf
+ --ex 'load' $(FIRMWARE)
-#######################################
-# dependencies
-#######################################
--include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)
+clean:
+ -rm -fR .dep $(BUILD_DIR)
-.PHONY: clean all flash gdb
+.PHONY: all flash gdb bmp clean
-# *** EOF ***
diff --git a/Firmware/README.md b/Firmware/README.md
index bd9602bd..424042a7 100644
--- a/Firmware/README.md
+++ b/Firmware/README.md
@@ -120,26 +120,34 @@ To compile the program, you first need to install the prerequisite tools:
#### Linux:
* `gcc-arm-none-eabi`: GCC compilation toolchain for ARM microcontrollers.
* Installing on Ubuntu: `sudo apt-get install gcc-arm-none-eabi`
+ * Installing on Arch Linux: `sudo pacman -S arm-none-eabi-gcc arm-none-eabi-binutils`
* `gdb-arm-none-eabi`: GNU project debugger for ARM microcontrollers.
* Installing on Ubuntu: `sudo apt-get install gdb-arm-none-eabi`
+ * Installing on Arch Linux: `sudo pacman -S arm-none-eabi-gdb`
* `OpenOCD`: Open On-Chip Debugging tools. This is what we use to flash the code onto the microcontroller.
* Installing on Ubuntu: `sudo apt-get install openocd`
+ * Installing on Arch Linux: build and install the [AUR package](https://aur.archlinux.org/packages/openocd/)
+* `tup`: Used as a build tool
+ * Installing on Ubuntu: `sudo apt-add-repository 'deb http://ppa.launchpad.net/anatol/tup/ubuntu precise main'; sudo apt-get update; sudo apt-get install tup`
+ * Installing on Arch Linux: `sudo pacman -S tup`
* No additional USB CDC driver should be required on Linux.
#### Mac:
* `brew cask install gcc-arm-embedded`: GCC toolchain+debugger
+* `brew tap homebrew/fuse; brew install homebrew/fuse/tup`: Build tool
* `brew install openocd`: Programmer
#### Windows:
Install the following:
* [Git for windows](https://git-scm.com/download/win). This intalls the Git Bash, which is a unix style command line interface that we will be using.
* [GNU ARM Embedded Toolchain](https://developer.arm.com/open-source/gnu-toolchain/gnu-rm/downloads). The cross-compiler used to compile the code. Download and install the "Windows 32-bit" version. Make sure to tick the "add to path" option.
-* [Make for Windows](http://gnuwin32.sourceforge.net/packages/make.htm). Make is used to script the compilation process. Download and run the complete package setup program. Add the path of the binaries to your PATH environment variable. For me this was at `C:\Program Files (x86)\GnuWin32\bin`. For details on how to set your path envirment in windows see [these instructions.](https://www.java.com/en/download/help/path.xml)
+* [Tup](http://gittup.org/tup/index.html) is used to script the compilation process. Unpack the zip-folder. Then add the path that contains the executable (something like `C:\Users\yourname\the\place\you\unzipped\tup-latest`) to your PATH environment variable. For details on how to set your path envirment in windows see [these instructions.](https://www.java.com/en/download/help/path.xml)
+* [Make for Windows](http://gnuwin32.sourceforge.net/packages/make.htm). This is optional and mainly used because commands are short and developers are used to it. If you don't want to use it, you can look at the Makefile to get the corresponding commands. Download and run the complete package setup program. Add the path of the binaries to your PATH environment variable. For me this was at `C:\Program Files (x86)\GnuWin32\bin`.
* OpenOCD. Follow the instructions at [GNU ARM Eclipse - How to install the OpenOCD binaries](http://gnuarmeclipse.github.io/openocd/install/), including the part about ST-LINK/V2 drivers. Add the path of the binaries to your PATH environment variable. For me this was at `C:\Program Files\GNU ARM Eclipse\OpenOCD\0.10.0-201704182147-dev\bin`.
## Setting up an IDE
-ODrive is a Makefile project. It does not require an IDE, but the open-source IDE VSCode is recommended. It is also possible to use Eclipse. If you'd like to go that route, please see the respective configuration document:
+For working with the ODrive code you don't need an IDE, but the open-source IDE VSCode is recommended. It is also possible to use Eclipse. If you'd like to go that route, please see the respective configuration document:
* [Configuring VSCode](configuring-vscode.md)
* [Configuring Eclipse](configuring-eclipse.md)
diff --git a/Firmware/Tupfile.lua b/Firmware/Tupfile.lua
new file mode 100644
index 00000000..3885d8bd
--- /dev/null
+++ b/Firmware/Tupfile.lua
@@ -0,0 +1,76 @@
+
+tup.include('build.lua')
+
+boarddir = 'Board/v3.3'
+
+
+-- C-specific flags
+FLAGS += '-D__weak="__attribute__((weak))"'
+FLAGS += '-D__packed="__attribute__((__packed__))"'
+FLAGS += '-DUSE_HAL_DRIVER'
+FLAGS += '-DSTM32F405xx'
+
+FLAGS += '-mthumb'
+FLAGS += '-mcpu=cortex-m4'
+FLAGS += '-mfpu=fpv4-sp-d16'
+FLAGS += '-mfloat-abi=hard'
+FLAGS += { '-Wall', '-fdata-sections', '-ffunction-sections'}
+
+if tup.getconfig('DEBUG') == 'y' then
+ --C_FLAGS += '-g -gdwarf-2'
+ FLAGS += '-g -gdwarf-2'
+end
+
+-- linker flags
+LDFLAGS += '-T'..boarddir..'/STM32F405RGTx_FLASH.ld'
+LDFLAGS += '-L'..boarddir..'/Drivers/CMSIS/Lib' -- lib dir
+LDFLAGS += '-lc -lm -lnosys -larm_cortexM4lf_math' -- libs
+LDFLAGS += '-mthumb -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard -specs=nosys.specs -specs=nano.specs -u _printf_float -u _scanf_float -Wl,--cref -Wl,--gc-sections'
+
+
+-- common flags for ASM, C and C++
+OPT += '-Og'
+OPT += '-ffast-math'
+tup.append_table(FLAGS, OPT)
+tup.append_table(LDFLAGS, OPT)
+
+toolchain = GCCToolchain('arm-none-eabi-', 'build', FLAGS, LDFLAGS)
+
+
+-- Load list of source files Makefile that was autogenerated by CubeMX
+vars = parse_makefile_vars(boarddir..'/Makefile')
+all_stm_sources = (vars['C_SOURCES'] or '')..' '..(vars['CPP_SOURCES'] or '')..' '..(vars['ASM_SOURCES'] or '')
+for src in string.gmatch(all_stm_sources, "%S+") do
+ stm_sources += boarddir..'/'..src
+end
+for src in string.gmatch(vars['C_INCLUDES'] or '', "%S+") do
+ stm_includes += boarddir..'/'..string.sub(src, 3, -1) -- remove "-I" from each include path
+end
+
+stm_includes += 'MotorControl'
+build{
+ name='stm_platform',
+ type='objects',
+ toolchains={toolchain},
+ packages={},
+ sources=stm_sources,
+ includes=stm_includes
+}
+
+build{
+ name='ODriveFirmware',
+ toolchains={toolchain},
+ --toolchains={LLVMToolchain('x86_64', {'-Ofast'}, {'-flto'})},
+ packages={'stm_platform'},
+ sources={
+ 'MotorControl/utils.c',
+ 'MotorControl/legacy_commands.c',
+ 'MotorControl/low_level.c',
+ 'MotorControl/axis.cpp',
+ 'MotorControl/commands.cpp',
+ 'MotorControl/protocol.cpp'
+ },
+ includes={
+ 'MotorControl'
+ }
+}
diff --git a/Firmware/build.lua b/Firmware/build.lua
new file mode 100644
index 00000000..ba5ecc30
--- /dev/null
+++ b/Firmware/build.lua
@@ -0,0 +1,168 @@
+
+-- This file contains support functions for Tupfile.lua
+
+function trim(s)
+ return (s:gsub("^%s*(.-)%s*$", "%1"))
+end
+
+function string:split(sep)
+ local sep, fields = sep or ":", {}
+ local pattern = string.format("([^%s]+)", sep)
+ self:gsub(pattern, function(c) fields[#fields+1] = c end)
+ return fields
+end
+
+-- Very basic parser to retrieve variables from a Makefile
+function parse_makefile_vars(makefile)
+ vars = {}
+ current_var = nil
+ for line in io.lines(tup.getcwd()..'/'..makefile) do
+ if current_var == nil then
+ i,j = string.find(line, "+=")
+ if not i then
+ i,j = string.find(line, "=")
+ end
+ if i then
+ current_var = trim(string.sub(line, 1, i-1))
+ vars[current_var] = vars[current_var] or ''
+ line = string.sub(line, j+1, -1)
+ --print("varname: "..varname.." the rest: "..line)
+ end
+ end
+
+ if current_var != nil then
+ --print("append chunk "..trim(line).." to "..current_var)
+ vars[current_var] = vars[current_var]..' '..trim(line)
+ if string.sub(vars[current_var], -1) == '\\' then
+ vars[current_var] = string.sub(vars[current_var], 1, -2)
+ else
+ current_var = nil
+ end
+ end
+ end
+ return vars
+end
+
+
+
+
+function GCCToolchain(prefix, builddir, compiler_flags, linker_flags)
+
+ -- add some default compiler flags
+ compiler_flags += '-fstack-usage'
+
+ gcc_generic_compiler = function(compiler, compiler_flags, gen_su_file, src, flags, includes, outputs)
+ -- convert include list to flags
+ inc_flags = {}
+ for _,inc in pairs(includes) do
+ inc_flags += "-I"..inc
+ end
+ -- todo: vary build directory
+ obj_file = builddir.."/"..src:gsub("/","_")..".o"
+ outputs.object_files += obj_file
+ if gen_su_file then
+ su_file = builddir.."/"..src:gsub("/","_")..".su"
+ extra_outputs = { su_file }
+ outputs.su_files += su_file
+ else
+ extra_outputs = {}
+ end
+ tup.frule{
+ inputs= { src },
+ command=compiler..' -c %f '..
+ tostring(compiler_flags)..' '.. -- CFLAGS for this compiler
+ tostring(inc_flags)..' '.. -- CFLAGS for this translation unit
+ tostring(flags).. -- CFLAGS for this translation unit
+ ' -o %o',
+ outputs={obj_file,extra_outputs=extra_outputs}
+ }
+ end
+ return {
+ compile_c = function(src, flags, includes, outputs) gcc_generic_compiler(prefix..'gcc -std=c99', compiler_flags, true, src, flags, includes, outputs) end,
+ compile_cpp = function(src, flags, includes, outputs) gcc_generic_compiler(prefix..'g++ -std=c++14', compiler_flags, true, src, flags, includes, outputs) end,
+ compile_asm = function(src, flags, includes, outputs) gcc_generic_compiler(prefix..'gcc -x assembler-with-cpp', compiler_flags, false, src, flags, includes, outputs) end,
+ link = function(objects, output_name)
+ output_name = builddir..'/'..output_name
+ tup.frule{
+ inputs=objects,
+ command=prefix..'g++ %f '..
+ tostring(linker_flags)..' '..
+ '-Wl,-Map=%O.map'..
+ ' -o %o',
+ outputs={output_name..'.elf', extra_outputs={output_name..'.map'}}
+ }
+ -- display the size
+ tup.frule{inputs={output_name..'.elf'}, command=prefix..'size %f'}
+ -- create *.hex and *.bin output formats
+ tup.frule{inputs={output_name..'.elf'}, command=prefix..'objcopy -O ihex %f %o', outputs={output_name..'.hex'}}
+ tup.frule{inputs={output_name..'.elf'}, command=prefix..'objcopy -O binary -S %f %o', outputs={output_name..'.bin'}}
+ end
+ }
+end
+
+all_packages = {}
+
+-- toolchains: Each element of this list is a collection of functions, such as compile_c, link, ...
+-- You can create a new toolchain object for each platform you want to build for.
+function build(args)
+ if args.toolchain == nil then args.toolchain = {} end
+ if args.sources == nil then args.sources = {} end
+ if args.includes == nil then args.includes = {} end
+ if args.packages == nil then args.packages = {} end
+ if args.c_flags == nil then args.c_flags = {} end
+ if args.cpp_flags == nil then args.cpp_flags = {} end
+ if args.asm_flags == nil then args.asm_flags = {} end
+ if args.ld_flags == nil then args.ld_flags = {} end
+ if args.linker_objects == nil then args.linker_objects = {} end
+
+ -- add includes of other packages
+ for _,pkg_name in pairs(args.packages) do
+ --print('depend on package '..pkg_name)
+ pkg = all_packages[pkg_name]
+ if pkg == nil then
+ error("unknown package "..pkg_name)
+ end
+ -- add path of each include
+ for _,inc in pairs(pkg.includes or {}) do
+ args.includes += tostring(inc)
+ end
+ tup.append_table(args.linker_objects, pkg.object_files)
+ end
+
+ -- run everything once for every toolchain
+ for _,toolchain in pairs(args.toolchains) do
+ -- compile
+ outputs = {}
+ for _,src in pairs(args.sources) do
+ --print("compile "..src)
+ if tup.ext(src) == 'c' then
+ toolchain.compile_c(src, args.c_flags, args.includes, outputs)
+ elseif tup.ext(src) == 'cpp' then
+ toolchain.compile_cpp(src, args.cpp_flags, args.includes, outputs)
+ elseif tup.ext(src) == 's' or tup.ext(src) == 'asm' then
+ toolchain.compile_asm(src, args.asm_flags, args.includes, outputs)
+ else
+ error('unrecognized file ending')
+ end
+ end
+
+ -- link
+ if outputs.object_files != nil and args.type != 'objects' then
+ tup.append_table(args.linker_objects, outputs.object_files)
+ toolchain.link(args.linker_objects, args.name)
+ end
+
+ outputs.includes = {}
+ for _,inc in pairs(args.includes) do
+ table.insert(outputs.includes, tup.nodevariable(inc))
+ end
+ if args.name != nil then
+ all_packages[args.name] = outputs
+ end
+ end
+
+ --for k,v in pairs(all_packages) do
+ -- print('have package '..k)
+ --end
+end
+
diff --git a/README.md b/README.md
index 2c93fd63..192a3c6b 100644
--- a/README.md
+++ b/README.md
@@ -2,6 +2,11 @@
This project is all about accurately driving brushless motors, for cheap. The aim is to make it possible to use inexpensive brushless motors in high performance robotics projects, like [this](https://www.youtube.com/watch?v=WT4E5nb3KtY).
+| Branch | Build Status |
+|--------|--------------|
+| master | [](https://travis-ci.org/madcowswe/ODrive) |
+| devel | [](https://travis-ci.org/madcowswe/ODrive) |
+
## Getting Started
It is perfectly fine, and even recommended, to start testing with just a single motor and encoder.
Make sure you have a good mechanical connection between the encoder and the motor, slip can cause disasterous oscillations.
diff --git a/Tupfile.ini b/Tupfile.ini
new file mode 100644
index 00000000..e69de29b