diff --git a/src/main/java/com/romraider/io/protocol/ds2/iso9141/DS2LoggerProtocol.java b/src/main/java/com/romraider/io/protocol/ds2/iso9141/DS2LoggerProtocol.java index 19215f48..379ba56b 100644 --- a/src/main/java/com/romraider/io/protocol/ds2/iso9141/DS2LoggerProtocol.java +++ b/src/main/java/com/romraider/io/protocol/ds2/iso9141/DS2LoggerProtocol.java @@ -39,7 +39,7 @@ import com.romraider.logger.ecu.comms.manager.PollingState; import com.romraider.logger.ecu.comms.query.EcuInit; import com.romraider.logger.ecu.comms.query.EcuInitCallback; import com.romraider.logger.ecu.comms.query.EcuQuery; -import com.romraider.logger.ecu.comms.query.EcuQueryDataType; +import com.romraider.logger.ecu.comms.query.EcuQueryData; import com.romraider.logger.ecu.definition.EcuData; import com.romraider.logger.ecu.definition.Module; @@ -104,7 +104,7 @@ public final class DS2LoggerProtocol implements LoggerProtocolDS2 { Collection filteredQueries = filterDuplicates(queries); int numAddresses = 0; for (EcuQuery ecuQuery : filteredQueries) { - numAddresses += EcuQueryDataType.getDataLength(ecuQuery); + numAddresses += EcuQueryData.getDataLength(ecuQuery); } return new byte[requestSize + RESPONSE_NON_DATA_BYTES + numAddresses]; } @@ -165,7 +165,7 @@ public final class DS2LoggerProtocol implements LoggerProtocolDS2 { int srcPos = 0; for (EcuQuery filteredQuery : filteredQueries) { - byte[] bytes = new byte[EcuQueryDataType.getDataLength(filteredQuery)]; + byte[] bytes = new byte[EcuQueryData.getDataLength(filteredQuery)]; if (((EcuData) filteredQuery.getLoggerData()).getGroupSize() > 0) { srcPos = filteredQuery.getBytes()[0]; } @@ -204,7 +204,7 @@ public final class DS2LoggerProtocol implements LoggerProtocolDS2 { int srcPos = 0; for (EcuQuery filteredQuery : filteredQueries) { - final byte[] bytes = new byte[EcuQueryDataType.getDataLength(filteredQuery)]; + final byte[] bytes = new byte[EcuQueryData.getDataLength(filteredQuery)]; srcPos = Integer.parseInt(filteredQuery.getHex(), 16) - lowestAddress; arraycopy(responseData, srcPos, bytes, 0, bytes.length); addressResults.put(filteredQuery.getHex(), bytes); @@ -266,7 +266,7 @@ public final class DS2LoggerProtocol implements LoggerProtocolDS2 { private int getDataLength(Collection queries) { int dataLength = 0; for (EcuQuery query : queries) { - dataLength += EcuQueryDataType.getDataLength(query); + dataLength += EcuQueryData.getDataLength(query); } return dataLength; } diff --git a/src/main/java/com/romraider/io/protocol/obd/iso15765/OBDLoggerProtocol.java b/src/main/java/com/romraider/io/protocol/obd/iso15765/OBDLoggerProtocol.java index 6f09ba60..f75e398e 100644 --- a/src/main/java/com/romraider/io/protocol/obd/iso15765/OBDLoggerProtocol.java +++ b/src/main/java/com/romraider/io/protocol/obd/iso15765/OBDLoggerProtocol.java @@ -38,7 +38,7 @@ import com.romraider.logger.ecu.comms.manager.PollingState; import com.romraider.logger.ecu.comms.query.EcuInit; import com.romraider.logger.ecu.comms.query.EcuInitCallback; import com.romraider.logger.ecu.comms.query.EcuQuery; -import com.romraider.logger.ecu.comms.query.EcuQueryDataType; +import com.romraider.logger.ecu.comms.query.EcuQueryData; import com.romraider.logger.ecu.definition.Module; public final class OBDLoggerProtocol implements LoggerProtocolOBD { @@ -83,7 +83,7 @@ public final class OBDLoggerProtocol implements LoggerProtocolOBD { int numAddresses = 0; for (EcuQuery ecuQuery : filteredQueries) { numAddresses += ecuQuery.getBytes().length; - numAddresses += EcuQueryDataType.getDataLength(ecuQuery); + numAddresses += EcuQueryData.getDataLength(ecuQuery); } return new byte[(numAddresses + RESPONSE_NON_DATA_BYTES)]; } @@ -123,7 +123,7 @@ public final class OBDLoggerProtocol implements LoggerProtocolOBD { int i = 0; for (EcuQuery filteredQuery : filteredQueries) { final int addrLength = filteredQuery.getBytes().length; - final int dataLength = EcuQueryDataType.getDataLength(filteredQuery); + final int dataLength = EcuQueryData.getDataLength(filteredQuery); final byte[] addr = new byte[addrLength]; final byte[] data = new byte[dataLength]; arraycopy(responseData, i, addr, 0, addrLength); diff --git a/src/main/java/com/romraider/logger/ecu/comms/learning/tableaxis/SSMTableAxisQueryParameterSet.java b/src/main/java/com/romraider/logger/ecu/comms/learning/tableaxis/SSMTableAxisQueryParameterSet.java index d1773635..75786382 100644 --- a/src/main/java/com/romraider/logger/ecu/comms/learning/tableaxis/SSMTableAxisQueryParameterSet.java +++ b/src/main/java/com/romraider/logger/ecu/comms/learning/tableaxis/SSMTableAxisQueryParameterSet.java @@ -27,6 +27,7 @@ import java.util.List; import com.romraider.Settings; import com.romraider.logger.ecu.comms.query.EcuQuery; +import com.romraider.logger.ecu.comms.query.EcuQueryData; import com.romraider.logger.ecu.comms.query.EcuQueryImpl; import com.romraider.logger.ecu.definition.EcuAddress; import com.romraider.logger.ecu.definition.EcuAddressImpl; @@ -65,13 +66,7 @@ public class SSMTableAxisQueryParameterSet { final String tableAddrStr = storageAddress.replaceAll("0x", ""); final int tableAddrBase = Integer.parseInt(tableAddrStr, 16); - int dataSize = 1; - if (storageType.toLowerCase().contains("int16")) { - dataSize = 2; - } - if (storageType.toLowerCase().contains("float")) { - dataSize = 4; - } + int dataSize = EcuQueryData.getDataLength(storageType); final int count = Integer.parseInt(size, 10); for (int i = 0; i < count; i++) { diff --git a/src/main/java/com/romraider/logger/ecu/comms/query/EcuQueryDataType.java b/src/main/java/com/romraider/logger/ecu/comms/query/EcuQueryData.java similarity index 69% rename from src/main/java/com/romraider/logger/ecu/comms/query/EcuQueryDataType.java rename to src/main/java/com/romraider/logger/ecu/comms/query/EcuQueryData.java index 217972b0..e8eef185 100644 --- a/src/main/java/com/romraider/logger/ecu/comms/query/EcuQueryDataType.java +++ b/src/main/java/com/romraider/logger/ecu/comms/query/EcuQueryData.java @@ -19,14 +19,26 @@ package com.romraider.logger.ecu.comms.query; -public final class EcuQueryDataType { +import com.romraider.logger.ecu.definition.LoggerData; - private EcuQueryDataType() {} +/** + * @return the length of the data based on the data storage type + * value set in the selected converter. + */ +public final class EcuQueryData { public final static int getDataLength(EcuQuery ecuQuery) { - int dataLength = 1; + return getDataLength(ecuQuery.getLoggerData()); + } + + public final static int getDataLength(LoggerData loggerData) { final String dataType = - ecuQuery.getLoggerData().getSelectedConvertor().getDataType().toLowerCase(); + loggerData.getSelectedConvertor().getDataType().toLowerCase(); + return getDataLength(dataType); + } + + public final static int getDataLength(String dataType) { + int dataLength = 1; if (dataType.contains("int16")) { dataLength = 2; } @@ -36,4 +48,6 @@ public final class EcuQueryDataType { } return dataLength; } + + private EcuQueryData() {} } diff --git a/src/main/java/com/romraider/logger/ecu/comms/query/EcuQueryRangeTest.java b/src/main/java/com/romraider/logger/ecu/comms/query/EcuQueryRangeTest.java index 4fbbc218..35f67711 100644 --- a/src/main/java/com/romraider/logger/ecu/comms/query/EcuQueryRangeTest.java +++ b/src/main/java/com/romraider/logger/ecu/comms/query/EcuQueryRangeTest.java @@ -25,8 +25,6 @@ import java.util.List; import org.apache.log4j.Logger; -import com.romraider.logger.ecu.definition.EcuData; - /** * Inspect the address of each query to determine if a single query * with a start address and byte length can be substituted as opposed @@ -60,16 +58,7 @@ public final class EcuQueryRangeTest { int lowestAddress = Integer.MAX_VALUE; int highestAddress = 0; for (EcuQuery query : queryList) { - final EcuData parameter = (EcuData) query.getLoggerData(); - final String storageType = parameter.getSelectedConvertor().getDataType(); - int dataSize = 1; - if (storageType.toLowerCase().contains("int16")) { - dataSize = 2; - } - if (storageType.toLowerCase().contains("float") || - storageType.toLowerCase().contains("int32")) { - dataSize = 4; - } + int dataSize = EcuQueryData.getDataLength(query); final int address = Integer.parseInt(query.getHex(), 16); if (address < lowestAddress) { lowestAddress = address;