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.Ports; using System.Runtime.CompilerServices; using System.Security.Permissions; using System.Text; using System.Timers; using System.Threading; using System.Windows.Forms; internal class Class25 { private BackgroundWorker backgroundWorker_0; private BackgroundWorker backgroundWorker_1; private BackgroundWorker backgroundWorker_2; private BackgroundWorker backgroundWorker_3; private BackgroundWorker backgroundWorker_4; private bool Emu_Connected; private bool bool_1; private bool bool_10; private bool bool_2; private bool bool_3; private bool bool_6; private bool Emu_SerialConnected; public bool Report_Error; private bool bool_9; private byte[] byte_0; private byte[] byte_1; private byte[] byte_2; private byte byte_3; public byte[] Serial_ID = new byte[8]; private byte[] byte_6 = new byte[] { 15, 0xfc, 0xce, 0x2c, 0xa3, 0x9f, 0x65, 0x99 }; private byte[] byte_7 = new byte[] { 15, 0xfc, 0xce, 0x2c, 0xa3, 0x9f, 0x65, 0x99 }; private Class10_settings class10_settings_0; private Class17 class17_0; private Class18 class18_0; private Class25 class25_0; private Class27_EmuProgress class27_EmuProgress_0; public EmulatorMoatesType emulatorMoatesType_0 = EmulatorMoatesType.demon; private EmulatorState emulatorState_0; private FrmMain frmMain_0; private int int_0; public int int_1; public int int_2; public int Vendor_ID; private Queue queue_0; private SerialPort serialPort_0; public string string_0 = ""; public string EmulatorName = ""; private System.Timers.Timer timer_0 = new System.Timers.Timer(5.0); private System.Timers.Timer timer_1 = new System.Timers.Timer(100.0); private System.Windows.Forms.Timer timer_2; public event Delegate65 delegate65_0; public event Delegate66 delegate66_0; public bool CaliEmuProgressReport = true; public bool TryingtoConnect = false; internal Class25(ref Class18 rm, ref Class10_settings cfg, ref Class17 dt, ref FrmMain frmM) //Class22 in HTS 1.92 { this.class10_settings_0 = cfg; this.class17_0 = dt; this.class18_0 = rm; this.frmMain_0 = frmM; this.timer_0.Elapsed += new ElapsedEventHandler(this.timer_0_Elapsed); this.timer_1.Elapsed += new ElapsedEventHandler(this.timer_1_Elapsed); SystemEvents.PowerModeChanged += new PowerModeChangedEventHandler(this.method_0); this.class25_0 = this; this.method_14(EmulatorState.Disconnected); } //Upload Rom private void backgroundWorker_0_DoWork(object sender, DoWorkEventArgs e) { if (this.class10_settings_0.emulatorMode_0 == EmulatorMode.Demon) { string str3 = string.Empty; byte[] buffer = new byte[8]; for (int k = 0; k < 8; k++) { buffer[k] = this.Serial_ID[k]; } this.method_22(buffer, 0, 8); this.method_22(buffer, 0, 8); for (int m = 0; m < 8; m++) { str3 = str3 + buffer[m].ToString("X2"); } } byte num7 = 0; int num8 = 0; this.byte_1 = new byte[0x105]; //Reset First Byte //this.class18_0.byte_0[0] = this.class18_0.StartByte; if (this.backgroundWorker_0.CancellationPending) { return; } long num6 = 0L; this.LogThis("Start uploading"); Label_02AF: this.DiscardBuffer(); if (num8 == this.class10_settings_0.int_21) { MessageBox.Show(Form.ActiveForm, "Uploading failed after " + this.class10_settings_0.int_21.ToString() + " tries" + Environment.NewLine + "See the debug logs for the issue", "Notification", MessageBoxButtons.OK, MessageBoxIcon.Hand); this.LogThis("Uploading failed after " + this.class10_settings_0.int_21.ToString() + " tries"); if (!this.IsEmulatorConnected(false)) { if (this.queue_0 != null) this.queue_0.Clear(); this.EmulatorDisconnect(); } } else if (num6 >= 0x8000L) { if (this.class10_settings_0.emulatorMode_0 == EmulatorMode.ROMulator) { this.byte_1 = new byte[2]; this.byte_1[0] = 0x56; this.byte_1[1] = 0x56; try { this.method_50(this.byte_1, 0, 2); this.method_52(); this.method_52(); this.method_52(); this.DiscardBuffer(); } catch (Exception exception) { this.DiscardBuffer(); if (num8 == 0) this.LogThis("Uploading error:" + Environment.NewLine + "" + exception.Message); this.IsEmulatorConnected(false); num8++; } } } else { this.backgroundWorker_0.ReportProgress((int) ((((double) num6) / 32768.0) * 100.0)); //PGMFI RTP if (this.class10_settings_0.emulatorMode_0 == EmulatorMode.PGMFI_RTP) { this.byte_1 = new byte[5]; this.byte_1[0] = 0xa4; //a4 this.byte_1[1] = 0; //0 this.byte_1[2] = this.class18_0.GetByteAt(num6); //Get 1byte this.byte_1[3] = this.class18_0.method_148(0x8000L + num6); //MSB this.byte_1[4] = this.class18_0.method_147(0x8000L + num6); //LSB if (this.byte_0[(int)((IntPtr)num6)] == this.class18_0.GetByteAt(num6)) { num6 += 1L; } else { this.byte_1[1] = this.method_46(this.byte_1, 0, 5); try { this.method_50(this.byte_1, 0, 5); num7 = this.method_52(); this.DiscardBuffer(); if (num7 == 0) { num6 += 1L; num8 = 0; } else { if (!this.IsEmulatorConnected(false) && num8 == 0) this.LogThis("Checksum error @" + string.Format("{0:X2}", num6) + "" + Environment.NewLine + "Reply is: " + string.Format("{0:X2}", num7) + " (Expected: " + string.Format("{0:X2}", 0) + ")"); num8++; } } catch (Exception exception) { this.DiscardBuffer(); if (num8 == 0) this.LogThis("Uploading error:" + Environment.NewLine + "" + exception.Message); this.IsEmulatorConnected(false); num8++; } } goto Label_02AF; } //OSTRICH if (this.class10_settings_0.emulatorMode_0 == EmulatorMode.Ostrich || this.class10_settings_0.emulatorMode_0 == EmulatorMode.CobraRTP || this.class10_settings_0.emulatorMode_0 == EmulatorMode.BMulator || this.class10_settings_0.emulatorMode_0 == EmulatorMode.Vitaprog || this.class10_settings_0.emulatorMode_0 == EmulatorMode.ECUTamer) { if (this.class10_settings_0.emulatorMode_0 != EmulatorMode.CobraRTP && this.class10_settings_0.emulatorMode_0 != EmulatorMode.BMulator //Remove this for 4K BMulator && this.class10_settings_0.emulatorMode_0 != EmulatorMode.ECUTamer && ((this.emulatorMoatesType_0 == EmulatorMoatesType.ostrich_2 && this.int_2 >= 3) || (this.emulatorMoatesType_0 == EmulatorMoatesType.ostrich_1 && this.int_2 >= 12))) { //Ostrich 2.0 this.byte_1 = new byte[0x1006]; this.byte_1[0] = 90; //Z this.byte_1[1] = 0x57; //W this.byte_1[2] = 0x10; //n = 16 (16 for 4k serial | 4096) this.byte_1[3] = 0; //MMSB ... Always = 0 this.byte_1[4] = this.class18_0.method_148(0x8000L + num6); //MSB for (int num9 = 0; num9 < 0x1000; num9++) { this.byte_1[5 + num9] = this.class18_0.GetByteAt(num6 + num9); //All Bytes } this.byte_1[0x1005] = this.method_46(this.byte_1, 0, 0x1005); //Checksum try { this.method_50(this.byte_1, 0, 0x1006); byte Test = this.method_52(); this.DiscardBuffer(); if (Test == 0x4f) { num6 += 0xfffL; num6 += 1L; num8 = 0; } else { this.IsEmulatorConnected(false); if (num8 == 0) this.LogThis("Checksum error @" + string.Format("{0:X2}", num6) + "" + Environment.NewLine + "Reply is: " + string.Format("{0:X2}", Test) + " (Expected: " + string.Format("{0:X2}", 0x4f) + ")"); num8++; } } catch (Exception exception2) { this.DiscardBuffer(); if (num8 == 0) this.LogThis("Uploading error:" + Environment.NewLine + "" + exception2.Message); this.IsEmulatorConnected(false); num8++; } } else { if (this.class10_settings_0.emulatorMode_0 != EmulatorMode.ECUTamer) { //Ostrich 1.0 and CobrRTP this.byte_1 = new byte[0x105]; this.byte_1[0] = 0x57; this.byte_1[1] = 0; this.byte_1[2] = this.class18_0.method_148(0x8000L + num6); this.byte_1[3] = this.class18_0.method_147(0x8000L + num6); for (int num11 = 0; num11 < 0x100; num11++) { this.byte_1[4 + num11] = this.class18_0.GetByteAt(num6 + num11); } this.byte_1[260] = this.method_46(this.byte_1, 0, 260); try { if (num6 == 0L) { for (int num12 = 0; num12 < 0x105; num12++) { } } this.method_50(this.byte_1, 0, 0x105); byte Test = this.method_52(); this.DiscardBuffer(); if (Test == 0x4f) { num6 += 0xffL; num6 += 1L; num8 = 0; } else { if (!this.IsEmulatorConnected(false) && num8 == 0) this.LogThis("Checksum error @" + string.Format("{0:X2}", num6) + "" + Environment.NewLine + "Reply is: " + string.Format("{0:X2}", Test) + " (Expected: " + string.Format("{0:X2}", 0x4f) + ")"); num8++; } } catch (Exception exception3) { this.DiscardBuffer(); if (num8 == 0) this.LogThis("Uploading error:" + Environment.NewLine + "" + exception3.Message); this.IsEmulatorConnected(false); num8++; } } else { this.byte_1 = new byte[2054]; this.byte_1[0] = 90; this.byte_1[1] = 87; this.byte_1[2] = 8; this.byte_1[3] = 0; this.byte_1[4] = this.class18_0.method_148(32768L + num6); for (int m = 0; m < 2048; m++) { this.byte_1[5 + m] = this.class18_0.GetByteAt(num6 + (long)m); } this.byte_1[2053] = this.method_46(this.byte_1, 0, 2053); try { this.method_50(this.byte_1, 0, 2054); Thread.Sleep(10); byte b3 = this.method_52(); if (b3 == 79) { num6 += 2047L; num6 += 1L; num8 = 0; } else { this.IsEmulatorConnected(false); if (num8 == 0) { this.LogThis(string.Concat(new string[] { "Checksum error @", string.Format("{0:X2}", num6), "\nReply is: ", string.Format("{0:X2}", b3), " (Expected: ", string.Format("{0:X2}", 79), ")" })); } num8++; } } catch (Exception ex4) { this.DiscardBuffer(); if (num8 == 0) { this.LogThis("Uploading error:\n" + ex4.Message); } this.IsEmulatorConnected(false); num8++; } } } goto Label_02AF; } //Romulator if (this.class10_settings_0.emulatorMode_0 == EmulatorMode.ROMulator) { this.byte_1 = new byte[261]; this.byte_1[0] = 0x77; // M this.byte_1[1] = 0; // 0 this.byte_1[2] = this.class18_0.method_148(num6); //MSB Byte this.byte_1[3] = this.class18_0.method_147(num6); //LSB Byte for (int num14 = 0; num14 < 0x100; num14++) { this.byte_1[4 + num14] = this.class18_0.GetByteAt(num6 + num14); //Get 256bytes starting from 'num6' } this.byte_1[260] = this.method_46(this.byte_1, 0, 260); //apply checksum try { this.method_50(this.byte_1, 0, 0x105); //send datas byte Test = this.method_52(); this.DiscardBuffer(); if (Test == 0x4f) { num6 += 0xffL; num6 += 1L; num8 = 0; } else { if (!this.IsEmulatorConnected(false) && num8 == 0) this.LogThis("Checksum error @" + string.Format("{0:X2}", num6) + "" + Environment.NewLine + "Reply is: " + string.Format("{0:X2}", Test) + " (Expected: " + string.Format("{0:X2}", 0x4f) + ")"); num8++; } } catch (Exception exception5) { this.DiscardBuffer(); if (num8 == 0) this.LogThis("Uploading error:" + Environment.NewLine + "" + exception5.Message); this.IsEmulatorConnected(false); num8++; } goto Label_02AF; } //Demon if (this.class10_settings_0.emulatorMode_0 == EmulatorMode.Demon) { if (this.emulatorMoatesType_0 == EmulatorMoatesType.neptuneRTP) { //NeptuneRTP this.byte_1 = new byte[0x105]; this.byte_1[0] = 0x57; this.byte_1[1] = 0; this.byte_1[2] = this.class18_0.method_148(0x8000L + num6); this.byte_1[3] = this.class18_0.method_147(0x8000L + num6); for (int num11 = 0; num11 < 0x100; num11++) { this.byte_1[4 + num11] = this.class18_0.GetByteAt(num6 + num11); } this.byte_1[260] = this.method_46(this.byte_1, 0, 260); if (num6 == 0L) for (int num12 = 0; num12 < 0x105; num12++) { } } else { byte[] buffer2 = new byte[2]; Random random = new Random(); random.NextBytes(buffer2); random = null; this.byte_1 = new byte[0x1008]; this.byte_1[0] = 90; // Z this.byte_1[1] = 0x57; // this.byte_1[2] = 0x10; // this.byte_1[3] = buffer2[0]; // random encryption1 this.byte_1[4] = buffer2[1]; // random encryption2 this.byte_1[5] = 0; // 0 this.byte_1[6] = this.class18_0.method_148(0x8000L + num6); // for (int num15 = 0; num15 < 0x1000; num15++) { this.byte_1[7 + num15] = this.class18_0.GetByteAt(num6 + num15); // Get 4096 bytes starting from 'num6' } if (num6 == 0L) for (int num16 = 0; num16 < 0x100; num16++) { } //not neccessary? this.method_22(this.byte_1, 3, 0x1007); //encrypt the bytes for the demon if (num6 == 0L) for (int num17 = 0; num17 < 0x105; num17++) { } //not neccessary? this.byte_1[0x1007] = this.method_46(this.byte_1, 0, 0x1007); //Apply Checksum } try { if (this.emulatorMoatesType_0 == EmulatorMoatesType.neptuneRTP) this.method_50(this.byte_1, 0, 0x105); else this.method_50(this.byte_1, 0, 0x1008); //Send the data to the Demon byte Test = this.method_52(); this.DiscardBuffer(); if (Test == 0x4f) { if (this.emulatorMoatesType_0 == EmulatorMoatesType.neptuneRTP) { num6 += 0xffL; num6 += 1L; num8 = 0; } else { num6 += 0xfffL; num6 += 1L; num8 = 0; } } else { if (!this.IsEmulatorConnected(false) && num8 == 0) this.LogThis("Checksum error @" + string.Format("{0:X2}", num6) + "" + Environment.NewLine + "Reply is: " + string.Format("{0:X2}", Test) + " (Expected: " + string.Format("{0:X2}", 0x4f) + ")"); num8++; } } catch (Exception exception6) { this.DiscardBuffer(); if (num8 == 0) this.LogThis("Uploading error:" + Environment.NewLine + "" + exception6.Message); this.IsEmulatorConnected(false); num8++; } goto Label_02AF; } } this.backgroundWorker_0.ReportProgress(100); num6 = 0L; this.LogThis("Done uploading"); } private void backgroundWorker_0_ProgressChanged(object sender, ProgressChangedEventArgs e) { if (this.delegate66_0 != null) { this.delegate66_0(e.ProgressPercentage); } } private void backgroundWorker_0_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { this.method_12(false); this.bool_2 = false; this.method_14(EmulatorState.Connected); if (this.backgroundWorker_0 != null) { this.backgroundWorker_0.Dispose(); this.backgroundWorker_0 = null; } if (this.class27_EmuProgress_0 != null) this.class27_EmuProgress_0 = null; this.byte_1 = null; this.byte_2 = null; this.byte_0 = null; GC.Collect(2, GCCollectionMode.Forced); this.bool_9 = false; } //Download Rom private void backgroundWorker_1_DoWork(object sender, DoWorkEventArgs e) { int num3 = 0; this.byte_1 = new byte[8]; this.byte_2 = new byte[0x101]; if (this.method_13() != EmulatorState.Sending_data) this.method_14(EmulatorState.Downloading_data); if (this.backgroundWorker_1.CancellationPending) goto Label_0F11; long num = 0L; long num2 = 0L; this.LogThis("Start downloading"); Label_009B: this.DiscardBuffer(); if (num3 == this.class10_settings_0.int_21) { MessageBox.Show(Form.ActiveForm, "Downloading failed after " + this.class10_settings_0.int_21.ToString() + " tries" + Environment.NewLine + "See the debug logs for the issue", "Notification", MessageBoxButtons.OK, MessageBoxIcon.Hand); this.LogThis("Downloading failed after " + this.class10_settings_0.int_21.ToString() + " tries"); if (!this.IsEmulatorConnected(false)) { if (this.queue_0 != null) this.queue_0.Clear(); this.EmulatorDisconnect(); this.SetConnected(false); } } else if (num >= 0x8000L) { if (this.class10_settings_0.emulatorMode_0 == EmulatorMode.ROMulator) { this.byte_1 = new byte[2]; this.byte_1[0] = 0x56; this.byte_1[1] = 0x56; try { this.method_50(this.byte_1, 0, 2); this.method_52(); this.method_52(); this.method_52(); this.DiscardBuffer(); } catch (Exception exception2) { this.DiscardBuffer(); if (num3 == 0) this.LogThis("Downloading error:" + Environment.NewLine + "" + exception2.Message); this.IsEmulatorConnected(false); num3++; } } } else { this.backgroundWorker_1.ReportProgress((int) ((((double) num) / 32768.0) * 100.0)); //PGMFI RTP if (this.class10_settings_0.emulatorMode_0 == EmulatorMode.PGMFI_RTP) { this.method_41(); this.byte_1 = new byte[3]; this.byte_1[0] = 130; //130 or 0x82 this.byte_1[1] = this.class18_0.method_148(num); //MSB this.byte_1[2] = this.class18_0.method_147(num); //LSB try { //this.LogThis("PGMFI RTP: Write command, address: " + this.byte_1[1].ToString("X2") + this.byte_1[2].ToString("X2")); this.method_50(this.byte_1, 0, 3); //Send CMD for (int i = 0; i < 0x100; i++) //Read 256bytes { this.byte_0[(int)((IntPtr)(num + i))] = this.method_52(); this.method_42(this.byte_0[(int)((IntPtr)(num + i))]); num2 = i; } byte num5 = this.method_52(); this.DiscardBuffer(); if (this.method_40() != num5) { if (num3 == 0) this.LogThis("Checksum error @" + string.Format("{0:X2}", num) + "" + Environment.NewLine + "Reply is: " + string.Format("{0:X2}", num5) + " (Expected: " + string.Format("{0:X2}", this.method_40()) + ")"); this.IsEmulatorConnected(false); this.method_14(EmulatorState.Error_detected); num2 = 0L; num3++; } else { num += num2; num += 1L; num2 = 0L; num3 = 0; } } catch (Exception exception) { this.DiscardBuffer(); if (num3 == 0) this.LogThis("Downloading error:" + Environment.NewLine + "" + exception.Message); this.IsEmulatorConnected(false); num3++; num2 = 0L; } goto Label_009B; } //Ostrich if (this.class10_settings_0.emulatorMode_0 == EmulatorMode.Ostrich || this.class10_settings_0.emulatorMode_0 == EmulatorMode.CobraRTP || this.class10_settings_0.emulatorMode_0 == EmulatorMode.BMulator || this.class10_settings_0.emulatorMode_0 == EmulatorMode.Vitaprog || this.class10_settings_0.emulatorMode_0 == EmulatorMode.ECUTamer) { if (this.class10_settings_0.emulatorMode_0 != EmulatorMode.CobraRTP && ((this.emulatorMoatesType_0 == EmulatorMoatesType.ostrich_2 && this.int_2 >= 3) || (this.class10_settings_0.emulatorMode_0 == EmulatorMode.ECUTamer))) { //Ostrich 2.0 && ECU Tamer this.byte_2 = new byte[4096]; if (this.class10_settings_0.emulatorMode_0 == EmulatorMode.ECUTamer) this.byte_2 = new byte[2048]; this.method_41(); this.byte_1 = new byte[6]; this.byte_1[0] = 90; //Z this.byte_1[1] = 0x52; //R this.byte_1[2] = 0x10; //16 = 4k if (this.byte_2.Length == 2048) this.byte_1[2] = 0x08; //8 = 2k this.byte_1[3] = 0; //MMSB = 0 this.byte_1[4] = this.class18_0.method_148(0x8000L + num); //MSB this.byte_1[5] = this.method_46(this.byte_1, 0, 5); //LSB try { this.method_50(this.byte_1, 0, 6); //SerialWrite Byte_1 (6x bytes lenght) Thread.Sleep(10); if (this.byte_2.Length == 2048) { this.method_54(this.byte_2, 2048); this.method_43(this.byte_2, 2048); } else { this.method_54(this.byte_2, 0x1000); //SerialRead 4096 bytes this.method_43(this.byte_2, 0x1000); //Calculatate the checksum of the 4096 bytes received } byte num7 = this.method_52(); //Read one more and also the Last byte in the serial buffer to retreive Serial Checksum this.DiscardBuffer(); if (this.method_40() != num7) //Compare 4096 bytes received checksum with the last serial buffer checksum byte { if (num3 == 0) this.LogThis("Checksum error @" + string.Format("{0:X2}", num) + "" + Environment.NewLine + "Reply is: " + string.Format("{0:X2}", num7) + " (Expected: " + string.Format("{0:X2}", this.method_40()) + ")"); this.IsEmulatorConnected(false); this.method_14(EmulatorState.Error_detected); num3++; } else { if (this.byte_2.Length == 2048) { this.method_44(this.byte_2, (int)num2, 2048); num2 += 2048L; } else { this.method_44(this.byte_2, (int)num, 0x1000); //Checksum are same, transfert the 4096bytes received to the actual baserom variable num2 += 4096L; } num += 0x1000L; //Increase the loop byte 4096bytes for the next read location (aka MSB) num3 = 0; } } catch (Exception exception2) { this.DiscardBuffer(); if (num3 == 0) this.LogThis("Downloading error:" + Environment.NewLine + "" + exception2.Message); this.IsEmulatorConnected(false); num3++; } } else { //Ostrich 1.0 and CobraRTP this.method_41(); this.byte_1 = new byte[5]; this.byte_1[0] = 0x52; this.byte_1[1] = 0; this.byte_1[2] = this.class18_0.method_148(0x8000L + num); this.byte_1[3] = this.class18_0.method_147(0x8000L + num); this.byte_1[4] = this.method_46(this.byte_1, 0, 4); try { this.method_50(this.byte_1, 0, 5); //Thread.Sleep(100); //int Tryyy = 0; for (int j = 0; j < 0x100; j++) { this.byte_2[j] = this.method_52(); /*try { this.byte_2[j] = this.method_52(); } catch (TimeoutException exx) { Tryyy++; this.method_50(this.byte_1, 0, 5); Console.WriteLine("Tryy" + Tryyy + " | Index:" + j); if (Tryyy > 3) { this.DiscardBuffer(); if (num3 == 0) this.LogThis("Downloading error:" + Environment.NewLine + "" + exx.Message); this.IsEmulatorConnected(false); num3++; num2 = 0L; goto Label_009B; } j = -1; Thread.Sleep(50); }*/ //Console.WriteLine("byte" + j + ":0x" + this.byte_2[j].ToString("X2")); } //Console.WriteLine("ptuty"); this.method_43(this.byte_2, 0x100); //Console.WriteLine("yerre"); byte num9 = this.method_52(); this.DiscardBuffer(); if (this.method_40() != num9) { if (num3 == 0) this.LogThis("Checksum error @" + string.Format("{0:X2}", num) + "" + Environment.NewLine + "Reply is: " + string.Format("{0:X2}", num9) + " (Expected: " + string.Format("{0:X2}", this.method_40()) + ")"); this.IsEmulatorConnected(false); this.method_14(EmulatorState.Error_detected); num3++; } else { this.method_44(this.byte_2, (int) num, 0x100); num += 0x100L; num3 = 0; //Thread.Sleep(50); } } catch (Exception exception3) { //Console.WriteLine("erwreew"); this.DiscardBuffer(); if (num3 == 0) this.LogThis("Downloading error:" + Environment.NewLine + "" + exception3.Message); this.IsEmulatorConnected(false); num3++; num2 = 0L; } } goto Label_009B; } //Romulator if (this.class10_settings_0.emulatorMode_0 == EmulatorMode.ROMulator) { this.method_41(); this.byte_1 = new byte[4]; this.byte_1[0] = 0x52; this.byte_1[1] = 0; this.byte_1[2] = this.class18_0.method_148(num); this.byte_1[3] = this.class18_0.method_147(num); this.byte_1[4] = this.method_46(this.byte_1, 0, 4); try { this.method_50(this.byte_1, 0, 5); for (int m = 0; m < 0x100; m++) { this.byte_0[(int) ((IntPtr) (num + m))] = this.method_52(); this.method_42(this.byte_0[(int) ((IntPtr) (num + m))]); num2 = m; } byte num13 = this.method_52(); this.DiscardBuffer(); if (this.method_40() != num13) { if (num3 == 0) this.LogThis("Checksum error @" + string.Format("{0:X2}", num) + "" + Environment.NewLine + "Reply is: " + string.Format("{0:X2}", num13) + " (Expected: " + string.Format("{0:X2}", this.method_40()) + ")"); this.IsEmulatorConnected(false); this.method_14(EmulatorState.Error_detected); num2 = 0L; num3++; } else { num += num2; num += 1L; num2 = 0L; num3 = 0; } } catch (Exception exception4) { this.DiscardBuffer(); if (num3 == 0) this.LogThis("Downloading error:" + Environment.NewLine + "" + exception4.Message); this.IsEmulatorConnected(false); num3++; num2 = 0L; } goto Label_009B; } //Demon if (this.class10_settings_0.emulatorMode_0 == EmulatorMode.Demon) { byte num14 = 0; byte[] buffer2 = new byte[0x1000]; if (this.emulatorMoatesType_0 == EmulatorMoatesType.neptuneRTP) { buffer2 = new byte[0x100]; this.method_41(); this.byte_1 = new byte[5]; this.byte_1[0] = 0x52; this.byte_1[1] = 0; this.byte_1[2] = this.class18_0.method_148(0x8000L + num); this.byte_1[3] = this.class18_0.method_147(0x8000L + num); this.byte_1[4] = this.method_46(this.byte_1, 0, 4); } else { this.method_41(); byte[] buffer = new byte[2]; new Random().NextBytes(buffer); this.byte_1 = new byte[8]; this.byte_1[0] = 90; this.byte_1[1] = 0x52; this.byte_1[2] = 0x10; this.byte_1[3] = buffer[0]; this.byte_1[4] = buffer[1]; this.byte_1[5] = 0; this.byte_1[6] = this.class18_0.method_148(0x8000L + num); num14 = this.method_22(this.byte_1, 3, 7); this.byte_1[7] = this.method_46(this.byte_1, 0, 8); } try { if (this.emulatorMoatesType_0 == EmulatorMoatesType.neptuneRTP) this.method_50(this.byte_1, 0, 5); else this.method_50(this.byte_1, 0, 8); //this.method_50(this.byte_1, 0, 8); if (this.emulatorMoatesType_0 == EmulatorMoatesType.neptuneRTP) { for (int n = 0; n < 0x100; n++) { } this.method_54(buffer2, 0x100); //for (int j = 0; j < 0x100; j++) this.byte_2[j] = this.method_52(); } else { for (int n = 0; n < 0x1000; n++) { } this.method_54(buffer2, 0x1000); } if (this.emulatorMoatesType_0 == EmulatorMoatesType.neptuneRTP) this.method_43(buffer2, 0x100); else this.method_43(buffer2, 0x1000); //this.method_43(buffer2, 0x1000); byte num16 = this.method_52(); this.DiscardBuffer(); if (this.method_40() != num16) { if (num3 == 0) this.LogThis("Checksum error @" + string.Format("{0:X2}", num) + "" + Environment.NewLine + "Reply is: " + string.Format("{0:X2}", num16) + " (Expected: " + string.Format("{0:X2}", this.method_40()) + ")"); this.IsEmulatorConnected(false); this.method_14(EmulatorState.Error_detected); num2 = 0L; num3++; } else { //this.LogThis("Received:" + Environment.NewLine + "" + buffer2[0].ToString("X2") + ", " + buffer2[1].ToString("X2") + ", " + buffer2[2].ToString("X2") + ", " + buffer2[3].ToString("X2") + ", " + buffer2[4].ToString("X2") + ", " + buffer2[5].ToString("X2") + ", " + buffer2[6].ToString("X2") + ", " + buffer2[7].ToString("X2") + ", " + buffer2[8].ToString("X2")); if (this.emulatorMoatesType_0 != EmulatorMoatesType.neptuneRTP) this.method_25(num14, buffer2, 0, 0x1000); //this.method_25(num14, buffer2, 0, 0x1000); if (this.emulatorMoatesType_0 == EmulatorMoatesType.neptuneRTP) { this.method_44(buffer2, (int)num, 0x100); num += num2; num += 1L; num2 = 0L; num3 = 0; } else { this.method_44(buffer2, (int)num, 0x1000); num += 0x1000L; num2 = 0L; num3 = 0; } } } catch (Exception exception4) { this.DiscardBuffer(); if (num3 == 0) this.LogThis("Downloading error:" + Environment.NewLine + "" + exception4.Message); this.IsEmulatorConnected(false); num3++; num2 = 0L; } goto Label_009B; } } Label_0F11: this.backgroundWorker_1.ReportProgress(100); this.byte_1 = null; this.byte_2 = null; num2 = 0L; num3 = 0; num = 0L; this.LogThis("Done downloading"); } private void backgroundWorker_1_ProgressChanged(object sender, ProgressChangedEventArgs e) { if (this.delegate66_0 != null) { this.delegate66_0(e.ProgressPercentage); } } private void backgroundWorker_1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { if (this.serialPort_0 != null) { this.serialPort_0.ReadTimeout = this.class10_settings_0.int_20; this.serialPort_0.WriteTimeout = 500; } if (this.class27_EmuProgress_0 != null) this.class27_EmuProgress_0 = null; this.byte_1 = null; this.byte_2 = null; if (!this.bool_2) { this.method_12(false); this.class18_0.method_67(this.byte_0, false); this.byte_0 = null; if (this.backgroundWorker_1 != null) { this.backgroundWorker_1.Dispose(); this.backgroundWorker_1 = null; } } } //Realtime Updating private void backgroundWorker_2_DoWork(object sender, DoWorkEventArgs e) { byte num = 0; byte num2 = 0; int num3 = 0; int num4 = 0; Struct16 struct2 = new Struct16(); this.method_14(EmulatorState.Realtime); if (this.backgroundWorker_2.CancellationPending) goto Label_0D3A; Label_0053: this.DiscardBuffer(); this.int_0 = this.queue_0.Count; if (this.queue_0.Count != 0) { //if (this.queue_0.Count > LastQueuCount) LastQueuCount = this.queue_0.Count; //this.backgroundWorker_2.ReportProgress((int)((((double)(LastQueuCount - this.queue_0.Count)) / LastQueuCount) * 100.0)); if ((this.int_0 / 10) != num4) { num4 = this.int_0 / 10; if (this.delegate65_0 != null) { this.delegate65_0(EmulatorState.Realtime, this.int_0, false); } } //PGMFI RTP if (this.class10_settings_0.emulatorMode_0 == EmulatorMode.PGMFI_RTP) { this.DiscardBuffer(); struct2 = this.queue_0.Dequeue(); while (true) { if (num3 == this.class10_settings_0.int_21) { MessageBox.Show(Form.ActiveForm, "Realtime update failed after " + this.class10_settings_0.int_21.ToString() + " tries" + Environment.NewLine + "See the debug logs for the issue", "Notification", MessageBoxButtons.OK, MessageBoxIcon.Hand); this.LogThis("Realtime update failed after " + this.class10_settings_0.int_21.ToString() + " tries"); if (!this.IsEmulatorConnected(false)) this.SetConnected(false); goto Label_0D3A; } this.byte_1 = new byte[5]; this.byte_1[0] = 0xa4; this.byte_1[1] = 0; this.byte_1[2] = struct2.byte_0_X; this.byte_1[3] = this.class18_0.method_148(0x8000L + struct2.long_0_X); this.byte_1[4] = this.class18_0.method_147(0x8000L + struct2.long_0_X); this.byte_1[1] = this.method_46(this.byte_1, 0, 5); try { this.method_50(this.byte_1, 0, 5); num2 = this.method_52(); this.DiscardBuffer(); if (num2 == 0) { this.DiscardBuffer(); num3 = 0; goto Label_0053; } this.DiscardBuffer(); if (!this.IsEmulatorConnected(false)) { this.LogThis("Realtime update write error @" + string.Format("{0:X2}", struct2.long_0_X) + "(ecu replied: " + string.Format("{0:x2}", num2) + ")"); num3++; } /*if (num3 == 0) this.LogThis("Checksum error @" + string.Format("{0:X2}", struct2.long_0_X) + "" + Environment.NewLine + "Reply is: " + string.Format("{0:X2}", num2) + " (Expected: " + string.Format("{0:X2}", 0) + ")"); this.IsEmulatorConnected(false); num3++;*/ } catch (Exception exception) { this.DiscardBuffer(); if (num3 == 0) this.LogThis("Realtime update error:" + Environment.NewLine + "" + exception.Message); this.IsEmulatorConnected(false); num3++; } } } //Ostrich if (this.class10_settings_0.emulatorMode_0 == EmulatorMode.Ostrich || this.class10_settings_0.emulatorMode_0 == EmulatorMode.CobraRTP || this.class10_settings_0.emulatorMode_0 == EmulatorMode.BMulator || this.class10_settings_0.emulatorMode_0 == EmulatorMode.Vitaprog || this.class10_settings_0.emulatorMode_0 == EmulatorMode.ECUTamer) { //upload calibration take the same time as ~33 single bytes if (this.queue_0.Count >= 33) { this.queue_0.Clear(); this.method_12(false); CaliEmuProgressReport = false; this.method_19(); CaliEmuProgressReport = true; } else { struct2 = this.queue_0.Dequeue(); while (true) { if (num3 == this.class10_settings_0.int_21) { MessageBox.Show(Form.ActiveForm, "Realtime update failed after " + this.class10_settings_0.int_21.ToString() + " tries" + Environment.NewLine + "See the debug logs for the issue", "Notification", MessageBoxButtons.OK, MessageBoxIcon.Hand); this.LogThis("Realtime update failed after " + this.class10_settings_0.int_21.ToString() + " tries"); if (!this.IsEmulatorConnected(false)) this.SetConnected(false); goto Label_0D3A; } //###################################################### //Normal 1byte send this.byte_1 = new byte[6]; this.byte_1[0] = 0x57; this.byte_1[1] = 1; this.byte_1[2] = this.class18_0.method_148(0x8000L + struct2.long_0_X); this.byte_1[3] = this.class18_0.method_147(0x8000L + struct2.long_0_X); this.byte_1[4] = struct2.byte_0_X; num = this.method_46(this.byte_1, 0, 5); this.byte_1[5] = num; //index error here try { //Normal 1byte send this.method_50(this.byte_1, 0, 6); num2 = this.method_52(); this.DiscardBuffer(); if (num2 == 0x4f) { this.DiscardBuffer(); num3 = 0; goto Label_0053; } this.DiscardBuffer(); if (num3 == 0) this.LogThis("Checksum error @" + string.Format("{0:X2}", struct2.long_0_X) + "" + Environment.NewLine + "Reply is: " + string.Format("{0:X2}", num2) + " (Expected: " + string.Format("{0:X2}", 0x4f) + ")"); this.IsEmulatorConnected(false); num3++; } catch (Exception exception2) { this.DiscardBuffer(); if (num3 == 0) this.LogThis("Realtime update error:" + Environment.NewLine + "" + exception2.Message); this.IsEmulatorConnected(false); num3++; } } } } //Romulator if (this.class10_settings_0.emulatorMode_0 == EmulatorMode.ROMulator) { struct2 = this.queue_0.Dequeue(); while (true) { if (num3 == this.class10_settings_0.int_21) { MessageBox.Show(Form.ActiveForm, "Realtime update failed after " + this.class10_settings_0.int_21.ToString() + " tries" + Environment.NewLine + "See the debug logs for the issue", "Notification", MessageBoxButtons.OK, MessageBoxIcon.Hand); this.LogThis("Realtime update failed after " + this.class10_settings_0.int_21.ToString() + " tries"); if (!this.IsEmulatorConnected(false)) this.SetConnected(false); goto Label_0D3A; } this.byte_1 = new byte[6]; this.byte_1[0] = 0x77; this.byte_1[1] = 1; this.byte_1[2] = this.class18_0.method_148(struct2.long_0_X); this.byte_1[3] = this.class18_0.method_147(struct2.long_0_X); this.byte_1[4] = struct2.byte_0_X; num = this.method_46(this.byte_1, 0, 5); this.byte_1[5] = num; try { this.method_50(this.byte_1, 0, 6); num2 = this.method_52(); this.DiscardBuffer(); if (num2 == 0x4f) { this.DiscardBuffer(); num3 = 0; goto Label_0053; } this.DiscardBuffer(); if (num3 == 0) this.LogThis("Checksum error @" + string.Format("{0:X2}", struct2.long_0_X) + "" + Environment.NewLine + "Reply is: " + string.Format("{0:X2}", num2) + " (Expected: " + string.Format("{0:X2}", 0x4f) + ")"); this.IsEmulatorConnected(false); num3++; } catch (Exception exception4) { this.DiscardBuffer(); if (num3 == 0) this.LogThis("Realtime update error:" + Environment.NewLine + "" + exception4.Message); this.IsEmulatorConnected(false); num3++; } } } //Demon if (this.class10_settings_0.emulatorMode_0 == EmulatorMode.Demon) { if (this.queue_0.Count >= 512) { this.queue_0.Clear(); this.method_12(false); this.method_19(); } else { struct2 = this.queue_0.Dequeue(); while (true) { if (num3 == this.class10_settings_0.int_21) { MessageBox.Show(Form.ActiveForm, "Realtime update failed after " + this.class10_settings_0.int_21.ToString() + " tries" + Environment.NewLine + "See the debug logs for the issue", "Notification", MessageBoxButtons.OK, MessageBoxIcon.Hand); this.LogThis("Realtime update failed after " + this.class10_settings_0.int_21.ToString() + " tries"); if (!this.IsEmulatorConnected(false)) { this.queue_0.Clear(); this.EmulatorDisconnect(); this.SetConnected(false); } goto Label_0D3A; } if (this.emulatorMoatesType_0 == EmulatorMoatesType.neptuneRTP) { this.byte_1 = new byte[6]; this.byte_1[0] = 0x57; this.byte_1[1] = 1; this.byte_1[2] = this.class18_0.method_148(0x8000L + struct2.long_0_X); this.byte_1[3] = this.class18_0.method_147(0x8000L + struct2.long_0_X); this.byte_1[4] = struct2.byte_0_X; num = this.method_46(this.byte_1, 0, 5); this.byte_1[5] = num; } else { this.byte_1 = new byte[8]; byte[] buffer = new byte[2]; Random random = new Random(); random.NextBytes(buffer); random = null; this.byte_1[0] = 0x57; this.byte_1[1] = 1; this.byte_1[2] = 0; this.byte_1[3] = 0; this.byte_1[4] = this.class18_0.method_148(0x8000L + struct2.long_0_X); this.byte_1[5] = this.class18_0.method_147(0x8000L + struct2.long_0_X); this.byte_1[6] = struct2.byte_0_X; if (this.emulatorMoatesType_0 != EmulatorMoatesType.neptuneRTP) this.method_22(this.byte_1, 2, 7); this.byte_1[7] = this.method_46(this.byte_1, 0, 8); } try { //this.method_50(this.byte_1, 0, 8); if (this.emulatorMoatesType_0 == EmulatorMoatesType.neptuneRTP) this.method_50(this.byte_1, 0, 6); else this.method_50(this.byte_1, 0, 8); num2 = this.method_52(); this.DiscardBuffer(); if (num2 == 0x4f) { this.DiscardBuffer(); num3 = 0; goto Label_0053; } this.DiscardBuffer(); if (num3 == 0) this.LogThis("Checksum error @" + string.Format("{0:X2}", struct2.long_0_X) + "" + Environment.NewLine + "Reply is: " + string.Format("{0:X2}", num2) + " (Expected: " + string.Format("{0:X2}", 0x4f) + ")"); this.IsEmulatorConnected(false); num3++; } catch (Exception exception5) { this.DiscardBuffer(); if (num3 == 0) this.LogThis("Realtime update error:" + Environment.NewLine + "" + exception5.Message); this.IsEmulatorConnected(false); num3++; } } } } } Label_0D3A: //LastQueuCount = 0; //this.backgroundWorker_2.ReportProgress(100); this.int_0 = 0; if (this.bool_3) { this.method_12(false); this.method_19(); } } /*private void backgroundWorker_2_ProgressChanged(object sender, ProgressChangedEventArgs e) { if (this.delegate66_0 != null) { this.delegate66_0(e.ProgressPercentage); } }*/ private void backgroundWorker_2_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { this.method_12(false); if (this.class27_EmuProgress_0 != null) this.class27_EmuProgress_0 = null; if (!this.bool_9) { this.byte_1 = null; this.byte_2 = null; GC.Collect(3, GCCollectionMode.Optimized); } } //Upload Rom private void backgroundWorker_3_DoWork(object sender, DoWorkEventArgs e) { long num2 = 0L; byte num3 = 0; int num4 = 0; if (this.backgroundWorker_3 == null) return; if (this.backgroundWorker_3.CancellationPending) goto Label_0C75; long num = this.class18_0.class13_u_0.long_89; this.LogThis("Start uploading"); Label_002F: this.DiscardBuffer(); this.method_12(true); this.DiscardBuffer(); if (num4 == this.class10_settings_0.int_21) { MessageBox.Show(Form.ActiveForm, "Uploading failed after " + this.class10_settings_0.int_21.ToString() + " tries" + Environment.NewLine + "See the debug logs for the issue", "Notification", MessageBoxButtons.OK, MessageBoxIcon.Hand); this.LogThis("Uploading failed after " + this.class10_settings_0.int_21.ToString() + " tries"); if (!this.IsEmulatorConnected(false)) { this.queue_0.Clear(); this.EmulatorDisconnect(); } } else if (num >= 0x8000L) { if (this.class10_settings_0.emulatorMode_0 == EmulatorMode.ROMulator) { this.byte_1 = new byte[2]; this.byte_1[0] = 0x56; this.byte_1[1] = 0x56; try { this.method_50(this.byte_1, 0, 2); this.method_52(); this.method_52(); this.method_52(); this.DiscardBuffer(); } catch (Exception) { this.DiscardBuffer(); } } } else { try { this.backgroundWorker_3.ReportProgress((int)((((double)(num - this.class18_0.class13_u_0.long_89)) / ((double)(0x8000L - this.class18_0.class13_u_0.long_89))) * 100.0)); } catch { } //PGMFI RTP if (this.class10_settings_0.emulatorMode_0 == EmulatorMode.PGMFI_RTP) { this.byte_1 = new byte[5]; //this.byte_1 = new byte[] { 0xa4, 0, this.class18_0.GetByteAt(num), this.class18_0.method_148(0x8000L + num), this.class18_0.method_147(0x8000L + num) }; this.byte_1[0] = 0xa4; //a4 this.byte_1[1] = 0; //0 this.byte_1[2] = this.class18_0.GetByteAt(num); //Get 1byte this.byte_1[3] = this.class18_0.method_148(0x8000L + num); //MSB this.byte_1[4] = this.class18_0.method_147(0x8000L + num); //LSB this.byte_1[1] = this.method_46(this.byte_1, 0, 5); try { this.method_50(this.byte_1, 0, 5); num3 = this.method_52(); this.DiscardBuffer(); if (num3 == 0) { num += 1L; num4 = 0; } else { if (num4 == 0) this.LogThis("Checksum error @" + string.Format("{0:X2}", num) + "" + Environment.NewLine + "Reply is: " + string.Format("{0:X2}", num3) + " (Expected: " + string.Format("{0:X2}", 0) + ")"); this.IsEmulatorConnected(false); num4++; } } catch (Exception exception) { this.DiscardBuffer(); if (num4 == 0) this.LogThis("Uploading error:" + Environment.NewLine + "" + exception.Message); this.IsEmulatorConnected(false); num4++; } goto Label_002F; } //Ostrich if (this.class10_settings_0.emulatorMode_0 == EmulatorMode.Ostrich || this.class10_settings_0.emulatorMode_0 == EmulatorMode.CobraRTP || this.class10_settings_0.emulatorMode_0 == EmulatorMode.BMulator || this.class10_settings_0.emulatorMode_0 == EmulatorMode.Vitaprog || this.class10_settings_0.emulatorMode_0 == EmulatorMode.ECUTamer) { this.byte_1 = new byte[0x105]; this.byte_1[0] = 0x57; num2 = 0x8000L - num; if (num2 > 0x100L) { num2 = 0x100L; this.byte_1[1] = 0; } else { this.byte_1[1] = (byte) num2; } this.byte_1[2] = this.class18_0.method_148(0x8000L + num); this.byte_1[3] = this.class18_0.method_147(0x8000L + num); for (int i = 0; i < num2; i++) { this.byte_1[4 + i] = this.class18_0.GetByteAt(num + i); } this.byte_1[(int) ((IntPtr) (num2 + 4L))] = this.method_46(this.byte_1, 0, ((int) num2) + 4); try { this.method_50(this.byte_1, 0, (((int) num2) + 4) + 1); num3 = this.method_52(); this.DiscardBuffer(); if (num3 == 0x4f) { num += num2; num += 1L; } else { if (num4 == 0) this.LogThis("Checksum error @" + string.Format("{0:X2}", num) + "" + Environment.NewLine + "Reply is: " + string.Format("{0:X2}", num3) + " (Expected: " + string.Format("{0:X2}", 0x4f) + ")"); this.IsEmulatorConnected(false); num4++; } } catch (Exception exception3) { this.DiscardBuffer(); if (num4 == 0) this.LogThis("Uploading error:" + Environment.NewLine + "" + exception3.Message); this.IsEmulatorConnected(false); num4++; } goto Label_002F; } //Romulator if (this.class10_settings_0.emulatorMode_0 == EmulatorMode.ROMulator) { this.byte_1 = new byte[0x105]; this.byte_1[0] = 0x77; num2 = 0x8000L - num; if (num2 > 0x100L) { num2 = 0x100L; this.byte_1[1] = 0; } else { this.byte_1[1] = (byte) (num2 - 1L); } this.byte_1[2] = this.class18_0.method_148(num); this.byte_1[3] = this.class18_0.method_147(num); for (int k = 0; k < num2; k++) { this.byte_1[4 + k] = this.class18_0.GetByteAt(num + k); } this.byte_1[(int) ((IntPtr) (num2 + 4L))] = this.method_46(this.byte_1, 0, ((int) num2) + 4); try { this.method_50(this.byte_1, 0, (((int) num2) + 4) + 1); num3 = this.method_52(); this.DiscardBuffer(); if (num3 == 0x4f) { num += num2; num += 1L; } else { if (num4 == 0) this.LogThis("Checksum error @" + string.Format("{0:X2}", num) + "" + Environment.NewLine + "Reply is: " + string.Format("{0:X2}", num3) + " (Expected: " + string.Format("{0:X2}", 0x4f) + ")"); this.IsEmulatorConnected(false); num4++; } } catch (Exception exception5) { this.DiscardBuffer(); if (num4 == 0) this.LogThis("Uploading error:" + Environment.NewLine + "" + exception5.Message); this.IsEmulatorConnected(false); num4++; } goto Label_002F; } //Demon if (this.class10_settings_0.emulatorMode_0 == EmulatorMode.Demon) { if (this.emulatorMoatesType_0 == EmulatorMoatesType.neptuneRTP) { this.byte_1 = new byte[0x105]; this.byte_1[0] = 0x57; num2 = 0x8000L - num; if (num2 > 0x100L) { num2 = 0x100L; this.byte_1[1] = 0; } else { this.byte_1[1] = (byte)num2; } this.byte_1[2] = this.class18_0.method_148(0x8000L + num); this.byte_1[3] = this.class18_0.method_147(0x8000L + num); for (int i = 0; i < num2; i++) { this.byte_1[4 + i] = this.class18_0.GetByteAt(num + i); } this.byte_1[(int)((IntPtr)(num2 + 4L))] = this.method_46(this.byte_1, 0, ((int)num2) + 4); } else { byte[] buffer = new byte[2]; Random random = new Random(); random.NextBytes(buffer); random = null; this.byte_1 = new byte[0x107]; this.byte_1[0] = 0x57; num2 = 0x8000L - num; if (num2 > 0x100L) { num2 = 0x100L; this.byte_1[1] = 0; } else { this.byte_1[1] = (byte)num2; } this.byte_1[2] = buffer[0]; this.byte_1[3] = buffer[1]; this.byte_1[4] = this.class18_0.method_148(0x8000L + num); this.byte_1[5] = this.class18_0.method_147(0x8000L + num); for (int m = 0; m < num2; m++) this.byte_1[6 + m] = this.class18_0.GetByteAt(num + m); this.method_22(this.byte_1, 2, (int)(num2 + 6L)); this.byte_1[(int)((IntPtr)(num2 + 6L))] = this.method_46(this.byte_1, 0, ((int)num2) + 6); } try { if (this.emulatorMoatesType_0 == EmulatorMoatesType.neptuneRTP) this.method_50(this.byte_1, 0, (((int)num2) + 4) + 1); else this.method_50(this.byte_1, 0, (((int)num2) + 6) + 1); //this.method_50(this.byte_1, 0, (((int)num2) + 6) + 1); num3 = this.method_52(); //this.DiscardBuffer(); if (num3 == 0x4f) { num += num2; num += 1L; } else { if (num4 == 0) this.LogThis("Checksum error @" + string.Format("{0:X2}", num) + "" + Environment.NewLine + "Reply is: " + string.Format("{0:X2}", num3) + " (Expected: " + string.Format("{0:X2}", 0x4f) + ")"); this.IsEmulatorConnected(false); num4++; } } catch (Exception exception6) { this.DiscardBuffer(); if (num4 == 0) this.LogThis("Uploading error:" + Environment.NewLine + "" + exception6.Message); this.IsEmulatorConnected(false); num4++; } goto Label_002F; } } Label_0C75: try { this.backgroundWorker_3.ReportProgress(100); } catch { } num = 0L; this.LogThis("Done uploading"); } private void backgroundWorker_3_ProgressChanged(object sender, ProgressChangedEventArgs e) { if (this.delegate66_0 != null) { this.delegate66_0(e.ProgressPercentage); } } private void backgroundWorker_3_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { this.method_12(false); this.bool_2 = false; this.method_14(EmulatorState.Connected); if (this.backgroundWorker_3 != null) { this.backgroundWorker_3.Dispose(); this.backgroundWorker_3 = null; } if (this.class27_EmuProgress_0 != null) this.class27_EmuProgress_0 = null; if (this.bool_3) { this.bool_3 = false; } this.byte_1 = null; this.byte_2 = null; this.byte_0 = null; GC.Collect(6); } public void backgroundWorker_4_DoWork(object sender, DoWorkEventArgs e) { if (this.class10_settings_0.bool_31) { this.Emu_SerialConnected = this.class17_0.method_27(); return; } this.LogThis("Port scan thread"); this.Emu_SerialConnected = false; int emuCommCache = 1; string[] portNames = SerialPort.GetPortNames(); if (this.class10_settings_0.emuCommCache != 0) { try { emuCommCache = this.class10_settings_0.emuCommCache; this.Emu_SerialConnected = false; EmulatorDisconnect(); bool PortAvailable = false; for (int i = 0; i < portNames.Length; i++) { if (portNames[i] == ("COM" + emuCommCache.ToString())) PortAvailable = true; } if (!PortAvailable) { emuCommCache = 1; } else { this.serialPort_0 = new SerialPort("COM" + emuCommCache.ToString(), this.class10_settings_0.Emulator_Baud); this.serialPort_0.ReadTimeout = this.class10_settings_0.int_20; this.serialPort_0.WriteTimeout = 500; this.serialPort_0.ReadBufferSize = 0x1100; this.serialPort_0.Encoding = Encoding.Default; this.serialPort_0.Open(); LogThis("Cached port open: COM" + emuCommCache.ToString() + " (baud: " + this.class10_settings_0.Emulator_Baud.ToString() + ")"); if (this.IsEmulatorConnected(false)) { this.serialPort_0.Close(); this.class10_settings_0.string_2 = "COM" + emuCommCache.ToString(); this.Emu_SerialConnected = true; this.LogThis("Emulator found"); //this.backgroundWorker_4.ReportProgress(100); return; } this.LogThis("Emulator not found on Cached COM" + this.class10_settings_0.emuCommCache.ToString()); emuCommCache = 1; this.Emu_SerialConnected = false; } goto Label_0204; } catch (Exception exception) { this.LogThis("Cached port failed error:" + Environment.NewLine + "" + exception.Message); } } emuCommCache = 1; this.Emu_SerialConnected = false; Label_0204: try { if (emuCommCache == 41) { this.LogThis("Port Scan Failed"); this.Emu_SerialConnected = false; if (this.Report_Error) MessageBox.Show(Form.ActiveForm, "Can't dectect '" + this.class10_settings_0.emulatorMode_0.ToString() + "' with autoscan try manual settings" + Environment.NewLine + "OR see the debug logs for the issue", "Notification", MessageBoxButtons.OK, MessageBoxIcon.Hand); //this.backgroundWorker_4.ReportProgress(100); } else { //this.backgroundWorker_4.ReportProgress((int)((((double)emuCommCache) / 30.0) * 100.0)); //Only do available ports /*if (!this.class10_0.IsBluetooth) { string str = "COM" + emuCommCache.ToString(); bool PortAvailable = false; for (int j = 0; j < portNames.Length; j++) { if (portNames[j] == str) PortAvailable = true; } if (!PortAvailable) { emuCommCache++; goto Label_0204; } }*/ //try 921600 if (this.class10_settings_0.Emulator_Baud != 921600) this.class10_settings_0.Emulator_Baud = 921600; bool IsDeviceConnected = TestConnect("COM" + emuCommCache, this.class10_settings_0.Emulator_Baud); if (IsDeviceConnected) { SetFound(emuCommCache, this.class10_settings_0.Emulator_Baud); } else { //try 115200 if (this.class10_settings_0.Emulator_Baud == 921600) { IsDeviceConnected = TestConnect("COM" + emuCommCache, 115200); if (IsDeviceConnected) { this.class10_settings_0.Emulator_Baud = 115200; SetFound(emuCommCache, this.class10_settings_0.Emulator_Baud); //this.backgroundWorker_4.ReportProgress(100); } else { //Change port +1 emuCommCache++; goto Label_0204; } } else { IsDeviceConnected = TestConnect("COM" + emuCommCache, 921600); if (IsDeviceConnected) { this.class10_settings_0.Emulator_Baud = 921600; SetFound(emuCommCache, this.class10_settings_0.Emulator_Baud); //this.backgroundWorker_4.ReportProgress(100); } else { //Change port +1 emuCommCache++; goto Label_0204; } } } } } catch (Exception) { emuCommCache++; goto Label_0204; } } private void backgroundWorker_4_ProgressChanged(object sender, ProgressChangedEventArgs e) { if (this.delegate66_0 != null) { this.delegate66_0(e.ProgressPercentage); } } private void backgroundWorker_4_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { /*if (this.backgroundWorker_4 != null) { this.backgroundWorker_4.Dispose(); this.backgroundWorker_4 = null; }*/ if (this.class27_EmuProgress_0 != null) this.class27_EmuProgress_0 = null; } private void SetFound(int emuCommCache, int SetBaud) { this.serialPort_0.Close(); this.class10_settings_0.emuCommCache = emuCommCache; this.class10_settings_0.string_2 = "COM" + emuCommCache.ToString(); if ((this.class10_settings_0.emulatorMode_0 == EmulatorMode.Demon) && this.class10_settings_0.bool_31) { this.class10_settings_0.dtCommCache = emuCommCache; this.class10_settings_0.string_1 = "COM" + emuCommCache.ToString(); } this.Emu_SerialConnected = true; } private bool TestConnect(string emuCommCache, int thisBaud) { bool IsDeviceConnected = false; 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; } this.serialPort_0 = new SerialPort(emuCommCache, thisBaud); this.serialPort_0.ReadTimeout = this.class10_settings_0.int_20; this.serialPort_0.WriteTimeout = 500; this.serialPort_0.ReadBufferSize = 0x1100; //this.serialPort_0.DtrEnable = true; //this.serialPort_0.RtsEnable = true; this.serialPort_0.Encoding = Encoding.Default; try { this.serialPort_0.Open(); this.LogThis("------------------------------"); this.LogThis("Port open: " + emuCommCache.ToString() + " (Baud:" + thisBaud + ")"); //Connect and check if the device is correct IsDeviceConnected = this.IsEmulatorConnected(false); if (IsDeviceConnected) this.LogThis("Emulator found on " + emuCommCache.ToString()); else this.LogThis("Emulator NOT found on " + emuCommCache.ToString()); } catch { this.LogThis("Can't open: " + emuCommCache.ToString() + " (" + thisBaud + ")"); } return IsDeviceConnected; } //############################################################################################################################################# //############################################################################################################################################# //############################################################################################################################################# //############################################################################################################################################# private void method_0(object sender, PowerModeChangedEventArgs e) { if (e.Mode == PowerModes.Suspend) { this.LogThis("Supsend detected and logging is connected: " + this.GetConnected().ToString()); this.bool_6 = this.GetConnected(); if (this.GetConnected()) { this.method_1(true); } this.timer_1.Stop(); this.EmulatorDisconnect(); } else if (e.Mode == PowerModes.Resume) { this.bool_6 = false; } } public void method_1(bool bool_11) { this.Report_Error = bool_11; GC.Collect(); if (!this.GetConnected()) { TryingtoConnect = true; this.method_14(EmulatorState.Connecting); this.Emu_SerialConnected = false; if (this.class10_settings_0.Emu_AutoScan) { if (this.EmuAutoScanStart()) { this.EmuTryConnect(); } } else { this.EmuTryConnect(); } } else { this.EmuTryConnect(); } if (!this.GetConnected()) this.method_14(EmulatorState.Disconnected); TryingtoConnect = false; } public bool method_10() { return (this.GetConnected() && this.class10_settings_0.bool_31); } public bool method_11() { return this.bool_1; } public void method_12(bool bool_11) { this.bool_1 = bool_11; if (this.GetConnected()) { this.method_14(EmulatorState.Connected); } else { this.method_14(EmulatorState.Disconnected); } } public EmulatorState method_13() { return this.emulatorState_0; } public void method_14(EmulatorState emulatorState_1) { this.emulatorState_0 = emulatorState_1; if (this.delegate65_0 != null) { this.delegate65_0(this.emulatorState_0, this.int_0, true); } } private void method_15(int int_4) { 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_10 = false; this.timer_2.Start(); while (this.serialPort_0.BytesToRead < int_4) { if (this.bool_10) { this.timer_2.Stop(); throw new TimeoutException("Chunk timeout"); } Application.DoEvents(); } this.timer_2.Stop(); } public void method_16() { this.class18_0.method_68(); if (this.class10_settings_0.emulatorMode_0 != EmulatorMode.ROMulator) { if (!this.GetConnected()) { this.method_1(true); if (!this.GetConnected()) { this.SetConnected(false); return; } } if (this.method_10()) { this.method_12(true); if (this.class17_0.method_34_GetConnected()) { this.class17_0.method_22(true); while (!this.class17_0.method_21()) { Application.DoEvents(); this.class17_0.method_22(true); } } } if (!this.IsEmulatorConnected(false)) { this.method_12(false); this.SetConnected(false); } else { if (this.class27_EmuProgress_0 != null) this.class27_EmuProgress_0 = null; this.class27_EmuProgress_0 = new Class27_EmuProgress(); this.class27_EmuProgress_0.method_0(ref this.class25_0, ref this.frmMain_0); this.frmMain_0.SetStatusEmulator("Dowloading data"); this.byte_0 = new byte[0x8000]; this.backgroundWorker_1 = new BackgroundWorker(); this.backgroundWorker_1.WorkerSupportsCancellation = true; this.backgroundWorker_1.WorkerReportsProgress = true; this.backgroundWorker_1.DoWork += new DoWorkEventHandler(this.backgroundWorker_1_DoWork); this.backgroundWorker_1.ProgressChanged += new ProgressChangedEventHandler(this.backgroundWorker_1_ProgressChanged); this.backgroundWorker_1.RunWorkerCompleted += new RunWorkerCompletedEventHandler(this.backgroundWorker_1_RunWorkerCompleted); this.backgroundWorker_1.RunWorkerAsync(); } } } public void method_17() //Upload Baserom + Calibration { while (this.method_11()) { Application.DoEvents(); } if (this.method_10()) { this.method_12(true); if (this.class17_0.method_34_GetConnected()) { this.class17_0.method_22(true); while (!this.class17_0.method_21()) { Application.DoEvents(); this.class17_0.method_22(true); } } } if (!this.IsEmulatorConnected(false)) { this.method_12(false); this.SetConnected(false); } else { //####################################################################### if (this.class10_settings_0.emulatorMode_0 == EmulatorMode.PGMFI_RTP) { if (this.class27_EmuProgress_0 != null) this.class27_EmuProgress_0 = null; this.class27_EmuProgress_0 = new Class27_EmuProgress(); this.class27_EmuProgress_0.method_0(ref this.class25_0, ref this.frmMain_0); this.frmMain_0.SetStatusEmulator("Uploading(Stage1)"); this.method_14(EmulatorState.Sending_data); this.bool_2 = true; this.byte_0 = new byte[0x8000]; this.backgroundWorker_1 = new BackgroundWorker(); this.backgroundWorker_1.WorkerSupportsCancellation = true; this.backgroundWorker_1.WorkerReportsProgress = true; this.backgroundWorker_1.DoWork += new DoWorkEventHandler(this.backgroundWorker_1_DoWork); this.backgroundWorker_1.ProgressChanged += new ProgressChangedEventHandler(this.backgroundWorker_1_ProgressChanged); this.backgroundWorker_1.RunWorkerCompleted += new RunWorkerCompletedEventHandler(this.backgroundWorker_1_RunWorkerCompleted); this.backgroundWorker_1.RunWorkerAsync(); while (this.backgroundWorker_1.IsBusy) { Application.DoEvents(); } this.backgroundWorker_1.Dispose(); this.backgroundWorker_1 = null; if (this.class27_EmuProgress_0 != null) this.class27_EmuProgress_0 = null; } //####################################################################### if (this.class27_EmuProgress_0 != null) this.class27_EmuProgress_0 = null; this.class27_EmuProgress_0 = new Class27_EmuProgress(); this.class27_EmuProgress_0.method_0(ref this.class25_0, ref this.frmMain_0); if (this.class10_settings_0.emulatorMode_0 == EmulatorMode.PGMFI_RTP) this.frmMain_0.SetStatusEmulator("Uploading(Stage2)"); else this.frmMain_0.SetStatusEmulator("Uploading data"); if (MessageBox.Show(Form.ActiveForm, "Are the Engine Off?" + Environment.NewLine + "Uploading the 'rom' to " + this.class10_settings_0.emulatorMode_0.ToString() + " can cause LIMP MODE!", "Emulator", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.OK) { this.backgroundWorker_0 = new BackgroundWorker(); this.backgroundWorker_0.WorkerReportsProgress = true; this.backgroundWorker_0.WorkerSupportsCancellation = true; this.backgroundWorker_0.DoWork += new DoWorkEventHandler(this.backgroundWorker_0_DoWork); this.backgroundWorker_0.RunWorkerCompleted += new RunWorkerCompletedEventHandler(this.backgroundWorker_0_RunWorkerCompleted); this.backgroundWorker_0.ProgressChanged += new ProgressChangedEventHandler(this.backgroundWorker_0_ProgressChanged); this.backgroundWorker_0.RunWorkerAsync(); } } } public void method_18(long long_0_i, byte byte_8) { if (this.GetConnected() && this.class10_settings_0.bool_32) { Struct16 item = new Struct16 { long_0_X = long_0_i, byte_0_X = byte_8 }; if (this.queue_0 == null) { this.queue_0 = new Queue(); } this.queue_0.Enqueue(item); this.timer_0.Start(); } } public void method_19() //Upload Calibration ONLY { while (this.method_11()) { Application.DoEvents(); } this.method_12(true); if (this.method_10() && this.class17_0.method_34_GetConnected()) { this.class17_0.method_22(true); while (!this.class17_0.method_21()) { Application.DoEvents(); this.class17_0.method_22(true); } } if (!this.IsEmulatorConnected(false)) { this.method_12(false); this.SetConnected(false); } else { if (!this.bool_3) { if (CaliEmuProgressReport) { if (this.class27_EmuProgress_0 != null) this.class27_EmuProgress_0 = null; this.class27_EmuProgress_0 = new Class27_EmuProgress(); this.class27_EmuProgress_0.method_0(ref this.class25_0, ref this.frmMain_0); } this.frmMain_0.SetStatusEmulator("Uploading Calibration"); } this.method_12(true); this.backgroundWorker_3 = new BackgroundWorker(); this.backgroundWorker_3.WorkerReportsProgress = CaliEmuProgressReport; this.backgroundWorker_3.WorkerSupportsCancellation = true; this.backgroundWorker_3.DoWork += new DoWorkEventHandler(this.backgroundWorker_3_DoWork); this.backgroundWorker_3.RunWorkerCompleted += new RunWorkerCompletedEventHandler(this.backgroundWorker_3_RunWorkerCompleted); if (CaliEmuProgressReport) this.backgroundWorker_3.ProgressChanged += new ProgressChangedEventHandler(this.backgroundWorker_3_ProgressChanged); this.backgroundWorker_3.RunWorkerAsync(); } } public bool EmuTryConnect() { Control.CheckForIllegalCrossThreadCalls = false; if (this.method_11()) { if (this.backgroundWorker_1 != null) { if (this.backgroundWorker_1.IsBusy) this.backgroundWorker_1.CancelAsync(); while (this.backgroundWorker_1.IsBusy) Application.DoEvents(); } if (this.backgroundWorker_2 != null) { if (this.backgroundWorker_2.IsBusy) this.backgroundWorker_2.CancelAsync(); while (this.backgroundWorker_2.IsBusy) Application.DoEvents(); } if (this.backgroundWorker_0 != null) { if (this.backgroundWorker_0.IsBusy) this.backgroundWorker_0.CancelAsync(); while (this.backgroundWorker_0.IsBusy) Application.DoEvents(); } if (this.backgroundWorker_3 != null) { if (this.backgroundWorker_3.IsBusy) this.backgroundWorker_3.CancelAsync(); while (this.backgroundWorker_3.IsBusy) Application.DoEvents(); } } if (!this.GetConnected()) { bool flag = this.method_5(); if (flag) { if (((this.class10_settings_0.emulatorMode_0 != EmulatorMode.Demon) && (this.class10_settings_0.dataloggingMode_0 != DataloggingMode.datalogDemon)) && !this.IsEmulatorConnected(true)) { this.EmulatorDisconnect(); flag = false; } if (this.class10_settings_0.bool_33 && this.class18_0.method_30_HasFileLoadedInBMTune()) { this.method_17(); } if (this.class10_settings_0.bool_32) { this.timer_0.Start(); } } if ((flag && (this.class10_settings_0.emulatorMode_0 != EmulatorMode.Demon)) && (this.class10_settings_0.dataloggingMode_0 != DataloggingMode.datalogDemon)) { this.timer_1.Start(); } return flag; } if (this.GetConnected()) { if ((this.class10_settings_0.emulatorMode_0 != EmulatorMode.Demon) && (this.class10_settings_0.dataloggingMode_0 != DataloggingMode.datalogDemon)) { this.timer_1.Stop(); } this.EmulatorDisconnect(); return false; } this.SetConnected(false); return false; } //################################################# //Verify Rom with Emulator content public void method_20() { while (this.method_11()) { } if (this.method_10()) { this.method_12(true); if (this.class17_0.method_34_GetConnected()) { this.class17_0.method_22(true); while (!this.class17_0.method_21()) { Application.DoEvents(); this.class17_0.method_22(true); } } } if (!this.IsEmulatorConnected(true)) { MessageBox.Show("Can't find emulator:" + this.class10_settings_0.emulatorMode_0.ToString(), "Emulator Notification", MessageBoxButtons.OK, MessageBoxIcon.Hand); this.method_12(false); this.SetConnected(false); return; } this.method_14(EmulatorState.Downloading_data); this.bool_2 = true; this.byte_0 = new byte[0x8000]; this.backgroundWorker_1 = new BackgroundWorker(); this.backgroundWorker_1.WorkerSupportsCancellation = true; this.backgroundWorker_1.WorkerReportsProgress = true; this.backgroundWorker_1.DoWork += new DoWorkEventHandler(this.backgroundWorker_1_DoWork); this.backgroundWorker_1.ProgressChanged += new ProgressChangedEventHandler(this.backgroundWorker_1_ProgressChanged); this.backgroundWorker_1.RunWorkerCompleted += new RunWorkerCompletedEventHandler(this.backgroundWorker_1_RunWorkerCompleted); this.backgroundWorker_1.RunWorkerAsync(); while (this.backgroundWorker_1.IsBusy) { Application.DoEvents(); } this.backgroundWorker_1.Dispose(); this.backgroundWorker_1 = null; for (int i = 0; i < 0x8000; i++) { if (this.byte_0[i] != this.class18_0.GetByteAt((long)i)) { MessageBox.Show("Rom did NOT verify!", "Emulator", MessageBoxButtons.OK, MessageBoxIcon.Asterisk); goto Label_0213; } } MessageBox.Show("Rom verified correctly", "Emulator", MessageBoxButtons.OK, MessageBoxIcon.Asterisk); Label_0213: this.byte_0 = null; this.bool_2 = false; GC.Collect(3); this.method_14(EmulatorState.Connected); this.method_12(false); } //################################################# public byte[] method_21() { //byte_6 = new byte[] { 15, 0xfc, 0xce, 0x2c, 0xa3, 0x9f, 0x65, 0x99 }; //byte_7 = new byte[] { 15, 0xfc, 0xce, 0x2c, 0xa3, 0x9f, 0x65, 0x99 }; if ((this.class18_0.class10_settings_0.emulatorMode_0 == EmulatorMode.Ostrich)) { return this.byte_6; } if (this.class18_0.class10_settings_0.emulatorMode_0 != EmulatorMode.Demon) { this.class18_0.class17_0.frmMain_0.LogThis("Emulator: No vendor"); //throw new Exception("No vendor"); } return this.byte_7; } //demon encrypt array private byte method_22(byte[] byte_8, int int_4, int int_5) { byte num = this.method_26(); for (int i = int_4; i < int_5; i++) { byte_8[i] = (byte) (byte_8[i] ^ num); for (int j = 0; j <= 7; j++) { switch (j) { case 0: case 2: case 4: case 6: byte_8[i] = (byte) (byte_8[i] + this.method_21()[j]); break; default: byte_8[i] = (byte) (byte_8[i] ^ this.method_21()[j]); break; } } num = byte_8[i]; } return num; } /*private byte[] method_23(byte byte_8) { return new byte[1]; } private byte[] method_24(byte[] byte_8, int int_4, int int_5) { byte num = this.method_26(); byte num2 = 0; for (int i = int_4; i < int_5; i++) { num2 = byte_8[i]; for (int j = 7; j >= 0; j--) { switch (j) { case 0: case 2: case 4: case 6: byte_8[i] = (byte) (byte_8[i] - this.method_21()[j]); break; default: byte_8[i] = (byte) (byte_8[i] ^ this.method_21()[j]); break; } } byte_8[i] = (byte) (byte_8[i] ^ num); num = num2; } return byte_8; }*/ //demon download rom decrypt array private byte[] method_25(byte byte_8, byte[] byte_9, int int_4, int int_5) { byte num = byte_8; byte num2 = 0; for (int i = int_4; i < int_5; i++) { num2 = byte_9[i]; for (int j = 7; j >= 0; j--) { switch (j) { case 0: case 2: case 4: case 6: byte_9[i] = (byte) (byte_9[i] - this.method_21()[j]); break; default: byte_9[i] = (byte) (byte_9[i] ^ this.method_21()[j]); break; } } byte_9[i] = (byte) (byte_9[i] ^ num); num = num2; } return byte_9; } private byte method_26() { byte num = 90; for (int i = 0; i < this.method_21().Length; i++) { num = (byte) (num + this.method_21()[i]); } return num; } public void method_3() { if (this.GetConnected()) { this.EmulatorDisconnect(); } if (this.class27_EmuProgress_0 != null) this.class27_EmuProgress_0 = null; } public bool ResetVendorUnknown(byte ThisVendor) { int num = 0; this.GetSerial(); if (Vendor_ID != ThisVendor) { this.byte_1 = new byte[11]; this.byte_2 = new byte[1]; this.byte_1[0] = 0x4e; this.byte_1[1] = ThisVendor; for (int i = 0; i < 8; i++) this.byte_1[2 + i] = this.Serial_ID[i]; this.byte_1[10] = this.method_46(this.byte_1, 0, 10); Label_0071: if (num == this.class10_settings_0.int_21) { MessageBox.Show(Form.ActiveForm, "Error resetting VendorID after " + this.class10_settings_0.int_21.ToString() + " tries" + Environment.NewLine + "You can disable the Serial/VendorID Check in the Settings", "Notification", MessageBoxButtons.OK, MessageBoxIcon.Hand); this.LogThis("Error resetting VendorID after " + this.class10_settings_0.int_21.ToString() + " tries" + Environment.NewLine + "You can disable the Serial/VendorID Check in the Settings"); return false; } try { this.method_50(this.byte_1, 0, 11); this.method_47(0x1388); byte ReceivedByte = this.method_52(); this.DiscardBuffer(); if (ReceivedByte != 0x4f) { num++; goto Label_0071; } //recheck this.GetSerial(); if (Vendor_ID != ThisVendor) { MessageBox.Show(Form.ActiveForm, "Error resetting VendorID!" + Environment.NewLine + "The Vendor not match after being resetted", "Notification", MessageBoxButtons.OK, MessageBoxIcon.Hand); this.LogThis("Error resetting VendorID!" + Environment.NewLine + "The Vendor not match after being resetted"); return false; } return true; } catch { num++; goto Label_0071; } } return false; } public bool ResetVendor(bool Ostrich) { int num = 0; this.GetSerial(); //Reset only if vendor ID doesnt match if ((Ostrich && Vendor_ID != 0) || (!Ostrich && Vendor_ID != 1)) { this.byte_1 = new byte[11]; this.byte_2 = new byte[1]; this.byte_1[0] = 0x4e; if (Ostrich) this.byte_1[1] = 0; else this.byte_1[1] = 1; for (int i = 0; i < 8; i++) this.byte_1[2 + i] = this.Serial_ID[i]; this.byte_1[10] = this.method_46(this.byte_1, 0, 10); Label_0071: if (num == this.class10_settings_0.int_21) { MessageBox.Show(Form.ActiveForm, "Error resetting VendorID after " + this.class10_settings_0.int_21.ToString() + " tries" + Environment.NewLine + "You can disable the Serial/VendorID Check in the Settings", "Notification", MessageBoxButtons.OK, MessageBoxIcon.Hand); this.LogThis("Error resetting VendorID after " + this.class10_settings_0.int_21.ToString() + " tries" + Environment.NewLine + "You can disable the Serial/VendorID Check in the Settings"); return false; } try { this.method_50(this.byte_1, 0, 11); this.method_47(0x1388); byte ReceivedByte = this.method_52(); this.DiscardBuffer(); if (ReceivedByte != 0x4f) { num++; goto Label_0071; } //recheck this.GetSerial(); if ((Ostrich && Vendor_ID != 0) || (!Ostrich && Vendor_ID != 1)) { MessageBox.Show(Form.ActiveForm, "Error resetting VendorID!" + Environment.NewLine + "The Vendor not match after being resetted", "Notification", MessageBoxButtons.OK, MessageBoxIcon.Hand); this.LogThis("Error resetting VendorID!" + Environment.NewLine + "The Vendor not match after being resetted"); return false; } return true; } catch { num++; goto Label_0071; } } return false; } public bool ResetSerial(byte[] NewSerialID) { int num = 0; this.GetSerial(); //Reset only if vendor ID doesnt match if (Serial_ID[0] != NewSerialID[0] && Serial_ID[1] != NewSerialID[1] && Serial_ID[2] != NewSerialID[2] && Serial_ID[3] != NewSerialID[3] && Serial_ID[4] != NewSerialID[4] && Serial_ID[5] != NewSerialID[5] && Serial_ID[6] != NewSerialID[6] && Serial_ID[7] != NewSerialID[7]) { this.byte_1 = new byte[11]; this.byte_2 = new byte[1]; this.byte_1[0] = 0x4e; this.byte_1[1] = (byte) Vendor_ID; for (int i = 0; i < 8; i++) this.byte_1[2 + i] = NewSerialID[i]; this.byte_1[10] = this.method_46(this.byte_1, 0, 10); Label_0071: this.DiscardBuffer(); if (num == this.class10_settings_0.int_21) { MessageBox.Show(Form.ActiveForm, "Error resetting SerialID after " + this.class10_settings_0.int_21.ToString() + " tries" + Environment.NewLine + "You can disable the Serial/VendorID Check in the Settings", "Notification", MessageBoxButtons.OK, MessageBoxIcon.Hand); this.LogThis("Error resetting SerialID after " + this.class10_settings_0.int_21.ToString() + " tries" + Environment.NewLine + "You can disable the Serial/VendorID Check in the Settings"); return false; } try { this.method_50(this.byte_1, 0, 11); this.method_47(0x1388); byte ReceivedByte = this.method_52(); this.DiscardBuffer(); if (ReceivedByte != 0x4f) { num++; goto Label_0071; } //recheck this.GetSerial(); if (Serial_ID[0] != NewSerialID[0] && Serial_ID[1] != NewSerialID[1] && Serial_ID[2] != NewSerialID[2] && Serial_ID[3] != NewSerialID[3] && Serial_ID[4] != NewSerialID[4] && Serial_ID[5] != NewSerialID[5] && Serial_ID[6] != NewSerialID[6] && Serial_ID[7] != NewSerialID[7]) { MessageBox.Show(Form.ActiveForm, "Error resetting SerialID!" + Environment.NewLine + "The Serial not match after being resetted", "Notification", MessageBoxButtons.OK, MessageBoxIcon.Hand); this.LogThis("Error resetting SerialID!" + Environment.NewLine + "The Serial not match after being resetted"); return false; } return true; } catch { num++; goto Label_0071; } } return false; } public void CheckResetSerial() { if (GetConnected()) { if (this.class10_settings_0.chkEmuVendor) { GetSerial(); if (((this.Vendor_ID != 1) && (this.class10_settings_0.emulatorMode_0 == EmulatorMode.Demon)) && (MessageBox.Show(Form.ActiveForm, "Demon VendorID is not set to BMTune. Do you want to set it to BMTune?" + Environment.NewLine + "This will remove all data from demon!", "BMTune", MessageBoxButtons.YesNo) == DialogResult.Yes)) { this.ResetVendor(false); if (this.GetConnected()) { this.method_1(false); } return; } if ((this.emulatorMoatesType_0 != EmulatorMoatesType.ostrich_1) || (this.emulatorMoatesType_0 == EmulatorMoatesType.ostrich_1 && this.int_2 >= 15)) { if (((this.Vendor_ID != 0) && (this.class10_settings_0.emulatorMode_0 == EmulatorMode.Ostrich)) && (MessageBox.Show(Form.ActiveForm, "Ostrich VendorID is not set to BMTune. Do you want to set it to BMTune?" + Environment.NewLine + "This will remove all data from ostrich!", "BMTune", MessageBoxButtons.YesNo) == DialogResult.Yes)) { this.ResetVendor(true); if (this.GetConnected()) { this.method_1(false); } return; } } } } } public void GetSerial() { if ((this.emulatorMoatesType_0 != EmulatorMoatesType.ostrich_1) || (this.emulatorMoatesType_0 == EmulatorMoatesType.ostrich_1 && this.int_2 >= 15)) { int num = 0; this.byte_1 = new byte[3]; this.byte_2 = new byte[10]; this.byte_1[0] = 0x4e; this.byte_1[1] = 0x53; this.byte_1[2] = 0xa1; Label_0041: this.DiscardBuffer(); if (num == this.class10_settings_0.int_21) { MessageBox.Show(Form.ActiveForm, "Error getting Serial/Vendor ID after " + this.class10_settings_0.int_21.ToString() + " tries" + Environment.NewLine + "You can disable the Serial/VendorID Check in the Settings", "Notification", MessageBoxButtons.OK, MessageBoxIcon.Hand); this.LogThis("Error getting Serial/Vendor ID after " + this.class10_settings_0.int_21.ToString() + " tries" + Environment.NewLine + "You can disable the Serial/VendorID Check in the Settings"); } try { this.method_50(this.byte_1, 0, 3); this.Vendor_ID = this.method_52(); for (int i = 0; i < 8; i++) this.Serial_ID[i] = this.method_52(); byte CheckS = this.method_52(); this.DiscardBuffer(); } catch { this.Vendor_ID = 0; num++; goto Label_0041; } } } private byte[] method_35() { byte[] buffer = new byte[8]; new Random().NextBytes(buffer); return buffer; } public bool EmuAutoScanStart() { this.LogThis("Auto-scan started"); if (this.class27_EmuProgress_0 != null) this.class27_EmuProgress_0 = null; this.class27_EmuProgress_0 = new Class27_EmuProgress(); this.class27_EmuProgress_0.method_0(ref this.class25_0, ref this.frmMain_0); /*if (this.backgroundWorker_4 != null) { if (this.backgroundWorker_4.IsBusy) { this.backgroundWorker_4.CancelAsync(); } while (this.backgroundWorker_4.IsBusy) { Application.DoEvents(); } this.backgroundWorker_4.Dispose(); this.backgroundWorker_4 = null; }*/ if (this.backgroundWorker_4 != null) { this.backgroundWorker_4.Dispose(); this.backgroundWorker_4 = null; } this.backgroundWorker_4 = new BackgroundWorker(); this.backgroundWorker_4.DoWork += new DoWorkEventHandler(this.backgroundWorker_4_DoWork); this.backgroundWorker_4.RunWorkerCompleted += new RunWorkerCompletedEventHandler(this.backgroundWorker_4_RunWorkerCompleted); //this.backgroundWorker_4.ProgressChanged += new ProgressChangedEventHandler(this.backgroundWorker_4_ProgressChanged); //this.backgroundWorker_4.WorkerReportsProgress = true; this.backgroundWorker_4.WorkerReportsProgress = false; this.backgroundWorker_4.WorkerSupportsCancellation = true; this.backgroundWorker_4.RunWorkerAsync(); while (this.backgroundWorker_4.IsBusy) { Application.DoEvents(); } return this.Emu_SerialConnected; } public bool IsEmulatorConnected(bool ShowError) { if (!this.class10_settings_0.bool_31) { if (this.serialPort_0 == null) return false; if (this.serialPort_0 != null && !this.serialPort_0.IsOpen) return false; } int num = this.class10_settings_0.int_21; if (!ShowError) num = 3; int num2 = 0; this.byte_1 = new byte[5]; this.byte_2 = new byte[3]; //if (this.serialPort_0 != null) this.LogThis("Baud: " + this.serialPort_0.BaudRate.ToString()); Label_008A: this.DiscardBuffer(); if (num2 == num) { if (!this.class10_settings_0.bool_31) { this.LogThis("Can't dectect '" + this.class10_settings_0.emulatorMode_0.ToString() + "' on " + this.serialPort_0.PortName); if (ShowError) MessageBox.Show(Form.ActiveForm, "Can't dectect '" + this.class10_settings_0.emulatorMode_0.ToString() + "' on " + this.serialPort_0.PortName + "" + Environment.NewLine + "See the debug logs for the issue", "Notification", MessageBoxButtons.OK, MessageBoxIcon.Hand); } goto Label_10B9; } switch (this.class10_settings_0.emulatorMode_0) { case EmulatorMode.PGMFI_RTP: if (this.serialPort_0.BaudRate != 38400) this.LogThis("The baudrate is not compatible for the PGMFI RTP" + Environment.NewLine + "Please set baudrate to 38400"); try { this.method_49(0x10); byte num3 = this.method_52(); if (num3 == 0xcd) { if (!this.Emu_Connected) this.LogThis("PGMFI RTP Connected"); return true; } this.LogThis("Bad reply" + "" + Environment.NewLine + "Reply is: " + string.Format("{0:X2}", num3) + " (Expected: " + string.Format("{0:X2}", 0xcd) + ")"); num2++; } catch (Exception exception) { this.DiscardBuffer(); if (num2 == 0) this.LogThis("Serial Port error:" + Environment.NewLine + "" + exception.Message); num2++; } goto Label_008A; case EmulatorMode.Ostrich: if ((this.serialPort_0.BaudRate != 921600) && (this.serialPort_0.BaudRate != 115200)) this.LogThis("The baudrate is not compatible for the Ostrich" + Environment.NewLine + "Please set baudrate to 115200 or 921600"); this.byte_1 = new byte[2]; this.byte_1[0] = 0x56; this.byte_1[1] = 0x56; try { this.method_50(this.byte_1, 0, 2); for (int i = 0; i < 3; i++) this.byte_2[i] = this.method_52(); } catch (Exception exception2) { this.DiscardBuffer(); if (num2 == 0) this.LogThis("Serial Port error:" + Environment.NewLine + "" + exception2.Message); /*if (num2 == 0) this.LogThis("Changing emulator baudrate due to serial errors"); this.byte_1 = new byte[3]; this.byte_1[0] = 0x53; //S if (this.serialPort_0.BaudRate == 115200) { this.byte_1[1] = 7; //7 = set to 115220 this.byte_1[2] = 90; //Checksum } else if (this.serialPort_0.BaudRate == 921600) { try { this.serialPort_0.Close(); this.serialPort_0 = new SerialPort(this.class10_settings_0.string_2, 115200); this.serialPort_0.ReadTimeout = this.class10_settings_0.int_20; this.serialPort_0.WriteTimeout = 500; this.serialPort_0.Encoding = Encoding.Default; this.serialPort_0.Open(); this.byte_1[1] = 0; //0 = set to 921600 this.byte_1[2] = 0x53; //Checksum } catch (Exception exception3) { if (num2 == 0) this.LogThis("Serial Port error:" + Environment.NewLine + "" + exception3.Message); num2++; goto Label_008A; } } try { this.method_50(this.byte_1, 0, 3); this.byte_2[0] = this.method_52(); if (this.byte_2[0] == 0x4f) { this.serialPort_0.Close(); this.serialPort_0 = new SerialPort(this.class10_settings_0.string_2, this.class10_settings_0.Emulator_Baud); this.serialPort_0.ReadTimeout = this.class10_settings_0.int_20; this.serialPort_0.WriteTimeout = 500; this.serialPort_0.Encoding = Encoding.Default; this.serialPort_0.Open(); num2 = 0; } else { if (num2 == 0) this.LogThis("Can't change emulator baudrate"); num2++; } } catch { if (num2 == 0) this.LogThis("Can't change emulator baudrate"); num2++; }*/ num2++; goto Label_008A; } if (this.byte_2[2] == 0x4f) { this.int_1 = this.byte_2[0]; this.string_0 = char.ConvertFromUtf32(this.byte_2[2]); this.int_2 = this.byte_2[1]; if (this.byte_2[0] == 10) { if (this.class10_settings_0.emulatorMode_0 == EmulatorMode.Vitaprog) { if (!this.Emu_Connected) this.LogThis("Vitaprog/Hondavert (V" + this.int_1 + "." + this.int_2 + "." + this.string_0 + ")"); this.emulatorMoatesType_0 = EmulatorMoatesType.ostrich_1; this.EmulatorName = "Vitaprog/Hondavert"; return true; } else { if (!this.Emu_Connected) this.LogThis("Moates Ostrich1.0 (V" + this.int_1 + "." + this.int_2 + "." + this.string_0 + ")"); this.emulatorMoatesType_0 = EmulatorMoatesType.ostrich_1; this.EmulatorName = "Moates Ostrich1.0"; } } else if (this.byte_2[0] == 20 && this.byte_2[1] < 20) { if (!this.Emu_Connected) this.LogThis("Moates Ostrich2.0 (V" + this.int_1 + "." + this.int_2 + "." + this.string_0 + ")"); this.emulatorMoatesType_0 = EmulatorMoatesType.ostrich_2; this.EmulatorName = "Moates Ostrich2.0"; GetSerial(); } else if (this.byte_2[0] == 20 && this.byte_2[1] >= 20) { this.class10_settings_0.emulatorMode_0 = EmulatorMode.CobraRTP; if (!this.Emu_Connected) this.LogThis("CobraRTP (V" + this.int_1 + "." + this.int_2 + "." + this.string_0 + ")"); this.EmulatorName = "CobraRTP"; this.emulatorMoatesType_0 = EmulatorMoatesType.ostrich_2; } this.byte_1 = new byte[4]; this.byte_2 = new byte[1]; this.byte_1[0] = 0x42; this.byte_1[1] = 0x52; this.byte_1[2] = 0x52; this.byte_1[3] = 230; try { this.method_50(this.byte_1, 0, 4); this.byte_2[0] = this.method_52(); if (this.byte_2[0] == 0) return true; if (num2 == 0) this.LogThis("Bad bank reply" + "" + Environment.NewLine + "Reply is: " + string.Format("{0:X2}", this.byte_2[0]) + " (Expected: " + string.Format("{0:X2}", 0) + ")"); } catch { num2++; goto Label_008A; } this.byte_1[0] = 0x42; this.byte_1[1] = 0x53; this.byte_1[2] = 0; this.byte_1[3] = 0x95; try { this.method_50(this.byte_1, 0, 4); this.byte_2[0] = this.method_52(); if (this.byte_2[0] == 0x4f) return true; if (num2 == 0) this.LogThis("Bad bank reset reply" + "" + Environment.NewLine + "Reply is: " + string.Format("{0:X2}", this.byte_2[0]) + " (Expected: " + string.Format("{0:X2}", 0x4f) + ")"); num2++; goto Label_008A; } catch { num2++; goto Label_008A; } } if (num2 == 0) this.LogThis("Ostrich not found!" + "" + Environment.NewLine + "Reply is: " + string.Format("{0:X2}", this.byte_2[2]) + " (Expected: " + string.Format("{0:X2}", 0x4f) + ")"); num2++; goto Label_008A; //########################################### //########################################### //########################################### case EmulatorMode.BMulator: if ((this.serialPort_0.BaudRate != 921600)) this.LogThis("The baudrate is not compatible for the BMulator" + Environment.NewLine + "Please set baudrate to 921600"); this.byte_1 = new byte[2]; this.byte_1[0] = 0x56; this.byte_1[1] = 0x56; try { this.DiscardBuffer(); this.method_50(this.byte_1, 0, 2); for (int i = 0; i < 3; i++) this.byte_2[i] = this.method_52(); } catch (Exception exception2) { this.DiscardBuffer(); if (num2 == 0) this.LogThis("Serial Port error:" + Environment.NewLine + "" + exception2.Message); num2++; goto Label_008A; } if ((this.byte_2[0] == 10 || (this.byte_2[0] == 20 && this.byte_2[1] < 20)) && this.byte_2[2] == 0x4f) { this.int_1 = this.byte_2[0]; this.string_0 = char.ConvertFromUtf32(this.byte_2[2]); this.int_2 = this.byte_2[1]; if (!this.Emu_Connected) this.LogThis("BMulator (V" + this.int_1 + "." + this.int_2 + "." + this.string_0 + ")"); this.emulatorMoatesType_0 = EmulatorMoatesType.ostrich_1; this.EmulatorName = "BMulator"; return true; } if (num2 == 0) this.LogThis("BMulator not found!" + "" + Environment.NewLine + "Reply is: " + string.Format("{0:X2}", this.byte_2[2]) + " (Expected: 0x4F)"); num2++; goto Label_008A; //########################################### //########################################### //########################################### case EmulatorMode.CobraRTP: if ((this.serialPort_0.BaudRate != 921600) && (this.serialPort_0.BaudRate != 115200)) this.LogThis("The baudrate is not compatible for the CobraRTP" + Environment.NewLine + "Please set baudrate to 115200 or 921600"); this.byte_1 = new byte[2]; this.byte_1[0] = 0x56; this.byte_1[1] = 0x56; try { this.DiscardBuffer(); this.method_50(this.byte_1, 0, 2); for (int i = 0; i < 3; i++) this.byte_2[i] = this.method_52(); } catch (Exception exception2) { this.DiscardBuffer(); if (num2 == 0) this.LogThis("Serial Port error:" + Environment.NewLine + "" + exception2.Message); num2++; goto Label_008A; } //20.9.C instead of 20.9.O 0x43 = C in ascII if (this.byte_2[0] == 20 && (this.byte_2[2] == 0x43 || this.byte_2[2] == 0x4f)) { this.int_1 = this.byte_2[0]; this.string_0 = char.ConvertFromUtf32(this.byte_2[2]); this.int_2 = this.byte_2[1]; if (this.byte_2[1] >= 20) { if (!this.Emu_Connected) this.LogThis("CobraRTP (V" + this.int_1 + "." + this.int_2 + "." + this.string_0 + ")"); this.EmulatorName = "CobraRTP"; } else { if (!this.Emu_Connected) this.LogThis("Moates Ostrich2.0 (V" + this.int_1 + "." + this.int_2 + "." + this.string_0 + ")"); this.class10_settings_0.emulatorMode_0 = EmulatorMode.Ostrich; this.emulatorMoatesType_0 = EmulatorMoatesType.ostrich_2; this.EmulatorName = "Moates Ostrich2.0"; GetSerial(); } return true; } if (num2 == 0) this.LogThis("CobraRTP not found!" + "" + Environment.NewLine + "Reply is: " + string.Format("{0:X2}", this.byte_2[2]) + " (Expected: 0x43|0x4F)"); num2++; goto Label_008A; //########################################### //########################################### //########################################### case EmulatorMode.ECUTamer: if (this.serialPort_0.BaudRate != 921600 && this.serialPort_0.BaudRate != 115200) { this.LogThis("The baudrate is not compatible for the ECU-Tamer" + Environment.NewLine + "Please set baudrate to 115200 or 921600"); } this.byte_1 = new byte[2]; this.byte_1[0] = 86; this.byte_1[1] = 86; try { this.DiscardBuffer(); this.method_50(this.byte_1, 0, 2); Thread.Sleep(10); for (int n = 0; n < 3; n++) this.byte_2[n] = this.method_52(); } catch (Exception ex8) { this.DiscardBuffer(); if (num2 == 0) { this.LogThis("Serial Port error:" + Environment.NewLine + "" + ex8.Message); } num2++; goto Label_008A; } if (this.byte_2[2] == 79) { this.int_1 = (int)this.byte_2[0]; this.string_0 = char.ConvertFromUtf32((int)this.byte_2[2]); this.int_2 = (int)this.byte_2[1]; this.LogThis("ECU-Tamer (V" + this.int_1 + "." + this.int_2 + "." + this.string_0 + ")"); this.EmulatorName = "ECU-Tamer"; return true; } if (num2 == 0) this.LogThis("ECU-Tamer not found!" + Environment.NewLine + "Reply is: " + string.Format("{0:X2}", this.byte_2[2]) + " (Expected: " + string.Format("{0:X2}", 67) + ")"); num2++; goto Label_008A; //########################################### //########################################### //########################################### case EmulatorMode.Vitaprog: if ((this.serialPort_0.BaudRate != 115200)) this.LogThis("The baudrate is not compatible for the Vitaprog/Hondavert" + Environment.NewLine + "Please set baudrate to 115200"); this.byte_1 = new byte[2]; this.byte_1[0] = 0x56; this.byte_1[1] = 0x56; try { this.DiscardBuffer(); this.method_50(this.byte_1, 0, 2); for (int i = 0; i < 3; i++) this.byte_2[i] = this.method_52(); } catch (Exception exception2) { this.DiscardBuffer(); if (num2 == 0) this.LogThis("Serial Port error:" + Environment.NewLine + "" + exception2.Message); num2++; goto Label_008A; } //20.9.C instead of 20.9.O 0x43 = C in ascII if (this.byte_2[0] == 10 && this.byte_2[2] == 0x4f) { this.int_1 = this.byte_2[0]; this.string_0 = char.ConvertFromUtf32(this.byte_2[2]); this.int_2 = this.byte_2[1]; if (!this.Emu_Connected) this.LogThis("Vitaprog/Hondavert (V" + this.int_1 + "." + this.int_2 + "." + this.string_0 + ")"); this.emulatorMoatesType_0 = EmulatorMoatesType.ostrich_1; this.EmulatorName = "Vitaprog/Hondavert"; return true; } if (num2 == 0) this.LogThis("Vitaprog/Hondavert not found!" + Environment.NewLine + "Reply is: " + string.Format("{0:X2}", this.byte_2[2]) + " (Expected: 0x4F)"); num2++; goto Label_008A; //########################################### //########################################### //########################################### case EmulatorMode.ROMulator: this.byte_1 = new byte[2]; this.byte_1[0] = 0x56; this.byte_1[1] = 0x56; try { this.method_50(this.byte_1, 0, 2); for (int j = 0; j < 3; j++) { this.byte_2[j] = this.method_52(); } } catch (Exception exception5) { this.DiscardBuffer(); if (num2 == 0) this.LogThis("Serial Port error:" + Environment.NewLine + "" + exception5.Message); num2++; goto Label_008A; } if ((this.byte_2[2] != 0x31) && (this.byte_2[2] != 50)) { if (num2 == 0) this.LogThis("Romulator not found!" + "" + Environment.NewLine + "Reply is: " + string.Format("{0:X2}", this.byte_2[2]) + " (Expected: " + string.Format("{0:X2}", 0x31) + "|" + string.Format("{0:X2}", 50) + ")"); num2++; goto Label_008A; } if (!this.Emu_Connected) this.LogThis("Romulator Connected"); return true; case EmulatorMode.Demon: //if ((this.serialPort_0.BaudRate != 921600) && (this.serialPort_0.BaudRate != 115200)) this.LogThis("The baudrate is not compatible for the Demon" + Environment.NewLine + "Please set baudrate to 115200 or 921600"); this.byte_1 = new byte[2]; this.byte_1[0] = 0x56; this.byte_1[1] = 0x56; try { this.method_50(this.byte_1, 0, 2); for (int n = 0; n < 3; n++) { this.byte_2[n] = this.method_52(); } } catch (Exception exception7) { if (num2 == 0) this.LogThis("Demon not found. Port error:" + Environment.NewLine + "" + exception7.Message); num2++; goto Label_008A; } if (this.byte_2[2] != 0x44 && this.byte_2[2] != 0x43) { if (num2 == 0) this.LogThis("Demon not found!" + "" + Environment.NewLine + "Reply is: " + string.Format("{0:X2}", this.byte_2[2]) + " (Expected: " + string.Format("{0:X2}", 0x44) + ")"); num2++; goto Label_008A; } this.int_1 = this.byte_2[0]; this.string_0 = char.ConvertFromUtf32(this.byte_2[2]); this.int_2 = this.byte_2[1]; if (!this.Emu_Connected) { if (this.byte_2[2] != 0x43) { this.emulatorMoatesType_0 = EmulatorMoatesType.demon; //this.class10_0.dataloggingMode_0 = DataloggingMode.datalogDemon; //this.class10_0.IsNeptuneRTP = false; if (this.byte_2[0] == 1) { this.LogThis("Moates Demon1 (V" + this.int_1 + "." + this.int_2 + "." + this.string_0 + ")"); this.EmulatorName = "Moates Demon1"; //GetSerial(); } else if (this.byte_2[0] == 2) { this.LogThis("Moates Demon2 (V" + this.int_1 + "." + this.int_2 + "." + this.string_0 + ")"); this.EmulatorName = "Moates Demon2"; GetSerial(); } } else { this.LogThis("NeptuneRTP (V" + this.int_1 + "." + this.int_2 + "." + this.string_0 + ")"); this.LogThis("NeptuneRTP found"); this.EmulatorName = "NeptuneRTP"; this.emulatorMoatesType_0 = EmulatorMoatesType.neptuneRTP; //this.class10_0.dataloggingMode_0 = DataloggingMode.datalogMultiByteT; //this.class10_0.IsNeptuneRTP = true; this.byte_1 = new byte[4]; this.byte_2 = new byte[1]; return true; } } this.byte_1 = new byte[4]; this.byte_2 = new byte[1]; break; default: return false; } Label_0B58: if (num2 == num) { this.LogThis("Can't dectect '" + this.class10_settings_0.emulatorMode_0.ToString() + "' on " + this.serialPort_0.PortName); if (ShowError) MessageBox.Show(Form.ActiveForm, "Can't dectect '" + this.class10_settings_0.emulatorMode_0.ToString() + "' on " + this.serialPort_0.PortName + "" + Environment.NewLine + "See the debug logs for the issue", "Notification", MessageBoxButtons.OK, MessageBoxIcon.Hand); goto Label_10B9; } Label_0BEB: if (this.emulatorMoatesType_0 == EmulatorMoatesType.neptuneRTP) return true; this.byte_1 = new byte[4]; this.byte_1[0] = 0x42; this.byte_1[1] = 0x52; this.byte_1[2] = 0x52; this.byte_1[3] = 230; try { this.method_50(this.byte_1, 0, 4); this.byte_2[0] = this.method_52(); if (this.byte_2[0] == 0) goto Label_0D25; this.LogThis("Bad bank reply" + "" + Environment.NewLine + "Reply is: " + string.Format("{0:X2}", this.byte_2[0]) + " (Expected: " + string.Format("{0:X2}", 0) + ")"); } catch { num2++; goto Label_008A; } this.byte_1[0] = 0x42; this.byte_1[1] = 0x52; this.byte_1[2] = 0; this.byte_1[3] = 0x87; try { this.method_50(this.byte_1, 0, 4); this.byte_2[0] = this.method_52(); if (this.byte_2[0] == 0x4f) goto Label_0BEB; this.LogThis("Bad bank reset reply" + "" + Environment.NewLine + "Reply is: " + string.Format("{0:X2}", this.byte_2[0]) + " (Expected: " + string.Format("{0:X2}", 0x4f) + ")"); num2++; goto Label_0B58; } catch { num2++; goto Label_008A; } Label_0D25: this.byte_1 = new byte[4]; this.byte_1[0] = 0x42; this.byte_1[1] = 0x45; this.byte_1[2] = 0x52; this.byte_1[3] = 0xd9; try { this.method_50(this.byte_1, 0, 4); this.byte_2[0] = this.method_52(); if (this.byte_2[0] == 0x63) { this.LogThis("Bad bank reply" + "" + Environment.NewLine + "Reply is: " + string.Format("{0:X2}", this.byte_2[0]) + " (Expected: " + string.Format("{0:X2}", 1) + ")"); num2++; goto Label_0B58; } if (this.byte_2[0] == 1) goto Label_0ECC; num2++; this.LogThis("Bad bank reply" + "" + Environment.NewLine + "Reply is: " + string.Format("{0:X2}", this.byte_2[0]) + " (Expected: " + string.Format("{0:X2}", 1) + ")"); } catch { num2++; goto Label_008A; } this.byte_1[0] = 0x42; this.byte_1[1] = 0x53; this.byte_1[2] = 1; this.byte_1[3] = 150; try { this.method_50(this.byte_1, 0, 4); this.byte_2[0] = this.method_52(); if (this.byte_2[0] == 0x63) { this.LogThis("Bad bank reset reply" + "" + Environment.NewLine + "Reply is: " + string.Format("{0:X2}", this.byte_2[0]) + " (Expected: " + string.Format("{0:X2}", 0x4f) + ")"); num2++; } else if(this.byte_2[0] != 0x4f) { this.LogThis("Bad bank reset reply" + "" + Environment.NewLine + "Reply is: " + string.Format("{0:X2}", this.byte_2[0]) + " (Expected: " + string.Format("{0:X2}", 0x4f) + ")"); num2++; } goto Label_0B58; } catch { num2++; goto Label_008A; } Label_0ECC: this.byte_1 = new byte[4]; this.byte_1[0] = 0x42; this.byte_1[1] = 0x45; this.byte_1[2] = 0x53; this.byte_1[3] = 0xda; try { this.method_50(this.byte_1, 0, 4); this.byte_2[0] = this.method_52(); if (this.byte_2[0] == 0x63) { this.LogThis("Bad bank reply" + "" + Environment.NewLine + "Reply is: " + string.Format("{0:X2}", this.byte_2[0]) + " (Expected: " + string.Format("{0:X2}", 1) + ")"); num2++; goto Label_0B58; } if (this.byte_2[0] == 1) { this.LogThis("Demon found"); return true; } num2++; this.LogThis("Bad bank reply" + "" + Environment.NewLine + "Reply is: " + string.Format("{0:X2}", this.byte_2[0]) + " (Expected: " + string.Format("{0:X2}", 1) + ")"); } catch { num2++; goto Label_008A; } this.byte_1[0] = 0x42; this.byte_1[1] = 0x45; this.byte_1[2] = 1; this.byte_1[3] = 0x88; try { this.method_50(this.byte_1, 0, 4); this.byte_2[0] = this.method_52(); if (this.byte_2[0] == 0x63) { this.LogThis("Bad bank reset reply" + "" + Environment.NewLine + "Reply is: " + string.Format("{0:X2}", this.byte_2[0]) + " (Expected: " + string.Format("{0:X2}", 0x4f) + ")"); num2++; } else if (this.byte_2[0] != 0x4f) { this.LogThis("Bad bank reset reply" + "" + Environment.NewLine + "Reply is: " + string.Format("{0:X2}", this.byte_2[0]) + " (Expected: " + string.Format("{0:X2}", 0x4f) + ")"); num2++; } goto Label_0B58; } catch { num2++; goto Label_008A; } Label_10B9: return false; } /*public void ChangeBaudrate(int ThisBaud) { EmulatorDisconnect(); this.LogThis("Changing emulator baudrate on " + this.class10_0.string_2); this.byte_1 = new byte[5]; this.byte_2 = new byte[3]; this.byte_1[0] = 0x53; //S if (ThisBaud == 115200) { this.byte_1[1] = 7; //7 = set to 115220 this.byte_1[2] = 90; //Checksum this.serialPort_0 = new SerialPort(this.class10_0.string_2, 921600); } else if(ThisBaud == 921600) { this.byte_1[1] = 0; //0 = set to 921600 this.byte_1[2] = 0x53; //Checksum this.serialPort_0 = new SerialPort(this.class10_0.string_2, 115200); } this.serialPort_0.ReadTimeout = this.class10_0.int_20; this.serialPort_0.WriteTimeout = 500; this.serialPort_0.Encoding = Encoding.Default; try { this.serialPort_0.Open(); this.method_50(this.byte_1, 0, 3); this.byte_2[0] = this.method_52(); } catch { } if (this.byte_2[0] != 0x4f) this.LogThis("Can't change emulator baudrate on " + this.class10_0.string_2); else { this.LogThis("Emulator baudrate changed successfully on " + this.class10_0.string_2); this.class10_0.Emulator_Baud = ThisBaud; } EmulatorDisconnect(); }*/ public void EmulatorDisconnect() { this.SetConnected(false); if (!this.class10_settings_0.bool_31 && (this.serialPort_0 != null)) { try { if ((this.serialPort_0 != null) && this.serialPort_0.IsOpen) { if (this.serialPort_0.IsOpen) { this.serialPort_0.Close(); } this.serialPort_0.Dispose(); this.serialPort_0 = null; } } catch { } return; } if (this.class10_settings_0.bool_31) { if (!this.class17_0.method_34_GetConnected()) this.class17_0.method_20(); return; } } private byte method_40() { return this.byte_3; } private void method_41() { this.byte_3 = 0; } private void method_42(byte byte_8) { this.byte_3 = (byte) (this.byte_3 + byte_8); } private void method_43(byte[] byte_8, int int_4) { this.byte_3 = 0; for (int i = 0; i < int_4; i++) { this.byte_3 = (byte) (this.byte_3 + byte_8[i]); } } private void method_44(byte[] byte_8, int int_4, int int_5) { for (int i = 0; i < int_5; i++) { this.byte_0[int_4 + i] = byte_8[i]; } } private byte method_45() { byte num; try { this.method_49(6); num = this.method_52(); } catch (Exception exception) { throw exception; } return num; } private byte method_46(byte[] byte_8, int int_4, int int_5) { byte num = 0; for (int i = 0; i < int_5; i++) { num = (byte) (num + byte_8[i]); } return num; } private void method_47(int int_4) { if (this.class10_settings_0.bool_31) { if (this.method_10() && this.class17_0.method_34_GetConnected()) { this.class17_0.method_22(true); while (!this.class17_0.method_21()) { Application.DoEvents(); this.class17_0.method_22(true); } } this.class17_0.method_10(int_4); } else { this.serialPort_0.ReadTimeout = int_4; this.serialPort_0.WriteTimeout = 500; } } private void method_49(byte byte_8) { if (this.class10_settings_0.bool_31) { if (this.method_10() && this.class17_0.method_34_GetConnected()) { this.class17_0.method_22(true); while (!this.class17_0.method_21()) { Application.DoEvents(); this.class17_0.method_22(true); } } this.class17_0.method_14(byte_8); } else { this.serialPort_0.Write(((char) byte_8).ToString()); } } public bool method_5() { if (this.class10_settings_0.bool_31) { if (!this.class17_0.method_17()) { try { this.LogThis("Opening datalog port"); if (this.class17_0.method_19(true)) this.SetConnected(true); } catch (Exception) { this.LogThis("Can't open port: " + this.class10_settings_0.string_2); if (this.Report_Error) MessageBox.Show(Form.ActiveForm, "Can't open port: " + this.class10_settings_0.string_2 + "" + Environment.NewLine + "See the debug logs for the issue", "Notification", MessageBoxButtons.OK, MessageBoxIcon.Hand); this.SetConnected(false); return false; } } this.LogThis("Datalog port open: " + this.class17_0.method_17().ToString()); this.SetConnected(this.class17_0.method_17()); return this.class17_0.method_17(); } //######################################################################## if ((this.serialPort_0 != null) && this.serialPort_0.IsOpen) { LogThis("port: " + this.class10_settings_0.string_2.ToString() + " is already open!"); LogThis("Closing port: " + this.class10_settings_0.string_2.ToString()); EmulatorDisconnect(); //this.SetConnected(true); //return true; } if (!this.class10_settings_0.Emu_AutoScan) { bool DeviceConnected = TestConnect(this.class10_settings_0.string_2, this.class10_settings_0.Emulator_Baud); this.SetConnected(DeviceConnected); return DeviceConnected; } else { this.serialPort_0 = new SerialPort(this.class10_settings_0.string_2, this.class10_settings_0.Emulator_Baud); this.serialPort_0.ReadTimeout = this.class10_settings_0.int_20; this.serialPort_0.WriteTimeout = 500; this.serialPort_0.ReadBufferSize = 0x1100; this.serialPort_0.Encoding = Encoding.Default; try { this.serialPort_0.Open(); //this.LogThis("------------------------------"); //this.LogThis("Port open: " + this.class10_0.string_2 + " (Baud:" + this.class10_0.Emulator_Baud + ")"); this.SetConnected(true); return true; } catch { this.LogThis("Can't open port: " + this.class10_settings_0.string_2); if (this.Report_Error) MessageBox.Show(Form.ActiveForm, "Can't open port:" + this.class10_settings_0.string_2 + "" + Environment.NewLine + "See the debug logs for the issue", "Notification", MessageBoxButtons.OK, MessageBoxIcon.Hand); this.SetConnected(false); return false; } } } private void method_50(byte[] byte_8, int int_4, int int_5) { if (this.class10_settings_0.bool_31) { if (this.method_10() && this.class17_0.method_34_GetConnected()) { this.class17_0.method_22(true); while (!this.class17_0.method_21()) { Application.DoEvents(); this.class17_0.method_22(true); } } this.class17_0.method_16(byte_8, int_4, int_5); } else { this.serialPort_0.Write(byte_8, int_4, int_5); } } /*private void method_51(string string_1) { if (this.class10_settings_0.bool_31) { this.class18_0.class17_0.frmMain_0.LogThis("string sp.write with link emulation"); //throw new Exception("string sp.write with link emulation"); } this.serialPort_0.Write(string_1); }*/ private byte method_52() { if (!this.class10_settings_0.bool_31) { return (byte) this.serialPort_0.ReadByte(); } if (this.method_10() && this.class17_0.method_34_GetConnected()) { this.class17_0.method_22(true); while (!this.class17_0.method_21()) { Application.DoEvents(); this.class17_0.method_22(true); } } return this.class17_0.method_7(); } private void DiscardBuffer() { try { if (this.class10_settings_0.bool_31) { this.class17_0.DiscardBuffer(); } else { try { this.serialPort_0.DiscardInBuffer(); this.serialPort_0.DiscardOutBuffer(); } catch { this.class18_0.class17_0.frmMain_0.LogThis("Emulator SP.Discard failed"); //throw new Exception("Emulator SP.Discard failed"); } } } catch { } } private void method_54(byte[] byte_8, int int_4) { if (this.class10_settings_0.bool_31) { if (this.method_10() && this.class17_0.method_34_GetConnected()) { this.class17_0.method_22(true); while (!this.class17_0.method_21()) { Application.DoEvents(); this.class17_0.method_22(true); } } this.class17_0.method_11(byte_8, int_4); } else { this.method_15(int_4); this.serialPort_0.Read(byte_8, 0, int_4); } } private void LogThis(string string_1) { frmMain_0.LogThis("Emulator - " + string_1); } public bool GetConnected() { return this.Emu_Connected; } public void SetConnected(bool bool_11) { //this.Emu_SerialConnected = bool_11; this.Emu_Connected = bool_11; if (this.Emu_Connected) { this.method_14(EmulatorState.Connected); } else { this.method_14(EmulatorState.Disconnected); } } private void timer_0_Elapsed(object sender, ElapsedEventArgs e) { if (!this.bool_9) { if (this.queue_0 == null) { this.timer_0.Stop(); } else if (((this.queue_0.Count > 0) && this.class10_settings_0.bool_32) && !this.bool_9) { this.timer_0.Stop(); if (this.backgroundWorker_2 == null) { //if (this.class27_0 != null) this.class27_0 = null; //this.class27_0 = new Class27_EmuProgress(); //this.class27_0.method_0(ref this.class25_0, ref this.frmMain_0); this.backgroundWorker_2 = new BackgroundWorker(); this.backgroundWorker_2.WorkerReportsProgress = false; this.backgroundWorker_2.WorkerSupportsCancellation = true; this.backgroundWorker_2.DoWork += new DoWorkEventHandler(this.backgroundWorker_2_DoWork); this.backgroundWorker_2.RunWorkerCompleted += new RunWorkerCompletedEventHandler(this.backgroundWorker_2_RunWorkerCompleted); //this.backgroundWorker_2.ProgressChanged += new ProgressChangedEventHandler(this.backgroundWorker_2_ProgressChanged); } if (!this.backgroundWorker_2.IsBusy && !this.method_11()) { this.method_12(true); if (this.method_10() && this.class17_0.method_34_GetConnected()) { this.class17_0.method_22(true); while (!this.class17_0.method_21()) { Application.DoEvents(); this.class17_0.method_22(true); } } this.byte_1 = new byte[6]; this.backgroundWorker_2.RunWorkerAsync(); } } } } private void timer_1_Elapsed(object sender, ElapsedEventArgs e) { if (!this.class10_settings_0.bool_31) { 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) && (this.serialPort_0.PortName == portNames[i])) { this.timer_1.Start(); return; } } if (!flag) { try { if (this.serialPort_0 != null) this.serialPort_0.Close(); } catch (Exception) { } try { this.EmulatorDisconnect(); } catch (Exception) { throw; } this.LogThis("USB might be disconnected!"); } //} } } private void timer_2_Tick(object sender, EventArgs e) { this.bool_10 = true; } public delegate void Delegate65(EmulatorState emulatorState_0, int int_0, bool Emu_Connected); public delegate void Delegate66(int int_0); private delegate void Delegate67(); }