|
|
|
|
@ -1,15 +1,25 @@ |
|
|
|
|
using RJCP.IO.Ports; |
|
|
|
|
using System.Collections.Generic; |
|
|
|
|
using System.Xml.Linq; |
|
|
|
|
using System; |
|
|
|
|
using System.Text; |
|
|
|
|
|
|
|
|
|
namespace SerialTestApp; |
|
|
|
|
|
|
|
|
|
internal class Program |
|
|
|
|
{ |
|
|
|
|
public static bool QuitRequested { get; private set; } |
|
|
|
|
private static bool _continue; |
|
|
|
|
private static Thread readThread; |
|
|
|
|
private static StringComparer stringComparer = StringComparer.OrdinalIgnoreCase; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public static bool applicationQuitRequested { get; private set; } |
|
|
|
|
public static SerialPortStream serialPort { get; private set; } = new(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static void Main(string[] args) |
|
|
|
|
{ |
|
|
|
|
while (QuitRequested == false) |
|
|
|
|
while (applicationQuitRequested == false) |
|
|
|
|
{ |
|
|
|
|
Console.WriteLine($"----- SERIAL PROTOCOL TEST APP -----"); |
|
|
|
|
Console.WriteLine($"Command list:"); |
|
|
|
|
@ -31,8 +41,67 @@ internal class Program |
|
|
|
|
} |
|
|
|
|
break; |
|
|
|
|
|
|
|
|
|
// connect |
|
|
|
|
case ConsoleKey.C: |
|
|
|
|
Console.Write($"Write Port name: "); |
|
|
|
|
string? portName = Console.ReadLine(); |
|
|
|
|
|
|
|
|
|
if (portName == null || |
|
|
|
|
portName == "" || |
|
|
|
|
!(portName.ToLower()).StartsWith("com")) |
|
|
|
|
{ |
|
|
|
|
Console.WriteLine($"Invalid Port name entered."); |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
serialPort.PortName = portName; |
|
|
|
|
serialPort.BaudRate = 115200; |
|
|
|
|
serialPort.Parity = Parity.None; |
|
|
|
|
serialPort.DataBits = 8; |
|
|
|
|
serialPort.StopBits = StopBits.One; |
|
|
|
|
serialPort.Handshake = Handshake.None; |
|
|
|
|
//serialPort.NewLine = "\r\n"; |
|
|
|
|
|
|
|
|
|
serialPort.ReadTimeout = 500; |
|
|
|
|
serialPort.WriteTimeout = 500; |
|
|
|
|
|
|
|
|
|
serialPort.Open(); |
|
|
|
|
_continue = true; |
|
|
|
|
readThread = new Thread(Read); |
|
|
|
|
readThread.Start(); |
|
|
|
|
|
|
|
|
|
Console.WriteLine("Type QUIT to exit"); |
|
|
|
|
|
|
|
|
|
while (_continue) |
|
|
|
|
{ |
|
|
|
|
var message = Console.ReadLine(); |
|
|
|
|
|
|
|
|
|
if (stringComparer.Equals("quit", message)) |
|
|
|
|
{ |
|
|
|
|
_continue = false; |
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
{ |
|
|
|
|
var bytes = Encoding.UTF8.GetBytes(message!); |
|
|
|
|
foreach (byte b in bytes) |
|
|
|
|
{ |
|
|
|
|
serialPort.WriteByte(b); |
|
|
|
|
} |
|
|
|
|
serialPort.WriteByte((byte)'\n'); |
|
|
|
|
//serialPort.WriteLine(message); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
readThread.Join(); |
|
|
|
|
readThread = null; |
|
|
|
|
|
|
|
|
|
serialPort.Close(); |
|
|
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
|
|
// quit |
|
|
|
|
case ConsoleKey.Q: |
|
|
|
|
QuitRequested = true; |
|
|
|
|
applicationQuitRequested = true; |
|
|
|
|
break; |
|
|
|
|
|
|
|
|
|
default: |
|
|
|
|
@ -43,4 +112,24 @@ internal class Program |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public static void Read() |
|
|
|
|
{ |
|
|
|
|
while (_continue) |
|
|
|
|
{ |
|
|
|
|
try |
|
|
|
|
{ |
|
|
|
|
int readByte = serialPort.ReadByte(); |
|
|
|
|
if(readByte != -1) // -1 = timeout |
|
|
|
|
{ |
|
|
|
|
string print = Encoding.UTF8.GetString(new byte[] { (byte)readByte }); |
|
|
|
|
//print = print.Replace("\r", "").Replace("\n", ""); // Newline Mode: none |
|
|
|
|
print = print.Replace("\r", ""); // Newline Mode: only print \n |
|
|
|
|
//print = print.Replace("\n", ""); // Newline Mode: only print \r |
|
|
|
|
Console.Write(print); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
catch (TimeoutException) { } |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |