Created a class to build the EcuQuery to retrieve the FLKC data from RAM.

This commit is contained in:
Dale Schultz 2013-07-08 19:03:45 -04:00
parent c87fd51214
commit e18ff83cce
1 changed files with 108 additions and 0 deletions

View File

@ -0,0 +1,108 @@
/*
* RomRaider Open-Source Tuning, Logging and Reflashing
* Copyright (C) 2006-2013 RomRaider.com
*
* 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
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
package com.romraider.logger.ecu.comms.learning.flkctable;
import java.util.ArrayList;
import java.util.List;
import org.apache.log4j.Logger;
import com.romraider.logger.ecu.comms.learning.parameter.Parameter;
import com.romraider.logger.ecu.comms.query.EcuQuery;
import com.romraider.logger.ecu.comms.query.EcuQueryImpl;
import com.romraider.logger.ecu.definition.EcuAddress;
import com.romraider.logger.ecu.definition.EcuAddressImpl;
import com.romraider.logger.ecu.definition.EcuData;
import com.romraider.logger.ecu.definition.EcuDataConvertor;
import com.romraider.logger.ecu.definition.EcuParameterImpl;
import com.romraider.logger.ecu.ui.paramlist.ParameterRow;
import com.romraider.util.HexUtil;
/**
* Build an EcuQuery for each of the cells in the FLKC RAM table.
*/
public class FlkcTableQueryBuilder {
private static final Logger LOGGER =
Logger.getLogger(FlkcTableQueryBuilder.class);
public FlkcTableQueryBuilder() {
}
/**
* Build an EcuQuery for each cell of the FLKC RAM table. <i>Note this
* returns an extra null query for column 0 of each row which is later
* populated with the row header (RPM Ranges) data.</i>
* @param flkc - a ParameterRow item that helps to identify the
* ECU bitness and provide a Converter for the raw data.
* @param flkcAddr - the address in RAM of the start of the table.
* @param rows - the number of rows in the table.
* @param columns - the number of columns in the table.
* @return EcuQueries divided into groups to query each row separately to
* avoid maxing out the ECU send/receive buffer.
*/
public final List<List<EcuQuery>> build(
ParameterRow flkc,
int flkcAddr,
int rows,
int columns) {
final List<List<EcuQuery>> flkcQueryRows = new ArrayList<List<EcuQuery>>();
int checksummed = 1;
int dataSize = 1;
if (Parameter.fromValue(flkc.getLoggerData().getId()) == Parameter.E41 ||
Parameter.fromValue(flkc.getLoggerData().getId()) == Parameter.E173) {
checksummed = 2;
dataSize = 4;
}
LOGGER.debug(
String.format(
"FLKC Data format rows:%d col:%d checksummed:%d " +
"dataSize:%d FLKC:%s",
rows, columns, checksummed, dataSize,
flkc.getLoggerData().getId()));
int i = 0;
for (int j = 0; j < rows; j++) {
final List<EcuQuery> flkcQueryCols = new ArrayList<EcuQuery>();
flkcQueryCols.add(null);
for (int k = 0; k < columns; k++) {
String id = "flkc-r" + j + "c" + k;
final String addrStr =
HexUtil.intToHexString(
flkcAddr + (i * dataSize * checksummed));
LOGGER.debug(
String.format(
"FLKC Data row:%d col:%d addr:%s",
j, k, addrStr));
final EcuAddress ea = new EcuAddressImpl(addrStr, dataSize, -1);
final EcuParameterImpl epi =
new EcuParameterImpl(id, addrStr, id, ea,
new EcuDataConvertor[] {
flkc.getLoggerData().getSelectedConvertor()
}
);
flkcQueryCols.add(new EcuQueryImpl((EcuData) epi));
i++;
}
flkcQueryRows.add(flkcQueryCols);
}
return flkcQueryRows;
}
}