using Data;
//using PropertiesRes;
using Microsoft.Win32;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Globalization;
using System.IO;
using System.IO.Compression;
using System.IO.Ports;
using System.Runtime.CompilerServices;
using System.Text;
using System.Threading;
using System.Timers;
using System.Windows.Forms;

internal class Class17
{
    private BackgroundWorker backgroundWorker_0 = new BackgroundWorker();
    private BackgroundWorker backgroundWorker_1 = new BackgroundWorker();
    private BackgroundWorker backgroundWorker_2;
    private BinaryReader binaryReader_0;
    private bool bool_0;
    private bool bool_1;
    private bool IsUSBConnected = true;
    private bool bool_11;
    private bool bool_12;
    private bool bool_13;
    private bool bool_15 = true;
    private bool bool_16;
    private bool bool_17;
    private bool bool_2;
    private bool bool_3;
    private bool bool_4;
    private bool bool_5;
    private bool bool_6;
    private bool bool_7 = false;
    private bool bool_71;
    private bool bool_72;
    private bool bool_8;
    private bool bool_9;
    private byte byte_0;
    private Class10_settings class10_settings_0;
    private Class18 class18_0;
    internal Class33_Sensors class33_Sensors;
    internal Class2_serialWB class2_serialWB_0;
    private Class25 class25_0;
    private DataloggingState dataloggingState_0 = DataloggingState.Disconnected;
    private DataloggingState dataloggingState_1;
    internal Enum10 enum10_0;
    internal Enum9 enum9_0;
    private FileStream fileStream_0;
    public FrmMain frmMain_0;
    private int int_0;
    private int int_1;
    private int int_2;
    private List<Struct12> list_0;
    internal List<Struct22> list_1 = new List<Struct22>();
    private long long_0;
    public long long_1;
    private long long_2;
    private long long_3;
    private long long_4;
    private Queue<Struct12> queue_0 = new Queue<Struct12>();
    public SerialPort serialPort_0;
    private Stopwatch stopwatch_0 = new Stopwatch();
    private Stopwatch stopwatch_1 = new Stopwatch();
    private Stopwatch stopwatch_2 = new Stopwatch();
    private string string_0 = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + @"\BMTune\~tmp.bml";
    private string string_1 = string.Empty;
    public string string_2;
    private Struct12 struct12_0 = new Struct12();
    private Struct17 struct17_0 = new Struct17();
    private Struct20 struct20_0 = new Struct20();
    private Struct23 struct23_0 = new Struct23();
    private Thread thread_0;
    private Thread thread_1;
    private Thread thread_2;
    private System.Timers.Timer timer_0 = new System.Timers.Timer(10.0);
    private System.Timers.Timer timer_1 = new System.Timers.Timer(100.0);
    private System.Windows.Forms.Timer timer_2;
    private long FrameCounts = 0;
    private int ConnectRetry = 0;

    private DateTime LastCheck = DateTime.Now;
    private bool FakeDatalog = false;
    public bool TryingtoConnect = false;

    public event Delegate46 delegate46_0;
    public event Delegate54 delegate54_0;
    public event Delegate50 delegate50_0;
    public event Delegate48 delegate48_0;
    public event Delegate49 delegate49_0;
    public event Delegate47 delegate47_0;
    public event Delegate45 delegate45_0;
    public event Delegate53 delegate53_0;       //event only running on datalog log file loading

    internal Class17()      //refer to Class11 in HTS
    {
        this.backgroundWorker_0.WorkerSupportsCancellation = true;
        this.backgroundWorker_0.WorkerReportsProgress = false;
        this.backgroundWorker_0.DoWork += new DoWorkEventHandler(this.backgroundWorker_0_DoWork);
        this.backgroundWorker_1.WorkerReportsProgress = false;
        this.backgroundWorker_1.WorkerSupportsCancellation = true;
        this.backgroundWorker_1.DoWork += new DoWorkEventHandler(this.backgroundWorker_1_DoWork);
        this.backgroundWorker_1.RunWorkerCompleted += new RunWorkerCompletedEventHandler(this.backgroundWorker_1_RunWorkerCompleted);
        this.timer_0.Elapsed += new ElapsedEventHandler(this.timer_0_Elapsed);
        this.timer_1.Elapsed += new ElapsedEventHandler(this.timer_1_Elapsed);
        Control.CheckForIllegalCrossThreadCalls = false;
        SystemEvents.PowerModeChanged += new PowerModeChangedEventHandler(this.method_6);
    }

    private void backgroundWorker_0_DoWork(object sender, DoWorkEventArgs e)
    {
        if (!FakeDatalog)
        {
            try
            {
                this.method_18();
            }
            catch (ArgumentOutOfRangeException)
            {
                MessageBox.Show(Form.ActiveForm, "Can't open port:" + this.class10_settings_0.string_1, "BMTune", MessageBoxButtons.OK, MessageBoxIcon.Hand);
                goto Label_0C1E;
            }
        }
        int num = 0x33;     //<- 51 to 56
        int num2 = 0x10;
        int num3 = 0x19;
        byte[] buffer_0 = new byte[num + 1];
        int num4 = 0;
        this.long_1 = 0L;
        /*if (!this.method_28())
        {
            goto Label_0C1E;
        }*/
        if (this.class10_settings_0.bool_25) //WidebandSerialInput
        {
            try
            {
                if (!this.class2_serialWB_0.method_2())
                {
                    goto Label_0C1E;
                }
            }
            catch (Exception exception)
            {
                MessageBox.Show(Form.ActiveForm, exception.Message, "BMTune", MessageBoxButtons.OK, MessageBoxIcon.Hand);
                goto Label_0C1E;
            }
        }
        this.method_35(true);   //set connected
        if (this.class10_settings_0.bool_8 || this.method_23())
        {
            this.method_4(DataloggingState.Recording);
        }

    //############
    Label_00F3:
        if (this.serialPort_0 != null) this.serialPort_0.WriteTimeout = 300;
        while (this.bool_4)
        {
            //this.LogThis("in wait for emulator");
            this.DiscardBuffer();
            this.bool_3 = true;
            DataloggingState state = this.method_3();
            this.method_4(DataloggingState.Waiting);
            while (this.class25_0.method_11())
            {
                Thread.Sleep(20);
            }
            this.method_4(state);
            this.bool_4 = false;
            this.bool_3 = false;
        }
        this.int_0 = 0;
        ConnectRetry = 0;

    //############
    Label_0105:
        if (this.bool_9)
        {
            this.LogThis("Mil reset request");
            try
            {
                byte num5 = 80;
                if (this.int_0 == this.class10_settings_0.int_21)
                {
                    this.LogThis("Reset MIL Failed");
                    MessageBox.Show(Form.ActiveForm, "Reset MIL Failed", "BMTune", MessageBoxButtons.OK, MessageBoxIcon.Hand);
                }
                if (this.class10_settings_0.dataloggingMode_0 == DataloggingMode.datalogDemon)
                {
                    this.method_47();
                    this.method_48();
                    buffer_0 = new byte[4];
                    this.method_11(buffer_0, 4);
                    num5 = buffer_0[1];
                }
                else
                {
                    if (this.serialPort_0 != null)
                    {
                        this.serialPort_0.Write('P'.ToString());
                        num5 = (byte)this.serialPort_0.ReadByte();
                    }
                }
                if (num5 != 80)
                {
                    this.LogThis("Mil reset failed");
                    if (this.serialPort_0 != null) this.serialPort_0.DiscardInBuffer();
                    this.int_0++;
                    goto Label_0105;
                }
                this.LogThis("Mil reset finished");
            }
            catch (Exception)
            {
                if (this.serialPort_0 != null) this.serialPort_0.DiscardInBuffer();
                this.int_0++;
                goto Label_0105;
            }
            this.bool_9 = false;
            goto Label_00F3;
        }
        if (!this.method_28())
        {
            goto Label_0C1E;
        }
        if (this.class10_settings_0.dataloggingMode_0 == DataloggingMode.datalogDemon)
        {
            this.method_46();
        }
        this.stopwatch_1.Start();
        if ((this.class10_settings_0.dataloggingMode_0 != DataloggingMode.datalogMultiByteX) && (this.class10_settings_0.dataloggingMode_0 != DataloggingMode.datalogMultiByteT))
        {
            goto Label_070C;
        }

    //############
    Label_027C:
        if (this.backgroundWorker_0.CancellationPending)
        {
            goto Label_0C1E;
        }
        if (this.bool_4 || this.bool_9)
        {
            goto Label_00F3;
        }
        if (this.class10_settings_0.bool_28)
        {
            this.class10_settings_0.method_10();
        }
        this.stopwatch_0.Start();
        this.stopwatch_1.Start();
        num4++;
        try
        {
            if (!FakeDatalog) this.serialPort_0.Write(this.GetDatalogCommand());
            //this.LogThis("Send datalogging command: '" + this.method_31() + "'");
            //if (this.serialPort_0 != null) this.serialPort_0.Write(this.GetDatalogCommand());
            if (this.int_0 == this.class10_settings_0.int_21)
            {
                this.LogThis("Timeout");
                this.method_4(DataloggingState.Timeout);
                this.stopwatch_0.Stop();
                this.stopwatch_1.Stop();
                while (!this.backgroundWorker_0.CancellationPending)
                {
                    try
                    {
                        if (!this.method_18() || !this.method_29(false))
                        {
                            continue;
                        }
                        this.LogThis("Timeout but found ISR");
                        bool flag = false;
                        if (this.method_50())
                        {
                            flag = true;
                            this.timer_0.Stop();
                        }
                        this.method_4(DataloggingState.Connected);
                        if (flag)
                        {
                            this.timer_0.Start();
                            this.method_4(DataloggingState.Recording);
                        }
                        num4 = 0;
                        goto Label_00F3;
                    }
                    catch (Exception exception2)
                    {
                        this.LogThis("Timeout Error " + exception2.Message);
                        continue;
                    }
                }
            }
            else
            {
                this.method_42();   //clear checksum
                int NLenght = 0;
                if (this.class10_settings_0.method_8() == DataloggingTable.tableMain) NLenght = num;
                else if (this.class10_settings_0.method_8() == DataloggingTable.tableMinimal) NLenght = num2;
                else if (this.class10_settings_0.method_8() == DataloggingTable.table3) NLenght = num3;

                //###############
                //read datalog bytes array
                if (FakeDatalog)
                {
                    buffer_0 = FakeThisDatalog(NLenght);
                }
                else
                {
                    for (int i = 0; i < NLenght; i++)
                    {
                        buffer_0[i] = this.method_7();
                        this.method_43(buffer_0[i]);  //add to cheksum
                    }
                }
                //###############

                if (!FakeDatalog)
                {
                    //compare array with checksum
                    if (this.method_7() != this.method_41())
                    {
                        this.LogThis("Bad checksum on packet");
                        if (this.serialPort_0 != null) this.serialPort_0.DiscardInBuffer();
                        goto Label_027C;
                    }
                }
                if ((buffer_0[6] == 0) && (buffer_0[7] == 0))
                {
                    this.LogThis("Received buffer is empty");
                    goto Label_027C;
                }
                this.struct12_0 = this.method_38(buffer_0);
                this.method_49(this.struct12_0);
                if (this.method_50())
                {
                    this.queue_0.Enqueue(this.struct12_0);
                }
                if ((!FakeDatalog && num4 == (this.class10_settings_0.int_25 + 1)) || (FakeDatalog && num4 == 20))
                {
                    num4 = 0;
                    this.method_40_SendBytes_Delegate();
                }
                if (!this.backgroundWorker_0.CancellationPending)
                {
                    this.long_1 += 1L;
                    goto Label_027C;
                }
            }
            goto Label_0C1E;
        }
        catch (TimeoutException)
        {
            this.LogThis("Read Timeout! (set the timeout higher in the setting to possibly avoid this issue)");
            this.int_0++;
            num4 = 0;
            if (this.serialPort_0 != null)
            {
                this.serialPort_0.DiscardOutBuffer();
                this.serialPort_0.DiscardInBuffer();
            }
            goto Label_027C;
        }
        catch (Exception exception3)
        {
            if (exception3.Message == "Innovate Connection Error detected")
            {
                MessageBox.Show(Form.ActiveForm, exception3.Message);
                goto Label_0C1E;
            }
            this.LogThis("Read Error " + exception3.Message);
            if (this.class10_settings_0.IsBluetooth)
            {
                this.int_0++;
                num4 = 0;
                if (this.serialPort_0 != null)
                {
                    if (this.serialPort_0.IsOpen)
                    {
                        this.serialPort_0.DiscardOutBuffer();
                        this.serialPort_0.DiscardInBuffer();
                    }
                }
                if (this.int_0 != this.class10_settings_0.int_21) goto Label_027C;

                //bluetooth disconnect
                this.method_4(DataloggingState.Timeout);
                /*if (!this.class10_settings_0.bool_31)
                {
                    try
                    {
                        if (this.serialPort_0 != null) this.serialPort_0.Close();
                        if (this.serialPort_0 != null) this.serialPort_0.Dispose();
                    }
                    catch { }
                    this.serialPort_0 = null;
                }
                else if (this.class10_settings_0.bool_31)
                {
                    this.class25_0.EmulatorDisconnect();
                }*/
                this.method_35(false);
                this.LogThis("Bluetooth might be unpowered!");
                //this.method_2()
                this.method_20();
                //goto Label_0C1E;
            }
            else if (!this.IsUSBConnected)
            {
                if (!this.class10_settings_0.bool_31)
                {
                    try
                    {
                        if (this.serialPort_0 != null)
                        {
                            if (this.serialPort_0.IsOpen) this.serialPort_0.Close();
                            this.serialPort_0.Dispose();
                        }
                    }
                    catch (Exception)
                    {
                    }
                    this.serialPort_0 = null;
                }
                else if (this.class10_settings_0.bool_31)
                {
                    this.class25_0.EmulatorDisconnect();
                }
                this.timer_1.Stop();
                this.LogThis("Read Error Port unavailable");
                MessageBox.Show(Form.ActiveForm, "USB error port not available", "BMTune", MessageBoxButtons.OK, MessageBoxIcon.Hand);

                //this.method_2();
                this.method_20();
            }

            //##################
            //new disconnect code
            if (this.int_0 == this.class10_settings_0.int_21)
            {
                //this.method_2();
                //this.method_20();
                goto Label_0C1E;
            }
            //######################

            this.int_0++;
            num4 = 0;
            goto Label_027C;
        }
    Label_070C:
        if (this.class10_settings_0.dataloggingMode_0 != DataloggingMode.datalogDemon)
        {
            goto Label_0BAF;
        }
    //Datlogging for demon 
    Label_071D: 
        if (this.backgroundWorker_0.CancellationPending)
        {
            goto Label_0C1E;
        }
        if (this.bool_4 || this.bool_9)
        {
            goto Label_00F3;
        }
        if (this.class10_settings_0.bool_28)
        {
            this.class10_settings_0.method_10();
        }
        this.stopwatch_0.Start();
        this.stopwatch_1.Start();
        num4++;
        try
        {
            buffer_0 = new byte[0x37];
            byte[] buffer2 = new byte[0x33];
            this.method_48();
            if (this.int_0 == this.class10_settings_0.int_21)
            {
                this.LogThis("Timeout");
                this.method_4(DataloggingState.Timeout);
                this.stopwatch_0.Stop();
                this.stopwatch_1.Stop();
                while (!this.backgroundWorker_0.CancellationPending)
                {
                    try
                    {
                        //this.LogThis("Timeout - Cancellation Pending");
                        if (!this.method_18())
                        {
                            continue;
                        }
                        //this.LogThis("comm open");
                        if (!this.method_29(false))
                        {
                            continue;
                        }
                        bool flag2 = false;
                        if (this.method_50())
                        {
                            flag2 = true;
                            this.timer_0.Stop();
                        }
                        this.method_4(DataloggingState.Connected);
                        if (flag2)
                        {
                            this.timer_0.Start();
                            this.method_4(DataloggingState.Recording);
                        }
                        num4 = 0;
                        goto Label_00F3;
                    }
                    catch (Exception exception4)
                    {
                        this.LogThis("Error " + exception4.Message);
                        continue;
                    }
                }
            }
            else
            {
                this.method_42();
                if (this.class10_settings_0.method_8() != DataloggingTable.tableMain)
                {
                    this.class18_0.class17_0.frmMain_0.LogThis(this.class25_0.emulatorMoatesType_0 + " does not support multi tables yet");
                    goto Label_0C1E;
                    //return;
                    //throw new Exception(this.class25_0.emulatorMoatesType_0 + " does not support multi tables yet");
                }
                this.method_11(buffer_0, 0x36);
                this.method_44(buffer_0, 0x36);
                if (this.method_7() != this.method_41())
                {
                    this.LogThis("Bad checksum on packet from " + this.class25_0.emulatorMoatesType_0); //demon
                    goto Label_071D;
                }
                if (buffer_0[1] == 0x54)
                {
                    this.LogThis("ecu to demon Read timeout!");
                    this.int_0++;
                    num4 = 0;
                    this.DiscardBuffer();
                    goto Label_071D;
                }
                for (int m = 0; m < 0x33; m++)
                {
                    buffer2[m] = buffer_0[m + 1];
                }
                this.method_42();
                this.method_44(buffer2, 0x33);
                byte num12 = buffer_0[0x34];
                if (num12 == this.method_41())
                {
                    this.struct12_0 = this.method_38(buffer2);
                }
                this.method_49(this.struct12_0);
                if (this.method_50())
                {
                    this.queue_0.Enqueue(this.struct12_0);
                }
                if (num4 == (this.class10_settings_0.int_25 + 1))
                {
                    num4 = 0;
                    this.method_40_SendBytes_Delegate();
                }
                if (!this.backgroundWorker_0.CancellationPending)
                {
                    this.long_1 += 1L;
                    goto Label_071D;
                }
            }
            goto Label_0C1E;
        }
        catch (TimeoutException)
        {
            this.LogThis(this.class25_0.emulatorMoatesType_0 + " Read Timeout (set the timeout higher in the setting to possibly avoid this issue)");
            this.int_0++;
            num4 = 0;
            this.DiscardBuffer();
            goto Label_071D;
        }
        catch (Exception exception5)
        {
            if (exception5.Message == "Innovate Connection Error detected")
            {
                MessageBox.Show(Form.ActiveForm, exception5.Message);
                goto Label_0C1E;
            }
            this.LogThis("Error " + exception5.Message);
            /*if (((exception5.Message == "Access to the port is denied.") || (exception5.Message == "The port is closed.")) || (exception5.Message == "A device attached to the system is not functioning.\r" + Environment.NewLine + ""))
            {
                this.serialPort_0 = null;
                goto Label_0C1E;
            }*/
            if (!this.IsUSBConnected)
            {
                this.serialPort_0 = null;
                //this.method_2();
                //this.method_20();
                this.LogThis("Port unavailable");
                MessageBox.Show(Form.ActiveForm, "USB port not available", "BMTune", MessageBoxButtons.OK, MessageBoxIcon.Hand);
                goto Label_0C1E;
            }
            this.int_0++;
            num4 = 0;
            goto Label_071D;
        }
    Label_0BAF:
        this.class18_0.class17_0.frmMain_0.LogThis(this.class25_0.emulatorMoatesType_0 + " datalog protocol not selected");
        return;
    //throw new Exception(this.class25_0.emulatorMoatesType_0 + " datalog protocol not selected");
    Label_0C1E:
        if (this.class10_settings_0.bool_25 && (this.class2_serialWB_0 != null))
        {
            this.class2_serialWB_0.method_3();
        }
        if (this.timer_1.Enabled)
        {
            this.timer_1.Stop();
        }
        this.bool_3 = false;
        this.bool_4 = false;
        this.long_1 = 0L;
        this.stopwatch_1.Reset();
        this.method_20();
        this.method_51(false);
        LogThis(string_1);
    }

    private byte[] FakeThisDatalog(int num)
    {
        byte[] buffer_0 = { 0X7E, 0X8F, 0XA7, 0XF9, 0X2E, 0X2E, 0X1B, 0X03, 0X01, 0X08, 0X03, 0X00, 0X00, 0X20, 0X00, 0X04, 0X00, 0X55, 0X04, 0XAE, 0X97, 0X08, 0X6D, 0X20, 0X00, 0X82, 0X95, 0X8F, 0X82, 0X00, 0X80, 0XA6, 0X81, 0X80, 0X80, 0X97, 0X80, 0X80, 0X01, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X7F, 0X3B, 0XAA, 0X00, 0XCC, 0X02, 0X23 };

        Random rnd = new Random();
        buffer_0[0] = (byte) rnd.Next(0,255);
        buffer_0[1] = (byte)rnd.Next(0, 255);
        buffer_0[5] = (byte)rnd.Next(0, 255);
        /*byte[] buffer_0 = new byte[num + 1];
        for (int i = 0; i < num; i++)
        {
            if (i == 0) buffer_0[i] = 180;
            else if (i == 1) buffer_0[i] = 90;
            else if (i == 2) buffer_0[i] = 127;
            else if (i == 4) buffer_0[i] = 20;
            else if (i == 5) buffer_0[i] = 0; //tps
            else if (i == 6) buffer_0[i] = 0xb0;    //rpm1
            else if (i == 7) buffer_0[i] = 0x04;    //rpm2
            else if (i == 8) buffer_0[i] = 65;

            else buffer_0[i] = this.method_7();
            this.method_43(buffer_0[i]);
        }*/
        return buffer_0;
    }

    private void backgroundWorker_1_DoWork(object sender, DoWorkEventArgs e)
    {
        while ((this.queue_0.Count != 0) && !this.backgroundWorker_1.CancellationPending)
        {
            this.method_52(this.queue_0.Dequeue());
        }
    }

    private void backgroundWorker_1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
    {
        this.timer_0.Start();
    }

    public void SetDemonDatalogCheck(bool bool_16_0)
    {
        this.bool_16 = bool_16_0;
    }

