diff --git a/.classpath b/.classpath
index 2c98cb34..50072831 100644
--- a/.classpath
+++ b/.classpath
@@ -20,11 +20,7 @@
-
-
-
-
-
+
diff --git a/build.xml b/build.xml
index 2425a060..cd006bfb 100644
--- a/build.xml
+++ b/build.xml
@@ -75,7 +75,7 @@
-
+
diff --git a/src/main/java/com/romraider/io/elm327/ElmConnection.java b/src/main/java/com/romraider/io/elm327/ElmConnection.java
index a3ffe875..a53ab906 100644
--- a/src/main/java/com/romraider/io/elm327/ElmConnection.java
+++ b/src/main/java/com/romraider/io/elm327/ElmConnection.java
@@ -178,17 +178,20 @@ public final class ElmConnection {
try {
return (SerialPort) portIdentifier.open(this.getClass().getName(), connectTimeout);
} catch (PortInUseException e) {
- throw new SerialCommunicationException("Port is currently in use: " + portIdentifier.getName());
+ throw new SerialCommunicationException("Port is currently in use: "
+ + portIdentifier.getName());
}
}
private void checkIsSerialPort(CommPortIdentifier portIdentifier) {
if (portIdentifier.getPortType() != PORT_SERIAL) {
- throw new UnsupportedPortTypeException("Port type " + portIdentifier.getPortType() + " not supported - must be serial.");
+ throw new UnsupportedPortTypeException("Port type "
+ + portIdentifier.getPortType() + " not supported - must be serial.");
}
}
- private void initSerialPort(SerialPort serialPort, int baudrate, int dataBits, int stopBits, int parity) {
+ private void initSerialPort(SerialPort serialPort, int baudrate, int dataBits,
+ int stopBits, int parity) {
try {
serialPort.setFlowControlMode(FLOWCONTROL_NONE);
serialPort.setSerialPortParams(baudrate, dataBits, stopBits, parity);
diff --git a/src/main/java/com/romraider/io/elm327/ElmConnectionManager.java b/src/main/java/com/romraider/io/elm327/ElmConnectionManager.java
index a637d39f..608eea20 100644
--- a/src/main/java/com/romraider/io/elm327/ElmConnectionManager.java
+++ b/src/main/java/com/romraider/io/elm327/ElmConnectionManager.java
@@ -33,7 +33,6 @@ import com.romraider.io.connection.ConnectionManager;
import com.romraider.io.connection.ConnectionProperties;
import com.romraider.logger.ecu.comms.manager.PollingState;
-import com.romraider.logger.ecu.definition.Module;
import com.romraider.logger.ecu.exception.SerialCommunicationException;
public final class ElmConnectionManager implements ConnectionManager {
@@ -41,56 +40,52 @@ public final class ElmConnectionManager implements ConnectionManager {
private static final Logger LOGGER = getLogger(ElmConnectionManager.class);
private final ElmConnection connection;
- private final ConnectionProperties connectionProperties;
+ // private final ConnectionProperties connectionProperties;
private int elmMode = 0;
- private final long timeout;
- private long readTimeout;
+ //private final long timeout;
+ //private long readTimeout;
private ElmConnectionManager(String portName, ConnectionProperties connectionProperties) {
checkNotNullOrEmpty(portName, "portName");
checkNotNull(connectionProperties, "connectionProperties");
- this.connectionProperties = connectionProperties;
- timeout = connectionProperties.getConnectTimeout();
- readTimeout = timeout;
+ // this.connectionProperties = connectionProperties;
+ // timeout = connectionProperties.getConnectTimeout();
+ // readTimeout = timeout;
connection = new ElmConnection(portName);
}
private int parseProtocolType(String protocol) {
- String s = protocol.toLowerCase();
+ String s = protocol.toLowerCase().trim();
- switch(s) {
- case "automatic":
+ if(s.equals("automatic"))
return 0;
- case "saej1850-pwm":
+ else if(s.equals("saej1850-pwm"))
return 1;
- case "sae1850-vpw":
+ else if(s.equals("sae1850-vpw"))
return 2;
- case "iso9141-2":
+ else if(s.equals("iso9141-2"))
return 3;
- case "iso4230-4kwp-5":
+ else if(s.equals("iso4230-4kwp-5"))
return 4;
- case "iso14230-4kwp-fast":
+ else if(s.equals("iso14230-4kwp-fast"))
return 5;
-
- //Fallthrough, so it works with the default CAN OBD setting
- case "iso15765":
- case "iso15765-4can11-500":
+ else if(s.equals("iso15765") || s.equals("iso15765-4can11-500"))
return 6;
- case "iso15765-4can29-500":
+ else if(s.equals("iso15765-4can29-500"))
return 7;
- case "iso15765-4can11-250":
+ else if(s.equals("iso15765-4can11-250"))
return 8;
- case "iso15765-4can29-250":
+ else if(s.equals("iso15765-4can29-250"))
return 9;
- case "isoj1939-250":
- return 10;
- }
-
- return -1;
+ else if(s.equals("isoj1939-250"))
+ return 10;
+ else
+ return -1;
}
- public static ElmConnectionManager getInstance(String portName, ConnectionProperties connectionProperties) {
+ public static ElmConnectionManager getInstance(String portName,
+ ConnectionProperties connectionProperties) {
if(instance == null) {
instance = new ElmConnectionManager(portName, connectionProperties);
}
@@ -141,7 +136,8 @@ public final class ElmConnectionManager implements ConnectionManager {
elmMode = parseProtocolType(transportProtcol);
if(elmMode == -1) {
- LOGGER.error("Unknown ELM Protocol, check xml for available modes! Supplied mode: " + transportProtcol);
+ LOGGER.error("Unknown ELM Protocol, check xml for"
+ + " available modes! Supplied mode: " + transportProtcol);
return false;
}
@@ -298,12 +294,14 @@ public final class ElmConnectionManager implements ConnectionManager {
@Override
public void send(byte[] request, byte[] response, PollingState pollState) {
- throw new java.lang.UnsupportedOperationException("Send does not work with bytes on ELM Connection");
+ throw new java.lang.UnsupportedOperationException("Send does not work"
+ + " with bytes on ELM Connection");
}
@Override
public byte[] send(byte[] bytes) {
- throw new java.lang.UnsupportedOperationException("Send does not work with bytes on ELM Connection");
+ throw new java.lang.UnsupportedOperationException("Send does not work"
+ + " with bytes on ELM Connection");
}
}
diff --git a/src/main/java/com/romraider/io/serial/port/SerialPortDiscovererImpl.java b/src/main/java/com/romraider/io/serial/port/SerialPortDiscovererImpl.java
index 99f0594e..3bd6a886 100644
--- a/src/main/java/com/romraider/io/serial/port/SerialPortDiscovererImpl.java
+++ b/src/main/java/com/romraider/io/serial/port/SerialPortDiscovererImpl.java
@@ -22,21 +22,37 @@ package com.romraider.io.serial.port;
import gnu.io.CommPortIdentifier;
import static gnu.io.CommPortIdentifier.PORT_SERIAL;
import static gnu.io.CommPortIdentifier.getPortIdentifiers;
+import static org.apache.log4j.Logger.getLogger;
+import org.apache.log4j.Logger;
+
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;
public final class SerialPortDiscovererImpl implements SerialPortDiscoverer {
+ private static final Logger LOGGER = getLogger(SerialPortDiscovererImpl.class);
+
@SuppressWarnings({"unchecked"})
public List listPorts() {
List serialPortIdentifiers = new ArrayList();
- Enumeration portEnum = getPortIdentifiers();
- while (portEnum.hasMoreElements()) {
- CommPortIdentifier portIdentifier = portEnum.nextElement();
- if (portIdentifier.getPortType() == PORT_SERIAL) {
- serialPortIdentifiers.add(portIdentifier);
- }
+
+ try {
+ Enumeration portEnum = getPortIdentifiers();
+ while (portEnum.hasMoreElements()) {
+ CommPortIdentifier portIdentifier = portEnum.nextElement();
+
+ if (portIdentifier.getPortType() == PORT_SERIAL) {
+ serialPortIdentifiers.add(portIdentifier);
+ }
+ }
}
+ catch(NoClassDefFoundError e) {
+ LOGGER.error("Could not load RXTX library!");
+ }
+ catch(UnsatisfiedLinkError e) {
+ LOGGER.error("Could not load RXTX library!");
+ }
+
return serialPortIdentifiers;
}
}
diff --git a/src/main/java/com/romraider/logger/ecu/comms/io/connection/ELMOBDLoggerConnection.java b/src/main/java/com/romraider/logger/ecu/comms/io/connection/ELMOBDLoggerConnection.java
index 5317a734..d255651c 100644
--- a/src/main/java/com/romraider/logger/ecu/comms/io/connection/ELMOBDLoggerConnection.java
+++ b/src/main/java/com/romraider/logger/ecu/comms/io/connection/ELMOBDLoggerConnection.java
@@ -53,22 +53,18 @@ public final class ELMOBDLoggerConnection implements LoggerConnection {
}
@Override
+ //ToDo
public void ecuReset(Module module, int resetCode) {
- /*
- byte[] request = protocol.constructEcuResetRequest(module, resetCode);
- LOGGER.debug(String.format("%s Reset Request ---> %s", module, asHex(request)));
- byte[] response = manager.send(request);
- byte[] processedResponse = protocol.preprocessResponse( request, response, new PollingStateImpl());
- LOGGER.debug(String.format("%s Reset Response <--- %s",module, asHex(processedResponse)));
- protocol.processEcuResetResponse(processedResponse);*/
}
+
@Override
public void ecuInit(EcuInitCallback callback, Module module) {
String moduleStr = concatBytes(module.getAddress());
String testerStr = concatBytes(module.getTester());
- boolean result = manager.resetAndInit(settings.getTransportProtocol(), moduleStr, testerStr);
+ boolean result = manager.resetAndInit(settings.getTransportProtocol(),
+ moduleStr, testerStr);
if(!result) {
throw new SerialCommunicationException("ELM327 was not found!");
@@ -95,7 +91,8 @@ public final class ELMOBDLoggerConnection implements LoggerConnection {
@Override
- public final void sendAddressReads(Collection queries, Module module, PollingState pollState) {
+ public final void sendAddressReads(Collection queries, Module module,
+ PollingState pollState) {
final int obdQueryListLength = queries.size();
for (int i = 0; i < obdQueryListLength; i++) {
diff --git a/src/main/java/com/romraider/logger/ecu/comms/io/connection/LoggerConnectionFactory.java b/src/main/java/com/romraider/logger/ecu/comms/io/connection/LoggerConnectionFactory.java
index 2941e884..22ee7127 100644
--- a/src/main/java/com/romraider/logger/ecu/comms/io/connection/LoggerConnectionFactory.java
+++ b/src/main/java/com/romraider/logger/ecu/comms/io/connection/LoggerConnectionFactory.java
@@ -1,6 +1,6 @@
/*
* RomRaider Open-Source Tuning, Logging and Reflashing
- * Copyright (C) 2006-2014 RomRaider.com
+ * Copyright (C) 2006-2020 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
@@ -38,14 +38,18 @@ public final class LoggerConnectionFactory {
return instantiateConnection(protocolName, manager);
}
- private static LoggerConnection instantiateConnection(String protocolName, ConnectionManager manager) {
- if(manager.getClass() == ElmConnectionManager.class && protocolName.equals("OBD")) {
+ private static LoggerConnection instantiateConnection(String protocolName,
+ ConnectionManager manager) {
+ if(manager.getClass() == ElmConnectionManager.class &&
+ protocolName.equals("OBD")) {
return new ELMOBDLoggerConnection((ElmConnectionManager)manager);
}
else {
try {
- Class> cls = Class.forName(LoggerConnectionFactory.class.getPackage().getName() + "." + protocolName + "LoggerConnection");
- return (LoggerConnection) cls.getConstructor(ConnectionManager.class).newInstance(manager);
+ Class> cls = Class.forName(LoggerConnectionFactory.
+ class.getPackage().getName() + "." + protocolName + "LoggerConnection");
+ return (LoggerConnection) cls.getConstructor(
+ ConnectionManager.class).newInstance(manager);
} catch (Exception e) {
manager.close();
throw new UnsupportedProtocolException(protocolName, e);
diff --git a/src/main/java/com/romraider/logger/ecu/definition/Transport.java b/src/main/java/com/romraider/logger/ecu/definition/Transport.java
index 4e371619..14b8e2b0 100644
--- a/src/main/java/com/romraider/logger/ecu/definition/Transport.java
+++ b/src/main/java/com/romraider/logger/ecu/definition/Transport.java
@@ -25,6 +25,11 @@ public final class Transport {
private final String id;
private final String name;
private final String description;
+
+ private int baudRateOverride = 500000;
+ private boolean extendedCANID = false; //11 or 29
+ private boolean saePWM = true; //PWM or VPW
+ private boolean isoKWPFast = false; //Fast or 5 Baud init
public Transport(String id, String name, String description) {
checkNotNull(name, "id");
@@ -34,7 +39,7 @@ public final class Transport {
this.name = name;
this.description = description;
}
-
+
public String getId() {
return id;
}
@@ -51,4 +56,74 @@ public final class Transport {
public String toString() {
return name;
}
+
+
+ /*
+ *
+ * These settings are used by the ELM327 Connection to define the protocol further
+ *
+ */
+
+ public boolean isExtendedCANID() {
+ return extendedCANID;
+ }
+
+ public void setExtendedCANID(String value) {
+ if(value == null) return;
+
+ if(value.trim().equals("11")) this.extendedCANID = false;
+ else
+ this.extendedCANID = true;
+ }
+
+ public void setExtendedCANID(boolean extendedCANID) {
+ this.extendedCANID = extendedCANID;
+ }
+ public int getBaudRateOverride() {
+ return baudRateOverride;
+ }
+
+ public void setBaudRateOverride(String baudRateOverride) {
+ if(baudRateOverride == null) return;
+
+ int rate = Integer.parseInt(baudRateOverride);
+ this.baudRateOverride = rate;
+ }
+
+ public void setBaudRateOverride(int baudRateOverride) {
+ this.baudRateOverride = baudRateOverride;
+ }
+
+ public boolean isSaePWM() {
+ return saePWM;
+ }
+
+ public void setSaePWM(String saePWM) {
+ if(saePWM == null) return;
+
+ if(saePWM.toLowerCase().trim().equals("pwm")) this.saePWM = true;
+ else
+ this.saePWM = false;
+ }
+
+ public void setSaePWM(boolean saePWM) {
+ this.saePWM = saePWM;
+ }
+
+
+ public boolean isIsoKWPFast() {
+ return isoKWPFast;
+ }
+
+ public void setIsoKWPFast(String isoKWPFast) {
+ if(isoKWPFast == null )return;
+
+ if(isoKWPFast.toLowerCase().trim().equals("fast")) this.isoKWPFast = true;
+ else
+ this.isoKWPFast = false;
+ }
+
+ public void setIsoKWPFast(boolean isoKWPFast) {
+ this.isoKWPFast = isoKWPFast;
+ }
}
diff --git a/src/main/java/com/romraider/logger/ecu/definition/xml/LoggerDefinitionHandler.java b/src/main/java/com/romraider/logger/ecu/definition/xml/LoggerDefinitionHandler.java
index d3a962d2..f223c157 100644
--- a/src/main/java/com/romraider/logger/ecu/definition/xml/LoggerDefinitionHandler.java
+++ b/src/main/java/com/romraider/logger/ecu/definition/xml/LoggerDefinitionHandler.java
@@ -97,6 +97,9 @@ public final class LoggerDefinitionHandler extends DefaultHandler {
private static final String ATTR_STORAGETYPE = "storagetype";
private static final String ATTR_ENDIAN = "endian";
private static final String ATTR_BAUD = "baud";
+ private static final String ATTR_CANID = "canid";
+ private static final String ATTR_SAE = "sae";
+ private static final String ATTR_KWP = "kwp";
private static final String ATTR_DATABITS = "databits";
private static final String ATTR_STOPBITS = "stopbits";
private static final String ATTR_PARITY = "parity";
@@ -205,6 +208,10 @@ public final class LoggerDefinitionHandler extends DefaultHandler {
desc = attributes.getValue(ATTR_DESC);
transport = new Transport(id, name, desc);
moduleList = new ArrayList();
+ transport.setBaudRateOverride(attributes.getValue(ATTR_BAUD));
+ transport.setExtendedCANID(attributes.getValue(ATTR_CANID));
+ transport.setIsoKWPFast(attributes.getValue(ATTR_KWP));
+ transport.setSaePWM(attributes.getValue(ATTR_SAE));
} else if (TAG_MODULE.equals(qName)) {
id = attributes.getValue(ATTR_ID);
final String modAddr = attributes.getValue(ATTR_ADDRESS);
diff --git a/src/main/java/com/romraider/logger/external/innovate/lm2/mts/plugin/Lm2MtsDataSource.java b/src/main/java/com/romraider/logger/external/innovate/lm2/mts/plugin/Lm2MtsDataSource.java
index 42f20066..971942fb 100644
--- a/src/main/java/com/romraider/logger/external/innovate/lm2/mts/plugin/Lm2MtsDataSource.java
+++ b/src/main/java/com/romraider/logger/external/innovate/lm2/mts/plugin/Lm2MtsDataSource.java
@@ -43,9 +43,6 @@ import com.romraider.logger.external.core.ExternalDataSource;
import com.romraider.logger.external.innovate.generic.mts.io.MTSConnector;
import com.romraider.logger.external.innovate.generic.mts.io.MTSRunner;
-import sun.misc.ExtensionInstallationException;
-
-
public final class Lm2MtsDataSource implements ExternalDataSource {
private static final Logger LOGGER = getLogger(Lm2MtsDataSource.class);
private Map dataItems = new HashMap();