diff --git a/java_console/inifile/src/com/opensr5/ini/IniFileModel.java b/java_console/inifile/src/com/opensr5/ini/IniFileModel.java index 63a9478a2a..c354cac6a6 100644 --- a/java_console/inifile/src/com/opensr5/ini/IniFileModel.java +++ b/java_console/inifile/src/com/opensr5/ini/IniFileModel.java @@ -13,6 +13,7 @@ import java.util.*; public class IniFileModel { public static final String RUSEFI_INI_PREFIX = "rusefi"; public static final String RUSEFI_INI_SUFFIX = ".ini"; + public static final String INI_FILE_PATH = System.getProperty("ini_file_path", ".."); private static final String SECTION_PAGE = "page"; private static final String FIELD_TYPE_SCALAR = "scalar"; private static final String FIELD_TYPE_STRING = "string"; @@ -31,7 +32,7 @@ public class IniFileModel { public Map tooltips = new TreeMap<>(); public static void main(String[] args) { - System.out.println(IniFileModel.getInstance("..").dialogs); + System.out.println(IniFileModel.getInstance().dialogs); } private boolean isInSettingContextHelp = false; @@ -200,10 +201,10 @@ public class IniFileModel { DIALOG } - public static synchronized IniFileModel getInstance(String iniFilePath) { + public static synchronized IniFileModel getInstance() { if (INSTANCE == null) { INSTANCE = new IniFileModel(); - INSTANCE.readIniFile(iniFilePath); + INSTANCE.readIniFile(INI_FILE_PATH); } return INSTANCE; } diff --git a/java_console/ui/src/com/rusefi/Launcher.java b/java_console/ui/src/com/rusefi/Launcher.java index 9b68c18563..e866bedbfd 100644 --- a/java_console/ui/src/com/rusefi/Launcher.java +++ b/java_console/ui/src/com/rusefi/Launcher.java @@ -43,7 +43,6 @@ import static com.rusefi.ui.storage.PersistentConfiguration.getConfig; */ public class Launcher { public static final int CONSOLE_VERSION = 20200520; - public static final String INI_FILE_PATH = System.getProperty("ini_file_path", ".."); public static final String INPUT_FILES_PATH = System.getProperty("input_files_path", ".."); public static final String TOOLS_PATH = System.getProperty("tools_path", "."); public static final String TAB_INDEX = "main_tab"; diff --git a/java_console/ui/src/com/rusefi/tools/ConsoleTools.java b/java_console/ui/src/com/rusefi/tools/ConsoleTools.java index 5b5a06d8b4..86e2f38832 100644 --- a/java_console/ui/src/com/rusefi/tools/ConsoleTools.java +++ b/java_console/ui/src/com/rusefi/tools/ConsoleTools.java @@ -3,7 +3,6 @@ package com.rusefi.tools; import com.fathzer.soft.javaluator.DoubleEvaluator; import com.opensr5.ConfigurationImage; import com.opensr5.ini.IniFileModel; -import com.opensr5.ini.field.IniField; import com.opensr5.io.ConfigurationImageFile; import com.rusefi.*; import com.rusefi.autodetect.PortDetector; @@ -16,9 +15,9 @@ import com.rusefi.io.LinkManager; import com.rusefi.io.serial.SerialIoStreamJSerialComm; import com.rusefi.maintenance.ExecHelper; import com.rusefi.tools.online.Online; -import com.rusefi.tune.xml.Constant; import com.rusefi.tune.xml.Msq; import com.rusefi.xml.XmlUtil; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import javax.xml.bind.JAXBException; @@ -204,7 +203,6 @@ public class ConsoleTools { } private static void convertBinaryToXml(String[] args) throws IOException, JAXBException { - Msq tune = new Msq(); if (args.length < 2) { System.err.println("Binary file input expected"); @@ -214,28 +212,18 @@ public class ConsoleTools { ConfigurationImage image = ConfigurationImageFile.readFromFile(inputBinaryFileName); System.out.println("Got " + image.getSize() + " of configuration from " + inputBinaryFileName); - IniFileModel ini = IniFileModel.getInstance(Launcher.INI_FILE_PATH); + Msq tune = toMsq(image); + XmlUtil.writeXml(tune, Msq.class, Msq.outputXmlFileName); + Online.upload(new File(Msq.outputXmlFileName), "x"); + } + @NotNull + public static Msq toMsq(ConfigurationImage image) { + IniFileModel ini = IniFileModel.getInstance(); + Msq tune = new Msq(); for (String key : ini.allIniFields.keySet()) - handle(tune, ini, key, image); - -// handle(tune, ini, "injector_battLagCorrBins"); - - String outputXmlFile = "output.msq"; - XmlUtil.writeXml(tune, Msq.class, outputXmlFile); - Online.upload(new File(outputXmlFile), "x"); - } - - private static void handle(Msq tune, IniFileModel ini, String key, ConfigurationImage image) { - IniField field = ini.allIniFields.get(key); - tune.getPage().constant.add(prepareConstant(field, image)); - } - - private static Constant prepareConstant(IniField field, ConfigurationImage image) { - - String value = field.getValue(image); - - return new Constant(field.getName(), field.getUnits(), value); + tune.loadConstant(ini, key, image); + return tune; } interface ConsoleTool { diff --git a/java_console/ui/src/com/rusefi/tune/xml/Msq.java b/java_console/ui/src/com/rusefi/tune/xml/Msq.java index 5284f17629..8cdcbc6ae5 100644 --- a/java_console/ui/src/com/rusefi/tune/xml/Msq.java +++ b/java_console/ui/src/com/rusefi/tune/xml/Msq.java @@ -1,11 +1,17 @@ package com.rusefi.tune.xml; +import com.opensr5.ConfigurationImage; +import com.opensr5.ini.IniFileModel; +import com.opensr5.ini.field.IniField; + import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement public class Msq { + public static final String outputXmlFileName = "output.msq"; + private final Page page = new Page(); private final VersionInfo versionInfo; @@ -14,6 +20,12 @@ public class Msq { versionInfo = new VersionInfo("rusEFI+2020"); } + public void loadConstant(IniFileModel ini, String key, ConfigurationImage image) { + IniField field = ini.allIniFields.get(key); + String value = field.getValue(image); + getPage().constant.add(new Constant(field.getName(), field.getUnits(), value)); + } + @XmlAttribute public String getXmlns() { return "http://www.msefi.com/:msq"; diff --git a/java_console/ui/src/com/rusefi/ui/OnlineTab.java b/java_console/ui/src/com/rusefi/ui/OnlineTab.java index fcc90118a2..50df1de859 100644 --- a/java_console/ui/src/com/rusefi/ui/OnlineTab.java +++ b/java_console/ui/src/com/rusefi/ui/OnlineTab.java @@ -1,11 +1,19 @@ package com.rusefi.ui; +import com.rusefi.io.LinkManager; +import com.rusefi.tools.ConsoleTools; +import com.rusefi.tools.online.Online; +import com.rusefi.tune.xml.Msq; +import com.rusefi.xml.XmlUtil; import org.putgemin.VerticalFlowLayout; import javax.swing.*; +import javax.xml.bind.JAXBException; import java.awt.*; import java.awt.event.ActionEvent; +import java.io.File; +import java.io.IOException; import static com.rusefi.ui.storage.PersistentConfiguration.getConfig; @@ -30,6 +38,23 @@ public class OnlineTab { } }); content.add(save); + + + JButton upload = new JButton("Upload"); + upload.addActionListener(new AbstractAction() { + @Override + public void actionPerformed(ActionEvent e) { + Msq tune = ConsoleTools.toMsq(LinkManager.connector.getBinaryProtocol().getControllerConfiguration()); + try { + XmlUtil.writeXml(tune, Msq.class, Msq.outputXmlFileName); + // todo: network upload should not happen on UI thread + Online.upload(new File(Msq.outputXmlFileName), textField.getText()); + } catch (JAXBException | IOException ex) { + throw new IllegalStateException(ex); + } + } + }); + content.add(upload); } public JPanel getContent() { diff --git a/java_console/ui/src/com/rusefi/ui/console/SettingsTab.java b/java_console/ui/src/com/rusefi/ui/console/SettingsTab.java index a0a321f187..79ced56025 100644 --- a/java_console/ui/src/com/rusefi/ui/console/SettingsTab.java +++ b/java_console/ui/src/com/rusefi/ui/console/SettingsTab.java @@ -2,7 +2,6 @@ package com.rusefi.ui.console; import com.opensr5.ini.DialogModel; import com.opensr5.ini.IniFileModel; -import com.rusefi.Launcher; import com.rusefi.config.Field; import com.rusefi.config.FieldType; import com.rusefi.config.FieldsMap; @@ -40,7 +39,7 @@ public class SettingsTab { } public void showContent() { - final Map dialogs = IniFileModel.getInstance(Launcher.INI_FILE_PATH).getDialogs(); + final Map dialogs = IniFileModel.getInstance().getDialogs(); if (dialogs.isEmpty()) { content.removeAll(); content.add(new JLabel("Meta data not found: " + RUSEFI_INI_PREFIX + "*" + RUSEFI_INI_SUFFIX)); @@ -132,7 +131,7 @@ public class SettingsTab { dialog.setText(name); dialogBody.removeAll(); - DialogModel m = IniFileModel.getInstance(Launcher.INI_FILE_PATH).getDialogs().get(name); + DialogModel m = IniFileModel.getInstance().getDialogs().get(name); dialogBody.setLayout(new GridLayout(m.getFields().size(), 1)); 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 22a33bf902..d6de128e46 100644 --- a/java_console/ui/src/com/rusefi/ui/livedocs/LiveDocPanel.java +++ b/java_console/ui/src/com/rusefi/ui/livedocs/LiveDocPanel.java @@ -1,7 +1,6 @@ package com.rusefi.ui.livedocs; import com.opensr5.ConfigurationImage; -import com.rusefi.Launcher; import com.rusefi.binaryprotocol.BinaryProtocol; import com.rusefi.config.Field; import com.rusefi.config.generated.Fields; @@ -163,7 +162,7 @@ public class LiveDocPanel { } private static String getTooltipText(String configurationFieldName) { - DialogModel.Field dialogField = IniFileModel.getInstance(Launcher.INI_FILE_PATH).getField(configurationFieldName); + DialogModel.Field dialogField = IniFileModel.getInstance().getField(configurationFieldName); if (dialogField == null) { return "Configuration " + configurationFieldName; }