logger connection handling enhancements

git-svn-id: http://svn.3splooges.com/romraider-arch/trunk@554 d2e2e1cd-ba16-0410-be16-b7c4453c7c2d
This commit is contained in:
kascade 2007-03-03 11:33:11 +00:00
parent 654083b147
commit dc82ba910b
16 changed files with 137 additions and 35 deletions

View File

@ -47,6 +47,12 @@
<!ELEMENT protocol ( parameters?, switches?, ecuparams? ) >
<!ATTLIST protocol id ID #REQUIRED >
<!ATTLIST protocol baud CDATA #REQUIRED >
<!ATTLIST protocol databits CDATA #REQUIRED >
<!ATTLIST protocol stopbits CDATA #REQUIRED >
<!ATTLIST protocol parity CDATA #REQUIRED >
<!ATTLIST protocol connect_timeout CDATA #REQUIRED >
<!ATTLIST protocol send_timeout CDATA #REQUIRED >
<!ELEMENT protocols ( protocol+ ) >

View File

@ -3,7 +3,7 @@
<logger>
<protocols>
<protocol id="SSM">
<protocol id="SSM" baud="4800" databits="8" stopbits="1" parity="0" connect_timeout="2000" send_timeout="55">
<parameters>

View File

@ -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;
}
}

View File

@ -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();
}
}

View File

@ -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();
}

View File

@ -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);
}

View File

@ -41,5 +41,4 @@ public interface LoggerController {
void stop();
void addListener(StatusChangeListener listener);
}

View File

@ -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);
}

View File

@ -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<RegisteredQuery> queries) {

View File

@ -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<RegisteredQuery> queries, byte[] response);
ConnectionProperties getConnectionProperties();
}

View File

@ -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<RegisteredQuery> filterDuplicates(Collection<RegisteredQuery> queries) {
Collection<RegisteredQuery> filteredQueries = new ArrayList<RegisteredQuery>();
for (RegisteredQuery query : queries) {

View File

@ -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();

View File

@ -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: "

View File

@ -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<EcuSwitch> getEcuSwitches();
EcuSwitch getFileLoggingControllerSwitch();
ConnectionProperties getConnectionProperties();
}

View File

@ -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<EcuParameter> ecuParameters = new ArrayList<EcuParameter>();
private List<EcuSwitch> ecuSwitches = new ArrayList<EcuSwitch>();
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;
}
}

View File

@ -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<EcuParameter> params;
private List<EcuSwitch> switches;
private EcuSwitch fileLoggingControllerSwitch;
private ConnectionProperties connectionProperties;
private Map<String, EcuData> 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<EcuParameter> getEcuParameters() {
return params;
}
public List<EcuSwitch> getEcuSwitches() {
return switches;
}
public EcuSwitch getFileLoggingControllerSwitch() {
return fileLoggingControllerSwitch;
}
public ConnectionProperties getConnectionProperties() {
return connectionProperties;
}
private List<String> getAddressList(String startAddress, int addressLength) {
List<String> addresses = new LinkedList<String>();
int start = HexUtil.hexToInt(startAddress);
@ -263,18 +294,6 @@ public final class LoggerDefinitionHandler extends DefaultHandler {
}
}
public List<EcuParameter> getEcuParameters() {
return params;
}
public List<EcuSwitch> getEcuSwitches() {
return switches;
}
public EcuSwitch getFileLoggingControllerSwitch() {
return fileLoggingControllerSwitch;
}
private String[] toArray(Set<String> set) {
String[] addresses = new String[set.size()];
set.toArray(addresses);