VAGSuite.EDC15PTuner.TuneSmokeLimiter C# (CSharp) Méthode

TuneSmokeLimiter() private méthode

private TuneSmokeLimiter ( string filename, SymbolCollection symbols, int peakTorque, int peakHP, bool autoUpdateChecksum ) : bool
filename string
symbols SymbolCollection
peakTorque int
peakHP int
autoUpdateChecksum bool
Résultat bool
        private bool TuneSmokeLimiter(string filename, SymbolCollection symbols, int peakTorque, int peakHP, bool autoUpdateChecksum)
        {
            bool retval = true;
            int peakIQ = peakTorque/6;
            //Smokelimit is when AFR = 1:17, but should decrease to 1:25 on low airmass?
            // full load would allow 1:15.5 or 1:16
            //

            // x = rpm
            int slAddress = (int)Tools.Instance.GetSymbolAddressLike(Tools.Instance.m_symbols, "Smoke limiter");

            if (slAddress > 0)
            {
                foreach (SymbolHelper sh in Tools.Instance.m_symbols)
                {
                    if (sh.Flash_start_address == slAddress)
                    {
                        byte[] sldata = Tools.Instance.readdatafromfile(filename, slAddress, 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);
                        int maxSupportedAirflow = peakIQ * 17;

                        // range from 300 mg - maxSupportedAirflow
                        int airFlowStep = (maxSupportedAirflow - 300) / sh.Y_axis_length;
                        int[] airFlowAxis = new int[sh.Y_axis_length];
                        for (int i = 0; i < airFlowAxis.Length; i++)
                        {
                            airFlowAxis[i] = (300 + (i * airFlowStep)) * 10;
                        }
                        // save axis
                        byte[] barr = new byte[airFlowAxis.Length * 2];
                        int bCount = 0;
                        for (int i = 0; i < airFlowAxis.Length; i++)
                        {
                            int iVal = (int)airFlowAxis.GetValue(i);
                            byte b1 = (byte)((iVal & 0x00FF00) / 256);
                            byte b2 = (byte)(iVal & 0x0000FF);
                            barr[bCount++] = b1;
                            barr[bCount++] = b2;
                        }
                        Tools.Instance.savedatatobinary(sh.Y_axis_address, barr.Length, barr, filename, true, "Tuned smoke limiter axis", EDCFileType.EDC15P);
                        // check for other symbols with the same length and the same END address
                        foreach (SymbolHelper shaxis in Tools.Instance.m_symbols)
                        {
                            if (shaxis.X_axis_address != sh.X_axis_address)
                            {
                                if ((shaxis.X_axis_address & 0x0FFFF) == (sh.X_axis_address & 0x0FFFF))
                                {
                                    if (shaxis.X_axis_length * 2 == barr.Length)
                                    {
                                        Tools.Instance.savedatatobinary(sh.X_axis_address, barr.Length, barr, filename, true, "Tuned smoke limiter axis", EDCFileType.EDC15P);
                                    }
                                }
                            }
                            else if (shaxis.Y_axis_address != sh.Y_axis_address)
                            {
                                if ((shaxis.Y_axis_address & 0x0FFFF) == (sh.Y_axis_address & 0x0FFFF))
                                {
                                    if (shaxis.Y_axis_length * 2 == barr.Length)
                                    {
                                        Tools.Instance.savedatatobinary(shaxis.Y_axis_address, barr.Length, barr, filename, true, "Tuned smoke limiter axis", EDCFileType.EDC15P);
                                    }
                                }
                            }
                        }

                        if(autoUpdateChecksum) Tools.Instance.UpdateChecksum(filename, false);
                        // end of save axis

                        int[] airmasses = Tools.Instance.readdatafromfileasint(filename, sh.Y_axis_address, sh.Y_axis_length, EDCFileType.EDC15P);

                        for (int rows = 0; rows < sh.X_axis_length; rows++)
                        {
                            for (int cols = 0; cols < sh.Y_axis_length; cols++)
                            {
                                // whats the rpm?

                                int rpm = rpms[rows];
                                // what is the airmass
                                int airmass = airmasses[cols];

                                // we should simply limit to 1:17 for all rpm ranges
                                int newIQ = airmass / 170;

                                int targetTorque = peakTorque;
                                int targetPower = Tools.Instance.TorqueToPower(targetTorque, rpm);
                                if (targetPower > peakHP)
                                {
                                    targetTorque = Tools.Instance.PowerToTorque(peakHP, rpm);
                                    targetPower = Tools.Instance.TorqueToPower(targetTorque, rpm);
                                }
                                int targetIQ = Tools.Instance.TorqueToIQ(targetTorque, rpm, 4);

                                if (newIQ > targetIQ) newIQ = targetIQ;

                                //Console.WriteLine("Calculate for rpm: " + rpm.ToString() + " targetT: " + targetTorque.ToString() + " targetP: " + targetPower.ToString() + " targetIQ: " + targetIQ.ToString());

                                newIQ *= 100;
                                byte b1 = (byte)((newIQ & 0x00FF00) / 256);
                                byte b2 = (byte)(newIQ & 0x0000FF);

                                sldata[rows * sh.Y_axis_length * 2 + cols * 2] = b1;
                                sldata[rows * sh.Y_axis_length * 2 + (cols * 2) + 1] = b2;
                            }
                        }
                        SaveAndSyncData(sldata.Length, (int)sh.Flash_start_address, sldata, filename, true, "Tuned smoke limiter", autoUpdateChecksum);

                    }
                }

            }
            else retval = false;
            return retval;
        }