diff --git a/logger.dtd b/logger.dtd index 74af0f68..0cc922d4 100644 --- a/logger.dtd +++ b/logger.dtd @@ -16,6 +16,7 @@ + diff --git a/logger.xml b/logger.xml index 16c03d17..c0ff8830 100644 --- a/logger.xml +++ b/logger.xml @@ -984,10 +984,13 @@
0xFF8228 + 0xFF8229 + 0xFF822A + 0xFF822B
- + @@ -1007,10 +1010,12 @@ 0xFFA6FC 0xFFA6FD + 0xFFA6FE + 0xFFA6FF - + diff --git a/src/enginuity/io/connection/TestSSMConnectionImpl.java b/src/enginuity/io/connection/TestSSMConnectionImpl.java index a73a99fc..edbce958 100644 --- a/src/enginuity/io/connection/TestSSMConnectionImpl.java +++ b/src/enginuity/io/connection/TestSSMConnectionImpl.java @@ -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++) { diff --git a/src/enginuity/logger/definition/EcuParameterConvertorImpl.java b/src/enginuity/logger/definition/EcuParameterConvertorImpl.java index 2e06fb08..fbac9986 100644 --- a/src/enginuity/logger/definition/EcuParameterConvertorImpl.java +++ b/src/enginuity/logger/definition/EcuParameterConvertorImpl.java @@ -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; } diff --git a/src/enginuity/logger/definition/xml/LoggerDefinitionHandler.java b/src/enginuity/logger/definition/xml/LoggerDefinitionHandler.java index 4716d1f8..911918d6 100644 --- a/src/enginuity/logger/definition/xml/LoggerDefinitionHandler.java +++ b/src/enginuity/logger/definition/xml/LoggerDefinitionHandler.java @@ -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);