simplified ecu response handling - still buggy

git-svn-id: http://svn.3splooges.com/romraider-arch/trunk@620 d2e2e1cd-ba16-0410-be16-b7c4453c7c2d
This commit is contained in:
kascade 2007-04-18 03:03:04 +00:00
parent 57281f5ec7
commit 7888dfae33
22 changed files with 203 additions and 163 deletions

View File

@ -27,7 +27,6 @@ import enginuity.logger.ecu.comms.controller.LoggerController;
import enginuity.logger.ecu.comms.controller.LoggerControllerImpl;
import enginuity.logger.ecu.comms.query.EcuInit;
import enginuity.logger.ecu.comms.query.EcuInitCallback;
import enginuity.logger.ecu.comms.query.LoggerCallback;
import enginuity.logger.ecu.definition.EcuDataLoader;
import enginuity.logger.ecu.definition.EcuDataLoaderImpl;
import enginuity.logger.ecu.definition.EcuParameter;
@ -142,6 +141,7 @@ public final class EcuLogger extends JFrame implements WindowListener, PropertyC
private JLabel statsLabel;
private JTabbedPane tabbedPane;
private SerialPortComboBox portsComboBox;
private DataUpdateHandlerManager dataUpdateHandlerManager;
private DataUpdateHandlerManager dataHandlerManager;
private DataRegistrationBroker dataTabBroker;
private ParameterListTableModel dataTabParamListTableModel;
@ -199,7 +199,8 @@ public final class EcuLogger extends JFrame implements WindowListener, PropertyC
}
}
};
controller = new LoggerControllerImpl(settings, ecuInitCallback, this);
dataUpdateHandlerManager = new DataUpdateHandlerManagerImpl();
controller = new LoggerControllerImpl(settings, ecuInitCallback, this, dataUpdateHandlerManager);
messageLabel = new JLabel(ENGINUITY_ECU_LOGGER_TITLE);
ecuIdLabel = new JLabel(buildEcuIdLabelText());
statsLabel = buildStatsLabel();
@ -227,6 +228,9 @@ public final class EcuLogger extends JFrame implements WindowListener, PropertyC
graphUpdateHandler = new GraphUpdateHandler(graphPanel);
dashboardPanel = new JPanel(new FlowLayout(FlowLayout.CENTER, 3, 3));
dashboardUpdateHandler = new DashboardUpdateHandler(dashboardPanel);
dataUpdateHandlerManager.addHandler(dataHandlerManager);
dataUpdateHandlerManager.addHandler(graphHandlerManager);
dataUpdateHandlerManager.addHandler(dashboardHandlerManager);
}
private void initControllerListeners() {
@ -302,20 +306,23 @@ public final class EcuLogger extends JFrame implements WindowListener, PropertyC
private void initFileLoggingController(final EcuSwitch fileLoggingControllerSwitch) {
// add logger and setup callback
controller.setFileLoggerSwitch(fileLoggingControllerSwitch, new LoggerCallback() {
public void callback(double value) {
// update handlers
if (settings.isFileLoggingControllerSwitchActive()) {
boolean logToFile = (int) value == 1;
logToFileButton.setSelected(logToFile);
if (logToFile) {
fileUpdateHandler.start();
} else {
fileUpdateHandler.stop();
}
}
}
});
controller.setFileLoggerSwitch(fileLoggingControllerSwitch);
//FIXME: Add auto button toggle on defog switch back in somehow! Use a FileLoggingUpdateHandler or something
// controller.setFileLoggerSwitch(fileLoggingControllerSwitch, new LoggerCallback() {
// public void callback(double value) {
// // update handlers
// if (settings.isFileLoggingControllerSwitchActive()) {
// boolean logToFile = (int) value == 1;
// logToFileButton.setSelected(logToFile);
// if (logToFile) {
// fileUpdateHandler.start();
// } else {
// fileUpdateHandler.stop();
// }
// }
// }
// });
}
private void applyUserProfile(UserProfile profile) {
@ -778,9 +785,7 @@ public final class EcuLogger extends JFrame implements WindowListener, PropertyC
}
private void cleanUpUpdateHandlers() {
dataHandlerManager.cleanUp();
graphHandlerManager.cleanUp();
dashboardHandlerManager.cleanUp();
dataUpdateHandlerManager.cleanUp();
}
public Settings getSettings() {

View File

@ -21,16 +21,15 @@
package enginuity.logger.ecu.comms.controller;
import enginuity.logger.ecu.comms.query.LoggerCallback;
import enginuity.logger.ecu.definition.EcuSwitch;
import enginuity.logger.ecu.definition.LoggerData;
import enginuity.logger.ecu.ui.StatusChangeListener;
public interface LoggerController {
void setFileLoggerSwitch(EcuSwitch ecuSwitch, LoggerCallback callback);
void setFileLoggerSwitch(EcuSwitch ecuSwitch);
void addLogger(String callerId, LoggerData loggerData, LoggerCallback callback);
void addLogger(String callerId, LoggerData loggerData);
void removeLogger(String callerId, LoggerData loggerData);

View File

@ -25,19 +25,20 @@ import enginuity.Settings;
import enginuity.logger.ecu.comms.manager.QueryManager;
import enginuity.logger.ecu.comms.manager.QueryManagerImpl;
import enginuity.logger.ecu.comms.query.EcuInitCallback;
import enginuity.logger.ecu.comms.query.LoggerCallback;
import enginuity.logger.ecu.definition.EcuSwitch;
import enginuity.logger.ecu.definition.LoggerData;
import enginuity.logger.ecu.ui.MessageListener;
import enginuity.logger.ecu.ui.StatusChangeListener;
import enginuity.logger.ecu.ui.handler.DataUpdateHandlerManager;
import static enginuity.util.ParamChecker.checkNotNull;
public final class LoggerControllerImpl implements LoggerController {
private final QueryManager queryManager;
public LoggerControllerImpl(Settings settings, EcuInitCallback ecuInitCallback, MessageListener messageListener) {
checkNotNull(settings, ecuInitCallback, messageListener);
queryManager = new QueryManagerImpl(settings, ecuInitCallback, messageListener);
public LoggerControllerImpl(Settings settings, EcuInitCallback ecuInitCallback, MessageListener messageListener,
DataUpdateHandlerManager dataUpdateHandlerManager) {
checkNotNull(settings, ecuInitCallback, messageListener, dataUpdateHandlerManager);
queryManager = new QueryManagerImpl(settings, ecuInitCallback, messageListener, dataUpdateHandlerManager);
}
public synchronized void addListener(StatusChangeListener listener) {
@ -45,16 +46,16 @@ public final class LoggerControllerImpl implements LoggerController {
queryManager.addListener(listener);
}
public void setFileLoggerSwitch(EcuSwitch ecuSwitch, LoggerCallback callback) {
checkNotNull(ecuSwitch, callback);
public void setFileLoggerSwitch(EcuSwitch ecuSwitch) {
checkNotNull(ecuSwitch);
System.out.println("Setting file logger switch: " + ecuSwitch.getName());
queryManager.setFileLoggerQuery(ecuSwitch, callback);
queryManager.setFileLoggerQuery(ecuSwitch);
}
public void addLogger(String callerId, LoggerData loggerData, LoggerCallback callback) {
checkNotNull(loggerData, callback);
public void addLogger(String callerId, LoggerData loggerData) {
checkNotNull(loggerData);
System.out.println("Adding logger: " + loggerData.getName());
queryManager.addQuery(callerId, loggerData, callback);
queryManager.addQuery(callerId, loggerData);
}
public void removeLogger(String callerId, LoggerData loggerData) {

View File

@ -21,16 +21,15 @@
package enginuity.logger.ecu.comms.manager;
import enginuity.logger.ecu.comms.query.LoggerCallback;
import enginuity.logger.ecu.definition.EcuSwitch;
import enginuity.logger.ecu.definition.LoggerData;
import enginuity.logger.ecu.ui.StatusChangeListener;
public interface QueryManager extends Runnable {
void setFileLoggerQuery(EcuSwitch ecuSwitch, LoggerCallback callback);
void setFileLoggerQuery(EcuSwitch ecuSwitch);
void addQuery(String callerId, LoggerData loggerData, LoggerCallback callback);
void addQuery(String callerId, LoggerData loggerData);
void removeQuery(String callerId, LoggerData loggerData);

View File

@ -31,8 +31,9 @@ import enginuity.logger.ecu.comms.query.EcuQuery;
import enginuity.logger.ecu.comms.query.EcuQueryImpl;
import enginuity.logger.ecu.comms.query.ExternalQuery;
import enginuity.logger.ecu.comms.query.ExternalQueryImpl;
import enginuity.logger.ecu.comms.query.LoggerCallback;
import enginuity.logger.ecu.comms.query.Query;
import enginuity.logger.ecu.comms.query.Response;
import enginuity.logger.ecu.comms.query.ResponseImpl;
import enginuity.logger.ecu.definition.EcuData;
import static enginuity.logger.ecu.definition.EcuDataType.EXTERNAL;
import enginuity.logger.ecu.definition.EcuSwitch;
@ -40,6 +41,7 @@ import enginuity.logger.ecu.definition.ExternalData;
import enginuity.logger.ecu.definition.LoggerData;
import enginuity.logger.ecu.ui.MessageListener;
import enginuity.logger.ecu.ui.StatusChangeListener;
import enginuity.logger.ecu.ui.handler.DataUpdateHandlerManager;
import static enginuity.util.HexUtil.asHex;
import static enginuity.util.ParamChecker.checkNotNull;
import static enginuity.util.ThreadUtil.sleep;
@ -63,16 +65,19 @@ public final class QueryManagerImpl implements QueryManager {
private final Settings settings;
private final EcuInitCallback ecuInitCallback;
private final MessageListener messageListener;
private final DataUpdateHandlerManager dataUpdateHandlerManager;
private EcuQuery fileLoggerQuery;
private Thread queryManagerThread;
private boolean started;
private boolean stop;
public QueryManagerImpl(Settings settings, EcuInitCallback ecuInitCallback, MessageListener messageListener) {
checkNotNull(settings, ecuInitCallback, messageListener);
public QueryManagerImpl(Settings settings, EcuInitCallback ecuInitCallback, MessageListener messageListener,
DataUpdateHandlerManager dataUpdateHandlerManager) {
checkNotNull(settings, ecuInitCallback, messageListener, dataUpdateHandlerManager);
this.settings = settings;
this.ecuInitCallback = ecuInitCallback;
this.messageListener = messageListener;
this.dataUpdateHandlerManager = dataUpdateHandlerManager;
}
public synchronized void addListener(StatusChangeListener listener) {
@ -80,19 +85,19 @@ public final class QueryManagerImpl implements QueryManager {
listeners.add(listener);
}
public void setFileLoggerQuery(EcuSwitch ecuSwitch, LoggerCallback callback) {
checkNotNull(ecuSwitch, callback);
fileLoggerQuery = new EcuQueryImpl(ecuSwitch, callback);
public void setFileLoggerQuery(EcuSwitch ecuSwitch) {
checkNotNull(ecuSwitch);
fileLoggerQuery = new EcuQueryImpl(ecuSwitch);
}
public synchronized void addQuery(String callerId, LoggerData loggerData, LoggerCallback callback) {
checkNotNull(callerId, loggerData, callback);
public synchronized void addQuery(String callerId, LoggerData loggerData) {
checkNotNull(callerId, loggerData);
//FIXME: This is a hack!!
String queryId = buildQueryId(callerId, loggerData);
if (loggerData.getDataType() == EXTERNAL) {
addList.put(queryId, new ExternalQueryImpl((ExternalData) loggerData, callback));
addList.put(queryId, new ExternalQueryImpl((ExternalData) loggerData));
} else {
addList.put(queryId, new EcuQueryImpl((EcuData) loggerData, callback));
addList.put(queryId, new EcuQueryImpl((EcuData) loggerData));
}
}
@ -176,8 +181,9 @@ public final class QueryManagerImpl implements QueryManager {
List<ExternalQuery> externalQueries = filterExternalQueries(queryMap.values());
for (ExternalQuery externalQuery : externalQueries) {
//FIXME: This is a hack!!
externalQuery.setResponse(externalQuery.getExternalData().getSelectedConvertor().convert(null));
externalQuery.setResponse(externalQuery.getLoggerData().getSelectedConvertor().convert(null));
}
dataUpdateHandlerManager.handleDataUpdate(buildResponse(queryMap.values()));
count++;
messageListener.reportMessage("Querying ECU...");
messageListener.reportStats(buildStatsMessage(start, count));
@ -190,6 +196,14 @@ public final class QueryManagerImpl implements QueryManager {
}
}
private Response buildResponse(Collection<Query> queries) {
Response response = new ResponseImpl();
for (Query query : queries) {
response.setDataValue(query.getLoggerData(), query.getResponse());
}
return response;
}
//FIXME: This is a hack!!
private List<EcuQuery> filterEcuQueries(Collection<Query> queries) {
List<EcuQuery> filtered = new ArrayList<EcuQuery>();

View File

@ -29,5 +29,5 @@ public interface EcuQuery extends Query {
String getHex();
void setResponse(byte[] response);
void setResponse(byte[] bytes);
}

View File

@ -22,23 +22,27 @@
package enginuity.logger.ecu.comms.query;
import enginuity.logger.ecu.definition.EcuData;
import enginuity.logger.ecu.definition.LoggerData;
import static enginuity.util.HexUtil.asHex;
import static enginuity.util.ParamChecker.checkNotNull;
public final class EcuQueryImpl implements EcuQuery {
private final EcuData ecuData;
private final LoggerCallback callback;
private final byte[] bytes;
private final String hex;
private double response;
public EcuQueryImpl(EcuData ecuData, LoggerCallback callback) {
checkNotNull(ecuData, callback);
public EcuQueryImpl(EcuData ecuData) {
checkNotNull(ecuData);
this.ecuData = ecuData;
this.callback = callback;
bytes = ecuData.getAddress().getBytes();
hex = asHex(bytes);
}
public LoggerData getLoggerData() {
return ecuData;
}
public String[] getAddresses() {
return ecuData.getAddress().getAddresses();
}
@ -51,8 +55,12 @@ public final class EcuQueryImpl implements EcuQuery {
return hex;
}
public void setResponse(byte[] response) {
callback.callback(ecuData.getSelectedConvertor().convert(response));
public double getResponse() {
return response;
}
public void setResponse(byte[] bytes) {
this.response = ecuData.getSelectedConvertor().convert(bytes);
}
public boolean equals(Object object) {

View File

@ -1,10 +1,7 @@
package enginuity.logger.ecu.comms.query;
import enginuity.logger.ecu.definition.ExternalData;
public interface ExternalQuery extends Query {
ExternalData getExternalData();
void setResponse(double response);
}

View File

@ -1,23 +1,27 @@
package enginuity.logger.ecu.comms.query;
import enginuity.logger.ecu.definition.ExternalData;
import enginuity.logger.ecu.definition.LoggerData;
import static enginuity.util.ParamChecker.checkNotNull;
public final class ExternalQueryImpl implements ExternalQuery {
private final ExternalData externalData;
private final LoggerCallback callback;
private double response;
public ExternalQueryImpl(ExternalData externalData, LoggerCallback callback) {
checkNotNull(externalData, callback);
public ExternalQueryImpl(ExternalData externalData) {
checkNotNull(externalData);
this.externalData = externalData;
this.callback = callback;
}
public ExternalData getExternalData() {
public LoggerData getLoggerData() {
return externalData;
}
public void setResponse(double response) {
callback.callback(response);
this.response = response;
}
public double getResponse() {
return response;
}
}

View File

@ -1,28 +0,0 @@
/*
*
* Enginuity Open-Source Tuning, Logging and Reflashing
* Copyright (C) 2006 Enginuity.org
*
* 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 enginuity.logger.ecu.comms.query;
public interface LoggerCallback {
void callback(double value);
}

View File

@ -1,4 +1,11 @@
package enginuity.logger.ecu.comms.query;
import enginuity.logger.ecu.definition.LoggerData;
public interface Query {
LoggerData getLoggerData();
double getResponse();
}

View File

@ -0,0 +1,16 @@
package enginuity.logger.ecu.comms.query;
import enginuity.logger.ecu.definition.LoggerData;
import java.util.Set;
public interface Response {
void setDataValue(LoggerData data, double value);
Set<LoggerData> getData();
double getDataValue(LoggerData data);
long getTimestamp();
}

View File

@ -0,0 +1,32 @@
package enginuity.logger.ecu.comms.query;
import enginuity.logger.ecu.definition.LoggerData;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Set;
public class ResponseImpl implements Response {
private final Map<LoggerData, Double> dataValues = new LinkedHashMap<LoggerData, Double>();
private final long timestamp;
public ResponseImpl() {
timestamp = System.currentTimeMillis();
}
public void setDataValue(LoggerData data, double value) {
dataValues.put(data, value);
}
public Set<LoggerData> getData() {
return dataValues.keySet();
}
public double getDataValue(LoggerData data) {
return dataValues.get(data);
}
public long getTimestamp() {
return timestamp;
}
}

View File

@ -22,7 +22,6 @@
package enginuity.logger.ecu.ui;
import enginuity.logger.ecu.comms.controller.LoggerController;
import enginuity.logger.ecu.comms.query.LoggerCallback;
import enginuity.logger.ecu.definition.LoggerData;
import enginuity.logger.ecu.ui.handler.DataUpdateHandlerManager;
import static enginuity.util.ParamChecker.checkNotNull;
@ -49,13 +48,8 @@ public final class DataRegistrationBrokerImpl implements DataRegistrationBroker
// register param with handlers
handlerManager.registerData(loggerData);
// add logger and setup callback
controller.addLogger(id, loggerData, new LoggerCallback() {
public void callback(double value) {
// update handlers
handlerManager.handleDataUpdate(loggerData, value, System.currentTimeMillis());
}
});
// add logger
controller.addLogger(id, loggerData);
// add to registered parameters list
registeredLoggerData.add(loggerData);

View File

@ -21,13 +21,14 @@
package enginuity.logger.ecu.ui.handler;
import enginuity.logger.ecu.comms.query.Response;
import enginuity.logger.ecu.definition.LoggerData;
public interface DataUpdateHandler {
void registerData(LoggerData loggerData);
void handleDataUpdate(LoggerData loggerData, double value, long timestamp);
void handleDataUpdate(Response response);
void deregisterData(LoggerData loggerData);

View File

@ -21,6 +21,7 @@
package enginuity.logger.ecu.ui.handler;
import enginuity.logger.ecu.comms.query.Response;
import enginuity.logger.ecu.definition.LoggerData;
import java.util.ArrayList;
@ -39,9 +40,9 @@ public final class DataUpdateHandlerManagerImpl implements DataUpdateHandlerMana
}
}
public synchronized void handleDataUpdate(LoggerData loggerData, double value, long timestamp) {
public synchronized void handleDataUpdate(Response response) {
for (DataUpdateHandler handler : handlers) {
handler.handleDataUpdate(loggerData, value, timestamp);
handler.handleDataUpdate(response);
}
}

View File

@ -21,6 +21,7 @@
package enginuity.logger.ecu.ui.handler;
import enginuity.logger.ecu.comms.query.Response;
import enginuity.logger.ecu.definition.LoggerData;
import static enginuity.util.ThreadUtil.sleep;
@ -29,8 +30,8 @@ import static java.util.Collections.synchronizedList;
import java.util.List;
public final class DataUpdateHandlerThreadWrapper implements DataUpdateHandler, Runnable {
private final List<DataUpdate> updateList = synchronizedList(new ArrayList<DataUpdate>());
private final List<DataUpdate> workingList = synchronizedList(new ArrayList<DataUpdate>());
private final List<Response> updateList = synchronizedList(new ArrayList<Response>());
private final List<Response> workingList = synchronizedList(new ArrayList<Response>());
private final DataUpdateHandler wrappee;
private boolean stop = false;
@ -42,8 +43,8 @@ public final class DataUpdateHandlerThreadWrapper implements DataUpdateHandler,
wrappee.registerData(loggerData);
}
public synchronized void handleDataUpdate(LoggerData loggerData, double value, long timestamp) {
updateList.add(new DataUpdate(loggerData, value, timestamp));
public synchronized void handleDataUpdate(Response response) {
updateList.add(response);
}
public void deregisterData(LoggerData loggerData) {
@ -62,8 +63,8 @@ public final class DataUpdateHandlerThreadWrapper implements DataUpdateHandler,
public void run() {
while (!stop) {
updateWorkingList();
for (final DataUpdate dataUpdate : workingList) {
wrappee.handleDataUpdate(dataUpdate.getLoggerData(), dataUpdate.getValue(), dataUpdate.getTimestamp());
for (final Response response : workingList) {
wrappee.handleDataUpdate(response);
}
sleep(3);
}
@ -71,34 +72,10 @@ public final class DataUpdateHandlerThreadWrapper implements DataUpdateHandler,
private synchronized void updateWorkingList() {
workingList.clear();
for (DataUpdate dataUpdate : updateList) {
workingList.add(dataUpdate);
for (Response response : updateList) {
workingList.add(response);
}
updateList.clear();
}
private static final class DataUpdate {
private final LoggerData loggerData;
private final double value;
private final long timestamp;
public DataUpdate(LoggerData loggerData, double value, long timestamp) {
this.loggerData = loggerData;
this.value = value;
this.timestamp = timestamp;
}
public LoggerData getLoggerData() {
return loggerData;
}
public long getTimestamp() {
return timestamp;
}
public double getValue() {
return value;
}
}
}

View File

@ -21,6 +21,7 @@
package enginuity.logger.ecu.ui.handler.dash;
import enginuity.logger.ecu.comms.query.Response;
import enginuity.logger.ecu.definition.ConvertorUpdateListener;
import enginuity.logger.ecu.definition.LoggerData;
import enginuity.logger.ecu.ui.handler.DataUpdateHandler;
@ -46,10 +47,12 @@ public final class DashboardUpdateHandler implements DataUpdateHandler, Converto
repaintDashboardPanel();
}
public synchronized void handleDataUpdate(LoggerData loggerData, double value, long timestamp) {
Gauge gauge = gauges.get(loggerData);
if (gauge != null) {
gauge.updateValue(value);
public synchronized void handleDataUpdate(Response response) {
for (LoggerData loggerData : response.getData()) {
Gauge gauge = gauges.get(loggerData);
if (gauge != null) {
gauge.updateValue(response.getDataValue(loggerData));
}
}
}

View File

@ -22,6 +22,7 @@
package enginuity.logger.ecu.ui.handler.file;
import enginuity.Settings;
import enginuity.logger.ecu.comms.query.Response;
import enginuity.logger.ecu.definition.ConvertorUpdateListener;
import enginuity.logger.ecu.definition.LoggerData;
import enginuity.logger.ecu.ui.MessageListener;
@ -61,11 +62,13 @@ public final class FileUpdateHandlerImpl implements FileUpdateHandler, Convertor
}
}
public synchronized void handleDataUpdate(LoggerData loggerData, double value, long timestamp) {
public synchronized void handleDataUpdate(Response response) {
if (fileLogger.isStarted()) {
currentLine.updateParamValue(loggerData, loggerData.getSelectedConvertor().format(value));
for (LoggerData loggerData : response.getData()) {
currentLine.updateParamValue(loggerData, loggerData.getSelectedConvertor().format(response.getDataValue(loggerData)));
}
if (currentLine.isFull()) {
fileLogger.writeLine(currentLine.values(), timestamp);
fileLogger.writeLine(currentLine.values(), response.getTimestamp());
resetLine();
}
}

View File

@ -1,5 +1,6 @@
package enginuity.logger.ecu.ui.handler.graph;
import enginuity.logger.ecu.comms.query.Response;
import enginuity.logger.ecu.definition.ConvertorUpdateListener;
import enginuity.logger.ecu.definition.LoggerData;
import enginuity.logger.ecu.ui.handler.DataUpdateHandler;
@ -116,15 +117,16 @@ public final class GraphUpdateHandler implements DataUpdateHandler, ConvertorUpd
makeCompactGrid(graphPanel, 1, 1, 2, 2, 2, 2);
}
public synchronized void handleDataUpdate(LoggerData loggerData, final double value, final long timestamp) {
// update chart
final XYSeries series = seriesMap.get(loggerData);
if (series != null && !paused) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
series.add((timestamp - startTime) / 1000.0, value);
}
});
public synchronized void handleDataUpdate(final Response response) {
for (final LoggerData loggerData : response.getData()) {
final XYSeries series = seriesMap.get(loggerData);
if (series != null && !paused) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
series.add((response.getTimestamp() - startTime) / 1000.0, response.getDataValue(loggerData));
}
});
}
}
}

View File

@ -21,6 +21,7 @@
package enginuity.logger.ecu.ui.handler.livedata;
import enginuity.logger.ecu.comms.query.Response;
import enginuity.logger.ecu.definition.ConvertorUpdateListener;
import enginuity.logger.ecu.definition.LoggerData;
import enginuity.logger.ecu.ui.handler.DataUpdateHandler;
@ -39,13 +40,14 @@ public final class LiveDataUpdateHandler implements DataUpdateHandler, Convertor
dataTableModel.addParam(loggerData);
}
public synchronized void handleDataUpdate(final LoggerData loggerData, final double value, long timestamp) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
// update data table
dataTableModel.updateParam(loggerData, value);
}
});
public synchronized void handleDataUpdate(final Response response) {
for (final LoggerData loggerData : response.getData()) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
dataTableModel.updateParam(loggerData, response.getDataValue(loggerData));
}
});
}
}
public synchronized void deregisterData(LoggerData loggerData) {

View File

@ -21,6 +21,7 @@
package enginuity.logger.ecu.ui.handler.table;
import enginuity.logger.ecu.comms.query.Response;
import enginuity.logger.ecu.definition.LoggerData;
import enginuity.logger.ecu.ui.handler.DataUpdateHandler;
import enginuity.maps.Table;
@ -41,12 +42,14 @@ public final class TableUpdateHandler implements DataUpdateHandler {
public void registerData(LoggerData loggerData) {
}
public void handleDataUpdate(LoggerData loggerData, double value, long timestamp) {
List<Table> tables = tableMap.get(loggerData.getId());
if (tables != null && !tables.isEmpty()) {
String formattedValue = loggerData.getSelectedConvertor().format(value);
for (Table table : tables) {
table.setLiveValue(formattedValue);
public void handleDataUpdate(Response response) {
for (LoggerData loggerData : response.getData()) {
List<Table> tables = tableMap.get(loggerData.getId());
if (tables != null && !tables.isEmpty()) {
String formattedValue = loggerData.getSelectedConvertor().format(response.getDataValue(loggerData));
for (Table table : tables) {
table.setLiveValue(formattedValue);
}
}
}
}