added connect and communicate

added customization for newline
master
Jonas Arnold 3 years ago
parent 4e9d806863
commit a030ff909e
  1. 97
      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) { }
}
}
}
Loading…
Cancel
Save