diff --git a/firmware/integration/rusefi_config.txt b/firmware/integration/rusefi_config.txt index c3ffefe410..b66ac5d9cb 100644 --- a/firmware/integration/rusefi_config.txt +++ b/firmware/integration/rusefi_config.txt @@ -124,26 +124,24 @@ struct_no_prefix engine_configuration_s #define MAF_DECODING_COUNT 256 -! please note that 1024 here is 4 * FUEL_RPM_COUNT * FUEL_LOAD_COUNT -custom fuel_table_t 1024 array, F32, @OFFSET@, [@@FUEL_RPM_COUNT@@x@@FUEL_LOAD_COUNT@@],"ms", 1, 0, 0.0, 500.0, 2 -custom ve_table_t 1024 array, F32, @OFFSET@, [@@FUEL_RPM_COUNT@@x@@FUEL_LOAD_COUNT@@],"%", 1, 0, 0, 999.0, 2 -custom afr_table_t 256 array, U08, @OFFSET@, [@@FUEL_RPM_COUNT@@x@@FUEL_LOAD_COUNT@@],"deg", 0.1, 0, 0, 25.0, 1 +custom fuel_table_t 4*@@FUEL_RPM_COUNT@@x@@FUEL_LOAD_COUNT@@ array, F32, @OFFSET@, [@@FUEL_RPM_COUNT@@x@@FUEL_LOAD_COUNT@@],"ms", 1, 0, 0.0, 500.0, 2 +custom ve_table_t 4*@@FUEL_RPM_COUNT@@x@@FUEL_LOAD_COUNT@@ array, F32, @OFFSET@, [@@FUEL_RPM_COUNT@@x@@FUEL_LOAD_COUNT@@],"%", 1, 0, 0, 999.0, 2 +custom afr_table_t @@FUEL_RPM_COUNT@@x@@FUEL_LOAD_COUNT@@ array, U08, @OFFSET@, [@@FUEL_RPM_COUNT@@x@@FUEL_LOAD_COUNT@@],"deg", 0.1, 0, 0, 25.0, 1 -custom fsio_table_8x8_u8t 64 array, U08, @OFFSET@, [@@FSIO_TABLE_8@@x@@FSIO_TABLE_8@@],"value", 1, 0, 0.0, 255.0, 0 -custom fsio_table_8x8_f32t 256 array, F32, @OFFSET@, [@@FSIO_TABLE_8@@x@@FSIO_TABLE_8@@],"value", 1, 0, 0.0, 30000.0, 2 -custom tps_tps_table_t 256 array, F32, @OFFSET@, [@@TPS_TPS_ACCEL_TABLE@@x@@TPS_TPS_ACCEL_TABLE@@],"value", 1, 0, 0.0, 30000.0, 2 +custom fsio_table_8x8_u8t @@FSIO_TABLE_8@@x@@FSIO_TABLE_8@@ array, U08, @OFFSET@, [@@FSIO_TABLE_8@@x@@FSIO_TABLE_8@@],"value", 1, 0, 0.0, 255.0, 0 +custom fsio_table_8x8_f32t 4*@@FSIO_TABLE_8@@x@@FSIO_TABLE_8@@ array, F32, @OFFSET@, [@@FSIO_TABLE_8@@x@@FSIO_TABLE_8@@],"value", 1, 0, 0.0, 30000.0, 2 +custom tps_tps_table_t 4*@@TPS_TPS_ACCEL_TABLE@@x@@TPS_TPS_ACCEL_TABLE@@ array, F32, @OFFSET@, [@@TPS_TPS_ACCEL_TABLE@@x@@TPS_TPS_ACCEL_TABLE@@],"value", 1, 0, 0.0, 30000.0, 2 ! todo support table size multiplocation -custom baro_corr_table_t 64 array, F32, @OFFSET@, [@@BARO_CORR_SIZE@@x@@BARO_CORR_SIZE@@],"%", 1, 0, 0, 999.0, 2 +custom baro_corr_table_t 4*@@BARO_CORR_SIZE@@x@@BARO_CORR_SIZE@@ array, F32, @OFFSET@, [@@BARO_CORR_SIZE@@x@@BARO_CORR_SIZE@@],"%", 1, 0, 0, 999.0, 2 -! please note that 1024 here is 4 * IGN_LOAD_COUNT * IGN_RPM_COUNT -custom ignition_table_t 1024 array, F32, @OFFSET@, [@@IGN_RPM_COUNT@@x@@IGN_LOAD_COUNT@@],"deg", 1, 0, -20, 90, 2 -custom ignition_tps_table_t 512 array, S16, @OFFSET@, [@@IGN_RPM_COUNT@@x@@IGN_TPS_COUNT@@],"deg", 0.01, 0, -20, 90, 2 +custom ignition_table_t 4*@@IGN_RPM_COUNT@@x@@IGN_LOAD_COUNT@@ array, F32, @OFFSET@, [@@IGN_RPM_COUNT@@x@@IGN_LOAD_COUNT@@],"deg", 1, 0, -20, 90, 2 +custom ignition_tps_table_t 2*@@IGN_RPM_COUNT@@x@@IGN_TPS_COUNT@@ array, S16, @OFFSET@, [@@IGN_RPM_COUNT@@x@@IGN_TPS_COUNT@@],"deg", 0.01, 0, -20, 90, 2 -custom angle_table_t 1024 array, F32, @OFFSET@, [@@IGN_RPM_COUNT@@x@@IGN_LOAD_COUNT@@],"deg", 1, 0, -720, 720, 2 -custom pedal_to_tps_t 64 array, U08, @OFFSET@, [@@PEDAL_TO_TPS_SIZE@@x@@PEDAL_TO_TPS_SIZE@@],"deg", 1, 0, -720, 720, 2 +custom angle_table_t 4*@@IGN_RPM_COUNT@@x@@IGN_LOAD_COUNT@@ array, F32, @OFFSET@, [@@IGN_RPM_COUNT@@x@@IGN_LOAD_COUNT@@],"deg", 1, 0, -720, 720, 2 +custom pedal_to_tps_t @@PEDAL_TO_TPS_SIZE@@x@@PEDAL_TO_TPS_SIZE@@ array, U08, @OFFSET@, [@@PEDAL_TO_TPS_SIZE@@x@@PEDAL_TO_TPS_SIZE@@],"deg", 1, 0, -720, 720, 2 struct pid_s ! explicitly document which use-cases need 10e-7 parameters diff --git a/java_tools/ConfigDefinition.jar b/java_tools/ConfigDefinition.jar index bf5ee06837..762b2d2c01 100644 Binary files a/java_tools/ConfigDefinition.jar and b/java_tools/ConfigDefinition.jar differ diff --git a/java_tools/configuration_definition/src/com/rusefi/ReaderState.java b/java_tools/configuration_definition/src/com/rusefi/ReaderState.java index 271dfbb46a..929db38d4e 100644 --- a/java_tools/configuration_definition/src/com/rusefi/ReaderState.java +++ b/java_tools/configuration_definition/src/com/rusefi/ReaderState.java @@ -61,14 +61,33 @@ public class ReaderState { String tunerStudioLine = line.substring(index).trim(); tunerStudioLine = VariableRegistry.INSTANCE.applyVariables(tunerStudioLine); - int size; + int size = parseSize(customSize, line); + state.tsCustomSize.put(name, size); + state.tsCustomLine.put(name, tunerStudioLine); + } + + public static int parseSize(String customSize, String line) { + customSize = VariableRegistry.INSTANCE.applyVariables(customSize); + customSize = customSize.replaceAll("x", "*"); + line = VariableRegistry.INSTANCE.applyVariables(line); + + int multPosition = customSize.indexOf('*'); + if (multPosition != -1) { + String firstPart = customSize.substring(0, multPosition); + int first; + try { + first = Integer.parseInt(firstPart); + } catch (NumberFormatException e) { + throw new IllegalStateException("Size in " + line); + } + return first * parseSize(customSize.substring(multPosition + 1), line); + } + try { - size = Integer.parseInt(customSize); + return Integer.parseInt(customSize); } catch (NumberFormatException e) { throw new IllegalStateException("Size in " + line); } - state.tsCustomSize.put(name, size); - state.tsCustomLine.put(name, tunerStudioLine); } void readBufferedReader(BufferedReader definitionReader, List consumers) throws IOException { diff --git a/java_tools/configuration_definition/src/com/rusefi/test/ConfigFieldParserTest.java b/java_tools/configuration_definition/src/com/rusefi/test/ConfigFieldParserTest.java index 165ef9a620..03ba7d6fbe 100644 --- a/java_tools/configuration_definition/src/com/rusefi/test/ConfigFieldParserTest.java +++ b/java_tools/configuration_definition/src/com/rusefi/test/ConfigFieldParserTest.java @@ -2,6 +2,7 @@ package com.rusefi.test; import com.rusefi.ConfigField; import com.rusefi.ReaderState; +import com.rusefi.VariableRegistry; import org.junit.Test; import static org.junit.Assert.*; @@ -71,4 +72,18 @@ public class ConfigFieldParserTest { assertEquals(cf.getComment(), "@see hasMapSensor\\n@see isMapAveragingEnabled"); } } + + @Test + public void testParseSize() { + assertEquals(4, ReaderState.parseSize("4", "")); + + assertEquals(12, ReaderState.parseSize("4*3", "")); + + VariableRegistry.INSTANCE.clear(); + + VariableRegistry.INSTANCE.register("var", 256); + + assertEquals(512, ReaderState.parseSize("2*@@var@@", "")); + assertEquals(512, ReaderState.parseSize("2x@@var@@", "")); + } }