From 64c83fa4cd0cee9e486a91c84a74a99babb4adf8 Mon Sep 17 00:00:00 2001 From: rusefi Date: Fri, 14 Feb 2020 23:03:26 -0500 Subject: [PATCH] he owes me one now --- firmware/integration/rusefi_config.txt | 2 +- firmware/tunerstudio/rusefi.ini | 4 +-- firmware/tunerstudio/rusefi_frankenso.ini | 4 +-- firmware/tunerstudio/rusefi_kinetis.ini | 4 +-- firmware/tunerstudio/rusefi_microrusefi.ini | 4 +-- firmware/tunerstudio/rusefi_prometheus.ini | 4 +-- firmware/tunerstudio/rusefi_proteus.ini | 4 +-- java_tools/ConfigDefinition.jar | Bin 148447 -> 156307 bytes .../src/com/rusefi/ConfigField.java | 23 +++++++++++++++--- .../src/com/rusefi/ConfigStructure.java | 4 +-- .../src/com/rusefi/ReaderState.java | 10 +++++--- .../com/rusefi/output/TSProjectConsumer.java | 2 +- .../src/com/rusefi/test/BitParsingTest.java | 10 +++++--- 13 files changed, 50 insertions(+), 25 deletions(-) diff --git a/firmware/integration/rusefi_config.txt b/firmware/integration/rusefi_config.txt index 6f8105a82d..177b2c0f84 100644 --- a/firmware/integration/rusefi_config.txt +++ b/firmware/integration/rusefi_config.txt @@ -340,7 +340,7 @@ bit issue_294_27; bit issue_294_28; bit issue_294_29; bit issue_294_30; -bit issue_294_31; +bit issue_294_31,si_example,nada_example; int16_t tpsMin;Closed throttle. todo: extract these two fields into a structure\nSee also tps1_1AdcChannel\nset tps_min X;"ADC", 1, 0, 0, 1023, 0 diff --git a/firmware/tunerstudio/rusefi.ini b/firmware/tunerstudio/rusefi.ini index 2ec110d43c..a10799af11 100644 --- a/firmware/tunerstudio/rusefi.ini +++ b/firmware/tunerstudio/rusefi.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Tue Feb 04 13:45:28 EST 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Fri Feb 14 23:02:29 EST 2020 pageSize = 20000 page = 1 @@ -124,7 +124,7 @@ page = 1 issue_294_28 = bits, U32, 76, [27:27], "false", "true" issue_294_29 = bits, U32, 76, [28:28], "false", "true" issue_294_30 = bits, U32, 76, [29:29], "false", "true" - issue_294_31 = bits, U32, 76, [30:30], "false", "true" + issue_294_31 = bits, U32, 76, [30:30], "nada_example", "si_example" unusedBit_34_31 = bits, U32, 76, [31:31], "false", "true" tpsMin = scalar, S16, 80, "ADC", 1, 0, 0, 1023, 0 tpsMax = scalar, S16, 82, "ADC", 1, 0, 0, 1023, 0 diff --git a/firmware/tunerstudio/rusefi_frankenso.ini b/firmware/tunerstudio/rusefi_frankenso.ini index 9dfd362add..c14e47984f 100644 --- a/firmware/tunerstudio/rusefi_frankenso.ini +++ b/firmware/tunerstudio/rusefi_frankenso.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Tue Feb 04 13:45:35 EST 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Fri Feb 14 23:02:35 EST 2020 pageSize = 20000 page = 1 @@ -124,7 +124,7 @@ page = 1 issue_294_28 = bits, U32, 76, [27:27], "false", "true" issue_294_29 = bits, U32, 76, [28:28], "false", "true" issue_294_30 = bits, U32, 76, [29:29], "false", "true" - issue_294_31 = bits, U32, 76, [30:30], "false", "true" + issue_294_31 = bits, U32, 76, [30:30], "nada_example", "si_example" unusedBit_34_31 = bits, U32, 76, [31:31], "false", "true" tpsMin = scalar, S16, 80, "ADC", 1, 0, 0, 1023, 0 tpsMax = scalar, S16, 82, "ADC", 1, 0, 0, 1023, 0 diff --git a/firmware/tunerstudio/rusefi_kinetis.ini b/firmware/tunerstudio/rusefi_kinetis.ini index dd562c1ae6..b1eb9398df 100644 --- a/firmware/tunerstudio/rusefi_kinetis.ini +++ b/firmware/tunerstudio/rusefi_kinetis.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration/rusefi_config.txt Wed Feb 12 20:10:22 EST 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration/rusefi_config.txt Fri Feb 14 23:02:42 EST 2020 pageSize = 20000 page = 1 @@ -124,7 +124,7 @@ page = 1 issue_294_28 = bits, U32, 76, [27:27], "false", "true" issue_294_29 = bits, U32, 76, [28:28], "false", "true" issue_294_30 = bits, U32, 76, [29:29], "false", "true" - issue_294_31 = bits, U32, 76, [30:30], "false", "true" + issue_294_31 = bits, U32, 76, [30:30], "nada_example", "si_example" unusedBit_34_31 = bits, U32, 76, [31:31], "false", "true" tpsMin = scalar, S16, 80, "ADC", 1, 0, 0, 1023, 0 tpsMax = scalar, S16, 82, "ADC", 1, 0, 0, 1023, 0 diff --git a/firmware/tunerstudio/rusefi_microrusefi.ini b/firmware/tunerstudio/rusefi_microrusefi.ini index 1ff4961886..1003686ebc 100644 --- a/firmware/tunerstudio/rusefi_microrusefi.ini +++ b/firmware/tunerstudio/rusefi_microrusefi.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Tue Feb 04 13:45:31 EST 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Fri Feb 14 23:02:32 EST 2020 pageSize = 20000 page = 1 @@ -124,7 +124,7 @@ page = 1 issue_294_28 = bits, U32, 76, [27:27], "false", "true" issue_294_29 = bits, U32, 76, [28:28], "false", "true" issue_294_30 = bits, U32, 76, [29:29], "false", "true" - issue_294_31 = bits, U32, 76, [30:30], "false", "true" + issue_294_31 = bits, U32, 76, [30:30], "nada_example", "si_example" unusedBit_34_31 = bits, U32, 76, [31:31], "false", "true" tpsMin = scalar, S16, 80, "ADC", 1, 0, 0, 1023, 0 tpsMax = scalar, S16, 82, "ADC", 1, 0, 0, 1023, 0 diff --git a/firmware/tunerstudio/rusefi_prometheus.ini b/firmware/tunerstudio/rusefi_prometheus.ini index d87b04a411..014eb6b25d 100644 --- a/firmware/tunerstudio/rusefi_prometheus.ini +++ b/firmware/tunerstudio/rusefi_prometheus.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Tue Feb 04 13:45:38 EST 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Fri Feb 14 23:02:37 EST 2020 pageSize = 20000 page = 1 @@ -124,7 +124,7 @@ page = 1 issue_294_28 = bits, U32, 76, [27:27], "false", "true" issue_294_29 = bits, U32, 76, [28:28], "false", "true" issue_294_30 = bits, U32, 76, [29:29], "false", "true" - issue_294_31 = bits, U32, 76, [30:30], "false", "true" + issue_294_31 = bits, U32, 76, [30:30], "nada_example", "si_example" unusedBit_34_31 = bits, U32, 76, [31:31], "false", "true" tpsMin = scalar, S16, 80, "ADC", 1, 0, 0, 1023, 0 tpsMax = scalar, S16, 82, "ADC", 1, 0, 0, 1023, 0 diff --git a/firmware/tunerstudio/rusefi_proteus.ini b/firmware/tunerstudio/rusefi_proteus.ini index ae99dea994..7e9f09de44 100644 --- a/firmware/tunerstudio/rusefi_proteus.ini +++ b/firmware/tunerstudio/rusefi_proteus.ini @@ -85,7 +85,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Tue Feb 04 13:45:41 EST 2020 +; this section was generated automatically by rusEfi tool ConfigDefinition.jar based on integration\rusefi_config.txt Fri Feb 14 23:02:40 EST 2020 pageSize = 20000 page = 1 @@ -124,7 +124,7 @@ page = 1 issue_294_28 = bits, U32, 76, [27:27], "false", "true" issue_294_29 = bits, U32, 76, [28:28], "false", "true" issue_294_30 = bits, U32, 76, [29:29], "false", "true" - issue_294_31 = bits, U32, 76, [30:30], "false", "true" + issue_294_31 = bits, U32, 76, [30:30], "nada_example", "si_example" unusedBit_34_31 = bits, U32, 76, [31:31], "false", "true" tpsMin = scalar, S16, 80, "ADC", 1, 0, 0, 1023, 0 tpsMax = scalar, S16, 82, "ADC", 1, 0, 0, 1023, 0 diff --git a/java_tools/ConfigDefinition.jar b/java_tools/ConfigDefinition.jar index 29ee78d137b8d4089a1b1e8517cf5238821a6ea1..3fda580daca0761237d5b4ecb748c1095a42fab6 100644 GIT binary patch delta 49357 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 1 ? bitNameParts[1] : null; + String falseName = bitNameParts.length > 2 ? bitNameParts[2] : null; + + ConfigField bitField = new ConfigField(state, bitNameParts[0], comment, null, BOOLEAN_T, 0, null, false, false, null, -1, trueName, falseName); if (state.stack.isEmpty()) throw new IllegalStateException("Parent structure expected"); ConfigStructure structure = state.stack.peek(); @@ -210,7 +214,7 @@ public class ReaderState { structure.addC(cf); for (int i = 1; i <= cf.getArraySize(); i++) { ConfigField element = new ConfigField(state, cf.getName() + i, cf.getComment(), null, - cf.getType(), 1, cf.getTsInfo(), false, false, cf.getName(), i); + cf.getType(), 1, cf.getTsInfo(), false, false, cf.getName(), i, null, null); structure.addTs(element); } } else { diff --git a/java_tools/configuration_definition/src/com/rusefi/output/TSProjectConsumer.java b/java_tools/configuration_definition/src/com/rusefi/output/TSProjectConsumer.java index 0a61b7897a..14aa502e53 100644 --- a/java_tools/configuration_definition/src/com/rusefi/output/TSProjectConsumer.java +++ b/java_tools/configuration_definition/src/com/rusefi/output/TSProjectConsumer.java @@ -49,7 +49,7 @@ public class TSProjectConsumer implements ConfigurationConsumer { tsHeader.write("= bits, U32, "); tsHeader.write("\t" + tsPosition + ", ["); tsHeader.write(bitIndex + ":" + bitIndex); - tsHeader.write("], \"false\", \"true\""); + tsHeader.write("], \"" + configField.getFalseName() + "\", \"" + configField.getTrueName() + "\""); tsHeader.write(EOL); tsPosition += configField.getSize(next); diff --git a/java_tools/configuration_definition/src/com/rusefi/test/BitParsingTest.java b/java_tools/configuration_definition/src/com/rusefi/test/BitParsingTest.java index 0662dc3508..6bf20aa811 100644 --- a/java_tools/configuration_definition/src/com/rusefi/test/BitParsingTest.java +++ b/java_tools/configuration_definition/src/com/rusefi/test/BitParsingTest.java @@ -2,7 +2,6 @@ package com.rusefi.test; import com.rusefi.ReaderState; import com.rusefi.TsFileContent; -import com.rusefi.output.JavaFieldsConsumer; import com.rusefi.output.TSProjectConsumer; import com.rusefi.util.Output; import org.junit.Test; @@ -10,13 +9,16 @@ import org.junit.Test; import java.io.*; import java.util.Arrays; +import static org.junit.Assert.assertTrue; + public class BitParsingTest { @Test public void testBitParser() throws IOException { ReaderState state = new ReaderState(); - String inputString = "struct pid_s\nbit activateAuxPid1;\n" + - "bit fieldName;\n" + + String inputString = "struct pid_s\n" + + ReaderState.BIT + " fieldName\n" + + ReaderState.BIT + " fieldName2,si,nada;comment\n" + "end_struct\n"; BufferedReader reader = new BufferedReader(new StringReader(inputString)); @@ -32,6 +34,8 @@ public class BitParsingTest { System.out.printf("start[" + sw.toString() + "]end"); + assertTrue(sw.toString().contains("\"false\", \"true\"")); + assertTrue(sw.toString().contains("\"nada\", \"si\"")); } private Output createOutput(StringWriter sw) {