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