Apple-1-Mini/code/Uploader/Uploader/Program.cs

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}%)";
}
}
}