diff --git a/.gitignore b/.gitignore
index f0d313c..7c94371 100644
--- a/.gitignore
+++ b/.gitignore
@@ -11,3 +11,4 @@
/firmware/Release/
/bootloader/Debug/
/bootloader/Release/
+*debug*
diff --git a/firmware/.idea/.gitignore b/firmware/.idea/.gitignore
new file mode 100644
index 0000000..13566b8
--- /dev/null
+++ b/firmware/.idea/.gitignore
@@ -0,0 +1,8 @@
+# Default ignored files
+/shelf/
+/workspace.xml
+# Editor-based HTTP Client requests
+/httpRequests/
+# Datasource local storage ignored files
+/dataSources/
+/dataSources.local.xml
diff --git a/firmware/.idea/.name b/firmware/.idea/.name
new file mode 100644
index 0000000..66d4b7e
--- /dev/null
+++ b/firmware/.idea/.name
@@ -0,0 +1 @@
+BMS_v3
\ No newline at end of file
diff --git a/firmware/.idea/firmware.iml b/firmware/.idea/firmware.iml
new file mode 100644
index 0000000..f08604b
--- /dev/null
+++ b/firmware/.idea/firmware.iml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/firmware/.idea/misc.xml b/firmware/.idea/misc.xml
new file mode 100644
index 0000000..b06c61e
--- /dev/null
+++ b/firmware/.idea/misc.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/firmware/.idea/modules.xml b/firmware/.idea/modules.xml
new file mode 100644
index 0000000..cb860b6
--- /dev/null
+++ b/firmware/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/firmware/.idea/vcs.xml b/firmware/.idea/vcs.xml
new file mode 100644
index 0000000..6c0b863
--- /dev/null
+++ b/firmware/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/firmware/CMakeLists.txt b/firmware/CMakeLists.txt
new file mode 100644
index 0000000..11435d7
--- /dev/null
+++ b/firmware/CMakeLists.txt
@@ -0,0 +1,99 @@
+#THIS FILE IS AUTO GENERATED FROM THE TEMPLATE! DO NOT CHANGE!
+set(CMAKE_SYSTEM_NAME Generic)
+set(CMAKE_SYSTEM_VERSION 1)
+cmake_minimum_required(VERSION 3.24)
+
+# specify cross-compilers and tools
+set(CMAKE_C_COMPILER arm-none-eabi-gcc)
+set(CMAKE_CXX_COMPILER arm-none-eabi-g++)
+set(CMAKE_ASM_COMPILER arm-none-eabi-gcc)
+set(CMAKE_AR arm-none-eabi-ar)
+set(CMAKE_OBJCOPY arm-none-eabi-objcopy)
+set(CMAKE_OBJDUMP arm-none-eabi-objdump)
+set(SIZE arm-none-eabi-size)
+set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)
+
+# project settings
+project(BMS_v3 C CXX ASM)
+set(CMAKE_CXX_STANDARD 17)
+set(CMAKE_C_STANDARD 11)
+
+#Uncomment for hardware floating point
+#add_compile_definitions(ARM_MATH_CM4;ARM_MATH_MATRIX_CHECK;ARM_MATH_ROUNDING)
+#add_compile_options(-mfloat-abi=hard -mfpu=fpv4-sp-d16)
+#add_link_options(-mfloat-abi=hard -mfpu=fpv4-sp-d16)
+
+#Uncomment for software floating point
+#add_compile_options(-mfloat-abi=soft)
+#
+#add_compile_options(-mcpu=cortex-m4 -mthumb -mthumb-interwork)
+#add_compile_options(-ffunction-sections -fdata-sections -fno-common -fmessage-length=0)
+
+add_compile_options(-mcpu=cortex-m3 -mthumb -mthumb-interwork)
+add_compile_options(-ffunction-sections -fdata-sections -fno-common -fmessage-length=0)
+add_compile_options(-fcommon)
+
+# uncomment to mitigate c++17 absolute addresses warnings
+#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-register")
+
+# Enable assembler files preprocessing
+add_compile_options($<$:-x$assembler-with-cpp>)
+
+if ("${CMAKE_BUILD_TYPE}" STREQUAL "Release")
+ message(STATUS "Maximum optimization for speed")
+ add_compile_options(-Ofast)
+elseif ("${CMAKE_BUILD_TYPE}" STREQUAL "RelWithDebInfo")
+ message(STATUS "Maximum optimization for speed, debug info included")
+ add_compile_options(-Ofast -g)
+elseif ("${CMAKE_BUILD_TYPE}" STREQUAL "MinSizeRel")
+ message(STATUS "Maximum optimization for size")
+ add_compile_options(-Os)
+else ()
+ message(STATUS "Minimal optimization, debug info included")
+ add_compile_options(-Og -g)
+endif ()
+
+include_directories(
+ Core/Inc
+
+ Drivers/CMSIS/Device/ST/STM32F1xx/Include
+ Drivers/CMSIS/Include
+
+ Drivers/STM32F1xx_HAL_Driver/Inc
+ Drivers/STM32F1xx_HAL_Driver/Inc/Legacy
+
+ Middlewares/ST/STM32_USB_Device_Library/Class/CDC/Inc
+ Middlewares/ST/STM32_USB_Device_Library/Core/Inc
+
+ Middlewares/Third_Party/FatFs/src
+
+ USB_DEVICE/App
+ USB_DEVICE/Target
+)
+
+add_definitions(-DDEBUG -DUSE_HAL_DRIVER -DSTM32F107xC)
+
+file(GLOB_RECURSE SOURCES "startup/*.*" "USB_DEVICE/*.*" "Middlewares/*.*" "Drivers/*.*" "Core/*.*")
+
+#set(LINKER_SCRIPT ${CMAKE_SOURCE_DIR}/)
+#
+#add_link_options(-Wl,-gc-sections,--print-memory-usage,-Map=${PROJECT_BINARY_DIR}/${PROJECT_NAME}.map)
+#add_link_options(-mcpu=cortex-m4 -mthumb -mthumb-interwork)
+#add_link_options(-T ${LINKER_SCRIPT})
+
+set(LINKER_SCRIPT ${CMAKE_SOURCE_DIR}/STM32F107VCTx_FLASH.ld)
+
+add_link_options(-Wl,-gc-sections,--print-memory-usage,-Map=${PROJECT_BINARY_DIR}/${PROJECT_NAME}.map)
+add_link_options(-mcpu=cortex-m3 -mthumb -mthumb-interwork)
+add_link_options(-T ${LINKER_SCRIPT})
+
+add_executable(${PROJECT_NAME}.elf ${SOURCES} ${LINKER_SCRIPT})
+
+set(HEX_FILE ${PROJECT_BINARY_DIR}/${PROJECT_NAME}.hex)
+set(BIN_FILE ${PROJECT_BINARY_DIR}/${PROJECT_NAME}.bin)
+
+add_custom_command(TARGET ${PROJECT_NAME}.elf POST_BUILD
+ COMMAND ${CMAKE_OBJCOPY} -Oihex $ ${HEX_FILE}
+ COMMAND ${CMAKE_OBJCOPY} -Obinary $ ${BIN_FILE}
+ COMMENT "Building ${HEX_FILE}
+Building ${BIN_FILE}")
diff --git a/firmware/CMakeLists_template.txt b/firmware/CMakeLists_template.txt
new file mode 100644
index 0000000..84e7b6f
--- /dev/null
+++ b/firmware/CMakeLists_template.txt
@@ -0,0 +1,101 @@
+#${templateWarning}
+set(CMAKE_SYSTEM_NAME Generic)
+set(CMAKE_SYSTEM_VERSION 1)
+${cmakeRequiredVersion}
+# specify cross-compilers and tools
+set(CMAKE_C_COMPILER arm-none-eabi-gcc)
+set(CMAKE_CXX_COMPILER arm-none-eabi-g++)
+set(CMAKE_ASM_COMPILER arm-none-eabi-gcc)
+set(CMAKE_AR arm-none-eabi-ar)
+set(CMAKE_OBJCOPY arm-none-eabi-objcopy)
+set(CMAKE_OBJDUMP arm-none-eabi-objdump)
+set(SIZE arm-none-eabi-size)
+set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)
+
+# project settings
+project(${projectName} C CXX ASM)
+set(CMAKE_CXX_STANDARD 17)
+set(CMAKE_C_STANDARD 11)
+
+#Uncomment for hardware floating point
+#add_compile_definitions(ARM_MATH_CM4;ARM_MATH_MATRIX_CHECK;ARM_MATH_ROUNDING)
+#add_compile_options(-mfloat-abi=hard -mfpu=fpv4-sp-d16)
+#add_link_options(-mfloat-abi=hard -mfpu=fpv4-sp-d16)
+
+#Uncomment for software floating point
+#add_compile_options(-mfloat-abi=soft)
+
+#add_compile_options(-mcpu=${mcpu} -mthumb -mthumb-interwork)
+#add_compile_options(-ffunction-sections -fdata-sections -fno-common -fmessage-length=0)
+
+add_compile_options(-mcpu=cortex-m3 -mthumb -mthumb-interwork)
+add_compile_options(-ffunction-sections -fdata-sections -fno-common -fmessage-length=0)
+add_compile_options(-fcommon)
+
+# uncomment to mitigate c++17 absolute addresses warnings
+#set(CMAKE_CXX_FLAGS "$${CMAKE_CXX_FLAGS} -Wno-register")
+
+# Enable assembler files preprocessing
+add_compile_options($<$:-x$assembler-with-cpp>)
+
+if ("$${CMAKE_BUILD_TYPE}" STREQUAL "Release")
+ message(STATUS "Maximum optimization for speed")
+ add_compile_options(-Ofast)
+elseif ("$${CMAKE_BUILD_TYPE}" STREQUAL "RelWithDebInfo")
+ message(STATUS "Maximum optimization for speed, debug info included")
+ add_compile_options(-Ofast -g)
+elseif ("$${CMAKE_BUILD_TYPE}" STREQUAL "MinSizeRel")
+ message(STATUS "Maximum optimization for size")
+ add_compile_options(-Os)
+else ()
+ message(STATUS "Minimal optimization, debug info included")
+ add_compile_options(-Og -g)
+endif ()
+
+#include_directories(${includes})
+include_directories(
+ Core/Inc
+
+ Drivers/CMSIS/Device/ST/STM32F1xx/Include
+ Drivers/CMSIS/Include
+
+ Drivers/STM32F1xx_HAL_Driver/Inc
+ Drivers/STM32F1xx_HAL_Driver/Inc/Legacy
+
+ Middlewares/ST/STM32_USB_Device_Library/Class/CDC/Inc
+ Middlewares/ST/STM32_USB_Device_Library/Core/Inc
+
+ Middlewares/Third_Party/FatFs/src
+
+ USB_DEVICE/App
+ USB_DEVICE/Target
+)
+
+#add_definitions(${defines})
+add_definitions(-DDEBUG -DUSE_HAL_DRIVER -DSTM32F107xC)
+
+
+file(GLOB_RECURSE SOURCES ${sources})
+
+#set(LINKER_SCRIPT $${CMAKE_SOURCE_DIR}/${linkerScript})
+
+#add_link_options(-Wl,-gc-sections,--print-memory-usage,-Map=$${PROJECT_BINARY_DIR}/$${PROJECT_NAME}.map)
+#add_link_options(-mcpu=${mcpu} -mthumb -mthumb-interwork)
+#add_link_options(-T $${LINKER_SCRIPT})
+
+set(LINKER_SCRIPT ${CMAKE_SOURCE_DIR}/STM32F107VCTX_FLASH.ld)
+
+add_link_options(-Wl,-gc-sections,--print-memory-usage,-Map=${PROJECT_BINARY_DIR}/${PROJECT_NAME}.map)
+add_link_options(-mcpu=cortex-m3 -mthumb -mthumb-interwork)
+add_link_options(-T ${LINKER_SCRIPT})
+
+add_executable($${PROJECT_NAME}.elf $${SOURCES} $${LINKER_SCRIPT})
+
+set(HEX_FILE $${PROJECT_BINARY_DIR}/$${PROJECT_NAME}.hex)
+set(BIN_FILE $${PROJECT_BINARY_DIR}/$${PROJECT_NAME}.bin)
+
+add_custom_command(TARGET $${PROJECT_NAME}.elf POST_BUILD
+ COMMAND $${CMAKE_OBJCOPY} -Oihex $ $${HEX_FILE}
+ COMMAND $${CMAKE_OBJCOPY} -Obinary $ $${BIN_FILE}
+ COMMENT "Building $${HEX_FILE}
+Building $${BIN_FILE}")
diff --git a/firmware/Core/Inc/GSM.h b/firmware/Core/Inc/GSM.h
index 06b84aa..dcb3625 100644
--- a/firmware/Core/Inc/GSM.h
+++ b/firmware/Core/Inc/GSM.h
@@ -30,7 +30,7 @@
#define __GSMMODULE_H
#include "main.h"
-#include "modconfig.h"
+#include "modConfig.h"
//#include "string.h"
//#include "stdlib.h"
diff --git a/firmware/Core/Inc/driverSWUART2.h b/firmware/Core/Inc/driverSWUART2.h
index 8251119..fc42d4e 100644
--- a/firmware/Core/Inc/driverSWUART2.h
+++ b/firmware/Core/Inc/driverSWUART2.h
@@ -3,7 +3,7 @@
#include
#include
#include "driverHWUART2.h"
-#include "libRingBuffer.h"
+#include "libRingbuffer.h"
#define RINGBUFFERSIZE 1024