    private void backgroundWorker_2_DoWork(object sender, DoWorkEventArgs e)
    {
        if ((this.class10_settings_0.dataloggingMode_0 != DataloggingMode.datalogDemon) || !this.class10_settings_0.bool_31)
        {
            goto Label_0500;
        }

        //###################################################################################
        //###################################################################################
        //###################################################################################
        //Section for Demon Datalogging!! trying on cached port!
        if (this.method_34_GetConnected())
        {
            this.bool_11 = true;
            return;
        }
        LogThis(this.class25_0.emulatorMoatesType_0 + " detection started");
        if ((this.class10_settings_0.Datalog_Baud != 921600) && (this.class10_settings_0.Datalog_Baud != 115200)) this.LogThis("The baudrate is not compatible for the Demon" + Environment.NewLine + "Please set baudrate to 921600 (or 115200)");
        int dtCommCache = 1;
        string[] portNames = SerialPort.GetPortNames();
        try
        {
            if (this.class10_settings_0.dtCommCache != 0)
            {
                dtCommCache = this.class10_settings_0.dtCommCache;
                this.bool_11 = false;
                LogThis("Cached port: COM" + dtCommCache.ToString() + " (baud: " + this.class10_settings_0.Datalog_Baud.ToString() + ")");
                try   //not used
                {
                    if (this.serialPort_0 != null)
                    {
                        if (this.serialPort_0.IsOpen)
                        {
                            this.serialPort_0.Close();
                        }
                        this.serialPort_0.Dispose();
                        this.serialPort_0 = null;
                    }
                }
                catch { }
                bool flag = false;
                if (!this.class10_settings_0.IsBluetooth)
                {
                    for (int i = 0; i < portNames.Length; i++)
                    {
                        if (portNames[i] == ("COM" + dtCommCache.ToString()))
                        {
                            flag = true;
                        }
                    }
                }
                else flag = true;


                if (flag)
                {
                    this.serialPort_0 = new SerialPort("COM" + dtCommCache.ToString(), this.class10_settings_0.Datalog_Baud);
                    this.serialPort_0.ReadTimeout = this.class10_settings_0.int_20;
                    this.serialPort_0.WriteTimeout = 300;
                    //if (this.class10_settings_0.emulatorMode_0 != EmulatorMode.Demon && this.class10_settings_0.IsBluetooth) this.serialPort_0.WriteTimeout = 300;
                    this.serialPort_0.ReadBufferSize = 0x1100;
                    this.serialPort_0.Encoding = Encoding.Default;
                    this.serialPort_0.Open();
                    LogThis("Cached port: COM" + dtCommCache.ToString() + " open" + " (baud: " + this.class10_settings_0.Datalog_Baud.ToString() + ")");
                    bool flagT = this.class25_0.IsEmulatorConnected(false);
                    if (flagT)
                    {
                        LogThis(this.class25_0.emulatorMoatesType_0 + " found");
                        if (this.bool_16)
                        {
                            if (this.method_29(false))
                            {
                                LogThis(this.class25_0.emulatorMoatesType_0 + " and ecu found");
                                this.class10_settings_0.string_1 = "COM" + dtCommCache.ToString();
                                this.bool_11 = true;
                            }
                            else
                            {
                                LogThis(this.class25_0.emulatorMoatesType_0 + " found but ecu not detected. Check connection between ecu and demon");
                                this.bool_11 = false;
                            }
                        }
                        else
                        {
                            this.class10_settings_0.string_1 = "COM" + dtCommCache.ToString();
                            this.bool_11 = true;
                        }

                        this.serialPort_0.Close();
                        this.serialPort_0.Dispose();
                        return;
                    }
                    LogThis(this.class25_0.emulatorMoatesType_0 + " not found on cached port: COM" + dtCommCache.ToString());
                }
                else
                {
                    LogThis("Cached port failed to open");
                }
                dtCommCache = 1;
                this.bool_11 = false;
                goto Label_02B4;
            }
            else
            {
                LogThis("Cached port is COM0 or not saved");
                dtCommCache = 1;
                this.bool_11 = false;
                goto Label_02B4;
            }
        }
        catch (Exception exception)
        {
            LogThis("Cached port failed with error:" + Environment.NewLine + "" + exception.Message);
        }
        dtCommCache = 1;
        this.bool_11 = false;

    //###################################################################################
    //###################################################################################
    //###################################################################################
    //Section for Demon datalogging trying to auto-scan port!
    Label_02B4:
        try
        {
            if (dtCommCache == 41)
            {
                LogThis("Port Scan Failed");
                this.bool_11 = false;
                if (this.class25_0.Report_Error)
                {
                    LogThis("If you try to datalog on a chip you must change the emulator to:" + Environment.NewLine + "Moates Ostrich in the settings!");
                    MessageBox.Show(Form.ActiveForm, "Can't connect with demon" + Environment.NewLine + "See the debug logs for the issue", "BMTune", MessageBoxButtons.OK, MessageBoxIcon.Hand);
                }
                return;
            }
            if ((this.serialPort_0 != null) && this.serialPort_0.IsOpen)
            {
                this.serialPort_0.Close();
            }
            if (this.serialPort_0 != null)
            {
                this.serialPort_0.Dispose();
                this.serialPort_0 = null;
            }
            string str = "COM" + dtCommCache.ToString();
            bool flag2 = false;
            if (!this.class10_settings_0.IsBluetooth)
            {
                for (int j = 0; j < portNames.Length; j++)
                    if (portNames[j] == str) flag2 = true;
            }
            else flag2 = true;
            //flag2 = true;


            if (flag2)
            {
                this.serialPort_0 = new SerialPort("COM" + dtCommCache.ToString(), this.class10_settings_0.Datalog_Baud);
                this.serialPort_0.ReadTimeout = this.class10_settings_0.int_20;
                this.serialPort_0.WriteTimeout = 300;
                //if (this.class10_settings_0.emulatorMode_0 != EmulatorMode.Demon && this.class10_settings_0.IsBluetooth) this.serialPort_0.WriteTimeout = 300;
                this.serialPort_0.ReadBufferSize = 0x1100;
                this.serialPort_0.Encoding = Encoding.Default;
                this.serialPort_0.Open();
                LogThis("Port open: COM" + dtCommCache.ToString() + " (baud: " + this.class10_settings_0.Datalog_Baud.ToString() + ")");
                bool flag3 = this.class25_0.IsEmulatorConnected(false);
                LogThis(this.class25_0.emulatorMoatesType_0 + " replied=" + flag3.ToString());
                if (flag3)
                {
                    LogThis(this.class25_0.emulatorMoatesType_0 + " found");
                    if (this.bool_16)
                    {
                        if (this.method_29(false))
                        {
                            this.class10_settings_0.string_1 = "COM" + dtCommCache.ToString();
                            this.class10_settings_0.dtCommCache = dtCommCache;
                            LogThis(this.class25_0.emulatorMoatesType_0 + " found on port: COM" + dtCommCache.ToString());
                            this.bool_11 = true;
                        }
                        else
                        {
                            LogThis(this.class25_0.emulatorMoatesType_0 + " found but ecu not detected. Check connection between ecu and demon");
                            this.bool_11 = false;
                        }
                    }
                    else
                    {
                        this.class10_settings_0.string_1 = "COM" + dtCommCache.ToString();
                        this.class10_settings_0.dtCommCache = dtCommCache;
                        LogThis(this.class25_0.emulatorMoatesType_0 + " found on port: COM" + dtCommCache.ToString());
                        this.bool_11 = true;
                    }
                    return;
                }
            }
            dtCommCache++;
            goto Label_02B4;
        }
        catch
        {
            dtCommCache++;
            goto Label_02B4;
        }

    //###################################################################################
    //###################################################################################
    //###################################################################################
    // Section for Ostrich/Chips datalogging!! trying on cached port
    Label_0500:
        LogThis("Ecu detection started");
        int num4 = 1;
        string[] strArray2 = SerialPort.GetPortNames();
        try
        {
            if (this.class10_settings_0.dtCommCache != 0)
            {
                num4 = this.class10_settings_0.dtCommCache;
                this.bool_11 = false;
                LogThis("Cached port: COM" + num4.ToString() + " (baud: " + this.class10_settings_0.Datalog_Baud.ToString() + ")");
                try   //not used!!
                {
                    if (this.serialPort_0 != null)
                    {
                        if (this.serialPort_0.IsOpen)
                        {
                            this.serialPort_0.Close();
                        }
                        this.serialPort_0.Dispose();
                        this.serialPort_0 = null;
                    }
                }
                catch { }
                bool flag4 = false;
                if (!this.class10_settings_0.IsBluetooth)
                {
                    for (int k = 0; k < strArray2.Length; k++)
                    {
                        if (strArray2[k] == ("COM" + num4.ToString()))
                        {
                            flag4 = true;
                        }
                    }
                }
                else flag4 = true;

                if (flag4)
                {
                    this.serialPort_0 = new SerialPort("COM" + num4.ToString(), this.class10_settings_0.Datalog_Baud);
                    this.serialPort_0.ReadTimeout = this.class10_settings_0.int_20;
                    this.serialPort_0.WriteTimeout = 300;
                    //if (this.class10_settings_0.emulatorMode_0 != EmulatorMode.Demon && this.class10_settings_0.IsBluetooth) this.serialPort_0.WriteTimeout = 300;
                    this.serialPort_0.Encoding = Encoding.Default;
                    this.serialPort_0.Open();
                    LogThis("Cached port: COM" + num4.ToString() + " open" + " (baud: " + this.class10_settings_0.Datalog_Baud.ToString() + ")");
                    if (this.method_29(false))
                    {
                        this.class10_settings_0.string_1 = "COM" + num4.ToString();
                        this.class10_settings_0.dtCommCache = num4;
                        if (!this.class10_settings_0.IsBluetooth)
                        {
                            this.serialPort_0.Close();
                            this.serialPort_0.Dispose();
                        }
                        this.bool_11 = true;
                        LogThis("Ecu found");
                        return;
                    }
                    LogThis("Ecu not found on cached port!");
                }
                else
                {
                    LogThis("Cached port failed to open");
                }
                num4 = 1;
                this.bool_11 = false;
                goto Label_06FE;
            }
            else
            {
                LogThis("Cached port is COM0 or not saved");
            }
            num4 = 1;
            this.bool_11 = false;
            goto Label_06FE;
        }
        catch (Exception exception2)
        {
            LogThis("Cached port failed with error:" + Environment.NewLine + "" + exception2.Message);
        }
        num4 = 1;
        this.bool_11 = false;

    //###################################################################################
    //###################################################################################
    //###################################################################################
    //Section for Ostrich/Chips datalogging!! trying to auto-scan port!
    Label_06FE:
        try
        {
            if (num4 == 41)
            {
                LogThis("Port Scan Failed");
                this.bool_11 = false;
                MessageBox.Show(Form.ActiveForm, "Can't connect with ECU" + Environment.NewLine + "See the debug logs for the issue", "BMTune", MessageBoxButtons.OK, MessageBoxIcon.Hand);
            }
            else
            {
                if ((this.serialPort_0 != null) && this.serialPort_0.IsOpen)
                {
                    this.serialPort_0.Close();
                }
                if (this.serialPort_0 != null)
                {
                    this.serialPort_0.Dispose();
                    this.serialPort_0 = null;
                }
                string str2 = "COM" + num4.ToString();
                bool flag5 = false;
                if (!this.class10_settings_0.IsBluetooth)
                {
                    for (int m = 0; m < strArray2.Length; m++)
                    {
                        if (strArray2[m] == str2)
                        {
                            flag5 = true;
                        }
                    }
                }
                else flag5 = true;

                if (!flag5)
                {
                    num4++;
                    goto Label_06FE;
                }
                this.serialPort_0 = new SerialPort("COM" + num4.ToString(), this.class10_settings_0.Datalog_Baud);
                this.serialPort_0.ReadTimeout = this.class10_settings_0.int_20;
                this.serialPort_0.WriteTimeout = 300;
                //if (this.class10_settings_0.emulatorMode_0 != EmulatorMode.Demon && this.class10_settings_0.IsBluetooth) this.serialPort_0.WriteTimeout = 300;
                this.serialPort_0.Encoding = Encoding.Default;
                this.serialPort_0.Open();
                LogThis("Port open: COM" + num4.ToString() + " (baud: " + this.class10_settings_0.Datalog_Baud.ToString() + ")");
                bool flag6 = this.method_29(false);
                LogThis("ECU replied=" + flag6.ToString());
                if (flag6)
                {
                    this.class10_settings_0.string_1 = "COM" + num4.ToString();
                    this.class10_settings_0.dtCommCache = num4;
                    LogThis("Ecu found on port: COM" + num4.ToString());
                    this.bool_11 = true;
                }
                else
                {
                    num4++;
                    goto Label_06FE;
                }
            }
        }
        catch
        {
            num4++;
            goto Label_06FE;
        }
    }

    internal void method_0(ref Class18 class18_1, ref Class10_settings class10_1, ref Class25 class25_1, ref FrmMain frmMain_1)
    {
        this.class18_0 = class18_1;
        this.class18_0.delegate58_0 += new Class18.Delegate58(this.method_1);
        this.class10_settings_0 = class10_1;
        this.class25_0 = class25_1;
        this.frmMain_0 = frmMain_1;

        this.class2_serialWB_0 = new Class2_serialWB(ref this.class18_0, ref this.frmMain_0);
        //this.class2_serialWB_0.method_0();
        //##########
        try
        {
            this.class2_serialWB_0.method_0();
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
            try
            {
                Process process = new Process();
                string environmentVariable = Environment.GetEnvironmentVariable("systemroot");
                process.StartInfo.FileName = environmentVariable + "\\system32\\regsvr32.exe";
                process.StartInfo.Arguments = "\"" + Application.StartupPath + "\\mtssdk.ocx\"";
                process.StartInfo.UseShellExecute = false;
                process.StartInfo.RedirectStandardOutput = true;
                process.StartInfo.CreateNoWindow = true;
                process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
                process.Start();
                process.StandardOutput.ReadToEnd();
                process.WaitForExit();
                int exitCode = process.ExitCode;
                if (exitCode != 0)
                {
                    MessageBox.Show("failed to register innovate ocx, Innovate widebands wont work.");
                    Application.Exit();
                }
            }
            catch
            {
            }
        }
        this.class2_serialWB_0.method_0();
        //###############

        //this.Class14_Display_0 = new Class14_Display(ref this.class18_0);
        this.class33_Sensors = new Class33_Sensors(ref this.class18_0);
    }

    private void method_1()
    {
        if ((!this.class18_0.method_30_HasFileLoadedInBMTune() && (this.backgroundWorker_0 != null)) && this.backgroundWorker_0.IsBusy)
        {
            this.backgroundWorker_0.CancelAsync();
        }
    }

    public void method_10(int int_3)
    {
        this.serialPort_0.ReadTimeout = int_3;
    }

    public void method_11(byte[] byte_1, int int_3)
    {
        //if (this.method_12(int_3)) this.serialPort_0.Read(byte_1, 0, int_3);

        //Old system is just this
        this.method_12(int_3);
        this.serialPort_0.Read(byte_1, 0, int_3);
    }

    private void method_12(int int_3)
    {
        this.timer_2 = new System.Windows.Forms.Timer();
        this.timer_2.Interval = this.serialPort_0.ReadTimeout;
        this.timer_2.Tick += new EventHandler(this.timer_2_Tick);
        this.bool_13 = false;
        this.timer_2.Start();

        while (this.serialPort_0.BytesToRead < int_3)
        {
            if (this.bool_13)
            {
                this.timer_2.Stop();
                throw new TimeoutException("Chunk timeout");
            }
            Application.DoEvents();
        }
        this.timer_2.Stop();
    }

    /*private bool method_12(int int_3)
    {
        int ThisTries = 0;
        while (this.serialPort_0.BytesToRead < int_3 && ThisTries < 30)
        {
            Application.DoEvents();
            Thread.Sleep((this.serialPort_0.ReadTimeout / 2) / 30);
            ThisTries++;
        }
        if (this.serialPort_0.BytesToRead >= int_3) return true;
        else return false;
    }*/

    public void DiscardBuffer()
    {
        if (!FakeDatalog)
        {
            if (this.serialPort_0.IsOpen)
            {
                try
                {
                    this.serialPort_0.DiscardInBuffer();
                    this.serialPort_0.DiscardOutBuffer();
                }
                catch (Exception)
                {
                }
            }
        }
    }

    public void method_14(byte byte_1)
    {
        try
        {
            this.serialPort_0.Write(((char) byte_1).ToString());
        }
        catch (Exception exception)
        {
            throw exception;
        }
    }

    public void method_15(string string_3)
    {
        try
        {
            this.serialPort_0.Write(string_3);
        }
        catch (Exception exception)
        {
            throw exception;
        }
    }

    public void method_16(byte[] byte_1, int int_3, int int_4)
    {
        try
        {
            this.serialPort_0.Write(byte_1, int_3, int_4);
        }
        catch (Exception exception)
        {
            throw exception;
        }
    }

    public bool method_17()
    {
        return ((this.serialPort_0 != null) && this.serialPort_0.IsOpen);
    }

    public bool method_18()
    {
        return this.method_19(false);
    }

    public bool method_19(bool bool_18)
    {
        bool flag;

        if (FakeDatalog)
        {
            return true;
        }
        else
        {
            if ((this.serialPort_0 != null) && this.serialPort_0.IsOpen)
            {
                if (bool_18) LogThis("port: " + this.class10_settings_0.string_1.ToString() + " is already open!");

                //###
                //Close and Reopen Port to try
                if (ConnectRetry >= this.class10_settings_0.int_21)
                {
                    DisposeSerial();
                    return false;
                }
                else
                {
                    return true;
                }
                //return true;
            }
            this.serialPort_0 = new SerialPort(this.class10_settings_0.string_1, this.class10_settings_0.Datalog_Baud);
            this.serialPort_0.ReadTimeout = this.class10_settings_0.int_20;
            //this.serialPort_0.WriteTimeout = 300;
            if (this.class10_settings_0.emulatorMode_0 != EmulatorMode.Demon && this.class10_settings_0.IsBluetooth) this.serialPort_0.WriteTimeout = 300;
            this.serialPort_0.ReadBufferSize = 0x1100;
            this.serialPort_0.Encoding = Encoding.Default;
            try
            {
                LogThis("try to open port: " + this.class10_settings_0.string_1.ToString() + " (baud: " + this.serialPort_0.BaudRate.ToString() + ")");
                this.serialPort_0.Open();
                LogThis("port: " + this.class10_settings_0.string_1.ToString() + " open: " + this.method_17().ToString());
                if (bool_18 && this.method_17())
                {
                    if (this.class10_settings_0.emulatorMode_0 != EmulatorMode.Demon)
                    {
                        this.method_4(DataloggingState.Link);
                        flag = this.method_17();
                    }
                    else
                    {
                        bool flagT = this.class25_0.IsEmulatorConnected(false);
                        if (flagT)
                        {
                            if (this.bool_16)
                            {
                                if (this.method_29(false))
                                {
                                    LogThis(this.class25_0.emulatorMoatesType_0 + " and ecu found");
                                    this.method_4(DataloggingState.Link);
                                    flag = true;
                                }
                                else
                                {
                                    LogThis(this.class25_0.emulatorMoatesType_0 + " found but ecu not detected. Check connection between ecu and " + this.class25_0.emulatorMoatesType_0);
                                    flag = false;
                                }
                            }
                            else
                            {
                                LogThis(this.class25_0.emulatorMoatesType_0 + " found");
                                this.method_4(DataloggingState.Link);
                                flag = true;
                            }
                        }
                        else
                        {
                            flag = false;
                        }
                    }
                }
                else
                {
                    flag = this.method_17();
                }
            }
            catch (Exception exception2)
            {
                LogThis("Failed to open port:" + this.class10_settings_0.string_1 + " with error:" + Environment.NewLine + "" + exception2.Message);
                throw new ArgumentOutOfRangeException("Failed to open port:" + this.class10_settings_0.string_1, "BMTune");
            }
            if (!flag)
            {
                //method_20();
                DisposeSerial();
            }
        }
        return flag;
    }

    private void DisposeSerial()
    {
        try
        {
            if (this.serialPort_0 != null)
            {
                if (this.serialPort_0.IsOpen) this.serialPort_0.Close();
                this.serialPort_0.Dispose();
            }
        }
        catch (Exception exception)
        {
            MessageBox.Show(Form.ActiveForm, exception.Message);
        }
        this.serialPort_0 = null;
    }

    public void method_2()
    {
        if (this.method_63_HasLogsFileOpen())
        {
            this.method_75();
        }
        if (this.method_54())
        {
            if (MessageBox.Show("Temporary datalog file found. " + Environment.NewLine + "" + Environment.NewLine + " Save the temporary file?", "Datalog", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1, MessageBoxOptions.DefaultDesktopOnly, false) == DialogResult.Yes)
            {
                this.method_SaveDatalog();
            }
            else
            {
                File.Delete(this.string_0);
            }
        }
        if (this.method_34_GetConnected())
        {
            this.method_36();
        }
        if (this.backgroundWorker_1 != null)
        {
            while (this.backgroundWorker_1.IsBusy)
            {
                Application.DoEvents();
            }
            this.backgroundWorker_1.Dispose();
            this.backgroundWorker_1 = null;
        }
        if (this.backgroundWorker_0 != null)
        {
            if (this.backgroundWorker_0.IsBusy) this.backgroundWorker_0.CancelAsync();
            while (this.backgroundWorker_0.IsBusy)
            {
                Application.DoEvents();
            }
            this.backgroundWorker_0.Dispose();
            this.backgroundWorker_0 = null;
        }
        this.method_20();
    }

    public void method_20()
    {
        this.method_35(false);
        if (this.serialPort_0 != null)
        {
            if (this.class25_0.method_10())
            {
                if (this.class25_0.GetConnected()) this.method_4(DataloggingState.Link);
            }
            else
            {
                DisposeSerial();
            }
        }
        else
        {
            this.method_4(DataloggingState.Disconnected);
            if (this.class25_0.GetConnected()) this.class25_0.EmulatorDisconnect();
        }
    }

    public bool method_21()
    {
        return this.bool_3;
    }

    public void method_22(bool bool_18)
    {
        this.bool_4 = bool_18;
    }

    public bool method_23()
    {
        return this.bool_5;
    }

    public void method_24(bool bool_18)
    {
        this.bool_5 = bool_18;
    }

