Esempio n. 1
0
 public SelectSymbolEventArgs(int address, int length, string mapname, string filename, bool showdiffmap, SymbolCollection symColl, AddressLookupCollection adrColl, Trionic5File _file, Trionic5FileInformation _fileinfo)
 {
     this._address                      = address;
     this._length                       = length;
     this._mapname                      = mapname;
     this._filename                     = filename;
     this._showdiffmap                  = showdiffmap;
     this._symbols                      = symColl;
     this._addresses                    = adrColl;
     this.m_CompTrionic5File            = _file;
     this.m_CompTrionic5FileInformation = _fileinfo;
 }
        public void DisassembleFile(string outputfile)
        {
            bool _skipDisassembly            = false;
            Trionic5FileInformation fileinfo = _trionicFile.GetFileInfo();

            if (File.Exists(outputfile))
            {
                if (MessageBox.Show("Assemblerfile already exists, do you want to redo the disassembly?", "Question", MessageBoxButtons.YesNo) == DialogResult.No)
                {
                    _skipDisassembly = true;
                }
            }
            if (!_skipDisassembly)
            {
                Disassembler disasm = new Disassembler();
                disasm.onProgress += new Disassembler.Progress(disasm_onProgress);
                //Trionic5File m_trionicFile = new Trionic5File();
                //m_trionicFile.SelectFile(@"C:\Documents and Settings\Guido.MOBICOACH\Desktop\Guido\ASMTEST\guido.bin");
                //Trionic5FileInformation m_trionicFileInformation = m_trionicFile.ParseFile();
                //            long address = m_trionicFile.GetStartVectorAddress(m_trionicFileInformation.Filename, 1);
                Console.WriteLine("Starting disassembly");
                disasm.DisassembleFile(_trionicFile, fileinfo.Filename, outputfile, /*address,*/ fileinfo.SymbolCollection);

                Console.WriteLine("Done disassembling: " + disasm.Mnemonics.Count.ToString());
                using (StreamWriter sw = new StreamWriter(outputfile))
                {
                    foreach (MNemonicHelper helper in disasm.Mnemonics)
                    {
                        if (helper.Mnemonic.Contains(":"))
                        {
                            //listBox1.Items.Add(helper.Mnemonic);
                            if (!helper.Mnemonic.Contains("LBL_"))
                            {
                                sw.WriteLine();
                            }
                            sw.WriteLine(helper.Mnemonic);
                        }
                        else
                        {
                            //listBox1.Items.Add(helper.Address.ToString("X8") + " " + helper.Mnemonic);
                            sw.WriteLine("0x" + helper.Address.ToString("X8") + "\t" + helper.Mnemonic);
                        }
                    }
                }
                // start the external viewer with the file
            }
            LoadFile(outputfile);
            string copyFile = fileinfo.Filename + DateTime.Now.Ticks.ToString();

            File.Copy(fileinfo.Filename, copyFile);
            LoadBinaryFile(copyFile, fileinfo.SymbolCollection);
        }
