using RJCP.IO.Ports; using System.Xml.Linq; using System; using System.Text; namespace SerialTestApp; internal class Program { 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 (applicationQuitRequested == false) { Console.WriteLine($"----- SERIAL PROTOCOL TEST APP -----"); Console.WriteLine($"Command list:"); Console.WriteLine($"l = list ports"); Console.WriteLine($"c = connect"); Console.WriteLine($"q = quit"); var key = Console.ReadKey(); switch (key.Key) { // list com ports case ConsoleKey.L: string[] ports = SerialPortStream.GetPortNames(); Console.WriteLine($"Following ports were found: {Environment.NewLine}"); foreach (var port in ports) { Console.WriteLine($"-- {port}"); } 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: applicationQuitRequested = true; break; default: Console.WriteLine($"{Environment.NewLine}Did not recognize key.. {Environment.NewLine}"); break; } } } 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) { } } } }