    public bool method_25()
    {
        return (!string.IsNullOrEmpty(this.string_1));
    }

    public bool method_27()
    {
        if (!FakeDatalog)
        {
            //Do not run 2x Threads!
            if (this.backgroundWorker_2 != null)
            {
                this.backgroundWorker_2.Dispose();
                this.backgroundWorker_2 = null;
            }

            this.LogThis("Auto-scan started");
            TryingtoConnect = true;             //TryingtoConnect are Only used for FrmMain Title bar
            this.method_4(DataloggingState.Connecting);
            this.backgroundWorker_2 = new BackgroundWorker();
            this.backgroundWorker_2.DoWork += new DoWorkEventHandler(this.backgroundWorker_2_DoWork);
            this.backgroundWorker_2.WorkerReportsProgress = false;
            this.backgroundWorker_2.WorkerSupportsCancellation = false;
            this.backgroundWorker_2.RunWorkerAsync();
            while (this.backgroundWorker_2.IsBusy)
            {
                Application.DoEvents();
            }
            if (!this.method_34_GetConnected()) this.method_4(DataloggingState.Disconnected);       //method_34_GetConnected return value of bool_1
            TryingtoConnect = false;
        }
        else
        {
            this.bool_11 = true;
        }
        return this.bool_11;
    }

    public bool method_28()
    {
        if (!FakeDatalog)
        {
            return this.method_29(true);
        }
        else
        {
            this.long_0 = 0x20L;
            return true;
        }
    }

    public bool method_29(bool bool_18)
    {
        int num6;
        bool flag2;

        if ((this.class10_settings_0.dataloggingMode_0 != DataloggingMode.datalogDemon) || !this.class10_settings_0.bool_31)
        {
            goto Label_02D0;
        }
        if (this.class25_0.emulatorMoatesType_0 == EmulatorMoatesType.neptuneRTP)
        {
            return true;
        }
        //######################################################################################################
        //######################################################################################################
        //######################################################################################################
        // Section for Demon datalogging
        int num = this.class10_settings_0.int_21;
        int num2 = 0;
        try
        {
            if (!this.method_17())
            {
                this.method_18();
            }
        }
        catch (Exception)
        {
        }
        this.DiscardBuffer();
    Label_004E:
        if ((num2 == num) && bool_18)
        {
            LogThis("If you try to datalog on a chip you must change the emulator to:" + Environment.NewLine + "Moates Ostrich in the settings!");
            MessageBox.Show(Form.ActiveForm, "Can't connect with demon on " + this.class10_settings_0.string_1 + "" + Environment.NewLine + "See the debug logs for the issue", "BMTune", MessageBoxButtons.OK, MessageBoxIcon.Hand);
            return false;
        }
        this.method_42();
        byte[] buffer_0 = new byte[0x11];
        byte num3 = 0;
        buffer_0[0] = 0x44;       //D
        buffer_0[1] = 0x52;       //R
        buffer_0[2] = 0;          //0
        buffer_0[3] = 0x17;       //
        buffer_0[4] = 0;
        buffer_0[5] = 0;
        buffer_0[6] = 3;
        buffer_0[7] = 1;
        buffer_0[8] = 1;
        buffer_0[9] = 0x10;
        buffer_0[10] = 1;
        buffer_0[11] = 1;
        buffer_0[12] = 0x10;
        buffer_0[13] = 1;
        buffer_0[14] = 1;
        buffer_0[15] = 0x10;
        this.method_44(buffer_0, 0x10);
        num3 = this.method_41();
        buffer_0[0x10] = num3;
        try
        {
            this.method_16(buffer_0, 0, 0x11);
            byte num4 = this.method_7();
            if (num4 == 0x4f)
            {
                num2 = 0;
                LogThis(this.class25_0.emulatorMoatesType_0 + " detected and replied success");
            }
            else
            {
                LogThis(this.class25_0.emulatorMoatesType_0 + " detected and replied: " + num4.ToString("X2") + " " + ((char)num4).ToString());
                num2++;
                goto Label_004E;
            }
        }
        catch (Exception exception)
        {
            LogThis("Error message " + exception.Message + " retry #:" + num2.ToString());
            num2++;
            goto Label_004E;
        }
    Label_0196:
        this.DiscardBuffer();
        if (num2 == num)
        {
            if (bool_18)
            {
                LogThis("If you try to datalog on a chip you must change the emulator to:" + Environment.NewLine + "Moates Ostrich in the settings!");
                MessageBox.Show(Form.ActiveForm, "Can't connect with demon on " + this.class10_settings_0.string_1 + "" + Environment.NewLine + "See the debug logs for the issue", "BMTune", MessageBoxButtons.OK, MessageBoxIcon.Hand);
            }
            return false;
        }
        buffer_0 = new byte[1];
        buffer_0[0] = 100;
        byte[] buffer2 = new byte[6];
        try
        {
            this.method_16(buffer_0, 0, 1);
            this.method_11(buffer2, 6);
            this.method_42();
            this.method_44(buffer2, 5);
            num3 = this.method_41();
            byte num5 = buffer2[5];
            if (num5 == num3)
            {
                if (buffer2[1] == 0xcd)
                {
                    LogThis(this.class25_0.emulatorMoatesType_0 + " detected and we have ecu reply");
                    buffer2 = null;
                    buffer_0 = null;
                    num5 = 0;
                    num3 = 0;
                    return true;
                }
                if (buffer2[1] == 84 || buffer2[1] == 0x84)
                {
                    LogThis(this.class25_0.emulatorMoatesType_0 + " detected but the ecu doesn't have power, please put the ignition key On.");
                    this.frmMain_0.SetStatuDatalog("No power to ecu");
                    num2++;
                    //return false;
                }
                if (buffer2[1] != 0xcd && buffer2[1] != 84 && buffer2[1] != 0x84) LogThis(this.class25_0.emulatorMoatesType_0 + " detected but we have timeout between demon and ecu" + Environment.NewLine + "Check Wiring and components and retry");
                this.DiscardBuffer();
                num2++;
            }
            else
            {
                LogThis(this.class25_0.emulatorMoatesType_0 + " detected but we have a checksum error");
                num2++;
            }
            goto Label_0196;
        }
        catch (Exception exception2)
        {
            LogThis(exception2.Message);
            num2++;
            goto Label_0196;
        }

    //######################################################################################################
    //######################################################################################################
    //######################################################################################################
    // Section for Ostrich/Chips Datalogging
    Label_02D0:
        num6 = this.class10_settings_0.int_21;
        int num7 = 0;
        byte num8 = 0;
        byte num9 = 0;
        ConnectRetry = 0;
        switch (this.class10_settings_0.dataloggingMode_0)
        {
            case DataloggingMode.datalogMultiByteT: //this one for ostrich, chips, etc
                num8 = 0x10;
                this.long_0 = 0x20L;
                break;

            case DataloggingMode.datalogDemon:
                if (this.class25_0.emulatorMoatesType_0 == EmulatorMoatesType.neptuneRTP)
                {
                    num8 = 0x10;
                    this.long_0 = 0x20L;
                    break;
                    //return true;
                }
                else
                {
                    this.class18_0.class17_0.frmMain_0.LogThis("datalogging error: demon");
                    num8 = 0x10;
                    this.long_0 = 0x20L;
                    break;
                    //throw new Exception("datalogging error: demon");
                }

            case DataloggingMode.datalogMultiByteX:
                num8 = 0xab;
                this.long_0 = 0x90L;
                break;

            case DataloggingMode.datalogSingleByte:
                num8 = 0xab;
                this.long_0 = 0x90L;
                break;

            default:
                this.class18_0.class17_0.frmMain_0.LogThis("datalogging error: unknow datalog type");
                num8 = 0x10;
                this.long_0 = 0x20L;
                break;
                //throw new Exception("datalogging error: demon");
        }
    Label_035F:
        if (!this.method_17())
        {
            this.method_18();
        }
        this.DiscardBuffer();
        try
        {
            if (num7 == num6)
            {
                if (bool_18)
                {
                    MessageBox.Show(Form.ActiveForm, "Can't connect with ecu on " + this.class10_settings_0.string_1 + "" + Environment.NewLine + "See the debug logs for the issue", "BMTune", MessageBoxButtons.OK, MessageBoxIcon.Hand);
                }
                return false;
            }
            this.serialPort_0.Write(((char)num8).ToString());       //here too
            byte num10 = (byte)this.serialPort_0.ReadByte();
            //ConnectRetry = 0;

            if ((num10 == num9) && (num10 != 0xcd))
            {
                //flag2 = false;
                if (this.class10_settings_0.bool_CheckJ12)
                {
                    flag2 = true;
                }
                else
                {
                    flag2 = false;
                }
                MessageBox.Show(Form.ActiveForm, "J12/J4 not removed in the ecu?", "BMTune");
                LogThis("Received byte is same as send byte");
                LogThis("J12/J4 inplace detect");
                LogThis("remove J12(USDM ecu) or J4(JDM ecu) to be able to datalog");
            }
            num9 = num10;
            if (num10 == 0xcd)
            {
                LogThis("Ecu replied correct handshake byte");
                this.bool_11 = true;
                flag2 = true;
            }
            else
            {
                LogThis("Ecu DIDN'T Replied correct handshake byte!" + Environment.NewLine + "Replied: " + num10.ToString("X2") + "(expected is: 0xCD)");
                if (this.class10_settings_0.bool_CheckJ12)
                {
                    this.bool_11 = true;
                    flag2 = true;
                }
                else
                {
                    ConnectRetry++;
                    num7++;
                    goto Label_035F;
                }
            }
        }
        catch (Exception exception3)
        {
            ConnectRetry++;
            LogThis(exception3.Message);
            num7++;
            goto Label_035F;
        }
        return flag2;
    }

    public DataloggingState method_3()
    {
        return this.dataloggingState_0;
    }

    public void method_30()
    {
        this.bool_9 = true;
    }

    private string GetDatalogCommand()
    {
        switch (this.class10_settings_0.method_8())
        {
            case DataloggingTable.tableMain:
            {
                if (this.class10_settings_0.dataloggingMode_0 == DataloggingMode.datalogMultiByteT)
                {
                    char ch2 = ' ';
                    return ch2.ToString();
                }
                char ch = '\x0090';
                return ch.ToString();
            }
            case DataloggingTable.tableMinimal:
            {
                if (this.class10_settings_0.dataloggingMode_0 != DataloggingMode.datalogMultiByteT)
                {
                    this.class18_0.class17_0.frmMain_0.LogThis("Error: DatalogginCommand");
                    //throw new Exception("DatalogginCommand");
                }
                char ch4 = '0';
                return ch4.ToString();
                //char ch3 = '\x0090';
                //return ch3.ToString();
            }
            case DataloggingTable.table3:
            {
                if (this.class10_settings_0.dataloggingMode_0 != DataloggingMode.datalogMultiByteT)
                {
                    this.class18_0.class17_0.frmMain_0.LogThis("Error: DatalogginCommand");
                    //throw new Exception("DatalogginCommand");
                }
                char ch6 = '0';
                return ch6.ToString();
                //char ch5 = '\x0090';
                //return ch5.ToString();
            }
        }
        this.class18_0.class17_0.frmMain_0.LogThis("Error: DatalogginCommand");
        char chx = ' ';
        return chx.ToString();
        //throw new Exception("DatalogginCommand");
    }

    private void LogThis(string string_1)
    {
        frmMain_0.LogThis("Datalog - " + string_1);
    }

    public bool method_34_GetConnected()
    {
        return this.bool_1;
    }

    public void method_35(bool bool_18)
    {
        this.bool_1 = bool_18;
        if (bool_18)
        {
            this.method_4(DataloggingState.Connected);
        }
        else
        {
            this.method_4(DataloggingState.Disconnected);
        }
    }

    //Datalog connect button clic from main menu
    public void method_36()
    {
        //bool_27 = autoscan
        //method_34_GetConnected = bool_1
        if (!this.class10_settings_0.bool_27 || this.method_34_GetConnected())
        {
            this.method_37();
        }
        else if (this.class10_settings_0.bool_27 && !this.method_34_GetConnected())
        {
            //method_27 = autoscan thread backgroundWorker_2
            //method_37 = connect to device!
            LogThis("Auto scan enabled");
            if (this.method_27())
            {
                this.method_37();
            }
        }
    }

    public void method_37()
    {
        /*Console.WriteLine("1." + this.backgroundWorker_0.IsBusy);
        Console.WriteLine("2." + this.method_34_GetConnected());
        Console.WriteLine("3." + this.bool_11);
        Console.WriteLine("4." + serialPort_0.IsOpen);*/

        this.int_0 = 0;

        if (!this.backgroundWorker_0.IsBusy)
        {
            //Console.WriteLine("restart");
            if (this.method_63_HasLogsFileOpen())
            {
                this.method_75();
            }
            //TryingtoConnect = true;                         //
            //this.method_4(DataloggingState.Connecting);     //this is not called
            this.stopwatch_1.Reset();
            this.FrameCounts = 0L;
            if (this.list_0 != null) this.list_0 = null;
            this.backgroundWorker_0.RunWorkerAsync();
            if (this.class10_settings_0.bool_8 || this.method_23())
            {
                this.method_StartRecord();
            }
            //if (!this.method_34_GetConnected()) this.method_4(DataloggingState.Disconnected);   //this is not called
            //TryingtoConnect = false;                        //
        }
        else if (this.method_34_GetConnected())
        {
            if (this.method_50())
            {
                this.method_StartRecord();
            }
            if (this.method_23() && this.method_54())
            {
                string destFileName = (this.string_1 + @"\log_") + DateTime.Now.ToString("ddMMyyyy_HHmm") + ".bml";
                FileInfo info = new FileInfo(this.string_0);
                try
                {
                    info.CopyTo(destFileName);
                    byte[] byte_99_0 = this.class18_0.method_92(File.ReadAllBytes(destFileName));
                    File.WriteAllBytes(destFileName, byte_99_0);
                }
                catch (Exception)
                {
                }
                finally
                {
                    info.Delete();
                    info = null;
                }
            }
            this.backgroundWorker_0.CancelAsync();
            method_35(false);
        }
    }

