From 7108a9d7b78038c1f92da99b28802336e8c6f9af Mon Sep 17 00:00:00 2001 From: D R Date: Wed, 21 Sep 2022 11:40:22 +0100 Subject: [PATCH] Added VS2017 Windows Application - Flash Programmer This is still not finished but does work to a point. It does miss off the last parts of the GetID function information returned from the Arduino though. Writing, reading and erasing do work but I would use with caution and test everything before trying out on a Flash chip you can't do without!! Later features will be to correct the GetID function, streaming the read data and allowing a sector erase as well as the entire chip erase function. I'll leave in the old commands so terminal use will still work. Enjoy! --- FlashProgrammer/FlashProgrammer.sln | 25 ++ FlashProgrammer/WindowsFormsApp1/App.config | 6 + .../WindowsFormsApp1/Form1.Designer.cs | 303 ++++++++++++++++++ FlashProgrammer/WindowsFormsApp1/Form1.cs | 240 ++++++++++++++ FlashProgrammer/WindowsFormsApp1/Form1.resx | 120 +++++++ FlashProgrammer/WindowsFormsApp1/Program.cs | 22 ++ .../Properties/AssemblyInfo.cs | 36 +++ .../Properties/Resources.Designer.cs | 71 ++++ .../Properties/Resources.resx | 117 +++++++ .../Properties/Settings.Designer.cs | 30 ++ .../Properties/Settings.settings | 7 + .../WindowsFormsApp1/WindowsFormsApp1.csproj | 83 +++++ .../bin/Debug/WindowsFormsApp1.exe | Bin 0 -> 17408 bytes .../bin/Debug/WindowsFormsApp1.exe.config | 6 + .../bin/Debug/WindowsFormsApp1.pdb | Bin 0 -> 36352 bytes .../DesignTimeResolveAssemblyReferences.cache | Bin 0 -> 1443 bytes ...gnTimeResolveAssemblyReferencesInput.cache | Bin 0 -> 7361 bytes ...le_036C0B5B-1481-4323-8D20-8F5ADCB23D92.cs | 0 ...le_5937a670-0e60-4077-877b-f7221da3dda1.cs | 0 ...le_E7A71F73-0F8D-4B9B-B56E-8E70B10BC5D3.cs | 0 .../Debug/WindowsFormsApp1.Form1.resources | Bin 0 -> 180 bytes ...wsFormsApp1.Properties.Resources.resources | Bin 0 -> 180 bytes ...wsFormsApp1.csproj.CoreCompileInputs.cache | 1 + ...ndowsFormsApp1.csproj.FileListAbsolute.txt | 10 + ...owsFormsApp1.csproj.GenerateResource.cache | Bin 0 -> 1012 bytes ...owsFormsApp1.csprojAssemblyReference.cache | Bin 0 -> 11490 bytes .../obj/Debug/WindowsFormsApp1.exe | Bin 0 -> 17408 bytes .../obj/Debug/WindowsFormsApp1.pdb | Bin 0 -> 36352 bytes 28 files changed, 1077 insertions(+) create mode 100644 FlashProgrammer/FlashProgrammer.sln create mode 100644 FlashProgrammer/WindowsFormsApp1/App.config create mode 100644 FlashProgrammer/WindowsFormsApp1/Form1.Designer.cs create mode 100644 FlashProgrammer/WindowsFormsApp1/Form1.cs create mode 100644 FlashProgrammer/WindowsFormsApp1/Form1.resx create mode 100644 FlashProgrammer/WindowsFormsApp1/Program.cs create mode 100644 FlashProgrammer/WindowsFormsApp1/Properties/AssemblyInfo.cs create mode 100644 FlashProgrammer/WindowsFormsApp1/Properties/Resources.Designer.cs create mode 100644 FlashProgrammer/WindowsFormsApp1/Properties/Resources.resx create mode 100644 FlashProgrammer/WindowsFormsApp1/Properties/Settings.Designer.cs create mode 100644 FlashProgrammer/WindowsFormsApp1/Properties/Settings.settings create mode 100644 FlashProgrammer/WindowsFormsApp1/WindowsFormsApp1.csproj create mode 100644 FlashProgrammer/WindowsFormsApp1/bin/Debug/WindowsFormsApp1.exe create mode 100644 FlashProgrammer/WindowsFormsApp1/bin/Debug/WindowsFormsApp1.exe.config create mode 100644 FlashProgrammer/WindowsFormsApp1/bin/Debug/WindowsFormsApp1.pdb create mode 100644 FlashProgrammer/WindowsFormsApp1/obj/Debug/DesignTimeResolveAssemblyReferences.cache create mode 100644 FlashProgrammer/WindowsFormsApp1/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache create mode 100644 FlashProgrammer/WindowsFormsApp1/obj/Debug/TemporaryGeneratedFile_036C0B5B-1481-4323-8D20-8F5ADCB23D92.cs create mode 100644 FlashProgrammer/WindowsFormsApp1/obj/Debug/TemporaryGeneratedFile_5937a670-0e60-4077-877b-f7221da3dda1.cs create mode 100644 FlashProgrammer/WindowsFormsApp1/obj/Debug/TemporaryGeneratedFile_E7A71F73-0F8D-4B9B-B56E-8E70B10BC5D3.cs create mode 100644 FlashProgrammer/WindowsFormsApp1/obj/Debug/WindowsFormsApp1.Form1.resources create mode 100644 FlashProgrammer/WindowsFormsApp1/obj/Debug/WindowsFormsApp1.Properties.Resources.resources create mode 100644 FlashProgrammer/WindowsFormsApp1/obj/Debug/WindowsFormsApp1.csproj.CoreCompileInputs.cache create mode 100644 FlashProgrammer/WindowsFormsApp1/obj/Debug/WindowsFormsApp1.csproj.FileListAbsolute.txt create mode 100644 FlashProgrammer/WindowsFormsApp1/obj/Debug/WindowsFormsApp1.csproj.GenerateResource.cache create mode 100644 FlashProgrammer/WindowsFormsApp1/obj/Debug/WindowsFormsApp1.csprojAssemblyReference.cache create mode 100644 FlashProgrammer/WindowsFormsApp1/obj/Debug/WindowsFormsApp1.exe create mode 100644 FlashProgrammer/WindowsFormsApp1/obj/Debug/WindowsFormsApp1.pdb 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 0000000000000000000000000000000000000000..aec491f80c378d47f250e9440d43bab9a535ebef GIT binary patch literal 17408 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 + + + + + \ 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 0000000000000000000000000000000000000000..7570f54dc53a0fef540f7046107e92730534fd30 GIT binary patch literal 36352 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 literal 0 HcmV?d00001 diff --git a/FlashProgrammer/WindowsFormsApp1/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache b/FlashProgrammer/WindowsFormsApp1/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache new file mode 100644 index 0000000000000000000000000000000000000000..2da3283bd09d766e7a46ca7fbd7290487a3a64ca GIT binary patch literal 7361 zcmeHMZByGu5Vm=_U{%Q1P2>~xgZ9(2EFbOE=G-!iLV;_f5}>cwJ;PNQxN;9RxjE3+Yv&p!>PlA8LuA#I zf|}4qHG2~>XqW+V;cZlO+8L)%Zk+3SB}4HZ)WeILi$d3Z-Xy^D6Wf7yr!{d?Nf)%1 zY6Vv>4BCVt*Pa62Rumc$Kzqu0O)W3!nMlJHR6#+As!B=*sPr9bx~4j8)ht( z8b&#kPNy0Eqf8C`Ia+RN0|AC7?yqYo;Ow6v1SMSiB|7VEVR!eEA$THoxF5kL7wYZP z?$EMPBCO@CK)X`;qS8BKbN~B@EiUqTcYdL;G&=|RXG?pz%hvIUE;R{1?Df~JpSZeo zdJv*XL{axNC87KikEuQ%ph18p5krFj?bnNQFHJl+GmK(9GeWncB#;iIGFMRG#~6tW ziE$DWD8|`UlqoieqIkU3W=_w`NTeHFfzu_sj=izA-Q|$E!#R7wF625Cv`shHj!xJ$ z)bvMs^||v}BLQ`aJQU#D`F!3fN;e81G}>uVbgRYDt*80IqSIzH+9~;5AKgBgoP=k-r$_28{%LhW^A{#2}Y;%3ut#Hf>`P5Z|!d2o4E? z@o-I6ax|?RTql#ABi@)xUoQ*`MwJE)U_GKD`RXrAQmFMOVmoJ z`?5*TqS&&Bh_|049vSr|g4B`(DJqUnnp$kpR|s~HB-jQR`-L&BWA+Hqf+W$}?*Kb~ z3B(3|jgW4VkiQ0g4D?OXo+O}`BK(ceM(CA2AesZB+1HXvzw@-1+U#Q~E6}6+TKo=U z`-iRCD)#(6(tT%rSZW&7k*KQt(UMmZao_LF?{ikYyEitL`4*pgohwTT3)R`#V-&9w zdBkTaABr)a;LS)0YvgIljpBsq^kUMKEPc?LrR<5WEM-u%UiLkTnd8+9i}oihhrLtB zFGOglOiT6Kbv!&L><4VWeY|~fMY?&yZ0zq(QuZTinmpd(4I#S47xO z)3TI(QF6)(D3aMy_7qj`B@!(q?s5-Pk!+mZAis@O1_p+SK%5g?SzMBus~417oL^d$oLUTL1*ImYq!#HYR*8GxXUf^%t3Noi54ZC+|=Nl{{sjzU0bQch;FcWPxwes*e}ZIZcpqG__J onW3ezNveT`r81^vrFkWpxv4PQgHubGfR2KJ07n-P+5+SQ04Y>DD*ylh literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..6c05a9776bd7cbae976fdcec7e3a254e93018279 GIT binary patch literal 180 zcmX?i>is@O1_p+SK%5g?SzMBus~417oL^d$oLUTL1*ImYq!#HYR*8GxXUf^%t3Noi54ZC+|=Nl{{sjzU0bQch;FcWPxwes*e}ZIZcpqG__J onW3ezNveT`r81^vrFkWpxv4PQgHubGfR2KJ07n-P+5+SQ04Y>DD*ylh literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..d647e135e6f44bce9674d93061556abed93f1f04 GIT binary patch literal 1012 zcma)4!EVz)5VafIjhz%6Bvc_dM2G`YA}dxE!6ia8QJ|ug3aKg%2(-?Q#VQ+bw7W)4 zzkq*0`~x4rAMgi=D>wcDW~{cVS_^d!}tdG8VWRL4P-hg=l#ROJRa46;ijECS*gLyj@5=>{Mv}KuueUWLVF~6NL zgSTP@K)JveZaykzEMrM;r@@r_F~6<>e{k3#=_xQT#hUok#q zG^5S4Ni@f5xndf0OcZ0q;ZUnjf`e{SV1`5U@Nb&nn8^|hQZ^jlZ#C<<_RecPs!_0a zt^S|aPoLePuA)i?H5fM0xg?165CA{tfDn&igf1p14I*fvi>691(*)P#BxvLP9tv22 zwzwbfaHUkK=U}RIOx3FaZs8%kg)XL|WHA*c^C_3s@5c2F?O~|ePWl@yd9jLS`(lsQ zw1>SMUBQ-c|4LjkV-FM;xd49mN)Aqhu_nL`*>bD4ZzD-anty!%diwm!&(E$)A}Tc< V%8~wGzrRg9%5?}%)}b6(>mU7O7)}5H literal 0 HcmV?d00001 diff --git a/FlashProgrammer/WindowsFormsApp1/obj/Debug/WindowsFormsApp1.csprojAssemblyReference.cache b/FlashProgrammer/WindowsFormsApp1/obj/Debug/WindowsFormsApp1.csprojAssemblyReference.cache new file mode 100644 index 0000000000000000000000000000000000000000..5ed2ae1880d9cf38c3da92bc3532e14287d334d9 GIT binary patch literal 11490 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 literal 0 HcmV?d00001 diff --git a/FlashProgrammer/WindowsFormsApp1/obj/Debug/WindowsFormsApp1.exe b/FlashProgrammer/WindowsFormsApp1/obj/Debug/WindowsFormsApp1.exe new file mode 100644 index 0000000000000000000000000000000000000000..aec491f80c378d47f250e9440d43bab9a535ebef GIT binary patch literal 17408 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