From f3349e083afc48aa88e8599fa04685f7086af82d Mon Sep 17 00:00:00 2001 From: rusefi Date: Sat, 16 May 2020 13:23:16 -0400 Subject: [PATCH] new command line tool works now! --- .../Launcher_save_binary_configuration.xml | 11 ++++++ .../rusefi/binaryprotocol/BinaryProtocol.java | 7 ++-- .../io/src/com/rusefi/io/LinkManager.java | 10 ++---- .../rusefi/io/tcp/BinaryProtocolServer.java | 4 +-- .../opensr5/io/ConfigurationImageFile.java | 1 + java_console/ui/src/com/rusefi/Launcher.java | 2 +- .../ui/src/com/rusefi/SensorLogger.java | 2 +- .../ui/src/com/rusefi/TableEditorPane.java | 2 +- .../BinaryProtocolCmdSandbox.java | 2 +- .../com/rusefi/{ => tools}/ConsoleTools.java | 36 ++++++++++++++++--- .../ui/src/com/rusefi/ui/FormulasPane.java | 2 +- .../ui/src/com/rusefi/ui/FuelTunePane.java | 6 ++-- .../com/rusefi/ui/config/BaseConfigField.java | 2 +- .../com/rusefi/ui/livedocs/LiveDocPanel.java | 2 +- 14 files changed, 62 insertions(+), 27 deletions(-) create mode 100644 java_console/.idea/runConfigurations/Launcher_save_binary_configuration.xml rename java_console/ui/src/com/rusefi/{ => tools}/ConsoleTools.java (81%) diff --git a/java_console/.idea/runConfigurations/Launcher_save_binary_configuration.xml b/java_console/.idea/runConfigurations/Launcher_save_binary_configuration.xml new file mode 100644 index 0000000000..d4571deb68 --- /dev/null +++ b/java_console/.idea/runConfigurations/Launcher_save_binary_configuration.xml @@ -0,0 +1,11 @@ + + + + \ No newline at end of file diff --git a/java_console/io/src/com/rusefi/binaryprotocol/BinaryProtocol.java b/java_console/io/src/com/rusefi/binaryprotocol/BinaryProtocol.java index bedc47f261..def515da33 100644 --- a/java_console/io/src/com/rusefi/binaryprotocol/BinaryProtocol.java +++ b/java_console/io/src/com/rusefi/binaryprotocol/BinaryProtocol.java @@ -175,7 +175,7 @@ public class BinaryProtocol implements BinaryProtocolCommands { } public void uploadChanges(ConfigurationImage newVersion, Logger logger) throws InterruptedException, EOFException, SerialPortException { - ConfigurationImage current = getController(); + ConfigurationImage current = getControllerConfiguration(); // let's have our own copy which no one would be able to change newVersion = newVersion.clone(); int offset = 0; @@ -329,7 +329,10 @@ public class BinaryProtocol implements BinaryProtocolCommands { } } - public ConfigurationImage getController() { + /** + * Configuration as it is in the controller to the best of our knowledge + */ + public ConfigurationImage getControllerConfiguration() { synchronized (imageLock) { if (controller == null) return null; diff --git a/java_console/io/src/com/rusefi/io/LinkManager.java b/java_console/io/src/com/rusefi/io/LinkManager.java index 074bfbaf47..08845b670b 100644 --- a/java_console/io/src/com/rusefi/io/LinkManager.java +++ b/java_console/io/src/com/rusefi/io/LinkManager.java @@ -134,12 +134,12 @@ public class LinkManager { public static boolean isSimulationMode; public static void startAndConnect(String port, ConnectionStateListener stateListener) { - FileLog.MAIN.logLine("LinkManager: Starting " + port); start(port); - connect(stateListener); + connector.connectAndReadConfiguration(stateListener); } public static void start(String port) { + FileLog.MAIN.logLine("LinkManager: Starting " + port); if (isLogViewerMode(port)) { connector = LinkConnector.VOID; } else if (TcpConnector.isTcpPort(port)) { @@ -158,12 +158,6 @@ public class LinkManager { return connector == LinkConnector.VOID; } - public static void connect(ConnectionStateListener listener) { - if (connector == null) - throw new NullPointerException("connector"); - connector.connectAndReadConfiguration(listener); - } - public static void send(String command, boolean fireEvent) throws InterruptedException { if (connector == null) throw new NullPointerException("connector"); diff --git a/java_console/io/src/com/rusefi/io/tcp/BinaryProtocolServer.java b/java_console/io/src/com/rusefi/io/tcp/BinaryProtocolServer.java index 1ebd660dfc..56f23a7689 100644 --- a/java_console/io/src/com/rusefi/io/tcp/BinaryProtocolServer.java +++ b/java_console/io/src/com/rusefi/io/tcp/BinaryProtocolServer.java @@ -112,7 +112,7 @@ public class BinaryProtocolServer implements BinaryProtocolCommands { short count = dis.readShort(); // no swap here? interesting! System.out.println("CRC check " + page + "/" + offset + "/" + count); BinaryProtocol bp = BinaryProtocolHolder.getInstance().getCurrentStreamState(); - int result = IoHelper.getCrc32(bp.getController().getContent(), offset, count); + int result = IoHelper.getCrc32(bp.getControllerConfiguration().getContent(), offset, count); ByteArrayOutputStream response = new ByteArrayOutputStream(); response.write(TS_OK.charAt(0)); new DataOutputStream(response).write(result); @@ -130,7 +130,7 @@ public class BinaryProtocolServer implements BinaryProtocolCommands { BinaryProtocol bp = BinaryProtocolHolder.getInstance().getCurrentStreamState(); byte[] response = new byte[1 + count]; response[0] = (byte) TS_OK.charAt(0); - System.arraycopy(bp.getController().getContent(), offset, response, 1, count); + System.arraycopy(bp.getControllerConfiguration().getContent(), offset, response, 1, count); stream.sendPacket(response, FileLog.LOGGER); } } else if (command == COMMAND_OUTPUTS) { diff --git a/java_console/opensr5/src/com/opensr5/io/ConfigurationImageFile.java b/java_console/opensr5/src/com/opensr5/io/ConfigurationImageFile.java index ec8868bcda..4ed6b5c872 100644 --- a/java_console/opensr5/src/com/opensr5/io/ConfigurationImageFile.java +++ b/java_console/opensr5/src/com/opensr5/io/ConfigurationImageFile.java @@ -59,6 +59,7 @@ public class ConfigurationImageFile { } public static void saveToFile(ConfigurationImage configurationImage, String fileName) throws IOException { + System.out.printf("Saving " + configurationImage.getSize() + " bytes of configuration into " + fileName); FileOutputStream fos = new FileOutputStream(fileName); fos.write(getFileContent(configurationImage)); fos.close(); diff --git a/java_console/ui/src/com/rusefi/Launcher.java b/java_console/ui/src/com/rusefi/Launcher.java index 11dfce7ea5..6760a0be14 100644 --- a/java_console/ui/src/com/rusefi/Launcher.java +++ b/java_console/ui/src/com/rusefi/Launcher.java @@ -10,6 +10,7 @@ import com.rusefi.io.LinkManager; import com.rusefi.io.serial.BaudRateHolder; import com.rusefi.maintenance.FirmwareFlasher; import com.rusefi.maintenance.VersionChecker; +import com.rusefi.tools.ConsoleTools; import com.rusefi.ui.FormulasPane; import com.rusefi.ui.GaugesPanel; import com.rusefi.ui.MessagesPane; @@ -21,7 +22,6 @@ import com.rusefi.ui.logview.LogViewer; import com.rusefi.ui.util.DefaultExceptionHandler; import com.rusefi.ui.util.JustOneInstance; import jssc.SerialPortList; -import org.jetbrains.annotations.Nullable; import javax.swing.*; import javax.swing.event.ChangeEvent; diff --git a/java_console/ui/src/com/rusefi/SensorLogger.java b/java_console/ui/src/com/rusefi/SensorLogger.java index 0c72edebda..a541c8bc07 100644 --- a/java_console/ui/src/com/rusefi/SensorLogger.java +++ b/java_console/ui/src/com/rusefi/SensorLogger.java @@ -151,7 +151,7 @@ public class SensorLogger { int debugMode = -1; BinaryProtocol bp = BinaryProtocolHolder.getInstance().getCurrentStreamState(); if (bp != null) { - ConfigurationImage ci = bp.getController(); + ConfigurationImage ci = bp.getControllerConfiguration(); if (ci != null) { debugMode = ConfigField.getIntValue(ci, Fields.DEBUGMODE); } diff --git a/java_console/ui/src/com/rusefi/TableEditorPane.java b/java_console/ui/src/com/rusefi/TableEditorPane.java index cf0cec1553..e0dbd5930d 100644 --- a/java_console/ui/src/com/rusefi/TableEditorPane.java +++ b/java_console/ui/src/com/rusefi/TableEditorPane.java @@ -35,7 +35,7 @@ public class TableEditorPane extends JPanel { BinaryProtocol instance = BinaryProtocolHolder.getInstance().getCurrentStreamState(); if (instance == null) throw new NullPointerException("instance"); - ConfigurationImage image = instance.getController(); + ConfigurationImage image = instance.getControllerConfiguration(); byte[] fileContent = ConfigurationImageFile.getFileContent(image); ECUEditor.openImage(fileContent); } catch (Exception e) { diff --git a/java_console/ui/src/com/rusefi/binaryprotocol/BinaryProtocolCmdSandbox.java b/java_console/ui/src/com/rusefi/binaryprotocol/BinaryProtocolCmdSandbox.java index d167b75cef..b4ca13c851 100644 --- a/java_console/ui/src/com/rusefi/binaryprotocol/BinaryProtocolCmdSandbox.java +++ b/java_console/ui/src/com/rusefi/binaryprotocol/BinaryProtocolCmdSandbox.java @@ -41,7 +41,7 @@ public class BinaryProtocolCmdSandbox { // // image.saveToFile("rusefi_configuration.bin"); // - doShowImage(bp.getController()); + doShowImage(bp.getControllerConfiguration()); } private static void doShowImage(ConfigurationImage image) throws Exception { diff --git a/java_console/ui/src/com/rusefi/ConsoleTools.java b/java_console/ui/src/com/rusefi/tools/ConsoleTools.java similarity index 81% rename from java_console/ui/src/com/rusefi/ConsoleTools.java rename to java_console/ui/src/com/rusefi/tools/ConsoleTools.java index e3e92eec30..b7ba943053 100644 --- a/java_console/ui/src/com/rusefi/ConsoleTools.java +++ b/java_console/ui/src/com/rusefi/tools/ConsoleTools.java @@ -1,6 +1,9 @@ -package com.rusefi; +package com.rusefi.tools; import com.fathzer.soft.javaluator.DoubleEvaluator; +import com.opensr5.ConfigurationImage; +import com.opensr5.io.ConfigurationImageFile; +import com.rusefi.*; import com.rusefi.autodetect.PortDetector; import com.rusefi.binaryprotocol.BinaryProtocol; import com.rusefi.config.generated.Fields; @@ -15,6 +18,7 @@ import org.jetbrains.annotations.Nullable; import java.io.IOException; import java.util.Arrays; import java.util.Map; +import java.util.Objects; import java.util.TreeMap; public class ConsoleTools { @@ -39,20 +43,41 @@ public class ConsoleTools { } } - private static void saveBinaryConfig(String[] args) { + private static void saveBinaryConfig(String[] args) throws IOException { if (args.length < 2) { System.out.println("Please specify output file name for binary configuration"); System.exit(-1); } + String fileName = args[1]; String autoDetectedPort = autoDetectPort(); if (autoDetectedPort == null) return; - LinkManager.startAndConnect(autoDetectedPort, ConnectionStateListener.VOID); + LinkManager.startAndConnect(autoDetectedPort, new ConnectionStateListener() { + @Override + public void onConnectionEstablished() { + BinaryProtocol binaryProtocol = LinkManager.connector.getBinaryProtocol(); + Objects.requireNonNull(binaryProtocol, "binaryProtocol"); + ConfigurationImage configurationImage = binaryProtocol.getControllerConfiguration(); + Objects.requireNonNull(configurationImage, "configurationImage"); + try { + ConfigurationImageFile.saveToFile(configurationImage, fileName); + System.exit(0); + } catch (IOException e) { + System.out.println("While writing " + e); + System.exit(-1); + } + } + + @Override + public void onConnectionFailed() { + System.out.println("onConnectionFailed"); + System.exit(-1); + } + }); } - private static void sendCommand(String command) throws IOException { String autoDetectedPort = autoDetectPort(); if (autoDetectedPort == null) @@ -156,7 +181,8 @@ public class ConsoleTools { consoleTool.runTool(args); return true; } - return false; } + return false; + } @Nullable private static String autoDetectPort() { diff --git a/java_console/ui/src/com/rusefi/ui/FormulasPane.java b/java_console/ui/src/com/rusefi/ui/FormulasPane.java index 6ab3e89a27..5c5d5c4009 100644 --- a/java_console/ui/src/com/rusefi/ui/FormulasPane.java +++ b/java_console/ui/src/com/rusefi/ui/FormulasPane.java @@ -108,7 +108,7 @@ public class FormulasPane { BinaryProtocol bp = BinaryProtocolHolder.getInstance().getCurrentStreamState(); if (bp == null) return; - ConfigurationImage ci = bp.getController(); + ConfigurationImage ci = bp.getControllerConfiguration(); if (ci == null) return; diff --git a/java_console/ui/src/com/rusefi/ui/FuelTunePane.java b/java_console/ui/src/com/rusefi/ui/FuelTunePane.java index 9a125074c2..4a97d6ea1b 100644 --- a/java_console/ui/src/com/rusefi/ui/FuelTunePane.java +++ b/java_console/ui/src/com/rusefi/ui/FuelTunePane.java @@ -139,7 +139,7 @@ public class FuelTunePane { BinaryProtocol bp = BinaryProtocolHolder.getInstance().getCurrentStreamState(); if (newVeMap == null || bp == null) return; - ConfigurationImage ci = bp.getController().clone(); + ConfigurationImage ci = bp.getControllerConfiguration().clone(); System.arraycopy(newVeMap, 0, ci.getContent(), Fields.VETABLE.getOffset(), newVeMap.length); Runnable afterBurn = new Runnable() { @Override @@ -315,7 +315,7 @@ public class FuelTunePane { private byte[] reloadVeTable() { BinaryProtocol bp = BinaryProtocolHolder.getInstance().getCurrentStreamState(); - byte[] content = bp.getController().getContent(); + byte[] content = bp.getControllerConfiguration().getContent(); loadData(veTable.getXAxis(), content, veRpmOffset); loadData(veTable.getYAxis(), content, veLoadOffset); loadData(veTable, content, Fields.VETABLE.getOffset()); @@ -335,7 +335,7 @@ public class FuelTunePane { return; } for (int i = 0; i < array.length; i++) - array[i] = bp.getController().getByteBuffer(offset + 4 * i, 4).getFloat(); + array[i] = bp.getControllerConfiguration().getByteBuffer(offset + 4 * i, 4).getFloat(); System.out.println("FuelTunePane: Loaded " + Arrays.toString(array)); } diff --git a/java_console/ui/src/com/rusefi/ui/config/BaseConfigField.java b/java_console/ui/src/com/rusefi/ui/config/BaseConfigField.java index 1a652d9144..e39521e35e 100644 --- a/java_console/ui/src/com/rusefi/ui/config/BaseConfigField.java +++ b/java_console/ui/src/com/rusefi/ui/config/BaseConfigField.java @@ -31,7 +31,7 @@ public abstract class BaseConfigField { BinaryProtocol bp = BinaryProtocolHolder.getInstance().getCurrentStreamState(); if (bp == null) return; - ConfigurationImage ci = bp.getController(); + ConfigurationImage ci = bp.getControllerConfiguration(); if (ci == null) return; loadValue(ci); diff --git a/java_console/ui/src/com/rusefi/ui/livedocs/LiveDocPanel.java b/java_console/ui/src/com/rusefi/ui/livedocs/LiveDocPanel.java index 977394929e..22a33bf902 100644 --- a/java_console/ui/src/com/rusefi/ui/livedocs/LiveDocPanel.java +++ b/java_console/ui/src/com/rusefi/ui/livedocs/LiveDocPanel.java @@ -102,7 +102,7 @@ public class LiveDocPanel { result.actionsListAdd(new LiveDataContext(Fields.LDS_ENGINE_STATE_INDEX), new RefreshActions() { @Override public void refresh(BinaryProtocol bp, byte[] response) { - String value = field.getAnyValue(bp.getController()).toString(); + String value = field.getAnyValue(bp.getControllerConfiguration()).toString(); label.setText(value); } });