BMTuneSource/Class25.cs

3698 lines
156 KiB
C#

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<Struct16> 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<Struct16>();
}
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();
}