mirror of https://github.com/rusefi/RomRaider.git
multi convertor support added to derived parameters
git-svn-id: http://svn.3splooges.com/romraider-arch/trunk@304 d2e2e1cd-ba16-0410-be16-b7c4453c7c2d
This commit is contained in:
parent
77f62b4a51
commit
89356d9a53
11
logger.xml
11
logger.xml
|
@ -843,6 +843,17 @@
|
|||
</conversions>
|
||||
</parameter>
|
||||
|
||||
<parameter id="P91" name="Manifold Relative Pressure (Corrected)" desc="Difference between Manifold Absolute Pressure and Atmospheric Pressure">
|
||||
<depends>
|
||||
<ref id="P7"/>
|
||||
<ref id="P24"/>
|
||||
</depends>
|
||||
<conversions>
|
||||
<conversion units="psi" expr="[P7:psi]-[P24:psi]" format="0.00"/>
|
||||
<conversion units="bar" expr="[P7:bar]-[P24:bar]" format="0.00"/>
|
||||
</conversions>
|
||||
</parameter>
|
||||
|
||||
</parameters>
|
||||
|
||||
<switches>
|
||||
|
|
|
@ -6,6 +6,7 @@ import enginuity.logger.definition.EcuDataLoaderImpl;
|
|||
import enginuity.logger.definition.EcuParameter;
|
||||
import enginuity.logger.definition.EcuSwitch;
|
||||
import enginuity.logger.io.serial.SerialPortRefresher;
|
||||
import enginuity.logger.ui.EcuDataComparator;
|
||||
import enginuity.logger.ui.EcuLoggerMenuBar;
|
||||
import enginuity.logger.ui.LoggerDataTableModel;
|
||||
import enginuity.logger.ui.MessageListener;
|
||||
|
@ -46,6 +47,7 @@ import java.awt.event.WindowListener;
|
|||
import java.beans.PropertyChangeEvent;
|
||||
import java.beans.PropertyChangeListener;
|
||||
import java.io.File;
|
||||
import static java.util.Collections.sort;
|
||||
import java.util.List;
|
||||
|
||||
/*
|
||||
|
@ -153,28 +155,36 @@ public final class EcuLogger extends JFrame implements WindowListener, PropertyC
|
|||
try {
|
||||
EcuDataLoader dataLoader = new EcuDataLoaderImpl();
|
||||
dataLoader.loadFromXml(settings.getLoggerConfigFilePath(), settings.getLoggerProtocol());
|
||||
List<EcuParameter> ecuParams = dataLoader.getEcuParameters();
|
||||
for (EcuParameter ecuParam : ecuParams) {
|
||||
dataTabParamListTableModel.addParam(ecuParam);
|
||||
graphTabParamListTableModel.addParam(ecuParam);
|
||||
dashboardTabParamListTableModel.addParam(ecuParam);
|
||||
ecuParam.addConvertorUpdateListener(fileUpdateHandler);
|
||||
ecuParam.addConvertorUpdateListener(liveDataUpdateHandler);
|
||||
ecuParam.addConvertorUpdateListener(graphUpdateHandler);
|
||||
ecuParam.addConvertorUpdateListener(dashboardUpdateHandler);
|
||||
}
|
||||
List<EcuSwitch> ecuSwitches = dataLoader.getEcuSwitches();
|
||||
for (EcuSwitch ecuSwitch : ecuSwitches) {
|
||||
dataTabSwitchListTableModel.addParam(ecuSwitch);
|
||||
graphTabSwitchListTableModel.addParam(ecuSwitch);
|
||||
dashboardTabSwitchListTableModel.addParam(ecuSwitch);
|
||||
}
|
||||
loadEcuParams(dataLoader.getEcuParameters());
|
||||
loadEcuSwitches(dataLoader.getEcuSwitches());
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
reportError(e);
|
||||
}
|
||||
}
|
||||
|
||||
private void loadEcuParams(List<EcuParameter> ecuParams) {
|
||||
sort(ecuParams, new EcuDataComparator());
|
||||
for (EcuParameter ecuParam : ecuParams) {
|
||||
dataTabParamListTableModel.addParam(ecuParam);
|
||||
graphTabParamListTableModel.addParam(ecuParam);
|
||||
dashboardTabParamListTableModel.addParam(ecuParam);
|
||||
ecuParam.addConvertorUpdateListener(fileUpdateHandler);
|
||||
ecuParam.addConvertorUpdateListener(liveDataUpdateHandler);
|
||||
ecuParam.addConvertorUpdateListener(graphUpdateHandler);
|
||||
ecuParam.addConvertorUpdateListener(dashboardUpdateHandler);
|
||||
}
|
||||
}
|
||||
|
||||
private void loadEcuSwitches(List<EcuSwitch> ecuSwitches) {
|
||||
sort(ecuSwitches, new EcuDataComparator());
|
||||
for (EcuSwitch ecuSwitch : ecuSwitches) {
|
||||
dataTabSwitchListTableModel.addParam(ecuSwitch);
|
||||
graphTabSwitchListTableModel.addParam(ecuSwitch);
|
||||
dashboardTabSwitchListTableModel.addParam(ecuSwitch);
|
||||
}
|
||||
}
|
||||
|
||||
private void initParameterUpdateHandlers() {
|
||||
DataUpdateHandler threadedFileUpdateHandler = startHandlerInThread(fileUpdateHandler);
|
||||
dataHandlerManager.addHandler(startHandlerInThread(liveDataUpdateHandler));
|
||||
|
|
|
@ -1,8 +1,5 @@
|
|||
package enginuity.logger.definition;
|
||||
|
||||
//TODO: add addListener() method so parameters can notify listeners when the selected convertor is updated
|
||||
//TODO: create corresponding ConvertorUpdateListener interface (to be implemented by handlers?)
|
||||
|
||||
public interface EcuData {
|
||||
|
||||
String getId();
|
||||
|
|
|
@ -1,9 +1,11 @@
|
|||
package enginuity.logger.definition;
|
||||
|
||||
import static enginuity.util.JEPUtil.evaluate;
|
||||
import static enginuity.util.ParamChecker.checkNotNull;
|
||||
import static enginuity.util.ParamChecker.checkNotNullOrEmpty;
|
||||
|
||||
import java.text.DecimalFormat;
|
||||
import static java.util.Collections.synchronizedMap;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
|
@ -12,6 +14,7 @@ public final class EcuDerivedParameterConvertorImpl implements EcuDerivedParamet
|
|||
private final String units;
|
||||
private final String expression;
|
||||
private final DecimalFormat format;
|
||||
private final Map<String, ExpressionInfo> expressionInfoMap = synchronizedMap(new HashMap<String, ExpressionInfo>());
|
||||
|
||||
public EcuDerivedParameterConvertorImpl(String units, String expression, String format) {
|
||||
checkNotNullOrEmpty(units, "units");
|
||||
|
@ -29,7 +32,8 @@ public final class EcuDerivedParameterConvertorImpl implements EcuDerivedParamet
|
|||
int length = ecuData.getAddresses().length;
|
||||
byte[] tmp = new byte[length];
|
||||
System.arraycopy(bytes, index, tmp, 0, length);
|
||||
valueMap.put(ecuData.getId(), ecuData.getSelectedConvertor().convert(tmp));
|
||||
ExpressionInfo expressionInfo = expressionInfoMap.get(ecuData.getId());
|
||||
valueMap.put(expressionInfo.getReplacementKey(), expressionInfo.getConvertor().convert(tmp));
|
||||
index += length;
|
||||
}
|
||||
double result = evaluate(expression, valueMap);
|
||||
|
@ -47,9 +51,66 @@ public final class EcuDerivedParameterConvertorImpl implements EcuDerivedParamet
|
|||
public void setEcuDatas(EcuData[] ecuDatas) {
|
||||
checkNotNullOrEmpty(ecuDatas, "ecuDatas");
|
||||
this.ecuDatas = ecuDatas;
|
||||
for (EcuData ecuData : ecuDatas) {
|
||||
addExpressionInfo(ecuData);
|
||||
}
|
||||
}
|
||||
|
||||
public String toString() {
|
||||
return getUnits();
|
||||
}
|
||||
|
||||
private void addExpressionInfo(EcuData ecuData) {
|
||||
String id = ecuData.getId();
|
||||
String lookup = '[' + id + ':';
|
||||
int i = expression.indexOf(lookup);
|
||||
if (i >= 0) {
|
||||
int start = i + lookup.length();
|
||||
int end = expression.indexOf("]", start);
|
||||
String units = expression.substring(start, end);
|
||||
EcuDataConvertor selectedConvertor = null;
|
||||
EcuDataConvertor[] convertors = ecuData.getConvertors();
|
||||
for (EcuDataConvertor convertor : convertors) {
|
||||
if (units.equals(convertor.getUnits())) {
|
||||
selectedConvertor = convertor;
|
||||
}
|
||||
}
|
||||
expressionInfoMap.put(id, new ExpressionInfo(id, selectedConvertor, true));
|
||||
} else {
|
||||
expressionInfoMap.put(id, new ExpressionInfo(id, ecuData.getSelectedConvertor(), false));
|
||||
}
|
||||
}
|
||||
|
||||
private static final class ExpressionInfo {
|
||||
private final String ecuDataId;
|
||||
private final EcuDataConvertor convertor;
|
||||
private final String replacementKey;
|
||||
|
||||
public ExpressionInfo(String ecuDataId, EcuDataConvertor convertor, boolean compositeKey) {
|
||||
checkNotNull(ecuDataId, convertor);
|
||||
this.ecuDataId = ecuDataId;
|
||||
this.convertor = convertor;
|
||||
this.replacementKey = compositeKey ? buildCompositeKey(ecuDataId, convertor.getUnits()) : ecuDataId;
|
||||
}
|
||||
|
||||
public String getEcuDataId() {
|
||||
return ecuDataId;
|
||||
}
|
||||
|
||||
public String getReplacementKey() {
|
||||
return replacementKey;
|
||||
}
|
||||
|
||||
public EcuDataConvertor getConvertor() {
|
||||
return convertor;
|
||||
}
|
||||
|
||||
private String buildCompositeKey(String ecuDataId, String convertorUnits) {
|
||||
if (convertorUnits == null || convertorUnits.length() == 0) {
|
||||
return ecuDataId;
|
||||
} else {
|
||||
return '[' + ecuDataId + ':' + convertorUnits + ']';
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -12,8 +12,6 @@ import java.util.List;
|
|||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
//TODO: Add support for parsing of multiple convertors (already in xml)
|
||||
|
||||
public final class LoggerDefinitionHandler extends DefaultHandler {
|
||||
private static final String YES = "yes";
|
||||
private static final String TAG_PROTOCOL = "protocol";
|
||||
|
|
|
@ -0,0 +1,15 @@
|
|||
package enginuity.logger.ui;
|
||||
|
||||
import enginuity.logger.definition.EcuData;
|
||||
|
||||
import java.util.Comparator;
|
||||
|
||||
public final class EcuDataComparator implements Comparator {
|
||||
|
||||
public int compare(Object o1, Object o2) {
|
||||
EcuData ecuData1 = (EcuData) o1;
|
||||
EcuData ecuData2 = (EcuData) o2;
|
||||
return ecuData1.getName().compareTo(ecuData2.getName());
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue