1008 lines
34 KiB
C#
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);
|
|
}
|
|
|