diff --git a/.github/workflows/build-firmware.yaml b/.github/workflows/build-firmware.yaml index 2b9fe996cd..82a562fbcf 100644 --- a/.github/workflows/build-firmware.yaml +++ b/.github/workflows/build-firmware.yaml @@ -20,40 +20,47 @@ jobs: - build-target: frankenso efi-cpu: ARCH_STM32F4 efi-board: st_stm32f4 + target-extra-params: -DSHORT_BOARD_NAME=fra - build-target: frankenso-pal efi-cpu: ARCH_STM32F4 efi-board: st_stm32f4 - target-extra-params: -DHAL_TRIGGER_USE_PAL=TRUE -DEFI_ICU_INPUTS=FALSE -DEFI_VEHICLE_SPEED=FALSE -DEFI_LOGIC_ANALYZER=FALSE + target-extra-params: -DSHORT_BOARD_NAME=fra -DHAL_TRIGGER_USE_PAL=TRUE -DEFI_ICU_INPUTS=FALSE -DEFI_VEHICLE_SPEED=FALSE -DEFI_LOGIC_ANALYZER=FALSE - build-target: mre-f4 efi-cpu: ARCH_STM32F4 efi-board: microrusefi + target-extra-params: -DSHORT_BOARD_NAME=mre - build-target: mre-f7 efi-cpu: ARCH_STM32F7 efi-board: microrusefi + target-extra-params: -DSHORT_BOARD_NAME=mre - build-target: prometheus-405 efi-cpu: ARCH_STM32F4 efi-board: prometheus/f405 + target-extra-params: -DSHORT_BOARD_NAME=pth - build-target: prometheus-469 efi-cpu: ARCH_STM32F4 efi-board: prometheus/f469 + target-extra-params: -DSHORT_BOARD_NAME=pth - build-target: proteus-f4 efi-cpu: ARCH_STM32F4 efi-board: proteus + target-extra-params: -DSHORT_BOARD_NAME=pro - build-target: proteus-f7 efi-cpu: ARCH_STM32F7 efi-board: proteus + target-extra-params: -DSHORT_BOARD_NAME=pro - build-target: kinetis efi-cpu: kinetis efi-board: kinetis - target-extra-params: -DCPU_MKE16F512VLH16 -DCPU_MKE16F512VLH16_cm4 -D__USE_CMSI -DDEFAULT_ENGINE_TYPE=MINIMAL_PINS + target-extra-params: -DSHORT_BOARD_NAME=kin -DCPU_MKE16F512VLH16 -DCPU_MKE16F512VLH16_cm4 -D__USE_CMSI -DDEFAULT_ENGINE_TYPE=MINIMAL_PINS extra-options: USE_FATFS=no USE_BOOTLOADER=no # Debug vs. release configuration diff --git a/firmware/config/boards/kinetis/config/gen_config.sh b/firmware/config/boards/kinetis/config/gen_config.sh index 9832963e1c..61d0ce4b15 100644 --- a/firmware/config/boards/kinetis/config/gen_config.sh +++ b/firmware/config/boards/kinetis/config/gen_config.sh @@ -33,6 +33,7 @@ java \ -c_defines config/boards/kinetis/config/controllers/algo/rusefi_generated.h \ -c_destination config/boards/kinetis/config/controllers/algo/engine_configuration_generated_structures.h \ -signature tunerstudio/signature_kin.txt \ + -signature_destination controllers/generated/signature_kin.h \ -prepend config/boards/kinetis/config/rusefi_config_kinetis.txt \ -prepend config/boards/kinetis/config/tunerstudio/kinetis_prefix.txt diff --git a/firmware/console/binary/signature.cpp b/firmware/console/binary/signature.cpp new file mode 100644 index 0000000000..a8fa9776d9 --- /dev/null +++ b/firmware/console/binary/signature.cpp @@ -0,0 +1,37 @@ +/** + * @file signature.cpp + * @brief A special file which is recompiled every time the .ini file changes. + * + * This is a minimalistic fast-compiling cpp-file. Any additional massive includes are not welcomed. + * + * @date Jul 2, 2020 + * @author andreika (c) 2020 + */ + +#include "efilib.h" +#include "signature.h" + +// We take these precautions to avoid redefinition of signature in generated .h files +#undef SIGNATURE_BOARD +#undef SIGNATURE_DATE +#undef SIGNATURE_HASH +#undef TS_SIGNATURE + +#ifndef SHORT_BOARD_NAME +#define SHORT_BOARD_NAME all +#endif /* SHORT_BOARD_NAME */ + +#pragma message ("SHORT_BOARD_NAME: " QUOTE(SHORT_BOARD_NAME)) + +#define SIGNATURE_NAME signature_ +#define SIGNATURE_EXT .h + +#define SIGNATURE_H QUOTE(SIGNATURE_NAME SHORT_BOARD_NAME SIGNATURE_EXT) + +#include SIGNATURE_H + +#pragma message ("TS_SIGNATURE: " TS_SIGNATURE) + +const char *getTsSignature() { + return TS_SIGNATURE; +} diff --git a/firmware/console/binary/signature.h b/firmware/console/binary/signature.h new file mode 100644 index 0000000000..f5826fece8 --- /dev/null +++ b/firmware/console/binary/signature.h @@ -0,0 +1,12 @@ +/** + * @file signature.h + * @brief A special file which is recompiled every time the .ini file changes. + * + * @date Jul 2, 2020 + * @author andreika (c) 2020 + */ + + +#pragma once + +const char *getTsSignature(); diff --git a/firmware/console/binary/tunerstudio.cpp b/firmware/console/binary/tunerstudio.cpp index cd0b9e55bb..8841fca1c3 100644 --- a/firmware/console/binary/tunerstudio.cpp +++ b/firmware/console/binary/tunerstudio.cpp @@ -87,6 +87,8 @@ #include "mmc_card.h" #include "perf_trace.h" +#include "signature.h" + #if EFI_SIMULATOR #include "rusEfiFunctionalTest.h" #endif /* EFI_SIMULATOR */ @@ -636,7 +638,8 @@ void handleQueryCommand(ts_channel_s *tsChannel, ts_response_format_e mode) { scheduleMsg(&tsLogger, "got S/H (queryCommand) mode=%d", mode); printTsStats(); #endif - sr5SendResponse(tsChannel, mode, (const uint8_t *) TS_SIGNATURE, strlen(TS_SIGNATURE) + 1); + const char *signature = getTsSignature(); + sr5SendResponse(tsChannel, mode, (const uint8_t *)signature, strlen(signature) + 1); } /** diff --git a/firmware/console/binary/tunerstudio.mk b/firmware/console/binary/tunerstudio.mk index 0126d71c85..eae9121f0b 100644 --- a/firmware/console/binary/tunerstudio.mk +++ b/firmware/console/binary/tunerstudio.mk @@ -1,4 +1,5 @@ TUNERSTUDIO_SRC_CPP = $(PROJECT_DIR)/console/binary/tunerstudio_io.cpp \ $(PROJECT_DIR)/console/binary/tunerstudio.cpp \ - $(PROJECT_DIR)/console/binary/bluetooth.cpp + $(PROJECT_DIR)/console/binary/bluetooth.cpp \ + $(PROJECT_DIR)/console/binary/signature.cpp diff --git a/firmware/controllers/generated/signature_all.h b/firmware/controllers/generated/signature_all.h new file mode 100644 index 0000000000..f09a8e8a73 --- /dev/null +++ b/firmware/controllers/generated/signature_all.h @@ -0,0 +1,8 @@ +// +// was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt +// + +#define SIGNATURE_BOARD all +#define SIGNATURE_DATE 2020.07.02 +#define SIGNATURE_HASH 1873757300 +#define TS_SIGNATURE "rusEFI 2020.07.02.all.1873757300" diff --git a/firmware/controllers/generated/signature_fra.h b/firmware/controllers/generated/signature_fra.h new file mode 100644 index 0000000000..f3865b51b9 --- /dev/null +++ b/firmware/controllers/generated/signature_fra.h @@ -0,0 +1,8 @@ +// +// was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt +// + +#define SIGNATURE_BOARD fra +#define SIGNATURE_DATE 2020.07.02 +#define SIGNATURE_HASH 1557139500 +#define TS_SIGNATURE "rusEFI 2020.07.02.fra.1557139500" diff --git a/firmware/controllers/generated/signature_kin.h b/firmware/controllers/generated/signature_kin.h new file mode 100644 index 0000000000..31285c0295 --- /dev/null +++ b/firmware/controllers/generated/signature_kin.h @@ -0,0 +1,8 @@ +// +// was generated automatically by rusEfi tool ConfigDefinition.jar based on kinetis_gen_config.bat integration/rusefi_config.txt +// + +#define SIGNATURE_BOARD kin +#define SIGNATURE_DATE 2020.07.02 +#define SIGNATURE_HASH 1520709400 +#define TS_SIGNATURE "rusEFI 2020.07.02.kin.1520709400" diff --git a/firmware/controllers/generated/signature_mre.h b/firmware/controllers/generated/signature_mre.h new file mode 100644 index 0000000000..e94e7276b8 --- /dev/null +++ b/firmware/controllers/generated/signature_mre.h @@ -0,0 +1,8 @@ +// +// was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt +// + +#define SIGNATURE_BOARD mre +#define SIGNATURE_DATE 2020.07.02 +#define SIGNATURE_HASH 1235949600 +#define TS_SIGNATURE "rusEFI 2020.07.02.mre.1235949600" diff --git a/firmware/controllers/generated/signature_pro.h b/firmware/controllers/generated/signature_pro.h new file mode 100644 index 0000000000..7b5737c376 --- /dev/null +++ b/firmware/controllers/generated/signature_pro.h @@ -0,0 +1,8 @@ +// +// was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt +// + +#define SIGNATURE_BOARD pro +#define SIGNATURE_DATE 2020.07.02 +#define SIGNATURE_HASH 1175518100 +#define TS_SIGNATURE "rusEFI 2020.07.02.pro.1175518100" diff --git a/firmware/controllers/generated/signature_pth.h b/firmware/controllers/generated/signature_pth.h new file mode 100644 index 0000000000..3b32ba954e --- /dev/null +++ b/firmware/controllers/generated/signature_pth.h @@ -0,0 +1,8 @@ +// +// was generated automatically by rusEfi tool ConfigDefinition.jar based on gen_config.sh integration/rusefi_config.txt +// + +#define SIGNATURE_BOARD pth +#define SIGNATURE_DATE 2020.07.02 +#define SIGNATURE_HASH 1865328700 +#define TS_SIGNATURE "rusEFI 2020.07.02.pth.1865328700" diff --git a/firmware/gen_config.sh b/firmware/gen_config.sh index 30c8193122..79a04b0b48 100644 --- a/firmware/gen_config.sh +++ b/firmware/gen_config.sh @@ -33,6 +33,7 @@ java -DSystemOut.name=gen_config \ -c_fsio_strings controllers/generated/fsio_strings.def \ -java_destination ../java_console/models/src/com/rusefi/config/generated/Fields.java \ -signature tunerstudio/signature_all.txt \ + -signature_destination controllers/generated/signature_all.h \ -romraider_destination ../java_console/rusefi.xml [ $? -eq 0 ] || { echo "ERROR generating default"; exit 1; } diff --git a/firmware/gen_config_board.sh b/firmware/gen_config_board.sh index 8c7d631ea5..23321aa300 100644 --- a/firmware/gen_config_board.sh +++ b/firmware/gen_config_board.sh @@ -39,6 +39,7 @@ java -DSystemOut.name=gen_config_board \ -firing_order controllers/algo/firing_order.h \ -ts_output_name rusefi_${BOARDNAME}.ini \ -signature tunerstudio/signature_${SHORT_BOARDNAME}.txt \ + -signature_destination controllers/generated/signature_${SHORT_BOARDNAME}.h \ -prepend tunerstudio/${BOARDNAME}_prefix.txt \ -prepend config/boards/${BOARDNAME}/prepend.txt diff --git a/firmware/gen_signature.sh b/firmware/gen_signature.sh index 63c75a0938..e25a33cca3 100644 --- a/firmware/gen_signature.sh +++ b/firmware/gen_signature.sh @@ -15,4 +15,6 @@ nanosec="1$nanosec" hash=$(($nanosec % 2147483648)) echo "#define SIGNATURE_HASH $hash" >> tunerstudio/signature_${SHORT_BOARDNAME}.txt +echo "#define TS_SIGNATURE \"rusEFI @@SIGNATURE_DATE@@.@@SIGNATURE_BOARD@@.@@SIGNATURE_HASH@@\"" >> tunerstudio/signature_${SHORT_BOARDNAME}.txt + exit 0 diff --git a/firmware/integration/rusefi_config.txt b/firmware/integration/rusefi_config.txt index 4494b49640..dec9058d75 100644 --- a/firmware/integration/rusefi_config.txt +++ b/firmware/integration/rusefi_config.txt @@ -22,7 +22,6 @@ ! each field is declared as ! type name;comment -#define TS_SIGNATURE "rusEFI @@SIGNATURE_DATE@@.@@SIGNATURE_BOARD@@.@@SIGNATURE_HASH@@" ! ! this is here so that rusEfi console can access it, too diff --git a/firmware/util/efilib.h b/firmware/util/efilib.h index 06b195bf4f..a546f64898 100644 --- a/firmware/util/efilib.h +++ b/firmware/util/efilib.h @@ -33,6 +33,9 @@ #define ERROR_CODE 311223344 +#define Q(x) #x +#define QUOTE(x) Q(x) + #ifdef __cplusplus extern "C" { diff --git a/java_tools/configuration_definition/src/com/rusefi/ConfigDefinition.java b/java_tools/configuration_definition/src/com/rusefi/ConfigDefinition.java index 61938cce2b..8df02608be 100644 --- a/java_tools/configuration_definition/src/com/rusefi/ConfigDefinition.java +++ b/java_tools/configuration_definition/src/com/rusefi/ConfigDefinition.java @@ -45,6 +45,7 @@ public class ConfigDefinition { private static final String KEY_FIRING = "-firing_order"; public static final String KEY_PREPEND = "-prepend"; public static final String KEY_SIGNATURE = "-signature"; + public static final String KEY_SIGNATURE_DESTINATION = "-signature_destination"; public static final String KEY_CACHE = "-cache"; public static final String KEY_CACHE_ZIP_FILE = "-cache_zip_file"; private static final String KEY_SKIP = "-skip"; @@ -96,6 +97,8 @@ public class ConfigDefinition { String firingEnumFileName = null; String cachePath = null; String cacheZipFile = null; + String signatureDestination = null; + String signaturePrependFile = null; CHeaderConsumer.withC_Defines = true; // used to update .ini files @@ -141,8 +144,11 @@ public class ConfigDefinition { prependFiles.add(args[i + 1]); inputFiles.add(args[i + 1]); } else if (key.equals(KEY_SIGNATURE)) { + signaturePrependFile = args[i + 1]; prependFiles.add(args[i + 1]); // don't add this file to the 'inputFiles' + } else if (key.equals(KEY_SIGNATURE_DESTINATION)) { + signatureDestination = args[i + 1]; } else if (key.equals(KEY_CACHE)) { cachePath = args[i + 1]; } else if (key.equals(KEY_CACHE_ZIP_FILE)) { @@ -193,7 +199,7 @@ public class ConfigDefinition { } for (String prependFile : prependFiles) - readPrependValues(prependFile); + readPrependValues(VariableRegistry.INSTANCE, prependFile); BufferedReader definitionReader = new BufferedReader(new InputStreamReader(new FileInputStream(definitionInputFile), IoUtils.CHARSET.name())); ReaderState state = new ReaderState(); @@ -202,6 +208,10 @@ public class ConfigDefinition { if (tsPath != null && needToUpdateTsFiles) { CharArrayWriter tsWriter = new CharArrayWriter(); destinations.add(new TSProjectConsumer(tsWriter, tsPath, state)); + + VariableRegistry tmpRegistry = new VariableRegistry(); + readPrependValues(tmpRegistry, signaturePrependFile); + destinations.add(new SignatureConsumer(signatureDestination, tmpRegistry)); } if (needToUpdateOtherFiles) { if (destCHeaderFileName != null) { @@ -258,7 +268,7 @@ public class ConfigDefinition { return getMd5(content); } - private static void readPrependValues(String prependFile) throws IOException { + private static void readPrependValues(VariableRegistry registry, String prependFile) throws IOException { BufferedReader definitionReader = new BufferedReader(new FileReader(prependFile)); String line; while ((line = definitionReader.readLine()) != null) { @@ -269,7 +279,7 @@ public class ConfigDefinition { if (ReaderState.isEmptyDefinitionLine(line)) continue; if (startsWithToken(line, ReaderState.DEFINE)) { - processDefine(line.substring(ReaderState.DEFINE.length()).trim()); + processDefine(registry, line.substring(ReaderState.DEFINE.length()).trim()); } } @@ -328,7 +338,7 @@ public class ConfigDefinition { return Integer.parseInt(s); } - static void processDefine(String line) { + static void processDefine(VariableRegistry registry, String line) { int index = line.indexOf(' '); String name; if (index == -1) { @@ -340,9 +350,9 @@ public class ConfigDefinition { } if (VariableRegistry.isNumeric(line)) { Integer v = Integer.valueOf(line); - VariableRegistry.INSTANCE.register(name, v); + registry.register(name, v); } else { - VariableRegistry.INSTANCE.register(name, line); + registry.register(name, line); } } diff --git a/java_tools/configuration_definition/src/com/rusefi/ReaderState.java b/java_tools/configuration_definition/src/com/rusefi/ReaderState.java index 83f649f42f..9c8d032548 100644 --- a/java_tools/configuration_definition/src/com/rusefi/ReaderState.java +++ b/java_tools/configuration_definition/src/com/rusefi/ReaderState.java @@ -167,7 +167,7 @@ public class ReaderState { * for example * #define CLT_CURVE_SIZE 16 */ - ConfigDefinition.processDefine(line.substring(DEFINE.length()).trim()); + ConfigDefinition.processDefine(VariableRegistry.INSTANCE, line.substring(DEFINE.length()).trim()); } else { if (stack.isEmpty()) throw new IllegalStateException("Expected to be within structure at line " + lineIndex + ": " + line); diff --git a/java_tools/configuration_definition/src/com/rusefi/VariableRegistry.java b/java_tools/configuration_definition/src/com/rusefi/VariableRegistry.java index 305ee8f263..ff5cc49ebc 100644 --- a/java_tools/configuration_definition/src/com/rusefi/VariableRegistry.java +++ b/java_tools/configuration_definition/src/com/rusefi/VariableRegistry.java @@ -27,7 +27,7 @@ public class VariableRegistry { private final Map cAllDefinitions = new TreeMap<>(String.CASE_INSENSITIVE_ORDER); private final Map javaDefinitions = new TreeMap<>(String.CASE_INSENSITIVE_ORDER); - private VariableRegistry() { + public VariableRegistry() { } /** diff --git a/java_tools/configuration_definition/src/com/rusefi/output/SignatureConsumer.java b/java_tools/configuration_definition/src/com/rusefi/output/SignatureConsumer.java new file mode 100644 index 0000000000..e147fa428a --- /dev/null +++ b/java_tools/configuration_definition/src/com/rusefi/output/SignatureConsumer.java @@ -0,0 +1,36 @@ +package com.rusefi.output; + +import com.rusefi.*; +import com.rusefi.util.LazyFile; +import com.rusefi.util.SystemOut; + +import java.io.IOException; + +import static com.rusefi.ConfigDefinition.EOL; + +/** + * Configuration consumer which writes Signature header file + */ +public class SignatureConsumer implements ConfigurationConsumer { + private final String destHeader; + VariableRegistry registry; + + public SignatureConsumer(String destHeader, VariableRegistry vregistry) { + SystemOut.println("Writing Signature header to " + destHeader); + this.destHeader = destHeader; + this.registry = vregistry; + } + + @Override + public void startFile() { + } + + @Override + public void handleEndStruct(ConfigStructure structure) throws IOException { + registry.writeDefinesToFile(destHeader); + } + + @Override + public void endFile() throws IOException { + } +} diff --git a/unit_tests/tests/test_idle_controller.cpp b/unit_tests/tests/test_idle_controller.cpp index 7fecb5ba1d..e032b6e343 100644 --- a/unit_tests/tests/test_idle_controller.cpp +++ b/unit_tests/tests/test_idle_controller.cpp @@ -19,9 +19,6 @@ extern IdleController idleControllerInstance; extern int timeNowUs; -#define Q(x) #x -#define QUOTE(x) Q(x) - TEST(idle, fsioPidParameters) { WITH_ENGINE_TEST_HELPER(MIATA_NA6_MAP);