    private Struct12 method_38(byte[] byte_1)
    {
        this.stopwatch_0.Stop();
        if (this.class10_settings_0.method_8() == DataloggingTable.tableMain)
        {
            this.struct12_0 = new Struct12();
            this.struct12_0.byte_0 = byte_1[0];
            this.struct12_0.byte_1 = byte_1[1];
            this.struct12_0.byte_2 = byte_1[2];
            this.struct12_0.byte_3 = byte_1[3];
            this.struct12_0.byte_4 = byte_1[4];
            this.struct12_0.byte_5 = byte_1[5];
            this.struct12_0.ushort_0_E6_7 = this.class18_0.method_146(byte_1[6], byte_1[7]);
            this.struct12_0.byte_6_E8 = byte_1[8];
            this.struct12_0.byte_7_E9 = byte_1[9];
            this.struct12_0.byte_8_E10 = byte_1[10];
            this.struct12_0.byte_9_E11 = byte_1[11];
            this.struct12_0.byte_10_E12 = byte_1[12];
            this.struct12_0.byte_11_E13 = byte_1[13];
            this.struct12_0.byte_12_E14 = byte_1[14];
            this.struct12_0.byte_13_E15 = byte_1[15];
            this.struct12_0.byte_14_E16 = byte_1[0x10];
            this.struct12_0.ushort_1_E17_18 = this.class18_0.method_146(byte_1[0x11], byte_1[0x12]);
            this.struct12_0.byte_15_E19 = byte_1[0x13];
            this.struct12_0.byte_16_E20 = byte_1[20];
            this.struct12_0.byte_20 = this.class18_0.method_215(this.struct12_0.byte_14_E16, (long) this.struct12_0.ushort_0_E6_7);
            this.struct12_0.byte_21_E21 = byte_1[0x15];
            this.struct12_0.byte_22_E22 = byte_1[0x16];
            this.struct12_0.byte_23_E23 = byte_1[0x17];
            this.struct12_0.byte_24_E24 = byte_1[0x18];
            this.struct12_0.byte_27_E25 = byte_1[0x19];
            this.struct12_0.byte_28_E26 = byte_1[0x1a];
            this.struct12_0.long_0_E27_28 = this.class18_0.method_146(byte_1[0x1b], byte_1[0x1c]);
            this.struct12_0.long_1_E29_30 = this.class18_0.method_146(byte_1[0x1d], byte_1[30]);
            this.struct12_0.long_2_E31_32 = this.class18_0.method_146(byte_1[0x1f], byte_1[0x20]);
            this.struct12_0.byte_29_E33 = byte_1[0x21];
            this.struct12_0.byte_30_E34 = byte_1[0x22];
            this.struct12_0.byte_31_E35 = byte_1[0x23];
            this.struct12_0.byte_32_E36 = byte_1[0x24];
            this.struct12_0.byte_33_E37 = byte_1[0x25];
            this.struct12_0.byte_34_E38 = byte_1[0x26];
            this.struct12_0.byte_35_E39 = byte_1[0x27];
            this.struct12_0.byte_37_E40 = byte_1[40];
            this.struct12_0.byte_38_E41 = byte_1[0x29];
            this.struct12_0.byte_39_E42 = byte_1[0x2a];
            this.struct12_0.byte_36_E43 = byte_1[0x2b];
            this.struct12_0.byte_25_E44 = byte_1[0x2c];
            this.struct12_0.byte_26_E45 = byte_1[0x2d];
            this.struct12_0.byte_44_E46 = byte_1[0x2e];
            this.struct12_0.byte_45_E47 = byte_1[0x2f];
            this.struct12_0.byte_46_E48 = byte_1[0x30];
            this.struct12_0.ushort_2_E49_50 = this.class18_0.method_146(byte_1[0x31], byte_1[50]);
        }
        else if (this.class10_settings_0.method_8() == DataloggingTable.tableMinimal)
        {
            this.struct12_0 = new Struct12();
            this.struct12_0.byte_0 = byte_1[0];
            this.struct12_0.byte_1 = byte_1[1];
            this.struct12_0.byte_2 = byte_1[2];
            this.struct12_0.byte_4 = byte_1[3];
            this.struct12_0.byte_5 = byte_1[4];
            this.struct12_0.byte_14_E16 = byte_1[5];
            this.struct12_0.byte_7_E9 = byte_1[6];
            this.struct12_0.byte_8_E10 = byte_1[7];
            this.struct12_0.byte_9_E11 = byte_1[8];
            this.struct12_0.ushort_0_E6_7 = this.class18_0.method_146(byte_1[9], byte_1[10]);
            this.struct12_0.ushort_1_E17_18 = this.class18_0.method_146(byte_1[11], byte_1[12]);
            this.struct12_0.byte_15_E19 = byte_1[13];
            this.struct12_0.byte_6_E8 = byte_1[14];
            this.struct12_0.byte_35_E39 = byte_1[15];
            this.struct12_0.byte_20 = this.class18_0.method_215(this.struct12_0.byte_14_E16, (long) this.struct12_0.ushort_0_E6_7);
        }
        else if (this.class10_settings_0.method_8() == DataloggingTable.table3)
        {
            this.struct12_0 = new Struct12();
            this.struct12_0.byte_0 = byte_1[0];
            this.struct12_0.byte_1 = byte_1[1];
            this.struct12_0.byte_2 = byte_1[2];
            this.struct12_0.byte_4 = byte_1[3];
            this.struct12_0.byte_5 = byte_1[4];
            this.struct12_0.byte_14_E16 = byte_1[5];
            this.struct12_0.ushort_0_E6_7 = this.class18_0.method_146(byte_1[6], byte_1[7]);
            this.struct12_0.long_6 = this.class18_0.method_146(byte_1[8], byte_1[9]);
            this.struct12_0.long_7 = this.class18_0.method_146(byte_1[10], byte_1[11]);
            this.struct12_0.byte_47 = byte_1[12];
            this.struct12_0.byte_20 = this.class18_0.method_215(this.struct12_0.byte_14_E16, (long) this.struct12_0.ushort_0_E6_7);
            this.struct12_0.byte_7_E9 = byte_1[13];
            this.struct12_0.byte_8_E10 = byte_1[14];
            this.struct12_0.byte_9_E11 = byte_1[15];
            this.struct12_0.ushort_1_E17_18 = this.class18_0.method_146(byte_1[0x10], byte_1[0x11]);
            this.struct12_0.byte_15_E19 = byte_1[0x12];
            this.struct12_0.byte_24_E24 = byte_1[0x13];
            this.struct12_0.byte_38_E41 = byte_1[20];
            this.struct12_0.byte_25_E44 = byte_1[0x15];
            this.struct12_0.byte_26_E45 = byte_1[0x16];
            this.struct12_0.byte_6_E8 = byte_1[0x17];
            this.struct12_0.byte_35_E39 = byte_1[0x18];
        }
        FrameCounts++;
        if (this.method_34_GetConnected() && !this.method_63_HasLogsFileOpen())
        {
            this.struct12_0.long_3 = FrameCounts;
            this.struct12_0.long_4 = 10;
        }
        else
        {
            this.struct12_0.long_3 = this.stopwatch_1.ElapsedMilliseconds;
            this.struct12_0.long_4 = this.stopwatch_0.ElapsedMilliseconds;
        }
        this.stopwatch_0.Reset();
        this.struct12_0.long_5 = this.long_1;
        this.struct12_0.byte_40 = this.struct12_0.byte_24_E24;
        this.struct12_0.byte_41 = this.struct12_0.byte_25_E44;
        this.struct12_0.byte_42 = this.struct12_0.byte_26_E45;
        if (this.class10_settings_0.bool_25)
        {
            try
            {
                this.struct12_0.byte_43 = this.class18_0.method_213(this.class18_0.method_241(this.class2_serialWB_0.method_1()));
                goto Label_07C3;
            }
            catch
            {
                throw;
            }
        }
        switch (this.class10_settings_0.wbinput_0)
        {
            case WBinput.o2Input:
                this.struct12_0.byte_43 = this.struct12_0.byte_2;
                break;

            case WBinput.eldInput:
                this.struct12_0.byte_43 = this.struct12_0.byte_24_E24;
                break;

            case WBinput.egrInput:
                this.struct12_0.byte_43 = this.struct12_0.byte_25_E44;
                break;

            case WBinput.b6Input:
                this.struct12_0.byte_43 = this.struct12_0.byte_26_E45;
                break;

            default:
                this.struct12_0.byte_43 = this.struct12_0.byte_2;
                this.class18_0.class17_0.frmMain_0.LogThis("wideband input error in selection");
                break;
                //throw new Exception("wideband input error in selection");
        }
    Label_07C3:
        if (this.class10_settings_0.bool_23 && (this.class18_0.GetByteAt(this.class18_0.class13_u_0.long_50) == 0))
        {
            if (this.struct12_0.byte_3 != 0)
            {
                int num = (int) Math.Round((double) ((((this.struct12_0.byte_3 / 2) + 0x18) * 7.221) - 59.0), 0);
                if (this.class10_settings_0.int_6 != num)
                {
                    this.class10_settings_0.int_6 = num;
                }
            }
            else
            {
                this.class10_settings_0.int_6 = 0x3f2;
            }
        }
        this.struct23_0.bool_0 = this.class18_0.method_258(this.struct12_0.byte_6_E8, 3);
        this.struct23_0.bool_1 = this.class18_0.method_258(this.struct12_0.byte_35_E39, 5);
        this.frmMain_0.method_2(ref this.struct12_0);
        if (this.struct12_0.byte_7_E9 > (this.class18_0.method_32_GetRPM_RowsNumber() - 1))
        {
            this.struct12_0.byte_7_E9 = (byte) (this.class18_0.method_32_GetRPM_RowsNumber() - 1);
        }
        if (this.struct12_0.byte_8_E10 > (this.class18_0.method_32_GetRPM_RowsNumber() - 1))
        {
            this.struct12_0.byte_8_E10 = (byte) (this.class18_0.method_32_GetRPM_RowsNumber() - 1);
        }
        if (this.struct12_0.byte_9_E11 > (this.class10_settings_0.method_11_GetMAP_ColumnsNumber() - 1))
        {
            if (!this.class18_0.method_42())
            {
                if (((this.struct12_0.byte_9_E11 > 0x17) && !this.bool_12) && (this.class18_0.class15_0.method_22() != BMTuneVersions.datalogger))
                {
                    if (this.struct12_0.byte_4 < this.class18_0.method_165(0))
                    {
                        this.bool_12 = true;
                        if (MessageBox.Show(Form.ActiveForm, string.Concat(new object[] { "Error!" + Environment.NewLine + "Current mbar is lower then column1.", Environment.NewLine, "Current mbar is ", this.class18_0.method_206(this.struct12_0.byte_4), " and colomn 1 mbar is ", this.class18_0.method_163(0), Environment.NewLine, "Would like to lower column 1 mbar to ", this.class18_0.method_206(this.struct12_0.byte_4 - 3), "?" }), "BMTune", MessageBoxButtons.YesNo, MessageBoxIcon.Hand) == DialogResult.Yes)
                        {
                            int num2 = this.class18_0.method_206(this.struct12_0.byte_4 - 3);
                            this.class18_0.method_173(0, num2);
                            this.class18_0.method_53();
                        }
                    }
                    else
                    {
                        this.bool_12 = true;
                        MessageBox.Show(Form.ActiveForm, "Error!" + Environment.NewLine + "Current load is higher then load of last column!");
                    }
                }
            }
            else
            {
                this.bool_12 = true;
                MessageBox.Show(Form.ActiveForm, "Error!" + Environment.NewLine + "Set the TPS range indexing properly!");
            }
            this.struct12_0.byte_9_E11 = (byte) (this.class10_settings_0.method_11_GetMAP_ColumnsNumber() - 1);
        }
        if (this.struct23_0.bool_0)
        {
            this.struct23_0.struct24_0.int_0 = this.struct12_0.byte_8_E10;
            this.struct23_0.float_0 = 0f;
            if (this.struct23_0.struct24_0.int_0 < this.class18_0.method_32_GetRPM_RowsNumber())
            {
                int num3 = this.class18_0.method_159(this.struct12_0.byte_8_E10);
                int num4 = this.class18_0.method_159((byte) (this.struct12_0.byte_8_E10 + 1));
                this.struct23_0.float_0 = ((float) this.class18_0.method_218((long) this.struct12_0.ushort_0_E6_7)) / ((float) (num3 + num4));
            }
        }
        else
        {
            this.struct23_0.struct24_0.int_0 = this.struct12_0.byte_7_E9;
            this.struct23_0.float_0 = 0f;
            if (this.struct23_0.struct24_0.int_0 < this.class18_0.method_32_GetRPM_RowsNumber())
            {
                int num5 = this.class18_0.method_159(this.struct12_0.byte_7_E9);
                int num6 = this.class18_0.method_159((byte) (this.struct12_0.byte_7_E9 + 1));
                this.struct23_0.float_0 = ((float) this.class18_0.method_218((long) this.struct12_0.ushort_0_E6_7)) / ((float) (num5 + num6));
            }
        }
        this.struct23_0.float_1 = 0f;
        if (this.struct12_0.byte_9_E11 < ((byte) (this.class10_settings_0.method_11_GetMAP_ColumnsNumber() - 1)))
        {
            int num7 = this.class18_0.method_165(this.struct12_0.byte_9_E11);
            int num8 = this.class18_0.method_165((byte) (this.struct12_0.byte_9_E11 + 1));
            this.struct23_0.float_1 = ((float) this.struct12_0.byte_4) / ((float) (num7 + num8));
        }
        this.struct23_0.struct24_0.int_1 = this.struct12_0.byte_9_E11;
        this.struct23_0.struct24_1 = this.struct23_0.struct24_0;
        if (this.struct23_0.float_0 >= 0.5) this.struct23_0.struct24_1.int_0++;
        if (this.struct23_0.float_1 >= 0.5) this.struct23_0.struct24_1.int_1++;
        this.struct12_0.struct24_0 = this.struct23_0.struct24_1;
        this.struct23_0.struct24_2 = this.struct23_0.struct24_0;
        this.struct23_0.method_0(this.struct23_0.struct24_0, ref this.class10_settings_0);
        this.struct23_0.byte_0 = this.struct12_0.byte_43;
        bool flag = this.class18_0.method_258(this.struct12_0.byte_6_E8, 4) || this.class18_0.method_258(this.struct12_0.byte_6_E8, 5);
        this.struct17_0.bool_0 = this.struct23_0.bool_0;
        this.struct12_0.bool_11 = this.struct23_0.bool_0;
        this.struct17_0.bool_1 = this.struct23_0.bool_1;
        this.struct12_0.bool_12 = this.struct23_0.bool_1;
        if (this.class10_settings_0.bool_48) this.struct17_0.bool_2 = flag;
        else this.struct17_0.bool_2 = false;
        this.struct17_0.struct24_0.int_0 = this.struct23_0.struct24_0.int_0;
        this.struct17_0.struct24_0.int_1 = this.struct23_0.struct24_0.int_1;
        this.struct17_0.float_0 = this.struct23_0.float_0;
        this.struct17_0.float_1 = this.struct23_0.float_1;
        this.struct17_0.method_1(this.struct17_0.struct24_0, ref this.class18_0);
        this.struct17_0.struct24_1 = this.struct23_0.struct24_1;
        this.struct17_0.byte_0 = this.struct12_0.byte_43;
        this.struct17_0.long_1 = this.struct12_0.ushort_0_E6_7;
        this.struct17_0.byte_2 = this.struct12_0.byte_4;
        this.struct17_0.byte_1 = this.struct12_0.byte_5;
        this.struct17_0.byte_3 = this.struct12_0.byte_0;
        this.struct17_0.byte_4 = this.struct12_0.byte_1;
        this.struct17_0.byte_5 = this.struct12_0.byte_20;
        this.struct17_0.long_0 = this.struct12_0.long_3;
        float num9 = 0f;
        this.struct12_0.bool_0 = this.class10_settings_0.bool_36 && !this.method_88(AnalogInputs.analog1);
        this.struct12_0.bool_1 = this.class10_settings_0.bool_38 && !this.method_88(AnalogInputs.analog2);
        this.struct12_0.bool_2 = this.class10_settings_0.bool_40 && !this.method_88(AnalogInputs.analog3);
        this.struct12_0.bool_3 = this.method_86(SensorsX.egt_cht1);
        if (this.method_87(SensorsX.egt_cht1))
        {
            if (this.class10_settings_0.int_55 == 1)
            {
                num9 = this.class18_0.method_201(AnalogInputs.analog1, this.struct12_0.byte_40);
            }
            else if (this.class10_settings_0.int_55 == 2)
            {
                num9 = this.class18_0.method_201(AnalogInputs.analog2, this.struct12_0.byte_41);
            }
            else if (this.class10_settings_0.int_55 == 3)
            {
                num9 = this.class18_0.method_201(AnalogInputs.analog3, this.struct12_0.byte_42);
            }
        }
        this.struct12_0.float_0 = num9;
        this.struct12_0.bool_4 = this.method_86(SensorsX.egt_cht2);
        if (this.method_87(SensorsX.egt_cht2))
        {
            if (this.class10_settings_0.int_56 == 1)
            {
                num9 = this.class18_0.method_201(AnalogInputs.analog1, this.struct12_0.byte_40);
            }
            else if (this.class10_settings_0.int_56 == 2)
            {
                num9 = this.class18_0.method_201(AnalogInputs.analog2, this.struct12_0.byte_41);
            }
            else if (this.class10_settings_0.int_56 == 3)
            {
                num9 = this.class18_0.method_201(AnalogInputs.analog3, this.struct12_0.byte_42);
            }
        }
        this.struct12_0.float_1 = num9;
        this.struct12_0.bool_5 = this.method_86(SensorsX.egt_cht3);
        if (this.method_87(SensorsX.egt_cht3))
        {
            if (this.class10_settings_0.int_57 == 1)
            {
                num9 = this.class18_0.method_201(AnalogInputs.analog1, this.struct12_0.byte_40);
            }
            else if (this.class10_settings_0.int_57 == 2)
            {
                num9 = this.class18_0.method_201(AnalogInputs.analog2, this.struct12_0.byte_41);
            }
            else if (this.class10_settings_0.int_57 == 3)
            {
                num9 = this.class18_0.method_201(AnalogInputs.analog3, this.struct12_0.byte_42);
            }
        }
        this.struct12_0.float_2 = num9;
        this.struct12_0.bool_6 = this.method_86(SensorsX.egt_cht4);
        if (this.method_87(SensorsX.egt_cht4))
        {
            if (this.class10_settings_0.int_58 == 1)
            {
                num9 = this.class18_0.method_201(AnalogInputs.analog1, this.struct12_0.byte_40);
            }
            else if (this.class10_settings_0.int_58 == 2)
            {
                num9 = this.class18_0.method_201(AnalogInputs.analog2, this.struct12_0.byte_41);
            }
            else if (this.class10_settings_0.int_58 == 3)
            {
                num9 = this.class18_0.method_201(AnalogInputs.analog3, this.struct12_0.byte_42);
            }
        }
        this.struct12_0.float_3 = num9;
        this.struct12_0.bool_7 = this.method_86(SensorsX.egt_chtAvg);
        if (this.method_87(SensorsX.egt_chtAvg))
        {
            if (this.class10_settings_0.int_59 == 1)
            {
                num9 = this.class18_0.method_201(AnalogInputs.analog1, this.struct12_0.byte_40);
            }
            else if (this.class10_settings_0.int_59 == 2)
            {
                num9 = this.class18_0.method_201(AnalogInputs.analog2, this.struct12_0.byte_41);
            }
            else if (this.class10_settings_0.int_59 == 3)
            {
                num9 = this.class18_0.method_201(AnalogInputs.analog3, this.struct12_0.byte_42);
            }
        }
        this.struct12_0.float_4 = num9;
        this.struct12_0.bool_8 = this.method_86(SensorsX.backPres);
        if (this.method_87(SensorsX.backPres))
        {
            if (this.class10_settings_0.int_60 == 1)
            {
                num9 = this.class18_0.method_201(AnalogInputs.analog1, this.struct12_0.byte_40);
            }
            else if (this.class10_settings_0.int_60 == 2)
            {
                num9 = this.class18_0.method_201(AnalogInputs.analog2, this.struct12_0.byte_41);
            }
            else if (this.class10_settings_0.int_60 == 3)
            {
                num9 = this.class18_0.method_201(AnalogInputs.analog3, this.struct12_0.byte_42);
            }
        }
        this.struct12_0.float_5 = num9;
        this.struct12_0.bool_9 = this.method_86(SensorsX.fuelPres);
        if (this.method_87(SensorsX.fuelPres))
        {
            if (this.class10_settings_0.int_61 == 1)
            {
                num9 = this.class18_0.method_201(AnalogInputs.analog1, this.struct12_0.byte_40);
            }
            else if (this.class10_settings_0.int_61 == 2)
            {
                num9 = this.class18_0.method_201(AnalogInputs.analog2, this.struct12_0.byte_41);
            }
            else if (this.class10_settings_0.int_61 == 3)
            {
                num9 = this.class18_0.method_201(AnalogInputs.analog3, this.struct12_0.byte_42);
            }
        }
        this.struct12_0.float_6 = num9;
        this.struct12_0.bool_10 = this.method_86(SensorsX.iat2);
        if (this.method_87(SensorsX.iat2))
        {
            if (this.class10_settings_0.int_62 == 1)
            {
                num9 = this.class18_0.method_201(AnalogInputs.analog1, this.struct12_0.byte_40);
            }
            else if (this.class10_settings_0.int_62 == 2)
            {
                num9 = this.class18_0.method_201(AnalogInputs.analog2, this.struct12_0.byte_41);
            }
            else if (this.class10_settings_0.int_62 == 3)
            {
                num9 = this.class18_0.method_201(AnalogInputs.analog3, this.struct12_0.byte_42);
            }
        }
        this.struct12_0.float_7 = num9;
        if (this.delegate47_0 != null)
        {
            this.delegate47_0(this.struct17_0);
        }
        if (this.delegate50_0 != null)
        {
            this.delegate50_0(this.struct12_0);
        }
        this.struct20_0.byte_0 = this.struct12_0.byte_10_E12;
        this.struct20_0.byte_1 = this.struct12_0.byte_11_E13;
        this.struct20_0.byte_2 = this.struct12_0.byte_12_E14;
        this.struct20_0.byte_3 = this.struct12_0.byte_13_E15;
        if (((this.struct20_0.byte_0 != 0) || (this.struct20_0.byte_1 != 0)) || ((this.struct20_0.byte_2 != 0) || (this.struct20_0.byte_3 != 0)))
        {
            this.struct12_0.byte_19 = 1;
        }
        else
        {
            this.struct12_0.byte_19 = 0;
        }
        return this.struct12_0;
    }

    private void method_39()
    {
        this.thread_1 = new Thread(new ThreadStart(this.method_40_SendBytes_Delegate));
        this.thread_1.Priority = ThreadPriority.Normal;
        this.thread_1.Start();
    }

    public void method_4(DataloggingState dataloggingState_2)
    {
        this.dataloggingState_0 = dataloggingState_2;
        if (this.delegate46_0 != null)
        {
            this.delegate46_0(this.dataloggingState_0, this.method_34_GetConnected());
        }
    }

    private void method_40_SendBytes_Delegate()
    {
        if ((Application.OpenForms[0].WindowState != FormWindowState.Minimized) && this.class18_0.method_30_HasFileLoadedInBMTune())
        {
            if (this.delegate49_0 != null)
            {
                this.delegate49_0(this.struct23_0);
            }
            if (this.delegate45_0 != null)
            {
                this.delegate45_0(this.struct20_0);
            }
            if (this.delegate54_0 != null)
            {
                //this.class18_Sensors.LoadSensorsData(this.struct12_0);
                this.delegate54_0(this.struct12_0);
            }
        }
    }

    private byte method_41()
    {
        return this.byte_0;
    }

    private void method_42()
    {
        this.byte_0 = 0;
    }

    private void method_43(byte byte_1)
    {
        this.byte_0 = (byte) (this.byte_0 + byte_1);
    }

    private void method_44(byte[] byte_1, int int_3)
    {
        this.byte_0 = 0;
        for (int i = 0; i < int_3; i++)
        {
            this.byte_0 = (byte) (this.byte_0 + byte_1[i]);
        }
    }

    /*private bool method_45()
    {
        bool flag;
        int num = this.class10_0.int_21;
        int num2 = 0;
    Label_0013:
        if (num2 == num)
        {
            return false;
        }
        this.method_42();
        byte[] buffer_0 = new byte[0x11];
        buffer_0[0] = 0x44;
        buffer_0[1] = 0x52;
        buffer_0[2] = 0;
        buffer_0[3] = 0x17;
        buffer_0[4] = 0;
        buffer_0[5] = 0;
        buffer_0[6] = 3;
        buffer_0[7] = 1;
        buffer_0[8] = 1;
        buffer_0[9] = 0x10;
        buffer_0[10] = 1;
        buffer_0[11] = 1;
        buffer_0[12] = 0x10;
        buffer_0[13] = 1;
        buffer_0[14] = 1;
        buffer_0[15] = 0x10;
        this.method_44(buffer_0, 0x10);
        byte num3 = this.method_41();
        buffer_0[0x10] = num3;
        try
        {
            this.method_16(buffer_0, 0, 0x11);
            byte num4 = this.method_7();
            if (num4 == 0x4f)
            {
                num2 = 0;
                LogThis(this.class25_0.emulatorMoatesType_0 + " detected and replied succes");
                flag = true;
            }
            else
            {
                LogThis(this.class25_0.emulatorMoatesType_0 + " detected and replied: " + num4.ToString("X2") + " " + ((char) num4).ToString());
                num2++;
                goto Label_0013;
            }
        }
        catch (Exception exception)
        {
            LogThis("Error message " + exception.Message + " retry #:" + num2.ToString());
            MessageBox.Show(new Form {TopMost = true}, exception.Message);
            num2++;
            goto Label_0013;
        }
        return flag;
    }*/

    private bool method_46()
    {
        bool flag;
        int num = this.class10_settings_0.int_21;
        int num2 = 0;
    Label_0013:
        if (!this.method_17())
        {
            this.method_18();
        }
        this.DiscardBuffer();
        if (num2 == num)
        {
            MessageBox.Show(Form.ActiveForm, "Failed to set datalog command", "BMTune", MessageBoxButtons.OK, MessageBoxIcon.Hand);
            return false;
        }
        this.method_42();
        byte[] buffer_0 = new byte[11];
        buffer_0[0] = 0x44;
        buffer_0[1] = 0x52;
        buffer_0[2] = 0;
        buffer_0[3] = 0x17;
        buffer_0[4] = 0;
        buffer_0[5] = 0;
        buffer_0[6] = 1;
        buffer_0[7] = 1;
        buffer_0[8] = 0x34;
        buffer_0[9] = 0x20;
        this.method_44(buffer_0, 10);
        byte num3 = this.method_41();
        buffer_0[10] = num3;
        try
        {
            this.method_16(buffer_0, 0, 11);
            if (this.method_7() == 0x4f)
            {
                num2 = 0;
                flag = true;
            }
            else
            {
                num2++;
                goto Label_0013;
            }
        }
        catch (Exception exception)
        {
            MessageBox.Show(Form.ActiveForm, exception.Message);
            num2++;
            goto Label_0013;
        }
        return flag;
    }

    private bool method_47()
    {
        bool flag;
        int num = this.class10_settings_0.int_21;
        int num2 = 0;
    Label_0013:
        if (!this.method_17())
        {
            this.method_18();
        }
        this.DiscardBuffer();
        if (num2 == num)
        {
            MessageBox.Show(Form.ActiveForm, "Failed to set datalog command:" + Environment.NewLine + "MIL CLEAR", "BMTune", MessageBoxButtons.OK, MessageBoxIcon.Hand);
            return false;
        }
        this.method_42();
        byte[] buffer_0 = new byte[11];
        buffer_0[0] = 0x44;
        buffer_0[1] = 0x52;
        buffer_0[2] = 0;
        buffer_0[3] = 0x17;
        buffer_0[4] = 0;
        buffer_0[5] = 0;
        buffer_0[6] = 1;
        buffer_0[7] = 1;
        buffer_0[8] = 1;
        buffer_0[9] = 80;
        this.method_44(buffer_0, 10);
        byte num3 = this.method_41();
        buffer_0[10] = num3;
        try
        {
            this.method_16(buffer_0, 0, 11);
            if (this.method_7() == 0x4f)
            {
                num2 = 0;
                flag = true;
            }
            else
            {
                num2++;
                goto Label_0013;
            }
        }
        catch (Exception exception)
        {
            MessageBox.Show(Form.ActiveForm, exception.Message);
            num2++;
            goto Label_0013;
        }
        return flag;
    }

    private void method_48()
    {
        try
        {
            byte[] buffer_0 = new byte[] { 100 };
            this.serialPort_0.Write(buffer_0, 0, 1);
            buffer_0 = null;
        }
        catch (Exception)
        {
            throw;
        }
    }

    private void method_49(Struct12 struct12_1)
    {
        if (this.method_34_GetConnected() && !this.method_63_HasLogsFileOpen())
        {
            if (this.list_0 == null) this.list_0 = new List<Struct12>();
            struct12_1.long_3 = FrameCounts;
            this.list_0.Add(struct12_1);
        }
        if (!this.method_25())
        {
            return;
        }
        this.enum9_0 = (Enum9)0;
        this.enum10_0 = (Enum10)0;
        bool flag = false;
        bool flag2 = false;
        bool flag3 = false;
        flag = ((this.class18_0.method_198(struct12_1.byte_5) >= 0) && (struct12_1.byte_14_E16 >= 0)) && (this.class18_0.method_218((long)struct12_1.ushort_0_E6_7) >= 0);
        flag3 = flag;
        switch (this.enum9_0)
        {
            case Enum9.const_0:
                goto Label_01C5;
        }
        if (this.enum10_0 == Enum10.const_0)
        {
            flag3 = flag && flag2;
        }
        else if (flag2 || flag)
        {
            flag3 = true;
        }
        else
        {
            flag3 = false;
        }
        Label_01C5:
        this.bool_15 = flag3;
        if (!flag3)
        {
            this.dataloggingState_1 = this.method_3();
        }
        if (flag3)
        {
            if (this.method_25() && (this.method_3() != DataloggingState.Recording))
            {
                this.method_4(DataloggingState.Recording);
                this.method_StartRecord();
            }
        }
        else if (this.method_50())
        {
            this.method_StartRecord();
            if (this.method_25() && this.method_54())
            {
                string destFileName = (this.string_1 + @"\log_") + DateTime.Now.ToString("ddMMyyyy_HHmmss") + ".bml";
                FileInfo info = new FileInfo(this.string_0);
                try
                {
                    info.CopyTo(destFileName);
                    byte[] byte_99_0 = this.class18_0.method_92(File.ReadAllBytes(destFileName));
                    File.WriteAllBytes(destFileName, byte_99_0);
                }
                catch (Exception)
                {
                }
                finally
                {
                    info.Delete();
                    info = null;
                }
                this.method_4(this.method_3());
            }
        }
    }

