diff --git a/firmware/controllers/system_fsio.h b/firmware/controllers/system_fsio.h index d316277fc0..006a7cc9aa 100644 --- a/firmware/controllers/system_fsio.h +++ b/firmware/controllers/system_fsio.h @@ -1,4 +1,4 @@ -// this https://en.wikipedia.org/wiki/Reverse_Polish_notation is generated automatically +// this https://en.wikipedia.org/wiki/Reverse_Polish_notation SHOULD BE generated automatically // from controllers/system_fsio.txt // on 2019-09-08_16_41_20_788 // @@ -25,9 +25,9 @@ // Human-readable: coolant > 120 #define TOO_HOT_LOGIC "coolant 120 >" -// Human-readable: ac_on_switch & rpm > 850 & time_since_ac_on_switch > 0.3 -// ac_on_switch rpm & 850 time_since_ac_on_switch & > 0.3 > -#define AC_RELAY_LOGIC "ac_on_switch rpm & 850 >" +// Human-readable: ac_on_switch & (rpm > 850) & (time_since_ac_on_switch > 0.3) +// ac_on_switch rpm 850 > & time_since_ac_on_switch 0.3 > & +#define AC_RELAY_LOGIC "ac_on_switch rpm 850 > &" // Combined RPM, CLT and VBATT warning light // Human-readable: (rpm > fsio_setting(2)) | ((coolant > fsio_setting(3)) | (vbatt < fsio_setting(4))) diff --git a/firmware/controllers/system_fsio.txt b/firmware/controllers/system_fsio.txt index 8a6148ca9f..1ad5a4e5c1 100644 --- a/firmware/controllers/system_fsio.txt +++ b/firmware/controllers/system_fsio.txt @@ -17,7 +17,7 @@ ALTERNATOR_LOGIC=vbatt < 14.5 TOO_HOT_LOGIC=coolant > 120 -AC_RELAY_LOGIC=ac_on_switch & rpm > 850 +AC_RELAY_LOGIC=ac_on_switch & (rpm > 850) # Combined RPM, CLT and VBATT warning light COMBINED_WARNING_LIGHT=(rpm > fsio_setting(2)) | ((coolant > fsio_setting(3)) | (vbatt < fsio_setting(4))) diff --git a/java_console/ui/src/main/java/com/rusefi/ui/widgets/AnyCommand.java b/java_console/ui/src/main/java/com/rusefi/ui/widgets/AnyCommand.java index 7b7b8e4a13..124d05da4d 100644 --- a/java_console/ui/src/main/java/com/rusefi/ui/widgets/AnyCommand.java +++ b/java_console/ui/src/main/java/com/rusefi/ui/widgets/AnyCommand.java @@ -133,7 +133,14 @@ public class AnyCommand { public static String prepareCommand(String rawCommand, LinkManager linkManager) { try { if (rawCommand.startsWith("eval" + " ")) { - return prepareEvalCommand(rawCommand); + String result = prepareEvalCommand(rawCommand); + if (result.equals(rawCommand)) { + // result was not translated + MessagesCentral.getInstance().postMessage(AnyCommand.class, "Not valid expression"); + MessagesCentral.getInstance().postMessage(AnyCommand.class, "Please try eval \"2 + 2\""); + MessagesCentral.getInstance().postMessage(AnyCommand.class, "For RPN use rpn_eval \"2 2 +\""); + } + return result; } else if (rawCommand.toLowerCase().startsWith("stim_check" + " ")) { handleStimulationSelfCheck(rawCommand, linkManager); return null; @@ -202,12 +209,16 @@ public class AnyCommand { MessagesCentral.getInstance().postMessage(AnyCommand.class, "Human form is \"" + humanForm + "\""); } - private static String prepareEvalCommand(String rawCommand) { + public static String prepareEvalCommand(String rawCommand) { String[] parts = rawCommand.split(" ", 2); if (parts.length != 2) return rawCommand; // let's ignore invalid command - return "rpn_eval" + " " + quote(infix2postfix(unquote(parts[1]))); + try { + return "rpn_eval" + " " + quote(infix2postfix(unquote(parts[1]))); + } catch (IllegalArgumentException e) { + return rawCommand; + } } private static String quote(String s) { diff --git a/java_console/ui/src/main/java/com/rusefi/ui/widgets/test/AnyCommandTest.java b/java_console/ui/src/main/java/com/rusefi/ui/widgets/test/AnyCommandTest.java index 54c6bed599..9a154ccfd4 100644 --- a/java_console/ui/src/main/java/com/rusefi/ui/widgets/test/AnyCommandTest.java +++ b/java_console/ui/src/main/java/com/rusefi/ui/widgets/test/AnyCommandTest.java @@ -14,6 +14,11 @@ public class AnyCommandTest { return AnyCommand.prepareCommand(rawCommand, null); } + @Test + public void testNoExceptionIsThrown() { + assertEquals("eval \"2 2 +\"", AnyCommand.prepareEvalCommand("eval \"2 2 +\"")); + } + @Test public void testUnquote() { assertEquals("1 2 3", AnyCommand.unquote(" \"1 2 3\" "));