/* * 0.2 bar = 197,5 Nm * 0.4 bar = 247,5 Nm * 0.6 bar = 287,5 Nm * 0.8 bar = 340 Nm * 1.0 bar = 377,5 Nm * 1.2 bar = 430 Nm * 1.4 bar = 472,5 Nm * 1.6 bar = 533,3333333 Nm * 1.8 bar = 600 Nm * */ public double CalculateTorqueFromPressure(double pressure, TurboType turbo) { double tq = 0; double[] matrix = new double[30] { 197.5, 247.5, 287.5, 340, 365, 410, 460, 533.3, 600, 640, 197.5, 247.5, 287.5, 340, 365, 410, 460, 533.3, 600, 640, 197.5, 247.5, 287.5, 340, 365, 410, 460, 533.3, 600, 640 }; double[] x_axis = new double[10] { 0.2, 0.4, 0.6, 0.8, 1.0, 1.2, 1.4, 1.6, 1.8, 2.0 }; double[] y_axis = new double[3] { 0, 1, 2 }; if (turbo == TurboType.Stock) { matrix = new double[30] { 160, 210, 240, 270, 300, 360, 410, 440, 450, 460, 160, 210, 240, 270, 300, 360, 410, 440, 450, 460, 160, 210, 240, 270, 300, 360, 410, 440, 450, 460 }; } else if (turbo == TurboType.TD0415T) { matrix = new double[30] { 170, 220, 260, 310, 340, 400, 450, 490, 540, 560, 170, 220, 260, 310, 340, 400, 450, 490, 540, 560, 170, 220, 260, 310, 340, 400, 450, 490, 540, 560 }; } else if (turbo == TurboType.TD0419T || turbo == TurboType.GT28BB || turbo == TurboType.GT28RS) { matrix = new double[30] { 210, 260, 300, 360, 400, 450, 490, 540, 590, 620, 210, 260, 300, 360, 400, 450, 490, 540, 590, 620, 210, 260, 300, 360, 400, 450, 490, 540, 590, 620 }; } else if (turbo == TurboType.GT3071R || turbo == TurboType.HX35w) { matrix = new double[30] { 250, 300, 340, 390, 440, 480, 520, 570, 610, 650, 250, 300, 340, 390, 440, 480, 520, 570, 610, 650, 250, 300, 340, 390, 440, 480, 520, 570, 610, 650 }; } else if (turbo == TurboType.HX40w || turbo == TurboType.S400SX371) { matrix = new double[30] { 270, 320, 360, 410, 460, 500, 540, 580, 620, 670, 270, 320, 360, 410, 460, 500, 540, 580, 620, 670, 270, 320, 360, 410, 460, 500, 540, 580, 620, 670 }; } tq = Handle_tables(1, pressure, 3, 10, matrix, y_axis, x_axis); return(tq); }
public double CalculatePressureFromTorque(double torque, TurboType turbo) { double pressure = 0; double[] matrix = new double[30] { 0.2, 0.4, 0.6, 0.8, 1.0, 1.2, 1.4, 1.6, 1.8, 2.0, 0.2, 0.4, 0.6, 0.8, 1.0, 1.2, 1.4, 1.6, 1.8, 2.0, 0.2, 0.4, 0.6, 0.8, 1.0, 1.2, 1.4, 1.6, 1.8, 2.0}; double[] x_axis = new double[10] { 197.5, 247.5, 287.5, 340, 365, 410, 460, 533.3, 600, 640 }; if (turbo == TurboType.Stock) { x_axis = new double[10] { 160, 210, 250, 300, 330, 390, 430, 440, 450, 460 }; } else if (turbo == TurboType.TD0415T) { x_axis = new double[10] { 170, 220, 260, 310, 340, 400, 450, 490, 540, 560 }; } else if (turbo == TurboType.TD0419T || turbo == TurboType.GT28BB || turbo == TurboType.GT28RS) { x_axis = new double[10] { 210, 260, 300, 360, 400, 450, 490, 540, 590, 620 }; } else if (turbo == TurboType.GT3071R || turbo == TurboType.HX35w) { x_axis = new double[10] { 250, 300, 340, 390, 440, 480, 520, 570, 610, 650 }; } else if (turbo == TurboType.HX40w) { x_axis = new double[10] { 270, 320, 360, 410, 460, 500, 540, 580, 620, 670 }; } double[] y_axis = new double[3] { 0, 1, 2 }; pressure = Handle_tables(1, torque, 3, 10, matrix, y_axis, x_axis); return pressure; }
public void FillGraph(double[] values, double[] injvalues, TurboType turbo) { DataTable chartdt = new DataTable(); chartdt.Columns.Add("X", Type.GetType("System.Double")); chartdt.Columns.Add("Y", Type.GetType("System.Double")); chartdt.Columns.Add("INJDC", Type.GetType("System.Double")); for (int i = 0; i < values.Length; i++) { chartdt.Rows.Add(Convert.ToDouble(x_axisvalues.GetValue(i)), values.GetValue(i), injvalues.GetValue(i)); } NChart chart = nChartControl1.Charts[0]; //NSeries series = (NSeries)chart.Series[0]; NSmoothLineSeries line = null; NSmoothLineSeries line2 = null; NSmoothLineSeries line3 = null; if (chart.Series.Count == 0) { line = (NSmoothLineSeries)chart.Series.Add(SeriesType.SmoothLine); } else { line = (NSmoothLineSeries)chart.Series[0]; } if (chart.Series.Count == 1) { line2 = (NSmoothLineSeries)chart.Series.Add(SeriesType.SmoothLine); } else { line2 = (NSmoothLineSeries)chart.Series[1]; } if (chart.Series.Count == 2) { line3 = (NSmoothLineSeries)chart.Series.Add(SeriesType.SmoothLine); } else { line3 = (NSmoothLineSeries)chart.Series[2]; } line.ClearDataPoints(); line2.ClearDataPoints(); line3.ClearDataPoints(); PressureToTorque ptt = new PressureToTorque(); foreach (DataRow dr in chartdt.Rows) { double power = 0; double torque = 0; torque = ptt.CalculateTorqueFromPressure(Convert.ToDouble(dr["Y"]), turbo); power = TorqueToPower(torque, Convert.ToDouble(dr["X"])); //power = line.AddDataPoint(new NDataPoint(Convert.ToDouble(dr["X"]), torque)); line2.AddDataPoint(new NDataPoint(Convert.ToDouble(dr["X"]), power)); line3.AddDataPoint(new NDataPoint(Convert.ToDouble(dr["X"]), Convert.ToDouble(dr["INJDC"]))); } nChartControl1.Refresh(); }
public void SetTurboType(TurboType turbo) { comboBoxEdit3.SelectedIndex = (int)turbo; }
private void UpdateMaxima(TurboType turbo, InjectorType injectors, MapSensorType mapSensor) { switch (mapSensor) { case MapSensorType.MapSensor25: // max achievable 400Nm / 1.45 bar if (injectors == InjectorType.Stock) { spinEdit1.Properties.MaxValue = 400; spinEdit2.Properties.MaxValue = (decimal)1.30; } else { spinEdit1.Properties.MaxValue = 450; spinEdit2.Properties.MaxValue = (decimal)1.45; } break; case MapSensorType.MapSensor30: switch (injectors) { case InjectorType.Stock: spinEdit1.Properties.MaxValue = 400; spinEdit2.Properties.MaxValue = (decimal)1.30; break; case InjectorType.GreenGiants: switch (turbo) { case TurboType.Stock: case TurboType.TD0415T: spinEdit1.Properties.MaxValue = 450; spinEdit2.Properties.MaxValue = (decimal)1.45; break; case TurboType.GT28BB: case TurboType.GT28RS: case TurboType.TD0419T: spinEdit1.Properties.MaxValue = 550; spinEdit2.Properties.MaxValue = (decimal)1.70; break; case TurboType.GT3071R: case TurboType.HX35w: spinEdit1.Properties.MaxValue = 550; spinEdit2.Properties.MaxValue = (decimal)1.50; break; case TurboType.HX40w: case TurboType.S400SX371: spinEdit1.Properties.MaxValue = 550; spinEdit2.Properties.MaxValue = (decimal)1.40; break; } break; case InjectorType.Siemens630Dekas: // 3.0 bar sensor, 630cc injectors -> max 600Nm switch (turbo) { case TurboType.Stock: case TurboType.TD0415T: spinEdit1.Properties.MaxValue = 450; spinEdit2.Properties.MaxValue = (decimal)1.45; break; case TurboType.GT28BB: case TurboType.GT28RS: case TurboType.TD0419T: spinEdit1.Properties.MaxValue = 580; spinEdit2.Properties.MaxValue = (decimal)1.75; break; case TurboType.GT3071R: case TurboType.HX35w: spinEdit1.Properties.MaxValue = 600; spinEdit2.Properties.MaxValue = (decimal)1.80; break; case TurboType.HX40w: case TurboType.S400SX371: spinEdit1.Properties.MaxValue = 600; spinEdit2.Properties.MaxValue = (decimal)1.70; break; } break; case InjectorType.Siemens875Dekas: case InjectorType.Siemens1000cc: // 3.0 bar sensor, 630cc injectors -> limit to turbo only switch (turbo) { case TurboType.Stock: case TurboType.TD0415T: spinEdit1.Properties.MaxValue = 450; spinEdit2.Properties.MaxValue = (decimal)1.45; break; case TurboType.GT28BB: case TurboType.GT28RS: case TurboType.TD0419T: spinEdit1.Properties.MaxValue = 580; spinEdit2.Properties.MaxValue = (decimal)1.75; break; case TurboType.GT3071R: case TurboType.HX35w: spinEdit1.Properties.MaxValue = 620; spinEdit2.Properties.MaxValue = (decimal)1.9; break; case TurboType.HX40w: case TurboType.S400SX371: spinEdit1.Properties.MaxValue = 670; spinEdit2.Properties.MaxValue = (decimal)2.0; break; } break; } break; case MapSensorType.MapSensor35: case MapSensorType.MapSensor40: case MapSensorType.MapSensor50: switch (injectors) { case InjectorType.Stock: spinEdit1.Properties.MaxValue = 400; spinEdit2.Properties.MaxValue = (decimal)1.30; break; case InjectorType.GreenGiants: switch (turbo) { case TurboType.Stock: case TurboType.TD0415T: spinEdit1.Properties.MaxValue = 450; spinEdit2.Properties.MaxValue = (decimal)1.45; break; case TurboType.GT28BB: case TurboType.GT28RS: case TurboType.TD0419T: spinEdit1.Properties.MaxValue = 550; spinEdit2.Properties.MaxValue = (decimal)1.70; break; case TurboType.GT3071R: case TurboType.HX35w: spinEdit1.Properties.MaxValue = 550; spinEdit2.Properties.MaxValue = (decimal)1.50; break; case TurboType.HX40w: case TurboType.S400SX371: spinEdit1.Properties.MaxValue = 550; spinEdit2.Properties.MaxValue = (decimal)1.40; break; } break; case InjectorType.Siemens630Dekas: // 3.0 bar sensor, 630cc injectors -> max 600Nm switch (turbo) { case TurboType.Stock: case TurboType.TD0415T: spinEdit1.Properties.MaxValue = 450; spinEdit2.Properties.MaxValue = (decimal)1.45; break; case TurboType.GT28BB: case TurboType.GT28RS: case TurboType.TD0419T: spinEdit1.Properties.MaxValue = 580; spinEdit2.Properties.MaxValue = (decimal)1.75; break; case TurboType.GT3071R: case TurboType.HX35w: spinEdit1.Properties.MaxValue = 600; spinEdit2.Properties.MaxValue = (decimal)1.80; break; case TurboType.HX40w: case TurboType.S400SX371: spinEdit1.Properties.MaxValue = 600; spinEdit2.Properties.MaxValue = (decimal)1.70; break; } break; case InjectorType.Siemens875Dekas: case InjectorType.Siemens1000cc: // 3.0 bar sensor, 630cc injectors -> limit to turbo only switch (turbo) { case TurboType.Stock: case TurboType.TD0415T: spinEdit1.Properties.MaxValue = 450; spinEdit2.Properties.MaxValue = (decimal)1.45; break; case TurboType.GT28BB: case TurboType.GT28RS: case TurboType.TD0419T: spinEdit1.Properties.MaxValue = 580; spinEdit2.Properties.MaxValue = (decimal)1.75; break; case TurboType.GT3071R: case TurboType.HX35w: spinEdit1.Properties.MaxValue = 620; spinEdit2.Properties.MaxValue = (decimal)1.9; break; case TurboType.HX40w: case TurboType.S400SX371: spinEdit1.Properties.MaxValue = 670; spinEdit2.Properties.MaxValue = (decimal)2.2; break; } break; } break; } UpdateStage(); }
private void TuneToStage(string m_currentfile, int stage, double maxBoostValue, double maxBoostFirstGear, double maxBoostSecondGear, double maxBoostFirstGearAUT, double fuelCutLevel, double AutoGearBoxPercentage, bool isLpt, TurboType turboType, InjectorType injectorType, MapSensorType mapSensorType) { m_resume = new Trionic5Resume(); m_resume.AddToResumeTable("Tuning your binary to stage: " + stage.ToString()); // get the software ID from the bainery string enginetp = readenginetype(m_currentfile); string partnumber = readpartnumber(m_currentfile); // look up parameters for this sw id PartNumberConverter pnc = new PartNumberConverter(); ECUInformation ecuinfo = pnc.GetECUInfo(partnumber, enginetp); File.Copy(m_currentfile, Path.GetDirectoryName(m_currentfile) + "\\" + Path.GetFileNameWithoutExtension(m_currentfile) + DateTime.Now.ToString("yyyyMMddHHmmss") + "beforetuningtostage" + stage.ToString() + ".bin", true); m_resume.AddToResumeTable("Backup file created (" + Path.GetFileNameWithoutExtension(m_currentfile) + DateTime.Now.ToString("yyyyMMddHHmmss") + "beforetuningtostage" + stage.ToString() + ".bin" + ")"); switch (stage) { case 1: SetRegKonMatFirstGearManual(m_currentfile, 30); SetRegKonMatSecondGearManual(m_currentfile, 45); SetRegKonMatFirstGearAutomatic(m_currentfile, 30); break; case 2: SetRegKonMatFirstGearManual(m_currentfile, 45); SetRegKonMatSecondGearManual(m_currentfile, 45); SetRegKonMatFirstGearAutomatic(m_currentfile, 45); break; case 3: default: SetRegKonMatFirstGearManual(m_currentfile, 45); SetRegKonMatSecondGearManual(m_currentfile, 45); SetRegKonMatFirstGearAutomatic(m_currentfile, 45); break; } if (CheckBoostRegulationMapEmpty(m_currentfile)) { // empty reg_kon_mat switch (stage) { case 1: FillRegulationMapValue(m_currentfile, 45); break; case 2: FillRegulationMapValue(m_currentfile, 45); break; case 3: default: FillRegulationMapValue(m_currentfile, 45); break; } } if (CheckBoostRegulationAUTMapEmpty(m_currentfile)) { switch (stage) { case 1: FillRegulationAUTMapValue(m_currentfile, 45); break; case 2: FillRegulationAUTMapValue(m_currentfile, 45); break; case 3: default: FillRegulationAUTMapValue(m_currentfile, 45); break; } } if (CheckPIDControlEmpty(m_currentfile)) { FillDefaultPIDControls(m_currentfile); } if (CheckPIDControlAUTEmpty(m_currentfile)) { FillDefaultPIDAUTControls(m_currentfile); } //depending on turbotype!!! SetBoostRequestMaps(turboType, injectorType, mapSensorType, m_currentfile, maxBoostValue, AutoGearBoxPercentage, isLpt); if (/*!isLpt*/true) // don't if T5.2&& m_currentfile_size > 0x20000 { // should be percentages /* SetInjectionMap(m_currentfile,15, 15, 255); SetInjectionMap(m_currentfile,14, 15, 253); SetInjectionMap(m_currentfile,13, 15, 253); SetInjectionMap(m_currentfile,12, 15, 249); SetInjectionMap(m_currentfile,11, 15, 248); SetInjectionMap(m_currentfile,10, 15, 245); SetInjectionMap(m_currentfile,9, 15, 236); SetInjectionMap(m_currentfile,15, 14, 255); SetInjectionMap(m_currentfile,14, 14, 253); SetInjectionMap(m_currentfile,13, 14, 253); SetInjectionMap(m_currentfile,12, 14, 235); SetInjectionMap(m_currentfile,11, 14, 234); SetInjectionMap(m_currentfile,10, 14, 226); SetInjectionMap(m_currentfile,9, 14, 225); SetInjectionMap(m_currentfile,15, 13, 248); SetInjectionMap(m_currentfile,14, 13, 245); SetInjectionMap(m_currentfile,13, 13, 245); SetInjectionMap(m_currentfile,12, 13, 224); SetInjectionMap(m_currentfile,11, 13, 217); SetInjectionMap(m_currentfile,10, 13, 205); SetInjectionMap(m_currentfile,9, 13, 189); SetInjectionMap(m_currentfile,15, 12, 219); SetInjectionMap(m_currentfile,14, 12, 215); SetInjectionMap(m_currentfile,13, 12, 213); SetInjectionMap(m_currentfile,12, 12, 206); SetInjectionMap(m_currentfile,11, 12, 205); SetInjectionMap(m_currentfile,10, 12, 198); SetInjectionMap(m_currentfile,9, 12, 176); SetInjectionMap(m_currentfile,15, 11, 198); SetInjectionMap(m_currentfile,14, 11, 192); SetInjectionMap(m_currentfile,13, 11, 191); SetInjectionMap(m_currentfile,12, 11, 190); SetInjectionMap(m_currentfile,11, 11, 190); SetInjectionMap(m_currentfile,10, 11, 183); SetInjectionMap(m_currentfile,9, 11, 163);*/ } IncreaseInjectionKnockMap(m_currentfile, 0, 4); IncreaseInjectionKnockMap(m_currentfile, 1, 4); IncreaseInjectionKnockMap(m_currentfile, 2, 4); //SetIgnitionMap(m_currentfile, 15, 17, 1.5); //SetIgnitionMap(m_currentfile, 14, 17, 1.0); //SetIgnitionMap(m_currentfile, 13, 17, 0.5); //byte fuelcut = (byte)((fuelCutLevel + 1) * 100); SetBoostLimitMap(m_currentfile, 254 /* fuelcut */); //m_resume.m_resume.AddToResumeTable("Updated fuelcut map to: " + fuelCutLevel.ToString() + " bar"); byte fglimit = (byte)((maxBoostFirstGear + 1) * 100); SetFirstGearLimiter(m_currentfile, fglimit); m_resume.AddToResumeTable("Updated first gear limiter (MAN) to: " + maxBoostFirstGear.ToString() + " bar"); byte fgalimit = (byte)((maxBoostFirstGearAUT + 1) * 100); SetFirstGearLimiterAutoTrans(m_currentfile, fgalimit); m_resume.AddToResumeTable("Updated first gear limiter (AUT) to: " + maxBoostFirstGearAUT.ToString() + " bar"); byte sglimit = (byte)((maxBoostSecondGear + 1) * 100); SetSecondGearLimiter(m_currentfile, sglimit); m_resume.AddToResumeTable("Updated second gear limiter (MAN) to: " + maxBoostSecondGear.ToString() + " bar"); // <Guido> add Max_regl_temp1 Max_regl_temp2 SetMaxReglTempValues(m_currentfile, 250); try { Trionic5Anomalies anomalies = new Trionic5Anomalies(); anomalies.CheckBinForAnomalies(m_currentfile, m_resume, false, true, m_fileInformation ); } catch (Exception E) { Console.WriteLine("CheckBinForAnomalies: " + E.Message); } // mark this particular file as tuned to stage X, to prevent running the wizard on this file again! //enginetp = enginetp.Substring(0, enginetp.Length - 4); //enginetp += "T5S" + stage.ToString(); //writeenginetype(enginetp); WriteTunedToStageMarker(m_currentfile, stage); m_resume.AddToResumeTable("Updated binary description with tuned stage"); Trionic5File file = new Trionic5File(); file.LibraryPath = Application.StartupPath + "\\Binaries"; file.SetAutoUpdateChecksum(m_autoUpdateChecksum); file.UpdateChecksum(m_currentfile); }
public TuningResult FreeTuneBinary(IECUFile m_File, double peakTorque, double peakBoost, bool tuneBasedOnTorque, MapSensorType mapType, TurboType turboType, InjectorType injectorType, BPCType valve, int rpmlimiter, int knockTime) { Trionic5Resume _localResume = new Trionic5Resume(); m_fileInformation = m_File.GetFileInfo(); string filename = m_fileInformation.Filename; // first set things right by running the tunetostagex wizard // generate a nice x_scale for ignition map (18 long) PressureToTorque ptt = new PressureToTorque(); double peak_boost = ptt.CalculatePressureFromTorque(peakTorque, turboType); if (!tuneBasedOnTorque) peak_boost = peakBoost; double peak_boost_request = peak_boost; double correction = 1.0; if (mapType == MapSensorType.MapSensor30) correction = 1.2; if (mapType == MapSensorType.MapSensor35) correction = 1.4; if (mapType == MapSensorType.MapSensor40) correction = 1.6; if (mapType == MapSensorType.MapSensor50) correction = 2.0; peak_boost_request *= 100; peak_boost_request += 100; peak_boost_request /= correction; peak_boost_request -= 100; peak_boost_request /= 100; double min_pressure = -1; double max_pressure = peak_boost; #region preparation /********* start of prepare phase *********/ string enginetp = readenginetype(filename); string partnumber = readpartnumber(filename); PartNumberConverter pnc = new PartNumberConverter(); ECUInformation ecuinfo = pnc.GetECUInfo(partnumber, enginetp); bool isLpt = true; if (ReadTunedToStageMarker(filename) > 0) { return TuningResult.TuningFailedAlreadyTuned; } else if (ReadThreeBarConversionMarker(filename) > 0) { return TuningResult.TuningFailedThreebarSensor; } Trionic5Properties t5p = m_File.GetTrionicProperties(); if (ecuinfo.Valid) { if (ecuinfo.Isaero || ecuinfo.Isfpt) { isLpt = false; } } if (t5p.MapSensorType != mapType) { ConvertFileToThreeBarMapSensor(m_fileInformation, t5p.MapSensorType, mapType); } // check injector type if (t5p.InjectorType != injectorType) { int inj_konst_diff = DetermineDifferenceInInjectorConstant(t5p.InjectorType, injectorType); AddToInjectorConstant(filename, inj_konst_diff); SetInjectorBatteryCorrectionMap(m_File, injectorType); //TODO: check this function for correctness! } /*if (injectorType == InjectorType.Stock) writebyteinfile(filename, GetSymbolAddress("Inj_konst!"), 19); else if (injectorType == InjectorType.GreenGiants) writebyteinfile(filename, GetSymbolAddress("Inj_konst!"), 18); else if (injectorType == InjectorType.Siemens630Dekas) writebyteinfile(filename, GetSymbolAddress("Inj_konst!"), 15); else if (injectorType == InjectorType.Siemens875Dekas) writebyteinfile(filename, GetSymbolAddress("Inj_konst!"), 13); else if (injectorType == InjectorType.Siemens875Dekas) writebyteinfile(filename, GetSymbolAddress("Inj_konst!"), 13);*/ t5p.TurboType = turboType; t5p.InjectorType = injectorType; t5p.MapSensorType = mapType; // determine stage?? int stage = 0; if (peak_boost < 1.2) stage = 1; else if (peak_boost < 1.3) stage = 2; else if (peak_boost < 1.4) stage = 3; else if (peak_boost < 1.5) stage = 4; else if (peak_boost < 1.6) stage = 5; else if (peak_boost < 1.7) stage = 6; else if (peak_boost < 1.8) stage = 7; else if (peak_boost < 1.9) stage = 8; else stage = 9; m_File.SetTrionicOptions(t5p); TuneToStage(filename, stage, peak_boost_request, 0.52, 1.0, 0.52, 1.54, 90, isLpt, turboType, injectorType, mapType); _localResume.ResumeTuning = m_resume.ResumeTuning.Copy(); /*********** end of prepare phase **************/ // set limiter, bpc valve type and knock time SetBPCValveType(filename, valve); _localResume.AddToResumeTable("Set BPC driving frequencies"); SetRPMLimiter(filename, rpmlimiter); _localResume.AddToResumeTable("Set RPM limiter"); SetKnockTime(filename, knockTime); _localResume.AddToResumeTable("Set knock time value"); #endregion // if mapsensor != stock and injectors are 630 cc or bigger if (mapType != MapSensorType.MapSensor25 && (injectorType == InjectorType.Siemens630Dekas || injectorType == InjectorType.Siemens875Dekas || injectorType == InjectorType.Siemens1000cc)) { // now scale it double step = (max_pressure - min_pressure) / 17; double[] axisforIgnitionMap = new double[18]; for (int i = 0; i < 18; i++) { axisforIgnitionMap.SetValue(min_pressure + (i * step), i); } byte[] actualAxis = new byte[36]; int j = 0; for (int i = 0; i < 18; i++) { double currValue = Convert.ToDouble(axisforIgnitionMap.GetValue(i)); currValue *= 100; currValue += 100; if (mapType == MapSensorType.MapSensor30) currValue /= 1.2; else if (mapType == MapSensorType.MapSensor35) currValue /= 1.4; else if (mapType == MapSensorType.MapSensor40) currValue /= 1.6; else if (mapType == MapSensorType.MapSensor50) currValue /= 2.0; int ival = Convert.ToInt32(currValue); byte v1 = (byte)(ival / 256); byte v2 = (byte)(ival - (int)v1 * 256); actualAxis.SetValue(v1, j++); actualAxis.SetValue(v2, j++); } m_File.WriteData(actualAxis, (uint)m_File.GetFileInfo().GetSymbolAddressFlash("Ign_map_0_x_axis!")); _localResume.AddToResumeTable("Generated and saved new ignition map x axis"); //Generate the ignition map based on the axis values GenerateAndSaveNewIgnitionMap(m_File, false); _localResume.AddToResumeTable("Generated and saved new ignition map"); min_pressure = -0.8; step = (max_pressure - min_pressure) / 15; // now setup x axis for fuel map double[] axisforFuelMap = new double[16]; for (int i = 0; i < 16; i++) { axisforFuelMap.SetValue(min_pressure + (i * step), i); } byte[] actualFuelAxis = new byte[16]; for (int i = 0; i < 16; i++) { double currValue = Convert.ToDouble(axisforFuelMap.GetValue(i)); currValue *= 100; currValue += 100; if (mapType == MapSensorType.MapSensor30) currValue /= 1.2; else if (mapType == MapSensorType.MapSensor35) currValue /= 1.4; else if (mapType == MapSensorType.MapSensor40) currValue /= 1.6; else if (mapType == MapSensorType.MapSensor50) currValue /= 2.0; int ival = Convert.ToInt32(currValue); if (ival > 255) ival = 255; actualFuelAxis.SetValue((byte)ival, i); } m_File.WriteData(actualFuelAxis, (uint)m_File.GetFileInfo().GetSymbolAddressFlash("Fuel_map_xaxis!")); _localResume.AddToResumeTable("Generated and saved new fuel map x axis"); //Generate the ignition map based on the axis values GenerateAndSaveNewFuelMap(m_File); _localResume.AddToResumeTable("Generated and saved new fuel map"); min_pressure = -0.3; step = (max_pressure - min_pressure) / 11; // now setup x axis for fuel map double[] axisforFuelKnockMap = new double[12]; for (int i = 0; i < 12; i++) { axisforFuelKnockMap.SetValue(min_pressure + (i * step), i); } byte[] actualFuelKnockAxis = new byte[12]; for (int i = 0; i < 12; i++) { double currValue = Convert.ToDouble(axisforFuelKnockMap.GetValue(i)); currValue *= 100; currValue += 100; if (mapType == MapSensorType.MapSensor30) currValue /= 1.2; else if (mapType == MapSensorType.MapSensor35) currValue /= 1.4; else if (mapType == MapSensorType.MapSensor40) currValue /= 1.6; else if (mapType == MapSensorType.MapSensor50) currValue /= 2.0; int ival = Convert.ToInt32(currValue); if (ival > 255) ival = 255; actualFuelKnockAxis.SetValue((byte)ival, i); } m_File.WriteData(actualFuelKnockAxis, (uint)m_File.GetFileInfo().GetSymbolAddressFlash("Fuel_knock_xaxis!")); _localResume.AddToResumeTable("Generated and saved new fuel knock map x axis"); //Generate the ignition map based on the axis values GenerateAndSaveNewFuelKnockMap(m_File); _localResume.AddToResumeTable("Generated and saved new fuel knock map"); // mesh up a boost request map for this.. already possible // adjust peak boost to be scaled for the mapsensor type SetBoostRequestMaps(turboType, injectorType, mapType, m_File.GetFileInfo().Filename, peak_boost_request, 100, isLpt); _localResume.AddToResumeTable("Generated boost request maps"); } m_resume.ResumeTuning = _localResume.ResumeTuning.Copy(); return TuningResult.TuningSuccess; }
internal void LiftBoostRequestForTurboType(TurboType turboType) { // read boost request but hold peak boost for longer, depeding on turbo type }
private void SetBoostRequestMaps(TurboType turboType, InjectorType injectorType, MapSensorType mapSensorType, string m_currentfile, double maxBoostValue, double AutoGearBoxPercentage, bool isLpt) { switch (turboType) { case TurboType.Stock: SetBoostRequestMap(m_currentfile, 0, 6, maxBoostValue * 0.85, AutoGearBoxPercentage); // % of max boost SetBoostRequestMap(m_currentfile, 1, 6, maxBoostValue * 0.87, AutoGearBoxPercentage); // low rpm SetBoostRequestMap(m_currentfile, 2, 6, maxBoostValue * 0.89, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 3, 6, maxBoostValue * 0.90, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 4, 6, maxBoostValue * 0.95, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 5, 6, maxBoostValue, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 6, 6, maxBoostValue, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 7, 6, maxBoostValue, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 8, 6, maxBoostValue, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 9, 6, maxBoostValue, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 10, 6, maxBoostValue, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 11, 6, maxBoostValue * 0.9, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 12, 6, maxBoostValue * 0.8, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 13, 6, maxBoostValue * 0.7, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 14, 6, maxBoostValue * 0.65, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 15, 6, maxBoostValue * 0.6, AutoGearBoxPercentage); // high rpm SetBoostRequestMap(m_currentfile, 0, 7, maxBoostValue * 0.85, AutoGearBoxPercentage); // % of max boost SetBoostRequestMap(m_currentfile, 1, 7, maxBoostValue * 0.89, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 2, 7, maxBoostValue * 0.9, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 3, 7, maxBoostValue * 0.95, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 4, 7, maxBoostValue, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 5, 7, maxBoostValue, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 6, 7, maxBoostValue, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 7, 7, maxBoostValue, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 8, 7, maxBoostValue, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 9, 7, maxBoostValue, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 10, 7, maxBoostValue, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 11, 7, maxBoostValue * 0.9, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 12, 7, maxBoostValue * 0.8, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 13, 7, maxBoostValue * 0.7, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 14, 7, maxBoostValue * 0.65, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 15, 7, maxBoostValue * 0.6, AutoGearBoxPercentage); break; case TurboType.TD0415T: // hold longer than stock SetBoostRequestMap(m_currentfile, 0, 6, maxBoostValue * 0.85, AutoGearBoxPercentage); // % of max boost SetBoostRequestMap(m_currentfile, 1, 6, maxBoostValue * 0.87, AutoGearBoxPercentage); // low rpm SetBoostRequestMap(m_currentfile, 2, 6, maxBoostValue * 0.89, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 3, 6, maxBoostValue * 0.90, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 4, 6, maxBoostValue * 0.95, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 5, 6, maxBoostValue, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 6, 6, maxBoostValue, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 7, 6, maxBoostValue, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 8, 6, maxBoostValue, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 9, 6, maxBoostValue, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 10, 6, maxBoostValue, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 11, 6, maxBoostValue, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 12, 6, maxBoostValue * 0.95, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 13, 6, maxBoostValue * 0.9, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 14, 6, maxBoostValue * 0.80, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 15, 6, maxBoostValue * 0.65, AutoGearBoxPercentage); // high rpm SetBoostRequestMap(m_currentfile, 0, 7, maxBoostValue * 0.85, AutoGearBoxPercentage); // % of max boost SetBoostRequestMap(m_currentfile, 1, 7, maxBoostValue * 0.89, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 2, 7, maxBoostValue * 0.9, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 3, 7, maxBoostValue * 0.95, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 4, 7, maxBoostValue, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 5, 7, maxBoostValue, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 6, 7, maxBoostValue, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 7, 7, maxBoostValue, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 8, 7, maxBoostValue, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 9, 7, maxBoostValue, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 10, 7, maxBoostValue, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 11, 7, maxBoostValue , AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 12, 7, maxBoostValue * 0.95, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 13, 7, maxBoostValue * 0.90, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 14, 7, maxBoostValue * 0.80, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 15, 7, maxBoostValue * 0.65, AutoGearBoxPercentage); break; case TurboType.TD0419T: // hold longer than stock but spool later case TurboType.GT28BB: // hold longer than stock but spool later case TurboType.GT28RS: // hold longer than stock but spool later SetBoostRequestMap(m_currentfile, 0, 6, maxBoostValue * 0.60, AutoGearBoxPercentage); // % of max boost SetBoostRequestMap(m_currentfile, 1, 6, maxBoostValue * 0.60, AutoGearBoxPercentage); // low rpm SetBoostRequestMap(m_currentfile, 2, 6, maxBoostValue * 0.60, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 3, 6, maxBoostValue * 0.65, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 4, 6, maxBoostValue * 0.80, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 5, 6, maxBoostValue * 0.95, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 6, 6, maxBoostValue, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 7, 6, maxBoostValue, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 8, 6, maxBoostValue, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 9, 6, maxBoostValue, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 10, 6, maxBoostValue, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 11, 6, maxBoostValue, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 12, 6, maxBoostValue * 0.95, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 13, 6, maxBoostValue * 0.9, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 14, 6, maxBoostValue * 0.85, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 15, 6, maxBoostValue * 0.70, AutoGearBoxPercentage); // high rpm SetBoostRequestMap(m_currentfile, 0, 7, maxBoostValue * 0.60, AutoGearBoxPercentage); // % of max boost SetBoostRequestMap(m_currentfile, 1, 7, maxBoostValue * 0.60, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 2, 7, maxBoostValue * 0.60, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 3, 7, maxBoostValue * 0.65, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 4, 7, maxBoostValue * 0.80, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 5, 7, maxBoostValue * 0.95, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 6, 7, maxBoostValue, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 7, 7, maxBoostValue, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 8, 7, maxBoostValue, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 9, 7, maxBoostValue, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 10, 7, maxBoostValue, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 11, 7, maxBoostValue, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 12, 7, maxBoostValue * 0.95, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 13, 7, maxBoostValue * 0.90, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 14, 7, maxBoostValue * 0.85, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 15, 7, maxBoostValue * 0.70, AutoGearBoxPercentage); break; case TurboType.GT3071R: // hold longer than stock case TurboType.HX35w: // hold longer than stock SetBoostRequestMap(m_currentfile, 0, 6, maxBoostValue * 0.60, AutoGearBoxPercentage, 0.7); // % of max boost SetBoostRequestMap(m_currentfile, 1, 6, maxBoostValue * 0.60, AutoGearBoxPercentage, 0.7); // low rpm SetBoostRequestMap(m_currentfile, 2, 6, maxBoostValue * 0.60, AutoGearBoxPercentage, 0.7); SetBoostRequestMap(m_currentfile, 3, 6, maxBoostValue * 0.60, AutoGearBoxPercentage, 0.7); SetBoostRequestMap(m_currentfile, 4, 6, maxBoostValue * 0.60, AutoGearBoxPercentage, 0.7); SetBoostRequestMap(m_currentfile, 5, 6, maxBoostValue * 0.60, AutoGearBoxPercentage, 0.7); SetBoostRequestMap(m_currentfile, 6, 6, maxBoostValue * 0.65, AutoGearBoxPercentage, 0.8); SetBoostRequestMap(m_currentfile, 7, 6, maxBoostValue * 0.75, AutoGearBoxPercentage, 1.0); SetBoostRequestMap(m_currentfile, 8, 6, maxBoostValue * 0.95, AutoGearBoxPercentage, 1.2); SetBoostRequestMap(m_currentfile, 9, 6, maxBoostValue * 0.98, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 10, 6, maxBoostValue, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 11, 6, maxBoostValue, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 12, 6, maxBoostValue, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 13, 6, maxBoostValue, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 14, 6, maxBoostValue * 0.95, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 15, 6, maxBoostValue * 0.80, AutoGearBoxPercentage); // high rpm SetBoostRequestMap(m_currentfile, 0, 7, maxBoostValue * 0.60, AutoGearBoxPercentage, 0.7); // % of max boost SetBoostRequestMap(m_currentfile, 1, 7, maxBoostValue * 0.60, AutoGearBoxPercentage, 0.7); // low rpm SetBoostRequestMap(m_currentfile, 2, 7, maxBoostValue * 0.60, AutoGearBoxPercentage, 0.7); SetBoostRequestMap(m_currentfile, 3, 7, maxBoostValue * 0.60, AutoGearBoxPercentage, 0.7); SetBoostRequestMap(m_currentfile, 4, 7, maxBoostValue * 0.60, AutoGearBoxPercentage, 0.7); SetBoostRequestMap(m_currentfile, 5, 7, maxBoostValue * 0.60, AutoGearBoxPercentage, 0.7); SetBoostRequestMap(m_currentfile, 6, 7, maxBoostValue * 0.65, AutoGearBoxPercentage, 0.8); SetBoostRequestMap(m_currentfile, 7, 7, maxBoostValue * 0.75, AutoGearBoxPercentage, 1.0); SetBoostRequestMap(m_currentfile, 8, 7, maxBoostValue * 0.95, AutoGearBoxPercentage, 1.2); SetBoostRequestMap(m_currentfile, 9, 7, maxBoostValue * 0.98, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 10, 7, maxBoostValue, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 11, 7, maxBoostValue, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 12, 7, maxBoostValue, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 13, 7, maxBoostValue, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 14, 7, maxBoostValue * 0.95, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 15, 7, maxBoostValue * 0.80, AutoGearBoxPercentage); break; case TurboType.HX40w: // hold longer than stock case TurboType.S400SX371: SetBoostRequestMap(m_currentfile, 0, 6, maxBoostValue * 0.60, AutoGearBoxPercentage, 0.7); // % of max boost SetBoostRequestMap(m_currentfile, 1, 6, maxBoostValue * 0.60, AutoGearBoxPercentage, 0.7); // low rpm SetBoostRequestMap(m_currentfile, 2, 6, maxBoostValue * 0.60, AutoGearBoxPercentage, 0.7); SetBoostRequestMap(m_currentfile, 3, 6, maxBoostValue * 0.60, AutoGearBoxPercentage, 0.7); SetBoostRequestMap(m_currentfile, 4, 6, maxBoostValue * 0.60, AutoGearBoxPercentage, 0.7); SetBoostRequestMap(m_currentfile, 5, 6, maxBoostValue * 0.60, AutoGearBoxPercentage, 0.7); SetBoostRequestMap(m_currentfile, 6, 6, maxBoostValue * 0.65, AutoGearBoxPercentage, 0.8); SetBoostRequestMap(m_currentfile, 7, 6, maxBoostValue * 0.75, AutoGearBoxPercentage, 1.0); SetBoostRequestMap(m_currentfile, 8, 6, maxBoostValue * 0.95, AutoGearBoxPercentage, 1.2); SetBoostRequestMap(m_currentfile, 9, 6, maxBoostValue * 0.98, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 10, 6, maxBoostValue, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 11, 6, maxBoostValue, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 12, 6, maxBoostValue, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 13, 6, maxBoostValue, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 14, 6, maxBoostValue * 0.98, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 15, 6, maxBoostValue * 0.93, AutoGearBoxPercentage); // high rpm SetBoostRequestMap(m_currentfile, 0, 7, maxBoostValue * 0.60, AutoGearBoxPercentage, 0.7); // % of max boost SetBoostRequestMap(m_currentfile, 1, 7, maxBoostValue * 0.60, AutoGearBoxPercentage, 0.7); // low rpm SetBoostRequestMap(m_currentfile, 2, 7, maxBoostValue * 0.60, AutoGearBoxPercentage, 0.7); SetBoostRequestMap(m_currentfile, 3, 7, maxBoostValue * 0.60, AutoGearBoxPercentage, 0.7); SetBoostRequestMap(m_currentfile, 4, 7, maxBoostValue * 0.60, AutoGearBoxPercentage, 0.7); SetBoostRequestMap(m_currentfile, 5, 7, maxBoostValue * 0.60, AutoGearBoxPercentage, 0.7); SetBoostRequestMap(m_currentfile, 6, 7, maxBoostValue * 0.65, AutoGearBoxPercentage, 0.8); SetBoostRequestMap(m_currentfile, 7, 7, maxBoostValue * 0.75, AutoGearBoxPercentage, 1.0); SetBoostRequestMap(m_currentfile, 8, 7, maxBoostValue * 0.95, AutoGearBoxPercentage, 1.2); SetBoostRequestMap(m_currentfile, 9, 7, maxBoostValue * 0.98, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 10, 7, maxBoostValue, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 11, 7, maxBoostValue, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 12, 7, maxBoostValue, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 13, 7, maxBoostValue, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 14, 7, maxBoostValue * 0.98, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 15, 7, maxBoostValue * 0.93, AutoGearBoxPercentage); break; } if (isLpt) { // more columns need adjusting SetBoostRequestMap(m_currentfile, 0, 5, maxBoostValue * 0.55, AutoGearBoxPercentage); // % of max boost SetBoostRequestMap(m_currentfile, 1, 5, maxBoostValue * 0.55, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 2, 5, maxBoostValue * 0.55, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 3, 5, maxBoostValue * 0.57, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 4, 5, maxBoostValue * 0.58, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 5, 5, maxBoostValue * 0.58, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 6, 5, maxBoostValue * 0.58, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 7, 5, maxBoostValue * 0.57, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 8, 5, maxBoostValue * 0.57, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 9, 5, maxBoostValue * 0.56, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 10, 5, maxBoostValue * 0.53, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 11, 5, maxBoostValue * 0.50, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 12, 5, maxBoostValue * 0.45, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 13, 5, maxBoostValue * 0.40, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 14, 5, maxBoostValue * 0.40, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 15, 5, maxBoostValue * 0.35, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 0, 4, maxBoostValue * 0.35, AutoGearBoxPercentage); // 75% of max boost SetBoostRequestMap(m_currentfile, 1, 4, maxBoostValue * 0.35, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 2, 4, maxBoostValue * 0.35, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 3, 4, maxBoostValue * 0.30, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 4, 4, maxBoostValue * 0.30, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 5, 4, maxBoostValue * 0.30, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 6, 4, maxBoostValue * 0.30, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 7, 4, maxBoostValue * 0.30, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 8, 4, maxBoostValue * 0.30, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 9, 4, maxBoostValue * 0.30, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 10, 4, maxBoostValue * 0.25, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 11, 4, maxBoostValue * 0.2, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 12, 4, maxBoostValue * 0.18, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 13, 4, maxBoostValue * 0.15, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 14, 4, maxBoostValue * 0.15, AutoGearBoxPercentage); SetBoostRequestMap(m_currentfile, 15, 4, maxBoostValue * 0.1, AutoGearBoxPercentage); } }
abstract public void WriteTurboTypeMarker(TurboType turboType);
public override void WriteTurboTypeMarker(TurboType turboType) { int address = m_fileInfo.Filelength - 0x1FD; if (address > 0) { writebyteinfile(m_currentFile, address, Convert.ToByte((int)turboType)); } }
public abstract void WriteTurboTypeMarker(TurboType turboType);