mirror of https://github.com/rusefi/RomRaider.git
simplified data handling
git-svn-id: http://svn.3splooges.com/romraider-arch/trunk@622 d2e2e1cd-ba16-0410-be16-b7c4453c7c2d
This commit is contained in:
parent
11b3d8995c
commit
de4d74ef35
|
@ -47,10 +47,8 @@ import enginuity.logger.ecu.ui.EcuDataComparator;
|
|||
import enginuity.logger.ecu.ui.MessageListener;
|
||||
import enginuity.logger.ecu.ui.SerialPortComboBox;
|
||||
import enginuity.logger.ecu.ui.StatusIndicator;
|
||||
import enginuity.logger.ecu.ui.handler.DataUpdateHandler;
|
||||
import enginuity.logger.ecu.ui.handler.DataUpdateHandlerManager;
|
||||
import enginuity.logger.ecu.ui.handler.DataUpdateHandlerManagerImpl;
|
||||
import enginuity.logger.ecu.ui.handler.DataUpdateHandlerThreadWrapper;
|
||||
import enginuity.logger.ecu.ui.handler.dash.DashboardUpdateHandler;
|
||||
import enginuity.logger.ecu.ui.handler.file.FileUpdateHandlerImpl;
|
||||
import enginuity.logger.ecu.ui.handler.graph.GraphUpdateHandler;
|
||||
|
@ -141,7 +139,6 @@ 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,8 +196,15 @@ public final class EcuLogger extends JFrame implements WindowListener, PropertyC
|
|||
}
|
||||
}
|
||||
};
|
||||
dataUpdateHandlerManager = new DataUpdateHandlerManagerImpl();
|
||||
controller = new LoggerControllerImpl(settings, ecuInitCallback, this, dataUpdateHandlerManager);
|
||||
fileUpdateHandler = new FileUpdateHandlerImpl(settings, this);
|
||||
dataTableModel = new LiveDataTableModel();
|
||||
liveDataUpdateHandler = new LiveDataUpdateHandler(dataTableModel);
|
||||
graphPanel = new JPanel(new BorderLayout(2, 2));
|
||||
graphUpdateHandler = new GraphUpdateHandler(graphPanel);
|
||||
dashboardPanel = new JPanel(new FlowLayout(FlowLayout.CENTER, 3, 3));
|
||||
dashboardUpdateHandler = new DashboardUpdateHandler(dashboardPanel);
|
||||
controller = new LoggerControllerImpl(settings, ecuInitCallback, this, liveDataUpdateHandler,
|
||||
graphUpdateHandler, dashboardUpdateHandler, fileUpdateHandler, TableUpdateHandler.getInstance());
|
||||
messageLabel = new JLabel(ENGINUITY_ECU_LOGGER_TITLE);
|
||||
ecuIdLabel = new JLabel(buildEcuIdLabelText());
|
||||
statsLabel = buildStatsLabel();
|
||||
|
@ -221,13 +225,6 @@ public final class EcuLogger extends JFrame implements WindowListener, PropertyC
|
|||
dashboardTabParamListTableModel = new ParameterListTableModel(dashboardTabBroker, HEADING_PARAMETERS);
|
||||
dashboardTabSwitchListTableModel = new ParameterListTableModel(dashboardTabBroker, HEADING_SWITCHES);
|
||||
dashboardTabExternalListTableModel = new ParameterListTableModel(dashboardTabBroker, HEADING_EXTERNAL);
|
||||
fileUpdateHandler = new FileUpdateHandlerImpl(settings, this);
|
||||
dataTableModel = new LiveDataTableModel();
|
||||
liveDataUpdateHandler = new LiveDataUpdateHandler(dataTableModel);
|
||||
graphPanel = new JPanel(new BorderLayout(2, 2));
|
||||
graphUpdateHandler = new GraphUpdateHandler(graphPanel);
|
||||
dashboardPanel = new JPanel(new FlowLayout(FlowLayout.CENTER, 3, 3));
|
||||
dashboardUpdateHandler = new DashboardUpdateHandler(dashboardPanel);
|
||||
}
|
||||
|
||||
private void initControllerListeners() {
|
||||
|
@ -264,7 +261,8 @@ public final class EcuLogger extends JFrame implements WindowListener, PropertyC
|
|||
private void loadLoggerConfig() {
|
||||
try {
|
||||
EcuDataLoader dataLoader = new EcuDataLoaderImpl();
|
||||
dataLoader.loadFromXml(settings.getLoggerConfigFilePath(), settings.getLoggerProtocol(), settings.getFileLoggingControllerSwitchId(), ecuInit);
|
||||
dataLoader.loadFromXml(settings.getLoggerConfigFilePath(), settings.getLoggerProtocol(),
|
||||
settings.getFileLoggingControllerSwitchId(), ecuInit);
|
||||
List<EcuParameter> ecuParams = dataLoader.getEcuParameters();
|
||||
addConvertorUpdateListeners(ecuParams);
|
||||
loadEcuParams(ecuParams);
|
||||
|
@ -482,26 +480,15 @@ public final class EcuLogger extends JFrame implements WindowListener, PropertyC
|
|||
}
|
||||
|
||||
private void initDataUpdateHandlers() {
|
||||
DataUpdateHandler threadedFileUpdateHandler = startHandlerInThread(fileUpdateHandler);
|
||||
dataHandlerManager.addHandler(startHandlerInThread(liveDataUpdateHandler));
|
||||
dataHandlerManager.addHandler(threadedFileUpdateHandler);
|
||||
dataHandlerManager.addHandler(startHandlerInThread(TableUpdateHandler.getInstance()));
|
||||
graphHandlerManager.addHandler(startHandlerInThread(graphUpdateHandler));
|
||||
graphHandlerManager.addHandler(threadedFileUpdateHandler);
|
||||
dashboardHandlerManager.addHandler(startHandlerInThread(dashboardUpdateHandler));
|
||||
dashboardHandlerManager.addHandler(threadedFileUpdateHandler);
|
||||
|
||||
dataUpdateHandlerManager.addHandler(dataHandlerManager);
|
||||
dataUpdateHandlerManager.addHandler(graphHandlerManager);
|
||||
dataUpdateHandlerManager.addHandler(dashboardHandlerManager);
|
||||
}
|
||||
|
||||
private DataUpdateHandler startHandlerInThread(DataUpdateHandler handler) {
|
||||
DataUpdateHandlerThreadWrapper runnableHandler = new DataUpdateHandlerThreadWrapper(handler);
|
||||
Thread thread = new Thread(runnableHandler);
|
||||
thread.setDaemon(true);
|
||||
thread.start();
|
||||
return runnableHandler;
|
||||
dataHandlerManager.addHandler(liveDataUpdateHandler);
|
||||
dataHandlerManager.addHandler(fileUpdateHandler);
|
||||
dataHandlerManager.addHandler(TableUpdateHandler.getInstance());
|
||||
graphHandlerManager.addHandler(graphUpdateHandler);
|
||||
graphHandlerManager.addHandler(fileUpdateHandler);
|
||||
graphHandlerManager.addHandler(TableUpdateHandler.getInstance());
|
||||
dashboardHandlerManager.addHandler(dashboardUpdateHandler);
|
||||
dashboardHandlerManager.addHandler(fileUpdateHandler);
|
||||
dashboardHandlerManager.addHandler(TableUpdateHandler.getInstance());
|
||||
}
|
||||
|
||||
private JComponent buildTabbedPane() {
|
||||
|
@ -786,7 +773,9 @@ public final class EcuLogger extends JFrame implements WindowListener, PropertyC
|
|||
}
|
||||
|
||||
private void cleanUpUpdateHandlers() {
|
||||
dataUpdateHandlerManager.cleanUp();
|
||||
dataHandlerManager.cleanUp();
|
||||
graphHandlerManager.cleanUp();
|
||||
dashboardHandlerManager.cleanUp();
|
||||
}
|
||||
|
||||
public Settings getSettings() {
|
||||
|
|
|
@ -29,16 +29,16 @@ 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 enginuity.logger.ecu.ui.handler.DataUpdateHandler;
|
||||
import static enginuity.util.ParamChecker.checkNotNull;
|
||||
|
||||
public final class LoggerControllerImpl implements LoggerController {
|
||||
private final QueryManager queryManager;
|
||||
|
||||
public LoggerControllerImpl(Settings settings, EcuInitCallback ecuInitCallback, MessageListener messageListener,
|
||||
DataUpdateHandlerManager dataUpdateHandlerManager) {
|
||||
checkNotNull(settings, ecuInitCallback, messageListener, dataUpdateHandlerManager);
|
||||
queryManager = new QueryManagerImpl(settings, ecuInitCallback, messageListener, dataUpdateHandlerManager);
|
||||
DataUpdateHandler... dataUpdateHandlers) {
|
||||
checkNotNull(settings, ecuInitCallback, messageListener, dataUpdateHandlers);
|
||||
queryManager = new QueryManagerImpl(settings, ecuInitCallback, messageListener, dataUpdateHandlers);
|
||||
}
|
||||
|
||||
public synchronized void addListener(StatusChangeListener listener) {
|
||||
|
|
|
@ -41,9 +41,10 @@ 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 enginuity.logger.ecu.ui.handler.DataUpdateHandler;
|
||||
import static enginuity.util.HexUtil.asHex;
|
||||
import static enginuity.util.ParamChecker.checkNotNull;
|
||||
import static enginuity.util.ThreadUtil.runAsDaemon;
|
||||
import static enginuity.util.ThreadUtil.sleep;
|
||||
|
||||
import javax.swing.SwingUtilities;
|
||||
|
@ -65,19 +66,19 @@ public final class QueryManagerImpl implements QueryManager {
|
|||
private final Settings settings;
|
||||
private final EcuInitCallback ecuInitCallback;
|
||||
private final MessageListener messageListener;
|
||||
private final DataUpdateHandlerManager dataUpdateHandlerManager;
|
||||
private final DataUpdateHandler[] dataUpdateHandlers;
|
||||
private EcuQuery fileLoggerQuery;
|
||||
private Thread queryManagerThread;
|
||||
private boolean started;
|
||||
private boolean stop;
|
||||
|
||||
public QueryManagerImpl(Settings settings, EcuInitCallback ecuInitCallback, MessageListener messageListener,
|
||||
DataUpdateHandlerManager dataUpdateHandlerManager) {
|
||||
checkNotNull(settings, ecuInitCallback, messageListener, dataUpdateHandlerManager);
|
||||
DataUpdateHandler... dataUpdateHandlers) {
|
||||
checkNotNull(settings, ecuInitCallback, messageListener, dataUpdateHandlers);
|
||||
this.settings = settings;
|
||||
this.ecuInitCallback = ecuInitCallback;
|
||||
this.messageListener = messageListener;
|
||||
this.dataUpdateHandlerManager = dataUpdateHandlerManager;
|
||||
this.dataUpdateHandlers = dataUpdateHandlers;
|
||||
}
|
||||
|
||||
public synchronized void addListener(StatusChangeListener listener) {
|
||||
|
@ -173,17 +174,9 @@ public final class QueryManagerImpl implements QueryManager {
|
|||
messageListener.reportMessage("Select parameters to be logged...");
|
||||
sleep(1000L);
|
||||
} else {
|
||||
List<EcuQuery> ecuQueries = filterEcuQueries(queryMap.values());
|
||||
if (fileLoggerQuery != null) {
|
||||
ecuQueries.add(fileLoggerQuery);
|
||||
}
|
||||
txManager.sendQueries(ecuQueries);
|
||||
List<ExternalQuery> externalQueries = filterExternalQueries(queryMap.values());
|
||||
for (ExternalQuery externalQuery : externalQueries) {
|
||||
//FIXME: This is a hack!!
|
||||
externalQuery.setResponse(externalQuery.getLoggerData().getSelectedConvertor().convert(null));
|
||||
}
|
||||
dataUpdateHandlerManager.handleDataUpdate(buildResponse(queryMap.values()));
|
||||
sendEcuQueries(txManager);
|
||||
sendExternalQueries();
|
||||
handleQueryResponse();
|
||||
count++;
|
||||
messageListener.reportMessage("Querying ECU...");
|
||||
messageListener.reportStats(buildStatsMessage(start, count));
|
||||
|
@ -196,6 +189,32 @@ public final class QueryManagerImpl implements QueryManager {
|
|||
}
|
||||
}
|
||||
|
||||
private void sendEcuQueries(TransmissionManager txManager) {
|
||||
List<EcuQuery> ecuQueries = filterEcuQueries(queryMap.values());
|
||||
if (fileLoggerQuery != null) {
|
||||
ecuQueries.add(fileLoggerQuery);
|
||||
}
|
||||
txManager.sendQueries(ecuQueries);
|
||||
}
|
||||
|
||||
private void sendExternalQueries() {
|
||||
List<ExternalQuery> externalQueries = filterExternalQueries(queryMap.values());
|
||||
for (ExternalQuery externalQuery : externalQueries) {
|
||||
//FIXME: This is a hack!!
|
||||
externalQuery.setResponse(externalQuery.getLoggerData().getSelectedConvertor().convert(null));
|
||||
}
|
||||
}
|
||||
|
||||
private void handleQueryResponse() {
|
||||
for (final DataUpdateHandler dataUpdateHandler : dataUpdateHandlers) {
|
||||
runAsDaemon(new Runnable() {
|
||||
public void run() {
|
||||
dataUpdateHandler.handleDataUpdate(buildResponse(queryMap.values()));
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
private Response buildResponse(Collection<Query> queries) {
|
||||
Response response = new ResponseImpl();
|
||||
for (Query query : queries) {
|
||||
|
|
|
@ -21,8 +21,18 @@
|
|||
|
||||
package enginuity.logger.ecu.ui.handler;
|
||||
|
||||
public interface DataUpdateHandlerManager extends DataUpdateHandler {
|
||||
import enginuity.logger.ecu.definition.LoggerData;
|
||||
|
||||
public interface DataUpdateHandlerManager {
|
||||
|
||||
void addHandler(DataUpdateHandler handler);
|
||||
|
||||
void registerData(LoggerData loggerData);
|
||||
|
||||
void deregisterData(LoggerData loggerData);
|
||||
|
||||
void cleanUp();
|
||||
|
||||
void reset();
|
||||
|
||||
}
|
||||
|
|
|
@ -21,7 +21,6 @@
|
|||
|
||||
package enginuity.logger.ecu.ui.handler;
|
||||
|
||||
import enginuity.logger.ecu.comms.query.Response;
|
||||
import enginuity.logger.ecu.definition.LoggerData;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
@ -40,12 +39,6 @@ public final class DataUpdateHandlerManagerImpl implements DataUpdateHandlerMana
|
|||
}
|
||||
}
|
||||
|
||||
public synchronized void handleDataUpdate(Response response) {
|
||||
for (DataUpdateHandler handler : handlers) {
|
||||
handler.handleDataUpdate(response);
|
||||
}
|
||||
}
|
||||
|
||||
public synchronized void deregisterData(LoggerData loggerData) {
|
||||
for (DataUpdateHandler handler : handlers) {
|
||||
handler.deregisterData(loggerData);
|
||||
|
|
|
@ -1,81 +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.ui.handler;
|
||||
|
||||
import enginuity.logger.ecu.comms.query.Response;
|
||||
import enginuity.logger.ecu.definition.LoggerData;
|
||||
import static enginuity.util.ThreadUtil.sleep;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import static java.util.Collections.synchronizedList;
|
||||
import java.util.List;
|
||||
|
||||
public final class DataUpdateHandlerThreadWrapper implements DataUpdateHandler, Runnable {
|
||||
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;
|
||||
|
||||
public DataUpdateHandlerThreadWrapper(DataUpdateHandler wrappee) {
|
||||
this.wrappee = wrappee;
|
||||
}
|
||||
|
||||
public void registerData(LoggerData loggerData) {
|
||||
wrappee.registerData(loggerData);
|
||||
}
|
||||
|
||||
public synchronized void handleDataUpdate(Response response) {
|
||||
updateList.add(response);
|
||||
}
|
||||
|
||||
public void deregisterData(LoggerData loggerData) {
|
||||
wrappee.deregisterData(loggerData);
|
||||
}
|
||||
|
||||
public void cleanUp() {
|
||||
stop = true;
|
||||
wrappee.cleanUp();
|
||||
}
|
||||
|
||||
public void reset() {
|
||||
wrappee.reset();
|
||||
}
|
||||
|
||||
public void run() {
|
||||
while (!stop) {
|
||||
updateWorkingList();
|
||||
for (final Response response : workingList) {
|
||||
wrappee.handleDataUpdate(response);
|
||||
}
|
||||
sleep(3);
|
||||
}
|
||||
}
|
||||
|
||||
private synchronized void updateWorkingList() {
|
||||
workingList.clear();
|
||||
for (Response response : updateList) {
|
||||
workingList.add(response);
|
||||
}
|
||||
updateList.clear();
|
||||
}
|
||||
|
||||
}
|
|
@ -36,4 +36,14 @@ public final class ThreadUtil {
|
|||
}
|
||||
}
|
||||
|
||||
public static void run(Runnable runnable) {
|
||||
new Thread(runnable).start();
|
||||
}
|
||||
|
||||
public static void runAsDaemon(Runnable runnable) {
|
||||
Thread thread = new Thread(runnable);
|
||||
thread.setDaemon(true);
|
||||
thread.start();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue