mirror of https://github.com/rusefi/RomRaider.git
iam and engine load working in logger (for my car at least :P)
git-svn-id: http://svn.3splooges.com/romraider-arch/trunk@460 d2e2e1cd-ba16-0410-be16-b7c4453c7c2d
This commit is contained in:
parent
037874dd6d
commit
845e189b7e
|
@ -16,6 +16,7 @@
|
|||
<!ELEMENT conversion EMPTY >
|
||||
<!ATTLIST conversion expr CDATA #REQUIRED >
|
||||
<!ATTLIST conversion format ( 0 | 0.0 | 0.00 ) #REQUIRED >
|
||||
<!ATTLIST conversion storagetype ( uint8 | uint16 | float ) #IMPLIED >
|
||||
<!ATTLIST conversion units CDATA #REQUIRED >
|
||||
|
||||
<!ELEMENT conversions ( conversion+ ) >
|
||||
|
|
|
@ -984,10 +984,13 @@
|
|||
<address>
|
||||
<ecu id="3152584006">
|
||||
<byte>0xFF8228</byte>
|
||||
<byte>0xFF8229</byte>
|
||||
<byte>0xFF822A</byte>
|
||||
<byte>0xFF822B</byte>
|
||||
</ecu>
|
||||
</address>
|
||||
<conversions>
|
||||
<conversion units="IAM" expr="x" format="0.00"/>
|
||||
<conversion units="IAM" storagetype="float" expr="x" format="0.00"/>
|
||||
</conversions>
|
||||
</ecuparam>
|
||||
|
||||
|
@ -1007,10 +1010,12 @@
|
|||
<ecu id="3152584006">
|
||||
<byte>0xFFA6FC</byte>
|
||||
<byte>0xFFA6FD</byte>
|
||||
<byte>0xFFA6FE</byte>
|
||||
<byte>0xFFA6FF</byte>
|
||||
</ecu>
|
||||
</address>
|
||||
<conversions>
|
||||
<conversion units="grams" expr="x" format="0.00"/>
|
||||
<conversion units="grams" storagetype="float" expr="x" format="0.00"/>
|
||||
</conversions>
|
||||
</ecuparam>
|
||||
|
||||
|
|
|
@ -50,7 +50,14 @@ public final class TestSSMConnectionImpl implements SerialConnection {
|
|||
public void read(byte[] bytes) {
|
||||
if (isEcuInitRequest()) {
|
||||
System.arraycopy(asBytes(ECU_INIT_RESPONSE), 0, bytes, 0, bytes.length);
|
||||
} else if (isIamRequest()) {
|
||||
byte[] response = asBytes("0x80F01006E83F600000000D");
|
||||
System.arraycopy(response, 0, bytes, request.length, response.length);
|
||||
} else if (isEngineLoadRequest()) {
|
||||
byte[] response = asBytes("0x80F01006E83EC74A760033");
|
||||
System.arraycopy(response, 0, bytes, request.length, response.length);
|
||||
} else if (isReadAddressRequest()) {
|
||||
|
||||
byte[] responseData = generateResponseData();
|
||||
int i = 0;
|
||||
byte[] response = new byte[RESPONSE_NON_DATA_BYTES + calculateNumResponseDataBytes()];
|
||||
|
@ -87,6 +94,17 @@ public final class TestSSMConnectionImpl implements SerialConnection {
|
|||
return ((request.length - REQUEST_NON_DATA_BYTES) / ADDRESS_SIZE) * DATA_SIZE;
|
||||
}
|
||||
|
||||
private boolean isIamRequest() {
|
||||
String hex = asHex(request);
|
||||
System.out.println("request = " + hex);
|
||||
return hex.startsWith("8010F011A8") && hex.contains("FF8228FF8229FF822AFF822B");
|
||||
}
|
||||
|
||||
private boolean isEngineLoadRequest() {
|
||||
String hex = asHex(request);
|
||||
return hex.startsWith("8010F011A8") && hex.contains("FFA6FCFFA6FDFFA6FEFFA6FF");
|
||||
}
|
||||
|
||||
private byte[] generateResponseData() {
|
||||
byte[] responseData = new byte[calculateNumResponseDataBytes()];
|
||||
for (int i = 0; i < responseData.length; i++) {
|
||||
|
|
|
@ -25,24 +25,31 @@ import static enginuity.util.ByteUtil.asInt;
|
|||
import static enginuity.util.JEPUtil.evaluate;
|
||||
import static enginuity.util.ParamChecker.checkNotNullOrEmpty;
|
||||
|
||||
import static java.lang.Float.intBitsToFloat;
|
||||
import java.text.DecimalFormat;
|
||||
|
||||
public final class EcuParameterConvertorImpl implements EcuDataConvertor {
|
||||
private final String units;
|
||||
private final String expression;
|
||||
private final DecimalFormat format;
|
||||
private final boolean isFloat;
|
||||
|
||||
public EcuParameterConvertorImpl(String units, String expression, String format) {
|
||||
this(units, expression, format, false);
|
||||
}
|
||||
|
||||
public EcuParameterConvertorImpl(String units, String expression, String format, boolean isFloat) {
|
||||
checkNotNullOrEmpty(units, "units");
|
||||
checkNotNullOrEmpty(expression, "expression");
|
||||
checkNotNullOrEmpty(format, "format");
|
||||
this.units = units;
|
||||
this.expression = expression;
|
||||
this.format = new DecimalFormat(format);
|
||||
this.isFloat = isFloat;
|
||||
}
|
||||
|
||||
public double convert(byte[] bytes) {
|
||||
double value = (double) asInt(bytes);
|
||||
double value = (double) (isFloat ? intBitsToFloat(asInt(bytes)) : asInt(bytes));
|
||||
double result = evaluate(expression, value);
|
||||
return Double.isNaN(result) || Double.isInfinite(result) ? 0.0 : result;
|
||||
}
|
||||
|
|
|
@ -46,6 +46,7 @@ import java.util.Map;
|
|||
import java.util.Set;
|
||||
|
||||
public final class LoggerDefinitionHandler extends DefaultHandler {
|
||||
private static final String FLOAT = "float";
|
||||
private static final String TAG_PROTOCOL = "protocol";
|
||||
private static final String TAG_PARAMETER = "parameter";
|
||||
private static final String TAG_ADDRESS = "address";
|
||||
|
@ -68,6 +69,7 @@ public final class LoggerDefinitionHandler extends DefaultHandler {
|
|||
private static final String ATTR_BYTE = "byte";
|
||||
private static final String ATTR_BIT = "bit";
|
||||
private static final String ATTR_PARAMETER = "parameter";
|
||||
private static final String ATTR_STORAGETYPE = "storagetype";
|
||||
private final String protocol;
|
||||
private final String fileLoggingControllerSwitchId;
|
||||
private final EcuInit ecuInit;
|
||||
|
@ -130,12 +132,11 @@ public final class LoggerDefinitionHandler extends DefaultHandler {
|
|||
} else if (TAG_CONVERSION.equals(qName)) {
|
||||
if (derived) {
|
||||
derivedConvertorList.add(new EcuDerivedParameterConvertorImpl(attributes.getValue(ATTR_UNITS),
|
||||
attributes.getValue(ATTR_EXPRESSION),
|
||||
attributes.getValue(ATTR_FORMAT)));
|
||||
attributes.getValue(ATTR_EXPRESSION), attributes.getValue(ATTR_FORMAT)));
|
||||
} else {
|
||||
convertorList.add(new EcuParameterConvertorImpl(attributes.getValue(ATTR_UNITS),
|
||||
attributes.getValue(ATTR_EXPRESSION),
|
||||
attributes.getValue(ATTR_FORMAT)));
|
||||
attributes.getValue(ATTR_EXPRESSION), attributes.getValue(ATTR_FORMAT),
|
||||
FLOAT.equalsIgnoreCase(attributes.getValue(ATTR_STORAGETYPE))));
|
||||
}
|
||||
} else if (TAG_SWITCH.equals(qName)) {
|
||||
id = attributes.getValue(ATTR_ID);
|
||||
|
|
Loading…
Reference in New Issue