From a030ff909e133ebc9e5f8a110c886a4dfc8403a6 Mon Sep 17 00:00:00 2001 From: Jonas Arnold Date: Sun, 12 Mar 2023 12:01:32 +0100 Subject: [PATCH] added connect and communicate added customization for newline --- SerialTestApp/Program.cs | 97 ++++++++++++++++++++++++++++++++++++++-- 1 file changed, 93 insertions(+), 4 deletions(-) diff --git a/SerialTestApp/Program.cs b/SerialTestApp/Program.cs index b0303f7..8ac8f65 100644 --- a/SerialTestApp/Program.cs +++ b/SerialTestApp/Program.cs @@ -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) { } + } + } } \ No newline at end of file