diff --git a/build.xml b/build.xml index c317713b..1588a783 100644 --- a/build.xml +++ b/build.xml @@ -3,7 +3,7 @@ @@ -76,10 +83,10 @@ - - - + + + @@ -167,6 +174,7 @@ + diff --git a/i18n/com/romraider/ECUExec.properties b/i18n/com/romraider/ECUExec.properties index 409d67d2..f4ad34e2 100644 --- a/i18n/com/romraider/ECUExec.properties +++ b/i18n/com/romraider/ECUExec.properties @@ -1,5 +1,5 @@ SUPPORT = When requesting assistance at {0}, please include the System Properties information below: -COMPATJRE = Incompatible JRE detected.\n{0} requires a 32-bit JRE for some operations.\nSome features may be unavailable. +COMPATJRE = Incompatible JRE detected.\n{0} Editor requires a {1}-bit JRE for full feature support. JREWARN = JRE Compatibility Warning ISRUNNING = {0} is already running. ERRROM = Error opening ROM diff --git a/i18n/com/romraider/logger/ecu/EcuLogger.properties b/i18n/com/romraider/logger/ecu/EcuLogger.properties index fd48095a..12a247fc 100644 --- a/i18n/com/romraider/logger/ecu/EcuLogger.properties +++ b/i18n/com/romraider/logger/ecu/EcuLogger.properties @@ -1,43 +1,43 @@ -TITLE = ECU/TCU Logger -FILENAMEEXTENTION = Right-click to select or type text to add to the saved logfile name. -TTTEXTF11 = Hides the parameter list and saves the state on exit (F11) -TTTEXTF9 = Un-select all selected parameters/switches on all tabs! (F9) -STARTFILELOG = Start file log -STOPFILELOG = Stop file log -TTTEXTF1 = Start/stop file logging (F1) -INITIALIZELOGGER = Initializing Logger ... -INCOMPJRE = Incompatible JRE detected.\n{0} RomRaider Logger requires a 32-bit JRE.\nLogger will now exit." -INCOMPJREERR = JRE Incompatibility Error -LOADINGDEFS = Loading Logger Defs ... -LOADINGPLUG = Loading Plugins ... -LOADINGPARAMS = Loading Logging Parameters ... -STARTINGLOGGER = Starting Logger ... -COMPLETE = Complete ... -READY = Ready ... -YES = Yes -NO = No -LOGGERDEFERROR = Error loading definition: -LOGGERDEFNOTCFG = Logger definition not configured.\nGo online to download the latest definition file? -LOGGERCONFIG = Logger Configuration -CFGEDFSMENU = The Logger definition file needs to be configured before connecting to the ECU.\nMenu: Settings > Logger Definition Location ...\nOnce configured, restart the Logger application. -PROFILENAME = Profile: {0} -LOAD = Load -CANCEL = Cancel -PROFILEWRONGPROTO = This profile was created for logging protocol {0}.\nSome parameters may not be selected by this profile if\nyou continue. Change protocols in the Settings menu\nthen reload this profile. -PROTOCOLMISMATCH = Protocol Mismatch -LOADPLUGINERR = Error loading plugin: {0} v{1} -BTNGAUGESTYLE = Gauge Style -BTNUNSELECTALL = Un-select ALL -BTNPARAMLIST = Parameter List -LOGFILETEXT = Logfile Text -TARGETID = Use Current {0} ID -PT = Part Throttle -WOT = Wide Open Throttle -CLT = Clear Logfile Text -COMPORT = COM Port: -TTTEXTRECON = Reconnect to {0} -TTTEXTDISCON = Disconnect from {0} -TTTEXTEXTERNALS = {0} Polling. Uncheck all boxes for Externals logging only. -RESET = Reset {0} [{1}] -RESETDATA = Reset Data -ERROR = Error: {0} +TITLE = ECU/TCU Logger +FILENAMEEXTENTION = Right-click to select or type text to add to the saved logfile name. +TTTEXTF11 = Hides the parameter list and saves the state on exit (F11) +TTTEXTF9 = Un-select all selected parameters/switches on all tabs! (F9) +STARTFILELOG = Start file log +STOPFILELOG = Stop file log +TTTEXTF1 = Start/stop file logging (F1) +INITIALIZELOGGER = Initializing Logger ... +INCOMPJRE = Incompatible JRE detected.\n{0} Logger requires a {1}-bit JRE.\nLogger will now exit. +INCOMPJREERR = JRE Incompatibility Error +LOADINGDEFS = Loading Logger Defs ... +LOADINGPLUG = Loading Plugins ... +LOADINGPARAMS = Loading Logging Parameters ... +STARTINGLOGGER = Starting Logger ... +COMPLETE = Complete ... +READY = Ready ... +YES = Yes +NO = No +LOGGERDEFERROR = Error loading definition: +LOGGERDEFNOTCFG = Logger definition not configured.\nGo online to download the latest definition file? +LOGGERCONFIG = Logger Configuration +CFGEDFSMENU = The Logger definition file needs to be configured before connecting to the ECU.\nMenu: Settings > Logger Definition Location ...\nOnce configured, restart the Logger application. +PROFILENAME = Profile: {0} +LOAD = Load +CANCEL = Cancel +PROFILEWRONGPROTO = This profile was created for logging protocol {0}.\nSome parameters may not be selected by this profile if\nyou continue. Change protocols in the Settings menu\nthen reload this profile. +PROTOCOLMISMATCH = Protocol Mismatch +LOADPLUGINERR = Error loading plugin: {0} v{1} +BTNGAUGESTYLE = Gauge Style +BTNUNSELECTALL = Un-select ALL +BTNPARAMLIST = Parameter List +LOGFILETEXT = Logfile Text +TARGETID = Use Current {0} ID +PT = Part Throttle +WOT = Wide Open Throttle +CLT = Clear Logfile Text +COMPORT = COM Port: +TTTEXTRECON = Reconnect to {0} +TTTEXTDISCON = Disconnect from {0} +TTTEXTEXTERNALS = {0} Polling. Uncheck all boxes for Externals logging only. +RESET = Reset {0} [{1}] +RESETDATA = Reset Data +ERROR = Error: {0} diff --git a/src/main/java/com/romraider/ECUExec.java b/src/main/java/com/romraider/ECUExec.java index 1ff04568..45cde25d 100644 --- a/src/main/java/com/romraider/ECUExec.java +++ b/src/main/java/com/romraider/ECUExec.java @@ -1,6 +1,6 @@ /* * RomRaider Open-Source Tuning, Logging and Reflashing - * Copyright (C) 2006-2019 RomRaider.com + * Copyright (C) 2006-2022 RomRaider.com * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -46,7 +46,6 @@ import org.apache.log4j.Logger; import com.romraider.editor.ecu.ECUEditor; import com.romraider.editor.ecu.ECUEditorManager; import com.romraider.logger.ecu.EcuLogger; -import com.romraider.util.JREChecker; import com.romraider.util.ResourceUtil; public class ECUExec { @@ -76,12 +75,15 @@ public class ECUExec { LOGGER.info("System Properties: \n\t" + System.getProperties().toString().replace(COMMA, "\n\t")); - // 64-bit won't work with the native libs (e.g. serial rxtx) but won't - // fail until we actually try to use them we'll just warn here - if (!JREChecker.is32bit() && + /** + * Bitness of supporting libraries must match the bitness of RomRaider + * and the running JRE. Notify if mixed bitness is detected. + */ + if (!System.getProperty("sun.arch.data.model").equals(Version.BUILD_ARCH) && !containsLoggerArg(args)) { showMessageDialog(null, - MessageFormat.format(rb.getString("COMPATJRE"), PRODUCT_NAME), + MessageFormat.format( + rb.getString("COMPATJRE"), PRODUCT_NAME, Version.BUILD_ARCH), rb.getString("JREWARN"), WARNING_MESSAGE); } @@ -92,10 +94,10 @@ public class ECUExec { // set look and feel initLookAndFeel(); setExecType(args); - + // check if already running - if (isRunning()) { - //The other exectuable will open us, close this app + if (isRunning()) { + // The other executable will open us, close this app EditorLoggerCommunication.sendTypeToOtherExec(args); } else { // open editor or logger @@ -104,7 +106,7 @@ public class ECUExec { } else { openEditor(DISPOSE_ON_CLOSE, args); } - + startExecCommunication(); } } @@ -113,7 +115,7 @@ public class ECUExec { Exec_type execType = containsLoggerArg(args) ? Exec_type.LOGGER : Exec_type.EDITOR; EditorLoggerCommunication.setExectable(execType, args); } - + public static void showAlreadyRunningMessage() { showMessageDialog(null, MessageFormat.format(rb.getString("ISRUNNING"), PRODUCT_NAME), @@ -122,7 +124,7 @@ public class ECUExec { private static boolean containsLoggerArg(String[] args) { for (String arg : args) { - if ( arg.equalsIgnoreCase(START_LOGGER_ARG) || + if ( arg.equalsIgnoreCase(START_LOGGER_ARG) || arg.equalsIgnoreCase(START_LOGGER_FULLSCREEN_ARG) || arg.equalsIgnoreCase(LOGGER_TOUCH_ARG)) { return true; @@ -150,31 +152,31 @@ public class ECUExec { while (true) { try { ExecutableInstance instance = EditorLoggerCommunication.waitForOtherExec(); - + if(instance.execType == Exec_type.LOGGER) { if(EditorLoggerCommunication.getExecutableType() == Exec_type.LOGGER || EcuLogger.getEcuLoggerWithoutCreation() != null) { showAlreadyRunningMessage(); continue; } - - openLogger(DISPOSE_ON_CLOSE, instance.currentArgs); + + openLogger(DISPOSE_ON_CLOSE, instance.currentArgs); LOGGER.info("Opening Logger with args: " + Arrays.toString(instance.currentArgs)); } else if(instance.execType == Exec_type.EDITOR) { - openEditor(DISPOSE_ON_CLOSE, instance.currentArgs); - - if(EditorLoggerCommunication.getExecutableType() == Exec_type.LOGGER) { + openEditor(DISPOSE_ON_CLOSE, instance.currentArgs); + + if(EditorLoggerCommunication.getExecutableType() == Exec_type.LOGGER) { EcuLogger.getEcuLoggerWithoutCreation().setEcuEditor( ECUEditorManager.getECUEditorWithoutCreation()); } - + LOGGER.info("Opening Editor with args: " + Arrays.toString(instance.currentArgs)); } else { LOGGER.error("Unknown type in Editor/Logger communication with args: " + Arrays.toString(instance.currentArgs)); } - + } catch (IOException e) { e.printStackTrace(); } diff --git a/src/main/java/com/romraider/Version.java.template b/src/main/java/com/romraider/Version.java.template index e3a0ac7b..0a86275a 100644 --- a/src/main/java/com/romraider/Version.java.template +++ b/src/main/java/com/romraider/Version.java.template @@ -35,6 +35,7 @@ public final class Version { public static final String RELEASE_NOTES = "@release_notes@"; public static final ImageIcon ABOUT_ICON = new ImageIcon(Version.class.getClass().getResource("/graphics/romraider-ico-large.gif")); public static final int MIN_LOG_DEF_VERSION = @min.logger.def.version@; + public static final String BUILD_ARCH = "@build.arch@"; private Version() { } diff --git a/src/main/java/com/romraider/logger/ecu/EcuLogger.java b/src/main/java/com/romraider/logger/ecu/EcuLogger.java index 1ea1ec08..1d1b2fa8 100644 --- a/src/main/java/com/romraider/logger/ecu/EcuLogger.java +++ b/src/main/java/com/romraider/logger/ecu/EcuLogger.java @@ -1,6 +1,6 @@ /* * RomRaider Open-Source Tuning, Logging and Reflashing - * Copyright (C) 2006-2021 RomRaider.com + * Copyright (C) 2006-2022 RomRaider.com * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -114,6 +114,7 @@ import org.apache.log4j.Level; import org.apache.log4j.Logger; import com.romraider.Settings; +import com.romraider.Version; import com.romraider.editor.ecu.ECUEditor; import com.romraider.editor.ecu.ECUEditorManager; import com.romraider.io.serial.port.SerialPortRefresher; @@ -191,7 +192,6 @@ import com.romraider.logger.external.core.ExternalDataSourceLoaderImpl; import com.romraider.swing.AbstractFrame; import com.romraider.swing.SetFont; import com.romraider.util.FormatFilename; -import com.romraider.util.JREChecker; import com.romraider.util.ResourceUtil; import com.romraider.util.SettingsManager; @@ -297,13 +297,13 @@ public final class EcuLogger extends AbstractFrame implements MessageListener { private Map componentList = new HashMap(); private static boolean touchEnabled = false; private final JPanel moduleSelectPanel = new JPanel(new FlowLayout()); - + private static EcuLogger instance; - + public static EcuLogger getEcuLoggerWithoutCreation() { return instance; } - + public static EcuLogger getEcuLogger(ECUEditor ecuEditor) { if (instance != null ) return instance; else { @@ -311,34 +311,35 @@ public final class EcuLogger extends AbstractFrame implements MessageListener { return instance; } } - + private EcuLogger(ECUEditor ecuEditor) { super(ECU_LOGGER_TITLE); this.ecuEditor = ecuEditor; construct(); } - + public void setEcuEditor(ECUEditor ecuEditor) { this.ecuEditor = ecuEditor; - + mafTab = new MafTabImpl(mafTabBroker, ecuEditor); injectorTab = new InjectorTabImpl(injectorTabBroker, ecuEditor); dynoTab = new DynoTabImpl(dynoTabBroker, ecuEditor); - + injectorUpdateHandler.setInjectorTab(injectorTab); mafUpdateHandler.setMafTab(mafTab); dynoUpdateHandler.setDynoTab(dynoTab); } - + private void construct() { - // 64-bit won't work with the native libs (e.g. serial rxtx) but won't - // fail until we actually try to use them since the logger requires - // these libraries, this is a hard error here - if (!JREChecker.is32bit()) { + /** + * Bitness of supporting libraries must match the bitness of RomRaider + * and the running JRE. Notify and exit if mixed bitness is detected. + */ + if (!System.getProperty("sun.arch.data.model").equals(Version.BUILD_ARCH)) { showMessageDialog(null, MessageFormat.format( rb.getString("INCOMPJRE"), - PRODUCT_NAME), + PRODUCT_NAME, Version.BUILD_ARCH), rb.getString("INCOMPJREERR"), ERROR_MESSAGE); // this will generate a NullPointerException because we never got @@ -392,6 +393,7 @@ public final class EcuLogger extends AbstractFrame implements MessageListener { if (!isLogging()) startLogging(); ecuEditor.getStatusPanel().update(rb.getString("READY"),0); } + this.toFront(); } private void bootstrap() { @@ -445,22 +447,22 @@ public final class EcuLogger extends AbstractFrame implements MessageListener { controller = new LoggerControllerImpl(ecuInitCallback, this, liveDataUpdateHandler, graphUpdateHandler, dashboardUpdateHandler, mafUpdateHandler, injectorUpdateHandler, dynoUpdateHandler, fileUpdateHandler, TableUpdateHandler.getInstance()); - + mafHandlerManager = new DataUpdateHandlerManagerImpl(); - mafTabBroker = new DataRegistrationBrokerImpl(controller, mafHandlerManager); - mafTab = new MafTabImpl(mafTabBroker, ecuEditor); + mafTabBroker = new DataRegistrationBrokerImpl(controller, mafHandlerManager); + mafTab = new MafTabImpl(mafTabBroker, ecuEditor); mafUpdateHandler.setMafTab(mafTab); - - injectorHandlerManager = new DataUpdateHandlerManagerImpl(); + + injectorHandlerManager = new DataUpdateHandlerManagerImpl(); injectorTabBroker = new DataRegistrationBrokerImpl(controller, injectorHandlerManager); - injectorTab = new InjectorTabImpl(injectorTabBroker, ecuEditor); + injectorTab = new InjectorTabImpl(injectorTabBroker, ecuEditor); injectorUpdateHandler.setInjectorTab(injectorTab); - + dynoHandlerManager = new DataUpdateHandlerManagerImpl(); dynoTabBroker = new DataRegistrationBrokerImpl(controller, dynoHandlerManager); dynoTab = new DynoTabImpl(dynoTabBroker, ecuEditor); dynoUpdateHandler.setDynoTab(dynoTab); - + resetManager = new ResetManagerImpl(this); messageLabel = new JLabel(ECU_LOGGER_TITLE); calIdLabel = new JLabel(buildEcuInfoLabelText(CAL_ID_LABEL, null)); @@ -483,9 +485,6 @@ public final class EcuLogger extends AbstractFrame implements MessageListener { dashboardTabParamListTableModel = new ParameterListTableModel(dashboardTabBroker, HEADING_PARAMETERS); dashboardTabSwitchListTableModel = new ParameterListTableModel(dashboardTabBroker, HEADING_SWITCHES); dashboardTabExternalListTableModel = new ParameterListTableModel(dashboardTabBroker, HEADING_EXTERNAL); - - - } public void loadLoggerParams() { @@ -629,7 +628,7 @@ public final class EcuLogger extends AbstractFrame implements MessageListener { } } } - + private void showErrorConfigDialog(Exception e) { Object[] options = {"OK"}; showOptionDialog(this, @@ -641,7 +640,7 @@ public final class EcuLogger extends AbstractFrame implements MessageListener { options, options[0]); } - + private void showMissingConfigDialog() { Object[] options = {rb.getString("YES"), rb.getString("NO")}; int answer = showOptionDialog(this, @@ -1000,7 +999,7 @@ public final class EcuLogger extends AbstractFrame implements MessageListener { buildToggleGaugeStyleButton()); tabbedPane.add("MAF", mafTab.getPanel()); tabbedPane.add("Injector", injectorTab.getPanel()); - tabbedPane.add("Dyno", dynoTab.getPanel()); + tabbedPane.add("Dyno", dynoTab.getPanel()); } else { @@ -1039,9 +1038,10 @@ public final class EcuLogger extends AbstractFrame implements MessageListener { tabbedPane.add("" + "Injector"+ "", injectorTab.getPanel()); tabbedPane.add("" + "Dyno" + "", dynoTab.getPanel()); } - + //Check for definitions only when we open the dyno tab - tabbedPane.addChangeListener(new ChangeListener() { + tabbedPane.addChangeListener(new ChangeListener() { + @Override public void stateChanged(ChangeEvent e) { if(tabbedPane.getSelectedComponent() == dynoTab.getPanel()) { @@ -1049,7 +1049,7 @@ public final class EcuLogger extends AbstractFrame implements MessageListener { } } }); - + return tabbedPane; } @@ -1590,7 +1590,7 @@ public final class EcuLogger extends AbstractFrame implements MessageListener { cb.setSelected(true); setTarget(module.getName()); } - + cb.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent actionEvent) { @@ -1606,7 +1606,7 @@ public final class EcuLogger extends AbstractFrame implements MessageListener { startLogging(); } }); - + moduleGroup.add(cb); moduleSelectPanel.add(cb); moduleSelectPanel.validate(); @@ -1666,7 +1666,7 @@ public final class EcuLogger extends AbstractFrame implements MessageListener { private Transport getTransportById(String id) { Transport loggerTransport = null; Map> transportMap = getTransportMap(); - + for (Transport transport : transportMap.keySet()) { if (transport.getId().equalsIgnoreCase(id)) loggerTransport = transport; @@ -1675,17 +1675,17 @@ public final class EcuLogger extends AbstractFrame implements MessageListener { return loggerTransport; } - public void updateElmSelectable() { + public void updateElmSelectable() { boolean value = getSettings().isObdProtocol(); RadioButtonMenuItem c = (RadioButtonMenuItem)getComponentList().get("elmEnabled"); - c.setEnabled(value); - + c.setEnabled(value); + if(!value) { c.setSelected(false); getSettings().setElm327Enabled(false); } } - + private Map> getTransportMap() { return protocolList.get(getSettings().getLoggerProtocol()); } @@ -1928,10 +1928,10 @@ public final class EcuLogger extends AbstractFrame implements MessageListener { saveSettings(); backupCurrentProfile(); LOGGER.info("Logger shutdown successful"); - - if(ECUEditorManager.getECUEditorWithoutCreation() == null) { + + if(ECUEditorManager.getECUEditorWithoutCreation() == null) { System.exit(0); - } + } else { instance = null; } @@ -2073,8 +2073,8 @@ public final class EcuLogger extends AbstractFrame implements MessageListener { getSettings().setRefreshMode(refreshMode); refresher.setRefreshMode(refreshMode); } - - public void setElmEnabled(Boolean value) { + + public void setElmEnabled(Boolean value) { getSettings().setElm327Enabled(value); } @@ -2112,7 +2112,7 @@ public final class EcuLogger extends AbstractFrame implements MessageListener { private static boolean containsFullScreenArg(String... args) { if(args == null) return false; - + for (String arg : args) { if (LOGGER_FULLSCREEN_ARG.equalsIgnoreCase(arg)) return true; } @@ -2121,7 +2121,7 @@ public final class EcuLogger extends AbstractFrame implements MessageListener { private static boolean setTouchEnabled(String... args) { if(args == null) return false; - + for (String arg : args) { if (LOGGER_TOUCH_ARG.equalsIgnoreCase(arg)) return true; } diff --git a/src/main/java/com/romraider/util/JREChecker.java b/src/main/java/com/romraider/util/JREChecker.java deleted file mode 100644 index 571af836..00000000 --- a/src/main/java/com/romraider/util/JREChecker.java +++ /dev/null @@ -1,59 +0,0 @@ -/* - * RomRaider Open-Source Tuning, Logging and Reflashing - * Copyright (C) 2006-2012 RomRaider.com - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -package com.romraider.util; - -/** - * @author Steve Wadsworth - * @since 2012-12-30 - * - * This class is intended to contain utility methods needed to determine various - * parameters of the JVM in which the application is running. - * - */ - -public final class JREChecker { - - /** - * Check to see if the JVM is 32-bit - * - * @return true if JVM is 32-bit - */ - public static boolean is32bit() { - // determine if we're running in a 32-bit JVM - // this may need to be extended for other JVM providers and versions - String bitness = System.getProperty("sun.arch.data.model", "unknown"); - // if we don't know, try harder - additional tests can be added here as - // necessary - if (bitness.equals("unknown")) { - // if sun.arch.data.model isn't found, we may be on a non-Sun - // (Oracle) VM try some other properties - if (System.getProperty("java.vm.name").indexOf("64") >= 0 || - System.getProperty("sun.cpu.isalist").indexOf("64") >= 0) { - bitness = "64"; - } - } - // should be either 32, 64, or still unknown. only known 32 should - // return true - if (bitness.equals("32")) { - return true; - } - return false; - } -} diff --git a/version.properties b/version.properties index 2f901370..5d47acef 100644 --- a/version.properties +++ b/version.properties @@ -22,9 +22,10 @@ version.major=0 version.minor=8 version.patch=2 version.buildnumber=1059 -version.extra=DEC04 -version.extra1=2021 +version.extra=${mnth.day} +version.extra1=${time.year} min.logger.def.version=370 +build.arch=${sun.arch.data.model} # the starting class for the application class.start=com.romraider.ECUExec