From d95af7d1a0ddd5a93a0827d08294c5504c9e9a94 Mon Sep 17 00:00:00 2001 From: Ivan Zorin Date: Sun, 16 Jul 2023 08:25:30 +0300 Subject: [PATCH] clang-format implementation (#1740) * Testing clang-format style check using github CI * github/push: implement check-style for clang-format as a separate build step * github/push: add missing packages for check-style/clang-format build step * source/Makefile: check-style - reduce files of interest; update .clang-format to keep enums init * source/Makefile: empty lines, spaces & tabs refactoring to unify style - part 1 out of N * source/Makefile: fix formatting for multi-line variables * source/Makefile: update formatting for multi-line variables * source/Makefile: remove spaces on vars assignments to unify style * source/Makefile: remove unused target style * source/Makefile: implement exclude vars for clang-format related files * source/Makefile: exclude configuration.h from clang-format check * Dockerfile: add diffutils in a container to make check-style target using advanced version of diff to get more advanced output to parse & navigate log more easily * source/Makefile: implement parser for clang-format inside check-style target to make output compatible with gcc-like error compilation format for compatibility with IDEs/editors for easy navigation over files to fix style errors * source/Makefile: probably final touches on unifying style * source/Makefile: implement check-style-list target to only list affected file names with wrong code style for debug purposes * source/Makefile: fix missed spaces * deploy.sh: add helper routine to deal with clang-format error output logging from makefile * gitignore: add clang-format log explicitly * Refactoring for clang-format compiance * Dockerfile: add sed * Dockerfile: false alarm - remove sed since busybox-sed seems fine * source/Makefile: reduce calls of clang-format & make error log more clean, clear, and tidy * deploy.sh:check_style() - add removal of DOS EOLs for generated log * source/Makefile:check-style: add more empty lines between blocks with errors for readability when suggestion is too long & heavy * source/Makefile: add STOP var to check-style for exit on first failed file * source/Makefile: check-style: make log looks more like traditional diff/patch output * source/Core/BSP/Pinecilv2/MemMang/heap_5.c: clang-format refactoring using reasonable advises ... and then disable it in Makefile from scanning by clang-format * Return headers include order * clang-format config: disable warnings about non-alphabetic include order * clang-format refactoring * clang-format refactoring, part 2 * clang-format refactoring, part 3 * settingsGUI.cpp: refactoring, part 1 * settingsGUI.cpp: refactoring, part 2 * settingsGUI.cpp: refactoring, part 3 * settingsGUI.cpp: refactoring, part 4 * clang-format should be happy now * workflows/push: put readme check into separate build step & update style * clang-format: giving SortIncludes option second chance by tweaking a couple of headers a bit * source/Makefile: check-style: add homebrew parser to check for { } in conditional blocks * homebrew-format: add { } for if/else, while, and for & unify some comments style; left two errors intentionally to debug & improve parser * source/Makefile: homebrew-format: fix false negative trigger for multi-line condition in if-s * Sleep.cpp: unify style & comments * source/Makefile: remove unused debug target --- .github/workflows/push.yml | 66 +- .gitignore | 3 + scripts/IronOS.Dockerfile | 4 +- scripts/deploy.sh | 46 +- source/.clang-format | 1 + source/Core/BSP/MHP30/Setup.c | 12 +- source/Core/BSP/MHP30/flash.c | 4 +- source/Core/BSP/Miniware/Setup.cpp | 6 +- source/Core/BSP/Miniware/flash.c | 1 - source/Core/BSP/Miniware/port.c | 4 +- source/Core/BSP/Miniware/preRTOS.cpp | 1 - source/Core/BSP/Pinecil/Debug.cpp | 14 +- source/Core/BSP/Pinecil/I2C_Wrapper.cpp | 5 +- source/Core/BSP/Pinecilv2/I2C_Wrapper.cpp | 11 +- source/Core/BSP/Pinecilv2/MemMang/heap_5.c | 727 +++++------ source/Core/BSP/Pinecilv2/ble.c | 93 +- source/Core/BSP/Pinecilv2/ble_handlers.cpp | 3 +- source/Core/BSP/Pinecilv2/ble_peripheral.c | 4 +- source/Core/BSP/Pinecilv2/ble_peripheral.h | 1 + source/Core/BSP/Sequre_S60/Setup.cpp | 6 +- source/Core/BSP/Sequre_S60/flash.c | 5 +- source/Core/BSP/Sequre_S60/port.c | 50 +- source/Core/Src/FreeRTOSHooks.c | 3 +- source/Core/Src/QC3.cpp | 27 +- source/Core/Src/Settings.cpp | 5 +- source/Core/Src/settingsGUI.cpp | 434 ++++--- source/Core/Threads/OperatingModes/CJC.cpp | 3 +- .../Core/Threads/OperatingModes/DebugMenu.cpp | 12 +- .../Threads/OperatingModes/HomeScreen.cpp | 19 +- source/Core/Threads/OperatingModes/Sleep.cpp | 22 +- .../Core/Threads/OperatingModes/Soldering.cpp | 9 +- .../OperatingModes/SolderingProfile.cpp | 102 +- .../OperatingModes/TemperatureAdjust.cpp | 33 +- .../OperatingModes/USBPDDebug_FUSB.cpp | 5 +- .../OperatingModes/USBPDDebug_HUSB238.cpp | 5 +- .../utils/DrawTipTemperature.cpp | 12 +- .../OperatingModes/utils/SolderingCommon.cpp | 36 +- .../utils/drawPowerSourceIcon.cpp | 13 +- .../OperatingModes/utils/getSleepTimeout.cpp | 7 +- .../Core/Threads/OperatingModes/utils/min.cpp | 7 +- .../utils/shouldDeviceSleep.cpp | 5 +- source/Core/Threads/POWThread.cpp | 1 - source/Makefile | 1061 +++++++++-------- 43 files changed, 1542 insertions(+), 1346 deletions(-) diff --git a/.github/workflows/push.yml b/.github/workflows/push.yml index 9f904a2a..ca127c55 100644 --- a/.github/workflows/push.yml +++ b/.github/workflows/push.yml @@ -26,10 +26,10 @@ jobs: - name: Git ownership exception run: git config --global --add safe.directory /__w/IronOS/IronOS && git config --global safe.directory "$GITHUB_WORKSPACE" - - name: build ${{ matrix.model }} + - name: Build ${{ matrix.model }} run: cd source && ./build.sh -m ${{ matrix.model }} - - name: copy license text + - name: Copy license files run: | cp LICENSE source/Hexfile/LICENSE cp scripts/LICENSE_RELEASE.md source/Hexfile/LICENSE_RELEASE.md @@ -55,6 +55,7 @@ jobs: name: metadata path: source/Hexfile/${{ matrix.model }}.json + build_multi-lang: runs-on: ubuntu-20.04 container: @@ -77,10 +78,10 @@ jobs: - name: Git ownership exception run: git config --global --add safe.directory /__w/IronOS/IronOS && git config --global safe.directory "$GITHUB_WORKSPACE" - - name: build ${{ matrix.model }} + - name: Build ${{ matrix.model }} run: cd source && make -j$(nproc) model="${{ matrix.model }}" firmware-multi_compressed_European firmware-multi_compressed_Bulgarian+Russian+Serbian+Ukrainian firmware-multi_Chinese+Japanese - - name: copy license text + - name: Copy license files run: | cp LICENSE source/Hexfile/LICENSE cp scripts/LICENSE_RELEASE.md source/Hexfile/LICENSE_RELEASE.md @@ -106,20 +107,21 @@ jobs: name: metadata path: source/Hexfile/${{ matrix.model }}_multi-lang.json + tests: runs-on: ubuntu-20.04 container: image: alpine:3.16 steps: - - name: deps + - name: Install dependencies (apk) run: apk add --no-cache python3 py3-pip make git bash findutils gcc musl-dev - uses: actions/checkout@v3 with: submodules: true - - name: install black + - name: Install dependencies (python) run: python3 -m pip install bdflib - name: Run python tests @@ -133,36 +135,49 @@ jobs: chmod +x brieflz_test.py ./brieflz_test.py - check_formatting: + + check_c-cpp: runs-on: ubuntu-20.04 container: image: alpine:3.16 steps: - - name: deps - run: apk add --no-cache python3 py3-pip make git black sed diffutils + - name: Install dependencies (apk) + run: apk add --no-cache make git diffutils findutils clang-extra-tools - uses: actions/checkout@v3 with: submodules: true - - name: install black - run: python3 -m pip install bdflib flake8 - - - name: Check formatting with clang-format + - name: Check format style with clang-format run: cd source && make clean && make check-style + + check_python: + runs-on: ubuntu-20.04 + container: + image: alpine:3.16 + + steps: + - name: Install dependencies (apk) + run: apk add --no-cache python3 py3-pip make git black + + - uses: actions/checkout@v3 + with: + submodules: true + + - name: Install dependencies (python) + run: python3 -m pip install bdflib flake8 + - name: Check python formatting with black run: black --check Translations - name: Check python with flake8 run: flake8 Translations - - name: Check autogenerated Documentation/README.md - run: /bin/sh ./scripts/deploy.sh docs_readme - shellcheck: - name: runner / shellcheck + check_shell: + name: check_shell runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 @@ -173,3 +188,20 @@ jobs: reporter: github-pr-review # Change reporter. exclude: "./.git/*" # Optional. check_all_files_with_shebangs: "false" # Optional. + + + check_readme: + runs-on: ubuntu-20.04 + container: + image: alpine:3.16 + + steps: + - name: Install dependencies (apk) + run: apk add --no-cache git + + - uses: actions/checkout@v3 + with: + submodules: true + + - name: Check autogenerated Documentation/README.md + run: /bin/sh ./scripts/deploy.sh docs_readme diff --git a/.gitignore b/.gitignore index 0dc64a2a..811223af 100644 --- a/.gitignore +++ b/.gitignore @@ -212,3 +212,6 @@ TS100/KiCad/TS100.bak Logo GUI/TS100 Logo Editor/TS100 Logo Editor/obj/ Logo GUI/TS100 Logo Editor/TS100 Logo Editor/bin/ +# Tests/linters/sanitizers +source/check-style.log + diff --git a/scripts/IronOS.Dockerfile b/scripts/IronOS.Dockerfile index 94d9fca2..6d196676 100644 --- a/scripts/IronOS.Dockerfile +++ b/scripts/IronOS.Dockerfile @@ -9,14 +9,14 @@ WORKDIR /build/source # Installing the two compilers (ARM & RISCV), python3 & pip, clang tools: ## - compilers: gcc-*, newlib-* ## - python3: py*, black (required to check Python code formatting) -## - misc: findutils, make, git +## - misc: findutils, make, git, diffutils ## - musl-dev (required for the multi lang firmwares) ## - clang (required for clang-format to check C++ code formatting) ARG APK_COMPS="gcc-riscv-none-elf gcc-arm-none-eabi newlib-riscv-none-elf \ newlib-arm-none-eabi" ARG APK_PYTHON="python3 py3-pip black" -ARG APK_MISC="findutils make git" +ARG APK_MISC="findutils make git diffutils" ARG APK_DEV="musl-dev clang bash clang-extra-tools" # PIP packages diff --git a/scripts/deploy.sh b/scripts/deploy.sh index 3afd21cc..ab388323 100755 --- a/scripts/deploy.sh +++ b/scripts/deploy.sh @@ -10,6 +10,7 @@ ### helper functions +# brief help (some supported commands may be missing!) usage() { echo -e "\nUsage: ${0} [CMD]\n" @@ -19,9 +20,11 @@ usage() echo -e "\tclean - delete created docker container (but not pre-downloaded data for it)\n" echo "CMD (helper routines):" echo -e "\tdocs_readme - generate & OVERWRITE(!) README.md inside Documentation/ based on nav section from mkdocs.yml if it changed\n" + echo -e "\tcheck_style - run clang-format using source/Makefile and generate gcc-compatible error log in source/check-style.log\n" echo -e "STORAGE NOTICE: for \"shell\" and \"build\" commands extra files will be downloaded so make sure that you have ~5GB of free space.\n" } +# Documentation/README.md automagical generation routine docs_readme() { # WARNING: ON RUN Documentaion/README.md MAY BE OVERWRITTEN WITHOUT ANY WARNINGS / CONFIRMATIONS !!! @@ -67,10 +70,34 @@ EOF return "${ret}" } +# check_style routine for those who too lazy to do it everytime manually +check_style() +{ + log="source/check-style.log" + make -C source check-style 2>&1 | tee "${log}" + chmod 0666 "${log}" + sed -i -e 's,\r,,g' "${log}" + return 0 +} + ### main docker_conf="Env.yml" +# get absolute location of project root dir to make docker happy with config(s) +# (successfully tested on relatively POSIX-compliant Dash shell) + +# this script +script_file="/deploy.sh" +# IronOS/scripts/deploy.sh +script_path="${PWD}"/"${0}" +# IronOS/scripts/ +script_dir=${script_path%"${script_file}"} +# IronOS/ +root_dir="${script_dir}/.." +# IronOS/Env.yml +docker_file="-f ${root_dir}/${docker_conf}" + # allow providing custom path to docker tool using DOCKER_BIN external env. var. # (compose sub-command must be included, i.e. DOCKER_BIN="/usr/local/bin/docker compose" ./deploy.sh) @@ -103,6 +130,11 @@ if [ "docs_readme" = "${cmd}" ]; then exit "${?}" fi; +if [ "check_style" = "${cmd}" ]; then + check_style + exit "${?}" +fi; + # if docker is not presented in any way show warning & exit if [ -z "${docker_bin}" ]; then @@ -124,20 +156,6 @@ else exit 1 fi; -# get absolute location of project root dir to make docker happy with config(s) -# (successfully tested on relatively POSIX-compliant Dash shell) - -# this script -script_file="/deploy.sh" -# IronOS/scripts/deploy.sh -script_path="${PWD}"/"${0}" -# IronOS/scripts/ -script_dir=${script_path%"${script_file}"} -# IronOS/ -root_dir="${script_dir}/.." -# IronOS/Env.yml -docker_file="-f ${root_dir}/${docker_conf}" - # change dir to project root dir & run constructed command cd "${root_dir}" || exit 1 diff --git a/source/.clang-format b/source/.clang-format index e5a3be22..a737f88c 100644 --- a/source/.clang-format +++ b/source/.clang-format @@ -19,6 +19,7 @@ AllowShortFunctionsOnASingleLine: All AllowShortLambdasOnASingleLine: All AllowShortIfStatementsOnASingleLine: Never AllowShortLoopsOnASingleLine: false +AllowShortEnumsOnASingleLine: false ### <<< Keeps enums as is AlwaysBreakAfterDefinitionReturnType: None AlwaysBreakAfterReturnType: None AlwaysBreakBeforeMultilineStrings: false diff --git a/source/Core/BSP/MHP30/Setup.c b/source/Core/BSP/MHP30/Setup.c index 6e994463..79f49626 100644 --- a/source/Core/BSP/MHP30/Setup.c +++ b/source/Core/BSP/MHP30/Setup.c @@ -47,9 +47,9 @@ void Setup_HAL() { MX_IWDG_Init(); HAL_ADC_Start(&hadc2); HAL_ADCEx_MultiModeStart_DMA(&hadc1, ADCReadings, - (ADC_SAMPLES * ADC_CHANNELS)); // start DMA of normal readings - // HAL_ADCEx_InjectedStart(&hadc1); // enable injected readings - // HAL_ADCEx_InjectedStart(&hadc2); // enable injected readings + (ADC_SAMPLES * ADC_CHANNELS)); // start DMA of normal readings + // HAL_ADCEx_InjectedStart(&hadc1); // enable injected readings + // HAL_ADCEx_InjectedStart(&hadc2); // enable injected readings } // channel 0 -> temperature sensor, 1-> VIN, 2-> tip @@ -154,8 +154,9 @@ static void MX_ADC1_Init(void) { SET_BIT(hadc1.Instance->CR1, (ADC_CR1_EOSIE)); // Enable end of Normal // Run ADC internal calibration - while (HAL_ADCEx_Calibration_Start(&hadc1) != HAL_OK) + while (HAL_ADCEx_Calibration_Start(&hadc1) != HAL_OK) { ; + } } /* ADC2 init function */ @@ -191,8 +192,9 @@ static void MX_ADC2_Init(void) { HAL_ADC_ConfigChannel(&hadc2, &sConfig); // Run ADC internal calibration - while (HAL_ADCEx_Calibration_Start(&hadc2) != HAL_OK) + while (HAL_ADCEx_Calibration_Start(&hadc2) != HAL_OK) { ; + } } /* I2C1 init function */ static void MX_I2C1_Init(void) { diff --git a/source/Core/BSP/MHP30/flash.c b/source/Core/BSP/MHP30/flash.c index 756e7fb4..7df30992 100644 --- a/source/Core/BSP/MHP30/flash.c +++ b/source/Core/BSP/MHP30/flash.c @@ -30,9 +30,9 @@ void flash_save_buffer(const uint8_t *buffer, const uint16_t length) { HAL_FLASH_Unlock(); for (uint16_t i = 0; i < (length / 2); i++) { resetWatchdog(); - HAL_FLASH_Program(FLASH_TYPEPROGRAM_HALFWORD, SETTINGS_START_PAGE+ (i*sizeof(uint16_t)), data[i]); + HAL_FLASH_Program(FLASH_TYPEPROGRAM_HALFWORD, SETTINGS_START_PAGE + (i * sizeof(uint16_t)), data[i]); } HAL_FLASH_Lock(); } -void flash_read_buffer(uint8_t *buffer, const uint16_t length) { memcpy(buffer, (uint8_t*)SETTINGS_START_PAGE, length); } +void flash_read_buffer(uint8_t *buffer, const uint16_t length) { memcpy(buffer, (uint8_t *)SETTINGS_START_PAGE, length); } diff --git a/source/Core/BSP/Miniware/Setup.cpp b/source/Core/BSP/Miniware/Setup.cpp index 27b3b1e8..cd3f81c3 100644 --- a/source/Core/BSP/Miniware/Setup.cpp +++ b/source/Core/BSP/Miniware/Setup.cpp @@ -229,8 +229,9 @@ static void MX_ADC1_Init(void) { HAL_ADCEx_InjectedConfigChannel(&hadc1, &sConfigInjected); SET_BIT(hadc1.Instance->CR1, (ADC_CR1_JEOCIE)); // Enable end of injected conv irq // Run ADC internal calibration - while (HAL_ADCEx_Calibration_Start(&hadc1) != HAL_OK) + while (HAL_ADCEx_Calibration_Start(&hadc1) != HAL_OK) { ; + } } /* ADC2 init function */ @@ -272,8 +273,9 @@ static void MX_ADC2_Init(void) { HAL_ADCEx_InjectedConfigChannel(&hadc2, &sConfigInjected); // Run ADC internal calibration - while (HAL_ADCEx_Calibration_Start(&hadc2) != HAL_OK) + while (HAL_ADCEx_Calibration_Start(&hadc2) != HAL_OK) { ; + } } /* I2C1 init function */ static void MX_I2C1_Init(void) { diff --git a/source/Core/BSP/Miniware/flash.c b/source/Core/BSP/Miniware/flash.c index ab29e67a..7df30992 100644 --- a/source/Core/BSP/Miniware/flash.c +++ b/source/Core/BSP/Miniware/flash.c @@ -10,7 +10,6 @@ #include "stm32f1xx_hal.h" #include "string.h" - void flash_save_buffer(const uint8_t *buffer, const uint16_t length) { FLASH_EraseInitTypeDef pEraseInit; pEraseInit.TypeErase = FLASH_TYPEERASE_PAGES; diff --git a/source/Core/BSP/Miniware/port.c b/source/Core/BSP/Miniware/port.c index 125b29f5..a79eab6f 100644 --- a/source/Core/BSP/Miniware/port.c +++ b/source/Core/BSP/Miniware/port.c @@ -208,9 +208,7 @@ static void prvTaskExitError(void) { // therefore not output an 'unreachable code' warning for code that appears // after it. */ // } - for(;;){ - - } + for (;;) {} } /*-----------------------------------------------------------*/ diff --git a/source/Core/BSP/Miniware/preRTOS.cpp b/source/Core/BSP/Miniware/preRTOS.cpp index 290b2a67..2dbfa8b3 100644 --- a/source/Core/BSP/Miniware/preRTOS.cpp +++ b/source/Core/BSP/Miniware/preRTOS.cpp @@ -13,7 +13,6 @@ #include "configuration.h" #include - void preRToSInit() { /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ diff --git a/source/Core/BSP/Pinecil/Debug.cpp b/source/Core/BSP/Pinecil/Debug.cpp index c9d5d3bf..ad44c1aa 100644 --- a/source/Core/BSP/Pinecil/Debug.cpp +++ b/source/Core/BSP/Pinecil/Debug.cpp @@ -23,13 +23,13 @@ void log_system_state(int32_t PWMWattsx10) { // Tip_Temp_C,Handle_Temp_C,Output_Power_Wattx10,PWM,Tip_Raw\r\n // 3+1+3+1+3+1+3+1+5+2 = 23, so sizing at 32 for now - outputLength = snprintf(uartOutputBuffer, uartOutputBufferLength, "%lu,%u,%li,%u,%lu\r\n", // - TipThermoModel::getTipInC(false), // Tip temp in C - getHandleTemperature(0), // Handle temp in C X10 - PWMWattsx10, // Output Wattage - pendingPWM, // PWM - TipThermoModel::convertTipRawADCTouV(getTipRawTemp(0), true) // Tip temp in uV - ); + outputLength = snprintf(uartOutputBuffer, uartOutputBufferLength, "%lu,%u,%li,%u,%lu\r\n", + TipThermoModel::getTipInC(false), // Tip temp in C + getHandleTemperature(0), // Handle temp in C X10 + PWMWattsx10, // Output Wattage + pendingPWM, // PWM + TipThermoModel::convertTipRawADCTouV(getTipRawTemp(0), true) // Tip temp in uV + ); // Now print this out the uart via IRQ (DMA cant be used as oled has it) currentOutputPos = 0; diff --git a/source/Core/BSP/Pinecil/I2C_Wrapper.cpp b/source/Core/BSP/Pinecil/I2C_Wrapper.cpp index f54e0a42..46f33436 100644 --- a/source/Core/BSP/Pinecil/I2C_Wrapper.cpp +++ b/source/Core/BSP/Pinecil/I2C_Wrapper.cpp @@ -40,18 +40,19 @@ enum class i2c_step { Wait_stop, // Wait for stop to send and we are done Done, // Finished Error_occured, // Error occured on the bus - }; + struct i2c_state { i2c_step currentStep; bool isMemoryWrite; bool wakePart; uint8_t deviceAddress; uint8_t memoryAddress; - uint8_t * buffer; + uint8_t *buffer; uint16_t numberOfBytes; dma_parameter_struct dma_init_struct; }; + i2c_state currentState; void perform_i2c_step() { diff --git a/source/Core/BSP/Pinecilv2/I2C_Wrapper.cpp b/source/Core/BSP/Pinecilv2/I2C_Wrapper.cpp index e3112b05..93d11ae5 100644 --- a/source/Core/BSP/Pinecilv2/I2C_Wrapper.cpp +++ b/source/Core/BSP/Pinecilv2/I2C_Wrapper.cpp @@ -40,8 +40,9 @@ bool FRToSI2C::Mem_Read(uint16_t DevAddress, uint16_t read_address, uint8_t *p_b i2cCfg.data = p_buffer; i2cCfg.subAddrSize = 1; // one byte address -taskENTER_CRITICAL(); - err = I2C_MasterReceiveBlocking(I2C0_ID, &i2cCfg); + taskENTER_CRITICAL(); + /* --------------- */ + err = I2C_MasterReceiveBlocking(I2C0_ID, &i2cCfg); taskEXIT_CRITICAL(); bool res = err == SUCCESS; if (!res) { @@ -63,8 +64,10 @@ bool FRToSI2C::Mem_Write(uint16_t DevAddress, uint16_t MemAddress, uint8_t *p_bu i2cCfg.dataSize = number_of_byte; i2cCfg.data = p_buffer; i2cCfg.subAddrSize = 1; // one byte address -taskENTER_CRITICAL(); - err = I2C_MasterSendBlocking(I2C0_ID, &i2cCfg); + + taskENTER_CRITICAL(); + /* --------------- */ + err = I2C_MasterSendBlocking(I2C0_ID, &i2cCfg); taskEXIT_CRITICAL(); bool res = err == SUCCESS; if (!res) { diff --git a/source/Core/BSP/Pinecilv2/MemMang/heap_5.c b/source/Core/BSP/Pinecilv2/MemMang/heap_5.c index aab4f8f4..3ee2639b 100644 --- a/source/Core/BSP/Pinecilv2/MemMang/heap_5.c +++ b/source/Core/BSP/Pinecilv2/MemMang/heap_5.c @@ -80,21 +80,20 @@ #undef MPU_WRAPPERS_INCLUDED_FROM_API_FILE #if ( configSUPPORT_DYNAMIC_ALLOCATION == 0 ) - #error This file must not be used if configSUPPORT_DYNAMIC_ALLOCATION is 0 +#error This file must not be used if configSUPPORT_DYNAMIC_ALLOCATION is 0 #endif /* Block sizes must not get too small. */ -#define heapMINIMUM_BLOCK_SIZE ( ( size_t ) ( xHeapStructSize << 1 ) ) +#define heapMINIMUM_BLOCK_SIZE ( ( size_t ) ( xHeapStructSize << 1 ) ) /* Assumes 8bit bytes! */ -#define heapBITS_PER_BYTE ( ( size_t ) 8 ) +#define heapBITS_PER_BYTE ( ( size_t ) 8 ) /* Define the linked list structure. This is used to link free blocks in order * of their memory address. */ -typedef struct A_BLOCK_LINK -{ - struct A_BLOCK_LINK * pxNextFreeBlock; /*<< The next free block in the list. */ - size_t xBlockSize; /*<< The size of the free block. */ +typedef struct A_BLOCK_LINK { + struct A_BLOCK_LINK *pxNextFreeBlock; /*<< The next free block in the list. */ + size_t xBlockSize; /*<< The size of the free block. */ } BlockLink_t; /*-----------------------------------------------------------*/ @@ -105,7 +104,7 @@ typedef struct A_BLOCK_LINK * the block in front it and/or the block behind it if the memory blocks are * adjacent to each other. */ -static void prvInsertBlockIntoFreeList( BlockLink_t * pxBlockToInsert ); +static void prvInsertBlockIntoFreeList( BlockLink_t *pxBlockToInsert ); /*-----------------------------------------------------------*/ @@ -114,14 +113,14 @@ static void prvInsertBlockIntoFreeList( BlockLink_t * pxBlockToInsert ); static const size_t xHeapStructSize = ( sizeof( BlockLink_t ) + ( ( size_t ) ( portBYTE_ALIGNMENT - 1 ) ) ) & ~( ( size_t ) portBYTE_ALIGNMENT_MASK ); /* Create a couple of list links to mark the start and end of the list. */ -static BlockLink_t xStart, * pxEnd = NULL; +static BlockLink_t xStart, *pxEnd = NULL; /* Keeps track of the number of calls to allocate and free memory as well as the * number of free bytes remaining, but says nothing about fragmentation. */ -static size_t xFreeBytesRemaining = 0U; +static size_t xFreeBytesRemaining = 0U; static size_t xMinimumEverFreeBytesRemaining = 0U; static size_t xNumberOfSuccessfulAllocations = 0; -static size_t xNumberOfSuccessfulFrees = 0; +static size_t xNumberOfSuccessfulFrees = 0; /* Gets set to the top bit of an size_t type. When this bit in the xBlockSize * member of an BlockLink_t structure is set then the block belongs to the @@ -131,420 +130,354 @@ static size_t xBlockAllocatedBit = 0; /*-----------------------------------------------------------*/ -void * pvPortMalloc( size_t xWantedSize ) -{ - BlockLink_t * pxBlock, * pxPreviousBlock, * pxNewBlockLink; - void * pvReturn = NULL; +void *pvPortMalloc( size_t xWantedSize ) { + BlockLink_t *pxBlock, *pxPreviousBlock, *pxNewBlockLink; + void *pvReturn = NULL; - /* The heap must be initialised before the first call to - * prvPortMalloc(). */ - configASSERT( pxEnd ); + /* The heap must be initialised before the first call to + * prvPortMalloc(). */ + configASSERT( pxEnd ); - vTaskSuspendAll(); - { - /* Check the requested block size is not so large that the top bit is - * set. The top bit of the block size member of the BlockLink_t structure - * is used to determine who owns the block - the application or the - * kernel, so it must be free. */ - if( ( xWantedSize & xBlockAllocatedBit ) == 0 ) - { - /* The wanted size is increased so it can contain a BlockLink_t - * structure in addition to the requested amount of bytes. */ - if( xWantedSize > 0 ) - { - xWantedSize += xHeapStructSize; + vTaskSuspendAll(); + { + /* Check the requested block size is not so large that the top bit is + * set. The top bit of the block size member of the BlockLink_t structure + * is used to determine who owns the block - the application or the + * kernel, so it must be free. */ + if ( ( xWantedSize & xBlockAllocatedBit ) == 0 ) { + /* The wanted size is increased so it can contain a BlockLink_t + * structure in addition to the requested amount of bytes. */ + if ( xWantedSize > 0 ) { + xWantedSize += xHeapStructSize; - /* Ensure that blocks are always aligned to the required number - * of bytes. */ - if( ( xWantedSize & portBYTE_ALIGNMENT_MASK ) != 0x00 ) - { - /* Byte alignment required. */ - xWantedSize += ( portBYTE_ALIGNMENT - ( xWantedSize & portBYTE_ALIGNMENT_MASK ) ); - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - - if( ( xWantedSize > 0 ) && ( xWantedSize <= xFreeBytesRemaining ) ) - { - /* Traverse the list from the start (lowest address) block until - * one of adequate size is found. */ - pxPreviousBlock = &xStart; - pxBlock = xStart.pxNextFreeBlock; - - while( ( pxBlock->xBlockSize < xWantedSize ) && ( pxBlock->pxNextFreeBlock != NULL ) ) - { - pxPreviousBlock = pxBlock; - pxBlock = pxBlock->pxNextFreeBlock; - } - - /* If the end marker was reached then a block of adequate size - * was not found. */ - if( pxBlock != pxEnd ) - { - /* Return the memory space pointed to - jumping over the - * BlockLink_t structure at its start. */ - pvReturn = ( void * ) ( ( ( uint8_t * ) pxPreviousBlock->pxNextFreeBlock ) + xHeapStructSize ); - - /* This block is being returned for use so must be taken out - * of the list of free blocks. */ - pxPreviousBlock->pxNextFreeBlock = pxBlock->pxNextFreeBlock; - - /* If the block is larger than required it can be split into - * two. */ - if( ( pxBlock->xBlockSize - xWantedSize ) > heapMINIMUM_BLOCK_SIZE ) - { - /* This block is to be split into two. Create a new - * block following the number of bytes requested. The void - * cast is used to prevent byte alignment warnings from the - * compiler. */ - pxNewBlockLink = ( void * ) ( ( ( uint8_t * ) pxBlock ) + xWantedSize ); - - /* Calculate the sizes of two blocks split from the - * single block. */ - pxNewBlockLink->xBlockSize = pxBlock->xBlockSize - xWantedSize; - pxBlock->xBlockSize = xWantedSize; - - /* Insert the new block into the list of free blocks. */ - prvInsertBlockIntoFreeList( ( pxNewBlockLink ) ); - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - - xFreeBytesRemaining -= pxBlock->xBlockSize; - - if( xFreeBytesRemaining < xMinimumEverFreeBytesRemaining ) - { - xMinimumEverFreeBytesRemaining = xFreeBytesRemaining; - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - - /* The block is being returned - it is allocated and owned - * by the application and has no "next" block. */ - pxBlock->xBlockSize |= xBlockAllocatedBit; - pxBlock->pxNextFreeBlock = NULL; - xNumberOfSuccessfulAllocations++; - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - else - { - mtCOVERAGE_TEST_MARKER(); - } + /* Ensure that blocks are always aligned to the required number + * of bytes. */ + if ( ( xWantedSize & portBYTE_ALIGNMENT_MASK ) != 0x00 ) { + /* Byte alignment required. */ + xWantedSize += ( portBYTE_ALIGNMENT - ( xWantedSize & portBYTE_ALIGNMENT_MASK ) ); + } else { + mtCOVERAGE_TEST_MARKER(); } - else - { - mtCOVERAGE_TEST_MARKER(); - } - - traceMALLOC( pvReturn, xWantedSize ); - } - ( void ) xTaskResumeAll(); - - #if ( configUSE_MALLOC_FAILED_HOOK == 1 ) - { - if( pvReturn == NULL ) - { - extern void vApplicationMallocFailedHook( void ); - vApplicationMallocFailedHook(); - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - #endif /* if ( configUSE_MALLOC_FAILED_HOOK == 1 ) */ - - return pvReturn; -} -/*-----------------------------------------------------------*/ - -void vPortFree( void * pv ) -{ - uint8_t * puc = ( uint8_t * ) pv; - BlockLink_t * pxLink; - - if( pv != NULL ) - { - /* The memory being freed will have an BlockLink_t structure immediately - * before it. */ - puc -= xHeapStructSize; - - /* This casting is to keep the compiler from issuing warnings. */ - pxLink = ( void * ) puc; - - /* Check the block is actually allocated. */ - configASSERT( ( pxLink->xBlockSize & xBlockAllocatedBit ) != 0 ); - configASSERT( pxLink->pxNextFreeBlock == NULL ); - - if( ( pxLink->xBlockSize & xBlockAllocatedBit ) != 0 ) - { - if( pxLink->pxNextFreeBlock == NULL ) - { - /* The block is being returned to the heap - it is no longer - * allocated. */ - pxLink->xBlockSize &= ~xBlockAllocatedBit; - - vTaskSuspendAll(); - { - /* Add this block to the list of free blocks. */ - xFreeBytesRemaining += pxLink->xBlockSize; - traceFREE( pv, pxLink->xBlockSize ); - prvInsertBlockIntoFreeList( ( ( BlockLink_t * ) pxLink ) ); - xNumberOfSuccessfulFrees++; - } - ( void ) xTaskResumeAll(); - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } - else - { - mtCOVERAGE_TEST_MARKER(); - } - } -} -/*-----------------------------------------------------------*/ - -size_t xPortGetFreeHeapSize( void ) -{ - return xFreeBytesRemaining; -} -/*-----------------------------------------------------------*/ - -size_t xPortGetMinimumEverFreeHeapSize( void ) -{ - return xMinimumEverFreeBytesRemaining; -} -/*-----------------------------------------------------------*/ - -static void prvInsertBlockIntoFreeList( BlockLink_t * pxBlockToInsert ) -{ - BlockLink_t * pxIterator; - uint8_t * puc; - - /* Iterate through the list until a block is found that has a higher address - * than the block being inserted. */ - for( pxIterator = &xStart; pxIterator->pxNextFreeBlock < pxBlockToInsert; pxIterator = pxIterator->pxNextFreeBlock ) - { - /* Nothing to do here, just iterate to the right position. */ - } - - /* Do the block being inserted, and the block it is being inserted after - * make a contiguous block of memory? */ - puc = ( uint8_t * ) pxIterator; - - if( ( puc + pxIterator->xBlockSize ) == ( uint8_t * ) pxBlockToInsert ) - { - pxIterator->xBlockSize += pxBlockToInsert->xBlockSize; - pxBlockToInsert = pxIterator; - } - else - { + } else { mtCOVERAGE_TEST_MARKER(); - } + } - /* Do the block being inserted, and the block it is being inserted before - * make a contiguous block of memory? */ - puc = ( uint8_t * ) pxBlockToInsert; + if ( ( xWantedSize > 0 ) && ( xWantedSize <= xFreeBytesRemaining ) ) { + /* Traverse the list from the start (lowest address) block until + * one of adequate size is found. */ + pxPreviousBlock = &xStart; + pxBlock = xStart.pxNextFreeBlock; - if( ( puc + pxBlockToInsert->xBlockSize ) == ( uint8_t * ) pxIterator->pxNextFreeBlock ) - { - if( pxIterator->pxNextFreeBlock != pxEnd ) - { - /* Form one big block from the two blocks. */ - pxBlockToInsert->xBlockSize += pxIterator->pxNextFreeBlock->xBlockSize; - pxBlockToInsert->pxNextFreeBlock = pxIterator->pxNextFreeBlock->pxNextFreeBlock; + while ( ( pxBlock->xBlockSize < xWantedSize ) && ( pxBlock->pxNextFreeBlock != NULL ) ) { + pxPreviousBlock = pxBlock; + pxBlock = pxBlock->pxNextFreeBlock; } - else - { - pxBlockToInsert->pxNextFreeBlock = pxEnd; - } - } - else - { - pxBlockToInsert->pxNextFreeBlock = pxIterator->pxNextFreeBlock; - } - /* If the block being inserted plugged a gab, so was merged with the block - * before and the block after, then it's pxNextFreeBlock pointer will have - * already been set, and should not be set here as that would make it point - * to itself. */ - if( pxIterator != pxBlockToInsert ) - { - pxIterator->pxNextFreeBlock = pxBlockToInsert; - } - else - { + /* If the end marker was reached then a block of adequate size + * was not found. */ + if ( pxBlock != pxEnd ) { + /* Return the memory space pointed to - jumping over the + * BlockLink_t structure at its start. */ + pvReturn = ( void * ) ( ( ( uint8_t * ) pxPreviousBlock->pxNextFreeBlock ) + xHeapStructSize ); + + /* This block is being returned for use so must be taken out + * of the list of free blocks. */ + pxPreviousBlock->pxNextFreeBlock = pxBlock->pxNextFreeBlock; + + /* If the block is larger than required it can be split into + * two. */ + if ( ( pxBlock->xBlockSize - xWantedSize ) > heapMINIMUM_BLOCK_SIZE ) { + /* This block is to be split into two. Create a new + * block following the number of bytes requested. The void + * cast is used to prevent byte alignment warnings from the + * compiler. */ + pxNewBlockLink = ( void * ) ( ( ( uint8_t * ) pxBlock ) + xWantedSize ); + + /* Calculate the sizes of two blocks split from the + * single block. */ + pxNewBlockLink->xBlockSize = pxBlock->xBlockSize - xWantedSize; + pxBlock->xBlockSize = xWantedSize; + + /* Insert the new block into the list of free blocks. */ + prvInsertBlockIntoFreeList( ( pxNewBlockLink ) ); + } else { + mtCOVERAGE_TEST_MARKER(); + } + + xFreeBytesRemaining -= pxBlock->xBlockSize; + + if ( xFreeBytesRemaining < xMinimumEverFreeBytesRemaining ) { + xMinimumEverFreeBytesRemaining = xFreeBytesRemaining; + } else { + mtCOVERAGE_TEST_MARKER(); + } + + /* The block is being returned - it is allocated and owned + * by the application and has no "next" block. */ + pxBlock->xBlockSize |= xBlockAllocatedBit; + pxBlock->pxNextFreeBlock = NULL; + xNumberOfSuccessfulAllocations++; + } else { + mtCOVERAGE_TEST_MARKER(); + } + } else { mtCOVERAGE_TEST_MARKER(); + } + } else { + mtCOVERAGE_TEST_MARKER(); } + + traceMALLOC( pvReturn, xWantedSize ); + } + ( void ) xTaskResumeAll(); + +#if ( configUSE_MALLOC_FAILED_HOOK == 1 ) + { + if ( pvReturn == NULL ) { + extern void vApplicationMallocFailedHook( void ); + vApplicationMallocFailedHook(); + } else { + mtCOVERAGE_TEST_MARKER(); + } + } +#endif /* if ( configUSE_MALLOC_FAILED_HOOK == 1 ) */ + + return pvReturn; } /*-----------------------------------------------------------*/ -void vPortDefineHeapRegions( const HeapRegion_t * const pxHeapRegions ) -{ - BlockLink_t * pxFirstFreeBlockInRegion = NULL, * pxPreviousFreeBlock; - size_t xAlignedHeap; - size_t xTotalRegionSize, xTotalHeapSize = 0; - BaseType_t xDefinedRegions = 0; - size_t xAddress; - const HeapRegion_t * pxHeapRegion; +void vPortFree( void *pv ) { + uint8_t *puc = ( uint8_t * ) pv; + BlockLink_t *pxLink; - /* Can only call once! */ - configASSERT( pxEnd == NULL ); + if ( pv != NULL ) { + /* The memory being freed will have an BlockLink_t structure immediately + * before it. */ + puc -= xHeapStructSize; + /* This casting is to keep the compiler from issuing warnings. */ + pxLink = ( void * ) puc; + + /* Check the block is actually allocated. */ + configASSERT( ( pxLink->xBlockSize & xBlockAllocatedBit ) != 0 ); + configASSERT( pxLink->pxNextFreeBlock == NULL ); + + if ( ( pxLink->xBlockSize & xBlockAllocatedBit ) != 0 ) { + if ( pxLink->pxNextFreeBlock == NULL ) { + /* The block is being returned to the heap - it is no longer + * allocated. */ + pxLink->xBlockSize &= ~xBlockAllocatedBit; + + vTaskSuspendAll(); + { + /* Add this block to the list of free blocks. */ + xFreeBytesRemaining += pxLink->xBlockSize; + traceFREE( pv, pxLink->xBlockSize ); + prvInsertBlockIntoFreeList( ( ( BlockLink_t * ) pxLink ) ); + xNumberOfSuccessfulFrees++; + } + ( void ) xTaskResumeAll(); + } else { + mtCOVERAGE_TEST_MARKER(); + } + } else { + mtCOVERAGE_TEST_MARKER(); + } + } +} +/*-----------------------------------------------------------*/ + +size_t xPortGetFreeHeapSize( void ) { return xFreeBytesRemaining; } +/*-----------------------------------------------------------*/ + +size_t xPortGetMinimumEverFreeHeapSize( void ) { return xMinimumEverFreeBytesRemaining; } +/*-----------------------------------------------------------*/ + +static void prvInsertBlockIntoFreeList( BlockLink_t *pxBlockToInsert ) { + BlockLink_t *pxIterator; + uint8_t *puc; + + /* Iterate through the list until a block is found that has a higher address + * than the block being inserted. */ + for ( pxIterator = &xStart; pxIterator->pxNextFreeBlock < pxBlockToInsert; pxIterator = pxIterator->pxNextFreeBlock ) { + /* Nothing to do here, just iterate to the right position. */ + } + + /* Do the block being inserted, and the block it is being inserted after + * make a contiguous block of memory? */ + puc = ( uint8_t * ) pxIterator; + + if ( ( puc + pxIterator->xBlockSize ) == ( uint8_t * ) pxBlockToInsert ) { + pxIterator->xBlockSize += pxBlockToInsert->xBlockSize; + pxBlockToInsert = pxIterator; + } else { + mtCOVERAGE_TEST_MARKER(); + } + + /* Do the block being inserted, and the block it is being inserted before + * make a contiguous block of memory? */ + puc = ( uint8_t * ) pxBlockToInsert; + + if ( ( puc + pxBlockToInsert->xBlockSize ) == ( uint8_t * ) pxIterator->pxNextFreeBlock ) { + if ( pxIterator->pxNextFreeBlock != pxEnd ) { + /* Form one big block from the two blocks. */ + pxBlockToInsert->xBlockSize += pxIterator->pxNextFreeBlock->xBlockSize; + pxBlockToInsert->pxNextFreeBlock = pxIterator->pxNextFreeBlock->pxNextFreeBlock; + } else { + pxBlockToInsert->pxNextFreeBlock = pxEnd; + } + } else { + pxBlockToInsert->pxNextFreeBlock = pxIterator->pxNextFreeBlock; + } + + /* If the block being inserted plugged a gab, so was merged with the block + * before and the block after, then it's pxNextFreeBlock pointer will have + * already been set, and should not be set here as that would make it point + * to itself. */ + if ( pxIterator != pxBlockToInsert ) { + pxIterator->pxNextFreeBlock = pxBlockToInsert; + } else { + mtCOVERAGE_TEST_MARKER(); + } +} +/*-----------------------------------------------------------*/ + +void vPortDefineHeapRegions( const HeapRegion_t * const pxHeapRegions ) { + BlockLink_t *pxFirstFreeBlockInRegion = NULL, *pxPreviousFreeBlock; + size_t xAlignedHeap; + size_t xTotalRegionSize, xTotalHeapSize = 0; + BaseType_t xDefinedRegions = 0; + size_t xAddress; + const HeapRegion_t *pxHeapRegion; + + /* Can only call once! */ + configASSERT( pxEnd == NULL ); + + pxHeapRegion = &( pxHeapRegions[ xDefinedRegions ] ); + + while ( pxHeapRegion->xSizeInBytes > 0 ) { + xTotalRegionSize = pxHeapRegion->xSizeInBytes; + + /* Ensure the heap region starts on a correctly aligned boundary. */ + xAddress = ( size_t ) pxHeapRegion->pucStartAddress; + + if ( ( xAddress & portBYTE_ALIGNMENT_MASK ) != 0 ) { + xAddress += ( portBYTE_ALIGNMENT - 1 ); + xAddress &= ~portBYTE_ALIGNMENT_MASK; + + /* Adjust the size for the bytes lost to alignment. */ + xTotalRegionSize -= xAddress - ( size_t ) pxHeapRegion->pucStartAddress; + } + + xAlignedHeap = xAddress; + + /* Set xStart if it has not already been set. */ + if ( xDefinedRegions == 0 ) { + /* xStart is used to hold a pointer to the first item in the list of + * free blocks. The void cast is used to prevent compiler warnings. */ + xStart.pxNextFreeBlock = ( BlockLink_t * ) xAlignedHeap; + xStart.xBlockSize = ( size_t ) 0; + } else { + /* Should only get here if one region has already been added to the + * heap. */ + configASSERT( pxEnd != NULL ); + + /* Check blocks are passed in with increasing start addresses. */ + configASSERT( xAddress > ( size_t ) pxEnd ); + } + + /* Remember the location of the end marker in the previous region, if + * any. */ + pxPreviousFreeBlock = pxEnd; + + /* pxEnd is used to mark the end of the list of free blocks and is + * inserted at the end of the region space. */ + xAddress = xAlignedHeap + xTotalRegionSize; + xAddress -= xHeapStructSize; + xAddress &= ~portBYTE_ALIGNMENT_MASK; + + pxEnd = ( BlockLink_t * ) xAddress; + pxEnd->xBlockSize = 0; + pxEnd->pxNextFreeBlock = NULL; + + /* To start with there is a single free block in this region that is + * sized to take up the entire heap region minus the space taken by the + * free block structure. */ + pxFirstFreeBlockInRegion = ( BlockLink_t * ) xAlignedHeap; + pxFirstFreeBlockInRegion->xBlockSize = xAddress - ( size_t ) pxFirstFreeBlockInRegion; + pxFirstFreeBlockInRegion->pxNextFreeBlock = pxEnd; + + /* If this is not the first region that makes up the entire heap space + * then link the previous region to this region. */ + if ( pxPreviousFreeBlock != NULL ) { + pxPreviousFreeBlock->pxNextFreeBlock = pxFirstFreeBlockInRegion; + } + + xTotalHeapSize += pxFirstFreeBlockInRegion->xBlockSize; + + /* Move onto the next HeapRegion_t structure. */ + xDefinedRegions++; pxHeapRegion = &( pxHeapRegions[ xDefinedRegions ] ); + } - while( pxHeapRegion->xSizeInBytes > 0 ) - { - xTotalRegionSize = pxHeapRegion->xSizeInBytes; + xMinimumEverFreeBytesRemaining = xTotalHeapSize; + xFreeBytesRemaining = xTotalHeapSize; - /* Ensure the heap region starts on a correctly aligned boundary. */ - xAddress = ( size_t ) pxHeapRegion->pucStartAddress; + /* Check something was actually defined before it is accessed. */ + configASSERT( xTotalHeapSize ); - if( ( xAddress & portBYTE_ALIGNMENT_MASK ) != 0 ) - { - xAddress += ( portBYTE_ALIGNMENT - 1 ); - xAddress &= ~portBYTE_ALIGNMENT_MASK; - - /* Adjust the size for the bytes lost to alignment. */ - xTotalRegionSize -= xAddress - ( size_t ) pxHeapRegion->pucStartAddress; - } - - xAlignedHeap = xAddress; - - /* Set xStart if it has not already been set. */ - if( xDefinedRegions == 0 ) - { - /* xStart is used to hold a pointer to the first item in the list of - * free blocks. The void cast is used to prevent compiler warnings. */ - xStart.pxNextFreeBlock = ( BlockLink_t * ) xAlignedHeap; - xStart.xBlockSize = ( size_t ) 0; - } - else - { - /* Should only get here if one region has already been added to the - * heap. */ - configASSERT( pxEnd != NULL ); - - /* Check blocks are passed in with increasing start addresses. */ - configASSERT( xAddress > ( size_t ) pxEnd ); - } - - /* Remember the location of the end marker in the previous region, if - * any. */ - pxPreviousFreeBlock = pxEnd; - - /* pxEnd is used to mark the end of the list of free blocks and is - * inserted at the end of the region space. */ - xAddress = xAlignedHeap + xTotalRegionSize; - xAddress -= xHeapStructSize; - xAddress &= ~portBYTE_ALIGNMENT_MASK; - pxEnd = ( BlockLink_t * ) xAddress; - pxEnd->xBlockSize = 0; - pxEnd->pxNextFreeBlock = NULL; - - /* To start with there is a single free block in this region that is - * sized to take up the entire heap region minus the space taken by the - * free block structure. */ - pxFirstFreeBlockInRegion = ( BlockLink_t * ) xAlignedHeap; - pxFirstFreeBlockInRegion->xBlockSize = xAddress - ( size_t ) pxFirstFreeBlockInRegion; - pxFirstFreeBlockInRegion->pxNextFreeBlock = pxEnd; - - /* If this is not the first region that makes up the entire heap space - * then link the previous region to this region. */ - if( pxPreviousFreeBlock != NULL ) - { - pxPreviousFreeBlock->pxNextFreeBlock = pxFirstFreeBlockInRegion; - } - - xTotalHeapSize += pxFirstFreeBlockInRegion->xBlockSize; - - /* Move onto the next HeapRegion_t structure. */ - xDefinedRegions++; - pxHeapRegion = &( pxHeapRegions[ xDefinedRegions ] ); - } - - xMinimumEverFreeBytesRemaining = xTotalHeapSize; - xFreeBytesRemaining = xTotalHeapSize; - - /* Check something was actually defined before it is accessed. */ - configASSERT( xTotalHeapSize ); - - /* Work out the position of the top bit in a size_t variable. */ - xBlockAllocatedBit = ( ( size_t ) 1 ) << ( ( sizeof( size_t ) * heapBITS_PER_BYTE ) - 1 ); + /* Work out the position of the top bit in a size_t variable. */ + xBlockAllocatedBit = ( ( size_t ) 1 ) << ( ( sizeof( size_t ) * heapBITS_PER_BYTE ) - 1 ); } /*-----------------------------------------------------------*/ -void vPortGetHeapStats( HeapStats_t * pxHeapStats ) -{ - BlockLink_t * pxBlock; - size_t xBlocks = 0, xMaxSize = 0, xMinSize = portMAX_DELAY; /* portMAX_DELAY used as a portable way of getting the maximum value. */ +void vPortGetHeapStats( HeapStats_t *pxHeapStats ) { + BlockLink_t *pxBlock; + size_t xBlocks = 0, xMaxSize = 0, xMinSize = portMAX_DELAY; /* portMAX_DELAY used as a portable way of getting the maximum value. */ - vTaskSuspendAll(); - { - pxBlock = xStart.pxNextFreeBlock; + vTaskSuspendAll(); + { + pxBlock = xStart.pxNextFreeBlock; - /* pxBlock will be NULL if the heap has not been initialised. The heap - * is initialised automatically when the first allocation is made. */ - if( pxBlock != NULL ) - { - do - { - /* Increment the number of blocks and record the largest block seen - * so far. */ - xBlocks++; + /* pxBlock will be NULL if the heap has not been initialised. The heap + * is initialised automatically when the first allocation is made. */ + if ( pxBlock != NULL ) { + do { + /* Increment the number of blocks and record the largest block seen + * so far. */ + xBlocks++; - if( pxBlock->xBlockSize > xMaxSize ) - { - xMaxSize = pxBlock->xBlockSize; - } - - /* Heap five will have a zero sized block at the end of each - * each region - the block is only used to link to the next - * heap region so it not a real block. */ - if( pxBlock->xBlockSize != 0 ) - { - if( pxBlock->xBlockSize < xMinSize ) - { - xMinSize = pxBlock->xBlockSize; - } - } - - /* Move to the next block in the chain until the last block is - * reached. */ - pxBlock = pxBlock->pxNextFreeBlock; - } while( pxBlock != pxEnd ); + if ( pxBlock->xBlockSize > xMaxSize ) { + xMaxSize = pxBlock->xBlockSize; } - } - ( void ) xTaskResumeAll(); - pxHeapStats->xSizeOfLargestFreeBlockInBytes = xMaxSize; - pxHeapStats->xSizeOfSmallestFreeBlockInBytes = xMinSize; - pxHeapStats->xNumberOfFreeBlocks = xBlocks; + /* Heap five will have a zero sized block at the end of each + * each region - the block is only used to link to the next + * heap region so it not a real block. */ + if ( pxBlock->xBlockSize != 0 ) { + if ( pxBlock->xBlockSize < xMinSize ) { + xMinSize = pxBlock->xBlockSize; + } + } - taskENTER_CRITICAL(); - { - pxHeapStats->xAvailableHeapSpaceInBytes = xFreeBytesRemaining; - pxHeapStats->xNumberOfSuccessfulAllocations = xNumberOfSuccessfulAllocations; - pxHeapStats->xNumberOfSuccessfulFrees = xNumberOfSuccessfulFrees; - pxHeapStats->xMinimumEverFreeBytesRemaining = xMinimumEverFreeBytesRemaining; + /* Move to the next block in the chain until the last block is + * reached. */ + pxBlock = pxBlock->pxNextFreeBlock; + } while ( pxBlock != pxEnd ); } - taskEXIT_CRITICAL(); + } + ( void ) xTaskResumeAll(); + + pxHeapStats->xSizeOfLargestFreeBlockInBytes = xMaxSize; + pxHeapStats->xSizeOfSmallestFreeBlockInBytes = xMinSize; + pxHeapStats->xNumberOfFreeBlocks = xBlocks; + + taskENTER_CRITICAL(); + { + pxHeapStats->xAvailableHeapSpaceInBytes = xFreeBytesRemaining; + pxHeapStats->xNumberOfSuccessfulAllocations = xNumberOfSuccessfulAllocations; + pxHeapStats->xNumberOfSuccessfulFrees = xNumberOfSuccessfulFrees; + pxHeapStats->xMinimumEverFreeBytesRemaining = xMinimumEverFreeBytesRemaining; + } + taskEXIT_CRITICAL(); } diff --git a/source/Core/BSP/Pinecilv2/ble.c b/source/Core/BSP/Pinecilv2/ble.c index b8b3f5c1..5206d6af 100644 --- a/source/Core/BSP/Pinecilv2/ble.c +++ b/source/Core/BSP/Pinecilv2/ble.c @@ -1,70 +1,61 @@ -#include -#include -#include -#include -#include "bflb_platform.h" -#include +#include "ble.h" #include "BSP.h" +#include "bflb_platform.h" +#include "bl702_glb.h" +#include "ble_characteristics.h" +#include "ble_peripheral.h" #include "bluetooth.h" #include "conn.h" #include "gatt.h" -#include "hci_core.h" -#include "uuid.h" -#include "ble_peripheral.h" -#include "log.h" -#include "bl702_glb.h" -#include "ble_characteristics.h" #include "hal_clock.h" -#include "ble.h" +#include "hci_core.h" +#include "log.h" +#include "uuid.h" +#include +#include +#include +#include +#include +void ble_stack_start(void) { + MSG("BLE Starting\n"); + GLB_Set_EM_Sel(GLB_EM_8KB); + ble_controller_init(configMAX_PRIORITIES - 1); + // Initialize BLE Host stack + hci_driver_init(); - -void ble_stack_start(void) -{ - MSG("BLE Starting\n"); - GLB_Set_EM_Sel(GLB_EM_8KB); - ble_controller_init(configMAX_PRIORITIES - 1); - - // // Initialize BLE Host stack - hci_driver_init(); - - bt_enable(bt_enable_cb); - MSG("BLE Starting...Done\n"); + bt_enable(bt_enable_cb); + MSG("BLE Starting...Done\n"); } - - /* configSUPPORT_STATIC_ALLOCATION and configUSE_TIMERS are both set to 1, so the application must provide an implementation of vApplicationGetTimerTaskMemory() to provide the memory that is used by the Timer service task. */ -void vApplicationGetTimerTaskMemory(StaticTask_t **ppxTimerTaskTCBBuffer, StackType_t **ppxTimerTaskStackBuffer, uint32_t *pulTimerTaskStackSize) -{ - /* If the buffers to be provided to the Timer task are declared inside this - function then they must be declared static - otherwise they will be allocated on - the stack and so not exists after this function exits. */ - static StaticTask_t xTimerTaskTCB; - static StackType_t uxTimerTaskStack[configTIMER_TASK_STACK_DEPTH]; +void vApplicationGetTimerTaskMemory(StaticTask_t **ppxTimerTaskTCBBuffer, StackType_t **ppxTimerTaskStackBuffer, uint32_t *pulTimerTaskStackSize) { + /* If the buffers to be provided to the Timer task are declared inside this + function then they must be declared static - otherwise they will be allocated on + the stack and so not exists after this function exits. */ + static StaticTask_t xTimerTaskTCB; + static StackType_t uxTimerTaskStack[configTIMER_TASK_STACK_DEPTH]; - /* Pass out a pointer to the StaticTask_t structure in which the Timer - task's state will be stored. */ - *ppxTimerTaskTCBBuffer = &xTimerTaskTCB; + /* Pass out a pointer to the StaticTask_t structure in which the Timer + task's state will be stored. */ + *ppxTimerTaskTCBBuffer = &xTimerTaskTCB; - /* Pass out the array that will be used as the Timer task's stack. */ - *ppxTimerTaskStackBuffer = uxTimerTaskStack; + /* Pass out the array that will be used as the Timer task's stack. */ + *ppxTimerTaskStackBuffer = uxTimerTaskStack; - /* Pass out the size of the array pointed to by *ppxTimerTaskStackBuffer. - Note that, as the array is necessarily of type StackType_t, - configTIMER_TASK_STACK_DEPTH is specified in words, not bytes. */ - *pulTimerTaskStackSize = configTIMER_TASK_STACK_DEPTH; + /* Pass out the size of the array pointed to by *ppxTimerTaskStackBuffer. + Note that, as the array is necessarily of type StackType_t, + configTIMER_TASK_STACK_DEPTH is specified in words, not bytes. */ + *pulTimerTaskStackSize = configTIMER_TASK_STACK_DEPTH; } +void vApplicationMallocFailedHook(void) { + MSG("vApplicationMallocFailedHook\r\n"); - -void vApplicationMallocFailedHook(void) -{ - MSG("vApplicationMallocFailedHook\r\n"); - - while (1) - ; -} \ No newline at end of file + while (1) { + ; + } +} diff --git a/source/Core/BSP/Pinecilv2/ble_handlers.cpp b/source/Core/BSP/Pinecilv2/ble_handlers.cpp index f4e407c1..b2319819 100644 --- a/source/Core/BSP/Pinecilv2/ble_handlers.cpp +++ b/source/Core/BSP/Pinecilv2/ble_handlers.cpp @@ -113,8 +113,9 @@ int ble_char_read_status_callback(struct bt_conn *conn, const struct bt_gatt_att // hall sensor { int16_t hallEffectStrength = getRawHallEffect(); - if (hallEffectStrength < 0) + if (hallEffectStrength < 0) { hallEffectStrength = -hallEffectStrength; + } temp = hallEffectStrength; memcpy(buf, &temp, sizeof(temp)); return sizeof(temp); diff --git a/source/Core/BSP/Pinecilv2/ble_peripheral.c b/source/Core/BSP/Pinecilv2/ble_peripheral.c index cc3a030f..1cbf4ba1 100644 --- a/source/Core/BSP/Pinecilv2/ble_peripheral.c +++ b/source/Core/BSP/Pinecilv2/ble_peripheral.c @@ -258,7 +258,9 @@ static struct bt_gatt_attr ble_attrs_declaration[] = { NAME get_attr */ -struct bt_gatt_attr *get_attr(u8_t index) { return &ble_attrs_declaration[index]; } +struct bt_gatt_attr *get_attr(u8_t index) { + return &ble_attrs_declaration[index]; +} static struct bt_gatt_service ble_tp_server = BT_GATT_SERVICE(ble_attrs_declaration); diff --git a/source/Core/BSP/Pinecilv2/ble_peripheral.h b/source/Core/BSP/Pinecilv2/ble_peripheral.h index 6679e372..3d45290d 100644 --- a/source/Core/BSP/Pinecilv2/ble_peripheral.h +++ b/source/Core/BSP/Pinecilv2/ble_peripheral.h @@ -10,6 +10,7 @@ NOTES #ifndef _BLE_TP_SVC_H_ #define _BLE_TP_SVC_H_ +#include "types.h" #include "ble_config.h" // read value handle offset 2 diff --git a/source/Core/BSP/Sequre_S60/Setup.cpp b/source/Core/BSP/Sequre_S60/Setup.cpp index 353d1d01..562ee223 100644 --- a/source/Core/BSP/Sequre_S60/Setup.cpp +++ b/source/Core/BSP/Sequre_S60/Setup.cpp @@ -206,8 +206,9 @@ static void MX_ADC1_Init(void) { HAL_ADCEx_InjectedConfigChannel(&hadc1, &sConfigInjected); SET_BIT(hadc1.Instance->CR1, (ADC_CR1_JEOCIE)); // Enable end of injected conv irq // Run ADC internal calibration - while (HAL_ADCEx_Calibration_Start(&hadc1) != HAL_OK) + while (HAL_ADCEx_Calibration_Start(&hadc1) != HAL_OK) { ; + } } /* ADC2 init function */ @@ -244,8 +245,9 @@ static void MX_ADC2_Init(void) { HAL_ADCEx_InjectedConfigChannel(&hadc2, &sConfigInjected); // Run ADC internal calibration - while (HAL_ADCEx_Calibration_Start(&hadc2) != HAL_OK) + while (HAL_ADCEx_Calibration_Start(&hadc2) != HAL_OK) { ; + } } /* I2C1 init function */ static void MX_I2C1_Init(void) { diff --git a/source/Core/BSP/Sequre_S60/flash.c b/source/Core/BSP/Sequre_S60/flash.c index c6a8793e..7df30992 100644 --- a/source/Core/BSP/Sequre_S60/flash.c +++ b/source/Core/BSP/Sequre_S60/flash.c @@ -30,10 +30,9 @@ void flash_save_buffer(const uint8_t *buffer, const uint16_t length) { HAL_FLASH_Unlock(); for (uint16_t i = 0; i < (length / 2); i++) { resetWatchdog(); - HAL_FLASH_Program(FLASH_TYPEPROGRAM_HALFWORD, SETTINGS_START_PAGE+ (i*sizeof(uint16_t)), data[i]); + HAL_FLASH_Program(FLASH_TYPEPROGRAM_HALFWORD, SETTINGS_START_PAGE + (i * sizeof(uint16_t)), data[i]); } HAL_FLASH_Lock(); - } -void flash_read_buffer(uint8_t *buffer, const uint16_t length) { memcpy(buffer, (uint8_t*)SETTINGS_START_PAGE, length); } +void flash_read_buffer(uint8_t *buffer, const uint16_t length) { memcpy(buffer, (uint8_t *)SETTINGS_START_PAGE, length); } diff --git a/source/Core/BSP/Sequre_S60/port.c b/source/Core/BSP/Sequre_S60/port.c index 125b29f5..1b641778 100644 --- a/source/Core/BSP/Sequre_S60/port.c +++ b/source/Core/BSP/Sequre_S60/port.c @@ -208,40 +208,38 @@ static void prvTaskExitError(void) { // therefore not output an 'unreachable code' warning for code that appears // after it. */ // } - for(;;){ - - } + for (;;) {} } /*-----------------------------------------------------------*/ void vPortSVCHandler(void) { - __asm volatile(" ldr r3, pxCurrentTCBConst2 \n" /* Restore the context. */ - " ldr r1, [r3] \n" /* Use pxCurrentTCBConst to get the pxCurrentTCB address. */ - " ldr r0, [r1] \n" /* The first item in pxCurrentTCB is the task top of stack. */ - " ldmia r0!, {r4-r11} \n" /* Pop the registers that are not automatically saved on exception entry and the critical nesting count. */ - " msr psp, r0 \n" /* Restore the task stack pointer. */ - " isb \n" - " mov r0, #0 \n" - " msr basepri, r0 \n" - " orr r14, #0xd \n" - " bx r14 \n" - " \n" - " .align 4 \n" - "pxCurrentTCBConst2: .word pxCurrentTCB \n"); + __asm volatile(" ldr r3, pxCurrentTCBConst2 \n" /* Restore the context. */ + " ldr r1, [r3] \n" /* Use pxCurrentTCBConst to get the pxCurrentTCB address. */ + " ldr r0, [r1] \n" /* The first item in pxCurrentTCB is the task top of stack. */ + " ldmia r0!, {r4-r11} \n" /* Pop the registers that are not automatically saved on exception entry and the critical nesting count. */ + " msr psp, r0 \n" /* Restore the task stack pointer. */ + " isb \n" + " mov r0, #0 \n" + " msr basepri, r0 \n" + " orr r14, #0xd \n" + " bx r14 \n" + " \n" + " .align 4 \n" + "pxCurrentTCBConst2: .word pxCurrentTCB \n"); } /*-----------------------------------------------------------*/ static void prvPortStartFirstTask(void) { - __asm volatile(" ldr r0, =0xE000ED08 \n" /* Use the NVIC offset register to locate the stack. */ - " ldr r0, [r0] \n" - " ldr r0, [r0] \n" - " msr msp, r0 \n" /* Set the msp back to the start of the stack. */ - " cpsie i \n" /* Globally enable interrupts. */ - " cpsie f \n" - " dsb \n" - " isb \n" - " svc 0 \n" /* System call to start first task. */ - " nop \n"); + __asm volatile(" ldr r0, =0xE000ED08 \n" /* Use the NVIC offset register to locate the stack. */ + " ldr r0, [r0] \n" + " ldr r0, [r0] \n" + " msr msp, r0 \n" /* Set the msp back to the start of the stack. */ + " cpsie i \n" /* Globally enable interrupts. */ + " cpsie f \n" + " dsb \n" + " isb \n" + " svc 0 \n" /* System call to start first task. */ + " nop \n"); } /*-----------------------------------------------------------*/ diff --git a/source/Core/Src/FreeRTOSHooks.c b/source/Core/Src/FreeRTOSHooks.c index dce6771c..47435082 100644 --- a/source/Core/Src/FreeRTOSHooks.c +++ b/source/Core/Src/FreeRTOSHooks.c @@ -20,8 +20,7 @@ void vApplicationGetIdleTaskMemory(StaticTask_t **ppxIdleTaskTCBBuffer, StackTyp /* place for user code */ } -void vApplicationStackOverflowHook( TaskHandle_t xTask, - char * pcTaskName ) { +void vApplicationStackOverflowHook(TaskHandle_t xTask, char *pcTaskName) { (void)xTask; (void)pcTaskName; diff --git a/source/Core/Src/QC3.cpp b/source/Core/Src/QC3.cpp index e1b7c8c1..f5e2977f 100644 --- a/source/Core/Src/QC3.cpp +++ b/source/Core/Src/QC3.cpp @@ -11,29 +11,34 @@ #include "cmsis_os.h" #include "configuration.h" #include "stdint.h" + enum QCState { NOT_STARTED = 0, // Have not checked QC_3 = 1, QC_2 = 2, NO_QC = 3, - }; + void QC_Seek9V() { QC_DNegZero_Six(); QC_DPlusThree_Three(); } + void QC_Seek12V() { QC_DNegZero_Six(); QC_DPlusZero_Six(); } + void QC_Seek20V() { QC_DNegThree_Three(); QC_DPlusThree_Three(); } + void QC_SeekContMode() { QC_DNegThree_Three(); QC_DPlusZero_Six(); } + void QC_SeekContPlus() { QC_SeekContMode(); osDelay(30); @@ -41,6 +46,7 @@ void QC_SeekContPlus() { osDelay(10); QC_SeekContMode(); } + void QC_SeekContNeg() { QC_SeekContMode(); osDelay(30); @@ -48,17 +54,21 @@ void QC_SeekContNeg() { osDelay(10); QC_SeekContMode(); } + QCState QCMode = QCState::NOT_STARTED; uint8_t QCTries = 0; void seekQC(int16_t Vx10, uint16_t divisor) { - if (QCMode == QCState::NOT_STARTED) + if (QCMode == QCState::NOT_STARTED) { startQC(divisor); + } - if (Vx10 < 40) // Bail out if less than 4V + if (Vx10 < 40) { // Bail out if less than 4V return; + } - if (xTaskGetTickCount() < TICKS_SECOND) + if (xTaskGetTickCount() < TICKS_SECOND) { return; + } // Seek the QC to the Voltage given if this adapter supports continuous mode // try and step towards the wanted value @@ -87,8 +97,9 @@ void seekQC(int16_t Vx10, uint16_t divisor) { // Re-measure /* Disabled due to nothing to test and code space of around 1k*/ steps = vStart - getInputVoltageX10(divisor, 0); - if (steps < 0) + if (steps < 0) { steps = -steps; + } if (steps > 4) { // No continuous mode, so QC2 QCMode = QCState::QC_2; @@ -104,8 +115,9 @@ void seekQC(int16_t Vx10, uint16_t divisor) { QC_Seek9V(); } } -#endif +#endif /* ENABLE_QC2 */ } + // Must be called after FreeRToS Starts void startQC(uint16_t divisor) { // Pre check that the input could be >5V already, and if so, dont both @@ -143,7 +155,9 @@ void startQC(uint16_t divisor) { } } } + QC_DM_No_PullDown(); + if (enteredQC) { // We have a QC capable charger QC_Seek9V(); @@ -161,7 +175,6 @@ void startQC(uint16_t divisor) { } QCMode = QCState::NOT_STARTED; QCTries++; - } else { // no QC QCTries++; diff --git a/source/Core/Src/Settings.cpp b/source/Core/Src/Settings.cpp index 00f33c54..db6ec0a0 100644 --- a/source/Core/Src/Settings.cpp +++ b/source/Core/Src/Settings.cpp @@ -261,8 +261,9 @@ uint16_t lookupHallEffectThreshold() { uint8_t lookupVoltageLevel() { auto minVoltageOnCell = getSettingValue(SettingsOptions::MinDCVoltageCells); auto minVoltageCellCount = getSettingValue(SettingsOptions::MinVoltageCells); - if (minVoltageOnCell == 0) + if (minVoltageOnCell == 0) { return 90; // 9V since iron does not function effectively below this - else + } else { return (minVoltageOnCell * minVoltageCellCount) + (minVoltageCellCount * 2); + } } diff --git a/source/Core/Src/settingsGUI.cpp b/source/Core/Src/settingsGUI.cpp index 636e5bb4..7dbfafb3 100644 --- a/source/Core/Src/settingsGUI.cpp +++ b/source/Core/Src/settingsGUI.cpp @@ -175,7 +175,7 @@ static bool enterAdvancedMenu(void); * Display Orientation * Cooldown Blink * Scrolling Speed - * Swap Temp Change Buttons + - + * Swap Temp Change Buttons +/- * Animation Speed * -Animation Loop * OLED Brightness @@ -196,6 +196,14 @@ static bool enterAdvancedMenu(void); * */ +/* vvv !!!DISABLE CLANG-FORMAT for menuitems initialization!!! vvv */ + +/* clang-format off */ + +/* A lot of suggestions by clang-format can be useful + * but not when dealing with such menuitems declarations. + */ + const menuitem rootSettingsMenu[] { /* * Power Menu @@ -207,177 +215,233 @@ const menuitem rootSettingsMenu[] { * Exit */ #if defined(POW_DC) || defined(POW_QC) - {0, enterPowerMenu, displayPowerMenu, nullptr, SettingsOptions::SettingsOptionsLength, SettingsItemIndex::NUM_ITEMS, 0}, /*Power*/ -#endif /* POW_DC or POW_QC */ - {0, enterSolderingMenu, displaySolderingMenu, nullptr, SettingsOptions::SettingsOptionsLength, SettingsItemIndex::NUM_ITEMS, 0}, /*Soldering*/ - {0, enterPowerSavingMenu, displayPowerSavingMenu, nullptr, SettingsOptions::SettingsOptionsLength, SettingsItemIndex::NUM_ITEMS, 0}, /*Sleep Options Menu*/ - {0, enterUIMenu, displayUIMenu, nullptr, SettingsOptions::SettingsOptionsLength, SettingsItemIndex::NUM_ITEMS, 0}, /*UI Menu*/ - {0, enterAdvancedMenu, displayAdvancedMenu, nullptr, SettingsOptions::SettingsOptionsLength, SettingsItemIndex::NUM_ITEMS, 0}, /*Advanced Menu*/ - {0, settings_setLanguageSwitch, settings_displayLanguageSwitch, settings_showLanguageSwitch, SettingsOptions::SettingsOptionsLength, SettingsItemIndex::NUM_ITEMS, 0}, /*Language Switch*/ - { - 0, nullptr, nullptr, nullptr, SettingsOptions::SettingsOptionsLength, SettingsItemIndex::NUM_ITEMS, 0 - } // end of menu marker. DO NOT REMOVE + /* Power */ + {0, enterPowerMenu, displayPowerMenu, nullptr, SettingsOptions::SettingsOptionsLength, SettingsItemIndex::NUM_ITEMS, 0}, +#endif + /* Soldering */ + {0, enterSolderingMenu, displaySolderingMenu, nullptr, SettingsOptions::SettingsOptionsLength, SettingsItemIndex::NUM_ITEMS, 0}, + /* Sleep Options Menu */ + {0, enterPowerSavingMenu, displayPowerSavingMenu, nullptr, SettingsOptions::SettingsOptionsLength, SettingsItemIndex::NUM_ITEMS, 0}, + /* UI Menu */ + {0, enterUIMenu, displayUIMenu, nullptr, SettingsOptions::SettingsOptionsLength, SettingsItemIndex::NUM_ITEMS, 0}, + /* Advanced Menu */ + {0, enterAdvancedMenu, displayAdvancedMenu, nullptr, SettingsOptions::SettingsOptionsLength, SettingsItemIndex::NUM_ITEMS, 0}, + /* Language Switch */ + {0, settings_setLanguageSwitch, settings_displayLanguageSwitch, settings_showLanguageSwitch, SettingsOptions::SettingsOptionsLength, SettingsItemIndex::NUM_ITEMS, 0}, + /* vvvv end of menu marker. DO NOT REMOVE vvvv */ + {0, nullptr, nullptr, nullptr, SettingsOptions::SettingsOptionsLength, SettingsItemIndex::NUM_ITEMS, 0} + /* ^^^^ end of menu marker. DO NOT REMOVE ^^^^ */ }; #if defined(POW_DC) || defined(POW_QC) || defined(POW_PD) const menuitem powerMenu[] = { -/* - * Power Source - * -Minimum Voltage - * QC Voltage - * PD Timeout - * PDVpdo - */ + /* + * Power Source + * -Minimum Voltage + * QC Voltage + * PD Timeout + * PDVpdo + */ #ifdef POW_DC - {SETTINGS_DESC(SettingsItemIndex::DCInCutoff), nullptr, displayInputVRange, nullptr, SettingsOptions::MinDCVoltageCells, SettingsItemIndex::DCInCutoff, 6}, /*Voltage input*/ - {SETTINGS_DESC(SettingsItemIndex::MinVolCell), nullptr, displayInputMinVRange, showInputVOptions, SettingsOptions::MinVoltageCells, SettingsItemIndex::MinVolCell, 5}, /*Minimum voltage input*/ -#endif /* POW_DC */ + /* Voltage input */ + {SETTINGS_DESC(SettingsItemIndex::DCInCutoff), nullptr, displayInputVRange, nullptr, SettingsOptions::MinDCVoltageCells, SettingsItemIndex::DCInCutoff, 6}, + /* Minimum voltage input */ + {SETTINGS_DESC(SettingsItemIndex::MinVolCell), nullptr, displayInputMinVRange, showInputVOptions, SettingsOptions::MinVoltageCells, SettingsItemIndex::MinVolCell, 5}, +#endif #ifdef POW_QC - {SETTINGS_DESC(SettingsItemIndex::QCMaxVoltage), nullptr, displayQCInputV, nullptr, SettingsOptions::QCIdealVoltage, SettingsItemIndex::QCMaxVoltage, 4}, /*Voltage input*/ -#endif /* POW_QC */ + /* Voltage input */ + {SETTINGS_DESC(SettingsItemIndex::QCMaxVoltage), nullptr, displayQCInputV, nullptr, SettingsOptions::QCIdealVoltage, SettingsItemIndex::QCMaxVoltage, 4}, +#endif #ifdef POW_PD - {SETTINGS_DESC(SettingsItemIndex::PDNegTimeout), nullptr, displayPDNegTimeout, nullptr, SettingsOptions::PDNegTimeout, SettingsItemIndex::PDNegTimeout, 5}, /*PD timeout setup*/ - {SETTINGS_DESC(SettingsItemIndex::PDVpdo), nullptr, displayPDVpdo, nullptr, SettingsOptions::PDVpdo, SettingsItemIndex::PDVpdo, 7 }, /*Toggle PPS & EPR*/ -#endif /* POW_PD */ - {0, nullptr, nullptr, nullptr, SettingsOptions::SettingsOptionsLength, SettingsItemIndex::NUM_ITEMS, 0} // end of menu marker. DO NOT REMOVE + /* PD timeout setup */ + {SETTINGS_DESC(SettingsItemIndex::PDNegTimeout), nullptr, displayPDNegTimeout, nullptr, SettingsOptions::PDNegTimeout, SettingsItemIndex::PDNegTimeout, 5}, + /* Toggle PPS & EPR */ + {SETTINGS_DESC(SettingsItemIndex::PDVpdo), nullptr, displayPDVpdo, nullptr, SettingsOptions::PDVpdo, SettingsItemIndex::PDVpdo, 7}, +#endif + /* vvvv end of menu marker. DO NOT REMOVE vvvv */ + {0, nullptr, nullptr, nullptr, SettingsOptions::SettingsOptionsLength, SettingsItemIndex::NUM_ITEMS, 0} + /* ^^^^ end of menu marker. DO NOT REMOVE ^^^^ */ }; #endif /* POW_DC or POW_QC or POW_PD */ const menuitem solderingMenu[] = { - /* - * Boost Mode Temp - * Auto Start - * Temp Change Short Step - * Temp Change Long Step - * Locking Mode - * Profile Phases - * Profile Preheat Temperature - * Profile Preheat Max Temperature Change Per Second - * Profile Phase 1 Temperature - * Profile Phase 1 Duration (s) - * Profile Phase 2 Temperature - * Profile Phase 2 Duration (s) - * Profile Phase 3 Temperature - * Profile Phase 3 Duration (s) - * Profile Phase 4 Temperature - * Profile Phase 4 Duration (s) - * Profile Phase 5 Temperature - * Profile Phase 5 Duration (s) - * Profile Cooldown Max Temperature Change Per Second - */ - {SETTINGS_DESC(SettingsItemIndex::BoostTemperature), setBoostTemp, displayBoostTemp, nullptr, SettingsOptions::SettingsOptionsLength, SettingsItemIndex::BoostTemperature, 5}, /*Boost Temp*/ - {SETTINGS_DESC(SettingsItemIndex::AutoStart), nullptr, displayAutomaticStartMode, nullptr, SettingsOptions::AutoStartMode, SettingsItemIndex::AutoStart, 7}, /*Auto start*/ - {SETTINGS_DESC(SettingsItemIndex::TempChangeShortStep), nullptr, displayTempChangeShortStep, nullptr, SettingsOptions::TempChangeShortStep, SettingsItemIndex::TempChangeShortStep, - 6}, /*Temp change short step*/ - {SETTINGS_DESC(SettingsItemIndex::TempChangeLongStep), nullptr, displayTempChangeLongStep, nullptr, SettingsOptions::TempChangeLongStep, SettingsItemIndex::TempChangeLongStep, - 6}, /*Temp change long step*/ - {SETTINGS_DESC(SettingsItemIndex::LockingMode), nullptr, displayLockingMode, nullptr, SettingsOptions::LockingMode, SettingsItemIndex::LockingMode, 7}, /*Locking Mode*/ + /* + * Boost Mode Temp + * Auto Start + * Temp Change Short Step + * Temp Change Long Step + * Locking Mode + * Profile Phases + * Profile Preheat Temperature + * Profile Preheat Max Temperature Change Per Second + * Profile Phase 1 Temperature + * Profile Phase 1 Duration (s) + * Profile Phase 2 Temperature + * Profile Phase 2 Duration (s) + * Profile Phase 3 Temperature + * Profile Phase 3 Duration (s) + * Profile Phase 4 Temperature + * Profile Phase 4 Duration (s) + * Profile Phase 5 Temperature + * Profile Phase 5 Duration (s) + * Profile Cooldown Max Temperature Change Per Second + */ + /* Boost Temp */ + {SETTINGS_DESC(SettingsItemIndex::BoostTemperature), setBoostTemp, displayBoostTemp, nullptr, SettingsOptions::SettingsOptionsLength, SettingsItemIndex::BoostTemperature, 5}, + /* Auto start */ + {SETTINGS_DESC(SettingsItemIndex::AutoStart), nullptr, displayAutomaticStartMode, nullptr, SettingsOptions::AutoStartMode, SettingsItemIndex::AutoStart, 7}, + /* Temp change short step */ + {SETTINGS_DESC(SettingsItemIndex::TempChangeShortStep), nullptr, displayTempChangeShortStep, nullptr, SettingsOptions::TempChangeShortStep, SettingsItemIndex::TempChangeShortStep, 6}, + /* Temp change long step */ + {SETTINGS_DESC(SettingsItemIndex::TempChangeLongStep), nullptr, displayTempChangeLongStep, nullptr, SettingsOptions::TempChangeLongStep, SettingsItemIndex::TempChangeLongStep, 6}, + /* Locking Mode */ + {SETTINGS_DESC(SettingsItemIndex::LockingMode), nullptr, displayLockingMode, nullptr, SettingsOptions::LockingMode, SettingsItemIndex::LockingMode, 7}, #ifdef PROFILE_SUPPORT - {SETTINGS_DESC(SettingsItemIndex::ProfilePhases), nullptr, displayProfilePhases, nullptr, SettingsOptions::ProfilePhases, SettingsItemIndex::ProfilePhases, 7}, /*Profile Phases*/ - {SETTINGS_DESC(SettingsItemIndex::ProfilePreheatTemp), setProfilePreheatTemp, displayProfilePreheatTemp, showProfileOptions, SettingsOptions::SettingsOptionsLength, SettingsItemIndex::ProfilePreheatTemp, 5}, /*Profile Preheat Temp*/ - {SETTINGS_DESC(SettingsItemIndex::ProfilePreheatSpeed), nullptr, displayProfilePreheatSpeed, showProfileOptions, SettingsOptions::ProfilePreheatSpeed, SettingsItemIndex::ProfilePreheatSpeed, 5}, /*Profile Preheat Speed*/ - {SETTINGS_DESC(SettingsItemIndex::ProfilePhase1Temp), setProfilePhase1Temp, displayProfilePhase1Temp, showProfileOptions, SettingsOptions::SettingsOptionsLength, SettingsItemIndex::ProfilePhase1Temp, 5}, /*Phase 1 Temp*/ - {SETTINGS_DESC(SettingsItemIndex::ProfilePhase1Duration), nullptr, displayProfilePhase1Duration, showProfileOptions, SettingsOptions::ProfilePhase1Duration, SettingsItemIndex::ProfilePhase1Duration, 5}, /*Phase 1 Duration*/ - {SETTINGS_DESC(SettingsItemIndex::ProfilePhase1Temp), setProfilePhase2Temp, displayProfilePhase2Temp, showProfilePhase2Options, SettingsOptions::SettingsOptionsLength, SettingsItemIndex::ProfilePhase2Temp, 5}, /*Phase 2 Temp*/ - {SETTINGS_DESC(SettingsItemIndex::ProfilePhase1Duration), nullptr, displayProfilePhase2Duration, showProfilePhase2Options, SettingsOptions::ProfilePhase2Duration, SettingsItemIndex::ProfilePhase2Duration, 5}, /*Phase 2 Duration*/ - {SETTINGS_DESC(SettingsItemIndex::ProfilePhase1Temp), setProfilePhase3Temp, displayProfilePhase3Temp, showProfilePhase3Options, SettingsOptions::SettingsOptionsLength, SettingsItemIndex::ProfilePhase3Temp, 5}, /*Phase 3 Temp*/ - {SETTINGS_DESC(SettingsItemIndex::ProfilePhase1Duration), nullptr, displayProfilePhase3Duration, showProfilePhase3Options, SettingsOptions::ProfilePhase3Duration, SettingsItemIndex::ProfilePhase3Duration, 5}, /*Phase 3 Duration*/ - {SETTINGS_DESC(SettingsItemIndex::ProfilePhase1Temp), setProfilePhase4Temp, displayProfilePhase4Temp, showProfilePhase4Options, SettingsOptions::SettingsOptionsLength, SettingsItemIndex::ProfilePhase4Temp, 5}, /*Phase 4 Temp*/ - {SETTINGS_DESC(SettingsItemIndex::ProfilePhase1Duration), nullptr, displayProfilePhase4Duration, showProfilePhase4Options, SettingsOptions::ProfilePhase4Duration, SettingsItemIndex::ProfilePhase4Duration, 5}, /*Phase 4 Duration*/ - {SETTINGS_DESC(SettingsItemIndex::ProfilePhase1Temp), setProfilePhase5Temp, displayProfilePhase5Temp, showProfilePhase5Options, SettingsOptions::SettingsOptionsLength, SettingsItemIndex::ProfilePhase5Temp, 5}, /*Phase 5 Temp*/ - {SETTINGS_DESC(SettingsItemIndex::ProfilePhase1Duration), nullptr, displayProfilePhase5Duration, showProfilePhase5Options, SettingsOptions::ProfilePhase5Duration, SettingsItemIndex::ProfilePhase5Duration, 5}, /*Phase 5 Duration*/ - {SETTINGS_DESC(SettingsItemIndex::ProfileCooldownSpeed), nullptr, displayProfileCooldownSpeed, showProfileOptions, SettingsOptions::ProfileCooldownSpeed, SettingsItemIndex::ProfileCooldownSpeed, 5}, /*Profile Cooldown Speed*/ + /* Profile Phases */ + {SETTINGS_DESC(SettingsItemIndex::ProfilePhases), nullptr, displayProfilePhases, nullptr, SettingsOptions::ProfilePhases, SettingsItemIndex::ProfilePhases, 7}, + /* Profile Preheat Temp */ + {SETTINGS_DESC(SettingsItemIndex::ProfilePreheatTemp), setProfilePreheatTemp, displayProfilePreheatTemp, showProfileOptions, SettingsOptions::SettingsOptionsLength, SettingsItemIndex::ProfilePreheatTemp, 5}, + /* Profile Preheat Speed */ + {SETTINGS_DESC(SettingsItemIndex::ProfilePreheatSpeed), nullptr, displayProfilePreheatSpeed, showProfileOptions, SettingsOptions::ProfilePreheatSpeed, SettingsItemIndex::ProfilePreheatSpeed, 5}, + /* Phase 1 Temp */ + {SETTINGS_DESC(SettingsItemIndex::ProfilePhase1Temp), setProfilePhase1Temp, displayProfilePhase1Temp, showProfileOptions, SettingsOptions::SettingsOptionsLength, SettingsItemIndex::ProfilePhase1Temp, 5}, + /* Phase 1 Duration */ + {SETTINGS_DESC(SettingsItemIndex::ProfilePhase1Duration), nullptr, displayProfilePhase1Duration, showProfileOptions, SettingsOptions::ProfilePhase1Duration, SettingsItemIndex::ProfilePhase1Duration, 5}, + /* Phase 2 Temp */ + {SETTINGS_DESC(SettingsItemIndex::ProfilePhase1Temp), setProfilePhase2Temp, displayProfilePhase2Temp, showProfilePhase2Options, SettingsOptions::SettingsOptionsLength, SettingsItemIndex::ProfilePhase2Temp, 5}, + /* Phase 2 Duration */ + {SETTINGS_DESC(SettingsItemIndex::ProfilePhase1Duration), nullptr, displayProfilePhase2Duration, showProfilePhase2Options, SettingsOptions::ProfilePhase2Duration, SettingsItemIndex::ProfilePhase2Duration, 5}, + /* Phase 3 Temp */ + {SETTINGS_DESC(SettingsItemIndex::ProfilePhase1Temp), setProfilePhase3Temp, displayProfilePhase3Temp, showProfilePhase3Options, SettingsOptions::SettingsOptionsLength, SettingsItemIndex::ProfilePhase3Temp, 5}, + /* Phase 3 Duration */ + {SETTINGS_DESC(SettingsItemIndex::ProfilePhase1Duration), nullptr, displayProfilePhase3Duration, showProfilePhase3Options, SettingsOptions::ProfilePhase3Duration, SettingsItemIndex::ProfilePhase3Duration, 5}, + /* Phase 4 Temp */ + {SETTINGS_DESC(SettingsItemIndex::ProfilePhase1Temp), setProfilePhase4Temp, displayProfilePhase4Temp, showProfilePhase4Options, SettingsOptions::SettingsOptionsLength, SettingsItemIndex::ProfilePhase4Temp, 5}, + /* Phase 4 Duration */ + {SETTINGS_DESC(SettingsItemIndex::ProfilePhase1Duration), nullptr, displayProfilePhase4Duration, showProfilePhase4Options, SettingsOptions::ProfilePhase4Duration, SettingsItemIndex::ProfilePhase4Duration, 5}, + /* Phase 5 Temp */ + {SETTINGS_DESC(SettingsItemIndex::ProfilePhase1Temp), setProfilePhase5Temp, displayProfilePhase5Temp, showProfilePhase5Options, SettingsOptions::SettingsOptionsLength, SettingsItemIndex::ProfilePhase5Temp, 5}, + /* Phase 5 Duration */ + {SETTINGS_DESC(SettingsItemIndex::ProfilePhase1Duration), nullptr, displayProfilePhase5Duration, showProfilePhase5Options, SettingsOptions::ProfilePhase5Duration, SettingsItemIndex::ProfilePhase5Duration, 5}, + /* Profile Cooldown Speed */ + {SETTINGS_DESC(SettingsItemIndex::ProfileCooldownSpeed), nullptr, displayProfileCooldownSpeed, showProfileOptions, SettingsOptions::ProfileCooldownSpeed, SettingsItemIndex::ProfileCooldownSpeed, 5}, #endif /* PROFILE_SUPPORT */ - {0, nullptr, nullptr, nullptr, SettingsOptions::SettingsOptionsLength, SettingsItemIndex::NUM_ITEMS, 0} // end of menu marker. DO NOT REMOVE + /* vvvv end of menu marker. DO NOT REMOVE vvvv */ + {0, nullptr, nullptr, nullptr, SettingsOptions::SettingsOptionsLength, SettingsItemIndex::NUM_ITEMS, 0} + /* ^^^^ end of menu marker. DO NOT REMOVE ^^^^ */ }; const menuitem PowerSavingMenu[] = { - /* - * Motion Sensitivity - * -Sleep Temp - * -Sleep Time - * -Shutdown Time - * Hall Sensor Sensitivity - */ - {SETTINGS_DESC(SettingsItemIndex::MotionSensitivity), nullptr, displaySensitivity, nullptr, SettingsOptions::Sensitivity, SettingsItemIndex::MotionSensitivity, 7}, /* Motion Sensitivity*/ + /* + * Motion Sensitivity + * -Sleep Temp + * -Sleep Time + * -Shutdown Time + * Hall Sensor Sensitivity + */ + /* Motion Sensitivity */ + {SETTINGS_DESC(SettingsItemIndex::MotionSensitivity), nullptr, displaySensitivity, nullptr, SettingsOptions::Sensitivity, SettingsItemIndex::MotionSensitivity, 7}, #ifndef NO_SLEEP_MODE - {SETTINGS_DESC(SettingsItemIndex::SleepTemperature), setSleepTemp, displaySleepTemp, showSleepOptions, SettingsOptions::SettingsOptionsLength, SettingsItemIndex::SleepTemperature, - 5}, /*Sleep Temp*/ - {SETTINGS_DESC(SettingsItemIndex::SleepTimeout), nullptr, displaySleepTime, showSleepOptions, SettingsOptions::SleepTime, SettingsItemIndex::SleepTimeout, 5}, /*Sleep Time*/ + /* Sleep Temp */ + {SETTINGS_DESC(SettingsItemIndex::SleepTemperature), setSleepTemp, displaySleepTemp, showSleepOptions, SettingsOptions::SettingsOptionsLength, SettingsItemIndex::SleepTemperature, 5}, + /* Sleep Time */ + {SETTINGS_DESC(SettingsItemIndex::SleepTimeout), nullptr, displaySleepTime, showSleepOptions, SettingsOptions::SleepTime, SettingsItemIndex::SleepTimeout, 5}, #endif /* *not* NO_SLEEP_MODE */ - {SETTINGS_DESC(SettingsItemIndex::ShutdownTimeout), nullptr, displayShutdownTime, showSleepOptions, SettingsOptions::ShutdownTime, SettingsItemIndex::ShutdownTimeout, 5}, /*Shutdown Time*/ + /* Shutdown Time */ + {SETTINGS_DESC(SettingsItemIndex::ShutdownTimeout), nullptr, displayShutdownTime, showSleepOptions, SettingsOptions::ShutdownTime, SettingsItemIndex::ShutdownTimeout, 5}, #ifdef HALL_SENSOR - {SETTINGS_DESC(SettingsItemIndex::HallEffSensitivity), nullptr, displayHallEffect, showHallEffect, SettingsOptions::HallEffectSensitivity, SettingsItemIndex::HallEffSensitivity, - 7}, /* HallEffect Sensitivity*/ + /* Hall Effect Sensitivity */ + {SETTINGS_DESC(SettingsItemIndex::HallEffSensitivity), nullptr, displayHallEffect, showHallEffect, SettingsOptions::HallEffectSensitivity, SettingsItemIndex::HallEffSensitivity, 7}, #endif /* HALL_SENSOR */ - {0, nullptr, nullptr, nullptr, SettingsOptions::SettingsOptionsLength, SettingsItemIndex::NUM_ITEMS, 0} // end of menu marker. DO NOT REMOVE + /* vvvv end of menu marker. DO NOT REMOVE vvvv */ + {0, nullptr, nullptr, nullptr, SettingsOptions::SettingsOptionsLength, SettingsItemIndex::NUM_ITEMS, 0} + /* ^^^^ end of menu marker. DO NOT REMOVE ^^^^ */ }; const menuitem UIMenu[] = { - /* - * Temperature Unit - * Display Orientation - * Cooldown Blink - * Scrolling Speed - * Swap Temp Change Buttons + - - * Animation Speed - * -Animation Loop - * OLED Brightness - * Invert Screen - * Logo Timeout - * Detailed IDLE - * Detailed Soldering - */ - {SETTINGS_DESC(SettingsItemIndex::TemperatureUnit), setTempF, displayTempF, nullptr, SettingsOptions::SettingsOptionsLength, SettingsItemIndex::TemperatureUnit, - 7}, /* Temperature units, this has to be the first element in the array to work with the logic in enterUIMenu() */ + /* + * Temperature Unit + * Display Orientation + * Cooldown Blink + * Scrolling Speed + * Swap Temp Change Buttons +/- + * Animation Speed + * -Animation Loop + * OLED Brightness + * Invert Screen + * Logo Timeout + * Detailed IDLE + * Detailed Soldering + */ + /* Temperature units, this has to be the first element in the array to work with the logic in enterUIMenu() */ + {SETTINGS_DESC(SettingsItemIndex::TemperatureUnit), setTempF, displayTempF, nullptr, SettingsOptions::SettingsOptionsLength, SettingsItemIndex::TemperatureUnit, 7}, #ifndef NO_DISPLAY_ROTATE - {SETTINGS_DESC(SettingsItemIndex::DisplayRotation), setDisplayRotation, displayDisplayRotation, nullptr, SettingsOptions::SettingsOptionsLength, SettingsItemIndex::DisplayRotation, - 7}, /*Display Rotation*/ + /* Display Rotation */ + {SETTINGS_DESC(SettingsItemIndex::DisplayRotation), setDisplayRotation, displayDisplayRotation, nullptr, SettingsOptions::SettingsOptionsLength, SettingsItemIndex::DisplayRotation, 7}, #endif /* *not* NO_DISPLAY_ROTATE */ - {SETTINGS_DESC(SettingsItemIndex::CooldownBlink), nullptr, displayCoolingBlinkEnabled, nullptr, SettingsOptions::CoolingTempBlink, SettingsItemIndex::CooldownBlink, 7}, /*Cooling blink warning*/ - {SETTINGS_DESC(SettingsItemIndex::ScrollingSpeed), nullptr, displayScrollSpeed, nullptr, SettingsOptions::DescriptionScrollSpeed, SettingsItemIndex::ScrollingSpeed, - 7}, /*Scroll Speed for descriptions*/ - {SETTINGS_DESC(SettingsItemIndex::ReverseButtonTempChange), nullptr, displayReverseButtonTempChangeEnabled, nullptr, SettingsOptions::ReverseButtonTempChangeEnabled, - SettingsItemIndex::ReverseButtonTempChange, 7}, /*Reverse Temp change buttons + - */ - {SETTINGS_DESC(SettingsItemIndex::AnimSpeed), nullptr, displayAnimationSpeed, nullptr, SettingsOptions::AnimationSpeed, SettingsItemIndex::AnimSpeed, 7}, /*Animation Speed adjustment */ - {SETTINGS_DESC(SettingsItemIndex::AnimLoop), nullptr, displayAnimationLoop, displayAnimationOptions, SettingsOptions::AnimationLoop, SettingsItemIndex::AnimLoop, 7}, /*Animation Loop switch */ - {SETTINGS_DESC(SettingsItemIndex::Brightness), nullptr, displayBrightnessLevel, nullptr, SettingsOptions::OLEDBrightness, SettingsItemIndex::Brightness, 7}, /*Brightness Level*/ - {SETTINGS_DESC(SettingsItemIndex::ColourInversion), nullptr, displayInvertColor, nullptr, SettingsOptions::OLEDInversion, SettingsItemIndex::ColourInversion, 7}, /*Invert screen colour*/ - {SETTINGS_DESC(SettingsItemIndex::LOGOTime), nullptr, displayLogoTime, nullptr, SettingsOptions::LOGOTime, SettingsItemIndex::LOGOTime, 5}, /*Set logo duration*/ - {SETTINGS_DESC(SettingsItemIndex::AdvancedIdle), nullptr, displayAdvancedIDLEScreens, nullptr, SettingsOptions::DetailedIDLE, SettingsItemIndex::AdvancedIdle, 7}, /*Advanced idle screen*/ - {SETTINGS_DESC(SettingsItemIndex::AdvancedSoldering), nullptr, displayAdvancedSolderingScreens, nullptr, SettingsOptions::DetailedSoldering, SettingsItemIndex::AdvancedSoldering, - 7}, /*Advanced soldering screen*/ - {0, nullptr, nullptr, nullptr, SettingsOptions::SettingsOptionsLength, SettingsItemIndex::NUM_ITEMS, 0} // end of menu marker. DO NOT REMOVE + /* Cooling blink warning */ + {SETTINGS_DESC(SettingsItemIndex::CooldownBlink), nullptr, displayCoolingBlinkEnabled, nullptr, SettingsOptions::CoolingTempBlink, SettingsItemIndex::CooldownBlink, 7}, + /* Scroll Speed for descriptions */ + {SETTINGS_DESC(SettingsItemIndex::ScrollingSpeed), nullptr, displayScrollSpeed, nullptr, SettingsOptions::DescriptionScrollSpeed, SettingsItemIndex::ScrollingSpeed, 7}, + /* Reverse Temp change buttons +/- */ + {SETTINGS_DESC(SettingsItemIndex::ReverseButtonTempChange), nullptr, displayReverseButtonTempChangeEnabled, nullptr, SettingsOptions::ReverseButtonTempChangeEnabled, SettingsItemIndex::ReverseButtonTempChange, 7}, + /* Animation Speed adjustment */ + {SETTINGS_DESC(SettingsItemIndex::AnimSpeed), nullptr, displayAnimationSpeed, nullptr, SettingsOptions::AnimationSpeed, SettingsItemIndex::AnimSpeed, 7}, + /* Animation Loop switch */ + {SETTINGS_DESC(SettingsItemIndex::AnimLoop), nullptr, displayAnimationLoop, displayAnimationOptions, SettingsOptions::AnimationLoop, SettingsItemIndex::AnimLoop, 7}, + /* Brightness Level */ + {SETTINGS_DESC(SettingsItemIndex::Brightness), nullptr, displayBrightnessLevel, nullptr, SettingsOptions::OLEDBrightness, SettingsItemIndex::Brightness, 7}, + /* Invert screen colour */ + {SETTINGS_DESC(SettingsItemIndex::ColourInversion), nullptr, displayInvertColor, nullptr, SettingsOptions::OLEDInversion, SettingsItemIndex::ColourInversion, 7}, + /* Set logo duration */ + {SETTINGS_DESC(SettingsItemIndex::LOGOTime), nullptr, displayLogoTime, nullptr, SettingsOptions::LOGOTime, SettingsItemIndex::LOGOTime, 5}, + /* Advanced idle screen */ + {SETTINGS_DESC(SettingsItemIndex::AdvancedIdle), nullptr, displayAdvancedIDLEScreens, nullptr, SettingsOptions::DetailedIDLE, SettingsItemIndex::AdvancedIdle, 7}, + /* Advanced soldering screen */ + {SETTINGS_DESC(SettingsItemIndex::AdvancedSoldering), nullptr, displayAdvancedSolderingScreens, nullptr, SettingsOptions::DetailedSoldering, SettingsItemIndex::AdvancedSoldering, 7}, + /* vvvv end of menu marker. DO NOT REMOVE vvvv */ + {0, nullptr, nullptr, nullptr, SettingsOptions::SettingsOptionsLength, SettingsItemIndex::NUM_ITEMS, 0} + /* ^^^^ end of menu marker. DO NOT REMOVE ^^^^ */ }; const menuitem advancedMenu[] = { -/* - * BluetoothLE - * Power Limit - * Calibrate CJC At Next Boot - * Calibrate Input V - * Power Pulse - * -Power Pulse Delay - * -Power Pulse Duration - * Factory Reset - */ + /* + * BluetoothLE + * Power Limit + * Calibrate CJC At Next Boot + * Calibrate Input V + * Power Pulse + * -Power Pulse Delay + * -Power Pulse Duration + * Factory Reset + */ #ifdef BLE_ENABLED - {SETTINGS_DESC(SettingsItemIndex::BluetoothLE), nullptr, displayBluetoothLE, nullptr, SettingsOptions::BluetoothLE, SettingsItemIndex::BluetoothLE, 7}, /*Toggle BLE*/ + /* Toggle BLE */ + {SETTINGS_DESC(SettingsItemIndex::BluetoothLE), nullptr, displayBluetoothLE, nullptr, SettingsOptions::BluetoothLE, SettingsItemIndex::BluetoothLE, 7}, #endif /* BLE_ENABLED */ - {SETTINGS_DESC(SettingsItemIndex::PowerLimit), nullptr, displayPowerLimit, nullptr, SettingsOptions::PowerLimit, SettingsItemIndex::PowerLimit, 4}, /*Power limit*/ - {SETTINGS_DESC(SettingsItemIndex::CalibrateCJC), setCalibrate, displayCalibrate, nullptr, SettingsOptions::SettingsOptionsLength, SettingsItemIndex::CalibrateCJC, - 7}, /*Calibrate Cold Junktion Compensation at next boot*/ - {SETTINGS_DESC(SettingsItemIndex::VoltageCalibration), setCalibrateVIN, displayCalibrateVIN, nullptr, SettingsOptions::SettingsOptionsLength, SettingsItemIndex::VoltageCalibration, - 5}, /*Voltage input cal*/ - {SETTINGS_DESC(SettingsItemIndex::PowerPulsePower), nullptr, displayPowerPulse, nullptr, SettingsOptions::KeepAwakePulse, SettingsItemIndex::PowerPulsePower, 5}, /*Power Pulse adjustment */ - {SETTINGS_DESC(SettingsItemIndex::PowerPulseWait), nullptr, displayPowerPulseWait, showPowerPulseOptions, SettingsOptions::KeepAwakePulseWait, SettingsItemIndex::PowerPulseWait, - 7}, /*Power Pulse Wait adjustment*/ - {SETTINGS_DESC(SettingsItemIndex::PowerPulseDuration), nullptr, displayPowerPulseDuration, showPowerPulseOptions, SettingsOptions::KeepAwakePulseDuration, SettingsItemIndex::PowerPulseDuration, - 7}, /*Power Pulse Duration adjustment*/ - {SETTINGS_DESC(SettingsItemIndex::SettingsReset), setResetSettings, displayResetSettings, nullptr, SettingsOptions::SettingsOptionsLength, SettingsItemIndex::SettingsReset, 7}, /*Resets settings*/ - {0, nullptr, nullptr, nullptr, SettingsOptions::SettingsOptionsLength, SettingsItemIndex::NUM_ITEMS, 0} // end of menu marker. DO NOT REMOVE + /* Power limit */ + {SETTINGS_DESC(SettingsItemIndex::PowerLimit), nullptr, displayPowerLimit, nullptr, SettingsOptions::PowerLimit, SettingsItemIndex::PowerLimit, 4}, + /* Calibrate Cold Junktion Compensation at next boot */ + {SETTINGS_DESC(SettingsItemIndex::CalibrateCJC), setCalibrate, displayCalibrate, nullptr, SettingsOptions::SettingsOptionsLength, SettingsItemIndex::CalibrateCJC, 7}, + /* Voltage input cal */ + {SETTINGS_DESC(SettingsItemIndex::VoltageCalibration), setCalibrateVIN, displayCalibrateVIN, nullptr, SettingsOptions::SettingsOptionsLength, SettingsItemIndex::VoltageCalibration, 5}, + /* Power Pulse adjustment */ + {SETTINGS_DESC(SettingsItemIndex::PowerPulsePower), nullptr, displayPowerPulse, nullptr, SettingsOptions::KeepAwakePulse, SettingsItemIndex::PowerPulsePower, 5}, + /* Power Pulse Wait adjustment */ + {SETTINGS_DESC(SettingsItemIndex::PowerPulseWait), nullptr, displayPowerPulseWait, showPowerPulseOptions, SettingsOptions::KeepAwakePulseWait, SettingsItemIndex::PowerPulseWait, 7}, + /* Power Pulse Duration adjustment */ + {SETTINGS_DESC(SettingsItemIndex::PowerPulseDuration), nullptr, displayPowerPulseDuration, showPowerPulseOptions, SettingsOptions::KeepAwakePulseDuration, SettingsItemIndex::PowerPulseDuration, 7}, + /* Resets settings */ + {SETTINGS_DESC(SettingsItemIndex::SettingsReset), setResetSettings, displayResetSettings, nullptr, SettingsOptions::SettingsOptionsLength, SettingsItemIndex::SettingsReset, 7}, + /* vvvv end of menu marker. DO NOT REMOVE vvvv */ + {0, nullptr, nullptr, nullptr, SettingsOptions::SettingsOptionsLength, SettingsItemIndex::NUM_ITEMS, 0} + /* ^^^^ end of menu marker. DO NOT REMOVE ^^^^ */ }; +/* clang-format on */ + +/* ^^^ !!!ENABLE CLANG-FORMAT back!!! ^^^ */ + /** * Prints two small lines (or one line for CJK) of short description for * setting items and prepares cursor after it. @@ -552,26 +616,26 @@ static void displayLockingMode(void) { #ifdef PROFILE_SUPPORT -static void displayProfilePhases(void) { - OLED::printNumber(getSettingValue(SettingsOptions::ProfilePhases), 1, FontStyle::LARGE); -} +static void displayProfilePhases(void) { OLED::printNumber(getSettingValue(SettingsOptions::ProfilePhases), 1, FontStyle::LARGE); } static bool setProfileTemp(const enum SettingsOptions option) { - // If in C, 5 deg, if in F 10 deg - uint16_t temp = getSettingValue(option); - if (getSettingValue(SettingsOptions::TemperatureInF)) { - temp += 10; - if (temp > MAX_TEMP_F) - temp = MIN_TEMP_F; - setSettingValue(option, temp); - return temp == MAX_TEMP_F; - } else { - temp += 5; - if (temp > MAX_TEMP_C) - temp = MIN_TEMP_C; - setSettingValue(option, temp); - return temp == MAX_TEMP_C; + // If in C, 5 deg, if in F 10 deg + uint16_t temp = getSettingValue(option); + if (getSettingValue(SettingsOptions::TemperatureInF)) { + temp += 10; + if (temp > MAX_TEMP_F) { + temp = MIN_TEMP_F; } + setSettingValue(option, temp); + return temp == MAX_TEMP_F; + } else { + temp += 5; + if (temp > MAX_TEMP_C) { + temp = MIN_TEMP_C; + } + setSettingValue(option, temp); + return temp == MAX_TEMP_C; + } } static bool setProfilePreheatTemp(void) { return setProfileTemp(SettingsOptions::ProfilePreheatTemp); } @@ -613,14 +677,16 @@ static bool setSleepTemp(void) { uint16_t temp = getSettingValue(SettingsOptions::SleepTemp); if (getSettingValue(SettingsOptions::TemperatureInF)) { temp += 20; - if (temp > 580) + if (temp > 580) { temp = 60; + } setSettingValue(SettingsOptions::SleepTemp, temp); return temp == 580; } else { temp += 10; - if (temp > 300) + if (temp > 300) { temp = 10; + } setSettingValue(SettingsOptions::SleepTemp, temp); return temp == 300; } @@ -657,20 +723,20 @@ static bool showHallEffect(void) { return getHallSensorFitted(); } #endif /* HALL_SENSOR */ static void setTempF(const enum SettingsOptions option) { - uint16_t Temp = getSettingValue(option); - if (getSettingValue(SettingsOptions::TemperatureInF)) { - // Change temp to the F equiv - // C to F == F= ( (C*9) +160)/5 - Temp = ((Temp * 9) + 160) / 5; - } else { - // Change temp to the C equiv - // F->C == C = ((F-32)*5)/9 - Temp = ((Temp - 32) * 5) / 9; - } - // Rescale to be multiples of 10 - Temp = BoostTemp / 10; - Temp *= 10; - setSettingValue(option, Temp); + uint16_t Temp = getSettingValue(option); + if (getSettingValue(SettingsOptions::TemperatureInF)) { + // Change temp to the F equiv + // C to F == F= ( (C*9) +160)/5 + Temp = ((Temp * 9) + 160) / 5; + } else { + // Change temp to the C equiv + // F->C == C = ((F-32)*5)/9 + Temp = ((Temp - 32) * 5) / 9; + } + // Rescale to be multiples of 10 + Temp = BoostTemp / 10; + Temp *= 10; + setSettingValue(option, Temp); } static bool setTempF(void) { @@ -1057,10 +1123,12 @@ void gui_Menu(const menuitem *menu) { menu[currentScreen].draw(); uint8_t indicatorHeight = OLED_HEIGHT / scrollContentSize; uint8_t position = OLED_HEIGHT * (currentScreen - screensSkipped) / scrollContentSize; - if (lastValue) + if (lastValue) { scrollBlink = !scrollBlink; - if (!lastValue || !scrollBlink) + } + if (!lastValue || !scrollBlink) { OLED::drawScrollIndicator(position, indicatorHeight); + } } else { // Draw description const char *description = translatedString(Tr->SettingsDescriptions[menu[currentScreen].description - 1]); @@ -1107,29 +1175,28 @@ void gui_Menu(const menuitem *menu) { // increment if (scrollMessage.isReset()) { lastValue = callIncrementHandler(); - } else + } else { scrollMessage.reset(); + } break; case BUTTON_B_SHORT: if (scrollMessage.isReset()) { currentScreen++; navState = NavState::ScrollingDown; lastValue = false; - } else + } else { scrollMessage.reset(); + } break; case BUTTON_F_LONG: if (xTaskGetTickCount() + autoRepeatAcceleration > autoRepeatTimer + PRESS_ACCEL_INTERVAL_MAX) { - - if ((lastValue = callIncrementHandler())) + if ((lastValue = callIncrementHandler())) { autoRepeatTimer = 1000; - else + } else { autoRepeatTimer = 0; - + } autoRepeatTimer += xTaskGetTickCount(); - scrollMessage.reset(); - autoRepeatAcceleration += PRESS_ACCEL_STEP; } break; @@ -1139,7 +1206,6 @@ void gui_Menu(const menuitem *menu) { navState = NavState::ScrollingDown; autoRepeatTimer = xTaskGetTickCount(); scrollMessage.reset(); - autoRepeatAcceleration += PRESS_ACCEL_STEP; } break; diff --git a/source/Core/Threads/OperatingModes/CJC.cpp b/source/Core/Threads/OperatingModes/CJC.cpp index 50d8ed57..25fef8d8 100644 --- a/source/Core/Threads/OperatingModes/CJC.cpp +++ b/source/Core/Threads/OperatingModes/CJC.cpp @@ -20,8 +20,9 @@ void performCJCC(void) { OLED::print(translatedString(Tr->CJCCalibrating), FontStyle::SMALL); OLED::setCursor(0, 8); OLED::print(SmallSymbolDot, FontStyle::SMALL); - for (uint8_t x = 0; x < (i / 4); x++) + for (uint8_t x = 0; x < (i / 4); x++) { OLED::print(SmallSymbolDot, FontStyle::SMALL); + } OLED::refresh(); osDelay(100); } diff --git a/source/Core/Threads/OperatingModes/DebugMenu.cpp b/source/Core/Threads/OperatingModes/DebugMenu.cpp index ff215a13..adf03ddd 100644 --- a/source/Core/Threads/OperatingModes/DebugMenu.cpp +++ b/source/Core/Threads/OperatingModes/DebugMenu.cpp @@ -57,8 +57,8 @@ void showDebugMenu(void) { case 9: // Movement Timestamp OLED::printNumber(lastMovementTime / TICKS_100MS, 8, FontStyle::SMALL); break; - case 10: // Tip Resistance in Ω - OLED::printNumber(getTipResistanceX10() / 10, 6, FontStyle::SMALL); // large to pad over so that we cover ID left overs + case 10: // Tip Resistance in Ω large to pad over so that we cover ID left overs + OLED::printNumber(getTipResistanceX10() / 10, 6, FontStyle::SMALL); OLED::print(SmallSymbolDot, FontStyle::SMALL); OLED::printNumber(getTipResistanceX10() % 10, 1, FontStyle::SMALL); break; @@ -82,8 +82,9 @@ void showDebugMenu(void) { case 16: // Raw Hall Effect Value { int16_t hallEffectStrength = getRawHallEffect(); - if (hallEffectStrength < 0) + if (hallEffectStrength < 0) { hallEffectStrength = -hallEffectStrength; + } OLED::printNumber(hallEffectStrength, 6, FontStyle::SMALL); } break; #endif @@ -94,9 +95,9 @@ void showDebugMenu(void) { OLED::refresh(); b = getButtonState(); - if (b == BUTTON_B_SHORT) + if (b == BUTTON_B_SHORT) { return; - else if (b == BUTTON_F_SHORT) { + } else if (b == BUTTON_F_SHORT) { screen++; #ifdef HALL_SENSOR screen = screen % 17; @@ -104,6 +105,7 @@ void showDebugMenu(void) { screen = screen % 16; #endif } + GUIDelay(); } } diff --git a/source/Core/Threads/OperatingModes/HomeScreen.cpp b/source/Core/Threads/OperatingModes/HomeScreen.cpp index a24dd727..fd92539c 100644 --- a/source/Core/Threads/OperatingModes/HomeScreen.cpp +++ b/source/Core/Threads/OperatingModes/HomeScreen.cpp @@ -103,21 +103,24 @@ void drawDetailedHomeScreen(uint32_t tipTemp) { } OLED::print(SmallSymbolVolts, FontStyle::SMALL); } else { - if (!(getSettingValue(SettingsOptions::CoolingTempBlink) && (tipTemp > 55) && (xTaskGetTickCount() % 1000 < 300))) + if (!(getSettingValue(SettingsOptions::CoolingTempBlink) && (tipTemp > 55) && (xTaskGetTickCount() % 1000 < 300))) { // Blink temp if setting enable and temp < 55° // 1000 tick/sec // OFF 300ms ON 700ms gui_drawTipTemp(true, FontStyle::LARGE); // draw in the temp + } if (OLED::getRotation()) { OLED::setCursor(6, 0); } else { OLED::setCursor(73, 0); // top right } - OLED::printNumber(getSettingValue(SettingsOptions::SolderingTemp), 3, FontStyle::SMALL); // draw set temp - if (getSettingValue(SettingsOptions::TemperatureInF)) + // draw set temp + OLED::printNumber(getSettingValue(SettingsOptions::SolderingTemp), 3, FontStyle::SMALL); + if (getSettingValue(SettingsOptions::TemperatureInF)) { OLED::print(SmallSymbolDegF, FontStyle::SMALL); - else + } else { OLED::print(SmallSymbolDegC, FontStyle::SMALL); + } if (OLED::getRotation()) { OLED::setCursor(0, 8); } else { @@ -142,10 +145,11 @@ void drawSimplifiedHomeScreen(uint32_t tipTemp) { gui_drawBatteryIcon(); } tipDisconnectedDisplay = false; - if (tipTemp > 55) + if (tipTemp > 55) { tempOnDisplay = true; - else if (tipTemp < 45) + } else if (tipTemp < 45) { tempOnDisplay = false; + } if (isTipDisconnected()) { tempOnDisplay = false; tipDisconnectedDisplay = true; @@ -164,8 +168,9 @@ void drawSimplifiedHomeScreen(uint32_t tipTemp) { // If we have a tip connected draw the temp, if not we leave it blank if (!tipDisconnectedDisplay) { // draw in the temp - if (!(getSettingValue(SettingsOptions::CoolingTempBlink) && (xTaskGetTickCount() % 1000 < 300))) + if (!(getSettingValue(SettingsOptions::CoolingTempBlink) && (xTaskGetTickCount() % 1000 < 300))) { gui_drawTipTemp(false, FontStyle::LARGE); // draw in the temp + } } else { // Draw in missing tip symbol diff --git a/source/Core/Threads/OperatingModes/Sleep.cpp b/source/Core/Threads/OperatingModes/Sleep.cpp index ef6c78d8..ed5fd335 100644 --- a/source/Core/Threads/OperatingModes/Sleep.cpp +++ b/source/Core/Threads/OperatingModes/Sleep.cpp @@ -12,14 +12,18 @@ int gui_SolderingSleepingMode(bool stayOff, bool autoStarted) { // If in the first two seconds we disable this to let accelerometer warm up #ifdef POW_DC - if (checkForUnderVoltage()) - return 1; // return non-zero on error + if (checkForUnderVoltage()) { + // return non-zero on error + return 1; + } #endif + if (getSettingValue(SettingsOptions::TemperatureInF)) { currentTempTargetDegC = stayOff ? 0 : TipThermoModel::convertFtoC(min(getSettingValue(SettingsOptions::SleepTemp), getSettingValue(SettingsOptions::SolderingTemp))); } else { currentTempTargetDegC = stayOff ? 0 : min(getSettingValue(SettingsOptions::SleepTemp), getSettingValue(SettingsOptions::SolderingTemp)); } + // draw the lcd uint16_t tipTemp = getSettingValue(SettingsOptions::TemperatureInF) ? TipThermoModel::getTipInF() : TipThermoModel::getTipInC(); @@ -30,9 +34,10 @@ int gui_SolderingSleepingMode(bool stayOff, bool autoStarted) { OLED::setCursor(0, 8); OLED::print(translatedString(Tr->SleepingTipAdvancedString), FontStyle::SMALL); OLED::printNumber(tipTemp, 3, FontStyle::SMALL); - if (getSettingValue(SettingsOptions::TemperatureInF)) + + if (getSettingValue(SettingsOptions::TemperatureInF)) { OLED::print(SmallSymbolDegF, FontStyle::SMALL); - else { + } else { OLED::print(SmallSymbolDegC, FontStyle::SMALL); } @@ -42,9 +47,10 @@ int gui_SolderingSleepingMode(bool stayOff, bool autoStarted) { } else { OLED::print(translatedString(Tr->SleepingSimpleString), FontStyle::LARGE); OLED::printNumber(tipTemp, 3, FontStyle::LARGE); - if (getSettingValue(SettingsOptions::TemperatureInF)) + + if (getSettingValue(SettingsOptions::TemperatureInF)) { OLED::drawSymbol(0); - else { + } else { OLED::drawSymbol(1); } } @@ -59,9 +65,11 @@ int gui_SolderingSleepingMode(bool stayOff, bool autoStarted) { if (shouldShutdown()) { // shutdown currentTempTargetDegC = 0; - return 1; // we want to exit soldering mode + // we want to exit soldering mode + return 1; } } #endif + return 0; } diff --git a/source/Core/Threads/OperatingModes/Soldering.cpp b/source/Core/Threads/OperatingModes/Soldering.cpp index 459b9842..d923871e 100644 --- a/source/Core/Threads/OperatingModes/Soldering.cpp +++ b/source/Core/Threads/OperatingModes/Soldering.cpp @@ -147,15 +147,15 @@ void gui_solderingMode(uint8_t jumpToSleep) { OLED::refresh(); // Update the setpoints for the temperature if (boostModeOn) { - if (getSettingValue(SettingsOptions::TemperatureInF)) + if (getSettingValue(SettingsOptions::TemperatureInF)) { currentTempTargetDegC = TipThermoModel::convertFtoC(getSettingValue(SettingsOptions::BoostTemp)); - else { + } else { currentTempTargetDegC = (getSettingValue(SettingsOptions::BoostTemp)); } } else { - if (getSettingValue(SettingsOptions::TemperatureInF)) + if (getSettingValue(SettingsOptions::TemperatureInF)) { currentTempTargetDegC = TipThermoModel::convertFtoC(getSettingValue(SettingsOptions::SolderingTemp)); - else { + } else { currentTempTargetDegC = (getSettingValue(SettingsOptions::SolderingTemp)); } } @@ -187,4 +187,3 @@ void gui_solderingMode(uint8_t jumpToSleep) { GUIDelay(); } } - diff --git a/source/Core/Threads/OperatingModes/SolderingProfile.cpp b/source/Core/Threads/OperatingModes/SolderingProfile.cpp index 70c206a4..84be660a 100644 --- a/source/Core/Threads/OperatingModes/SolderingProfile.cpp +++ b/source/Core/Threads/OperatingModes/SolderingProfile.cpp @@ -12,15 +12,15 @@ void gui_solderingProfileMode() { * --> Long hold back button to exit * --> Double button to exit */ - currentMode = OperatingMode::soldering; + currentMode = OperatingMode::soldering; TickType_t buzzerEnd = 0; - bool waitForRelease = true; - TickType_t phaseStartTime = xTaskGetTickCount(); + bool waitForRelease = true; + TickType_t phaseStartTime = xTaskGetTickCount(); - uint16_t tipTemp = 0; - uint8_t profilePhase = 0; + uint16_t tipTemp = 0; + uint8_t profilePhase = 0; uint16_t phaseElapsedSeconds = 0; uint16_t phaseTotalSeconds = 0; @@ -32,24 +32,26 @@ void gui_solderingProfileMode() { for (;;) { ButtonState buttons = getButtonState(); if (buttons) { - if (waitForRelease) buttons = BUTTON_NONE; + if (waitForRelease) { + buttons = BUTTON_NONE; + } } else { waitForRelease = false; } switch (buttons) { - case BUTTON_NONE: - break; - case BUTTON_BOTH: - case BUTTON_B_LONG: - return; // exit on back long hold - case BUTTON_F_LONG: - case BUTTON_F_SHORT: - case BUTTON_B_SHORT: - // Not used yet - break; - default: - break; + case BUTTON_NONE: + break; + case BUTTON_BOTH: + case BUTTON_B_LONG: + return; // exit on back long hold + case BUTTON_F_LONG: + case BUTTON_F_SHORT: + case BUTTON_B_SHORT: + // Not used yet + break; + default: + break; } if (getSettingValue(SettingsOptions::TemperatureInF)) { @@ -73,39 +75,41 @@ void gui_solderingProfileMode() { // have we finished this phase? if (phaseElapsedSeconds >= phaseTotalSeconds && tipTemp == phaseEndTemp) { profilePhase++; - phaseStartTemp = phaseEndTemp; - phaseStartTime = xTaskGetTickCount(); + + phaseStartTemp = phaseEndTemp; + phaseStartTime = xTaskGetTickCount(); phaseElapsedSeconds = 0; + if (profilePhase > getSettingValue(SettingsOptions::ProfilePhases)) { // done with all phases, lets go to cooldown - phaseTotalSeconds = 0; - phaseEndTemp = 0; + phaseTotalSeconds = 0; + phaseEndTemp = 0; phaseTicksPerDegree = TICKS_SECOND / getSettingValue(SettingsOptions::ProfileCooldownSpeed); } else { // set up next phase - switch(profilePhase) { - case 1: - phaseTotalSeconds = getSettingValue(SettingsOptions::ProfilePhase1Duration); - phaseEndTemp = getSettingValue(SettingsOptions::ProfilePhase1Temp); - break; - case 2: - phaseTotalSeconds = getSettingValue(SettingsOptions::ProfilePhase2Duration); - phaseEndTemp = getSettingValue(SettingsOptions::ProfilePhase2Temp); - break; - case 3: - phaseTotalSeconds = getSettingValue(SettingsOptions::ProfilePhase3Duration); - phaseEndTemp = getSettingValue(SettingsOptions::ProfilePhase3Temp); - break; - case 4: - phaseTotalSeconds = getSettingValue(SettingsOptions::ProfilePhase4Duration); - phaseEndTemp = getSettingValue(SettingsOptions::ProfilePhase4Temp); - break; - case 5: - phaseTotalSeconds = getSettingValue(SettingsOptions::ProfilePhase5Duration); - phaseEndTemp = getSettingValue(SettingsOptions::ProfilePhase5Temp); - break; - default: - break; + switch (profilePhase) { + case 1: + phaseTotalSeconds = getSettingValue(SettingsOptions::ProfilePhase1Duration); + phaseEndTemp = getSettingValue(SettingsOptions::ProfilePhase1Temp); + break; + case 2: + phaseTotalSeconds = getSettingValue(SettingsOptions::ProfilePhase2Duration); + phaseEndTemp = getSettingValue(SettingsOptions::ProfilePhase2Temp); + break; + case 3: + phaseTotalSeconds = getSettingValue(SettingsOptions::ProfilePhase3Duration); + phaseEndTemp = getSettingValue(SettingsOptions::ProfilePhase3Temp); + break; + case 4: + phaseTotalSeconds = getSettingValue(SettingsOptions::ProfilePhase4Duration); + phaseEndTemp = getSettingValue(SettingsOptions::ProfilePhase4Temp); + break; + case 5: + phaseTotalSeconds = getSettingValue(SettingsOptions::ProfilePhase5Duration); + phaseEndTemp = getSettingValue(SettingsOptions::ProfilePhase5Temp); + break; + default: + break; } if (phaseStartTemp < phaseEndTemp) { phaseTicksPerDegree = (phaseTotalSeconds * TICKS_SECOND) / (phaseEndTemp - phaseStartTemp); @@ -152,10 +156,11 @@ void gui_solderingProfileMode() { OLED::print(SmallSymbolSlash, FontStyle::SMALL); OLED::printNumber(profileCurrentTargetTemp, 3, FontStyle::SMALL); - if (getSettingValue(SettingsOptions::TemperatureInF)) + if (getSettingValue(SettingsOptions::TemperatureInF)) { OLED::print(SmallSymbolDegF, FontStyle::SMALL); - else + } else { OLED::print(SmallSymbolDegC, FontStyle::SMALL); + } // print phase if (profilePhase > 0 && profilePhase <= getSettingValue(SettingsOptions::ProfilePhases)) { @@ -186,7 +191,7 @@ void gui_solderingProfileMode() { OLED::print(SmallSymbolSlash, FontStyle::SMALL); // blink if we can't keep up with the time goal - if (phaseElapsedSeconds < phaseTotalSeconds+2 || (xTaskGetTickCount() / TICKS_SECOND) % 2 == 0) { + if (phaseElapsedSeconds < phaseTotalSeconds + 2 || (xTaskGetTickCount() / TICKS_SECOND) % 2 == 0) { OLED::printNumber(phaseTotalSeconds / 60, 1, FontStyle::SMALL); OLED::print(SmallSymbolColon, FontStyle::SMALL); OLED::printNumber(phaseTotalSeconds % 60, 2, FontStyle::SMALL, false); @@ -225,4 +230,3 @@ void gui_solderingProfileMode() { GUIDelay(); } } - diff --git a/source/Core/Threads/OperatingModes/TemperatureAdjust.cpp b/source/Core/Threads/OperatingModes/TemperatureAdjust.cpp index 5c05a520..06c41da5 100644 --- a/source/Core/Threads/OperatingModes/TemperatureAdjust.cpp +++ b/source/Core/Threads/OperatingModes/TemperatureAdjust.cpp @@ -1,12 +1,12 @@ #include "OperatingModes.h" void gui_solderingTempAdjust(void) { - TickType_t lastChange = xTaskGetTickCount(); - currentTempTargetDegC = 0; // Turn off heater while adjusting temp - TickType_t autoRepeatTimer = 0; - uint8_t autoRepeatAcceleration = 0; + TickType_t lastChange = xTaskGetTickCount(); + currentTempTargetDegC = 0; // Turn off heater while adjusting temp + TickType_t autoRepeatTimer = 0; + uint8_t autoRepeatAcceleration = 0; #ifndef PROFILE_SUPPORT - bool waitForRelease = false; - ButtonState buttons = getButtonState(); + bool waitForRelease = false; + ButtonState buttons = getButtonState(); if (buttons != BUTTON_NONE) { // Temp adjust entered by long-pressing F button. @@ -79,20 +79,25 @@ void gui_solderingTempAdjust(void) { newTemp = (newTemp / delta) * delta; if (getSettingValue(SettingsOptions::TemperatureInF)) { - if (newTemp > MAX_TEMP_F) + if (newTemp > MAX_TEMP_F) { newTemp = MAX_TEMP_F; - if (newTemp < MIN_TEMP_F) + } + if (newTemp < MIN_TEMP_F) { newTemp = MIN_TEMP_F; + } } else { - if (newTemp > MAX_TEMP_C) + if (newTemp > MAX_TEMP_C) { newTemp = MAX_TEMP_C; - if (newTemp < MIN_TEMP_C) + } + if (newTemp < MIN_TEMP_C) { newTemp = MIN_TEMP_C; + } } setSettingValue(SettingsOptions::SolderingTemp, (uint16_t)newTemp); } - if (xTaskGetTickCount() - lastChange > (TICKS_SECOND * 2)) + if (xTaskGetTickCount() - lastChange > (TICKS_SECOND * 2)) { return; // exit if user just doesn't press anything for a bit + } if (OLED::getRotation()) { OLED::print(getSettingValue(SettingsOptions::ReverseButtonTempChangeEnabled) ? LargeSymbolPlus : LargeSymbolMinus, FontStyle::LARGE); @@ -102,9 +107,9 @@ void gui_solderingTempAdjust(void) { OLED::print(LargeSymbolSpace, FontStyle::LARGE); OLED::printNumber(getSettingValue(SettingsOptions::SolderingTemp), 3, FontStyle::LARGE); - if (getSettingValue(SettingsOptions::TemperatureInF)) + if (getSettingValue(SettingsOptions::TemperatureInF)) { OLED::drawSymbol(0); - else { + } else { OLED::drawSymbol(1); } OLED::print(LargeSymbolSpace, FontStyle::LARGE); @@ -116,4 +121,4 @@ void gui_solderingTempAdjust(void) { OLED::refresh(); GUIDelay(); } -} \ No newline at end of file +} diff --git a/source/Core/Threads/OperatingModes/USBPDDebug_FUSB.cpp b/source/Core/Threads/OperatingModes/USBPDDebug_FUSB.cpp index cd2bf4b7..65776970 100644 --- a/source/Core/Threads/OperatingModes/USBPDDebug_FUSB.cpp +++ b/source/Core/Threads/OperatingModes/USBPDDebug_FUSB.cpp @@ -81,11 +81,12 @@ void showPDDebug(void) { OLED::refresh(); b = getButtonState(); - if (b == BUTTON_B_SHORT) + if (b == BUTTON_B_SHORT) { return; - else if (b == BUTTON_F_SHORT) { + } else if (b == BUTTON_F_SHORT) { screen++; } + GUIDelay(); } } diff --git a/source/Core/Threads/OperatingModes/USBPDDebug_HUSB238.cpp b/source/Core/Threads/OperatingModes/USBPDDebug_HUSB238.cpp index 94288f08..5841e47c 100644 --- a/source/Core/Threads/OperatingModes/USBPDDebug_HUSB238.cpp +++ b/source/Core/Threads/OperatingModes/USBPDDebug_HUSB238.cpp @@ -43,11 +43,12 @@ void showPDDebug(void) { OLED::refresh(); b = getButtonState(); - if (b == BUTTON_B_SHORT) + if (b == BUTTON_B_SHORT) { return; - else if (b == BUTTON_F_SHORT) { + } else if (b == BUTTON_F_SHORT) { screen++; } + GUIDelay(); } } diff --git a/source/Core/Threads/OperatingModes/utils/DrawTipTemperature.cpp b/source/Core/Threads/OperatingModes/utils/DrawTipTemperature.cpp index b8ffbd65..d65a71da 100644 --- a/source/Core/Threads/OperatingModes/utils/DrawTipTemperature.cpp +++ b/source/Core/Threads/OperatingModes/utils/DrawTipTemperature.cpp @@ -14,16 +14,18 @@ void gui_drawTipTemp(bool symbol, const FontStyle font) { if (symbol) { if (font == FontStyle::LARGE) { // Big font, can draw nice symbols - if (getSettingValue(SettingsOptions::TemperatureInF)) + if (getSettingValue(SettingsOptions::TemperatureInF)) { OLED::drawSymbol(0); - else + } else { OLED::drawSymbol(1); + } } else { // Otherwise fall back to chars - if (getSettingValue(SettingsOptions::TemperatureInF)) + if (getSettingValue(SettingsOptions::TemperatureInF)) { OLED::print(SmallSymbolDegF, FontStyle::SMALL); - else + } else { OLED::print(SmallSymbolDegC, FontStyle::SMALL); + } } } -} \ No newline at end of file +} diff --git a/source/Core/Threads/OperatingModes/utils/SolderingCommon.cpp b/source/Core/Threads/OperatingModes/utils/SolderingCommon.cpp index af50ccad..c96fbc8d 100644 --- a/source/Core/Threads/OperatingModes/utils/SolderingCommon.cpp +++ b/source/Core/Threads/OperatingModes/utils/SolderingCommon.cpp @@ -2,8 +2,8 @@ // Created by laura on 24.04.23. // -#include "OperatingModes.h" #include "SolderingCommon.h" +#include "OperatingModes.h" extern bool heaterThermalRunaway; @@ -16,7 +16,8 @@ void detailedPowerStatus() { // Print wattage { uint32_t x10Watt = x10WattHistory.average(); - if (x10Watt > 999) { // If we exceed 99.9W we drop the decimal place to keep it all fitting + if (x10Watt > 999) { + // If we exceed 99.9W we drop the decimal place to keep it all fitting OLED::print(SmallSymbolSpace, FontStyle::SMALL); OLED::printNumber(x10WattHistory.average() / 10, 3, FontStyle::SMALL); } else { @@ -42,30 +43,35 @@ void basicSolderingStatus(bool boostModeOn) { if (OLED::getRotation()) { // battery gui_drawBatteryIcon(); - OLED::print(LargeSymbolSpace, FontStyle::LARGE); // Space out gap between battery <-> temp - gui_drawTipTemp(true, FontStyle::LARGE); // Draw current tip temp + // Space out gap between battery <-> temp + OLED::print(LargeSymbolSpace, FontStyle::LARGE); + // Draw current tip temp + gui_drawTipTemp(true, FontStyle::LARGE); - // We draw boost arrow if boosting, or else gap temp <-> heat - // indicator - if (boostModeOn) + // We draw boost arrow if boosting, + // or else gap temp <-> heat indicator + if (boostModeOn) { OLED::drawSymbol(2); - else + } else { OLED::print(LargeSymbolSpace, FontStyle::LARGE); + } // Draw heating/cooling symbols OLED::drawHeatSymbol(X10WattsToPWM(x10WattHistory.average())); } else { // Draw heating/cooling symbols OLED::drawHeatSymbol(X10WattsToPWM(x10WattHistory.average())); - // We draw boost arrow if boosting, or else gap temp <-> heat - // indicator - if (boostModeOn) + // We draw boost arrow if boosting, + // or else gap temp <-> heat indicator + if (boostModeOn) { OLED::drawSymbol(2); - else + } else { OLED::print(LargeSymbolSpace, FontStyle::LARGE); - gui_drawTipTemp(true, FontStyle::LARGE); // Draw current tip temp - - OLED::print(LargeSymbolSpace, FontStyle::LARGE); // Space out gap between battery <-> temp + } + // Draw current tip temp + gui_drawTipTemp(true, FontStyle::LARGE); + // Space out gap between battery <-> temp + OLED::print(LargeSymbolSpace, FontStyle::LARGE); gui_drawBatteryIcon(); } diff --git a/source/Core/Threads/OperatingModes/utils/drawPowerSourceIcon.cpp b/source/Core/Threads/OperatingModes/utils/drawPowerSourceIcon.cpp index fd378743..c296b533 100644 --- a/source/Core/Threads/OperatingModes/utils/drawPowerSourceIcon.cpp +++ b/source/Core/Threads/OperatingModes/utils/drawPowerSourceIcon.cpp @@ -6,10 +6,11 @@ void gui_drawBatteryIcon(void) { // On non-DC inputs we replace this symbol with the voltage we are operating on // If <9V then show single digit, if not show dual small ones vertically stacked uint16_t V = getInputVoltageX10(getSettingValue(SettingsOptions::VoltageDiv), 0); - if (V % 10 >= 5) + if (V % 10 >= 5) { V = (V / 10) + 1; // round up - else + } else { V = V / 10; + } if (V > 9) { int16_t xPos = OLED::getCursorX(); OLED::printNumber(V / 10, 1, FontStyle::SMALL); @@ -30,14 +31,16 @@ void gui_drawBatteryIcon(void) { uint32_t cellV = getInputVoltageX10(getSettingValue(SettingsOptions::VoltageDiv), 0) / cellCount; // Should give us approx cell voltage X10 // Range is 42 -> Minimum voltage setting (systemSettings.minVoltageCells) = 9 steps therefore we will use battery 0-9 - if (cellV < getSettingValue(SettingsOptions::MinVoltageCells)) + if (cellV < getSettingValue(SettingsOptions::MinVoltageCells)) { cellV = getSettingValue(SettingsOptions::MinVoltageCells); + } cellV -= getSettingValue(SettingsOptions::MinVoltageCells); // Should leave us a number of 0-9 - if (cellV > 9) + if (cellV > 9) { cellV = 9; + } OLED::drawBattery(cellV + 1); } else { OLED::drawSymbol(15); // Draw the DC Logo } #endif -} \ No newline at end of file +} diff --git a/source/Core/Threads/OperatingModes/utils/getSleepTimeout.cpp b/source/Core/Threads/OperatingModes/utils/getSleepTimeout.cpp index b6c0d1e1..b91c134e 100644 --- a/source/Core/Threads/OperatingModes/utils/getSleepTimeout.cpp +++ b/source/Core/Threads/OperatingModes/utils/getSleepTimeout.cpp @@ -7,12 +7,13 @@ uint32_t getSleepTimeout(void) { if (getSettingValue(SettingsOptions::Sensitivity) && getSettingValue(SettingsOptions::SleepTime)) { uint32_t sleepThres = 0; - if (getSettingValue(SettingsOptions::SleepTime) < 6) + if (getSettingValue(SettingsOptions::SleepTime) < 6) { sleepThres = getSettingValue(SettingsOptions::SleepTime) * 10 * 1000; - else + } else { sleepThres = (getSettingValue(SettingsOptions::SleepTime) - 5) * 60 * 1000; + } return sleepThres; } return 0; } -#endif \ No newline at end of file +#endif diff --git a/source/Core/Threads/OperatingModes/utils/min.cpp b/source/Core/Threads/OperatingModes/utils/min.cpp index 15829579..a7e9c0bb 100644 --- a/source/Core/Threads/OperatingModes/utils/min.cpp +++ b/source/Core/Threads/OperatingModes/utils/min.cpp @@ -3,8 +3,9 @@ #include "OperatingModeUtilities.h" #include uint16_t min(uint16_t a, uint16_t b) { - if (a > b) + if (a > b) { return b; - else + } else { return a; -} \ No newline at end of file + } +} diff --git a/source/Core/Threads/OperatingModes/utils/shouldDeviceSleep.cpp b/source/Core/Threads/OperatingModes/utils/shouldDeviceSleep.cpp index b28b451e..92a99fc9 100644 --- a/source/Core/Threads/OperatingModes/utils/shouldDeviceSleep.cpp +++ b/source/Core/Threads/OperatingModes/utils/shouldDeviceSleep.cpp @@ -26,8 +26,9 @@ bool shouldBeSleeping(bool inAutoStart) { // threshold, and if so then we force sleep if (getHallSensorFitted() && lookupHallEffectThreshold()) { int16_t hallEffectStrength = getRawHallEffect(); - if (hallEffectStrength < 0) + if (hallEffectStrength < 0) { hallEffectStrength = -hallEffectStrength; + } // Have absolute value of measure of magnetic field strength if (hallEffectStrength > lookupHallEffectThreshold()) { if (lastHallEffectSleepStart == 0) { @@ -43,4 +44,4 @@ bool shouldBeSleeping(bool inAutoStart) { #endif #endif return false; -} \ No newline at end of file +} diff --git a/source/Core/Threads/POWThread.cpp b/source/Core/Threads/POWThread.cpp index e4e3165f..bb816ad7 100644 --- a/source/Core/Threads/POWThread.cpp +++ b/source/Core/Threads/POWThread.cpp @@ -17,7 +17,6 @@ #include "stdlib.h" #include "task.h" - // Small worker thread to handle power (PD + QC) related steps void startPOWTask(void const *argument __unused) { diff --git a/source/Makefile b/source/Makefile index ddbf4ed8..32f8aa86 100644 --- a/source/Makefile +++ b/source/Makefile @@ -8,13 +8,15 @@ ALL_PINECIL_V2_MODELS=Pinecilv2 ALL_MHP30_MODELS=MHP30 ALL_SEQURE_MODELS=S60 ALL_MODELS=$(ALL_MINIWARE_MODELS) $(ALL_PINECIL_MODELS) $(ALL_MHP30_MODELS) $(ALL_PINECIL_V2_MODELS) $(ALL_SEQURE_MODELS) + ifneq ($(model),$(filter $(model),$(ALL_MODELS))) $(error Invalid model '$(model)', valid options are: $(ALL_MODELS)) endif -# output folder +# Output folder HEXFILE_DIR=Hexfile -# temporary objects folder + +# Temporary objects folder OUTPUT_DIR_BASE=Objects OUTPUT_DIR=Objects/$(model) @@ -24,7 +26,7 @@ LANGUAGE_GROUP_CJK_LANGS=EN JA_JP YUE_HK ZH_TW ZH_CN LANGUAGE_GROUP_CJK_NAME=Chinese+Japanese ifdef custom_multi_langs -RUN_SHELL_CMD := $(shell rm -Rf {Core/Gen,$(OUTPUT_DIR)/Core/Gen,$(HEXFILE_DIR)/*_Custom.*}) +RUN_SHELL_CMD:=$(shell rm -Rf {Core/Gen,$(OUTPUT_DIR)/Core/Gen,$(HEXFILE_DIR)/*_Custom.*}) LANGUAGE_GROUP_CUSTOM_LANGS=$(custom_multi_langs) LANGUAGE_GROUP_CUSTOM_NAME=Custom endif @@ -37,7 +39,6 @@ LANGUAGE_GROUP_EUR_NAME=European LANGUAGE_GROUPS=CUSTOM CJK CYRILLIC EUR - # Define for host Python ifndef HOST_PYTHON HOST_PYTHON:=python3 @@ -45,150 +46,177 @@ endif # Defines for host tools ifeq ($(HOST_CC),) -HOST_CC := gcc +HOST_CC:=gcc endif + HOST_OUTPUT_DIR=Objects/host # DFU packing address to use DEVICE_DFU_ADDRESS=0x08000000 DEVICE_DFU_VID_PID=0x28E9:0x0189 -# Enumerate all of the include directories -APP_INC_DIR = ./Core/Inc -BRIEFLZ_INC_DIR = ./Core/brieflz -MINIWARE_INC_CMSIS_DEVICE = ./Core/BSP/Miniware/Vendor/CMSIS/Device/ST/STM32F1xx/Include -MINIWARE_CMSIS_CORE_INC_DIR = ./Core/BSP/Miniware/Vendor/CMSIS/Include -MINIWARE_HAL_INC_DIR = ./Core/BSP/Miniware/Vendor/STM32F1xx_HAL_Driver/Inc -MINIWARE_HAL_LEGACY_INC_DIR = ./Core/BSP/Miniware/Vendor/STM32F1xx_HAL_Driver/Inc/Legacy -MINIWARE_STARTUP_DIR = ./Startup -MINIWARE_INC_DIR = ./Core/BSP/Miniware -MINIWARE_LD_FILE = ./Core/BSP/Miniware/stm32f103.ld -S60_INC_CMSIS_DEVICE = ./Core/BSP/Sequre_S60/Vendor/CMSIS/Device/ST/STM32F1xx/Include -S60_CMSIS_CORE_INC_DIR = ./Core/BSP/Sequre_S60/Vendor/CMSIS/Include -S60_HAL_INC_DIR = ./Core/BSP/Sequre_S60/Vendor/STM32F1xx_HAL_Driver/Inc -S60_HAL_LEGACY_INC_DIR = ./Core/BSP/Sequre_S60/Vendor/STM32F1xx_HAL_Driver/Inc/Legacy -S60_STARTUP_DIR = ./Startup -S60_INC_DIR = ./Core/BSP/Sequre_S60 -S60_LD_FILE = ./Core/BSP/Sequre_S60/stm32f103.ld +# Enumerate all of the include directories (HAL source dirs are used for clang-format only) +APP_INC_DIR=./Core/Inc +BRIEFLZ_INC_DIR=./Core/brieflz +MINIWARE_INC_CMSIS_DEVICE=./Core/BSP/Miniware/Vendor/CMSIS/Device/ST/STM32F1xx/Include +MINIWARE_CMSIS_CORE_INC_DIR=./Core/BSP/Miniware/Vendor/CMSIS/Include +MINIWARE_HAL_SRC_DIR= ./Core/BSP/Miniware/Vendor/STM32F1xx_HAL_Driver +MINIWARE_HAL_INC_DIR=./Core/BSP/Miniware/Vendor/STM32F1xx_HAL_Driver/Inc +MINIWARE_HAL_LEGACY_INC_DIR=./Core/BSP/Miniware/Vendor/STM32F1xx_HAL_Driver/Inc/Legacy +MINIWARE_STARTUP_DIR=./Startup +MINIWARE_INC_DIR=./Core/BSP/Miniware +MINIWARE_LD_FILE=./Core/BSP/Miniware/stm32f103.ld -MHP30_INC_CMSIS_DEVICE = ./Core/BSP/MHP30/Vendor/CMSIS/Device/ST/STM32F1xx/Include -MHP30_CMSIS_CORE_INC_DIR = ./Core/BSP/MHP30/Vendor/CMSIS/Include -MHP30_HAL_INC_DIR = ./Core/BSP/MHP30/Vendor/STM32F1xx_HAL_Driver/Inc -MHP30_HAL_LEGACY_INC_DIR = ./Core/BSP/MHP30/Vendor/STM32F1xx_HAL_Driver/Inc/Legacy -MHP30_STARTUP_DIR = ./Startup -MHP30_INC_DIR = ./Core/BSP/MHP30 -MHP30_LD_FILE = ./Core/BSP/MHP30/stm32f103.ld +S60_INC_CMSIS_DEVICE=./Core/BSP/Sequre_S60/Vendor/CMSIS/Device/ST/STM32F1xx/Include +S60_CMSIS_CORE_INC_DIR=./Core/BSP/Sequre_S60/Vendor/CMSIS/Include +S60_HAL_SRC_DIR=./Core/BSP/Sequre_S60/Vendor/STM32F1xx_HAL_Driver +S60_HAL_INC_DIR=./Core/BSP/Sequre_S60/Vendor/STM32F1xx_HAL_Driver/Inc +S60_HAL_LEGACY_INC_DIR=./Core/BSP/Sequre_S60/Vendor/STM32F1xx_HAL_Driver/Inc/Legacy +S60_STARTUP_DIR=./Startup +S60_INC_DIR=./Core/BSP/Sequre_S60 +S60_LD_FILE=./Core/BSP/Sequre_S60/stm32f103.ld -PINE_INC_DIR = ./Core/BSP/Pinecil -PINE_VENDOR_INC_DIR = ./Core/BSP/Pinecil/Vendor/SoC/gd32vf103/Common/Include -PINE_VENDOR_USB_INC_DIR = ./Core/BSP/Pinecil/Vendor/SoC/gd32vf103/Common/Include/Usb -PINE_NMSIS_INC_DIR = ./Core/BSP/Pinecil/Vendor/NMSIS/Core/Include -PINE_FREERTOS_PORT_INC_DIR = ./Core/BSP/Pinecil/Vendor/OS/FreeRTOS/Source/portable/GCC +MHP30_INC_CMSIS_DEVICE=./Core/BSP/MHP30/Vendor/CMSIS/Device/ST/STM32F1xx/Include +MHP30_CMSIS_CORE_INC_DIR=./Core/BSP/MHP30/Vendor/CMSIS/Include +MHP30_HAL_SRC_DIR=./Core/BSP/MHP30/Vendor/STM32F1xx_HAL_Driver +MHP30_HAL_INC_DIR=./Core/BSP/MHP30/Vendor/STM32F1xx_HAL_Driver/Inc +MHP30_HAL_LEGACY_INC_DIR=./Core/BSP/MHP30/Vendor/STM32F1xx_HAL_Driver/Inc/Legacy +MHP30_STARTUP_DIR=./Startup +MHP30_INC_DIR=./Core/BSP/MHP30 +MHP30_LD_FILE=./Core/BSP/MHP30/stm32f103.ld -PINECILV2_DIR = ./Core/BSP/Pinecilv2 -PINECILV2_SDK_DIR = $(PINECILV2_DIR)/bl_mcu_sdk +PINE_INC_DIR=./Core/BSP/Pinecil +PINE_VENDOR_SRC_DIR=./Core/BSP/Pinecil/Vendor/SoC/gd32vf103/Common/Source +PINE_VENDOR_INC_DIR=./Core/BSP/Pinecil/Vendor/SoC/gd32vf103/Common/Include +PINE_VENDOR_USB_INC_DIR=./Core/BSP/Pinecil/Vendor/SoC/gd32vf103/Common/Include/Usb +PINE_NMSIS_INC_DIR=./Core/BSP/Pinecil/Vendor/NMSIS/Core/Include +PINE_FREERTOS_PORT_INC_DIR=./Core/BSP/Pinecil/Vendor/OS/FreeRTOS/Source/portable/GCC -PINECILV2_VENDOR_BSP_DIR = $(PINECILV2_SDK_DIR)/bsp -PINECILV2_VENDOR_BSP_COMMON_DIR = $(PINECILV2_VENDOR_BSP_DIR)/bsp_common -PINECILV2_VENDOR_BSP_BOARD_DIR = $(PINECILV2_VENDOR_BSP_DIR)/board -PINECILV2_VENDOR_BSP_PLATFORM_DIR = $(PINECILV2_VENDOR_BSP_COMMON_DIR)/platform -PINECILV2_VENDOR_BSP_USB_DIR = $(PINECILV2_VENDOR_BSP_COMMON_DIR)/usb +PINECILV2_DIR=./Core/BSP/Pinecilv2 +PINECILV2_MEM_DIR=$(PINECILV2_DIR)/MemMang +PINECILV2_SDK_DIR=$(PINECILV2_DIR)/bl_mcu_sdk +PINECILV2_VENDOR_BSP_DIR=$(PINECILV2_SDK_DIR)/bsp +PINECILV2_VENDOR_BSP_COMMON_DIR=$(PINECILV2_VENDOR_BSP_DIR)/bsp_common +PINECILV2_VENDOR_BSP_BOARD_DIR=$(PINECILV2_VENDOR_BSP_DIR)/board +PINECILV2_VENDOR_BSP_PLATFORM_DIR=$(PINECILV2_VENDOR_BSP_COMMON_DIR)/platform +PINECILV2_VENDOR_BSP_USB_DIR=$(PINECILV2_VENDOR_BSP_COMMON_DIR)/usb -PINECILV2_COMMON_DIR = $(PINECILV2_SDK_DIR)/common -PINECILV2_COMMON_BL_MATH_DIR = $(PINECILV2_COMMON_DIR)/bl_math -PINECILV2_COMMON_DEVICE_DIR = $(PINECILV2_COMMON_DIR)/device -PINECILV2_COMMON_LIST_DIR = $(PINECILV2_COMMON_DIR)/list -PINECILV2_COMMON_MISC_DIR = $(PINECILV2_COMMON_DIR)/misc -PINECILV2_COMMON_PARTITION_DIR = $(PINECILV2_COMMON_DIR)/partition -PINECILV2_COMMON_PID_DIR = $(PINECILV2_COMMON_DIR)/pid -PINECILV2_COMMON_RING_BUFFERDIR = $(PINECILV2_COMMON_DIR)/ring_buffer -PINECILV2_COMMON_SOFT_CRC_DIR = $(PINECILV2_COMMON_DIR)/soft_crc -PINECILV2_COMMON_TIMESTAMP_DIR = $(PINECILV2_COMMON_DIR)/timestamp -PINECILV2_COMPONENTS_DIR = $(PINECILV2_SDK_DIR)/components +PINECILV2_COMMON_DIR=$(PINECILV2_SDK_DIR)/common +PINECILV2_COMMON_BL_MATH_DIR=$(PINECILV2_COMMON_DIR)/bl_math +PINECILV2_COMMON_DEVICE_DIR=$(PINECILV2_COMMON_DIR)/device +PINECILV2_COMMON_LIST_DIR=$(PINECILV2_COMMON_DIR)/list +PINECILV2_COMMON_MISC_DIR=$(PINECILV2_COMMON_DIR)/misc +PINECILV2_COMMON_PARTITION_DIR=$(PINECILV2_COMMON_DIR)/partition +PINECILV2_COMMON_PID_DIR=$(PINECILV2_COMMON_DIR)/pid +PINECILV2_COMMON_RING_BUFFERDIR=$(PINECILV2_COMMON_DIR)/ring_buffer +PINECILV2_COMMON_SOFT_CRC_DIR=$(PINECILV2_COMMON_DIR)/soft_crc +PINECILV2_COMMON_TIMESTAMP_DIR=$(PINECILV2_COMMON_DIR)/timestamp +PINECILV2_COMPONENTS_DIR=$(PINECILV2_SDK_DIR)/components +PINECILV2_COMPONENTS_FREERTOS_DIR=$(PINECILV2_COMPONENTS_DIR)/freertos +PINECILV2_COMPONENTS_FREERTOS_BL602_DIR=$(PINECILV2_COMPONENTS_FREERTOS_DIR)/portable/gcc/risc-v/bl702 -PINECILV2_COMPONENTS_FREERTOS_DIR = $(PINECILV2_COMPONENTS_DIR)/freertos -PINECILV2_COMPONENTS_FREERTOS_BL602_DIR = $(PINECILV2_COMPONENTS_FREERTOS_DIR)/portable/gcc/risc-v/bl702 +PINECILV2_COMPONENTS_BLE_STACK_PORT_INCLUDE_DIR=$(PINECILV2_COMPONENTS_DIR)/ble/ble_stack/port/include +PINECILV2_COMPONENTS_BLE_STACK_INCLUDE_DIR=$(PINECILV2_COMPONENTS_DIR)/ble/ble_stack/include +PINECILV2_COMPONENTS_BLE_STACK_INCLUDE_DRIVERS_DIR=$(PINECILV2_COMPONENTS_DIR)/ble/ble_stack/include/drivers +PINECILV2_COMPONENTS_BLE_STACK_INCLUDE_DRIVERS_BLUETOOTH_DIR=$(PINECILV2_COMPONENTS_DIR)/ble/ble_stack/include/drivers/bluetooth +PINECILV2_COMPONENTS_BLE_STACK_INCLUDE_BLUETOOTH_DIR=$(PINECILV2_COMPONENTS_DIR)/ble/ble_stack/include/bluetooth +PINECILV2_COMPONENTS_BLE_STACK_COMMON_DIR=$(PINECILV2_COMPONENTS_DIR)/ble/ble_stack/common +PINECILV2_COMPONENTS_BLE_STACK_COMMON_INCLUDE_DIR=$(PINECILV2_COMPONENTS_DIR)/ble/ble_stack/common/include +PINECILV2_COMPONENTS_BLE_STACK_INCLUDE_MISC_DIR=$(PINECILV2_COMPONENTS_DIR)/ble/ble_stack/common/include/misc +PINECILV2_COMPONENTS_BLE_STACK_INCLUDE_ZEPHYR_DIR=$(PINECILV2_COMPONENTS_DIR)/ble/ble_stack/common/include/zephyr +PINECILV2_COMPONENTS_BLE_STACK_INCLUDE_NET_DIR=$(PINECILV2_COMPONENTS_DIR)/ble/ble_stack/common/include/net +PINECILV2_COMPONENTS_BLE_STACK_INCLUDE_TOOLCHAIN_DIR=$(PINECILV2_COMPONENTS_DIR)/ble/ble_stack/common/include/toolchain +PINECILV2_COMPONENTS_BLE_STACK_TINYCRYPT_DIR=$(PINECILV2_COMPONENTS_DIR)/ble/ble_stack/common/tinycrypt/include +PINECILV2_COMPONENTS_BLE_STACK_TINYCRYPT_INCLUDE_DIR=$(PINECILV2_COMPONENTS_DIR)/ble/ble_stack/common/tinycrypt/include/tinycrypt +PINECILV2_COMPONENTS_BLE_STACK_HOST_DIR=$(PINECILV2_COMPONENTS_DIR)/ble/ble_stack/host +PINECILV2_COMPONENTS_BLE_STACK_BL_HCI_WRAPPER_DIR=$(PINECILV2_COMPONENTS_DIR)/ble/ble_stack/bl_hci_wrapper +PINECILV2_COMPONENTS_BLE_CONTROLLER_BLE_INC_DIR=$(PINECILV2_COMPONENTS_DIR)/ble/blecontroller/ble_inc +PINECILV2_COMPONENTS_BLE_STACK_BC_DEC_DIR=$(PINECILV2_COMPONENTS_DIR)/ble/ble_stack/sbc/dec -PINECILV2_COMPONENTS_BLE_STACK_PORT_INCLUDE_DIR = $(PINECILV2_COMPONENTS_DIR)/ble/ble_stack/port/include -PINECILV2_COMPONENTS_BLE_STACK_INCLUDE_DIR = $(PINECILV2_COMPONENTS_DIR)/ble/ble_stack/include -PINECILV2_COMPONENTS_BLE_STACK_INCLUDE_DRIVERS_DIR = $(PINECILV2_COMPONENTS_DIR)/ble/ble_stack/include/drivers -PINECILV2_COMPONENTS_BLE_STACK_INCLUDE_DRIVERS_BLUETOOTH_DIR = $(PINECILV2_COMPONENTS_DIR)/ble/ble_stack/include/drivers/bluetooth -PINECILV2_COMPONENTS_BLE_STACK_INCLUDE_BLUETOOTH_DIR = $(PINECILV2_COMPONENTS_DIR)/ble/ble_stack/include/bluetooth -PINECILV2_COMPONENTS_BLE_STACK_COMMON_DIR = $(PINECILV2_COMPONENTS_DIR)/ble/ble_stack/common -PINECILV2_COMPONENTS_BLE_STACK_COMMON_INCLUDE_DIR = $(PINECILV2_COMPONENTS_DIR)/ble/ble_stack/common/include -PINECILV2_COMPONENTS_BLE_STACK_INCLUDE_MISC_DIR = $(PINECILV2_COMPONENTS_DIR)/ble/ble_stack/common/include/misc -PINECILV2_COMPONENTS_BLE_STACK_INCLUDE_ZEPHYR_DIR = $(PINECILV2_COMPONENTS_DIR)/ble/ble_stack/common/include/zephyr -PINECILV2_COMPONENTS_BLE_STACK_INCLUDE_NET_DIR = $(PINECILV2_COMPONENTS_DIR)/ble/ble_stack/common/include/net -PINECILV2_COMPONENTS_BLE_STACK_INCLUDE_TOOLCHAIN_DIR = $(PINECILV2_COMPONENTS_DIR)/ble/ble_stack/common/include/toolchain -PINECILV2_COMPONENTS_BLE_STACK_TINYCRYPT_DIR = $(PINECILV2_COMPONENTS_DIR)/ble/ble_stack/common/tinycrypt/include -PINECILV2_COMPONENTS_BLE_STACK_TINYCRYPT_INCLUDE_DIR = $(PINECILV2_COMPONENTS_DIR)/ble/ble_stack/common/tinycrypt/include/tinycrypt -PINECILV2_COMPONENTS_BLE_STACK_HOST_DIR = $(PINECILV2_COMPONENTS_DIR)/ble/ble_stack/host -PINECILV2_COMPONENTS_BLE_STACK_BL_HCI_WRAPPER_DIR = $(PINECILV2_COMPONENTS_DIR)/ble/ble_stack/bl_hci_wrapper -PINECILV2_COMPONENTS_BLE_CONTROLLER_BLE_INC_DIR = $(PINECILV2_COMPONENTS_DIR)/ble/blecontroller/ble_inc -PINECILV2_COMPONENTS_BLE_STACK_BC_DEC_DIR = $(PINECILV2_COMPONENTS_DIR)/ble/ble_stack/sbc/dec - - -#Binary blobs suck and they should be ashamed +# Binary blobs suck and they should be ashamed PINECILV2_BLE_CRAPWARE_BLOB_DIR=$(PINECILV2_COMPONENTS_DIR)/ble/blecontroller/lib PINECILV2_RF_CRAPWARE_BLOB_DIR=$(PINECILV2_COMPONENTS_DIR)/ble/bl702_rf/lib +PINECILV2_COMPONENTS_NMSIS_DIR=$(PINECILV2_COMPONENTS_DIR)/nmsis +PINECILV2_COMPONENTS_NMSIS_CORE_INC_DIR=$(PINECILV2_COMPONENTS_NMSIS_DIR)/core/inc -PINECILV2_COMPONENTS_NMSIS_DIR = $(PINECILV2_COMPONENTS_DIR)/nmsis -PINECILV2_COMPONENTS_NMSIS_CORE_INC_DIR = $(PINECILV2_COMPONENTS_NMSIS_DIR)/core/inc +PINECILV2_COMPONENTS_USB_STACK_DIR=$(PINECILV2_COMPONENTS_DIR)/usb_stack +PINECILV2_COMPONENTS_USB_STACK_COMMON_DIR=$(PINECILV2_COMPONENTS_USB_STACK_DIR)/common +PINECILV2_COMPONENTS_USB_STACK_CORE_DIR=$(PINECILV2_COMPONENTS_USB_STACK_DIR)/core +PINECILV2_COMPONENTS_USB_STACK_CDC_DIR=$(PINECILV2_COMPONENTS_USB_STACK_DIR)/class/cdc +PINECILV2_COMPONENTS_USB_STACK_WINUSB_DIR=$(PINECILV2_COMPONENTS_USB_STACK_DIR)/class/winusb -PINECILV2_COMPONENTS_USB_STACK_DIR = $(PINECILV2_COMPONENTS_DIR)/usb_stack -PINECILV2_COMPONENTS_USB_STACK_COMMON_DIR = $(PINECILV2_COMPONENTS_USB_STACK_DIR)/common -PINECILV2_COMPONENTS_USB_STACK_CORE_DIR = $(PINECILV2_COMPONENTS_USB_STACK_DIR)/core -PINECILV2_COMPONENTS_USB_STACK_CDC_DIR = $(PINECILV2_COMPONENTS_USB_STACK_DIR)/class/cdc -PINECILV2_COMPONENTS_USB_STACK_WINUSB_DIR = $(PINECILV2_COMPONENTS_USB_STACK_DIR)/class/winusb +PINECILV2_DRIVERS_DIR=$(PINECILV2_SDK_DIR)/drivers/bl702_driver +PINECILV2_DRIVERS_HAL_DRV_INC_DIR=$(PINECILV2_DRIVERS_DIR)/hal_drv/inc +PINECILV2_DRIVERS_HAL_DRV_DEF_DIR=$(PINECILV2_DRIVERS_DIR)/hal_drv/default_config +PINECILV2_DRIVERS_REGS_DIR=$(PINECILV2_DRIVERS_DIR)/regs +PINECILV2_DRIVERS_RISCV_DIR=$(PINECILV2_DRIVERS_DIR)/risc-v +PINECILV2_DRIVERS_STARTUP_DIR=$(PINECILV2_DRIVERS_DIR)/startup +PINECILV2_DRIVERS_STD_DRV_DIR=$(PINECILV2_DRIVERS_DIR)/std_drv/inc -PINECILV2_DRIVERS_DIR = $(PINECILV2_SDK_DIR)/drivers/bl702_driver -PINECILV2_DRIVERS_HAL_DRV_INC_DIR = $(PINECILV2_DRIVERS_DIR)/hal_drv/inc -PINECILV2_DRIVERS_HAL_DRV_DEF_DIR = $(PINECILV2_DRIVERS_DIR)/hal_drv/default_config -PINECILV2_DRIVERS_REGS_DIR = $(PINECILV2_DRIVERS_DIR)/regs -PINECILV2_DRIVERS_RISCV_DIR = $(PINECILV2_DRIVERS_DIR)/risc-v -PINECILV2_DRIVERS_STARTUP_DIR = $(PINECILV2_DRIVERS_DIR)/startup -PINECILV2_DRIVERS_STD_DRV_DIR = $(PINECILV2_DRIVERS_DIR)/std_drv/inc +SOURCE_MIDDLEWARES_DIR=./Middlewares +FRTOS_CMIS_INC_DIR=./Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS +FRTOS_INC_DIR=./Middlewares/Third_Party/FreeRTOS/Source/include +DRIVER_INC_DIR=./Core/Drivers +BSP_INC_DIR=./Core/BSP +THREADS_INC_DIR=./Core/Threads +THREADS_OP_MODES_INC_DIR=./Core/Threads/OperatingModes +THREADS_OP_MODES_TOOLS_INC_DIR=./Core/Threads/OperatingModes/utils +SOURCE_THREADS_DIR=./Core/Threads +SOURCE_CORE_DIR=./Core/Src +SOURCE_BRIEFLZ_DIR=./Core/brieflz +SOURCE_DRIVERS_DIR=./Core/Drivers +INC_PD_DRIVERS_DIR=./Core/Drivers/usb-pd/include +PD_DRIVER_TESTS_DIR=./Core/Drivers/usb-pd/tests +PD_DRIVER_DIR=./Core/Drivers/usb-pd +# Excludes for clang-format +ALL_INCLUDES_EXCEPT:=-path $(BRIEFLZ_INC_DIR) \ + -o -path $(PD_DRIVER_DIR) \ + -o -path $(PINECILV2_SDK_DIR) \ + -o -path $(DRIVER_INC_DIR) \ + -o -path $(MINIWARE_HAL_INC_DIR) \ + -o -path $(S60_HAL_INC_DIR) \ + -o -path $(MHP30_HAL_INC_DIR) \ + -o -path $(PINE_VENDOR_INC_DIR) \ + -o -path $(MINIWARE_CMSIS_CORE_INC_DIR) \ + -o -path $(S60_CMSIS_CORE_INC_DIR) \ + -o -path $(MINIWARE_INC_CMSIS_DEVICE) \ + -o -path $(S60_INC_CMSIS_DEVICE) \ + -o -path $(MHP30_INC_CMSIS_DEVICE) \ + -o -not -name "configuration.h" -SOURCE_MIDDLEWARES_DIR = ./Middlewares -FRTOS_CMIS_INC_DIR = ./Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS -FRTOS_INC_DIR = ./Middlewares/Third_Party/FreeRTOS/Source/include -DRIVER_INC_DIR =./Core/Drivers -BSP_INC_DIR = ./Core/BSP -THREADS_INC_DIR = ./Core/Threads -THREADS_OP_MODES_INC_DIR = ./Core/Threads/OperatingModes -THREADS_OP_MODES_TOOLS_INC_DIR = ./Core/Threads/OperatingModes/utils - -SOURCE_THREADS_DIR = ./Core/Threads -SOURCE_CORE_DIR = ./Core/Src -SOURCE_BRIEFLZ_DIR = ./Core/brieflz -SOURCE_DRIVERS_DIR = ./Core/Drivers -INC_PD_DRIVERS_DIR = ./Core/Drivers/usb-pd/include -PD_DRIVER_TESTS_DIR = ./Core/Drivers/usb-pd/tests -PD_DRIVER_DIR = ./Core/Drivers/usb-pd - +ALL_SOURCE_EXCEPT:=-path $(SOURCE_BRIEFLZ_DIR) \ + -o -path $(PD_DRIVER_DIR) \ + -o -path $(PINECILV2_SDK_DIR) \ + -o -path $(SOURCE_DRIVERS_DIR) \ + -o -path $(MINIWARE_HAL_SRC_DIR) \ + -o -path $(S60_HAL_SRC_DIR) \ + -o -path $(MHP30_HAL_SRC_DIR) \ + -o -path $(PINE_VENDOR_SRC_DIR) \ + -o -path $(PINECILV2_MEM_DIR) # Find-all's used for formatting; have to exclude external modules - -ALL_INCLUDES = $(shell find ./Core -type d \( -path $(BRIEFLZ_INC_DIR) -o -path $(PD_DRIVER_DIR) -o -path $(PINECILV2_SDK_DIR) \) -prune -false -o \( -type f \( -name '*.h' -o -name '*.hpp' \) \) ) -ALL_SOURCE = $(shell find ./Core -type d \( -path $(SOURCE_BRIEFLZ_DIR) -o -path $(PD_DRIVER_DIR) -o -path $(PINECILV2_SDK_DIR) \) -prune -false -o \( -type f \( -name '*.c' -o -name '*.cpp' \) \) ) +ALL_INCLUDES=$(shell find ./Core -type d \( $(ALL_INCLUDES_EXCEPT) \) -prune -false -o \( -type f \( -name '*.h' -o -name '*.hpp' \) \) ) +ALL_SOURCE=$(shell find ./Core -type d \( $(ALL_SOURCE_EXCEPT) \) -prune -false -o \( -type f \( -name '*.c' -o -name '*.cpp' \) \) ) # Device dependent settings ifeq ($(model),$(filter $(model),$(ALL_MINIWARE_MODELS))) $(info Building for Miniware ) -DEVICE_INCLUDES = -I$(MINIWARE_INC_DIR) \ - -I$(MINIWARE_INC_CMSIS_DEVICE)\ - -I$(MINIWARE_CMSIS_CORE_INC_DIR) \ - -I$(MINIWARE_HAL_INC_DIR) \ - -I$(MINIWARE_HAL_LEGACY_INC_DIR) -DEVICE_BSP_DIR = ./Core/BSP/Miniware -S_SRCS := $(shell find $(MINIWARE_STARTUP_DIR) -type f -name '*.S') +DEVICE_INCLUDES=-I$(MINIWARE_INC_DIR) \ + -I$(MINIWARE_INC_CMSIS_DEVICE) \ + -I$(MINIWARE_CMSIS_CORE_INC_DIR) \ + -I$(MINIWARE_HAL_INC_DIR) \ + -I$(MINIWARE_HAL_LEGACY_INC_DIR) + +DEVICE_BSP_DIR=./Core/BSP/Miniware +S_SRCS:=$(shell find $(MINIWARE_STARTUP_DIR) -type f -name '*.S') LDSCRIPT=$(MINIWARE_LD_FILE) + ifeq ($(model),$(filter $(model),TS101)) flash_size=126k bootldr_size=0x8000 @@ -199,270 +227,331 @@ bootldr_size=0x4000 DEVICE_DFU_ADDRESS=0x08004000 endif -DEV_GLOBAL_DEFS= -D STM32F103T8Ux -D STM32F1 -D STM32 -D USE_HAL_DRIVER -D STM32F103xB -D USE_RTOS_SYSTICK -D GCC_ARMCM3 \ - -D ARM_MATH_CM3 \ - -D STM32F10X_MD -finline-limit=9999999 -DEV_LDFLAGS= -Wl,--wrap=printf -Wl,--no-wchar-size-warning +DEV_GLOBAL_DEFS=-D STM32F103T8Ux \ + -D STM32F1 \ + -D STM32 \ + -D USE_HAL_DRIVER \ + -D STM32F103xB \ + -D USE_RTOS_SYSTICK \ + -D GCC_ARMCM3 \ + -D ARM_MATH_CM3 \ + -D STM32F10X_MD \ + -finline-limit=9999999 + +DEV_LDFLAGS=-Wl,--wrap=printf -Wl,--no-wchar-size-warning DEV_AFLAGS= -DEV_CFLAGS= -D VECT_TAB_OFFSET=$(bootldr_size)U -DEV_CXXFLAGS= -CPUFLAGS= -mcpu=cortex-m3 \ - -mthumb \ - -mfloat-abi=soft +DEV_CFLAGS=-D VECT_TAB_OFFSET=$(bootldr_size)U +DEV_CXXFLAGS= +CPUFLAGS=-mcpu=cortex-m3 \ + -mthumb \ + -mfloat-abi=soft + DEVICE_DFU_VID_PID=0x1209:0xDB42 -endif +endif # ALL_MINIWARE_MODELS + ifeq ($(model),$(filter $(model),$(ALL_SEQURE_MODELS))) $(info Building for Sequre ) -DEVICE_INCLUDES = -I$(S60_INC_DIR) \ - -I$(S60_INC_CMSIS_DEVICE)\ - -I$(S60_CMSIS_CORE_INC_DIR) \ - -I$(S60_HAL_INC_DIR) \ - -I$(S60_HAL_LEGACY_INC_DIR) -DEVICE_BSP_DIR = ./Core/BSP/Sequre_S60 -S_SRCS := $(shell find $(S60_STARTUP_DIR) -type f -name '*.S') +DEVICE_INCLUDES=-I$(S60_INC_DIR) \ + -I$(S60_INC_CMSIS_DEVICE) \ + -I$(S60_CMSIS_CORE_INC_DIR) \ + -I$(S60_HAL_INC_DIR) \ + -I$(S60_HAL_LEGACY_INC_DIR) + +DEVICE_BSP_DIR=./Core/BSP/Sequre_S60 +S_SRCS:=$(shell find $(S60_STARTUP_DIR) -type f -name '*.S') LDSCRIPT=$(S60_LD_FILE) -DEV_GLOBAL_DEFS= -D STM32F103T8Ux -D STM32F1 -D STM32 -D USE_HAL_DRIVER -D STM32F103xB -D USE_RTOS_SYSTICK -D GCC_ARMCM3 \ - -D ARM_MATH_CM3 \ - -D STM32F10X_MD -finline-limit=9999999 -DEV_LDFLAGS= -Wl,--wrap=printf -Wl,--no-wchar-size-warning +DEV_GLOBAL_DEFS=-D STM32F103T8Ux \ + -D STM32F1 \ + -D STM32 \ + -D USE_HAL_DRIVER \ + -D STM32F103xB \ + -D USE_RTOS_SYSTICK \ + -D GCC_ARMCM3 \ + -D ARM_MATH_CM3 \ + -D STM32F10X_MD \ + -finline-limit=9999999 + +DEV_LDFLAGS=-Wl,--wrap=printf -Wl,--no-wchar-size-warning DEV_AFLAGS= -DEV_CFLAGS= -D VECT_TAB_OFFSET=$(bootldr_size)U -DEV_CXXFLAGS= -CPUFLAGS= -mcpu=cortex-m3 \ - -mthumb \ - -mfloat-abi=soft +DEV_CFLAGS=-D VECT_TAB_OFFSET=$(bootldr_size)U +DEV_CXXFLAGS= +CPUFLAGS=-mcpu=cortex-m3 \ + -mthumb \ + -mfloat-abi=soft + flash_size=62k bootldr_size=0x4400 DEVICE_DFU_ADDRESS=0x08004400 DEVICE_DFU_VID_PID=0x1209:0xDB42 -endif +endif # ALL_SEQURE_MODELS ifeq ($(model),$(filter $(model),$(ALL_MHP30_MODELS))) $(info Building for MHP30 ) -DEVICE_INCLUDES = -I$(MHP30_INC_DIR) \ - -I$(MHP30_INC_CMSIS_DEVICE)\ - -I$(MHP30_CMSIS_CORE_INC_DIR) \ - -I$(MHP30_HAL_INC_DIR) \ - -I$(MHP30_HAL_LEGACY_INC_DIR) -DEVICE_BSP_DIR = ./Core/BSP/MHP30 -S_SRCS := $(shell find $(MHP30_STARTUP_DIR) -type f -name '*.S') +DEVICE_INCLUDES=-I$(MHP30_INC_DIR) \ + -I$(MHP30_INC_CMSIS_DEVICE) \ + -I$(MHP30_CMSIS_CORE_INC_DIR) \ + -I$(MHP30_HAL_INC_DIR) \ + -I$(MHP30_HAL_LEGACY_INC_DIR) + +DEVICE_BSP_DIR=./Core/BSP/MHP30 +S_SRCS:=$(shell find $(MHP30_STARTUP_DIR) -type f -name '*.S') LDSCRIPT=$(MHP30_LD_FILE) -DEV_GLOBAL_DEFS= -D STM32F103T8Ux -D STM32F1 -D STM32 -D USE_HAL_DRIVER -D STM32F103xB -D USE_RTOS_SYSTICK -D GCC_ARMCM3 \ - -D ARM_MATH_CM3 \ - -D STM32F10X_MD -DEV_LDFLAGS= +DEV_GLOBAL_DEFS=-D STM32F103T8Ux \ + -D STM32F1 \ + -D STM32 \ + -D USE_HAL_DRIVER \ + -D STM32F103xB \ + -D USE_RTOS_SYSTICK \ + -D GCC_ARMCM3 \ + -D ARM_MATH_CM3 \ + -D STM32F10X_MD + +DEV_LDFLAGS= DEV_AFLAGS= -DEV_CFLAGS= -D VECT_TAB_OFFSET=$(bootldr_size)U -DEV_CXXFLAGS= -CPUFLAGS= -mcpu=cortex-m3 \ - -mthumb \ - -mfloat-abi=soft +DEV_CFLAGS=-D VECT_TAB_OFFSET=$(bootldr_size)U +DEV_CXXFLAGS= +CPUFLAGS=-mcpu=cortex-m3 \ + -mthumb \ + -mfloat-abi=soft + flash_size=126k bootldr_size=32k DEVICE_DFU_ADDRESS=0x08008000 DEVICE_DFU_VID_PID=0x1209:0xDB42 -endif - +endif # ALL_MHP30_MODELS ifeq ($(model),$(ALL_PINECIL_MODELS)) $(info Building for Pine64 Pinecilv1) -DEVICE_INCLUDES = -I$(PINE_INC_DIR) \ --I$(PINE_VENDOR_INC_DIR) \ --I$(PINE_VENDOR_USB_INC_DIR) \ --I$(PINE_NMSIS_INC_DIR) \ --I$(PINE_FREERTOS_PORT_INC_DIR) - -DEVICE_BSP_DIR = ./Core/BSP/Pinecil -S_SRCS := $(shell find $(PINE_INC_DIR) -type f -name '*.S') $(info $(S_SRCS) ) -ASM_INC = -I$(PINE_RISCV_INC_DIR) +DEVICE_INCLUDES=-I$(PINE_INC_DIR) \ + -I$(PINE_VENDOR_INC_DIR) \ + -I$(PINE_VENDOR_USB_INC_DIR) \ + -I$(PINE_NMSIS_INC_DIR) \ + -I$(PINE_FREERTOS_PORT_INC_DIR) + +DEVICE_BSP_DIR=./Core/BSP/Pinecil +S_SRCS:=$(shell find $(PINE_INC_DIR) -type f -name '*.S') $(info $(S_SRCS) ) +ASM_INC=-I$(PINE_RISCV_INC_DIR) LDSCRIPT=./Core/BSP/Pinecil/Vendor/SoC/gd32vf103/Board/pinecil/Source/GCC/gcc_gd32vf103_flashxip.ld flash_size=128k bootldr_size=0x0 + # Flags -CPUFLAGS= -march=rv32imac \ - -mabi=ilp32 \ - -mcmodel=medany -fsigned-char -fno-builtin -nostartfiles -DEV_LDFLAGS=-nostartfiles -DEV_AFLAGS= -DEV_GLOBAL_DEFS= -DRTOS_FREERTOS -DDOWNLOAD_MODE=DOWNLOAD_MODE_FLASHXIP -DEV_CFLAGS= -D VECT_TAB_OFFSET=$(bootldr_size)U +CPUFLAGS=-march=rv32imac \ + -mabi=ilp32 \ + -mcmodel=medany \ + -fsigned-char \ + -fno-builtin \ + -nostartfiles + +DEV_LDFLAGS=-nostartfiles +DEV_AFLAGS= +DEV_GLOBAL_DEFS=-DRTOS_FREERTOS -DDOWNLOAD_MODE=DOWNLOAD_MODE_FLASHXIP +DEV_CFLAGS=-D VECT_TAB_OFFSET=$(bootldr_size)U DEV_CXXFLAGS= -endif - - - +endif # ALL_PINECIL_MODELS ifeq ($(model),$(ALL_PINECIL_V2_MODELS)) $(info Building for Pine64 Pinecilv2 ) +DEVICE_INCLUDES=-I$(PINECILV2_DIR) \ + -I$(PINECILV2_SDK_DIR) \ + -I$(PINECILV2_VENDOR_BSP_COMMON_DIR) \ + -I$(PINECILV2_VENDOR_BSP_PLATFORM_DIR) \ + -I$(PINECILV2_COMMON_DIR) \ + -I$(PINECILV2_COMMON_BL_MATH_DIR) \ + -I$(PINECILV2_COMMON_DEVICE_DIR) \ + -I$(PINECILV2_COMMON_LIST_DIR) \ + -I$(PINECILV2_COMMON_MISC_DIR) \ + -I$(PINECILV2_COMMON_PARTITION_DIR) \ + -I$(PINECILV2_COMMON_PID_DIR) \ + -I$(PINECILV2_COMMON_RING_BUFFERDIR) \ + -I$(PINECILV2_COMMON_SOFT_CRC_DIR) \ + -I$(PINECILV2_COMMON_TIMESTAMP_DIR) \ + -I$(PINECILV2_COMPONENTS_DIR) \ + -I$(PINECILV2_COMPONENTS_FREERTOS_DIR) \ + -I$(PINECILV2_COMPONENTS_FREERTOS_BL602_DIR) \ + -I$(PINECILV2_COMPONENTS_BLE_STACK_INCLUDE_DIR) \ + -I$(PINECILV2_COMPONENTS_BLE_STACK_INCLUDE_DRIVERS_DIR) \ + -I$(PINECILV2_COMPONENTS_BLE_STACK_INCLUDE_DRIVERS_BLUETOOTH_DIR) \ + -I$(PINECILV2_COMPONENTS_BLE_STACK_PORT_INCLUDE_DIR) \ + -I$(PINECILV2_COMPONENTS_BLE_STACK_INCLUDE_BLUETOOTH_DIR) \ + -I$(PINECILV2_COMPONENTS_BLE_STACK_COMMON_INCLUDE_DIR) \ + -I$(PINECILV2_COMPONENTS_BLE_STACK_COMMON_DIR) \ + -I$(PINECILV2_COMPONENTS_BLE_STACK_INCLUDE_MISC_DIR) \ + -I$(PINECILV2_COMPONENTS_BLE_STACK_INCLUDE_ZEPHYR_DIR) \ + -I$(PINECILV2_COMPONENTS_BLE_STACK_INCLUDE_NET_DIR) \ + -I$(PINECILV2_COMPONENTS_BLE_STACK_INCLUDE_TOOLCHAIN_DIR) \ + -I$(PINECILV2_COMPONENTS_BLE_STACK_INCLUDE_TOOLCHAIN_DIR) \ + -I$(PINECILV2_COMPONENTS_BLE_STACK_TINYCRYPT_DIR) \ + -I$(PINECILV2_COMPONENTS_BLE_STACK_TINYCRYPT_INCLUDE_DIR) \ + -I$(PINECILV2_COMPONENTS_BLE_STACK_HOST_DIR) \ + -I$(PINECILV2_COMPONENTS_BLE_STACK_BL_HCI_WRAPPER_DIR) \ + -I$(PINECILV2_COMPONENTS_BLE_CONTROLLER_BLE_INC_DIR) \ + -I$(PINECILV2_COMPONENTS_BLE_STACK_BC_DEC_DIR) \ + -I$(PINECILV2_COMPONENTS_NMSIS_DIR) \ + -I$(PINECILV2_COMPONENTS_USB_STACK_DIR) \ + -I$(PINECILV2_DRIVERS_DIR) \ + -I$(PINECILV2_DRIVERS_HAL_DRV_INC_DIR) \ + -I$(PINECILV2_DRIVERS_HAL_DRV_DEF_DIR) \ + -I$(PINECILV2_DRIVERS_REGS_DIR) \ + -I$(PINECILV2_DRIVERS_RISCV_DIR) \ + -I$(PINECILV2_DRIVERS_STARTUP_DIR) \ + -I$(PINECILV2_DRIVERS_STD_DRV_DIR) \ + -I$(PINECILV2_VENDOR_BSP_PLATFORM_DIR) \ + -I$(PINECILV2_VENDOR_BSP_USB_DIR) \ + -I$(PINECILV2_COMPONENTS_USB_STACK_COMMON_DIR) \ + -I$(PINECILV2_COMPONENTS_USB_STACK_CORE_DIR) \ + -I$(PINECILV2_COMPONENTS_USB_STACK_CDC_DIR) \ + -I$(PINECILV2_COMPONENTS_USB_STACK_WINUSB_DIR) \ + -I$(PINECILV2_COMPONENTS_NMSIS_CORE_INC_DIR) - -DEVICE_INCLUDES = -I$(PINECILV2_DIR) \ - -I$(PINECILV2_SDK_DIR) \ - -I$(PINECILV2_VENDOR_BSP_COMMON_DIR) \ - -I$(PINECILV2_VENDOR_BSP_PLATFORM_DIR) \ - -I$(PINECILV2_COMMON_DIR) \ - -I$(PINECILV2_COMMON_BL_MATH_DIR) \ - -I$(PINECILV2_COMMON_DEVICE_DIR) \ - -I$(PINECILV2_COMMON_LIST_DIR) \ - -I$(PINECILV2_COMMON_MISC_DIR) \ - -I$(PINECILV2_COMMON_PARTITION_DIR) \ - -I$(PINECILV2_COMMON_PID_DIR) \ - -I$(PINECILV2_COMMON_RING_BUFFERDIR) \ - -I$(PINECILV2_COMMON_SOFT_CRC_DIR) \ - -I$(PINECILV2_COMMON_TIMESTAMP_DIR) \ - -I$(PINECILV2_COMPONENTS_DIR) \ - -I$(PINECILV2_COMPONENTS_FREERTOS_DIR) \ - -I$(PINECILV2_COMPONENTS_FREERTOS_BL602_DIR) \ - -I$(PINECILV2_COMPONENTS_BLE_STACK_INCLUDE_DIR) \ - -I$(PINECILV2_COMPONENTS_BLE_STACK_INCLUDE_DRIVERS_DIR) \ - -I$(PINECILV2_COMPONENTS_BLE_STACK_INCLUDE_DRIVERS_BLUETOOTH_DIR) \ - -I$(PINECILV2_COMPONENTS_BLE_STACK_PORT_INCLUDE_DIR) \ - -I$(PINECILV2_COMPONENTS_BLE_STACK_INCLUDE_BLUETOOTH_DIR) \ - -I$(PINECILV2_COMPONENTS_BLE_STACK_COMMON_INCLUDE_DIR) \ - -I$(PINECILV2_COMPONENTS_BLE_STACK_COMMON_DIR) \ - -I$(PINECILV2_COMPONENTS_BLE_STACK_INCLUDE_MISC_DIR) \ - -I$(PINECILV2_COMPONENTS_BLE_STACK_INCLUDE_ZEPHYR_DIR) \ - -I$(PINECILV2_COMPONENTS_BLE_STACK_INCLUDE_NET_DIR) \ - -I$(PINECILV2_COMPONENTS_BLE_STACK_INCLUDE_TOOLCHAIN_DIR) \ - -I$(PINECILV2_COMPONENTS_BLE_STACK_INCLUDE_TOOLCHAIN_DIR) \ - -I$(PINECILV2_COMPONENTS_BLE_STACK_TINYCRYPT_DIR) \ - -I$(PINECILV2_COMPONENTS_BLE_STACK_TINYCRYPT_INCLUDE_DIR) \ - -I$(PINECILV2_COMPONENTS_BLE_STACK_HOST_DIR) \ - -I$(PINECILV2_COMPONENTS_BLE_STACK_BL_HCI_WRAPPER_DIR) \ - -I$(PINECILV2_COMPONENTS_BLE_CONTROLLER_BLE_INC_DIR) \ - -I$(PINECILV2_COMPONENTS_BLE_STACK_BC_DEC_DIR) \ - -I$(PINECILV2_COMPONENTS_NMSIS_DIR) \ - -I$(PINECILV2_COMPONENTS_USB_STACK_DIR) \ - -I$(PINECILV2_DRIVERS_DIR) \ - -I$(PINECILV2_DRIVERS_HAL_DRV_INC_DIR) \ - -I$(PINECILV2_DRIVERS_HAL_DRV_DEF_DIR) \ - -I$(PINECILV2_DRIVERS_REGS_DIR) \ - -I$(PINECILV2_DRIVERS_RISCV_DIR) \ - -I$(PINECILV2_DRIVERS_STARTUP_DIR) \ - -I$(PINECILV2_DRIVERS_STD_DRV_DIR) \ - -I$(PINECILV2_VENDOR_BSP_PLATFORM_DIR) \ - -I$(PINECILV2_VENDOR_BSP_USB_DIR) \ - -I$(PINECILV2_COMPONENTS_USB_STACK_COMMON_DIR) \ - -I$(PINECILV2_COMPONENTS_USB_STACK_CORE_DIR) \ - -I$(PINECILV2_COMPONENTS_USB_STACK_CDC_DIR) \ - -I$(PINECILV2_COMPONENTS_USB_STACK_WINUSB_DIR) \ - -I$(PINECILV2_COMPONENTS_NMSIS_CORE_INC_DIR) - -DEVICE_BSP_DIR = ./Core/BSP/Pinecilv2 -S_SRCS := $(shell find $(PINECILV2_DIR) -type d \( -path $(PINECILV2_VENDOR_BSP_COMMON_DIR) \) -prune -false -o -type f -name '*.S') $(info $(S_SRCS) ) -ASM_INC = $(DEVICE_INCLUDES) +DEVICE_BSP_DIR=./Core/BSP/Pinecilv2 +S_SRCS:=$(shell find $(PINECILV2_DIR) -type d \( -path $(PINECILV2_VENDOR_BSP_COMMON_DIR) \) -prune -false -o -type f -name '*.S') $(info $(S_SRCS) ) +ASM_INC=$(DEVICE_INCLUDES) LDSCRIPT=./Core/BSP/Pinecilv2/bl_mcu_sdk/drivers/bl702_driver/bl702_flash.ld # Flags -CPUFLAGS= -march=rv32imafc \ - -mabi=ilp32f \ - -mcmodel=medany -fsigned-char -fno-builtin -nostartfiles \ - -DportasmHANDLE_INTERRUPT=FreeRTOS_Interrupt_Handler -DARCH_RISCV -D__RISCV_FEATURE_MVE=0 -DBL702 -DBFLB_USE_ROM_DRIVER=1 -DEV_LDFLAGS=-nostartfiles -L $(PINECILV2_BLE_CRAPWARE_BLOB_DIR) -L $(PINECILV2_RF_CRAPWARE_BLOB_DIR) -l blecontroller_702_m0s1s -l bl702_rf -DEV_AFLAGS= -DEV_GLOBAL_DEFS= -DCFG_FREERTOS \ --DARCH_RISCV \ --DBL702 \ --DCFG_BLE_ENABLE \ --DBFLB_BLE \ --DCFG_BLE \ --DOPTIMIZE_DATA_EVT_FLOW_FROM_CONTROLLER \ --DBL_MCU_SDK \ --DCFG_CON=2 \ --DCFG_BLE_TX_BUFF_DATA=2 \ --DCONFIG_BT_PERIPHERAL \ --DCONFIG_BT_L2CAP_DYNAMIC_CHANNEL \ --DCONFIG_BT_GATT_CLIENT \ --DCONFIG_BT_CONN \ --DCONFIG_BT_GATT_DIS_PNP \ --DCONFIG_BT_GATT_DIS_SERIAL_NUMBER \ --DCONFIG_BT_GATT_DIS_FW_REV \ --DCONFIG_BT_GATT_DIS_HW_REV \ --DCONFIG_BT_GATT_DIS_SW_REV \ --DCONFIG_BT_ECC \ --DCONFIG_BT_GATT_DYNAMIC_DB \ --DCONFIG_BT_GATT_SERVICE_CHANGED \ --DCONFIG_BT_KEYS_OVERWRITE_OLDEST \ --DCONFIG_BT_KEYS_SAVE_AGING_COUNTER_ON_PAIRING \ --DCONFIG_BT_GAP_PERIPHERAL_PREF_PARAMS \ --DCONFIG_BT_BONDABLE \ --DCONFIG_BT_HCI_VS_EVT_USER \ --DCONFIG_BT_ASSERT \ --DCONFIG_BT_SIGNING \ --DCONFIG_BT_SETTINGS_CCC_LAZY_LOADING \ --DCONFIG_BT_SETTINGS_USE_PRINTK \ --DCFG_SLEEP \ --DCONFIG_BT_ALLROLES \ --DCONFIG_BT_CENTRAL \ --DCONFIG_BT_OBSERVER \ --DCONFIG_BT_BROADCASTER \ --DCFG_BLE_STACK_DBG_PRINT \ --DportasmHANDLE_INTERRUPT=FreeRTOS_Interrupt_Handler \ --DCONFIG_BT_DEVICE_NAME=\"Pinecil\" \ --DCONFIG_BT_DEVICE_APPEARANCE=0x06C1 -# -DBFLB_USE_HAL_DRIVER -# -DCONFIG_BT_SMP \ +CPUFLAGS=-march=rv32imafc \ + -mabi=ilp32f \ + -mcmodel=medany \ + -fsigned-char \ + -fno-builtin \ + -nostartfiles \ + -DportasmHANDLE_INTERRUPT=FreeRTOS_Interrupt_Handler \ + -DARCH_RISCV \ + -D__RISCV_FEATURE_MVE=0 \ + -DBL702 \ + -DBFLB_USE_ROM_DRIVER=1 \ +DEV_LDFLAGS=-nostartfiles \ + -L $(PINECILV2_BLE_CRAPWARE_BLOB_DIR) \ + -L $(PINECILV2_RF_CRAPWARE_BLOB_DIR) \ + -l blecontroller_702_m0s1s \ + -l bl702_rf -#Required to be turned off due to their drivers tripping warnings +DEV_AFLAGS= +DEV_GLOBAL_DEFS=-DCFG_FREERTOS \ + -DARCH_RISCV \ + -DBL702 \ + -DCFG_BLE_ENABLE \ + -DBFLB_BLE \ + -DCFG_BLE \ + -DOPTIMIZE_DATA_EVT_FLOW_FROM_CONTROLLER \ + -DBL_MCU_SDK \ + -DCFG_CON=2 \ + -DCFG_BLE_TX_BUFF_DATA=2 \ + -DCONFIG_BT_PERIPHERAL \ + -DCONFIG_BT_L2CAP_DYNAMIC_CHANNEL \ + -DCONFIG_BT_GATT_CLIENT \ + -DCONFIG_BT_CONN \ + -DCONFIG_BT_GATT_DIS_PNP \ + -DCONFIG_BT_GATT_DIS_SERIAL_NUMBER \ + -DCONFIG_BT_GATT_DIS_FW_REV \ + -DCONFIG_BT_GATT_DIS_HW_REV \ + -DCONFIG_BT_GATT_DIS_SW_REV \ + -DCONFIG_BT_ECC \ + -DCONFIG_BT_GATT_DYNAMIC_DB \ + -DCONFIG_BT_GATT_SERVICE_CHANGED \ + -DCONFIG_BT_KEYS_OVERWRITE_OLDEST \ + -DCONFIG_BT_KEYS_SAVE_AGING_COUNTER_ON_PAIRING \ + -DCONFIG_BT_GAP_PERIPHERAL_PREF_PARAMS \ + -DCONFIG_BT_BONDABLE \ + -DCONFIG_BT_HCI_VS_EVT_USER \ + -DCONFIG_BT_ASSERT \ + -DCONFIG_BT_SIGNING \ + -DCONFIG_BT_SETTINGS_CCC_LAZY_LOADING \ + -DCONFIG_BT_SETTINGS_USE_PRINTK \ + -DCFG_SLEEP \ + -DCONFIG_BT_ALLROLES \ + -DCONFIG_BT_CENTRAL \ + -DCONFIG_BT_OBSERVER \ + -DCONFIG_BT_BROADCASTER \ + -DCFG_BLE_STACK_DBG_PRINT \ + -DportasmHANDLE_INTERRUPT=FreeRTOS_Interrupt_Handler \ + -DCONFIG_BT_DEVICE_NAME=\"Pinecil\" \ + -DCONFIG_BT_DEVICE_APPEARANCE=0x06C1 +# -DBFLB_USE_HAL_DRIVER \ +# -DCONFIG_BT_SMP + +# Required to be turned off due to their drivers tripping warnings DEV_CFLAGS= -Wno-error=enum-conversion -Wno-type-limits -Wno-implicit-fallthrough DEV_CXXFLAGS= $(DEV_CFLAGS) flash_size=128k bootldr_size=0x0 -endif +endif # ALL_PINECIL_V2_MODELS -INCLUDES = -I$(APP_INC_DIR) \ - -I$(BRIEFLZ_INC_DIR) \ - -I$(FRTOS_CMIS_INC_DIR) \ - -I$(FRTOS_INC_DIR) \ - -I$(DRIVER_INC_DIR) \ - -I$(BSP_INC_DIR) \ - -I$(THREADS_INC_DIR) \ - -I$(THREADS_OP_MODES_INC_DIR) \ - -I$(THREADS_OP_MODES_TOOLS_INC_DIR) \ - -I$(INC_PD_DRIVERS_DIR) \ - $(DEVICE_INCLUDES) +INCLUDES=-I$(APP_INC_DIR) \ + -I$(BRIEFLZ_INC_DIR) \ + -I$(FRTOS_CMIS_INC_DIR) \ + -I$(FRTOS_INC_DIR) \ + -I$(DRIVER_INC_DIR) \ + -I$(BSP_INC_DIR) \ + -I$(THREADS_INC_DIR) \ + -I$(THREADS_OP_MODES_INC_DIR) \ + -I$(THREADS_OP_MODES_TOOLS_INC_DIR) \ + -I$(INC_PD_DRIVERS_DIR) \ + $(DEVICE_INCLUDES) -EXCLUDED_DIRS := -path $(PINECILV2_VENDOR_BSP_ES8388_DIR) \ --o -path $(PINECILV2_VENDOR_BSP_IMAGE_SENSOR_DIR) \ --o -path $(PINECILV2_VENDOR_BSP_LVGL_DIR) \ --o -path $(PINECILV2_VENDOR_BSP_MCU_LCD_DIR) \ --o -path $(PINECILV2_VENDOR_BSP_BOARD_DIR) \ --o -path $(PINECILV2_VENDOR_BSP_USB_DIR) \ +EXCLUDED_DIRS:=-path $(PINECILV2_VENDOR_BSP_ES8388_DIR) \ + -o -path $(PINECILV2_VENDOR_BSP_IMAGE_SENSOR_DIR) \ + -o -path $(PINECILV2_VENDOR_BSP_LVGL_DIR) \ + -o -path $(PINECILV2_VENDOR_BSP_MCU_LCD_DIR) \ + -o -path $(PINECILV2_VENDOR_BSP_BOARD_DIR) \ + -o -path $(PINECILV2_VENDOR_BSP_USB_DIR) + +SOURCE:=$(shell find $(SOURCE_THREADS_DIR) -type f -name '*.c') \ + $(shell find $(SOURCE_CORE_DIR) -type f -name '*.c') \ + $(shell find $(SOURCE_DRIVERS_DIR) -type f -name '*.c') \ + $(shell find $(DEVICE_BSP_DIR) -type d \( $(EXCLUDED_DIRS) \) -prune -false -o -type f -name '*.c') \ + $(shell find $(SOURCE_MIDDLEWARES_DIR) -type f -name '*.c') \ + $(SOURCE_BRIEFLZ_DIR)/depack.c -SOURCE := $(shell find $(SOURCE_THREADS_DIR) -type f -name '*.c') \ -$(shell find $(SOURCE_CORE_DIR) -type f -name '*.c') \ -$(shell find $(SOURCE_DRIVERS_DIR) -type f -name '*.c') \ -$(shell find $(DEVICE_BSP_DIR) -type d \( $(EXCLUDED_DIRS) \) -prune -false -o -type f -name '*.c')\ -$(shell find $(SOURCE_MIDDLEWARES_DIR) -type f -name '*.c') \ -$(SOURCE_BRIEFLZ_DIR)/depack.c # We exclude the USB-PD stack tests $(PD_DRIVER_TESTS_DIR) -SOURCE_CPP := $(shell find $(SOURCE_THREADS_DIR) -type f -name '*.cpp') \ -$(shell find $(SOURCE_CORE_DIR) -type f -name '*.cpp') \ -$(shell find $(SOURCE_DRIVERS_DIR) -path $(PD_DRIVER_TESTS_DIR) -prune -false -o -type f -name '*.cpp') \ -$(shell find $(DEVICE_BSP_DIR) -type d \( $(EXCLUDED_DIRS) \) -prune -false -o -type f -name '*.cpp') \ -$(shell find $(SOURCE_MIDDLEWARES_DIR) -type f -name '*.cpp') +SOURCE_CPP:=$(shell find $(SOURCE_THREADS_DIR) -type f -name '*.cpp') \ + $(shell find $(SOURCE_CORE_DIR) -type f -name '*.cpp') \ + $(shell find $(SOURCE_DRIVERS_DIR) -path $(PD_DRIVER_TESTS_DIR) -prune -false -o -type f -name '*.cpp') \ + $(shell find $(DEVICE_BSP_DIR) -type d \( $(EXCLUDED_DIRS) \) -prune -false -o -type f -name '*.cpp') \ + $(shell find $(SOURCE_MIDDLEWARES_DIR) -type f -name '*.cpp') -# code optimisation ------------------------------------------------------------ -OPTIM=-Os -fno-jump-tables -foptimize-strlen -faggressive-loop-optimizations -fdevirtualize-at-ltrans -fmerge-all-constants -fshort-wchar -flto -finline-small-functions -finline-functions -findirect-inlining -fdiagnostics-color -ffunction-sections -fdata-sections -fshort-enums -fsingle-precision-constant -fno-common -fno-math-errno -ffast-math -ffinite-math-only -fno-signed-zeros -fsingle-precision-constant +# Code optimisation ------------------------------------------------------------ +OPTIM=-Os \ + -fno-jump-tables \ + -foptimize-strlen \ + -faggressive-loop-optimizations \ + -fdevirtualize-at-ltrans \ + -fmerge-all-constants \ + -fshort-wchar \ + -flto \ + -finline-small-functions \ + -finline-functions \ + -findirect-inlining \ + -fdiagnostics-color \ + -ffunction-sections \ + -fdata-sections \ + -fshort-enums \ + -fsingle-precision-constant \ + -fno-common \ + -fno-math-errno \ + -ffast-math \ + -ffinite-math-only \ + -fno-signed-zeros \ + -fsingle-precision-constant -# global defines --------------------------------------------------------------- -GLOBAL_DEFINES += $(DEV_GLOBAL_DEFS) -D USE_RTOS_SYSTICK -D MODEL_$(model) -D VECT_TAB_OFFSET=$(bootldr_size)U -fshort-wchar +# Global defines --------------------------------------------------------------- +GLOBAL_DEFINES+=$(DEV_GLOBAL_DEFS) -D USE_RTOS_SYSTICK -D MODEL_$(model) -D VECT_TAB_OFFSET=$(bootldr_size)U -fshort-wchar ifdef swd_enable - GLOBAL_DEFINES += -DSWD_ENABLE +GLOBAL_DEFINES+=-DSWD_ENABLE endif - - -# libs ------------------------------------------------------------------------- +# Libs ------------------------------------------------------------------------- LIBS= -# ------------------------------------------------------------------------------ +# Compilers -------------------------------------------------------------------- COMPILER=gcc -# arm-none-eabi is the general ARM compiler, + +# arm-none-eabi is the general ARM compiler # riscv-none-embed is the riscv compiler # riscv-nuclei-elf is the nuclei tuned one for their cores ifeq ($(model),$(filter $(model),$(ALL_MINIWARE_MODELS) $(ALL_MHP30_MODELS))) @@ -475,175 +564,157 @@ ifeq ($(model),$(filter $(model),$(ALL_PINECIL_MODELS) $(ALL_PINECIL_V2_MODELS)) COMPILER_PREFIX=riscv-none-elf endif -# programs --------------------------------------------------------------------- +# Programs --------------------------------------------------------------------- CC=$(COMPILER_PREFIX)-gcc CPP=$(COMPILER_PREFIX)-g++ OBJCOPY=$(COMPILER_PREFIX)-objcopy SIZE=$(COMPILER_PREFIX)-size OBJDUMP=$(COMPILER_PREFIX)-objdump -# use gcc in assembler mode so we can use defines etc in assembly + +# Use gcc in assembler mode so we can use defines etc in assembly AS=$(COMPILER_PREFIX)-gcc -x assembler-with-cpp -# linker flags ----------------------------------------------------------------- -LINKER_FLAGS= -Wl,--gc-sections \ - -Wl,--wrap=malloc \ - -Wl,--wrap=free \ - -Wl,--undefined=vTaskSwitchContext \ - -Wl,--undefined=pxCurrentTCB \ - -Wl,--defsym=__FLASH_SIZE__=$(flash_size) \ - -Wl,--defsym=__BOOTLDR_SIZE__=$(bootldr_size) \ - -Wl,--print-memory-usage \ - --specs=nosys.specs \ - --specs=nano.specs \ - $(DEV_LDFLAGS) +# Linker flags ----------------------------------------------------------------- +LINKER_FLAGS=-Wl,--gc-sections \ + -Wl,--wrap=malloc \ + -Wl,--wrap=free \ + -Wl,--undefined=vTaskSwitchContext \ + -Wl,--undefined=pxCurrentTCB \ + -Wl,--defsym=__FLASH_SIZE__=$(flash_size) \ + -Wl,--defsym=__BOOTLDR_SIZE__=$(bootldr_size) \ + -Wl,--print-memory-usage \ + --specs=nosys.specs \ + --specs=nano.specs \ + $(DEV_LDFLAGS) -# compiler flags --------------------------------------------------------------- +# Compiler flags --------------------------------------------------------------- +CHECKOPTIONS=-Wtrigraphs \ + -Wuninitialized \ + -Wmissing-braces \ + -Wfloat-equal \ + -Wunreachable-code \ + -Wswitch-default \ + -Wreturn-type \ + -Wundef \ + -Wparentheses \ + -Wnonnull \ + -Winit-self \ + -Wmissing-include-dirs \ + -Wsequence-point \ + -Wswitch \ + -Wformat \ + -Wsign-compare \ + -Waddress \ + -Waggregate-return \ + -Wmissing-field-initializers \ + -Wshadow \ + -Wno-unused-parameter \ + -Wdouble-promotion +CHECKOPTIONS_C=$(CHECKOPTIONS) -Wbad-function-cast -CHECKOPTIONS=-Wtrigraphs \ - -Wuninitialized \ - -Wmissing-braces \ - -Wfloat-equal \ - -Wunreachable-code \ - -Wswitch-default \ - -Wreturn-type \ - -Wundef \ - -Wparentheses \ - -Wnonnull \ - -Winit-self \ - -Wmissing-include-dirs \ - -Wsequence-point \ - -Wswitch \ - -Wformat \ - -Wsign-compare \ - -Waddress \ - -Waggregate-return \ - -Wmissing-field-initializers \ - -Wshadow \ - -Wno-unused-parameter \ - -Wdouble-promotion - - +CXXFLAGS=$(DEV_CXXFLAGS) \ + $(CPUFLAGS) \ + $(INCLUDES) \ + $(GLOBAL_DEFINES) \ + -D${COMPILER} \ + -MMD \ + $(CHECKOPTIONS) \ + -std=c++17 \ + $(OPTIM) \ + -fno-rtti \ + -fno-exceptions \ + -fno-non-call-exceptions \ + -fno-use-cxa-atexit \ + -fno-strict-aliasing \ + -fno-threadsafe-statics \ + -T$(LDSCRIPT) +CFLAGS=$(DEV_CFLAGS) \ + $(CPUFLAGS) \ + $(INCLUDES) \ + $(CHECKOPTIONS_C) \ + $(GLOBAL_DEFINES) \ + -D${COMPILER} \ + -MMD \ + -std=gnu11 \ + $(OPTIM) \ + -T$(LDSCRIPT) \ + -c -CHECKOPTIONS_C= $(CHECKOPTIONS) -Wbad-function-cast - - -CXXFLAGS=$(DEV_CXXFLAGS) \ - $(CPUFLAGS) \ - $(INCLUDES) \ - $(GLOBAL_DEFINES) \ - -D${COMPILER} \ - -MMD \ - $(CHECKOPTIONS) \ - -std=c++17 \ - $(OPTIM) \ - -fno-rtti \ - -fno-exceptions \ - -fno-non-call-exceptions \ - -fno-use-cxa-atexit \ - -fno-strict-aliasing \ - -fno-threadsafe-statics \ - -T$(LDSCRIPT) - - -CFLAGS=$(DEV_CFLAGS) \ - $(CPUFLAGS) \ - $(INCLUDES) \ - $(CHECKOPTIONS_C) \ - $(GLOBAL_DEFINES) \ - -D${COMPILER} \ - -MMD \ - -std=gnu11 \ - $(OPTIM) \ - -T$(LDSCRIPT) \ - -c - - - -AFLAGS= $(CPUFLAGS) \ - $(DEV_AFLAGS) \ - $(GLOBAL_DEFINES) \ - $(OPTIM) \ - $(ASM_INC) \ - $(INCLUDES) - - - - -OBJS = $(SOURCE:.c=.o) -OBJS_CPP = $(SOURCE_CPP:.cpp=.o) -OBJS_S = $(S_SRCS:.S=.o) - +AFLAGS=$(CPUFLAGS) \ + $(DEV_AFLAGS) \ + $(GLOBAL_DEFINES) \ + $(OPTIM) \ + $(ASM_INC) \ + $(INCLUDES) +OBJS=$(SOURCE:.c=.o) +OBJS_CPP=$(SOURCE_CPP:.cpp=.o) +OBJS_S=$(S_SRCS:.S=.o) OUT_OBJS=$(addprefix $(OUTPUT_DIR)/,$(OBJS)) OUT_OBJS_CPP=$(addprefix $(OUTPUT_DIR)/,$(OBJS_CPP)) OUT_OBJS_S=$(addprefix $(OUTPUT_DIR)/,$(OBJS_S)) - -default : firmware-EN +default: firmware-EN firmware-%: $(HEXFILE_DIR)/$(model)_%.hex $(HEXFILE_DIR)/$(model)_%.bin $(HEXFILE_DIR)/$(model)_%.dfu @true +# Targets for binary files -# -# The rule to create the target directory -# - -# Create hexfile -%.hex : %.elf Makefile +%.hex: %.elf Makefile $(OBJCOPY) $< -O ihex $@ -%.bin : %.elf Makefile +%.bin: %.elf Makefile $(OBJCOPY) $< -O binary $@ $(SIZE) $< -%.dfu : %.bin Makefile +%.dfu: %.bin Makefile $(HOST_PYTHON) dfuse-pack.py -b $(DEVICE_DFU_ADDRESS)@0:$< -D $(DEVICE_DFU_VID_PID) $@ -$(HEXFILE_DIR)/$(model)_%.elf : \ - $(OUT_OBJS_S) $(OUT_OBJS) $(OUT_OBJS_CPP) \ - $(OUTPUT_DIR)/Core/Gen/Translation.%.o \ +$(HEXFILE_DIR)/$(model)_%.elf: \ + $(OUT_OBJS_S) $(OUT_OBJS) $(OUT_OBJS_CPP) \ + $(OUTPUT_DIR)/Core/Gen/Translation.%.o \ $(OUTPUT_DIR)/Core/LangSupport/lang_single.o \ Makefile $(LDSCRIPT) @test -d $(@D) || mkdir -p $(@D) @echo Linking $@ @$(CPP) $(CXXFLAGS) $(OUT_OBJS_S) $(OUT_OBJS) $(OUT_OBJS_CPP) \ - $(OUTPUT_DIR)/Core/Gen/Translation.$*.o \ + $(OUTPUT_DIR)/Core/Gen/Translation.$*.o \ $(OUTPUT_DIR)/Core/LangSupport/lang_single.o \ $(LIBS) $(LINKER_FLAGS) -o$@ -Wl,-Map=$@.map -$(HEXFILE_DIR)/$(model)_string_compressed_%.elf : \ - $(OUT_OBJS_S) $(OUT_OBJS) $(OUT_OBJS_CPP) \ +$(HEXFILE_DIR)/$(model)_string_compressed_%.elf: \ + $(OUT_OBJS_S) $(OUT_OBJS) $(OUT_OBJS_CPP) \ $(OUTPUT_DIR)/Core/Gen/Translation_brieflz.%.o \ - $(OUTPUT_DIR)/Core/LangSupport/lang_single.o \ + $(OUTPUT_DIR)/Core/LangSupport/lang_single.o \ Makefile $(LDSCRIPT) @test -d $(@D) || mkdir -p $(@D) @echo Linking $@ @$(CPP) $(CXXFLAGS) $(OUT_OBJS_S) $(OUT_OBJS) $(OUT_OBJS_CPP) \ $(OUTPUT_DIR)/Core/Gen/Translation_brieflz.$*.o \ - $(OUTPUT_DIR)/Core/LangSupport/lang_single.o \ + $(OUTPUT_DIR)/Core/LangSupport/lang_single.o \ $(LIBS) $(LINKER_FLAGS) -o$@ -Wl,-Map=$@.map -$(HEXFILE_DIR)/$(model)_font_compressed_%.elf : \ - $(OUT_OBJS_S) $(OUT_OBJS) $(OUT_OBJS_CPP) \ +$(HEXFILE_DIR)/$(model)_font_compressed_%.elf: \ + $(OUT_OBJS_S) $(OUT_OBJS) $(OUT_OBJS_CPP) \ $(OUTPUT_DIR)/Core/Gen/Translation_brieflz_font.%.o \ - $(OUTPUT_DIR)/Core/LangSupport/lang_single.o \ + $(OUTPUT_DIR)/Core/LangSupport/lang_single.o \ Makefile $(LDSCRIPT) @test -d $(@D) || mkdir -p $(@D) @echo Linking $@ @$(CPP) $(CXXFLAGS) $(OUT_OBJS_S) $(OUT_OBJS) $(OUT_OBJS_CPP) \ - $(OUTPUT_DIR)/Core/Gen/Translation_brieflz_font.$*.o \ - $(OUTPUT_DIR)/Core/LangSupport/lang_single.o \ + $(OUTPUT_DIR)/Core/Gen/Translation_brieflz_font.$*.o \ + $(OUTPUT_DIR)/Core/LangSupport/lang_single.o \ $(LIBS) $(LINKER_FLAGS) -o$@ -Wl,-Map=$@.map -$(OUT_OBJS): $(OUTPUT_DIR)/%.o : %.c Makefile +$(OUT_OBJS): $(OUTPUT_DIR)/%.o: %.c Makefile @test -d $(@D) || mkdir -p $(@D) @$(CC) -c $(CFLAGS) $< -o $@ -$(OUTPUT_DIR)/%.o : %.cpp Makefile +$(OUTPUT_DIR)/%.o: %.cpp Makefile @test -d $(@D) || mkdir -p $(@D) @$(CPP) -c $(CXXFLAGS) $< -o $@ @@ -653,17 +724,17 @@ $(OUT_OBJS_S): $(OUTPUT_DIR)/%.o: %.S Makefile @$(AS) -c $(AFLAGS) $< -o $@ Core/Gen/Translation.%.cpp $(OUTPUT_DIR)/Core/Gen/translation.files/%.pickle: ../Translations/translation_%.json \ - ../Translations/make_translation.py \ + ../Translations/make_translation.py \ ../Translations/translations_definitions.json \ - ../Translations/font_tables.py \ + ../Translations/font_tables.py \ Makefile ../Translations/wqy-bitmapsong/wenquanyi_9pt.bdf \ Core/Gen/macros.txt @test -d Core/Gen || mkdir -p Core/Gen @test -d $(OUTPUT_DIR)/Core/Gen/translation.files || mkdir -p $(OUTPUT_DIR)/Core/Gen/translation.files @echo 'Generating translations for language $*' @$(HOST_PYTHON) ../Translations/make_translation.py \ - --macros $(CURDIR)/Core/Gen/macros.txt \ - -o $(CURDIR)/Core/Gen/Translation.$*.cpp \ + --macros $(CURDIR)/Core/Gen/macros.txt \ + -o $(CURDIR)/Core/Gen/Translation.$*.cpp \ --output-pickled $(OUTPUT_DIR)/Core/Gen/translation.files/$*.pickle \ $* @@ -671,10 +742,7 @@ Core/Gen/macros.txt: Makefile @test -d $(CURDIR)/Core/Gen || mkdir -p $(CURDIR)/Core/Gen echo "#include " | $(CC) -dM -E $(CFLAGS) -MF $(CURDIR)/Core/Gen/macros.tmp - > $(CURDIR)/Core/Gen/macros.txt - -# -# The recipes to produce compressed translation data: -# +# The recipes to produce compressed translation data $(OUTPUT_DIR)/Core/Gen/translation.files/%.o: Core/Gen/Translation.%.cpp @test -d $(@D) || mkdir -p $(@D) @@ -695,64 +763,62 @@ Core/Gen/Translation_brieflz.%.cpp: $(OUTPUT_DIR)/Core/Gen/translation.files/%.o @test -d $(@D) || mkdir -p $(@D) @echo Generating BriefLZ compressed translation for $* @OBJCOPY=$(OBJCOPY) $(HOST_PYTHON) ../Translations/make_translation.py \ - --macros $(PWD)/Core/Gen/macros.txt \ + --macros $(PWD)/Core/Gen/macros.txt \ -o $(PWD)/Core/Gen/Translation_brieflz.$*.cpp \ --input-pickled $(OUTPUT_DIR)/Core/Gen/translation.files/$*.pickle \ - --strings-obj $(OUTPUT_DIR)/Core/Gen/translation.files/$*.o \ + --strings-obj $(OUTPUT_DIR)/Core/Gen/translation.files/$*.o \ $* Core/Gen/Translation_brieflz_font.%.cpp: $(OUTPUT_DIR)/Core/Gen/translation.files/%.pickle $(HOST_OUTPUT_DIR)/brieflz/libbrieflz.so Core/Gen/macros.txt @test -d $(@D) || mkdir -p $(@D) @echo Generating BriefLZ compressed translation for $* - @$(HOST_PYTHON) ../Translations/make_translation.py \ - --macros $(PWD)/Core/Gen/macros.txt \ + @$(HOST_PYTHON) ../Translations/make_translation.py \ + --macros $(PWD)/Core/Gen/macros.txt \ -o $(PWD)/Core/Gen/Translation_brieflz_font.$*.cpp \ --input-pickled $(OUTPUT_DIR)/Core/Gen/translation.files/$*.pickle \ --compress-font \ $* -# # The recipes to produce multi-language firmwares: -# # Usage: $(eval $(call multi_lang_rule,$(1)=group_code,$(2)=group_name,$(3)=lang_codes)) define multi_lang_rule -$(HEXFILE_DIR)/$(model)_multi_$(2).elf : \ - $(OUT_OBJS_S) $(OUT_OBJS) $(OUT_OBJS_CPP) \ +$(HEXFILE_DIR)/$(model)_multi_$(2).elf: \ + $(OUT_OBJS_S) $(OUT_OBJS) $(OUT_OBJS_CPP) \ $(OUTPUT_DIR)/Core/Gen/Translation_multi.$(1).o \ - $(OUTPUT_DIR)/Core/LangSupport/lang_multi.o \ + $(OUTPUT_DIR)/Core/LangSupport/lang_multi.o \ Makefile $(LDSCRIPT) @test -d $$(@D) || mkdir -p $$(@D) @echo Linking $$@ @$(CPP) $(CXXFLAGS) $(OUT_OBJS_S) $(OUT_OBJS) $(OUT_OBJS_CPP) \ - $(OUTPUT_DIR)/Core/Gen/Translation_multi.$(1).o \ - $(OUTPUT_DIR)/Core/LangSupport/lang_multi.o \ + $(OUTPUT_DIR)/Core/Gen/Translation_multi.$(1).o \ + $(OUTPUT_DIR)/Core/LangSupport/lang_multi.o \ $(LIBS) $(LINKER_FLAGS) -o$$@ -Wl,-Map=$$@.map -$(HEXFILE_DIR)/$(model)_multi_compressed_$(2).elf : \ - $(OUT_OBJS_S) $(OUT_OBJS) $(OUT_OBJS_CPP) \ +$(HEXFILE_DIR)/$(model)_multi_compressed_$(2).elf: \ + $(OUT_OBJS_S) $(OUT_OBJS) $(OUT_OBJS_CPP) \ $(OUTPUT_DIR)/Core/Gen/Translation_brieflz_multi.$(1).o \ - $(OUTPUT_DIR)/Core/LangSupport/lang_multi.o \ + $(OUTPUT_DIR)/Core/LangSupport/lang_multi.o \ Makefile $(LDSCRIPT) @test -d $$(@D) || mkdir -p $$(@D) @echo Linking $$@ - @$(CPP) $(CXXFLAGS) $(OUT_OBJS_S) $(OUT_OBJS) $(OUT_OBJS_CPP) \ + @$(CPP) $(CXXFLAGS) $(OUT_OBJS_S) $(OUT_OBJS) $(OUT_OBJS_CPP) \ $(OUTPUT_DIR)/Core/Gen/Translation_brieflz_multi.$(1).o \ - $(OUTPUT_DIR)/Core/LangSupport/lang_multi.o \ + $(OUTPUT_DIR)/Core/LangSupport/lang_multi.o \ $(LIBS) $(LINKER_FLAGS) -o$$@ -Wl,-Map=$$@.map Core/Gen/Translation_multi.$(1).cpp: $(patsubst %,../Translations/translation_%.json,$(3)) \ - ../Translations/make_translation.py \ + ../Translations/make_translation.py \ ../Translations/translations_definitions.json \ - ../Translations/font_tables.py \ + ../Translations/font_tables.py \ Makefile ../Translations/wqy-bitmapsong/wenquanyi_9pt.bdf \ Core/Gen/macros.txt @test -d Core/Gen || mkdir -p Core/Gen @test -d $(OUTPUT_DIR)/Core/Gen/translation.files || mkdir -p $(OUTPUT_DIR)/Core/Gen/translation.files @echo 'Generating translations for multi-language $(2)' - @$(HOST_PYTHON) ../Translations/make_translation.py \ - --macros $(PWD)/Core/Gen/macros.txt \ + @$(HOST_PYTHON) ../Translations/make_translation.py \ + --macros $(PWD)/Core/Gen/macros.txt \ -o $(PWD)/Core/Gen/Translation_multi.$(1).cpp \ --output-pickled $(OUTPUT_DIR)/Core/Gen/translation.files/multi.$(1).pickle \ $(3) @@ -763,19 +829,19 @@ Core/Gen/Translation_brieflz_multi.$(1).cpp: $(OUTPUT_DIR)/Core/Gen/translation. @test -d $$(@D) || mkdir -p $$(@D) @echo Generating BriefLZ compressed translation for multi-language $(2) @OBJCOPY=$(OBJCOPY) $(HOST_PYTHON) ../Translations/make_translation.py \ - --macros $(PWD)/Core/Gen/macros.txt \ + --macros $(PWD)/Core/Gen/macros.txt \ -o $(PWD)/Core/Gen/Translation_brieflz_multi.$(1).cpp \ --input-pickled $(OUTPUT_DIR)/Core/Gen/translation.files/multi.$(1).pickle \ - --strings-obj $(OUTPUT_DIR)/Core/Gen/translation.files/multi.$(1).o \ + --strings-obj $(OUTPUT_DIR)/Core/Gen/translation.files/multi.$(1).o \ --compress-font \ $(3) endef # multi_lang_rule - # Add multi-language firmware rules: $(foreach group_code,$(LANGUAGE_GROUPS),$(eval $(call multi_lang_rule,$(group_code),$(LANGUAGE_GROUP_$(group_code)_NAME),$(LANGUAGE_GROUP_$(group_code)_LANGS)))) +# Clean up targets clean: rm -Rf Core/Gen @@ -786,28 +852,55 @@ clean: clean-all: clean rm -Rf $(HEXFILE_DIR) -style: - @for src in $(ALL_SOURCE) $(ALL_INCLUDES); do \ - echo "Formatting $$src..." ; \ - clang-format -i "$$src" ; \ - done - @echo "Done" +# Code style checks using clang-format -check-style: - @for src in $(ALL_SOURCE) $(ALL_INCLUDES) ; do \ +# Show only list of affected files for debug purposes +check-style-list: + @ret=0; for src in $(ALL_SOURCE) $(ALL_INCLUDES) ; do \ var=`clang-format "$$src" | diff "$$src" - | wc -l` ; \ if [ $$var -ne 0 ] ; then \ - echo "$$src does not respect the coding style (diff: $$var lines)" ; \ - clang-format "$$src" | diff "$$src" -; \ - exit 1 ; \ + echo "$$src" ; \ + ret=1; test -n "$(STOP)" && break; \ fi ; \ - done - @echo "Style check passed" - -.PHONY: style all clean default clean-all + grep -H -n -e "^ .*if .*)$$" -e "^ .*else$$" -e "^ .* do$$" -e "^ .*while .*)$$" -e "^ .*for .*)$$" "$$src" | grep -v -e "^.*//" -e "^.*:.*: .*if ((.*[^)])$$" | sed 's,^,\n\n,; s,: ,:1: error: probably missing { or } for conditional or loop block:\n>>>,;' | grep -q -e "^.*$$" ; \ + if [ "$$?" -ne 1 ]; then \ + echo "$$src" ; \ + ret=1; test -n "$(STOP)" && break; \ + fi ; \ + done ; \ + if [ $$ret -eq 0 ] ; then \ + echo "Style check: PASS" && exit 0 ; \ + else \ + echo "Style check: FAIL!" && echo "Please, check the log above for the details." && exit 1 ; \ + fi ; + +# Show output in gcc-like error compatible format for IDEs/editors; call `make check-style STOP=1` to exit after first failed file +# NOTICE: +# - clang-format has neat option for { } in condition blocks but it's available only since version 15: +# * https://clang.llvm.org/docs/ClangFormatStyleOptions.html#insertbraces +# - grep block in the middle used to trace missing { and } for if/else BUT IT'S VERY SPECULATIVE, very-very hacky & dirty +check-style: + @ret=0; for src in $(ALL_SOURCE) $(ALL_INCLUDES) ; do \ + var=`clang-format "$$src" | diff "$$src" - | wc -l` ; \ + if [ $$var -ne 0 ] ; then \ + clang-format "$$src" | diff "$$src" - | sed 's/^---/-------------------------------------------------------------------------------/; s/^< /--- /; s/^> /+++ /; /^[0-9].*/ s/[acd,].*$$/ERROR1/; /^[0-9].*/ s,^,\n\n\n\n'"$$src"':,; /ERROR1$$/ s,ERROR1$$,:1: error: clang-format code style mismatch:,; ' ; \ + ret=1; test -n "$(STOP)" && break; \ + fi ; \ + grep -H -n -e "^ .*if .*)$$" -e "^ .*else$$" -e "^ .* do$$" -e "^ .*while .*)$$" -e "^ .*for .*)$$" "$$src" | grep -v -e "^.*//" -e "^.*:.*: .*if ((.*[^)])$$" | sed 's,^,\n\n,; s,: ,:1: error: probably missing { or } for conditional or loop block:\n>>>,;' | grep -e "^.*$$" ; \ + if [ "$$?" -ne 1 ]; then \ + ret=1; test -n "$(STOP)" && break; \ + fi ; \ + done ; \ + if [ $$ret -eq 0 ] ; then \ + echo "Style check: PASS" && exit 0 ; \ + else \ + echo "Style check: FAIL!" && echo "Please, check the log above for the details." && exit 1 ; \ + fi ; + +.PHONY: check-style-list check-style all clean default clean-all .SECONDARY: -# pull in dependency info for *existing* .o files +# Pull in dependency info for *existing* .o files -include $(OUT_OBJS:.o=.d) -include $(OUT_OBJS_CPP:.o=.d) -include $(OUTPUT_DIR)/Core/Gen/Translation.*.d