mirror of
https://github.com/DutchMaker/Apple-1-Mini.git
synced 2024-06-04 11:29:32 +00:00
80 lines
2.3 KiB
C#
80 lines
2.3 KiB
C#
|
using System;
|
|||
|
using System.IO;
|
|||
|
using System.IO.Ports;
|
|||
|
using System.Text;
|
|||
|
using System.Threading;
|
|||
|
using System.Windows.Forms;
|
|||
|
|
|||
|
namespace Uploader
|
|||
|
{
|
|||
|
class Program
|
|||
|
{
|
|||
|
private const string PORT = "COM7";
|
|||
|
private static SerialPort serial = new SerialPort(PORT, 9600, Parity.None, 8, StopBits.One);
|
|||
|
|
|||
|
[STAThread]
|
|||
|
static void Main(string[] args)
|
|||
|
{
|
|||
|
var dialog = new OpenFileDialog();
|
|||
|
|
|||
|
dialog.Title = "Select file to upload...";
|
|||
|
|
|||
|
if (dialog.ShowDialog() == DialogResult.OK)
|
|||
|
{
|
|||
|
serial.DataReceived += Serial_DataReceived;
|
|||
|
serial.Open();
|
|||
|
|
|||
|
Console.WriteLine("Connected...");
|
|||
|
Console.WriteLine($"Uploading {dialog.FileName}");
|
|||
|
|
|||
|
using (var reader = new StreamReader(dialog.FileName, Encoding.ASCII))
|
|||
|
{
|
|||
|
int progress = 0;
|
|||
|
long total = reader.BaseStream.Length;
|
|||
|
|
|||
|
while (reader.Peek() >= 0)
|
|||
|
{
|
|||
|
int data = reader.Read();
|
|||
|
|
|||
|
if (data < 96)
|
|||
|
{
|
|||
|
serial.Write(new byte[] { (byte)data }, 0, 1);
|
|||
|
|
|||
|
Thread.Sleep(50);
|
|||
|
|
|||
|
if (data == 13)
|
|||
|
{
|
|||
|
Thread.Sleep(150);
|
|||
|
}
|
|||
|
|
|||
|
Console.Write((char)data);
|
|||
|
}
|
|||
|
|
|||
|
Progress(++progress, total);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
serial.WriteLine("");
|
|||
|
serial.Close();
|
|||
|
|
|||
|
Console.Title = "Upload succeeded!";
|
|||
|
Console.WriteLine("\r\nDone! Connection closed.");
|
|||
|
}
|
|||
|
|
|||
|
Console.ReadKey();
|
|||
|
}
|
|||
|
|
|||
|
private static void Serial_DataReceived(object sender, SerialDataReceivedEventArgs e)
|
|||
|
{
|
|||
|
serial.ReadExisting();
|
|||
|
}
|
|||
|
|
|||
|
private static void Progress(int progress, long total)
|
|||
|
{
|
|||
|
decimal percentage = progress / ((decimal)total / 100);
|
|||
|
|
|||
|
Console.Title = $"Uploading... ({progress:N0} of {total:N0} bytes - {percentage:N2}%)";
|
|||
|
}
|
|||
|
}
|
|||
|
}
|