Esempio n. 3
0
        internal void BuildGraph()
        {
            if (_trionicFile != null)
            {
                Trionic5FileInformation m_trionicFileInformation = _trionicFile.GetFileInfo();
                X_axisvalues = _trionicFile.GetMapYaxisValues(m_trionicFileInformation.GetBoostRequestMap()); // injection map Y = rpm
                Trionic5Properties props     = _trionicFile.GetTrionicProperties();
                byte[]             tryck_mat = _trionicFile.ReadData((uint)m_trionicFileInformation.GetSymbolAddressFlash(m_trionicFileInformation.GetBoostRequestMap()), (uint)m_trionicFileInformation.GetSymbolLength(m_trionicFileInformation.GetBoostRequestMap()));
                if (props.AutomaticTransmission)
                {
                    tryck_mat = _trionicFile.ReadData((uint)m_trionicFileInformation.GetSymbolAddressFlash(m_trionicFileInformation.GetBoostRequestMapAUT()), (uint)m_trionicFileInformation.GetSymbolLength(m_trionicFileInformation.GetBoostRequestMapAUT()));
                }
                /* new */

                Insp_mat = _trionicFile.ReadData((uint)m_trionicFileInformation.GetSymbolAddressFlash(m_trionicFileInformation.GetInjectionMap()), (uint)m_trionicFileInformation.GetSymbolLength(m_trionicFileInformation.GetInjectionMap()));
                //Fuel_knock_mat = m_trionicFile.ReadData((uint)m_trionicFileInformation.GetSymbolAddressFlash(m_trionicFileInformation.GetInjectionKnockMap()), (uint)m_trionicFileInformation.GetSymbolLength(m_trionicFileInformation.GetInjectionKnockMap()));
                //injectiontiming.Idle_fuel_map = m_trionicFile.ReadData((uint)m_trionicFileInformation.GetSymbolAddressFlash(m_trionicFileInformation.GetIdleFuelMap()), (uint)m_trionicFileInformation.GetSymbolLength(m_trionicFileInformation.GetIdleFuelMap()));
                Batt_korr_tab = _trionicFile.GetSymbolAsIntArray(m_trionicFileInformation.GetBatteryCorrectionMap());
                Min_tid       = _trionicFile.GetSymbolAsInt("Min_tid!");

                Fuel_map_x_axis = _trionicFile.GetXaxisValues(m_trionicFileInformation.Filename, _trionicFile.GetFileInfo().GetInjectionMap());
                Fuel_map_y_axis = _trionicFile.GetYaxisValues(m_trionicFileInformation.Filename, _trionicFile.GetFileInfo().GetInjectionMap());
                //injectiontiming.Fuel_knock_map_x_axis = m_trionicFile.GetXaxisValues(m_trionicFileInformation.Filename, "Fuel_knock_mat!");
                //injectiontiming.Fuel_knock_map_y_axis = m_trionicFile.GetYaxisValues(m_trionicFileInformation.Filename, "Fuel_knock_mat!");
                //injectiontiming.Idle_fuel_x_axis = m_trionicFile.GetXaxisValues(m_trionicFileInformation.Filename, "Idle_fuel_korr!");
                //injectiontiming.Idle_fuel_y_axis = m_trionicFile.GetYaxisValues(m_trionicFileInformation.Filename, "Idle_fuel_korr!");
                Luft_kompfak = _trionicFile.Luft_kompfak_array;
                //Temp_steg = _trionicFile.Temp_steg_array;
                Kyltemp_steg  = _trionicFile.Kyltemp_steg_array;
                Kyltemp_tab   = _trionicFile.Kyltemp_tab_array;
                Lufttemp_steg = _trionicFile.Lufttemp_steg_array;
                Lufttemp_tab  = _trionicFile.Lufttemp_tab_array;
                byte[] data      = _trionicFile.ReadData((uint)m_trionicFileInformation.GetSymbolAddressFlash(m_trionicFileInformation.GetInjectorConstant()), (uint)m_trionicFileInformation.GetSymbolLength(m_trionicFileInformation.GetInjectorConstant()));
                int    inj_konst = Convert.ToInt32(data.GetValue(0));
                Inj_konst = inj_konst;
                /* new */
                // get every 8th byte
                double[]      values = new double[16];
                MapSensorType mst    = _trionicFile.GetMapSensorType(_appSettings.AutoDetectMapsensorType);
                double[]      injdc  = new double[16]; // fill with injector DC in max values
                for (int i = 0; i < 16; i++)
                {
                    double val = Convert.ToDouble(tryck_mat[i * 8 + 7]);

                    if (mst == MapSensorType.MapSensor30)
                    {
                        val *= 1.2;
                    }
                    else if (mst == MapSensorType.MapSensor35)
                    {
                        val *= 1.4;
                    }
                    else if (mst == MapSensorType.MapSensor40)
                    {
                        val *= 1.6;
                    }
                    else if (mst == MapSensorType.MapSensor50)
                    {
                        val *= 2.0;
                    }
                    injdc.SetValue(BoostRpmToInjectorDuration(Convert.ToInt32(val), Convert.ToInt32(X_axisvalues.GetValue(i))), i);
                    val -= 100;
                    val /= 100;
                    values.SetValue(val, i);
                }
                FillGraph(values, injdc, props.TurboType);
            }
        }
