From 4411efbb72b3c798e5354d2d5fc6878d4fa5f244 Mon Sep 17 00:00:00 2001 From: rusefi Date: Sun, 24 Nov 2019 23:49:05 -0500 Subject: [PATCH] firing order tool integration --- firmware/controllers/algo/firing_order.h | 11 +-- firmware/gen_firing_order.bat | 1 + .../src/com/rusefi/FiringOrderTSLogic.java | 19 +++-- java_console/ui/src/com/rusefi/Launcher.java | 73 ++++++++++++------- 4 files changed, 65 insertions(+), 39 deletions(-) create mode 100644 firmware/gen_firing_order.bat diff --git a/firmware/controllers/algo/firing_order.h b/firmware/controllers/algo/firing_order.h index 70c0771ab0..9c7cbba3a9 100644 --- a/firmware/controllers/algo/firing_order.h +++ b/firmware/controllers/algo/firing_order.h @@ -1,15 +1,15 @@ /* * @file firing_order.h * + * See also FiringOrderTSLogic.java + * * @date Jul 20, 2016 - * @author Andrey Belomutskiy, (c) 2012-2017 + * @author Andrey Belomutskiy, (c) 2012-2019 */ #include "rusefi_enums.h" - -#ifndef CONTROLLERS_ALGO_FIRING_ORDER_H_ -#define CONTROLLERS_ALGO_FIRING_ORDER_H_ +#pragma once typedef enum { FO_1 = 0, @@ -53,6 +53,3 @@ typedef enum { Force_4b_firing_order = ENUM_32_BITS, } firing_order_e; - - -#endif /* CONTROLLERS_ALGO_FIRING_ORDER_H_ */ diff --git a/firmware/gen_firing_order.bat b/firmware/gen_firing_order.bat new file mode 100644 index 0000000000..3bbf59ed92 --- /dev/null +++ b/firmware/gen_firing_order.bat @@ -0,0 +1 @@ +java -jar ../java_console_binary/rusefi_console.jar firing_order controllers/algo/firing_order.h diff --git a/java_console/models/src/com/rusefi/FiringOrderTSLogic.java b/java_console/models/src/com/rusefi/FiringOrderTSLogic.java index 05693ba11b..5ed9766ab5 100644 --- a/java_console/models/src/com/rusefi/FiringOrderTSLogic.java +++ b/java_console/models/src/com/rusefi/FiringOrderTSLogic.java @@ -15,17 +15,21 @@ public class FiringOrderTSLogic { private static final String FIRING_ORDER_PREFIX = "FO_"; private static final Map ordinal2order = new HashMap<>(); + private static int maxOrdinal; public static void main(String[] args) throws IOException { - readFiringOrders(); - - for (int i = 2; i <= 12; i++) - processId(i); - + invoke("../firmware/controllers/algo/firing_order.h"); } - private static void readFiringOrders() throws IOException { - BufferedReader br = new BufferedReader(new FileReader("../firmware/controllers/algo/firing_order.h")); + public static void invoke(String fileName) throws IOException { + readFiringOrders(fileName); + + for (int i = 2; i <= maxOrdinal; i++) + processId(i); + } + + private static void readFiringOrders(String fileName) throws IOException { + BufferedReader br = new BufferedReader(new FileReader(fileName)); String line; while ((line = br.readLine()) != null) { @@ -50,6 +54,7 @@ public class FiringOrderTSLogic { System.out.println("order " + Arrays.toString(order) + ": " + ordinal); + maxOrdinal = Math.max(ordinal, maxOrdinal); ordinal2order.put(ordinal, order); } diff --git a/java_console/ui/src/com/rusefi/Launcher.java b/java_console/ui/src/com/rusefi/Launcher.java index 59b447b71c..e96685d390 100644 --- a/java_console/ui/src/com/rusefi/Launcher.java +++ b/java_console/ui/src/com/rusefi/Launcher.java @@ -29,6 +29,7 @@ import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import java.awt.*; import java.awt.event.ActionListener; +import java.io.IOException; import java.util.Arrays; import java.util.HashMap; import java.util.Map; @@ -55,10 +56,13 @@ public class Launcher { private static final String TAB_INDEX = "main_tab"; protected static final String PORT_KEY = "port"; protected static final String SPEED_KEY = "speed"; + private static final String TOOL_NAME_COMPILE_FSIO_FILE = "compile_fsio_file"; private static final String TOOL_NAME_REBOOT_ECU = "reboot_ecu"; + private static final String TOOL_NAME_FIRING_ORDER = "firing_order"; // todo: rename to something more FSIO-specific? would need to update documentation somewhere private static final String TOOL_NAME_COMPILE = "compile"; + private final String port; // todo: the logic around 'fatalError' could be implemented nicer private String fatalError; @@ -316,43 +320,32 @@ public class Launcher { */ public static void main(final String[] args) throws Exception { String toolName = args.length == 0 ? null : args[0]; + if (TOOL_NAME_COMPILE_FSIO_FILE.equalsIgnoreCase(toolName)) { - /** - * re-packaging array which contains input and output file names - */ - int returnCode = CompileTool.run(Arrays.asList(args).subList(1, args.length)); + int returnCode = invokeCompileFileTool(args); System.exit(returnCode); - return; } if (TOOL_NAME_COMPILE.equals(toolName)) { - if (args.length != 2) { - System.err.println("input expression parameter expected"); - System.exit(-1); - return; - } - String input = args[1]; - System.out.println(DoubleEvaluator.process(input).getPosftfixExpression()); + invokeCompileExpressionTool(args); System.exit(0); } - System.out.println("Optional tools: " + Arrays.asList(TOOL_NAME_COMPILE_FSIO_FILE, TOOL_NAME_COMPILE, TOOL_NAME_REBOOT_ECU)); + + if (TOOL_NAME_FIRING_ORDER.equals(toolName)) { + FiringOrderTSLogic.invoke(args[1]); + System.exit(0); + } + + System.out.println("Optional tools: " + Arrays.asList(TOOL_NAME_COMPILE_FSIO_FILE, + TOOL_NAME_COMPILE, + TOOL_NAME_REBOOT_ECU, + TOOL_NAME_FIRING_ORDER)); System.out.println("Starting rusEfi UI console " + CONSOLE_VERSION); FileLog.MAIN.start(); if (TOOL_NAME_REBOOT_ECU.equalsIgnoreCase(toolName)) { - String autoDetectedPort = PortDetector.autoDetectPort(null); - if (autoDetectedPort == null) { - System.err.println("rusEfi not detected"); - return; - } - PortHolder.EstablishConnection establishConnection = new PortHolder.EstablishConnection(autoDetectedPort).invoke(); - if (!establishConnection.isConnected()) - return; - IoStream stream = establishConnection.getStream(); - byte[] commandBytes = BinaryProtocol.getTextCommandBytes(Fields.CMD_REBOOT); - stream.sendPacket(commandBytes, FileLog.LOGGER); - + invokeRebootTool(); return; } @@ -368,6 +361,36 @@ public class Launcher { }); } + private static int invokeCompileFileTool(String[] args) throws IOException { + /** + * re-packaging array which contains input and output file names + */ + return CompileTool.run(Arrays.asList(args).subList(1, args.length)); + } + + private static void invokeRebootTool() throws IOException { + String autoDetectedPort = PortDetector.autoDetectPort(null); + if (autoDetectedPort == null) { + System.err.println("rusEfi not detected"); + return; + } + PortHolder.EstablishConnection establishConnection = new PortHolder.EstablishConnection(autoDetectedPort).invoke(); + if (!establishConnection.isConnected()) + return; + IoStream stream = establishConnection.getStream(); + byte[] commandBytes = BinaryProtocol.getTextCommandBytes(Fields.CMD_REBOOT); + stream.sendPacket(commandBytes, FileLog.LOGGER); + } + + private static void invokeCompileExpressionTool(String[] args) { + if (args.length != 2) { + System.err.println("input expression parameter expected"); + System.exit(-1); + } + String expression = args[1]; + System.out.println(DoubleEvaluator.process(expression).getPosftfixExpression()); + } + private static void awtCode(String[] args) { if (JustOneInstance.isAlreadyRunning()) { int result = JOptionPane.showConfirmDialog(null, "Looks like another instance is already running. Do you really want to start another instance?",