Added methods to EcuQueryData and refactor classes to use them

This commit is contained in:
Dale Schultz 2015-01-29 23:00:56 -05:00
parent eb123a36da
commit c1890eeeaa
5 changed files with 29 additions and 31 deletions

View File

@ -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<EcuQuery> 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<EcuQuery> queries) {
int dataLength = 0;
for (EcuQuery query : queries) {
dataLength += EcuQueryDataType.getDataLength(query);
dataLength += EcuQueryData.getDataLength(query);
}
return dataLength;
}

View File

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

View File

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

View File

@ -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() {}
}

View File

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