Esempio n. 4
0
        private void AddFilesToLibrary(string path)
        {
            Application.DoEvents();
            DataTable dt = new DataTable("UserLib");

            dt.Columns.Add("Filename");
            dt.Columns.Add("FilenameNoPath");
            dt.Columns.Add("EngineType");
            dt.Columns.Add("Stage");
            dt.Columns.Add("Injectors");
            dt.Columns.Add("Mapsensor");
            dt.Columns.Add("Torque");
            dt.Columns.Add("E85", Type.GetType("System.Boolean"));
            dt.Columns.Add("T7Valve", Type.GetType("System.Boolean"));
            dt.Columns.Add("Partnumber");
            dt.Columns.Add("SoftwareID");
            dt.Columns.Add("CPU");
            dt.Columns.Add("RAMlocked", Type.GetType("System.Boolean"));
            if (File.Exists(Application.StartupPath + "\\UserLib.xml"))
            {
                dt.ReadXml(Application.StartupPath + "\\UserLib.xml");
            }
            string[] files = Directory.GetFiles(path, "*.bin", SearchOption.AllDirectories);
            foreach (string file in files)
            {
                FileInfo fi = new FileInfo(file);
                this.Text = "User library browser - " + Path.GetFileName(file);
                Application.DoEvents();
                if (fi.Length == 0x20000 || fi.Length == 0x40000)
                {
                    try
                    {
                        foreach (DataRow dr in dt.Rows)
                        {
                            if (dr["Filename"] != DBNull.Value)
                            {
                                if (dr["Filename"].ToString() == file)
                                {
                                    dt.Rows.Remove(dr);
                                    break;
                                }
                            }
                        }
                        Trionic5File _file = new Trionic5File();
                        _file.SelectFile(file);
                        Trionic5FileInformation m_trionicFileInformation = _file.ParseFile();
                        Trionic5Properties      props = _file.GetTrionicProperties();
                        // get information about the file
                        MapSensorType mapsensor = _file.GetMapSensorType(true);
                        ECUFileType   fileType  = _file.DetermineFileType();
                        //t5p.Enginetype
                        //t5p.Partnumber
                        //t5p.CPUspeed
                        //t5p.SoftwareID
                        //t5p.RAMlocked
                        //TuningStage _stage = m_trionicFile.DetermineTuningStage(out m_maxBoost);
                        int  injkonst      = _file.GetSymbolAsInt("Inj_konst!");
                        bool m_E85         = false;
                        int  max_injection = _file.GetMaxInjection();
                        max_injection *= injkonst;
                        // de maximale waarde uit fuel_map_x_axis! aub
                        byte[] fuelxaxis        = _file.ReadData((uint)m_trionicFileInformation.GetSymbolAddressFlash("Fuel_map_xaxis!"), (uint)m_trionicFileInformation.GetSymbolLength("Fuel_map_xaxis!"));
                        int    max_value_x_axis = Convert.ToInt32(fuelxaxis.GetValue(fuelxaxis.Length - 1));
                        if (mapsensor == MapSensorType.MapSensor30)
                        {
                            max_value_x_axis *= 120;
                            max_value_x_axis /= 100;
                        }
                        else if (mapsensor == MapSensorType.MapSensor35)
                        {
                            max_value_x_axis *= 140;
                            max_value_x_axis /= 100;
                        }
                        else if (mapsensor == MapSensorType.MapSensor40)
                        {
                            max_value_x_axis *= 160;
                            max_value_x_axis /= 100;
                        }
                        else if (mapsensor == MapSensorType.MapSensor50)
                        {
                            max_value_x_axis *= 200;
                            max_value_x_axis /= 100;
                        }
                        //Console.WriteLine("max x: " + max_value_x_axis.ToString());
                        float max_support_boost = max_value_x_axis;
                        max_support_boost /= 100;
                        max_support_boost -= 1;
                        float corr_inj = 1.4F / max_support_boost;
                        corr_inj *= 100;
                        //Console.WriteLine("corr_inj = " + corr_inj.ToString());
                        max_injection *= (int)corr_inj;
                        max_injection /= 100;

                        // dtReport.Rows.Add("Max injection: "+ max_injection.ToString());
                        if (max_injection > 7500)
                        {
                            m_E85 = true;
                        }
                        if (injkonst > 26)
                        {
                            m_E85 = true;
                        }
                        //TODO: nog extra controleren of er andere indicatoren zijn of er E85 gebruikt wordt
                        // we kunnen dit aan de start verrijkingen zien en aan de ontstekingstijdstippen bij
                        // vollast (ontsteking scherper), let op want dit laatste is bij W/M injectie ook zo.
                        // de een na laatste waarde uit Eftersta_fak! geeft een duidelijke indicatie
                        byte[] eftstafak = _file.ReadData((uint)m_trionicFileInformation.GetSymbolAddressFlash("Eftersta_fak!"), (uint)m_trionicFileInformation.GetSymbolLength("Eftersta_fak!"));
                        if (eftstafak.Length == 15)
                        {
                            int eftstafakvalue = Convert.ToInt32(eftstafak.GetValue(13));
                            if (eftstafakvalue > 170)
                            {
                                m_E85 = true;
                            }
                        }
                        if (m_E85)
                        {
                            max_injection *= 10;
                            max_injection /= 14;
                            // dtReport.Rows.Add("Probable fuel: E85");
                        }
                        // get peak from insp_mat and multiply by injector constant
                        InjectorType inj_type = InjectorType.Stock;
                        if (max_injection > 5000)
                        {
                            inj_type = InjectorType.Stock;
                        }
                        else if (max_injection > 3500)
                        {
                            inj_type = InjectorType.GreenGiants;
                        }
                        else if (max_injection > 2000)
                        {
                            inj_type = InjectorType.Siemens630Dekas;
                        }
                        else if (max_injection > 1565)
                        {
                            inj_type = InjectorType.Siemens875Dekas;
                        }
                        else
                        {
                            inj_type = InjectorType.Siemens1000cc;
                        }



                        // Add info about T5/T7 valve
                        int  frek230 = _file.GetSymbolAsInt("Frek_230!");
                        int  frek250 = _file.GetSymbolAsInt("Frek_250!");
                        bool T7Valve = false;
                        if (fileType == ECUFileType.Trionic52File)
                        {
                            if (frek230 == 728 || frek250 == 935)
                            {
                                T7Valve = false;
                            }
                            else
                            {
                                T7Valve = true;
                            }
                        }
                        else if (fileType == ECUFileType.Trionic55File)
                        {
                            if (frek230 == 90 || frek250 == 70)
                            {
                                T7Valve = false;
                            }
                            else
                            {
                                T7Valve = true;
                            }
                        }
                        int         torque     = 0;
                        float       m_maxBoost = 0;
                        TuningStage _stage     = _file.DetermineTuningStage(out m_maxBoost);

                        PressureToTorque ptt = new PressureToTorque();
                        torque = Convert.ToInt32(ptt.CalculateTorqueFromPressure(m_maxBoost, props.TurboType));
                        dt.Rows.Add(file, Path.GetFileName(file), props.Enginetype, _stage.ToString(), inj_type.ToString(), mapsensor.ToString(), torque.ToString(), m_E85, T7Valve, props.Partnumber, props.SoftwareID, props.CPUspeed, props.RAMlocked);
                    }
                    catch (Exception E)
                    {
                        Console.WriteLine(E.Message);
                    }
                }
            }
            dt.WriteXml(Application.StartupPath + "\\UserLib.xml");
            gridControl1.DataSource = dt;
            gridView1.BestFitColumns();
            this.Text = "User library browser";
        }