private bool TuneDriverWish(string filename, SymbolCollection symbols, int peakTorque, int peakHP, bool autoUpdateChecksum)
{
bool retval = true;
//Increase driverwish to peakIQ if it is not already (only the rightmost 2 columns)
int dwAddress = (int)Tools.Instance.GetSymbolAddressLike(Tools.Instance.m_symbols, "Driver wish");
if (dwAddress > 0)
{
foreach (SymbolHelper sh in Tools.Instance.m_symbols)
{
if (sh.Flash_start_address == dwAddress)
{
byte[] dwdata = Tools.Instance.readdatafromfile(filename, dwAddress, sh.Length, EDCFileType.EDC15P);
//Console.WriteLine(sh.Varname + " " + sh.Y_axis_length.ToString() + " " + sh.X_axis_length.ToString());
int[] rpms = Tools.Instance.readdatafromfileasint(filename, sh.X_axis_address, sh.X_axis_length, EDCFileType.EDC15P);
for (int rows = 0; rows < sh.X_axis_length; rows++)
{
// whats the rpm?
int rpm = rpms[rows];
int targetTorque = peakTorque;
int targetPower = Tools.Instance.TorqueToPower(targetTorque, rpm);
if (targetPower > peakHP) targetTorque = Tools.Instance.PowerToTorque(peakHP, rpm);
int targetIQ = Tools.Instance.TorqueToIQ(targetTorque, rpm, 4);
// Console.WriteLine("Calculate for rpm: " + rpm.ToString() + " targetT: " + targetTorque.ToString() + " targetP: " + targetPower.ToString() + " targetIQ: " + targetIQ.ToString());
targetIQ *= 100;
byte b1 = (byte)((targetIQ & 0x00FF00) / 256);
byte b2 = (byte)(targetIQ & 0x0000FF);
dwdata[rows * sh.Y_axis_length * 2 + (sh.Y_axis_length * 2) - 2] = b1;
dwdata[rows * sh.Y_axis_length * 2 + (sh.Y_axis_length * 2) - 1] = b2;
dwdata[rows * sh.Y_axis_length * 2 + (sh.Y_axis_length * 2) - 4] = b1;
dwdata[rows * sh.Y_axis_length * 2 + (sh.Y_axis_length * 2) - 3] = b2;
}
SaveAndSyncData(dwdata.Length, (int)sh.Flash_start_address, dwdata, filename, true, "Tuned driver wish", autoUpdateChecksum);
}
}
}
else retval = false;
return retval;
}