    public bool method_50()
    {
        return this.bool_2;
    }

    public void method_51(bool bool_18)
    {
        this.bool_2 = bool_18;
        if (bool_18)
        {
            this.method_4(DataloggingState.Recording);
        }
    }

    private void method_52(Struct12 struct12_1)
    {
        BinaryWriter writer;
        FileStream output = new FileStream(this.string_0, FileMode.OpenOrCreate, FileAccess.Write);
        writer = new BinaryWriter(output);
        writer.BaseStream.Position = writer.BaseStream.Length;

        this.long_2 = ((int)((writer.BaseStream.Length - 0x7b) - 0x10L)) / (0x7b + 1);
        this.long_3 = struct12_1.long_3;

        int num = 0;
        int num2 = 6;
        int num3 = 0x7b;
        if (writer.BaseStream.Position == 0L)
        {
            writer.Write((byte) 0x42);
            writer.Write((byte) 0x4d);
            writer.Write((byte) 0x54);
            writer.Write((byte) 0x75);
            writer.Write((byte) 0x6e);
            writer.Write((byte) 0x65);
            writer.Write((byte) 0x2e);
            writer.Write((byte) 0x62);
            writer.Write((byte) 0x6d);
            writer.Write((byte) 0x6c);
            writer.Write((ushort) num2);
            writer.Write((byte) num3);
            writer.Write(num);
        }
        writer.Write(struct12_1.byte_0);
        writer.Write(struct12_1.byte_1);
        writer.Write(struct12_1.byte_2);
        writer.Write(struct12_1.byte_3);
        writer.Write(struct12_1.byte_4);
        writer.Write(struct12_1.byte_5);
        writer.Write(struct12_1.ushort_0_E6_7);
        writer.Write(struct12_1.byte_6_E8);
        writer.Write(struct12_1.byte_7_E9);
        writer.Write(struct12_1.byte_8_E10);
        writer.Write(struct12_1.byte_9_E11);
        writer.Write(struct12_1.byte_10_E12);
        writer.Write(struct12_1.byte_11_E13);
        writer.Write(struct12_1.byte_12_E14);
        writer.Write(struct12_1.byte_13_E15);
        writer.Write(struct12_1.byte_14_E16);
        writer.Write(struct12_1.ushort_1_E17_18);
        writer.Write(struct12_1.byte_15_E19);
        writer.Write(struct12_1.byte_16_E20);
        writer.Write(struct12_1.byte_21_E21);
        writer.Write(struct12_1.byte_22_E22);
        writer.Write(struct12_1.byte_23_E23);
        writer.Write(struct12_1.byte_24_E24);
        writer.Write(struct12_1.byte_27_E25);
        writer.Write(struct12_1.long_3);
        writer.Write(struct12_1.long_4);
        writer.Write(struct12_1.byte_28_E26);
        writer.Write((ushort)struct12_1.long_0_E27_28);
        writer.Write((ushort)struct12_1.long_1_E29_30);
        writer.Write((ushort)struct12_1.long_2_E31_32);
        writer.Write(struct12_1.byte_29_E33);
        writer.Write(struct12_1.byte_30_E34);
        writer.Write(struct12_1.byte_31_E35);
        writer.Write(struct12_1.byte_32_E36);
        writer.Write(struct12_1.byte_33_E37);
        writer.Write(struct12_1.byte_34_E38);
        writer.Write(struct12_1.byte_35_E39);
        writer.Write(struct12_1.byte_37_E40);
        writer.Write(struct12_1.byte_38_E41);
        writer.Write(struct12_1.byte_39_E42);
        writer.Write(struct12_1.byte_36_E43);
        writer.Write(struct12_1.byte_25_E44);
        writer.Write(struct12_1.byte_26_E45);
        writer.Write(struct12_1.byte_44_E46);
        writer.Write(struct12_1.byte_45_E47);
        writer.Write(struct12_1.byte_46_E48);
        writer.Write(struct12_1.ushort_2_E49_50);
        writer.Write(struct12_1.byte_43);
        writer.Write((ushort)struct12_1.long_6);
        writer.Write((ushort)struct12_1.long_7);
        writer.Write(struct12_1.bool_0);
        writer.Write(struct12_1.bool_1);
        writer.Write(struct12_1.bool_2);
        writer.Write(struct12_1.bool_3);
        writer.Write(struct12_1.float_0);
        writer.Write(struct12_1.bool_4);
        writer.Write(struct12_1.float_1);
        writer.Write(struct12_1.bool_5);
        writer.Write(struct12_1.float_2);
        writer.Write(struct12_1.bool_6);
        writer.Write(struct12_1.float_3);
        writer.Write(struct12_1.bool_7);
        writer.Write(struct12_1.float_4);
        writer.Write(struct12_1.bool_8);
        writer.Write(struct12_1.float_5);
        writer.Write(struct12_1.bool_9);
        writer.Write(struct12_1.float_6);
        writer.Write(struct12_1.bool_10);
        writer.Write(struct12_1.float_7);
        writer.Write(struct12_1.float_8);
        writer.Write(struct12_1.float_9);
        writer.Write(struct12_1.byte_47);
        writer.Close();
        writer = null;
        output.Close();
        output.Dispose();
        output = null;
        
        /*if (this.delegate53_0 != null)
        {
            this.delegate53_0(this.long_2, this.method_64());
        }*/
    }

    public void method_StartRecord()
    {
        if (this.method_50())
        {
            this.timer_0.Stop();
            if (this.backgroundWorker_1.IsBusy)
            {
                this.backgroundWorker_1.CancelAsync();
            }
            while (this.backgroundWorker_1.IsBusy)
            {
            }
            this.method_51(false);
            this.queue_0.Clear();
            this.method_4(DataloggingState.Connected);
            if ((this.class10_settings_0.bool_26 && !this.method_23()) && !this.method_25())
            {
                this.method_67(this.string_0);
            }
        }
        else
        {
            if (this.method_54())
            {
                string text = "Temporary datalog file found." + Environment.NewLine + "" + Environment.NewLine + "Do you want to save the file?";
                if (MessageBox.Show(text, "BMTune", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1, MessageBoxOptions.DefaultDesktopOnly, false) == DialogResult.Yes)
                {
                    this.method_SaveDatalog();
                }
                else
                {
                    File.Delete(this.string_0);
                }
            }
            while ((this.queue_0.Count > 0) && this.backgroundWorker_1.IsBusy)
            {
            }
            this.queue_0.Clear();
            this.stopwatch_0.Reset();
            this.stopwatch_1.Reset();
            this.long_1 = 0L;
            this.timer_0.Start();
            this.method_51(true);
            this.method_4(DataloggingState.Recording);
        }
    }

    public bool method_54()
    {
        FileInfo info = new FileInfo(this.string_0);
        bool flag = false;
        if (info.Exists)
        {
            flag = true;
        }
        info = null;
        return flag;
    }

