diff --git a/java_tools/ConfigDefinition.jar b/java_tools/ConfigDefinition.jar
index a98293cf14..1144b6ec57 100644
Binary files a/java_tools/ConfigDefinition.jar and b/java_tools/ConfigDefinition.jar differ
diff --git a/java_tools/configuration_definition/.idea/libraries/httpclient.xml b/java_tools/configuration_definition/.idea/libraries/httpclient.xml
new file mode 100644
index 0000000000..db804547d1
--- /dev/null
+++ b/java_tools/configuration_definition/.idea/libraries/httpclient.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/java_tools/configuration_definition/.idea/libraries/json_simple.xml b/java_tools/configuration_definition/.idea/libraries/json_simple.xml
new file mode 100644
index 0000000000..ed035f7d10
--- /dev/null
+++ b/java_tools/configuration_definition/.idea/libraries/json_simple.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/java_tools/configuration_definition/src/com/rusefi/VariableRegistry.java b/java_tools/configuration_definition/src/com/rusefi/VariableRegistry.java
index 9a1a0de47d..4b3158d446 100644
--- a/java_tools/configuration_definition/src/com/rusefi/VariableRegistry.java
+++ b/java_tools/configuration_definition/src/com/rusefi/VariableRegistry.java
@@ -2,6 +2,7 @@ package com.rusefi;
import com.rusefi.util.LazyFile;
import com.rusefi.util.SystemOut;
+import org.jetbrains.annotations.Nullable;
import java.io.IOException;
import java.util.*;
@@ -17,6 +18,7 @@ import static com.rusefi.ReaderState.MULT_TOKEN;
public class VariableRegistry {
public static final String _16_HEX_SUFFIX = "_16_hex";
public static final String _HEX_SUFFIX = "_hex";
+ public static final String CHAR_SUFFIX = "_char";
private static final String HEX_PREFIX = "0x";
private final TreeMap data = new TreeMap<>(String.CASE_INSENSITIVE_ORDER);
public static final VariableRegistry INSTANCE = new VariableRegistry();
@@ -51,9 +53,17 @@ public class VariableRegistry {
}
public void register(String var, String value) {
+ value = doRegister(var, value);
+ if (value == null)
+ return;
+ tryToRegisterAsInteger(var, value);
+ }
+
+ @Nullable
+ private String doRegister(String var, String value) {
if (data.containsKey(var)) {
SystemOut.println("Not redefining " + var);
- return;
+ return null;
}
value = applyVariables(value);
int multPosition = value.indexOf(MULT_TOKEN);
@@ -72,7 +82,7 @@ public class VariableRegistry {
cAllDefinitions.put(var, "#define " + var + " " + value + EOL);
}
}
- tryToRegisterAsInteger(var, value);
+ return value;
}
public static boolean isNumeric(String str) {
@@ -110,6 +120,9 @@ public class VariableRegistry {
} else if (isQuoted(value, '\'')) {
// quoted and not with enum suffix means plain string define statement
javaDefinitions.put(var, "\tpublic static final char " + var + " = " + value + ";" + EOL);
+ char charValue = value.charAt(1);
+ registerHex(var + CHAR_SUFFIX, charValue);
+ doRegister(var + CHAR_SUFFIX, Character.toString(charValue));
}
}
}
@@ -133,6 +146,10 @@ public class VariableRegistry {
*/
public void register(String name, int value) {
register(name, Integer.toString(value));
+ registerHex(name, value);
+ }
+
+ private void registerHex(String name, int value) {
register(name + _HEX_SUFFIX, Integer.toString(value, 16));
String _16_hex = String.format("\\\\x%02x\\\\x%02x", (value >> 8) & 0xFF, value & 0xFF);
register(name + _16_HEX_SUFFIX, _16_hex);
@@ -168,6 +185,10 @@ public class VariableRegistry {
javaDefinitions.clear();
}
+ public int size() {
+ return data.size();
+ }
+
public void put(String key, String value) {
data.put(key, value);
}
diff --git a/java_tools/configuration_definition/src/com/rusefi/test/VariableRegistryTest.java b/java_tools/configuration_definition/src/com/rusefi/test/VariableRegistryTest.java
index c63c3c4d63..d0c0bc99b1 100644
--- a/java_tools/configuration_definition/src/com/rusefi/test/VariableRegistryTest.java
+++ b/java_tools/configuration_definition/src/com/rusefi/test/VariableRegistryTest.java
@@ -3,8 +3,7 @@ package com.rusefi.test;
import com.rusefi.VariableRegistry;
import org.junit.Test;
-import static com.rusefi.VariableRegistry._16_HEX_SUFFIX;
-import static com.rusefi.VariableRegistry._HEX_SUFFIX;
+import static com.rusefi.VariableRegistry.*;
import static org.junit.Assert.assertEquals;
/**
@@ -13,17 +12,29 @@ import static org.junit.Assert.assertEquals;
public class VariableRegistryTest {
@Test
public void testReplace() {
- VariableRegistry.INSTANCE.clear();
-
- VariableRegistry.INSTANCE.register("var", 256);
+ VariableRegistry registry = new VariableRegistry();
+ registry.register("var", 256);
+ assertEquals(3, registry.size());
// trivial key-value substitution
- assertEquals("256", VariableRegistry.INSTANCE.applyVariables("@@var@@"));
- assertEquals("ab256", VariableRegistry.INSTANCE.applyVariables("ab@@var@@"));
- assertEquals("ab256cd", VariableRegistry.INSTANCE.applyVariables("ab@@var@@cd"));
+ assertEquals("256", registry.applyVariables("@@var@@"));
+ assertEquals("ab256", registry.applyVariables("ab@@var@@"));
+ assertEquals("ab256cd", registry.applyVariables("ab@@var@@cd"));
// both decimal and hex values here
- assertEquals("aa256qwe100fff", VariableRegistry.INSTANCE.applyVariables("aa@@var@@qwe@@var" + _HEX_SUFFIX + "@@fff"));
+ assertEquals("aa256qwe100fff", registry.applyVariables("aa@@var@@qwe@@var" + _HEX_SUFFIX + "@@fff"));
- assertEquals("\\x01\\x00", VariableRegistry.INSTANCE.applyVariables("@@var" + _16_HEX_SUFFIX + "@@"));
+ assertEquals("\\x01\\x00", registry.applyVariables("@@var" + _16_HEX_SUFFIX + "@@"));
+ }
+
+ @Test
+ public void testCharHexUsage() {
+ VariableRegistry registry = new VariableRegistry();
+ registry.register("SD_r", "'r'");
+
+ assertEquals(4, registry.size());
+ assertEquals("ab72", registry.applyVariables("ab@@SD_r" + CHAR_SUFFIX + _HEX_SUFFIX +
+ "@@"));
+ assertEquals("ab'r'", registry.applyVariables("ab@@SD_r@@"));
+ assertEquals("abr", registry.applyVariables("ab@@SD_r" + CHAR_SUFFIX + "@@"));
}
}