diff --git a/FlashProgrammer/FlashProgrammer.sln b/FlashProgrammer/FlashProgrammer.sln
new file mode 100644
index 0000000..cc4f844
--- /dev/null
+++ b/FlashProgrammer/FlashProgrammer.sln
@@ -0,0 +1,25 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 15
+VisualStudioVersion = 15.0.28307.102
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WindowsFormsApp1", "WindowsFormsApp1\WindowsFormsApp1.csproj", "{249DC3F3-7F25-49D9-8501-3372ADAA3D68}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {249DC3F3-7F25-49D9-8501-3372ADAA3D68}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {249DC3F3-7F25-49D9-8501-3372ADAA3D68}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {249DC3F3-7F25-49D9-8501-3372ADAA3D68}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {249DC3F3-7F25-49D9-8501-3372ADAA3D68}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {5C8F70E8-FD04-4CCF-840F-305E7A9168EF}
+ EndGlobalSection
+EndGlobal
diff --git a/FlashProgrammer/WindowsFormsApp1/App.config b/FlashProgrammer/WindowsFormsApp1/App.config
new file mode 100644
index 0000000..00bfd11
--- /dev/null
+++ b/FlashProgrammer/WindowsFormsApp1/App.config
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/FlashProgrammer/WindowsFormsApp1/Form1.Designer.cs b/FlashProgrammer/WindowsFormsApp1/Form1.Designer.cs
new file mode 100644
index 0000000..04f7475
--- /dev/null
+++ b/FlashProgrammer/WindowsFormsApp1/Form1.Designer.cs
@@ -0,0 +1,303 @@
+namespace WindowsFormsApp1
+{
+ partial class Form1
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ this.txtCOMPort = new System.Windows.Forms.TextBox();
+ this.label1 = new System.Windows.Forms.Label();
+ this.btnConnect = new System.Windows.Forms.Button();
+ this.txtData = new System.Windows.Forms.TextBox();
+ this.label2 = new System.Windows.Forms.Label();
+ this.btnRead = new System.Windows.Forms.Button();
+ this.btnWrite = new System.Windows.Forms.Button();
+ this.btnErase = new System.Windows.Forms.Button();
+ this.btnGetID = new System.Windows.Forms.Button();
+ this.btnDisconnect = new System.Windows.Forms.Button();
+ this.lblStatus = new System.Windows.Forms.Label();
+ this.txtMessages = new System.Windows.Forms.TextBox();
+ this.label3 = new System.Windows.Forms.Label();
+ this.txtStartAddress = new System.Windows.Forms.TextBox();
+ this.txtEndAddress = new System.Windows.Forms.TextBox();
+ this.label4 = new System.Windows.Forms.Label();
+ this.label5 = new System.Windows.Forms.Label();
+ this.btnClearData = new System.Windows.Forms.Button();
+ this.btnClearLog = new System.Windows.Forms.Button();
+ this.button1 = new System.Windows.Forms.Button();
+ this.SuspendLayout();
+ //
+ // txtCOMPort
+ //
+ this.txtCOMPort.Location = new System.Drawing.Point(17, 38);
+ this.txtCOMPort.Name = "txtCOMPort";
+ this.txtCOMPort.Size = new System.Drawing.Size(88, 20);
+ this.txtCOMPort.TabIndex = 0;
+ this.txtCOMPort.Text = "COM5";
+ //
+ // label1
+ //
+ this.label1.AutoSize = true;
+ this.label1.Location = new System.Drawing.Point(14, 22);
+ this.label1.Name = "label1";
+ this.label1.Size = new System.Drawing.Size(53, 13);
+ this.label1.TabIndex = 1;
+ this.label1.Text = "COM Port";
+ //
+ // btnConnect
+ //
+ this.btnConnect.Location = new System.Drawing.Point(111, 38);
+ this.btnConnect.Name = "btnConnect";
+ this.btnConnect.Size = new System.Drawing.Size(74, 20);
+ this.btnConnect.TabIndex = 2;
+ this.btnConnect.Text = "Connect";
+ this.btnConnect.UseVisualStyleBackColor = true;
+ this.btnConnect.Click += new System.EventHandler(this.btnConnect_Click);
+ //
+ // txtData
+ //
+ this.txtData.AcceptsReturn = true;
+ this.txtData.Location = new System.Drawing.Point(17, 94);
+ this.txtData.Multiline = true;
+ this.txtData.Name = "txtData";
+ this.txtData.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
+ this.txtData.Size = new System.Drawing.Size(682, 327);
+ this.txtData.TabIndex = 3;
+ //
+ // label2
+ //
+ this.label2.AutoSize = true;
+ this.label2.Location = new System.Drawing.Point(14, 78);
+ this.label2.Name = "label2";
+ this.label2.Size = new System.Drawing.Size(338, 13);
+ this.label2.TabIndex = 4;
+ this.label2.Text = "Hex Data - Changes here are NOT written to flash, edit the original file!";
+ //
+ // btnRead
+ //
+ this.btnRead.Enabled = false;
+ this.btnRead.Location = new System.Drawing.Point(483, 60);
+ this.btnRead.Name = "btnRead";
+ this.btnRead.Size = new System.Drawing.Size(68, 28);
+ this.btnRead.TabIndex = 5;
+ this.btnRead.Text = "Read";
+ this.btnRead.UseVisualStyleBackColor = true;
+ this.btnRead.Click += new System.EventHandler(this.btnRead_Click);
+ //
+ // btnWrite
+ //
+ this.btnWrite.Enabled = false;
+ this.btnWrite.Location = new System.Drawing.Point(557, 60);
+ this.btnWrite.Name = "btnWrite";
+ this.btnWrite.Size = new System.Drawing.Size(68, 28);
+ this.btnWrite.TabIndex = 6;
+ this.btnWrite.Text = "Write";
+ this.btnWrite.UseVisualStyleBackColor = true;
+ this.btnWrite.Click += new System.EventHandler(this.btnWrite_Click);
+ //
+ // btnErase
+ //
+ this.btnErase.Enabled = false;
+ this.btnErase.Location = new System.Drawing.Point(631, 61);
+ this.btnErase.Name = "btnErase";
+ this.btnErase.Size = new System.Drawing.Size(68, 27);
+ this.btnErase.TabIndex = 7;
+ this.btnErase.Text = "Erase";
+ this.btnErase.UseVisualStyleBackColor = true;
+ this.btnErase.Click += new System.EventHandler(this.btnErase_Click);
+ //
+ // btnGetID
+ //
+ this.btnGetID.Enabled = false;
+ this.btnGetID.Location = new System.Drawing.Point(411, 61);
+ this.btnGetID.Name = "btnGetID";
+ this.btnGetID.Size = new System.Drawing.Size(66, 27);
+ this.btnGetID.TabIndex = 8;
+ this.btnGetID.Text = "Get ID";
+ this.btnGetID.UseVisualStyleBackColor = true;
+ this.btnGetID.Click += new System.EventHandler(this.btnGetID_Click);
+ //
+ // btnDisconnect
+ //
+ this.btnDisconnect.Enabled = false;
+ this.btnDisconnect.Location = new System.Drawing.Point(191, 37);
+ this.btnDisconnect.Name = "btnDisconnect";
+ this.btnDisconnect.Size = new System.Drawing.Size(74, 20);
+ this.btnDisconnect.TabIndex = 9;
+ this.btnDisconnect.Text = "Disconnect";
+ this.btnDisconnect.UseVisualStyleBackColor = true;
+ this.btnDisconnect.Click += new System.EventHandler(this.btnDisconnect_Click);
+ //
+ // lblStatus
+ //
+ this.lblStatus.AutoSize = true;
+ this.lblStatus.Location = new System.Drawing.Point(271, 41);
+ this.lblStatus.Name = "lblStatus";
+ this.lblStatus.Size = new System.Drawing.Size(75, 13);
+ this.lblStatus.TabIndex = 10;
+ this.lblStatus.Text = "Status: Closed";
+ //
+ // txtMessages
+ //
+ this.txtMessages.Location = new System.Drawing.Point(17, 452);
+ this.txtMessages.Multiline = true;
+ this.txtMessages.Name = "txtMessages";
+ this.txtMessages.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
+ this.txtMessages.Size = new System.Drawing.Size(681, 85);
+ this.txtMessages.TabIndex = 11;
+ //
+ // label3
+ //
+ this.label3.AutoSize = true;
+ this.label3.Location = new System.Drawing.Point(17, 433);
+ this.label3.Name = "label3";
+ this.label3.Size = new System.Drawing.Size(71, 13);
+ this.label3.TabIndex = 12;
+ this.label3.Text = "Message Log";
+ //
+ // txtStartAddress
+ //
+ this.txtStartAddress.Location = new System.Drawing.Point(411, 31);
+ this.txtStartAddress.Name = "txtStartAddress";
+ this.txtStartAddress.Size = new System.Drawing.Size(139, 20);
+ this.txtStartAddress.TabIndex = 13;
+ this.txtStartAddress.Text = "0";
+ //
+ // txtEndAddress
+ //
+ this.txtEndAddress.Location = new System.Drawing.Point(557, 31);
+ this.txtEndAddress.Name = "txtEndAddress";
+ this.txtEndAddress.Size = new System.Drawing.Size(139, 20);
+ this.txtEndAddress.TabIndex = 14;
+ this.txtEndAddress.Text = "524287";
+ //
+ // label4
+ //
+ this.label4.AutoSize = true;
+ this.label4.Location = new System.Drawing.Point(407, 17);
+ this.label4.Name = "label4";
+ this.label4.Size = new System.Drawing.Size(70, 13);
+ this.label4.TabIndex = 15;
+ this.label4.Text = "Start Address";
+ //
+ // label5
+ //
+ this.label5.AutoSize = true;
+ this.label5.Location = new System.Drawing.Point(554, 17);
+ this.label5.Name = "label5";
+ this.label5.Size = new System.Drawing.Size(67, 13);
+ this.label5.TabIndex = 16;
+ this.label5.Text = "End Address";
+ //
+ // btnClearData
+ //
+ this.btnClearData.Location = new System.Drawing.Point(524, 427);
+ this.btnClearData.Name = "btnClearData";
+ this.btnClearData.Size = new System.Drawing.Size(77, 22);
+ this.btnClearData.TabIndex = 17;
+ this.btnClearData.Text = "Clear Data";
+ this.btnClearData.UseVisualStyleBackColor = true;
+ this.btnClearData.Click += new System.EventHandler(this.btnClearData_Click);
+ //
+ // btnClearLog
+ //
+ this.btnClearLog.Location = new System.Drawing.Point(622, 427);
+ this.btnClearLog.Name = "btnClearLog";
+ this.btnClearLog.Size = new System.Drawing.Size(77, 22);
+ this.btnClearLog.TabIndex = 18;
+ this.btnClearLog.Text = "Clear Log";
+ this.btnClearLog.UseVisualStyleBackColor = true;
+ this.btnClearLog.Click += new System.EventHandler(this.btnClearLog_Click);
+ //
+ // button1
+ //
+ this.button1.Location = new System.Drawing.Point(347, 8);
+ this.button1.Name = "button1";
+ this.button1.Size = new System.Drawing.Size(51, 29);
+ this.button1.TabIndex = 19;
+ this.button1.Text = "button1";
+ this.button1.UseVisualStyleBackColor = true;
+ this.button1.Visible = false;
+ this.button1.Click += new System.EventHandler(this.button1_Click);
+ //
+ // Form1
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(715, 546);
+ this.Controls.Add(this.button1);
+ this.Controls.Add(this.btnClearLog);
+ this.Controls.Add(this.btnClearData);
+ this.Controls.Add(this.label5);
+ this.Controls.Add(this.label4);
+ this.Controls.Add(this.txtEndAddress);
+ this.Controls.Add(this.txtStartAddress);
+ this.Controls.Add(this.label3);
+ this.Controls.Add(this.txtMessages);
+ this.Controls.Add(this.lblStatus);
+ this.Controls.Add(this.btnDisconnect);
+ this.Controls.Add(this.btnGetID);
+ this.Controls.Add(this.btnErase);
+ this.Controls.Add(this.btnWrite);
+ this.Controls.Add(this.btnRead);
+ this.Controls.Add(this.label2);
+ this.Controls.Add(this.txtData);
+ this.Controls.Add(this.btnConnect);
+ this.Controls.Add(this.label1);
+ this.Controls.Add(this.txtCOMPort);
+ this.Name = "Form1";
+ this.Text = "SST39SF0x0A Flash Programmer";
+ this.Load += new System.EventHandler(this.Form1_Load);
+ this.ResumeLayout(false);
+ this.PerformLayout();
+
+ }
+
+ #endregion
+
+ private System.Windows.Forms.TextBox txtCOMPort;
+ private System.Windows.Forms.Label label1;
+ private System.Windows.Forms.Button btnConnect;
+ private System.Windows.Forms.TextBox txtData;
+ private System.Windows.Forms.Label label2;
+ private System.Windows.Forms.Button btnRead;
+ private System.Windows.Forms.Button btnWrite;
+ private System.Windows.Forms.Button btnErase;
+ private System.Windows.Forms.Button btnGetID;
+ private System.Windows.Forms.Button btnDisconnect;
+ private System.Windows.Forms.Label lblStatus;
+ private System.Windows.Forms.TextBox txtMessages;
+ private System.Windows.Forms.Label label3;
+ private System.Windows.Forms.TextBox txtStartAddress;
+ private System.Windows.Forms.TextBox txtEndAddress;
+ private System.Windows.Forms.Label label4;
+ private System.Windows.Forms.Label label5;
+ private System.Windows.Forms.Button btnClearData;
+ private System.Windows.Forms.Button btnClearLog;
+ private System.Windows.Forms.Button button1;
+ }
+}
+
diff --git a/FlashProgrammer/WindowsFormsApp1/Form1.cs b/FlashProgrammer/WindowsFormsApp1/Form1.cs
new file mode 100644
index 0000000..fe94b9c
--- /dev/null
+++ b/FlashProgrammer/WindowsFormsApp1/Form1.cs
@@ -0,0 +1,240 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Threading;
+using System.Windows.Forms;
+using System.IO.Ports;
+using System.IO;
+
+namespace WindowsFormsApp1
+{
+ public partial class Form1 : Form
+ {
+ //File Open Dialog for writing to Flash, we'll need to add a File Save one as well for Dumped data once we've also done the read processing
+ private System.Windows.Forms.OpenFileDialog openFileDialog1 = new System.Windows.Forms.OpenFileDialog();
+
+ SerialPort serial = new SerialPort();
+ bool _continue;
+
+ //Used to store the file we read in before writing to Flash
+ byte[] writeData;
+
+ public Form1()
+ {
+ InitializeComponent();
+ openFileDialog1.Title = "Select file to flash to Flash, Flashy eh!?";
+ }
+
+ private void Form1_Load(object sender, EventArgs e)
+ {
+ //Find last com port and list it in the control.
+
+ }
+
+ private void AddToMessageLog(string textToAdd)
+ {
+ txtMessages.Text += textToAdd;
+ }
+
+ private void btnConnect_Click(object sender, EventArgs e)
+ {
+ //Set default parameters for the serial port and open it
+ serial.Parity = Parity.None;
+ serial.ReadBufferSize = 256;
+ serial.StopBits = StopBits.One;
+ serial.WriteBufferSize = 256;
+ serial.DataBits = 8;
+ serial.BaudRate = 115200;
+ serial.Handshake = Handshake.None;
+ //serial.ReadTimeout = 1500;
+ //serial.WriteTimeout = 1500;
+ serial.PortName = txtCOMPort.Text;
+ serial.Open();
+ _continue = true;
+
+ //Add handler to handle incoming data packets
+ serial.DataReceived += new SerialDataReceivedEventHandler(Serial_DataReceived);
+
+ if (serial.IsOpen)
+ {
+ btnConnect.Enabled = false;
+ btnDisconnect.Enabled = true;
+ lblStatus.Text = "Status: Connected";
+
+ btnGetID.Enabled = true;
+ btnRead.Enabled = true;
+ btnWrite.Enabled = true;
+ btnErase.Enabled = true;
+ } else
+ {
+ lblStatus.Text = "Status: Unable to connect!";
+ btnGetID.Enabled = false;
+ btnRead.Enabled = false;
+ btnWrite.Enabled = false;
+ btnErase.Enabled = false;
+ }
+ }
+
+ private delegate void SetTextDeleg(string text); //Hex Data box text
+ private delegate void SetMsgTextDeleg(string text); //Message box text
+
+ private void Serial_DataReceived(object sender, SerialDataReceivedEventArgs e)
+ {
+ //try
+ //{
+ string data = serial.ReadLine(); //This line is problematic and maybe should be serial.ReadBytes???
+ if (data.StartsWith("0x"))
+ this.BeginInvoke(new SetTextDeleg(SerialIn_DataReceived), new object[] { data });
+ else
+ this.BeginInvoke(new SetMsgTextDeleg(SerialIn_DataReceived2), new object[] { data });
+ //} catch(Exception ex)
+ //{
+ //}
+ }
+
+ private void SerialIn_DataReceived(string data) { txtData.Text += data + Environment.NewLine; }
+ private void SerialIn_DataReceived2(string data) { txtMessages.Text += data + Environment.NewLine; }
+
+ private void btnDisconnect_Click(object sender, EventArgs e)
+ {
+ if (serial.IsOpen)
+ {
+ serial.Close();
+ serial.DataReceived -= new SerialDataReceivedEventHandler(Serial_DataReceived);
+ }
+
+ if (!serial.IsOpen)
+ {
+ btnConnect.Enabled = true;
+ btnDisconnect.Enabled = false;
+ btnGetID.Enabled = false;
+ btnRead.Enabled = false;
+ btnWrite.Enabled = false;
+ btnErase.Enabled = false;
+ lblStatus.Text = "Status: Closed";
+ } else
+ {
+ btnConnect.Enabled = false;
+ btnDisconnect.Enabled = true;
+ btnGetID.Enabled = true;
+ btnRead.Enabled = true;
+ btnWrite.Enabled = true;
+ btnErase.Enabled = true;
+ lblStatus.Text = "Status: Open";
+ }
+ }
+
+ private void btnGetID_Click(object sender, EventArgs e)
+ {
+ if(serial.IsOpen)
+ {
+ serial.WriteLine("");
+ }
+ }
+
+ private void btnRead_Click(object sender, EventArgs e)
+ {
+ //This needs the same treatment as the write function, namely streaming data back so it's faster
+ if(serial.IsOpen)
+ {
+ serial.WriteLine("");
+ }
+ }
+
+ private void btnWrite_Click(object sender, EventArgs e)
+ {
+ //Warn that the chip must be erased before hand, do they want to erase it first or attempt an overwrite which may go wrong!?!?!
+ MessageBox.Show("The chip should be erased before writing or you'll end up with dodgy data stored in it!", "Warning!");
+
+ //Open a file dialog and allow any file up to a max of 524288 bytes in length.
+ openFileDialog1.ShowDialog();
+
+ string filename = openFileDialog1.FileName;
+ if (filename == "")
+ {
+ txtMessages.Text += "Flash was not written to, user cancelled operation!";
+ return;
+ }
+ else
+ {
+ txtMessages.Text += "File selected was: " + filename;
+ string result = WriteFileToFlash(filename);
+ txtMessages.Text += result;
+ }
+ //Construct a base command with address counter and write the data byte by byte as is required by the chip.
+ }
+
+ string WriteFileToFlash(string filename)
+ {
+ string result = "FAILED!";
+
+ //Open the file and read into a byte array
+ byte[] dataArray = File.ReadAllBytes(filename);
+
+ //Write the bytes one at a time until done
+ if (!serial.IsOpen)
+ return "Failed to Write as not connected to Arduino Mega!";
+
+ txtMessages.Text += "Writing Flash starting at address 0x0000. Please Wait...";
+ int addressCounter = 0;
+
+ //send then where x is 256 or the number of bytes to write, lastly send and then the full amount of bytes in sequence
+ //- Arduino side seems to work just need this side to
+ int totalSize = dataArray.Length;
+
+ serial.WriteLine("");
+ serial.WriteLine("");
+ serial.Write("");
+
+ int offset = 0;
+ int block = 256;
+ if (block > totalSize)
+ block = totalSize;
+
+ //This part needs checking before allowing a write to Flash!!!!!!!
+ while(offset < totalSize)
+ {
+ serial.Write(dataArray, offset, block);
+ if (offset + block > totalSize)
+ offset = totalSize - (offset + block);
+ else
+ offset += block;
+ Application.DoEvents();
+ }
+ //Read the bytes back and compare, using a dump command, ignore and don't read data past where it was written...
+
+ return "Success: Wrote " + (addressCounter + 1).ToString() + " bytes to Flash." + Environment.NewLine;
+ }
+
+ private void btnErase_Click(object sender, EventArgs e)
+ {
+ if(serial.IsOpen)
+ {
+ txtMessages.Text += "Erasing entire chip, I hope you wanted to do this as it's now too late!";
+ serial.WriteLine("");
+ }
+ }
+
+ private void btnClearData_Click(object sender, EventArgs e)
+ {
+ txtData.Text = "";
+ }
+
+ private void btnClearLog_Click(object sender, EventArgs e)
+ {
+ txtMessages.Text = "";
+ }
+
+ private void button1_Click(object sender, EventArgs e)
+ {
+ serial.WriteLine("");
+ serial.Write("");
+ byte[] x = new byte[10] { 48, 49, 50, 51, 52, 53, 54, 55, 56, 57 };
+ serial.Write(x, 0, 10);
+ }
+ }
+}
diff --git a/FlashProgrammer/WindowsFormsApp1/Form1.resx b/FlashProgrammer/WindowsFormsApp1/Form1.resx
new file mode 100644
index 0000000..29dcb1b
--- /dev/null
+++ b/FlashProgrammer/WindowsFormsApp1/Form1.resx
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/FlashProgrammer/WindowsFormsApp1/Program.cs b/FlashProgrammer/WindowsFormsApp1/Program.cs
new file mode 100644
index 0000000..a92ad70
--- /dev/null
+++ b/FlashProgrammer/WindowsFormsApp1/Program.cs
@@ -0,0 +1,22 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+
+namespace WindowsFormsApp1
+{
+ static class Program
+ {
+ ///
+ /// The main entry point for the application.
+ ///
+ [STAThread]
+ static void Main()
+ {
+ Application.EnableVisualStyles();
+ Application.SetCompatibleTextRenderingDefault(false);
+ Application.Run(new Form1());
+ }
+ }
+}
diff --git a/FlashProgrammer/WindowsFormsApp1/Properties/AssemblyInfo.cs b/FlashProgrammer/WindowsFormsApp1/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..3cc132a
--- /dev/null
+++ b/FlashProgrammer/WindowsFormsApp1/Properties/AssemblyInfo.cs
@@ -0,0 +1,36 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("WindowsFormsApp1")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("WindowsFormsApp1")]
+[assembly: AssemblyCopyright("Copyright © 2022")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components. If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("249dc3f3-7f25-49d9-8501-3372adaa3d68")]
+
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/FlashProgrammer/WindowsFormsApp1/Properties/Resources.Designer.cs b/FlashProgrammer/WindowsFormsApp1/Properties/Resources.Designer.cs
new file mode 100644
index 0000000..795bca6
--- /dev/null
+++ b/FlashProgrammer/WindowsFormsApp1/Properties/Resources.Designer.cs
@@ -0,0 +1,71 @@
+//------------------------------------------------------------------------------
+//
+// This code was generated by a tool.
+// Runtime Version:4.0.30319.42000
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+namespace WindowsFormsApp1.Properties
+{
+
+
+ ///
+ /// A strongly-typed resource class, for looking up localized strings, etc.
+ ///
+ // This class was auto-generated by the StronglyTypedResourceBuilder
+ // class via a tool like ResGen or Visual Studio.
+ // To add or remove a member, edit your .ResX file then rerun ResGen
+ // with the /str option, or rebuild your VS project.
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ internal class Resources
+ {
+
+ private static global::System.Resources.ResourceManager resourceMan;
+
+ private static global::System.Globalization.CultureInfo resourceCulture;
+
+ [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+ internal Resources()
+ {
+ }
+
+ ///
+ /// Returns the cached ResourceManager instance used by this class.
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Resources.ResourceManager ResourceManager
+ {
+ get
+ {
+ if ((resourceMan == null))
+ {
+ global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("WindowsFormsApp1.Properties.Resources", typeof(Resources).Assembly);
+ resourceMan = temp;
+ }
+ return resourceMan;
+ }
+ }
+
+ ///
+ /// Overrides the current thread's CurrentUICulture property for all
+ /// resource lookups using this strongly typed resource class.
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Globalization.CultureInfo Culture
+ {
+ get
+ {
+ return resourceCulture;
+ }
+ set
+ {
+ resourceCulture = value;
+ }
+ }
+ }
+}
diff --git a/FlashProgrammer/WindowsFormsApp1/Properties/Resources.resx b/FlashProgrammer/WindowsFormsApp1/Properties/Resources.resx
new file mode 100644
index 0000000..ffecec8
--- /dev/null
+++ b/FlashProgrammer/WindowsFormsApp1/Properties/Resources.resx
@@ -0,0 +1,117 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/FlashProgrammer/WindowsFormsApp1/Properties/Settings.Designer.cs b/FlashProgrammer/WindowsFormsApp1/Properties/Settings.Designer.cs
new file mode 100644
index 0000000..4b5c318
--- /dev/null
+++ b/FlashProgrammer/WindowsFormsApp1/Properties/Settings.Designer.cs
@@ -0,0 +1,30 @@
+//------------------------------------------------------------------------------
+//
+// This code was generated by a tool.
+// Runtime Version:4.0.30319.42000
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+namespace WindowsFormsApp1.Properties
+{
+
+
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")]
+ internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase
+ {
+
+ private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
+
+ public static Settings Default
+ {
+ get
+ {
+ return defaultInstance;
+ }
+ }
+ }
+}
diff --git a/FlashProgrammer/WindowsFormsApp1/Properties/Settings.settings b/FlashProgrammer/WindowsFormsApp1/Properties/Settings.settings
new file mode 100644
index 0000000..abf36c5
--- /dev/null
+++ b/FlashProgrammer/WindowsFormsApp1/Properties/Settings.settings
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/FlashProgrammer/WindowsFormsApp1/WindowsFormsApp1.csproj b/FlashProgrammer/WindowsFormsApp1/WindowsFormsApp1.csproj
new file mode 100644
index 0000000..9aafb31
--- /dev/null
+++ b/FlashProgrammer/WindowsFormsApp1/WindowsFormsApp1.csproj
@@ -0,0 +1,83 @@
+
+
+
+
+ Debug
+ AnyCPU
+ {249DC3F3-7F25-49D9-8501-3372ADAA3D68}
+ WinExe
+ WindowsFormsApp1
+ WindowsFormsApp1
+ v4.6.1
+ 512
+ true
+ true
+
+
+ AnyCPU
+ true
+ full
+ false
+ bin\Debug\
+ DEBUG;TRACE
+ prompt
+ 4
+
+
+ AnyCPU
+ pdbonly
+ true
+ bin\Release\
+ TRACE
+ prompt
+ 4
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Form
+
+
+ Form1.cs
+
+
+
+
+ Form1.cs
+
+
+ ResXFileCodeGenerator
+ Resources.Designer.cs
+ Designer
+
+
+ True
+ Resources.resx
+
+
+ SettingsSingleFileGenerator
+ Settings.Designer.cs
+
+
+ True
+ Settings.settings
+ True
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/FlashProgrammer/WindowsFormsApp1/bin/Debug/WindowsFormsApp1.exe b/FlashProgrammer/WindowsFormsApp1/bin/Debug/WindowsFormsApp1.exe
new file mode 100644
index 0000000..aec491f
Binary files /dev/null and b/FlashProgrammer/WindowsFormsApp1/bin/Debug/WindowsFormsApp1.exe differ
diff --git a/FlashProgrammer/WindowsFormsApp1/bin/Debug/WindowsFormsApp1.exe.config b/FlashProgrammer/WindowsFormsApp1/bin/Debug/WindowsFormsApp1.exe.config
new file mode 100644
index 0000000..00bfd11
--- /dev/null
+++ b/FlashProgrammer/WindowsFormsApp1/bin/Debug/WindowsFormsApp1.exe.config
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/FlashProgrammer/WindowsFormsApp1/bin/Debug/WindowsFormsApp1.pdb b/FlashProgrammer/WindowsFormsApp1/bin/Debug/WindowsFormsApp1.pdb
new file mode 100644
index 0000000..7570f54
Binary files /dev/null and b/FlashProgrammer/WindowsFormsApp1/bin/Debug/WindowsFormsApp1.pdb differ
diff --git a/FlashProgrammer/WindowsFormsApp1/obj/Debug/DesignTimeResolveAssemblyReferences.cache b/FlashProgrammer/WindowsFormsApp1/obj/Debug/DesignTimeResolveAssemblyReferences.cache
new file mode 100644
index 0000000..5b58f9b
Binary files /dev/null and b/FlashProgrammer/WindowsFormsApp1/obj/Debug/DesignTimeResolveAssemblyReferences.cache differ
diff --git a/FlashProgrammer/WindowsFormsApp1/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache b/FlashProgrammer/WindowsFormsApp1/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache
new file mode 100644
index 0000000..2da3283
Binary files /dev/null and b/FlashProgrammer/WindowsFormsApp1/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache differ
diff --git a/FlashProgrammer/WindowsFormsApp1/obj/Debug/TemporaryGeneratedFile_036C0B5B-1481-4323-8D20-8F5ADCB23D92.cs b/FlashProgrammer/WindowsFormsApp1/obj/Debug/TemporaryGeneratedFile_036C0B5B-1481-4323-8D20-8F5ADCB23D92.cs
new file mode 100644
index 0000000..e69de29
diff --git a/FlashProgrammer/WindowsFormsApp1/obj/Debug/TemporaryGeneratedFile_5937a670-0e60-4077-877b-f7221da3dda1.cs b/FlashProgrammer/WindowsFormsApp1/obj/Debug/TemporaryGeneratedFile_5937a670-0e60-4077-877b-f7221da3dda1.cs
new file mode 100644
index 0000000..e69de29
diff --git a/FlashProgrammer/WindowsFormsApp1/obj/Debug/TemporaryGeneratedFile_E7A71F73-0F8D-4B9B-B56E-8E70B10BC5D3.cs b/FlashProgrammer/WindowsFormsApp1/obj/Debug/TemporaryGeneratedFile_E7A71F73-0F8D-4B9B-B56E-8E70B10BC5D3.cs
new file mode 100644
index 0000000..e69de29
diff --git a/FlashProgrammer/WindowsFormsApp1/obj/Debug/WindowsFormsApp1.Form1.resources b/FlashProgrammer/WindowsFormsApp1/obj/Debug/WindowsFormsApp1.Form1.resources
new file mode 100644
index 0000000..6c05a97
Binary files /dev/null and b/FlashProgrammer/WindowsFormsApp1/obj/Debug/WindowsFormsApp1.Form1.resources differ
diff --git a/FlashProgrammer/WindowsFormsApp1/obj/Debug/WindowsFormsApp1.Properties.Resources.resources b/FlashProgrammer/WindowsFormsApp1/obj/Debug/WindowsFormsApp1.Properties.Resources.resources
new file mode 100644
index 0000000..6c05a97
Binary files /dev/null and b/FlashProgrammer/WindowsFormsApp1/obj/Debug/WindowsFormsApp1.Properties.Resources.resources differ
diff --git a/FlashProgrammer/WindowsFormsApp1/obj/Debug/WindowsFormsApp1.csproj.CoreCompileInputs.cache b/FlashProgrammer/WindowsFormsApp1/obj/Debug/WindowsFormsApp1.csproj.CoreCompileInputs.cache
new file mode 100644
index 0000000..fcfba1f
--- /dev/null
+++ b/FlashProgrammer/WindowsFormsApp1/obj/Debug/WindowsFormsApp1.csproj.CoreCompileInputs.cache
@@ -0,0 +1 @@
+da0445e18e4b94cfcafff6d497f1be35ed1c86e9
diff --git a/FlashProgrammer/WindowsFormsApp1/obj/Debug/WindowsFormsApp1.csproj.FileListAbsolute.txt b/FlashProgrammer/WindowsFormsApp1/obj/Debug/WindowsFormsApp1.csproj.FileListAbsolute.txt
new file mode 100644
index 0000000..99bff9d
--- /dev/null
+++ b/FlashProgrammer/WindowsFormsApp1/obj/Debug/WindowsFormsApp1.csproj.FileListAbsolute.txt
@@ -0,0 +1,10 @@
+C:\Users\Daniel.000\Documents\Visual Studio 2017\Projects\FlashProgrammer\WindowsFormsApp1\bin\Debug\WindowsFormsApp1.exe.config
+C:\Users\Daniel.000\Documents\Visual Studio 2017\Projects\FlashProgrammer\WindowsFormsApp1\bin\Debug\WindowsFormsApp1.exe
+C:\Users\Daniel.000\Documents\Visual Studio 2017\Projects\FlashProgrammer\WindowsFormsApp1\bin\Debug\WindowsFormsApp1.pdb
+C:\Users\Daniel.000\Documents\Visual Studio 2017\Projects\FlashProgrammer\WindowsFormsApp1\obj\Debug\WindowsFormsApp1.csprojAssemblyReference.cache
+C:\Users\Daniel.000\Documents\Visual Studio 2017\Projects\FlashProgrammer\WindowsFormsApp1\obj\Debug\WindowsFormsApp1.Form1.resources
+C:\Users\Daniel.000\Documents\Visual Studio 2017\Projects\FlashProgrammer\WindowsFormsApp1\obj\Debug\WindowsFormsApp1.Properties.Resources.resources
+C:\Users\Daniel.000\Documents\Visual Studio 2017\Projects\FlashProgrammer\WindowsFormsApp1\obj\Debug\WindowsFormsApp1.csproj.GenerateResource.cache
+C:\Users\Daniel.000\Documents\Visual Studio 2017\Projects\FlashProgrammer\WindowsFormsApp1\obj\Debug\WindowsFormsApp1.csproj.CoreCompileInputs.cache
+C:\Users\Daniel.000\Documents\Visual Studio 2017\Projects\FlashProgrammer\WindowsFormsApp1\obj\Debug\WindowsFormsApp1.exe
+C:\Users\Daniel.000\Documents\Visual Studio 2017\Projects\FlashProgrammer\WindowsFormsApp1\obj\Debug\WindowsFormsApp1.pdb
diff --git a/FlashProgrammer/WindowsFormsApp1/obj/Debug/WindowsFormsApp1.csproj.GenerateResource.cache b/FlashProgrammer/WindowsFormsApp1/obj/Debug/WindowsFormsApp1.csproj.GenerateResource.cache
new file mode 100644
index 0000000..d647e13
Binary files /dev/null and b/FlashProgrammer/WindowsFormsApp1/obj/Debug/WindowsFormsApp1.csproj.GenerateResource.cache differ
diff --git a/FlashProgrammer/WindowsFormsApp1/obj/Debug/WindowsFormsApp1.csprojAssemblyReference.cache b/FlashProgrammer/WindowsFormsApp1/obj/Debug/WindowsFormsApp1.csprojAssemblyReference.cache
new file mode 100644
index 0000000..5ed2ae1
Binary files /dev/null and b/FlashProgrammer/WindowsFormsApp1/obj/Debug/WindowsFormsApp1.csprojAssemblyReference.cache differ
diff --git a/FlashProgrammer/WindowsFormsApp1/obj/Debug/WindowsFormsApp1.exe b/FlashProgrammer/WindowsFormsApp1/obj/Debug/WindowsFormsApp1.exe
new file mode 100644
index 0000000..aec491f
Binary files /dev/null and b/FlashProgrammer/WindowsFormsApp1/obj/Debug/WindowsFormsApp1.exe differ
diff --git a/FlashProgrammer/WindowsFormsApp1/obj/Debug/WindowsFormsApp1.pdb b/FlashProgrammer/WindowsFormsApp1/obj/Debug/WindowsFormsApp1.pdb
new file mode 100644
index 0000000..7570f54
Binary files /dev/null and b/FlashProgrammer/WindowsFormsApp1/obj/Debug/WindowsFormsApp1.pdb differ