mirror of https://github.com/rusefi/RomRaider.git
Added methods to use new EcuQueryRange class and parse the results
This commit is contained in:
parent
eb68263d6e
commit
a100c6b8e2
|
@ -81,6 +81,14 @@ public final class DS2LoggerProtocol implements LoggerProtocolDS2 {
|
||||||
module, convertToByteAddresses(filteredQueries), getDataLength(filteredQueries));
|
module, convertToByteAddresses(filteredQueries), getDataLength(filteredQueries));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public byte[] constructReadMemoryRange(
|
||||||
|
Module module, Collection<EcuQuery> queries, int length) {
|
||||||
|
|
||||||
|
return protocol.constructReadMemoryRequest(
|
||||||
|
module, convertToByteAddresses(queries), length);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public byte[] constructReadAddressResponse(Collection<EcuQuery> queries,
|
public byte[] constructReadAddressResponse(Collection<EcuQuery> queries,
|
||||||
PollingState pollState) {
|
PollingState pollState) {
|
||||||
|
@ -100,6 +108,12 @@ public final class DS2LoggerProtocol implements LoggerProtocolDS2 {
|
||||||
return new byte[requestSize + RESPONSE_NON_DATA_BYTES + numAddresses];
|
return new byte[requestSize + RESPONSE_NON_DATA_BYTES + numAddresses];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public byte[] constructReadMemoryRangeResponse(int requestSize, int length) {
|
||||||
|
|
||||||
|
return new byte[requestSize + RESPONSE_NON_DATA_BYTES + length];
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public byte[] constructReadGroupResponse(
|
public byte[] constructReadGroupResponse(
|
||||||
Collection<EcuQuery> queries, int requestSize) {
|
Collection<EcuQuery> queries, int requestSize) {
|
||||||
|
@ -133,7 +147,13 @@ public final class DS2LoggerProtocol implements LoggerProtocolDS2 {
|
||||||
protocol.checkValidEcuResetResponse(response);
|
protocol.checkValidEcuResetResponse(response);
|
||||||
}
|
}
|
||||||
|
|
||||||
// processes the response bytes and sets individual responses on corresponding query objects
|
/**
|
||||||
|
* Processes the response bytes and set individual response on corresponding
|
||||||
|
* query objects.
|
||||||
|
* If EcuData has a group size value greater than 0 then the response is
|
||||||
|
* the result of a group read and the address is the index into the response
|
||||||
|
* array.
|
||||||
|
**/
|
||||||
@Override
|
@Override
|
||||||
public void processReadAddressResponses(Collection<EcuQuery> queries, byte[] response, PollingState pollState) {
|
public void processReadAddressResponses(Collection<EcuQuery> queries, byte[] response, PollingState pollState) {
|
||||||
checkNotNullOrEmpty(queries, "queries");
|
checkNotNullOrEmpty(queries, "queries");
|
||||||
|
@ -157,6 +177,43 @@ public final class DS2LoggerProtocol implements LoggerProtocolDS2 {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Processes the response bytes and set individual response on corresponding
|
||||||
|
* query objects.
|
||||||
|
* The response data is based on the lowest EcuData address and the length
|
||||||
|
* is the result of the difference between the highest and lowest address.
|
||||||
|
* The index into the response array is based in the lowest address.
|
||||||
|
**/
|
||||||
|
public void processReadMemoryRangeResponse(
|
||||||
|
Collection<EcuQuery> queries, byte[] response) {
|
||||||
|
|
||||||
|
checkNotNullOrEmpty(queries, "queries");
|
||||||
|
checkNotNullOrEmpty(response, "response");
|
||||||
|
final byte[] responseData = extractResponseData(response);
|
||||||
|
final Collection<EcuQuery> filteredQueries = filterDuplicates(queries);
|
||||||
|
final Map<String, byte[]> addressResults = new HashMap<String, byte[]>();
|
||||||
|
|
||||||
|
int lowestAddress = Integer.MAX_VALUE;
|
||||||
|
for (EcuQuery filteredQuery : filteredQueries) {
|
||||||
|
final int address = Integer.parseInt(filteredQuery.getHex(), 16);
|
||||||
|
if (address < lowestAddress) {
|
||||||
|
lowestAddress = address;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int srcPos = 0;
|
||||||
|
for (EcuQuery filteredQuery : filteredQueries) {
|
||||||
|
final byte[] bytes = new byte[getDataLength(filteredQuery)];
|
||||||
|
srcPos = Integer.parseInt(filteredQuery.getHex(), 16) - lowestAddress;
|
||||||
|
arraycopy(responseData, srcPos, bytes, 0, bytes.length);
|
||||||
|
addressResults.put(filteredQuery.getHex(), bytes);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (EcuQuery query : queries) {
|
||||||
|
query.setResponse(addressResults.get(query.getHex()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Protocol getProtocol() {
|
public Protocol getProtocol() {
|
||||||
return protocol;
|
return protocol;
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* RomRaider Open-Source Tuning, Logging and Reflashing
|
* RomRaider Open-Source Tuning, Logging and Reflashing
|
||||||
* Copyright (C) 2006-2014 RomRaider.com
|
* Copyright (C) 2006-2015 RomRaider.com
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@ -38,6 +38,7 @@ import com.romraider.logger.ecu.comms.manager.PollingState;
|
||||||
import com.romraider.logger.ecu.comms.manager.PollingStateImpl;
|
import com.romraider.logger.ecu.comms.manager.PollingStateImpl;
|
||||||
import com.romraider.logger.ecu.comms.query.EcuInitCallback;
|
import com.romraider.logger.ecu.comms.query.EcuInitCallback;
|
||||||
import com.romraider.logger.ecu.comms.query.EcuQuery;
|
import com.romraider.logger.ecu.comms.query.EcuQuery;
|
||||||
|
import com.romraider.logger.ecu.comms.query.EcuQueryRangeTest;
|
||||||
import com.romraider.logger.ecu.definition.EcuData;
|
import com.romraider.logger.ecu.definition.EcuData;
|
||||||
import com.romraider.logger.ecu.definition.Module;
|
import com.romraider.logger.ecu.definition.Module;
|
||||||
import com.romraider.util.SettingsManager;
|
import com.romraider.util.SettingsManager;
|
||||||
|
@ -106,19 +107,35 @@ public final class DS2LoggerConnection implements LoggerConnection {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (group.equalsIgnoreCase("0x060x00")) {
|
else if (group.equalsIgnoreCase("0x060x00")) {
|
||||||
for (EcuQuery query : querySet) {
|
final EcuQueryRangeTest range = new EcuQueryRangeTest(querySet);
|
||||||
final Collection<EcuQuery> queryList = new ArrayList<EcuQuery>();
|
final Collection<EcuQuery> newQuery = range.validate();
|
||||||
queryList.add(query);
|
int length = range.getLength();
|
||||||
request = protocol.constructReadMemoryRequest(
|
if (newQuery != null && length > 0) {
|
||||||
module, queryList);
|
request = protocol.constructReadMemoryRange(
|
||||||
|
module, newQuery, length);
|
||||||
LOGGER.debug("Mode:" + pollState.getCurrentState() + " " +
|
LOGGER.debug("Mode:" + pollState.getCurrentState() + " " +
|
||||||
module + " Request ---> " + asHex(request));
|
module + " Request ---> " + asHex(request));
|
||||||
response = protocol.constructReadAddressResponse(
|
response = protocol.constructReadMemoryRangeResponse(
|
||||||
queryList, request.length);
|
request.length, length);
|
||||||
protocol.processReadAddressResponses(
|
protocol.processReadMemoryRangeResponse(
|
||||||
queryList,
|
querySet,
|
||||||
sendRcv(module ,request, response, pollState),
|
sendRcv(module, request, response, pollState));
|
||||||
pollState);
|
}
|
||||||
|
else {
|
||||||
|
for (EcuQuery query : querySet) {
|
||||||
|
final Collection<EcuQuery> queryList = new ArrayList<EcuQuery>();
|
||||||
|
queryList.add(query);
|
||||||
|
request = protocol.constructReadMemoryRequest(
|
||||||
|
module, queryList);
|
||||||
|
LOGGER.debug("Mode:" + pollState.getCurrentState() + " " +
|
||||||
|
module + " Request ---> " + asHex(request));
|
||||||
|
response = protocol.constructReadAddressResponse(
|
||||||
|
queryList, request.length);
|
||||||
|
protocol.processReadAddressResponses(
|
||||||
|
queryList,
|
||||||
|
sendRcv(module, request, response, pollState),
|
||||||
|
pollState);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* RomRaider Open-Source Tuning, Logging and Reflashing
|
* RomRaider Open-Source Tuning, Logging and Reflashing
|
||||||
* Copyright (C) 2006-2014 RomRaider.com
|
* Copyright (C) 2006-2015 RomRaider.com
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@ -39,4 +39,11 @@ public interface LoggerProtocolDS2 extends LoggerProtocol {
|
||||||
|
|
||||||
byte[] constructReadMemoryRequest(
|
byte[] constructReadMemoryRequest(
|
||||||
Module module, Collection<EcuQuery> queryList);
|
Module module, Collection<EcuQuery> queryList);
|
||||||
|
|
||||||
|
byte[] constructReadMemoryRange(Module module,
|
||||||
|
Collection<EcuQuery> queries, int length);
|
||||||
|
|
||||||
|
public byte[] constructReadMemoryRangeResponse(int requestSize, int length);
|
||||||
|
|
||||||
|
void processReadMemoryRangeResponse(Collection<EcuQuery> queries, byte[] response);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue