diff --git a/logger.dtd b/logger.dtd index 32690627..75536ad0 100644 --- a/logger.dtd +++ b/logger.dtd @@ -47,6 +47,12 @@ + + + + + + diff --git a/logger.xml b/logger.xml index a14c7e11..45759cf7 100644 --- a/logger.xml +++ b/logger.xml @@ -3,7 +3,7 @@ - + diff --git a/src/enginuity/Settings.java b/src/enginuity/Settings.java index ed39802e..2dee121d 100644 --- a/src/enginuity/Settings.java +++ b/src/enginuity/Settings.java @@ -21,9 +21,13 @@ package enginuity; +import enginuity.io.connection.ConnectionProperties; import static enginuity.util.ParamChecker.checkNotNullOrEmpty; -import java.awt.*; +import java.awt.Color; +import java.awt.Dimension; +import java.awt.Font; +import java.awt.Point; import java.io.File; import java.io.Serializable; import java.util.Vector; @@ -74,6 +78,7 @@ public class Settings implements Serializable { private Dimension loggerWindowSize = new Dimension(1000, 600); private Point loggerWindowLocation = new Point(); private boolean loggerWindowMaximized = false; + private ConnectionProperties loggerConnectionProperties; public Settings() { @@ -390,4 +395,11 @@ public class Settings implements Serializable { this.fileLoggingAbsoluteTimestamp = fileLoggingAbsoluteTimestamp; } + public ConnectionProperties getLoggerConnectionProperties() { + return loggerConnectionProperties; + } + + public void setLoggerConnectionProperties(ConnectionProperties loggerConnectionProperties) { + this.loggerConnectionProperties = loggerConnectionProperties; + } } \ No newline at end of file diff --git a/src/enginuity/io/connection/ConnectionPropertiesImpl.java b/src/enginuity/io/connection/ConnectionPropertiesImpl.java new file mode 100644 index 00000000..7c2bce36 --- /dev/null +++ b/src/enginuity/io/connection/ConnectionPropertiesImpl.java @@ -0,0 +1,57 @@ +package enginuity.io.connection; + +public final class ConnectionPropertiesImpl implements ConnectionProperties { + private final int baudRate; + private final int dataBits; + private final int stopBits; + private final int parity; + private final int connectTimeout; + private final int sendTimeout; + + + public ConnectionPropertiesImpl(int baudRate, int dataBits, int stopBits, int parity, int connectTimeout, int sendTimeout) { + this.baudRate = baudRate; + this.dataBits = dataBits; + this.stopBits = stopBits; + this.parity = parity; + this.connectTimeout = connectTimeout; + this.sendTimeout = sendTimeout; + } + + public int getBaudRate() { + return baudRate; + } + + public int getDataBits() { + return dataBits; + } + + public int getStopBits() { + return stopBits; + } + + public int getParity() { + return parity; + } + + public int getConnectTimeout() { + return connectTimeout; + } + + public int getSendTimeout() { + return sendTimeout; + } + + public String toString() { + StringBuilder builder = new StringBuilder(); + builder.append(getClass().getSimpleName()); + builder.append("[baudRate=").append(baudRate); + builder.append(", dataBits=").append(dataBits); + builder.append(", stopBits=").append(stopBits); + builder.append(", dataBits=").append(dataBits); + builder.append(", parity=").append(parity); + builder.append(", connectTimeout=").append(connectTimeout); + builder.append(", sendTimeout=").append(sendTimeout).append("]"); + return builder.toString(); + } +} diff --git a/src/enginuity/io/protocol/Protocol.java b/src/enginuity/io/protocol/Protocol.java index 83573f36..35badd8a 100644 --- a/src/enginuity/io/protocol/Protocol.java +++ b/src/enginuity/io/protocol/Protocol.java @@ -21,7 +21,6 @@ package enginuity.io.protocol; -import enginuity.io.connection.ConnectionProperties; import enginuity.logger.comms.query.EcuInit; import enginuity.logger.exception.InvalidResponseException; @@ -39,6 +38,4 @@ public interface Protocol { EcuInit parseEcuInitResponse(byte[] response); - ConnectionProperties getConnectionProperties(); - } diff --git a/src/enginuity/logger/EcuLogger.java b/src/enginuity/logger/EcuLogger.java index d7792227..9d3684b5 100644 --- a/src/enginuity/logger/EcuLogger.java +++ b/src/enginuity/logger/EcuLogger.java @@ -157,6 +157,7 @@ public final class EcuLogger extends JFrame implements WindowListener, PropertyC public EcuLogger(Settings settings) { super(ENGINUITY_ECU_LOGGER_TITLE); bootstrap(settings); + loadLoggerConfig(); initControllerListeners(); initUserInterface(); initDataUpdateHandlers(); @@ -251,6 +252,7 @@ public final class EcuLogger extends JFrame implements WindowListener, PropertyC loadEcuParams(ecuParams); loadEcuSwitches(dataLoader.getEcuSwitches()); initFileLoggingController(dataLoader.getFileLoggingControllerSwitch()); + settings.setLoggerConnectionProperties(dataLoader.getConnectionProperties()); } catch (Exception e) { reportError(e); } diff --git a/src/enginuity/logger/comms/controller/LoggerController.java b/src/enginuity/logger/comms/controller/LoggerController.java index e513d62b..90fc4ed3 100644 --- a/src/enginuity/logger/comms/controller/LoggerController.java +++ b/src/enginuity/logger/comms/controller/LoggerController.java @@ -41,5 +41,4 @@ public interface LoggerController { void stop(); void addListener(StatusChangeListener listener); - } diff --git a/src/enginuity/logger/comms/io/connection/LoggerConnectionFactory.java b/src/enginuity/logger/comms/io/connection/LoggerConnectionFactory.java index a0e75424..e018d450 100644 --- a/src/enginuity/logger/comms/io/connection/LoggerConnectionFactory.java +++ b/src/enginuity/logger/comms/io/connection/LoggerConnectionFactory.java @@ -21,6 +21,7 @@ package enginuity.logger.comms.io.connection; +import enginuity.io.connection.ConnectionProperties; import enginuity.logger.exception.UnsupportedProtocolException; public final class LoggerConnectionFactory { @@ -33,10 +34,10 @@ public final class LoggerConnectionFactory { private LoggerConnectionFactory() { } - public LoggerConnection getLoggerConnection(String protocolName, String portName) { + public LoggerConnection getLoggerConnection(String protocolName, String portName, ConnectionProperties connectionProperties) { try { Class cls = Class.forName(this.getClass().getPackage().getName() + "." + protocolName + "LoggerConnection"); - return (LoggerConnection) cls.getConstructor(String.class).newInstance(portName); + return (LoggerConnection) cls.getConstructor(String.class, ConnectionProperties.class).newInstance(portName, connectionProperties); } catch (Exception e) { throw new UnsupportedProtocolException("'" + protocolName + "' is not a supported protocol", e); } diff --git a/src/enginuity/logger/comms/io/connection/SSMLoggerConnection.java b/src/enginuity/logger/comms/io/connection/SSMLoggerConnection.java index 83759296..be28c1e7 100644 --- a/src/enginuity/logger/comms/io/connection/SSMLoggerConnection.java +++ b/src/enginuity/logger/comms/io/connection/SSMLoggerConnection.java @@ -21,6 +21,7 @@ package enginuity.logger.comms.io.connection; +import enginuity.io.connection.ConnectionProperties; import enginuity.io.connection.SerialConnection; import enginuity.io.connection.SerialConnectionImpl; import enginuity.logger.comms.io.protocol.LoggerProtocol; @@ -28,6 +29,8 @@ import enginuity.logger.comms.io.protocol.SSMLoggerProtocol; import enginuity.logger.comms.query.RegisteredQuery; import enginuity.logger.exception.SerialCommunicationException; import static enginuity.util.HexUtil.asHex; +import static enginuity.util.ParamChecker.checkNotNull; +import static enginuity.util.ParamChecker.checkNotNullOrEmpty; import static enginuity.util.ThreadUtil.sleep; import java.util.Collection; @@ -36,12 +39,14 @@ public final class SSMLoggerConnection implements LoggerConnection { private LoggerProtocol protocol; private SerialConnection serialConnection; - public SSMLoggerConnection(String portName) { + public SSMLoggerConnection(String portName, ConnectionProperties connectionProperties) { + checkNotNullOrEmpty(portName, "portName"); + checkNotNull(connectionProperties); protocol = new SSMLoggerProtocol(); // Use TestSSMConnectionImpl for testing!! - serialConnection = new SerialConnectionImpl(protocol.getConnectionProperties(), portName); -// serialConnection = new TestSSMConnectionImpl(protocol.getConnectionProperties(), portName); + serialConnection = new SerialConnectionImpl(connectionProperties, portName); +// serialConnection = new TestSSMConnectionImpl(connectionProperties, portName); } public void sendAddressReads(Collection queries) { diff --git a/src/enginuity/logger/comms/io/protocol/LoggerProtocol.java b/src/enginuity/logger/comms/io/protocol/LoggerProtocol.java index f6bd84a3..e1d71f98 100644 --- a/src/enginuity/logger/comms/io/protocol/LoggerProtocol.java +++ b/src/enginuity/logger/comms/io/protocol/LoggerProtocol.java @@ -21,7 +21,6 @@ package enginuity.logger.comms.io.protocol; -import enginuity.io.connection.ConnectionProperties; import enginuity.logger.comms.query.RegisteredQuery; import java.util.Collection; @@ -35,6 +34,4 @@ public interface LoggerProtocol { byte[] preprocessResponse(byte[] request, byte[] response); void processReadAddressResponses(Collection queries, byte[] response); - - ConnectionProperties getConnectionProperties(); } diff --git a/src/enginuity/logger/comms/io/protocol/SSMLoggerProtocol.java b/src/enginuity/logger/comms/io/protocol/SSMLoggerProtocol.java index 681127d4..55e5fb82 100644 --- a/src/enginuity/logger/comms/io/protocol/SSMLoggerProtocol.java +++ b/src/enginuity/logger/comms/io/protocol/SSMLoggerProtocol.java @@ -21,7 +21,6 @@ package enginuity.logger.comms.io.protocol; -import enginuity.io.connection.ConnectionProperties; import enginuity.io.protocol.Protocol; import enginuity.io.protocol.SSMProtocol; import static enginuity.io.protocol.SSMProtocol.ADDRESS_SIZE; @@ -82,10 +81,6 @@ public final class SSMLoggerProtocol implements LoggerProtocol { } } - public ConnectionProperties getConnectionProperties() { - return protocol.getConnectionProperties(); - } - private Collection filterDuplicates(Collection queries) { Collection filteredQueries = new ArrayList(); for (RegisteredQuery query : queries) { diff --git a/src/enginuity/logger/comms/manager/QueryManagerImpl.java b/src/enginuity/logger/comms/manager/QueryManagerImpl.java index dda198d9..b71dac86 100644 --- a/src/enginuity/logger/comms/manager/QueryManagerImpl.java +++ b/src/enginuity/logger/comms/manager/QueryManagerImpl.java @@ -38,7 +38,7 @@ import static enginuity.util.HexUtil.asHex; import static enginuity.util.ParamChecker.checkNotNull; import static enginuity.util.ThreadUtil.sleep; -import javax.swing.*; +import javax.swing.SwingUtilities; import java.text.DecimalFormat; import java.util.ArrayList; import static java.util.Collections.synchronizedList; @@ -119,7 +119,7 @@ public final class QueryManagerImpl implements QueryManager { private boolean doEcuInit() { try { Protocol protocol = ProtocolFactory.getInstance().getProtocol(settings.getLoggerProtocol()); - EcuConnection ecuConnection = new EcuConnectionImpl(protocol.getConnectionProperties(), settings.getLoggerPort()); + EcuConnection ecuConnection = new EcuConnectionImpl(settings.getLoggerConnectionProperties(), settings.getLoggerPort()); try { messageListener.reportMessage("Sending ECU Init..."); byte[] request = protocol.constructEcuInitRequest(); diff --git a/src/enginuity/logger/comms/manager/TransmissionManagerImpl.java b/src/enginuity/logger/comms/manager/TransmissionManagerImpl.java index f04ea7a6..9cff9819 100644 --- a/src/enginuity/logger/comms/manager/TransmissionManagerImpl.java +++ b/src/enginuity/logger/comms/manager/TransmissionManagerImpl.java @@ -42,8 +42,10 @@ public final class TransmissionManagerImpl implements TransmissionManager { public void start() { try { - connection = LoggerConnectionFactory.getInstance().getLoggerConnection(settings.getLoggerProtocol(), settings.getLoggerPort()); - System.out.println("Connected to: " + settings.getLoggerPort() + "; using protocol: " + settings.getLoggerProtocol()); + connection = LoggerConnectionFactory.getInstance().getLoggerConnection(settings.getLoggerProtocol(), settings.getLoggerPort(), + settings.getLoggerConnectionProperties()); + System.out.println("Connected to: " + settings.getLoggerPort() + "; using protocol: " + settings.getLoggerProtocol() + "; conn props: " + + settings.getLoggerConnectionProperties()); } catch (Throwable e) { stop(); throw new SerialCommunicationException("Unable to connect to port: " + settings.getLoggerPort() + ", with protocol: " diff --git a/src/enginuity/logger/definition/EcuDataLoader.java b/src/enginuity/logger/definition/EcuDataLoader.java index 9e43bb6f..799f3eef 100644 --- a/src/enginuity/logger/definition/EcuDataLoader.java +++ b/src/enginuity/logger/definition/EcuDataLoader.java @@ -21,6 +21,7 @@ package enginuity.logger.definition; +import enginuity.io.connection.ConnectionProperties; import enginuity.logger.comms.query.EcuInit; import java.util.List; @@ -35,4 +36,6 @@ public interface EcuDataLoader { List getEcuSwitches(); EcuSwitch getFileLoggingControllerSwitch(); + + ConnectionProperties getConnectionProperties(); } diff --git a/src/enginuity/logger/definition/EcuDataLoaderImpl.java b/src/enginuity/logger/definition/EcuDataLoaderImpl.java index 7ba9ffff..a40d7609 100644 --- a/src/enginuity/logger/definition/EcuDataLoaderImpl.java +++ b/src/enginuity/logger/definition/EcuDataLoaderImpl.java @@ -21,6 +21,7 @@ package enginuity.logger.definition; +import enginuity.io.connection.ConnectionProperties; import enginuity.logger.comms.query.EcuInit; import enginuity.logger.definition.xml.LoggerDefinitionHandler; import enginuity.logger.exception.ConfigurationException; @@ -38,6 +39,7 @@ public final class EcuDataLoaderImpl implements EcuDataLoader { private List ecuParameters = new ArrayList(); private List ecuSwitches = new ArrayList(); private EcuSwitch fileLoggingControllerSwitch; + private ConnectionProperties connectionProperties; public void loadFromXml(String loggerConfigFilePath, String protocol, String fileLoggingControllerSwitchId, EcuInit ecuInit) { checkNotNullOrEmpty(loggerConfigFilePath, "loggerConfigFilePath"); @@ -51,6 +53,7 @@ public final class EcuDataLoaderImpl implements EcuDataLoader { ecuParameters = handler.getEcuParameters(); ecuSwitches = handler.getEcuSwitches(); fileLoggingControllerSwitch = handler.getFileLoggingControllerSwitch(); + connectionProperties = handler.getConnectionProperties(); } finally { inputStream.close(); } @@ -70,4 +73,8 @@ public final class EcuDataLoaderImpl implements EcuDataLoader { public EcuSwitch getFileLoggingControllerSwitch() { return fileLoggingControllerSwitch; } + + public ConnectionProperties getConnectionProperties() { + return connectionProperties; + } } diff --git a/src/enginuity/logger/definition/xml/LoggerDefinitionHandler.java b/src/enginuity/logger/definition/xml/LoggerDefinitionHandler.java index 60b6ba22..c3d88b06 100644 --- a/src/enginuity/logger/definition/xml/LoggerDefinitionHandler.java +++ b/src/enginuity/logger/definition/xml/LoggerDefinitionHandler.java @@ -21,6 +21,8 @@ package enginuity.logger.definition.xml; +import enginuity.io.connection.ConnectionProperties; +import enginuity.io.connection.ConnectionPropertiesImpl; import enginuity.logger.comms.query.EcuInit; import enginuity.logger.definition.EcuData; import enginuity.logger.definition.EcuDataConvertor; @@ -72,12 +74,19 @@ public final class LoggerDefinitionHandler extends DefaultHandler { private static final String ATTR_BIT = "bit"; private static final String ATTR_PARAMETER = "parameter"; private static final String ATTR_STORAGETYPE = "storagetype"; + private static final String ATTR_BAUD = "baud"; + private static final String ATTR_DATABITS = "databits"; + private static final String ATTR_STOPBITS = "stopbits"; + private static final String ATTR_PARITY = "parity"; + private static final String ATTR_CONNECT_TIMEOUT = "connect_timeout"; + private static final String ATTR_SEND_TIMEOUT = "send_timeout"; private final String protocol; private final String fileLoggingControllerSwitchId; private final EcuInit ecuInit; private List params; private List switches; private EcuSwitch fileLoggingControllerSwitch; + private ConnectionProperties connectionProperties; private Map ecuDataMap; private String id; private String name; @@ -113,6 +122,12 @@ public final class LoggerDefinitionHandler extends DefaultHandler { public void startElement(String uri, String localName, String qName, Attributes attributes) { if (TAG_PROTOCOL.equals(qName)) { parseProtocol = protocol.equalsIgnoreCase(attributes.getValue(ATTR_ID)); + if (parseProtocol) { + connectionProperties = new ConnectionPropertiesImpl(Integer.parseInt(attributes.getValue(ATTR_BAUD)), + Integer.parseInt(attributes.getValue(ATTR_DATABITS)), Integer.parseInt(attributes.getValue(ATTR_STOPBITS)), + Integer.parseInt(attributes.getValue(ATTR_PARITY)), Integer.parseInt(attributes.getValue(ATTR_CONNECT_TIMEOUT)), + Integer.parseInt(attributes.getValue(ATTR_SEND_TIMEOUT))); + } } else if (parseProtocol) { if (TAG_PARAMETER.equals(qName)) { id = attributes.getValue(ATTR_ID); @@ -226,6 +241,22 @@ public final class LoggerDefinitionHandler extends DefaultHandler { } } + public List getEcuParameters() { + return params; + } + + public List getEcuSwitches() { + return switches; + } + + public EcuSwitch getFileLoggingControllerSwitch() { + return fileLoggingControllerSwitch; + } + + public ConnectionProperties getConnectionProperties() { + return connectionProperties; + } + private List getAddressList(String startAddress, int addressLength) { List addresses = new LinkedList(); int start = HexUtil.hexToInt(startAddress); @@ -263,18 +294,6 @@ public final class LoggerDefinitionHandler extends DefaultHandler { } } - public List getEcuParameters() { - return params; - } - - public List getEcuSwitches() { - return switches; - } - - public EcuSwitch getFileLoggingControllerSwitch() { - return fileLoggingControllerSwitch; - } - private String[] toArray(Set set) { String[] addresses = new String[set.size()]; set.toArray(addresses);