    public void method_SaveDatalog()
    {
        if (this.method_63_HasLogsFileOpen())
        {
            this.method_75();
        }
        FileInfo info = new FileInfo(this.string_0);
        if (info.Exists)
        {
            SaveFileDialog dialog = new SaveFileDialog();
            /*if (Settings.Default.logFilePath != string.Empty)
            {
                if (Settings.Default.logFilePath == Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + @"\BMTune\")
                    Settings.Default.logFilePath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
            }
            else
            {
                Settings.Default.logFilePath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
            }
            dialog.InitialDirectory = Settings.Default.logFilePath;*/

            if (this.class10_settings_0.logFilePath != string.Empty)
            {
                if (this.class10_settings_0.logFilePath == Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + @"\BMTune\")
                    this.class10_settings_0.logFilePath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
            }
            else
            {
                this.class10_settings_0.logFilePath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
            }
            dialog.InitialDirectory = this.class10_settings_0.logFilePath;

            dialog.Filter = "BMTune datalog|*.bml";
            dialog.OverwritePrompt = true;
            dialog.AddExtension = true;
            dialog.DefaultExt = ".bml";
            if (dialog.ShowDialog() == DialogResult.OK)
            {
                FileInfo info2 = new FileInfo(dialog.FileName);
                //Settings.Default.logFilePath = info2.DirectoryName;
                this.class10_settings_0.logFilePath = info2.DirectoryName;
                string fileName = dialog.FileName;
                if (File.Exists(fileName)) File.Delete(fileName);
                info.CopyTo(fileName);
                byte[] byte_99_0 = this.class18_0.method_92(File.ReadAllBytes(fileName));
                File.WriteAllBytes(fileName, byte_99_0);
                info.Delete();
            }
            dialog.Dispose();
            dialog = null;
        }
        info = null;
    }

    public void method_56()
    {
        if (this.method_63_HasLogsFileOpen())
        {
            SaveFileDialog dialog = new SaveFileDialog();
            /*if (Settings.Default.logFilePath != string.Empty)
            {
                if (Settings.Default.logFilePath == Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + @"\BMTune\")
                {
                    Settings.Default.logFilePath = Application.StartupPath;
                }
                dialog.InitialDirectory = Settings.Default.logFilePath;
            }*/
            if (this.class10_settings_0.logFilePath != string.Empty)
            {
                if (this.class10_settings_0.logFilePath == Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + @"\BMTune\")
                {
                    this.class10_settings_0.logFilePath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
                }
                dialog.InitialDirectory = this.class10_settings_0.logFilePath;
            }

            dialog.CheckFileExists = false;
            dialog.AddExtension = true;
            dialog.Filter = "CVS export|*.csv";
            if (dialog.ShowDialog() == DialogResult.OK)
            {
                StreamWriter writer;
                FileInfo info = new FileInfo(dialog.FileName);
                //Settings.Default.logFilePath = info.DirectoryName;
                this.class10_settings_0.logFilePath = info.DirectoryName;
                string fileName = dialog.FileName;
                dialog.Dispose();
                dialog = null;
                try
                {
                    writer = new StreamWriter(fileName);
                }
                catch (Exception exception)
                {
                    MessageBox.Show(Form.ActiveForm, exception.Message, "BMTune", MessageBoxButtons.OK, MessageBoxIcon.Hand);
                    writer = null;
                    return;
                }
                writer.WriteLine("BMTune Datalog export of " + this.method_62());
                writer.WriteLine("BMTune file: " + this.class18_0.method_23());
                writer.WriteLine("Total Frames: " + this.method_65().ToString());
                writer.WriteLine("Duration :" + this.method_64());
                writer.WriteLine(this.method_59());
                foreach (Struct12 struct2 in this.list_0)
                {
                    writer.WriteLine(this.method_60(struct2));
                }
                writer.Close();
                writer.Dispose();
                writer = null;
            }
        }
    }

    private string method_57(SensorsX sensors_0)
    {
        return this.class10_settings_0.method_13(sensors_0).ToString();
    }

    private string method_58()
    {
        return CultureInfo.CurrentCulture.TextInfo.ListSeparator.ToString();
    }

    private string method_59()
    {
        return (this.method_57(SensorsX.frame) + this.method_58() + this.method_57(SensorsX.duration) + this.method_58() + this.method_57(SensorsX.rpmX) + this.method_58() + this.method_57(SensorsX.vssX) + "(" + this.class10_settings_0.vssUnits_0.ToString() + ")" + this.method_58() + this.method_57(SensorsX.gearX) + this.method_58() + this.method_57(SensorsX.mapX) + "(mBar)" + this.method_58() + this.method_57(SensorsX.boostX) + "(psi)" + this.method_58() + this.method_57(SensorsX.paX) + "(mBar)" + this.method_58() + this.method_57(SensorsX.tpsX) + "(%)" + this.method_58() + this.method_57(SensorsX.tpsV) + "(v)" + this.method_58() + this.method_57(SensorsX.injDur) + "(ms)" + this.method_58() + this.method_57(SensorsX.injDuty) + "(%)" + this.method_58() + this.method_57(SensorsX.injFV) + this.method_58() + this.method_57(SensorsX.ignTbl) + "(degrees)" + this.method_58() + this.method_57(SensorsX.ignFnl) + "(degrees)" + this.method_58() + this.method_57(SensorsX.ectX) + "(" + this.class10_settings_0.temperatureUnits_0.ToString() + ")" + this.method_58() + this.method_57(SensorsX.iatX) + "(" + this.class10_settings_0.temperatureUnits_0.ToString() + ")" + this.method_58() + this.method_57(SensorsX.afr) + this.method_58() + this.method_57(SensorsX.ecuO2V) + "(v)" + this.method_58() + this.method_57(SensorsX.batV) + "(v)" + this.method_58() + this.method_57(SensorsX.eldV) + "(v)" + this.method_58() + this.method_57(SensorsX.mapV) + "(v)" + this.method_58() + this.method_57(SensorsX.mil));
    }

    private void method_6(object sender, PowerModeChangedEventArgs e)
    {
        if (e.Mode == PowerModes.Suspend)
        {
            this.LogThis("Supsend detected and logging is connected: " + this.method_34_GetConnected().ToString());
            this.bool_0 = this.method_34_GetConnected();
            if (this.method_34_GetConnected())
            {
                this.method_36();
            }
            this.timer_1.Stop();
            this.method_20();
        }
        else if (e.Mode == PowerModes.Resume)
        {
            this.bool_0 = false;
        }
    }

    private string method_60(Struct12 struct12_1)
    {
        string str2;
        string str = (((float) struct12_1.long_3) / 1000f).ToString();
        if (this.class18_0.method_206(struct12_1.byte_4) >= this.class10_settings_0.int_6)
        {
            str2 = this.class18_0.method_245(this.class18_0.method_206(struct12_1.byte_4)).ToString();
        }
        else
        {
            str2 = "0";
        }
        int num = this.class18_0.method_218((long) struct12_1.ushort_0_E6_7);
        return string.Concat(new object[] { 
            struct12_1.long_5, this.method_58(), str, this.method_58(), num.ToString(), this.method_58(), this.class18_0.method_197(struct12_1.byte_14_E16).ToString(), this.method_58(), struct12_1.byte_20.ToString(), this.method_58(), this.class18_0.method_206(struct12_1.byte_4).ToString(), this.method_58(), str2, this.method_58(), this.class18_0.method_206(struct12_1.byte_3).ToString(), this.method_58(), 
            this.class18_0.method_198(struct12_1.byte_5).ToString(), this.method_58(), this.class18_0.method_196(struct12_1.byte_5).ToString("0.00"), this.method_58(), this.class18_0.method_224((int) this.class18_0.method_223(struct12_1.ushort_1_E17_18)).ToString("0.00"), this.method_58(), this.class18_0.method_225((int) this.class18_0.method_223(struct12_1.ushort_1_E17_18), num, 0).ToString("0.00"), this.method_58(), this.class18_0.method_223(struct12_1.ushort_1_E17_18).ToString("0.00"), this.method_58(), this.class18_0.method_188(struct12_1.byte_16_E20).ToString("0.00"), this.method_58(), this.class18_0.method_188(struct12_1.byte_15_E19).ToString("0.00"), this.method_58(), this.class18_0.method_191(struct12_1.byte_0).ToString("0"), this.method_58(), 
            this.class18_0.method_191(struct12_1.byte_1).ToString("0"), this.method_58(), this.class18_0.method_200(struct12_1.byte_43).ToString("0.00"), this.method_58(), this.class18_0.method_196(struct12_1.byte_2).ToString("0.00"), this.method_58(), this.class18_0.method_208(struct12_1.byte_27_E25).ToString("0.00"), this.method_58(), this.class18_0.method_196(struct12_1.byte_24_E24).ToString("0.00"), this.method_58(), this.class18_0.method_196(struct12_1.byte_4).ToString("0.00"), this.method_58(), this.method_61(struct12_1.byte_19)
         });
    }

    private string method_61(byte byte_1)
    {
        if (byte_1 == 0)
        {
            return "OFF";
        }
        return "ON";
    }

    public string method_62()
    {
        FileInfo info = new FileInfo(this.string_2);
        string name = info.Name;
        info = null;
        return name;
    }

    public bool method_63_HasLogsFileOpen()
    {
        return this.bool_6;
    }

    public string method_64()
    {
        if (this.method_63_HasLogsFileOpen() || this.method_50())
        {
            string str = TimeSpan.FromMilliseconds((double)this.long_3).ToString();
            //string str = TimeSpan.FromMilliseconds((double) 0).ToString();
            return str.Remove(str.Length - 4, 4);
        }
        return "";
    }

    public long method_65()
    {
        if (this.method_34_GetConnected() && !this.method_63_HasLogsFileOpen())
        {
            this.long_2 = this.FrameCounts;
            //this.long_2 = ((((this.FrameCounts * 51) + 0x7b) + 0x10L)) * (0x7b + 1);
            //this.long_2 = ((int)((writer.BaseStream.Length - 0x7b) - 0x10L)) / (0x7b + 1);
            return this.long_2;
        }
        
        //if (!this.method_63() && !this.method_34())
        if (!this.method_63_HasLogsFileOpen())
        {
            this.class18_0.class17_0.frmMain_0.LogThis("log not open or not logging");
            //throw new Exception("log not open or not logging");
        }
        if (this.long_2 == 0L)
        {
            this.class18_0.class17_0.frmMain_0.LogThis("log file open and frame max is 0");
            //throw new Exception("log file open and frame max is 0");
        }

        return this.long_2;
    }

    public void method_OpenLog()
    {
        if (this.backgroundWorker_0.IsBusy)
        {
            this.backgroundWorker_0.CancelAsync();
        }
        while (this.backgroundWorker_0.IsBusy)
        {
            Application.DoEvents();
        }
        OpenFileDialog dialog = new OpenFileDialog();
        if (this.class10_settings_0.logFilePath == string.Empty) this.class10_settings_0.logFilePath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
        if (this.class10_settings_0.logFilePath.Contains(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData))) this.class10_settings_0.logFilePath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
        dialog.InitialDirectory = this.class10_settings_0.logFilePath;

        dialog.Filter = "BMTune datalog|*.bml|eCtune datalog|*.elf|HTS datalog|*.log;*.rlog|All files (*.*)|*.*";
        dialog.DefaultExt = ".bml";
        dialog.CheckFileExists = true;
        dialog.CheckPathExists = true;
        if (dialog.ShowDialog() == DialogResult.OK)
        {
            if (this.method_3() == DataloggingState.PlayingF)
            {
                this.method_71();
                this.method_75();
                GC.Collect(3, GCCollectionMode.Forced);
            }

            //Open bmtune datalog files
            string path = "";
            if (dialog.FilterIndex == 1)
            {
                path = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + @"\BMTune\" + Path.GetFileName(dialog.FileName);
                byte[] byte_99_0 = this.class18_0.method_93(File.ReadAllBytes(dialog.FileName));
                File.WriteAllBytes(path, byte_99_0);
            }
            //Open eCtune datalog files
            if (dialog.FilterIndex == 2)
            {
                path = dialog.FileName;
            }
            if (dialog.FilterIndex == 3 || dialog.FilterIndex == 4)
            {
                string extension = Path.GetExtension(dialog.FileName);
                if (extension == ".bml")
                {
                    path = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + @"\BMTune\" + Path.GetFileName(dialog.FileName);
                    byte[] byte_99_0 = this.class18_0.method_93(File.ReadAllBytes(dialog.FileName));
                    File.WriteAllBytes(path, byte_99_0);
                }
                if (extension == ".elf")
                {
                    path = dialog.FileName;
                }
                if (extension == ".rlog")
                {
                    string str = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\BMTune\\";
                    if (File.Exists(str + "PROG")) File.Delete(str + "PROG");
                    if (File.Exists(str + "DL")) File.Delete(str + "DL");
                    if (File.Exists(str + "SET")) File.Delete(str + "SET");
                    if (File.Exists(str + "OLDSET")) File.Delete(str + "OLDSET");

                    //File.Create(str + "OLDSET").Dispose();
                    //this.class10_settings_0.method_3();
                    //File.WriteAllBytes(str + "OLDSET", File.ReadAllBytes(this.class10_settings_0.path));
                    if (File.Exists(dialog.FileName))
                    {
                        using (FileStream fileStream = new FileStream(dialog.FileName, FileMode.Open))
                        {
                            using (ZipArchive zipArchive = new ZipArchive(fileStream, ZipArchiveMode.Read))
                            {
                                foreach (ZipArchiveEntry zipArchiveEntry in zipArchive.Entries)
                                {
                                    using (Stream stream = zipArchiveEntry.Open())
                                    {
                                        using (BinaryReader binaryReader = new BinaryReader(stream))
                                        {
                                            using (FileStream fileStream2 = new FileStream(str + zipArchiveEntry.Name.ToString(), FileMode.CreateNew))
                                            {
                                                using (BinaryWriter binaryWriter = new BinaryWriter(fileStream2))
                                                {
                                                    binaryWriter.Write(binaryReader.ReadBytes((int)zipArchiveEntry.Length));
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                    //this.class10_settings_0.LoadSettings(str + "SET");
                    //this.class10_settings_0.method_2();
                    //this.class18_0.method_195(str + "PROG");
                    //dialog.FileName = str + "DL";
                }

                //final HTS datalog loading
                if (extension == ".rlog" || extension == ".log")
                {
                    string text = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\BMTune\\" + Path.GetFileName(dialog.FileName);
                    byte[] bytes = this.class18_0.method_246_HTSCrypter(File.ReadAllBytes(dialog.FileName));
                    File.WriteAllBytes(text, bytes);
                    path = text;
                }
            }

            this.class10_settings_0.logFilePath = Path.GetDirectoryName(dialog.FileName);
            this.string_2 = path;
            this.method_67(path);
            if (this.class10_settings_0.bool_7) this.method_70();
            if (File.Exists(path)) File.Delete(path);
        }
        dialog.Dispose();
        dialog = null;
    }

    public void method_67(string string_3)
    {
        if (!this.bool_17)
        {
            if (this.method_63_HasLogsFileOpen())
            {
                this.method_75();
            }
            this.string_2 = string_3;
            this.bool_17 = true;    //set loading
            this.method_4(DataloggingState.Loading);
            this.thread_2 = new Thread(new ThreadStart(this.method_68));
            this.thread_2.Priority = ThreadPriority.Highest;
            this.thread_2.Start();
            while (this.thread_2.IsAlive)
            {
                Application.DoEvents();
            }
            this.bool_6 = true;
            this.long_1 = 0L;
            if (this.delegate53_0 != null)
            {
                this.delegate53_0(this.long_2, this.method_64());
            }
            this.struct12_0 = this.method_76(0L);
            this.method_39();
            this.bool_17 = false;  //set loading
            if (this.class10_settings_0.bool_7)
            {
                this.method_70();   //play log on open
            }
        }
    }

    public void method_68()
    {
        this.list_1.Clear();
        int num = 0x3a;
        string str = null;
        this.int_1 = 0;
        bool flag = false;
        if (this.backgroundWorker_0.IsBusy)
        {
            this.backgroundWorker_0.CancelAsync();
        }
        while (this.backgroundWorker_0.IsBusy)
        {
            Application.DoEvents();
        }
        this.fileStream_0 = new FileStream(this.string_2, FileMode.Open, FileAccess.Read);
        try
        {
            if (this.fileStream_0 != null)
            {
                this.fileStream_0.Dispose();
                this.fileStream_0 = null;
            }
            this.fileStream_0 = new FileStream(this.string_2, FileMode.Open, FileAccess.Read);
            if (this.binaryReader_0 != null)
            {
                this.binaryReader_0.Close();
                this.binaryReader_0 = null;
            }
            this.binaryReader_0 = new BinaryReader(this.fileStream_0);
            try
            {
                for (int j = 0; j < 10; j++)
                {
                    str = str + this.binaryReader_0.ReadChar().ToString();
                }
            }
            catch (Exception)
            {
            }
            if (str == "BMTune.bml" || str == "eCtune.dlf" || str == "DATALOGGER")
            {
                flag = true;
                this.binaryReader_0.BaseStream.Position = 10L;
                this.int_1 = this.binaryReader_0.ReadUInt16();
                num = this.binaryReader_0.ReadByte();
                this.binaryReader_0.ReadInt32();

                /*
                int num2 = 6;
                int num3 = 0x7b;
                int num = 0;
                */
            }


            if (flag) this.long_2 = ((int) ((this.binaryReader_0.BaseStream.Length - num) - 0x10L)) / (num + 1);
            else this.long_2 = (((int) this.binaryReader_0.BaseStream.Length) - num) / (num + 1);

            if (this.list_0 != null) this.list_0 = null;
            int num3 = 0;
            this.list_0 = new List<Struct12>();
            Struct12 item = new Struct12();
            bool FileLoadingError = false;
            for (int i = 0; i <= this.long_2; i++)
            {
                try
                {
                    if (flag)
                    {
                        this.binaryReader_0.BaseStream.Position = 0x11 + (i * (num + 1));
                    }
                    else
                    {
                        this.binaryReader_0.BaseStream.Position = i * (num + 1);
                    }
                    item.long_5 = i;
                    item.byte_0 = this.binaryReader_0.ReadByte();
                    item.byte_1 = this.binaryReader_0.ReadByte();
                    item.byte_2 = this.binaryReader_0.ReadByte();
                    item.byte_3 = this.binaryReader_0.ReadByte();
                    item.byte_4 = this.binaryReader_0.ReadByte();
                    item.byte_5 = this.binaryReader_0.ReadByte();
                    item.ushort_0_E6_7 = this.binaryReader_0.ReadUInt16();
                    item.byte_6_E8 = this.binaryReader_0.ReadByte();
                    item.byte_7_E9 = this.binaryReader_0.ReadByte();
                    item.byte_8_E10 = this.binaryReader_0.ReadByte();
                    item.byte_9_E11 = this.binaryReader_0.ReadByte();
                    item.byte_10_E12 = this.binaryReader_0.ReadByte();
                    item.byte_11_E13 = this.binaryReader_0.ReadByte();
                    item.byte_12_E14 = this.binaryReader_0.ReadByte();
                    item.byte_13_E15 = this.binaryReader_0.ReadByte();
                    item.byte_14_E16 = this.binaryReader_0.ReadByte();
                    item.ushort_1_E17_18 = this.binaryReader_0.ReadUInt16();
                    item.byte_15_E19 = this.binaryReader_0.ReadByte();
                    item.byte_16_E20 = this.binaryReader_0.ReadByte();
                    item.byte_20 = this.class18_0.method_215(item.byte_14_E16, (long) item.ushort_0_E6_7);
                    item.byte_21_E21 = this.binaryReader_0.ReadByte();
                    item.byte_22_E22 = this.binaryReader_0.ReadByte();
                    item.byte_23_E23 = this.binaryReader_0.ReadByte();
                    item.byte_24_E24 = this.binaryReader_0.ReadByte();
                    item.byte_27_E25 = this.binaryReader_0.ReadByte();
                    item.long_3 = this.binaryReader_0.ReadInt64() - this.long_4;
                    item.long_4 = this.binaryReader_0.ReadInt64();
                    item.byte_28_E26 = this.binaryReader_0.ReadByte();
                    item.long_0_E27_28 = this.binaryReader_0.ReadUInt16();
                    item.long_1_E29_30 = this.binaryReader_0.ReadUInt16();
                    item.long_2_E31_32 = this.binaryReader_0.ReadUInt16();
                    item.byte_29_E33 = this.binaryReader_0.ReadByte();
                    item.byte_30_E34 = this.binaryReader_0.ReadByte();
                    item.byte_31_E35 = this.binaryReader_0.ReadByte();
                    item.byte_32_E36 = this.binaryReader_0.ReadByte();
                    item.byte_33_E37 = this.binaryReader_0.ReadByte();
                    item.byte_34_E38 = this.binaryReader_0.ReadByte();
                    item.byte_35_E39 = this.binaryReader_0.ReadByte();
                    item.byte_37_E40 = this.binaryReader_0.ReadByte();
                    item.byte_38_E41 = this.binaryReader_0.ReadByte();
                    item.byte_39_E42 = this.binaryReader_0.ReadByte();
                    item.byte_40 = item.byte_24_E24;
                    if (this.int_1 > 1)
                    {
                        item.byte_36_E43 = this.binaryReader_0.ReadByte();
                        item.byte_25_E44 = this.binaryReader_0.ReadByte();
                        item.byte_26_E45 = this.binaryReader_0.ReadByte();
                        item.byte_44_E46 = this.binaryReader_0.ReadByte();
                        item.byte_45_E47 = this.binaryReader_0.ReadByte();
                        item.byte_46_E48 = this.binaryReader_0.ReadByte();
                        item.ushort_2_E49_50 = this.binaryReader_0.ReadUInt16();
                    }
                    item.byte_41 = item.byte_25_E44;
                    item.byte_42 = item.byte_26_E45;
                    if (this.int_1 > 2)
                    {
                        item.byte_43 = this.binaryReader_0.ReadByte();
                    }
                    else
                    {
                        switch (this.class10_settings_0.wbinput_0)
                        {
                            case WBinput.o2Input:
                                item.byte_43 = item.byte_2;
                                goto Label_061C;

                            case WBinput.eldInput:
                                item.byte_43 = item.byte_24_E24;
                                goto Label_061C;

                            case WBinput.egrInput:
                                item.byte_43 = item.byte_25_E44;
                                goto Label_061C;

                            case WBinput.b6Input:
                                item.byte_43 = item.byte_26_E45;
                                goto Label_061C;
                        }

                        this.class18_0.class17_0.frmMain_0.LogThis("wideband input error in selection");
                        item.byte_43 = item.byte_2;
                        goto Label_061C;
                        //throw new Exception("wideband input error in selection");
                    }
                Label_061C:
                    if (this.int_1 > 3)
                    {
                        item.long_6 = this.binaryReader_0.ReadUInt16();
                        item.long_7 = this.binaryReader_0.ReadUInt16();
                    }
                    if (this.int_1 <= 4)
                    {
                        float num5 = 0f;
                        item.bool_0 = this.class10_settings_0.bool_36 && !this.method_88(AnalogInputs.analog1);
                        item.bool_1 = this.class10_settings_0.bool_38 && !this.method_88(AnalogInputs.analog2);
                        item.bool_2 = this.class10_settings_0.bool_40 && !this.method_88(AnalogInputs.analog3);
                        item.bool_3 = this.method_86(SensorsX.egt_cht1);
                        if (this.method_87(SensorsX.egt_cht1))
                        {
                            if (this.class10_settings_0.int_55 == 1)
                            {
                                num5 = this.class18_0.method_201(AnalogInputs.analog1, item.byte_40);
                            }
                            else if (this.class10_settings_0.int_55 == 2)
                            {
                                num5 = this.class18_0.method_201(AnalogInputs.analog2, item.byte_41);
                            }
                            else if (this.class10_settings_0.int_55 == 3)
                            {
                                num5 = this.class18_0.method_201(AnalogInputs.analog3, item.byte_42);
                            }
                        }
                        item.float_0 = num5;
                        item.bool_4 = this.method_86(SensorsX.egt_cht2);
                        if (this.method_87(SensorsX.egt_cht2))
                        {
                            if (this.class10_settings_0.int_56 == 1)
                            {
                                num5 = this.class18_0.method_201(AnalogInputs.analog1, item.byte_40);
                            }
                            else if (this.class10_settings_0.int_56 == 2)
                            {
                                num5 = this.class18_0.method_201(AnalogInputs.analog2, item.byte_41);
                            }
                            else if (this.class10_settings_0.int_56 == 3)
                            {
                                num5 = this.class18_0.method_201(AnalogInputs.analog3, item.byte_42);
                            }
                        }
                        this.struct12_0.float_1 = num5;
                        item.bool_5 = this.method_86(SensorsX.egt_cht3);
                        if (this.method_87(SensorsX.egt_cht3))
                        {
                            if (this.class10_settings_0.int_57 == 1)
                            {
                                num5 = this.class18_0.method_201(AnalogInputs.analog1, item.byte_40);
                            }
                            else if (this.class10_settings_0.int_57 == 2)
                            {
                                num5 = this.class18_0.method_201(AnalogInputs.analog2, item.byte_41);
                            }
                            else if (this.class10_settings_0.int_57 == 3)
                            {
                                num5 = this.class18_0.method_201(AnalogInputs.analog3, item.byte_42);
                            }
                        }
                        item.float_2 = num5;
                        item.bool_6 = this.method_86(SensorsX.egt_cht4);
                        if (this.method_87(SensorsX.egt_cht4))
                        {
                            if (this.class10_settings_0.int_58 == 1)
                            {
                                num5 = this.class18_0.method_201(AnalogInputs.analog1, item.byte_40);
                            }
                            else if (this.class10_settings_0.int_58 == 2)
                            {
                                num5 = this.class18_0.method_201(AnalogInputs.analog2, item.byte_41);
                            }
                            else if (this.class10_settings_0.int_58 == 3)
                            {
                                num5 = this.class18_0.method_201(AnalogInputs.analog3, item.byte_42);
                            }
                        }
                        item.float_3 = num5;
                        item.bool_7 = this.method_86(SensorsX.egt_chtAvg);
                        if (this.method_87(SensorsX.egt_chtAvg))
                        {
                            if (this.class10_settings_0.int_59 == 1)
                            {
                                num5 = this.class18_0.method_201(AnalogInputs.analog1, item.byte_40);
                            }
                            else if (this.class10_settings_0.int_59 == 2)
                            {
                                num5 = this.class18_0.method_201(AnalogInputs.analog2, item.byte_41);
                            }
                            else if (this.class10_settings_0.int_59 == 3)
                            {
                                num5 = this.class18_0.method_201(AnalogInputs.analog3, item.byte_42);
                            }
                        }
                        item.float_4 = num5;
                        item.bool_8 = this.method_86(SensorsX.backPres);
                        if (this.method_87(SensorsX.backPres))
                        {
                            if (this.class10_settings_0.int_60 == 1)
                            {
                                num5 = this.class18_0.method_201(AnalogInputs.analog1, item.byte_40);
                            }
                            else if (this.class10_settings_0.int_60 == 2)
                            {
                                num5 = this.class18_0.method_201(AnalogInputs.analog2, item.byte_41);
                            }
                            else if (this.class10_settings_0.int_60 == 3)
                            {
                                num5 = this.class18_0.method_201(AnalogInputs.analog3, item.byte_42);
                            }
                        }
                        item.float_5 = num5;
                        item.bool_9 = this.method_86(SensorsX.fuelPres);
                        if (this.method_87(SensorsX.fuelPres))
                        {
                            if (this.class10_settings_0.int_61 == 1)
                            {
                                num5 = this.class18_0.method_201(AnalogInputs.analog1, item.byte_40);
                            }
                            else if (this.class10_settings_0.int_61 == 2)
                            {
                                num5 = this.class18_0.method_201(AnalogInputs.analog2, item.byte_41);
                            }
                            else if (this.class10_settings_0.int_61 == 3)
                            {
                                num5 = this.class18_0.method_201(AnalogInputs.analog3, item.byte_42);
                            }
                        }
                        item.float_6 = num5;
                        item.bool_10 = this.method_86(SensorsX.iat2);
                        if (this.method_87(SensorsX.iat2))
                        {
                            if (this.class10_settings_0.int_62 == 1)
                            {
                                num5 = this.class18_0.method_201(AnalogInputs.analog1, item.byte_40);
                            }
                            else if (this.class10_settings_0.int_62 == 2)
                            {
                                num5 = this.class18_0.method_201(AnalogInputs.analog2, item.byte_41);
                            }
                            else if (this.class10_settings_0.int_62 == 3)
                            {
                                num5 = this.class18_0.method_201(AnalogInputs.analog3, item.byte_42);
                            }
                        }
                        item.float_7 = num5;
                    }
                    if (this.int_1 >= 6)
                    {
                        item.byte_47 = this.binaryReader_0.ReadByte();
                    }
                    num3++;
                    this.list_0.Add(item);
                    this.struct23_0.bool_0 = this.class18_0.method_258(item.byte_6_E8, 3);
                    this.struct23_0.bool_1 = this.class18_0.method_258(item.byte_35_E39, 5);
                    if (item.byte_9_E11 > (this.class10_settings_0.method_11_GetMAP_ColumnsNumber() - 1))
                    {
                        item.byte_9_E11 = (byte) (this.class10_settings_0.method_11_GetMAP_ColumnsNumber() - 1);
                    }
                    if (this.struct23_0.bool_0)
                    {
                        this.struct23_0.struct24_0.int_0 = item.byte_8_E10;
                        this.struct23_0.float_0 = ((float) item.byte_45_E47) / 255f;
                    }
                    else
                    {
                        this.struct23_0.struct24_0.int_0 = item.byte_7_E9;
                        this.struct23_0.float_0 = ((float) item.byte_44_E46) / 255f;
                    }
                    this.struct23_0.float_1 = ((float) item.byte_46_E48) / 255f;
                    this.struct23_0.struct24_0.int_1 = item.byte_9_E11;
                    this.struct23_0.struct24_1 = this.struct23_0.struct24_0;
                    if (this.struct23_0.float_0 >= 0.5) this.struct23_0.struct24_1.int_0++;
                    if (this.struct23_0.float_1 >= 0.5) this.struct23_0.struct24_1.int_1++;
                    item.struct24_0 = this.struct23_0.struct24_1;
                    this.struct23_0.struct24_2 = this.struct23_0.struct24_0;
                    this.struct23_0.method_0(this.struct23_0.struct24_0, ref this.class10_settings_0);
                    this.struct23_0.byte_0 = this.struct12_0.byte_43;
                    bool flag2 = this.class18_0.method_258(item.byte_6_E8, 4) || this.class18_0.method_258(item.byte_6_E8, 5);
                    this.struct17_0.bool_0 = this.struct23_0.bool_0;
                    this.struct17_0.bool_1 = this.struct23_0.bool_1;
                    if (this.class10_settings_0.bool_48)
                    {
                        this.struct17_0.bool_2 = flag2;
                    }
                    else
                    {
                        this.struct17_0.bool_2 = false;
                    }
                    this.struct17_0.struct24_0.int_0 = this.struct23_0.struct24_0.int_0;
                    this.struct17_0.struct24_0.int_1 = this.struct23_0.struct24_0.int_1;
                    this.struct17_0.float_0 = this.struct23_0.float_0;
                    this.struct17_0.float_1 = this.struct23_0.float_1;
                    this.struct17_0.struct24_1 = this.struct23_0.struct24_1;
                    this.struct17_0.method_1(this.struct17_0.struct24_0, ref this.class18_0);
                    this.struct17_0.byte_0 = item.byte_43;
                    this.struct17_0.long_1 = item.ushort_0_E6_7;
                    this.struct17_0.byte_2 = item.byte_4;
                    this.struct17_0.byte_1 = item.byte_5;
                    this.struct17_0.byte_3 = item.byte_0;
                    this.struct17_0.byte_4 = item.byte_1;
                    this.struct17_0.byte_5 = item.byte_20;
                    this.struct17_0.long_0 = item.long_3;
                    if (num3 == (this.class10_settings_0.int_25 + 1))
                    {
                        num3 = 0;
                        if (this.delegate48_0 != null)
                        {
                            this.delegate48_0(item);
                        }
                        if (this.delegate47_0 != null)
                        {
                            this.delegate47_0(this.struct17_0);
                        }
                        if (this.delegate50_0 != null)
                        {
                            this.delegate50_0(item);
                        }
                    }
                }
                catch (Exception exception)
                {
                    MessageBox.Show(Form.ActiveForm, exception.Message);
                    i = (int) this.long_2;
                    FileLoadingError = true;
                }
            }
            if (!FileLoadingError)
            {
                this.long_3 = this.method_76(this.long_2).long_3;
                this.struct12_0 = this.method_76(0L);
                this.method_39();
            }
        }
        catch (Exception exception2)
        {
            MessageBox.Show(Form.ActiveForm, "Error getting maxframe from log :" + exception2.ToString());
        }
        if (this.binaryReader_0 != null)
        {
            this.binaryReader_0.Close();
            this.binaryReader_0 = null;
        }
        if (this.fileStream_0 != null)
        {
            this.fileStream_0.Close();
            this.fileStream_0.Dispose();
            this.fileStream_0 = null;
        }
        /*if (this.int_1 > 1)   //load markers
        {
            this.method_83(this.string_2);
        }*/
        //REMOVE LOADING FILESTREAM HERE
        if (File.Exists(this.string_2)) File.Delete(this.string_2);
        this.method_4(DataloggingState.Disconnected);
    }

    public void method_69(long long_5)
    {
        this.struct12_0 = this.method_76(long_5);
        this.long_1 = long_5;
        if (this.class18_0.method_30_HasFileLoadedInBMTune())
        {
            this.method_40_SendBytes_Delegate();
        }
    }

    public byte method_7()
    {
        byte num = 0;
        if (!FakeDatalog)
        {
            //if (this.method_12(1)) num = (byte)this.serialPort_0.ReadByte();
            //num = (byte)this.serialPort_0.ReadByte();
            try
            {
                num = (byte)this.serialPort_0.ReadByte();    //here for datalog disconnected issue with bluetooth
            }
            catch (Exception exception)
            {
                throw exception;
            }
        }
        return num;
    }

    //Datalog Play Button Clic
    public void method_70()
    {
        if ((this.thread_0 == null) || (this.thread_0.ThreadState == System.Threading.ThreadState.Stopped))
        {
            this.thread_0 = new Thread(new ThreadStart(this.method_81));
            this.thread_0.Name = "Log Player";
            this.thread_0.Priority = ThreadPriority.AboveNormal;
            this.thread_0.Start();
        }
        if (this.thread_0.ThreadState == System.Threading.ThreadState.Suspended)
        {
            this.thread_0.Resume();
        }
        this.bool_8 = false;
        this.method_4(DataloggingState.PlayingF);
        GC.Collect(3, GCCollectionMode.Optimized);
    }

    public void method_71()
    {
        this.long_1 = 0L;
        this.int_2 = 0;
        this.struct12_0 = this.method_76(0L);
        this.method_4(DataloggingState.Stop);
        this.bool_8 = false;
        if (this.class18_0.method_30_HasFileLoadedInBMTune())
        {
            this.method_39();
        }
        if (this.thread_0 != null)
        {
            if (this.thread_0.IsAlive)
            {
                if (this.thread_0.ThreadState == System.Threading.ThreadState.Suspended)
                {
                    this.thread_0.Resume();
                }
                this.thread_0.Abort();
                this.thread_0 = null;
            }
            this.thread_0 = null;
        }
        GC.Collect(3, GCCollectionMode.Forced);
    }

    public void method_72()
    {
        if ((this.thread_0 != null) && this.thread_0.IsAlive)
        {
            this.thread_0.Suspend();
            this.method_4(DataloggingState.Pause);
        }
        GC.Collect(3, GCCollectionMode.Forced);
    }

    public void method_73()
    {
        this.bool_7 = !this.bool_7;
    }

    public bool method_73_0()
    {
        return this.bool_7;
    }

    public void method_73_1()
    {
        this.bool_71 = !this.bool_71;
        this.bool_7 = false;
        this.bool_72 = false;
    }

    public void method_73_2()
    {
        this.bool_7 = false;
        this.bool_71 = false;
        this.bool_72 = !this.bool_72;
    }

    public void method_74()
    {
        if (this.long_1 != 0L)
        {
            this.bool_8 = !this.bool_8;
            if (this.thread_0 == null)
            {
                this.thread_0 = new Thread(new ThreadStart(this.method_81));
                this.thread_0.Name = "Log Player";
                this.thread_0.Priority = ThreadPriority.AboveNormal;
                this.thread_0.Start();
            }
            if (this.thread_0.ThreadState == System.Threading.ThreadState.Suspended)
            {
                this.thread_0.Resume();
            }
            this.method_4(DataloggingState.PlayingR);
        }
    }

    public void method_75()
    {
        string str = this.string_2;
        if ((this.thread_0 != null) && this.thread_0.IsAlive)
        {
            this.method_71();
        }
        this.string_2 = null;
        if (this.binaryReader_0 != null)
        {
            this.binaryReader_0.Close();
            this.binaryReader_0 = null;
        }
        if (this.fileStream_0 != null)
        {
            this.fileStream_0.Close();
            this.fileStream_0.Dispose();
            this.fileStream_0 = null;
        }
        /*if (!string.IsNullOrEmpty(str))   //save markers
        {
            this.method_82(str);
        }*/
        //REMOVE LOADING FILESTREAM HERE
        if (File.Exists(this.string_2)) File.Delete(this.string_2);
        this.list_1.Clear();
        if (this.list_0 != null) this.list_0 = null;
        this.bool_6 = false;
        if (this.delegate53_0 != null)
        {
            this.delegate53_0(0L, string.Empty);
        }
        this.method_4(DataloggingState.Disconnected);
        this.long_4 = 0L;
        this.long_3 = 0L;
        this.long_2 = 0L;
        this.int_1 = 0;
        this.FrameCounts = 0L;
        GC.Collect(1, GCCollectionMode.Forced);
    }

    private Struct12 method_76(long long_5)
    {
        if ((this.list_0 == null) || (long_5 > this.long_2))
        {
            return new Struct12();
        }
        if (long_5 > this.long_2)
        {
            long_5 = this.long_2;
        }
        this.struct12_0 = this.list_0[(int) long_5];
        if (this.class10_settings_0.bool_23 && (this.class18_0.GetByteAt(this.class18_0.class13_u_0.long_50) == 0))
        {
            if (this.struct12_0.byte_3 != 0)
            {
                int num = (int) Math.Round((double) ((((this.struct12_0.byte_3 / 2) + 0x18) * 7.221) - 59.0), 0);
                if (this.class10_settings_0.int_6 != num)
                {
                    this.class10_settings_0.int_6 = num;
                }
            }
            else
            {
                this.class10_settings_0.int_6 = 0x3f2;
            }
        }
        this.struct23_0.bool_0 = this.class18_0.method_258(this.struct12_0.byte_6_E8, 3);
        this.struct23_0.bool_1 = this.class18_0.method_258(this.struct12_0.byte_35_E39, 5);
        if (this.struct12_0.byte_9_E11 > (this.class10_settings_0.method_11_GetMAP_ColumnsNumber() - 1))
        {
            this.struct12_0.byte_9_E11 = (byte) (this.class10_settings_0.method_11_GetMAP_ColumnsNumber() - 1);
        }
        if (this.struct23_0.bool_0)
        {
            this.struct23_0.struct24_0.int_0 = this.struct12_0.byte_8_E10;
            this.struct23_0.float_0 = ((float) this.struct12_0.byte_45_E47) / 255f;
        }
        else
        {
            this.struct23_0.struct24_0.int_0 = this.struct12_0.byte_7_E9;
            this.struct23_0.float_0 = ((float) this.struct12_0.byte_44_E46) / 255f;
        }
        this.struct23_0.float_1 = ((float) this.struct12_0.byte_46_E48) / 255f;
        this.struct23_0.struct24_0.int_1 = this.struct12_0.byte_9_E11;
        this.struct23_0.struct24_1 = this.struct23_0.struct24_0;
        if (this.struct23_0.float_0 >= 0.5)
        {
            this.struct23_0.struct24_1.int_0++;
        }
        if (this.struct23_0.float_1 >= 0.5)
        {
            this.struct23_0.struct24_1.int_1++;
        }
        this.struct12_0.struct24_0 = this.struct23_0.struct24_1;
        this.struct23_0.struct24_2 = this.struct23_0.struct24_0;
        this.struct23_0.method_0(this.struct23_0.struct24_0, ref this.class10_settings_0);
        this.struct23_0.byte_0 = this.struct12_0.byte_43;
        bool flag = this.class18_0.method_258(this.struct12_0.byte_6_E8, 4) || this.class18_0.method_258(this.struct12_0.byte_6_E8, 5);
        this.struct17_0.bool_0 = this.struct23_0.bool_0;
        this.struct12_0.bool_11 = this.struct23_0.bool_0;
        this.struct17_0.bool_1 = this.struct23_0.bool_1;
        if (this.class10_settings_0.bool_48)
        {
            this.struct17_0.bool_2 = flag;
        }
        else
        {
            this.struct17_0.bool_2 = false;
        }
        this.struct12_0.bool_12 = this.struct23_0.bool_1;
        this.struct17_0.struct24_0.int_0 = this.struct23_0.struct24_0.int_0;
        this.struct17_0.struct24_0.int_1 = this.struct23_0.struct24_0.int_1;
        this.struct17_0.float_0 = this.struct23_0.float_0;
        this.struct17_0.float_1 = this.struct23_0.float_1;
        this.struct17_0.method_1(this.struct17_0.struct24_0, ref this.class18_0);
        this.struct17_0.struct24_1 = this.struct23_0.struct24_1;
        this.struct17_0.byte_0 = this.struct12_0.byte_43;
        this.struct17_0.long_1 = this.struct12_0.ushort_0_E6_7;
        this.struct17_0.byte_2 = this.struct12_0.byte_4;
        this.struct17_0.byte_1 = this.struct12_0.byte_5;
        this.struct17_0.byte_3 = this.struct12_0.byte_0;
        this.struct17_0.byte_4 = this.struct12_0.byte_1;
        this.struct17_0.byte_5 = this.struct12_0.byte_20;
        this.struct17_0.long_0 = this.struct12_0.long_3;
        if (this.delegate47_0 != null)
        {
            this.delegate47_0(this.struct17_0);
        }
        if (this.delegate50_0 != null)
        {
            this.delegate50_0(this.struct12_0);
        }
        this.struct20_0.byte_0 = this.struct12_0.byte_10_E12;
        this.struct20_0.byte_1 = this.struct12_0.byte_11_E13;
        this.struct20_0.byte_2 = this.struct12_0.byte_12_E14;
        this.struct20_0.byte_3 = this.struct12_0.byte_13_E15;
        if (((this.struct20_0.byte_0 != 0) || (this.struct20_0.byte_1 != 0)) || ((this.struct20_0.byte_2 != 0) || (this.struct20_0.byte_3 != 0)))
        {
            this.struct12_0.byte_19 = 1;
        }
        else
        {
            this.struct12_0.byte_19 = 0;
        }
        return this.struct12_0;
    }

    public float method_77(SensorsX sensors_0, int int_3)
    {
        float num = 0f;
        if (int_3 < 0 || int_3 > this.list_0.Count - 1)
        {
            return num;
        }

        switch (sensors_0)
        {
            case SensorsX.rpmX:
                return (float) this.class18_0.method_218((long) this.list_0[int_3].ushort_0_E6_7);

            case SensorsX.vssX:
                return (float) this.class18_0.method_197(this.list_0[int_3].byte_14_E16);

            case SensorsX.gearX:
                return (float) this.list_0[int_3].byte_20;

            case SensorsX.mapX:
                return (float) this.class18_0.method_206(this.list_0[int_3].byte_4);

            case SensorsX.boostX:
                if (this.class18_0.method_206(this.list_0[int_3].byte_4) <= this.class10_settings_0.int_6)
                {
                    return 0f;
                }
                return this.class18_0.method_193(this.list_0[int_3].byte_4);

            case SensorsX.paX:
                return (float) ((int) Math.Round((double) ((((this.list_0[int_3].byte_3 / 2) + 0x18) * 7.221) - 59.0), 0));

            case SensorsX.tpsX:
                return (float) this.class18_0.method_198(this.list_0[int_3].byte_5);

            case SensorsX.tpsV:
                return (float) this.class18_0.method_196(this.list_0[int_3].byte_5);

            case SensorsX.injDur:
                return (float) Math.Round((double) this.class18_0.method_224(this.list_0[int_3].ushort_1_E17_18), 2);

            case SensorsX.injDuty:
                return (float) Math.Round((double) this.class18_0.method_225(this.list_0[int_3].ushort_1_E17_18, this.class18_0.method_218((long) this.list_0[int_3].ushort_0_E6_7), 0), 0);

            case SensorsX.injFV:
                return (float) this.class18_0.method_223(this.list_0[int_3].ushort_1_E17_18);

            case SensorsX.ignFnl:
                return this.class18_0.method_188(this.list_0[int_3].byte_15_E19);

            case SensorsX.ignTbl:
                return this.class18_0.method_188(this.list_0[int_3].byte_16_E20);

            case SensorsX.ectX:
                return (float) this.class18_0.method_191(this.list_0[int_3].byte_0);

            case SensorsX.iatX:
                return (float) this.class18_0.method_191(this.list_0[int_3].byte_1);

            case SensorsX.afr:
                return (float) this.class18_0.method_200(this.list_0[int_3].byte_43);

            case SensorsX.ecuO2V:
                return (float) this.class18_0.method_196(this.list_0[int_3].byte_2);

            case SensorsX.wbO2V:
                return (float) this.class18_0.method_200(this.list_0[int_3].byte_43);

            case SensorsX.batV:
                return (float) this.class18_0.method_208(this.list_0[int_3].byte_27_E25);

            case SensorsX.eldV:
                return (float) this.class18_0.method_196(this.list_0[int_3].byte_24_E24);

            case SensorsX.knockV:
            case SensorsX.mil:
            case SensorsX.frame:
            case SensorsX.interval:
            case SensorsX.loadType:
            case SensorsX.overheatActive:
            case SensorsX.test0:
                return num;

            case SensorsX.mapV:
                return (float) this.class18_0.method_196(this.list_0[int_3].byte_4);

            case SensorsX.duration:
                //if (this.method_34() && !this.method_63()) this.long_2 = this.FrameCounts;
                return (float) this.list_0[int_3].long_3;

            case SensorsX.ectFc:
                return (float) this.class18_0.method_205(this.list_0[int_3].byte_28_E26, Enum6.const_1);

            case SensorsX.iatFc:
                return (float) this.class18_0.method_203(this.list_0[int_3].long_2_E31_32, Enum6.const_0);

            case SensorsX.o2Short:
                return (float) this.class18_0.method_203(this.list_0[int_3].long_0_E27_28, Enum6.const_0);

            case SensorsX.o2Long:
                return (float) this.class18_0.method_203(this.list_0[int_3].long_1_E29_30, Enum6.const_0);

            case SensorsX.veFc:
                return (float) this.class18_0.method_205(this.list_0[int_3].byte_29_E33, Enum6.const_1);

            case SensorsX.ectIc:
                return this.class18_0.method_189(this.list_0[int_3].byte_31_E35);

            case SensorsX.iatIc:
                return this.class18_0.method_189(this.list_0[int_3].byte_30_E34);

            case SensorsX.gearIc:
                return this.class18_0.method_189(this.list_0[int_3].byte_32_E36);

            case SensorsX.gearFc:
                return (float) this.list_0[int_3].byte_29_E33;

            case SensorsX.postFuel:
                return (float) this.class18_0.method_260(this.list_0[int_3].byte_6_E8, 0, false);

            case SensorsX.outIab:
                return (float) this.class18_0.method_260(this.list_0[int_3].byte_22_E22, 2, false);

            case SensorsX.outVtsX:
                return (float) this.class18_0.method_260(this.list_0[int_3].byte_23_E23, 7, false);

            case SensorsX.outVtsM:
                return (float) this.class18_0.method_260(this.list_0[int_3].byte_6_E8, 3, false);

            case SensorsX.outAc:
                return (float) this.class18_0.method_260(this.list_0[int_3].byte_22_E22, 7, false);

            case SensorsX.outO2h:
                return (float) this.class18_0.method_260(this.list_0[int_3].byte_23_E23, 6, false);

            case SensorsX.outMil:
                return (float) this.class18_0.method_260(this.list_0[int_3].byte_23_E23, 5, false);

            case SensorsX.outPurge:
                return (float) this.class18_0.method_260(this.list_0[int_3].byte_22_E22, 6, false);

            case SensorsX.outFanc:
                return (float) this.class18_0.method_260(this.list_0[int_3].byte_22_E22, 4, false);

            case SensorsX.outFpump:
                return (float) this.class18_0.method_260(this.list_0[int_3].byte_22_E22, 0, false);

            case SensorsX.outFuelCut:
                if (!this.class18_0.method_258(this.list_0[int_3].byte_6_E8, 4) && !this.class18_0.method_258(this.list_0[int_3].byte_6_E8, 5))
                {
                    return 0f;
                }
                return 1f;

            case SensorsX.outAltCtrl:
                return (float) this.class18_0.method_260(this.list_0[int_3].byte_22_E22, 5, false);

            case SensorsX.inPsp:
                return (float) this.class18_0.method_260(this.list_0[int_3].byte_21_E21, 7, false);

            case SensorsX.inSCC:
                return (float) this.class18_0.method_260(this.list_0[int_3].byte_21_E21, 5, false);

            case SensorsX.inAccs:
                return (float) this.class18_0.method_260(this.list_0[int_3].byte_21_E21, 2, false);

            case SensorsX.inBksw:
                return (float) this.class18_0.method_260(this.list_0[int_3].byte_21_E21, 1, false);

            case SensorsX.inVtp:
                return (float) this.class18_0.method_260(this.list_0[int_3].byte_21_E21, 3, false);

            case SensorsX.inVtsFeedBack:
                return (float) this.class18_0.method_260(this.list_0[int_3].byte_21_E21, 6, false);

            case SensorsX.inParkN:
                return (float) this.class18_0.method_260(this.list_0[int_3].byte_21_E21, 0, false);

            case SensorsX.inStartS:
                return (float) this.class18_0.method_260(this.list_0[int_3].byte_21_E21, 4, false);

            case SensorsX.inAtShift1:
                return (float) this.class18_0.method_260(this.list_0[int_3].byte_6_E8, 6, false);

            case SensorsX.inAtShift2:
                return (float) this.class18_0.method_260(this.list_0[int_3].byte_6_E8, 7, false);

            case SensorsX.secMaps:
                return (float) this.class18_0.method_260(this.list_0[int_3].byte_35_E39, 5, false);

            case SensorsX.ftlInput:
                return (float) this.class18_0.method_260(this.list_0[int_3].byte_34_E38, 0, false);

            case SensorsX.ftlActive:
                return (float) this.class18_0.method_260(this.list_0[int_3].byte_35_E39, 0, false);

            case SensorsX.ftsClutchInput:
                return (float) this.class18_0.method_260(this.list_0[int_3].byte_34_E38, 1, false);

            case SensorsX.ftsActive:
                return (float) this.class18_0.method_260(this.list_0[int_3].byte_35_E39, 2, false);

            case SensorsX.boostcutActive:
                return (float) this.class18_0.method_260(this.list_0[int_3].byte_35_E39, 3, false);

            case SensorsX.antilagActive:
                return (float) this.class18_0.method_260(this.list_0[int_3].byte_35_E39, 1, false);

            case SensorsX.ignitionCut:
                return (float) this.class18_0.method_260(this.list_0[int_3].byte_6_E8, 2, false);

            case SensorsX.sccChecker:
                return (float) this.class18_0.method_260(this.list_0[int_3].byte_6_E8, 1, false);

            case SensorsX.ebcInput:
                return (float) this.class18_0.method_260(this.list_0[int_3].byte_34_E38, 2, false);

            case SensorsX.ebcHiInput:
                return (float) this.class18_0.method_260(this.list_0[int_3].byte_34_E38, 3, false);

            case SensorsX.ebcActive:
                return (float) this.class18_0.method_260(this.list_0[int_3].byte_35_E39, 4, false);

            case SensorsX.ebcBaseDuty:
                return (float) this.class18_0.method_207(this.list_0[int_3].byte_37_E40);

            case SensorsX.ebcDutyX:
                return (float) this.class18_0.method_207(this.list_0[int_3].byte_38_E41);

            case SensorsX.ebcTarget:
                return (float) this.class18_0.method_206(this.list_0[int_3].byte_39_E42);

            case SensorsX.ebcCurrent:
                return (float) this.class18_0.method_206(this.list_0[int_3].byte_4);

            case SensorsX.gpo1_in:
                return (float) this.class18_0.method_260(this.list_0[int_3].byte_34_E38, 4, false);

            case SensorsX.gpo1_out:
                return (float) this.class18_0.method_260(this.list_0[int_3].byte_36_E43, 0, false);

            case SensorsX.gpo2_in:
                return (float) this.class18_0.method_260(this.list_0[int_3].byte_34_E38, 5, false);

            case SensorsX.gpo2_out:
                return (float) this.class18_0.method_260(this.list_0[int_3].byte_36_E43, 1, false);

            case SensorsX.gpo3_in:
                return (float) this.class18_0.method_260(this.list_0[int_3].byte_34_E38, 6, false);

            case SensorsX.gpo3_out:
                return (float) this.class18_0.method_260(this.list_0[int_3].byte_36_E43, 2, false);

            case SensorsX.fanCtrl:
                return (float) this.class18_0.method_260(this.list_0[int_3].byte_35_E39, 6, false);

            case SensorsX.bstStage2:
                return (float) this.class18_0.method_260(this.list_0[int_3].byte_36_E43, 3, false);

            case SensorsX.bstStage3:
                return (float) this.class18_0.method_260(this.list_0[int_3].byte_36_E43, 4, false);

            case SensorsX.bstStage4:
                return (float) this.class18_0.method_260(this.list_0[int_3].byte_36_E43, 5, false);

            case SensorsX.bstActive:
                return (float) this.class18_0.method_260(this.list_0[int_3].byte_35_E39, 7, false);

            case SensorsX.bstInput:
                return (float) this.class18_0.method_260(this.list_0[int_3].byte_34_E38, 7, false);

            case SensorsX.analog1:
                return this.class18_0.method_201(AnalogInputs.analog1, this.list_0[int_3].byte_40);

            case SensorsX.analog2:
                return this.class18_0.method_201(AnalogInputs.analog2, this.list_0[int_3].byte_41);

            case SensorsX.analog3:
                return this.class18_0.method_201(AnalogInputs.analog3, this.list_0[int_3].byte_42);

            case SensorsX.iacvDuty:
            {
                float num3 = ((float) this.list_0[int_3].ushort_2_E49_50) / 32768f;
                return ((num3 * 100f) - 100f);
            }
            case SensorsX.leanProtection:
                return (float) this.class18_0.method_260(this.list_0[int_3].byte_36_E43, 7, false);

            case SensorsX.deltaRpm1:
                return (float) this.list_0[int_3].long_6;

            case SensorsX.deltaVss:
                return (float) this.list_0[int_3].byte_47;

            case SensorsX.deltaRpm2:
                return (float) this.list_0[int_3].long_7;
        }
        return num;
    }

    public string method_79(SensorsX sensors_0, int int_3)
    {
        float num = 0f;
        if (sensors_0 == SensorsX.mapX)
        {
            num = this.class18_0.method_193(this.list_0[int_3].byte_4);
        }
        else
        {
            num = this.method_77(sensors_0, int_3);
        }
        return num.ToString();
    }

    public float[] method_80(SensorsX sensors_0)
    {
        float[] numArray = new float[] { -1f, 2f };
        switch (sensors_0)
        {
            case SensorsX.rpmX:
                numArray[0] = 0f;
                numArray[1] = 10000f;
                return numArray;

            case SensorsX.vssX:
                numArray[0] = 0f;
                numArray[1] = 255f;
                return numArray;

            case SensorsX.gearX:
                numArray[0] = -1f;
                numArray[1] = 6f;
                return numArray;

            case SensorsX.mapX:
                numArray[0] = this.class18_0.method_206(0);
                numArray[1] = this.class18_0.method_206(0xff);
                return numArray;

            case SensorsX.boostX:
                numArray[0] = this.class18_0.method_245(950);
                numArray[1] = this.class18_0.method_245(this.class18_0.method_206(0xff));
                return numArray;

            case SensorsX.paX:
                numArray[0] = 0f;
                numArray[1] = 1100f;
                return numArray;

            case SensorsX.tpsX:
                numArray[0] = -5f;
                numArray[1] = 115f;
                return numArray;

            case SensorsX.tpsV:
                numArray[0] = 0f;
                numArray[1] = 5f;
                return numArray;

            case SensorsX.injDur:
                numArray[0] = 0f;
                numArray[1] = 20f;
                return numArray;

            case SensorsX.injDuty:
                numArray[0] = 0f;
                numArray[1] = 130f;
                return numArray;

            case SensorsX.injFV:
                numArray[0] = 0f;
                numArray[1] = 2000f;
                return numArray;

            case SensorsX.ignFnl:
                numArray[0] = -6f;
                numArray[1] = 60f;
                return numArray;

            case SensorsX.ignTbl:
                numArray[0] = -6f;
                numArray[1] = 60f;
                return numArray;

            case SensorsX.ectX:
                numArray[0] = (float) this.class18_0.method_191(0xff);
                numArray[1] = (float) this.class18_0.method_191(0);
                return numArray;

            case SensorsX.iatX:
                numArray[0] = (float) this.class18_0.method_191(0xff);
                numArray[1] = (float) this.class18_0.method_191(0);
                return numArray;

            case SensorsX.afr:
                numArray[0] = (float) this.class18_0.method_200(0);
                numArray[1] = (float) this.class18_0.method_200(0xff);
                return numArray;

            case SensorsX.ecuO2V:
                numArray[0] = 0f;
                numArray[1] = 5f;
                return numArray;

            case SensorsX.wbO2V:
                numArray[0] = 0f;
                numArray[1] = 5f;
                return numArray;

            case SensorsX.batV:
                numArray[0] = 0f;
                numArray[1] = 15f;
                return numArray;

            case SensorsX.eldV:
                numArray[0] = 0f;
                numArray[1] = 5f;
                return numArray;

            case SensorsX.knockV:
                numArray[0] = 0f;
                numArray[1] = 5f;
                return numArray;

            case SensorsX.mapV:
                numArray[0] = 0f;
                numArray[1] = 5f;
                return numArray;

            case SensorsX.mil:
            case SensorsX.frame:
            case SensorsX.duration:
            case SensorsX.interval:
            case SensorsX.loadType:
            case SensorsX.overheatActive:
            case SensorsX.test0:
                return numArray;

            case SensorsX.ectFc:
                if (this.class10_settings_0.correctionUnits_0 != CorrectionUnits.multi)
                {
                    numArray[0] = -100f;
                    numArray[1] = 100f;
                    return numArray;
                }
                numArray[0] = 0f;
                numArray[1] = 2f;
                return numArray;

            case SensorsX.iatFc:
                if (this.class10_settings_0.correctionUnits_0 != CorrectionUnits.multi)
                {
                    numArray[0] = -100f;
                    numArray[1] = 100f;
                    return numArray;
                }
                numArray[0] = 0f;
                numArray[1] = 2f;
                return numArray;

            case SensorsX.o2Short:
                if (this.class10_settings_0.correctionUnits_0 != CorrectionUnits.multi)
                {
                    numArray[0] = -100f;
                    numArray[1] = 100f;
                    return numArray;
                }
                numArray[0] = 0f;
                numArray[1] = 2f;
                return numArray;

            case SensorsX.o2Long:
                if (this.class10_settings_0.correctionUnits_0 != CorrectionUnits.multi)
                {
                    numArray[0] = -100f;
                    numArray[1] = 100f;
                    return numArray;
                }
                numArray[0] = 0f;
                numArray[1] = 2f;
                return numArray;

            case SensorsX.veFc:
                if (this.class10_settings_0.correctionUnits_0 != CorrectionUnits.multi)
                {
                    numArray[0] = -100f;
                    numArray[1] = 100f;
                    return numArray;
                }
                numArray[0] = 0f;
                numArray[1] = 2f;
                return numArray;

            case SensorsX.ectIc:
                numArray[0] = -30f;
                numArray[1] = 30f;
                return numArray;

            case SensorsX.iatIc:
                numArray[0] = -30f;
                numArray[1] = 30f;
                return numArray;

            case SensorsX.gearIc:
                numArray[0] = -30f;
                numArray[1] = 30f;
                return numArray;

            case SensorsX.gearFc:
                if (this.class10_settings_0.correctionUnits_0 != CorrectionUnits.multi)
                {
                    numArray[0] = -100f;
                    numArray[1] = 100f;
                    return numArray;
                }
                numArray[0] = 0f;
                numArray[1] = 2f;
                return numArray;

            case SensorsX.postFuel:
                numArray[0] = -1f;
                numArray[1] = 2f;
                return numArray;

            case SensorsX.outIab:
                numArray[0] = -1f;
                numArray[1] = 2f;
                return numArray;

            case SensorsX.outVtsX:
                numArray[0] = -1f;
                numArray[1] = 2f;
                return numArray;

            case SensorsX.outVtsM:
                numArray[0] = -1f;
                numArray[1] = 2f;
                return numArray;

            case SensorsX.outAc:
                numArray[0] = -1f;
                numArray[1] = 2f;
                return numArray;

            case SensorsX.outO2h:
                numArray[0] = -1f;
                numArray[1] = 2f;
                return numArray;

            case SensorsX.outMil:
                numArray[0] = -1f;
                numArray[1] = 2f;
                return numArray;

            case SensorsX.outPurge:
                numArray[0] = -1f;
                numArray[1] = 2f;
                return numArray;

            case SensorsX.outFanc:
                numArray[0] = -1f;
                numArray[1] = 2f;
                return numArray;

            case SensorsX.outFpump:
                numArray[0] = -1f;
                numArray[1] = 2f;
                return numArray;

            case SensorsX.outFuelCut:
                numArray[0] = -1f;
                numArray[1] = 2f;
                return numArray;

            case SensorsX.outAltCtrl:
                numArray[0] = -1f;
                numArray[1] = 2f;
                return numArray;

            case SensorsX.inPsp:
                numArray[0] = -1f;
                numArray[1] = 2f;
                return numArray;

            case SensorsX.inSCC:
                numArray[0] = -1f;
                numArray[1] = 2f;
                return numArray;

            case SensorsX.inAccs:
                numArray[0] = -1f;
                numArray[1] = 2f;
                return numArray;

            case SensorsX.inBksw:
                numArray[0] = -1f;
                numArray[1] = 2f;
                return numArray;

            case SensorsX.inVtp:
                numArray[0] = -1f;
                numArray[1] = 2f;
                return numArray;

            case SensorsX.inVtsFeedBack:
                numArray[0] = -1f;
                numArray[1] = 2f;
                return numArray;

            case SensorsX.inParkN:
                numArray[0] = -1f;
                numArray[1] = 2f;
                return numArray;

            case SensorsX.inStartS:
                numArray[0] = -1f;
                numArray[1] = 2f;
                return numArray;

            case SensorsX.inAtShift1:
                numArray[0] = -1f;
                numArray[1] = 2f;
                return numArray;

            case SensorsX.inAtShift2:
                numArray[0] = -1f;
                numArray[1] = 2f;
                return numArray;

            case SensorsX.secMaps:
                numArray[0] = -1f;
                numArray[1] = 2f;
                return numArray;

            case SensorsX.ftlInput:
                numArray[0] = -1f;
                numArray[1] = 2f;
                return numArray;

            case SensorsX.ftlActive:
                numArray[0] = -1f;
                numArray[1] = 2f;
                return numArray;

            case SensorsX.ftsClutchInput:
                numArray[0] = -1f;
                numArray[1] = 2f;
                return numArray;

            case SensorsX.ftsActive:
                numArray[0] = -1f;
                numArray[1] = 2f;
                return numArray;

            case SensorsX.boostcutActive:
                numArray[0] = -1f;
                numArray[1] = 2f;
                return numArray;

            case SensorsX.antilagActive:
                numArray[0] = -1f;
                numArray[1] = 2f;
                return numArray;

            case SensorsX.ignitionCut:
                numArray[0] = -1f;
                numArray[1] = 2f;
                return numArray;

            case SensorsX.sccChecker:
                numArray[0] = -1f;
                numArray[1] = 2f;
                return numArray;

            case SensorsX.ebcInput:
                numArray[0] = -1f;
                numArray[1] = 2f;
                return numArray;

            case SensorsX.ebcHiInput:
                numArray[0] = -1f;
                numArray[1] = 2f;
                return numArray;

            case SensorsX.ebcActive:
                numArray[0] = -1f;
                numArray[1] = 2f;
                return numArray;

            case SensorsX.ebcBaseDuty:
                numArray[0] = 0f;
                numArray[1] = 100f;
                return numArray;

            case SensorsX.ebcDutyX:
                numArray[0] = 0f;
                numArray[1] = 100f;
                return numArray;

            case SensorsX.ebcTarget:
                numArray[0] = this.class18_0.method_206(0);
                numArray[1] = this.class18_0.method_206(0xff);
                return numArray;

            case SensorsX.ebcCurrent:
                numArray[0] = this.class18_0.method_206(0);
                numArray[1] = this.class18_0.method_206(0xff);
                return numArray;

            case SensorsX.gpo1_in:
                numArray[0] = -1f;
                numArray[1] = 2f;
                return numArray;

            case SensorsX.gpo1_out:
                numArray[0] = -1f;
                numArray[1] = 2f;
                return numArray;

            case SensorsX.gpo2_in:
                numArray[0] = -1f;
                numArray[1] = 2f;
                return numArray;

            case SensorsX.gpo2_out:
                numArray[0] = -1f;
                numArray[1] = 2f;
                return numArray;

            case SensorsX.gpo3_in:
                numArray[0] = -1f;
                numArray[1] = 2f;
                return numArray;

            case SensorsX.gpo3_out:
                numArray[0] = -1f;
                numArray[1] = 2f;
                return numArray;

            case SensorsX.fanCtrl:
                numArray[0] = -1f;
                numArray[1] = 2f;
                return numArray;

            case SensorsX.bstStage2:
                numArray[0] = -1f;
                numArray[1] = 2f;
                return numArray;

            case SensorsX.bstStage3:
                numArray[0] = -1f;
                numArray[1] = 2f;
                return numArray;

            case SensorsX.bstStage4:
                numArray[0] = -1f;
                numArray[1] = 2f;
                return numArray;

            case SensorsX.bstActive:
                numArray[0] = -1f;
                numArray[1] = 2f;
                return numArray;

            case SensorsX.bstInput:
                numArray[0] = -1f;
                numArray[1] = 2f;
                return numArray;

            case SensorsX.analog1:
                numArray[0] = this.class18_0.method_201(AnalogInputs.analog1, 0);
                numArray[1] = this.class18_0.method_201(AnalogInputs.analog1, 0xff);
                return numArray;

            case SensorsX.analog2:
                numArray[0] = this.class18_0.method_201(AnalogInputs.analog2, 0);
                numArray[1] = this.class18_0.method_201(AnalogInputs.analog2, 0xff);
                return numArray;

            case SensorsX.analog3:
                numArray[0] = this.class18_0.method_201(AnalogInputs.analog3, 0);
                numArray[1] = this.class18_0.method_201(AnalogInputs.analog3, 0xff);
                return numArray;

            case SensorsX.iacvDuty:
                numArray[0] = -100f;
                numArray[1] = 100f;
                return numArray;

            case SensorsX.leanProtection:
                numArray[0] = -1f;
                numArray[1] = 2f;
                return numArray;

            case SensorsX.deltaRpm1:
                numArray[0] = 0f;
                numArray[1] = 50f;
                return numArray;

            case SensorsX.deltaVss:
                numArray[0] = 0f;
                numArray[1] = 40f;
                return numArray;

            case SensorsX.deltaRpm2:
                numArray[0] = 0f;
                numArray[1] = 50f;
                return numArray;

            case SensorsX.egt_cht1:
                numArray[0] = 500f;
                numArray[1] = 2000f;
                return numArray;

            case SensorsX.egt_cht2:
                numArray[0] = 500f;
                numArray[1] = 2000f;
                return numArray;

            case SensorsX.egt_cht3:
                numArray[0] = 500f;
                numArray[1] = 2000f;
                return numArray;

            case SensorsX.egt_cht4:
                numArray[0] = 500f;
                numArray[1] = 2000f;
                return numArray;

            case SensorsX.egt_chtAvg:
                numArray[0] = 500f;
                numArray[1] = 2000f;
                return numArray;

            case SensorsX.backPres:
                numArray[0] = 0f;
                numArray[1] = 45f;
                return numArray;

            case SensorsX.fuelPres:
                numArray[0] = 0f;
                numArray[1] = 150f;
                return numArray;

            case SensorsX.iat2:
                numArray[0] = 0f;
                numArray[1] = 255f;
                return numArray;

            case SensorsX.accelTime:
                numArray[0] = 0f;
                numArray[1] = 100f;
                return numArray;

            case SensorsX.fuelUsage:
                numArray[0] = 0f;
                numArray[1] = 100f;
                return numArray;

            case SensorsX.egrV:
                numArray[0] = 0f;
                numArray[1] = 5f;
                return numArray;

            case SensorsX.b6V:
                numArray[0] = 0f;
                numArray[1] = 5f;
                return numArray;

            case SensorsX.flexFuel:
                numArray[0] = 0f;
                numArray[1] = 100f;
                return numArray;
        }
        return numArray;
    }

    public void method_81()
    {
    Label_0005:
        if (this.bool_8)
        {
            this.long_1 -= 1L;
        }
        else
        {
            this.long_1 += 1L;
        }
        if ((this.long_1 != this.method_65()) && (this.long_1 != 0L))
        {
            this.struct12_0 = this.method_76(this.long_1);
            this.int_2++;
            if (this.int_2 >= (this.class10_settings_0.int_25 + 1))
            {
                this.int_2 = 0;
                this.method_40_SendBytes_Delegate();
            }
            if (this.bool_7)
            {
                this.stopwatch_2.Reset();
                this.stopwatch_2.Start();
                while (this.stopwatch_2.ElapsedMilliseconds < (this.struct12_0.long_4 / 2L))
                {
                    Application.DoEvents();
                }
                this.stopwatch_2.Reset();
            }
            else if (this.bool_71)
            {
                this.stopwatch_2.Reset();
                this.stopwatch_2.Start();
                while (true)
                {
                    if (this.stopwatch_2.ElapsedMilliseconds >= (this.struct12_0.long_4 * 2L))
                    {
                        this.stopwatch_2.Reset();
                        break;
                    }
                    Application.DoEvents();
                }
            }
            else if (this.bool_72)
            {
                this.stopwatch_2.Reset();
                this.stopwatch_2.Start();
                while (true)
                {
                    if (this.stopwatch_2.ElapsedMilliseconds >= (this.struct12_0.long_4 * 6L))
                    {
                        this.stopwatch_2.Reset();
                        break;
                    }
                    Application.DoEvents();
                }
            }
            else
            {
                this.stopwatch_2.Reset();
                this.stopwatch_2.Start();
                while (this.stopwatch_2.ElapsedMilliseconds < this.struct12_0.long_4)
                {
                    Application.DoEvents();
                }
                this.stopwatch_2.Reset();
            }
            goto Label_0005;
        }
        this.method_71();
    }

    /*private void method_82(string string_3)
    {
        if (this.int_1 >= 1)
        {
            try
            {
                FileStream input = new FileStream(string_3, FileMode.OpenOrCreate, FileAccess.ReadWrite);
                BinaryReader reader = new BinaryReader(input) {
                    BaseStream = { Position = 13L }
                };
                int count = reader.ReadInt32();
                reader.Close();
                reader = null;
                input.Close();
                input = null;
                input = new FileStream(string_3, FileMode.OpenOrCreate, FileAccess.Write);
                BinaryWriter writer = new BinaryWriter(input) {
                    BaseStream = { Position = 13L }
                };
                long length = 0L;
                if (count == 0)
                {
                    length = writer.BaseStream.Length;
                }
                else
                {
                    length = count;
                }
                writer.Write((int) length);
                writer.Close();
                writer = null;
                input.Close();
                input.Dispose();
                input = null;
                if (count != 0)
                {
                    input = new FileStream(string_3, FileMode.OpenOrCreate, FileAccess.Read);
                    reader = new BinaryReader(input) {
                        BaseStream = { Position = 0L }
                    };
                    byte[] buffer_0 = new byte[count];
                    reader.Read(buffer_0, 0, count);
                    reader.Close();
                    reader = null;
                    input.Close();
                    input.Dispose();
                    input = null;
                    input = new FileStream(string_3, FileMode.Truncate, FileAccess.ReadWrite);
                    writer = new BinaryWriter(input);
                    writer.Write(buffer_0, 0, buffer_0.Length);
                    writer.Close();
                    writer = null;
                }
                input = new FileStream(string_3, FileMode.Open, FileAccess.Write);
                StreamWriter writer2 = new StreamWriter(input) {
                    BaseStream = { Position = (long) ((int) length) }
                };
                foreach (Struct22 struct2 in this.list_1)
                {
                    writer2.WriteLine(struct2.int_0.ToString() + ";" + struct2.string_0);
                }
                writer2.Close();
                writer2.Dispose();
                writer2 = null;
            }
            catch (Exception exception)
            {
                MessageBox.Show(new Form {TopMost = true}, string.Concat(new object[] { "save marker errored with: ", exception.Message, Environment.NewLine, exception.StackTrace, Environment.NewLine, exception.Source, Environment.NewLine, exception.TargetSite }));
            }
        }
    }

    private void method_83(string string_3)
    {
        this.list_1.Clear();
        try
        {
            FileStream input = new FileStream(string_3, FileMode.Open, FileAccess.Read);
            BinaryReader reader = new BinaryReader(input) {
                BaseStream = { Position = 13L }
            };
            int num = reader.ReadInt32();
            reader.Close();
            reader = null;
            input.Close();
            input = null;
            if (num != 0)
            {
                input = new FileStream(string_3, FileMode.Open, FileAccess.ReadWrite);
                StreamReader reader2 = new StreamReader(input) {
                    BaseStream = { Position = (long) num }
                };
                string str = null;
                for (str = reader2.ReadLine(); (str != "") && (str != null); str = reader2.ReadLine())
                {
                    Struct22 item = new Struct22();
                    string[] strArray = str.Split(new char[] { ';' });
                    item.int_0 = int.Parse(strArray[0]);
                    item.string_0 = strArray[1];
                    this.list_1.Add(item);
                }
                reader2.Close();
                reader2 = null;
                input.Close();
                input = null;
            }
        }
        catch (Exception exception)
        {
            MessageBox.Show(new Form {TopMost = true}, "Load saved marker errored with: " + exception.Message + Environment.NewLine + exception.StackTrace);
        }
    }*/

    public bool method_86(SensorsX sensors_0)
    {
        switch (sensors_0)
        {
            case SensorsX.egt_cht1:
                return (this.class10_settings_0.int_55 != 0);

            case SensorsX.egt_cht2:
                return (this.class10_settings_0.int_56 != 0);

            case SensorsX.egt_cht3:
                return (this.class10_settings_0.int_57 != 0);

            case SensorsX.egt_cht4:
                return (this.class10_settings_0.int_58 != 0);

            case SensorsX.egt_chtAvg:
                return (this.class10_settings_0.int_59 != 0);

            case SensorsX.backPres:
                return (this.class10_settings_0.int_60 != 0);

            case SensorsX.fuelPres:
                return (this.class10_settings_0.int_61 != 0);

            case SensorsX.iat2:
                return (this.class10_settings_0.int_62 != 0);
        }
        return false;
    }

    public bool method_87(SensorsX sensors_0)
    {
        switch (sensors_0)
        {
            case SensorsX.egt_cht1:
                return (this.class10_settings_0.int_55 <= 3);

            case SensorsX.egt_cht2:
                return (this.class10_settings_0.int_56 <= 3);

            case SensorsX.egt_cht3:
                return (this.class10_settings_0.int_57 <= 3);

            case SensorsX.egt_cht4:
                return (this.class10_settings_0.int_58 <= 3);

            case SensorsX.egt_chtAvg:
                return (this.class10_settings_0.int_59 <= 3);

            case SensorsX.backPres:
                return (this.class10_settings_0.int_60 <= 3);

            case SensorsX.fuelPres:
                return (this.class10_settings_0.int_61 <= 3);

            case SensorsX.iat2:
                return (this.class10_settings_0.int_62 <= 3);
        }
        return false;
    }

    public bool method_88(AnalogInputs analogInputs_0)
    {
        switch (analogInputs_0)
        {
            case AnalogInputs.analog1:
                return (((((this.class10_settings_0.int_60 == 1) || (this.class10_settings_0.int_55 == 1)) || ((this.class10_settings_0.int_56 == 1) || (this.class10_settings_0.int_57 == 1))) || ((this.class10_settings_0.int_58 == 1) || (this.class10_settings_0.int_59 == 1))) || ((this.class10_settings_0.int_61 == 1) | (this.class10_settings_0.int_62 == 1)));

            case AnalogInputs.analog2:
                return (((((this.class10_settings_0.int_60 == 2) || (this.class10_settings_0.int_55 == 2)) || ((this.class10_settings_0.int_56 == 2) || (this.class10_settings_0.int_57 == 1))) || ((this.class10_settings_0.int_58 == 1) || (this.class10_settings_0.int_59 == 2))) || ((this.class10_settings_0.int_61 == 2) | (this.class10_settings_0.int_62 == 2)));

            case AnalogInputs.analog3:
                return (((((this.class10_settings_0.int_60 == 3) || (this.class10_settings_0.int_55 == 3)) || ((this.class10_settings_0.int_56 == 3) || (this.class10_settings_0.int_57 == 1))) || ((this.class10_settings_0.int_58 == 1) || (this.class10_settings_0.int_59 == 3))) || ((this.class10_settings_0.int_61 == 3) | (this.class10_settings_0.int_62 == 3)));
        }
        return false;
    }

    private void timer_0_Elapsed(object sender, ElapsedEventArgs e)
    {
        this.timer_0.Stop();
        if ((this.queue_0.Count > 0) && !this.backgroundWorker_1.IsBusy)
        {
            this.backgroundWorker_1.RunWorkerAsync();
        }
        else
        {
            this.timer_0.Start();
        }
    }

    private void timer_1_Elapsed(object sender, ElapsedEventArgs e)
    {
        this.timer_1.Stop();
        if (!this.class10_settings_0.IsBluetooth)
        {
            string[] portNames = SerialPort.GetPortNames();
            bool flag = false;
            for (int i = 0; i < portNames.Length; i++)
            {
                if ((this.serialPort_0 != null) && portNames[i].Contains(this.serialPort_0.PortName))
                {
                    this.timer_1.Start();
                    this.IsUSBConnected = true;
                    flag = true;
                    return;
                }
            }
            this.IsUSBConnected = false;
            if (!flag)
            {
                try
                {
                    this.serialPort_0.Close();
                    this.method_4(DataloggingState.Disconnected);
                }
                catch (Exception)
                {
                }
                try
                {
                    this.serialPort_0.Dispose();
                }
                catch (Exception)
                {
                }
                this.serialPort_0 = null;
                this.method_35(false);
                this.LogThis("USB might be disconnected!");
                this.method_20();
            }
        }
    }

    private void timer_2_Tick(object sender, EventArgs e)
    {
        this.bool_13 = true;
    }

    public delegate void Delegate45(Struct20 struct20_0);

    public delegate void Delegate46(DataloggingState dataloggingState_0, bool bool_0);

    public delegate void Delegate47(Struct17 struct17_0);

    public delegate void Delegate48(Struct12 struct12_0);

    public delegate void Delegate49(Struct23 struct23_0);

    public delegate void Delegate50(Struct12 struct12_0);

    private delegate void Delegate51();

    private delegate void Delegate52(Struct12 struct12_0);

    public delegate void Delegate53(long long_0, string string_0);

    public delegate void Delegate54(Struct12 struct12_0);

    internal enum Enum10
    {
        const_0,
        const_1
    }

    internal enum Enum9
    {
        const_0,
        const_1,
        const_2,
        const_3,
        const_4,
        const_5,
        const_6,
        const_7,
        const_8,
        const_9
    }
}

