BMTuneSource/Class5_burn.cs

1008 lines
34 KiB
C#

//using PropertiesRes;
using System;
using System.ComponentModel;
using System.IO.Ports;
using System.Runtime.CompilerServices;
using System.Text;
using System.Threading;
using System.Windows.Forms;
internal class Class5_burn
{
private BackgroundWorker backgroundWorker_0;
private BackgroundWorker backgroundWorker_1;
private BackgroundWorker backgroundWorker_2;
private bool bool_0;
private bool bool_1;
private bool bool_2;
private bool bool_3;
private bool bool_4;
private bool bool_SST256;
private byte[] byte_0;
private byte[] byte_1;
private byte[] byte_2;
private byte byte_3;
private Class10_settings class10_settings_0;
private Class17 class17_0;
private Class18 class18_0;
private int int_0;
private long long_0;
private string BMBurnerTitle = "";
private string BMBurnerDesc = "";
private SerialPort serialPort_0;
public frmBurner frmBurner_0;
private int FirmwareNumber = 0;
private bool IsBMBurner = false;
public byte[] byte_ALL = new byte[] { };
private bool SecondPass = false;
public event Delegate8 delegate8_0;
public event Delegate9 delegate9_0;
internal Class5_burn(ref Class18 rm, ref Class10_settings cfg, ref Class17 dt, ref FrmMain frmM)
{
this.class10_settings_0 = cfg;
this.class17_0 = dt;
this.class18_0 = rm;
}
private byte GetByteAt(long Location)
{
byte RByte= 0;
if (byte_ALL.Length >= Location + 1) RByte = byte_ALL[Location];
return RByte;
}
private string GetConnectedTitleString()
{
if (BMBurnerTitle != "")
{
if (this.bool_2) return " Connected";
return " Disconnected";
}
return "Connecting Burner...";
}
private void backgroundWorker_0_DoWork(object sender, DoWorkEventArgs e)
{
this.bool_2 = false;
this.int_0 = 1;
BMBurnerDesc = "Detecting burner";
UpdateTileText();
try
{
if (this.class10_settings_0.burnCommCache != 0)
{
this.int_0 = this.class10_settings_0.burnCommCache;
this.bool_2 = false;
if (this.serialPort_0 != null)
{
if (this.serialPort_0.IsOpen) this.serialPort_0.Close();
this.serialPort_0.Dispose();
this.serialPort_0 = null;
}
if (this.method_5())
{
this.bool_2 = true;
return;
}
}
}
catch
{
}
this.int_0 = 1;
Label_00A0:
try
{
if (this.int_0 == 41)
{
LogThis("Burner NOT found!");
this.bool_2 = false;
if (this.serialPort_0 != null)
{
if (this.serialPort_0.IsOpen) this.serialPort_0.Close();
this.serialPort_0.Dispose();
this.serialPort_0 = null;
}
BMBurnerDesc = "Device not found!";
UpdateTileText();
}
else if (this.method_5())
{
LogThis("Burner found on COM" + this.int_0);
this.class10_settings_0.burnCommCache = this.int_0;
this.bool_2 = true;
BMBurnerDesc = "Device found!";
UpdateTileText();
}
else
{
this.int_0++;
goto Label_00A0;
}
}
catch (Exception)
{
if (this.serialPort_0 != null)
{
this.serialPort_0.Dispose();
this.serialPort_0 = null;
}
this.int_0++;
goto Label_00A0;
}
}
//Burn Write Chip
private void backgroundWorker_1_DoWork(object sender, DoWorkEventArgs e)
{
ChangeAccTime();
DialogResult result = DialogResult.OK;
if (IsBurnerV2())
{
if (this.frmBurner_0.ChipSelectBox.Text == "W27C512 (Fake Winbond SST)" || this.frmBurner_0.ChipSelectBox.Text == "W27E512") result = MessageBox.Show(Form.ActiveForm, "Set the BMBurner on 14v then press OK", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
if (this.frmBurner_0.ChipSelectBox.Text == "27SF512") result = MessageBox.Show(Form.ActiveForm, "Set the BMBurner on 12v then press OK", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
else
{
if (this.frmBurner_0.ChipSelectBox.Text == "W27C512 (Fake Winbond SST)" || this.frmBurner_0.ChipSelectBox.Text == "W27E512")
{
if (IsBMBurner) result = MessageBox.Show(Form.ActiveForm, "This version of BMBurner CANNOT change voltage to 14v" + Environment.NewLine + Environment.NewLine + "It's possible the chip won't erase correctly!", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Error);
else result = MessageBox.Show(Form.ActiveForm, "The Burn2 CANNOT change voltage to 14v" + Environment.NewLine + Environment.NewLine + "It's possible the chip won't erase correctly!", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
if (result != DialogResult.OK) return;
byte num2 = 0;
int num3 = 0;
int num4 = 0;
int num5 = 0;
this.byte_1 = new byte[0x106];
if (this.backgroundWorker_1.CancellationPending)
{
goto Label_02F7;
}
long num = 0L;
num3 = 0;
//chip index
if (bool_SST256)
{
num4 = 0x36;
}
else
{
if (!this.bool_4)
{
num4 = 0x35;
}
else
{
num4 = 50;
}
}
Label_0043:
this.serialPort_0.ReadTimeout = 0x7d0;
this.serialPort_0.WriteTimeout = 110;
if (num5 == 3)
{
LogThis("Failed to erase SST after " + this.class10_settings_0.int_21.ToString() + " tries");
MessageBox.Show(Form.ActiveForm, "Failed to erase SST");
return;
}
if (num4 == 53)
{
LogThis("Erasing chip");
BMBurnerDesc = "Erasing chip";
UpdateTileText();
this.byte_1[0] = (byte) num4;
this.byte_1[1] = 0x45;
this.byte_1[2] = this.method_10(this.byte_1, 0, 2);
try
{
this.method_7(this.byte_1, 0, 3);
num2 = this.method_9();
}
catch (Exception)
{
num5++;
goto Label_0043;
}
if (num2 != 0x4f)
{
num5++;
goto Label_0043;
}
}
this.serialPort_0.ReadTimeout = 1000;
this.serialPort_0.WriteTimeout = 500;
if (IsBurnerV2() && this.frmBurner_0.ChipSelectBox.Text == "W27C512 (Fake Winbond SST)" || this.frmBurner_0.ChipSelectBox.Text == "W27E512") result = MessageBox.Show(Form.ActiveForm, "Set the BMBurner on 12v then press OK", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
Label_010B:
if ((num3 - 1) == this.class10_settings_0.int_21)
{
LogThis("Uploading failed after " + this.class10_settings_0.int_21.ToString() + " tries");
MessageBox.Show(Form.ActiveForm, "Uploading failed after " + this.class10_settings_0.int_21.ToString() + " on Burner", "Burner Notification", MessageBoxButtons.OK, MessageBoxIcon.Hand);
}
else
{
if (num < 0x8000L)
{
//LogThis("Writing chip at 0x" + num.ToString("X4"));
if (SecondPass)
{
BMBurnerDesc = "Writing 2nd 2Timer chip";
UpdateTileText();
}
else
{
BMBurnerDesc = "Writing chip";
UpdateTileText();
}
this.backgroundWorker_1.ReportProgress((int) ((((double) num) / 32768.0) * 100.0));
try
{
this.byte_1[0] = (byte) num4;
this.byte_1[1] = 0x57;
this.byte_1[2] = 0;
if (!SecondPass)
{
this.byte_1[3] = this.class18_0.method_148(this.long_0 + num);
this.byte_1[4] = this.class18_0.method_147(this.long_0 + num);
}
else
{
this.byte_1[3] = this.class18_0.method_148(this.long_0 + num + 0x8000L);
this.byte_1[4] = this.class18_0.method_147(this.long_0 + num + 0x8000L);
}
for (int i = 0; i < 0x100; i++)
{
if (!SecondPass) this.byte_1[5 + i] = GetByteAt(num + i);
else this.byte_1[5 + i] = GetByteAt(num + i + 32768);
//this.byte_1[5 + i] = this.class18_0.method_150(num + i);
}
this.byte_1[0x105] = this.method_10(this.byte_1, 0, 0x105);
this.method_7(this.byte_1, 0, 0x106);
if (this.method_9() == 0x4f)
{
num += 0xffL;
num += 1L;
if (frmBurner_0.Is2Timer && num >= 0x8000L)
{
if (!SecondPass)
{
num = 0L;
SecondPass = true;
LogThis("Writing 2nd 2Timer chip");
}
else
{
SecondPass = false;
}
}
}
else
{
num3++;
}
goto Label_010B;
}
catch
{
num3++;
goto Label_010B;
}
}
}
Label_02F7:
if (this.backgroundWorker_1 != null) this.backgroundWorker_1.ReportProgress(100);
num = 0L;
}
private void backgroundWorker_1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
if (this.delegate8_0 != null)
{
this.delegate8_0(e.ProgressPercentage);
}
}
private void backgroundWorker_1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
this.backgroundWorker_1.Dispose();
this.backgroundWorker_1 = null;
this.byte_1 = null;
this.byte_2 = null;
this.byte_0 = null;
this.method_18(frmBurner_0, false);
this.serialPort_0.Close();
this.serialPort_0.Dispose();
this.serialPort_0 = null;
this.bool_2 = false;
this.bool_0 = false;
UpdateTileText();
GC.Collect();
}
private void backgroundWorker_2_DoWork(object sender, DoWorkEventArgs e)
{
int num2 = 0;
this.byte_1 = new byte[7];
this.byte_2 = new byte[260];
int num3 = 0;
if (bool_SST256)
{
num3 = 0x36;
}
else
{
if (!this.bool_4)
{
num3 = 0x35;
}
else
{
num3 = 50;
}
}
this.serialPort_0.ReadTimeout = 1000;
this.serialPort_0.WriteTimeout = 500;
if (this.backgroundWorker_2.CancellationPending)
{
goto Label_0238;
}
long num = 0L;
num2 = 0;
Label_005A:
if ((num2 - 1) == 3)
{
this.bool_3 = true;
LogThis("Burner failed to read");
MessageBox.Show(Form.ActiveForm, "Burner failed to read", "Burner Notification", MessageBoxButtons.OK, MessageBoxIcon.Hand);
}
else if (num < 0x8000L)
{
//LogThis("Reading chip at 0x" + num.ToString("X4"));
if (SecondPass)
{
BMBurnerDesc = "Verifying 2nd 2Timer chip";
UpdateTileText();
}
this.backgroundWorker_2.ReportProgress((int) ((((double) num) / 32768.0) * 100.0));
this.method_12();
this.byte_1[0] = (byte) num3;
this.byte_1[1] = 0x52;
this.byte_1[2] = 0;
if (!SecondPass)
{
this.byte_1[3] = this.class18_0.method_148(this.long_0 + num);
this.byte_1[4] = this.class18_0.method_147(this.long_0 + num);
}
else
{
this.byte_1[3] = this.class18_0.method_148(this.long_0 + num + 0x8000L);
this.byte_1[4] = this.class18_0.method_147(this.long_0 + num + 0x8000L);
}
this.byte_1[5] = this.method_10(this.byte_1, 0, 5);
try
{
this.method_7(this.byte_1, 0, 6);
int Tries = 0;
while (this.serialPort_0.BytesToRead < 0x100 && Tries < 5)
{
Application.DoEvents();
int Tries_Fast = 0;
while (this.serialPort_0.BytesToRead < 0x100 && Tries_Fast < 50)
{
Thread.Sleep(1);
Tries_Fast++;
}
if (this.serialPort_0.BytesToRead < 0x100)
{
if (Tries >= 3) this.method_7(this.byte_1, 0, 6);
Thread.Sleep(50);
Tries++;
}
}
this.serialPort_0.Read(this.byte_2, 0, 0x100);
if (num == 0L)
{
for (int i = 0; i < 0x100; i++)
{
}
}
this.method_14(this.byte_2, 0x100);
byte num5 = this.method_9();
if (this.method_11() != num5)
{
this.serialPort_0.DiscardInBuffer();
this.bool_3 = true;
num2++;
}
else
{
if (!SecondPass) this.method_15(this.byte_2, (int) num, 0x100);
else this.method_15(this.byte_2, (int)num + 32768, 0x100);
num += 0xffL;
num += 1L;
this.bool_3 = false;
if (frmBurner_0.Is2Timer && num >= 0x8000L)
{
if (!SecondPass)
{
num = 0L;
SecondPass = true;
LogThis("Reading 2nd 2Timer chip");
}
else
{
SecondPass = false;
}
}
}
}
catch (Exception)
{
if (this.serialPort_0 != null)
if (this.serialPort_0.IsOpen) this.serialPort_0.DiscardInBuffer();
num2++;
}
goto Label_005A;
}
Label_0238:
this.backgroundWorker_2.ReportProgress(100);
this.byte_1 = null;
this.byte_2 = null;
num2 = 0;
num = 0L;
}
private void backgroundWorker_2_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
if (this.delegate8_0 != null)
{
this.delegate8_0(e.ProgressPercentage);
}
}
private void backgroundWorker_2_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
if (!this.bool_1)
{
if (!this.bool_3)
{
this.class18_0.method_67(this.byte_0, false);
}
this.backgroundWorker_2.Dispose();
this.backgroundWorker_2 = null;
this.bool_2 = false;
this.bool_0 = false;
//this.byte_0 = null;
this.serialPort_0.Close();
this.serialPort_0.Dispose();
this.serialPort_0 = null;
if (!this.bool_3)
{
if (!this.class18_0.method_30_HasFileLoadedInBMTune()) FailRead();
else
{
LogThis("Chip succesfully read");
BMBurnerDesc = "Succesfully read";
UpdateTileText();
}
}
else
{
FailRead();
}
}
this.byte_1 = null;
this.byte_2 = null;
GC.Collect();
}
private void FailRead()
{
LogThis("Chip failed to read");
BMBurnerDesc = "Failed to read";
UpdateTileText();
if (MessageBox.Show(Form.ActiveForm, "Do you want to save a copy of the file?", "BMTune", MessageBoxButtons.YesNo, MessageBoxIcon.Hand) == DialogResult.Yes)
{
this.class18_0.SetAllByte(this.byte_0);
this.class18_0.method_70();
this.class18_0.SetByteNull();
this.byte_0 = null;
}
}
internal bool method_0()
{
return this.bool_4;
}
internal void method_1(bool bool_5)
{
this.bool_4 = bool_5;
}
internal bool method_0_SST256()
{
return this.bool_SST256;
}
internal void method_1_SST256(bool bool_5)
{
this.bool_SST256 = bool_5;
}
private byte method_10(byte[] byte_4, int int_1, int int_2)
{
byte num = 0;
for (int i = 0; i < int_2; i++)
{
num = (byte) (num + byte_4[i]);
}
return num;
}
private byte method_11()
{
return this.byte_3;
}
private void method_12()
{
this.byte_3 = 0;
}
private void method_13(byte byte_4)
{
this.byte_3 = (byte) (this.byte_3 + byte_4);
}
private void method_14(byte[] byte_4, int int_1)
{
for (int i = 0; i < int_1; i++)
{
this.byte_3 = (byte) (this.byte_3 + byte_4[i]);
}
}
private void method_15(byte[] byte_4, int int_1, int int_2)
{
for (int i = 0; i < int_2; i++)
{
this.byte_0[int_1 + i] = byte_4[i];
}
}
public void method_16(frmBurner TFRM)
{
frmBurner_0 = TFRM;
if (!this.method_4())
{
this.bool_0 = false;
}
else
{
LogThis("Writing chip");
this.backgroundWorker_1 = new BackgroundWorker();
this.backgroundWorker_1.WorkerReportsProgress = true;
this.backgroundWorker_1.WorkerSupportsCancellation = true;
this.backgroundWorker_1.DoWork += new DoWorkEventHandler(this.backgroundWorker_1_DoWork);
this.backgroundWorker_1.RunWorkerCompleted += new RunWorkerCompletedEventHandler(this.backgroundWorker_1_RunWorkerCompleted);
this.backgroundWorker_1.ProgressChanged += new ProgressChangedEventHandler(this.backgroundWorker_1_ProgressChanged);
this.backgroundWorker_1.RunWorkerAsync();
while (this.backgroundWorker_1 != null && this.backgroundWorker_1.IsBusy)
{
Application.DoEvents();
}
if (this.backgroundWorker_1 != null)
{
this.backgroundWorker_1.Dispose();
this.backgroundWorker_1 = null;
}
}
}
public void method_17(frmBurner TFRM)
{
frmBurner_0 = TFRM;
this.class18_0.method_68();
if (!this.method_4())
{
this.bool_0 = false;
}
else
{
this.byte_0 = new byte[0x8000];
if (!this.bool_1)
{
LogThis("Reading chip");
BMBurnerDesc = "Reading chip";
UpdateTileText();
}
this.backgroundWorker_2 = new BackgroundWorker();
this.backgroundWorker_2.WorkerSupportsCancellation = true;
this.backgroundWorker_2.WorkerReportsProgress = true;
this.backgroundWorker_2.DoWork += new DoWorkEventHandler(this.backgroundWorker_2_DoWork);
this.backgroundWorker_2.ProgressChanged += new ProgressChangedEventHandler(this.backgroundWorker_2_ProgressChanged);
this.backgroundWorker_2.RunWorkerCompleted += new RunWorkerCompletedEventHandler(this.backgroundWorker_2_RunWorkerCompleted);
this.backgroundWorker_2.RunWorkerAsync();
while (this.backgroundWorker_2 != null && this.backgroundWorker_2.IsBusy)
{
Application.DoEvents();
}
if (this.backgroundWorker_2 != null)
{
this.backgroundWorker_2.Dispose();
this.backgroundWorker_2 = null;
}
}
}
public void method_18(frmBurner TFRM, bool bool_5)
{
frmBurner_0 = TFRM;
if (bool_5 && !this.method_4())
{
this.bool_0 = false;
}
else
{
int ThisLenght = 32768;
if (frmBurner_0.Is2Timer) ThisLenght = ThisLenght * 2;
this.byte_0 = new byte[ThisLenght];
this.bool_1 = true;
LogThis("Verifying chip");
BMBurnerDesc = "Chip verifying";
UpdateTileText();
this.backgroundWorker_2 = new BackgroundWorker();
this.backgroundWorker_2.WorkerSupportsCancellation = true;
this.backgroundWorker_2.WorkerReportsProgress = true;
this.backgroundWorker_2.DoWork += new DoWorkEventHandler(this.backgroundWorker_2_DoWork);
this.backgroundWorker_2.ProgressChanged += new ProgressChangedEventHandler(this.backgroundWorker_2_ProgressChanged);
this.backgroundWorker_2.RunWorkerCompleted += new RunWorkerCompletedEventHandler(this.backgroundWorker_2_RunWorkerCompleted);
this.backgroundWorker_2.RunWorkerAsync();
while (this.backgroundWorker_2 != null && this.backgroundWorker_2.IsBusy)
{
Application.DoEvents();
}
if (this.backgroundWorker_2 != null)
{
this.backgroundWorker_2.Dispose();
this.backgroundWorker_2 = null;
}
for (int i = 0; i < ThisLenght; i++)
{
if (this.byte_0[i] != GetByteAt((long)i))
//if (this.byte_0[i] != this.class18_0.method_150((long) i))
{
LogThis("Chip NOT verified!");
BMBurnerDesc = "Chip NOT verified!";
UpdateTileText();
return;
}
}
LogThis("Chip verified");
BMBurnerDesc = "Chip verified";
UpdateTileText();
this.byte_0 = null;
this.bool_1 = false;
GC.Collect();
}
}
private void UpdateTileText()
{
if (this.delegate9_0 != null)
{
this.delegate9_0(BMBurnerTitle + GetConnectedTitleString() + " - " + BMBurnerDesc);
}
}
private void LogThis(string string_1)
{
this.class17_0.frmMain_0.LogThis("Burner - " + string_1);
}
internal long method_2()
{
return this.long_0;
}
internal void method_3(long long_1)
{
this.long_0 = long_1;
}
internal bool method_4()
{
LogThis("Detecting Burner");
BMBurnerTitle = "";
this.backgroundWorker_0 = new BackgroundWorker();
this.backgroundWorker_0.DoWork += new DoWorkEventHandler(this.backgroundWorker_0_DoWork);
this.backgroundWorker_0.WorkerReportsProgress = false;
this.backgroundWorker_0.WorkerSupportsCancellation = false;
this.backgroundWorker_0.RunWorkerAsync();
while (this.backgroundWorker_0.IsBusy)
{
Application.DoEvents();
}
this.bool_0 = false;
if (!this.bool_2 && this.frmBurner_0 != null) this.frmBurner_0.button1.Enabled = true;
return this.bool_2;
}
private bool method_5()
{
int num = 3;
int num2 = 0;
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("COM" + this.int_0.ToString(), 0x1c200);
this.serialPort_0.ReadTimeout = 1000;
this.serialPort_0.WriteTimeout = 500;
this.serialPort_0.Encoding = Encoding.Default;
this.serialPort_0.Open();
this.LogThis("------------------------------");
this.LogThis("Port open:COM" + this.int_0.ToString() + " (Baud:115200)");
//this.byte_1 = new byte[5];
this.byte_1 = new byte[2];
this.byte_2 = new byte[3];
Label_00B8:
if ((num2 + 1) != num)
{
this.byte_1 = new byte[2];
this.byte_1[0] = 0x56;
this.byte_1[1] = 0x56;
try
{
this.method_7(this.byte_1, 0, 2);
for (int i = 0; i < 3; i++)
{
this.byte_2[i] = this.method_9();
}
if (this.byte_2[0] == 5)
{
TestBMBurner();
if (BMBurnerTitle == "") BMBurnerTitle = "Moates Burn1/2";
return true;
}
}
catch
{
this.serialPort_0.DiscardInBuffer();
try
{
this.byte_1 = new byte[3];
this.byte_1[0] = 0x53;
this.byte_1[1] = 0;
this.byte_1[2] = 0x53;
this.method_7(this.byte_1, 0, 3);
this.serialPort_0.DiscardInBuffer();
this.serialPort_0.Close();
this.serialPort_0 = new SerialPort("COM" + this.int_0.ToString(), 0xe1000);
this.serialPort_0.ReadTimeout = 1000;
this.serialPort_0.WriteTimeout = 500;
this.serialPort_0.Open();
this.LogThis("Port open:COM" + this.int_0.ToString() + " (Baud:921600)");
this.byte_1 = new byte[2];
this.byte_1[0] = 0x56;
this.byte_1[1] = 0x56;
try
{
this.method_7(this.byte_1, 0, 2);
for (int j = 0; j < 3; j++)
{
this.byte_2[j] = this.method_9();
}
if (this.byte_2[0] == 5)
{
TestBMBurner();
if (BMBurnerTitle == "") BMBurnerTitle = "Moates Burn1/2";
return true;
}
this.LogThis("Can't dectect Burner on COM" + this.int_0.ToString());
}
catch
{
this.LogThis("Can't dectect Burner on COM" + this.int_0.ToString());
num2++;
}
}
catch
{
this.LogThis("Can't dectect Burner on COM" + this.int_0.ToString());
num2++;
}
goto Label_00B8;
}
}
this.serialPort_0.Close();
this.serialPort_0.Dispose();
this.serialPort_0 = null;
return false;
}
public void ChangeAccTime()
{
if (IsBurnerV2())
{
this.LogThis("Changing chip Access Time to: " + frmBurner_0.LastAccessTime + "ns");
byte[] Commands = new byte[2];
Commands[0] = Convert.ToByte('A');
Commands[1] = (byte)frmBurner_0.LastAccessTime;
byte num2 = 0;
try
{
this.method_7(Commands, 0, 2);
num2 = this.method_9();
}
catch { }
if (num2 == 0x4f)
{
this.LogThis("Chip Access Time changed succesfully");
}
else
{
this.LogThis("Error when changing chip Access Time");
//MessageBox.Show(Form.ActiveForm, "Error when changing chip Access Time", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
else
{
if (IsBMBurner)
{
if ((this.frmBurner_0.LastAccessTime != 70 && this.frmBurner_0.ChipSelectBox.Text != "AT29C256")
|| (this.frmBurner_0.LastAccessTime != 20)) MessageBox.Show(Form.ActiveForm, "This version of BMBurner CANNOT change AccessTime" + Environment.NewLine + Environment.NewLine + "It's possible the chip won't write correctly!", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
else
{
if ((this.frmBurner_0.LastAccessTime != 20 && this.frmBurner_0.ChipSelectBox.Text == "SST27SF512")
|| (this.frmBurner_0.LastAccessTime != 70 && this.frmBurner_0.ChipSelectBox.Text == "SST27SF512 (Fake 70ns)")
|| (this.frmBurner_0.LastAccessTime != 70 && this.frmBurner_0.ChipSelectBox.Text == "AT29C256")) MessageBox.Show(Form.ActiveForm, "The Burn2 CANNOT change AccessTime" + Environment.NewLine + Environment.NewLine + "It's possible the chip won't write correctly!", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
private void TestBMBurner()
{
byte[] BurnerVersion = this.byte_2;
int int_1 = BurnerVersion[0];
int int_2 = BurnerVersion[1];
string string_V = char.ConvertFromUtf32(BurnerVersion[2]);
byte[] BurnerVersionFirmware = new byte[2];
if (this.serialPort_0.IsOpen) this.serialPort_0.DiscardInBuffer();
if (this.serialPort_0.IsOpen) this.serialPort_0.DiscardOutBuffer();
IsBMBurner = false;
//try
//{
this.byte_1 = new byte[2];
this.byte_1[0] = Convert.ToByte('F');
this.byte_1[1] = Convert.ToByte('F');
this.method_7(this.byte_1, 0, 2);
for (int j = 0; j < 2; j++) BurnerVersionFirmware[j] = this.method_9();
if (BurnerVersionFirmware[0] < 50)
{
IsBMBurner = true;
}
//Console.WriteLine("firmware V" + BurnerVersionFirmware[0] + "." + BurnerVersionFirmware[1]);
//}
//catch {
/*try
{
//##########################
//testing old bmburner function
this.byte_1 = new byte[2];
this.byte_1[0] = Convert.ToByte('F');
this.byte_1[1] = Convert.ToByte('F');
this.method_7(this.byte_1, 0, 2);
for (int j = 0; j < 2; j++) BurnerVersionFirmware[j] = this.method_9();
IsBMBurner = true;
//##########################
}
catch
{
}*/
//}
if (IsBMBurner)
{
FirmwareNumber = (BurnerVersionFirmware[0] * 10) + BurnerVersionFirmware[1];
if (FirmwareNumber >= 13)
{
this.LogThis("BMBurner V2.X (firmware V" + BurnerVersionFirmware[0] + "." + BurnerVersionFirmware[1] + ")");
BMBurnerTitle = "BMBurner V2.X";
}
else
{
if (this.serialPort_0.BaudRate == 115200)
{
this.LogThis("BMBurner V1.0 (firmware V" + BurnerVersionFirmware[0] + "." + BurnerVersionFirmware[1] + ")");
BMBurnerTitle = "BMBurner V1.0";
}
else if (this.serialPort_0.BaudRate == 921600)
{
this.LogThis("BMBurner V1.1 (firmware V" + BurnerVersionFirmware[0] + "." + BurnerVersionFirmware[1] + ")");
BMBurnerTitle = "BMBurner V1.1";
}
}
}
else
{
this.LogThis("Moates Burn1/2 (V" + int_1 + "." + int_2 + "." + string_V + ")");
BMBurnerTitle = "Moates Burn1/2";
IsBMBurner = false;
}
}
private bool IsBurnerV2()
{
if (IsBMBurner)
{
if (FirmwareNumber >= 13) return true;
else return false;
}
return false;
}
private void method_6(byte byte_4)
{
this.serialPort_0.Write(((char) byte_4).ToString());
}
private void method_7(byte[] byte_4, int int_1, int int_2)
{
this.serialPort_0.Write(byte_4, int_1, int_2);
}
private void method_8(string string_0)
{
this.serialPort_0.Write(string_0);
}
private byte method_9()
{
return (byte) this.serialPort_0.ReadByte();
}
public delegate void Delegate8(int int_0);
public delegate void Delegate9(string string_0);
}