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:
kascade 2007-01-22 13:08:03 +00:00
parent 037874dd6d
commit 845e189b7e
5 changed files with 39 additions and 7 deletions

View File

@ -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+ ) >

View File

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

View File

@ -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++) {

View File

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

View File

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