diff --git a/SimplySerial/SimplySerial.cs b/SimplySerial/SimplySerial.cs
index 2fce8dc..ae03a4c 100644
--- a/SimplySerial/SimplySerial.cs
+++ b/SimplySerial/SimplySerial.cs
@@ -13,54 +13,23 @@ namespace SimplySerial
static bool _continue = true;
static SerialPort _serialPort;
+ static bool Quiet = false;
+ static bool NoWait = false;
+
+ // default comspec values set here will be overridden by values passed through command-line arguments
+ static string port = string.Empty;
+ static int baud = 9600;
+ static Parity parity = Parity.None;
+ static int dataBits = 8;
+ static StopBits stopBits = StopBits.One;
static void Main(string[] args)
{
-
+ ProcessArguments(args);
ConsoleKeyInfo cki = new ConsoleKeyInfo();
Console.TreatControlCAsInput = true;
- // default comspec values (will be overridden by command-line arguments)
- string[] availablePorts = SerialPort.GetPortNames();
- string port = string.Empty;
- int baud = 9600;
- Parity parity = Parity.None;
- int dataBits = 8;
- StopBits stopBits = StopBits.One;
-
- if (availablePorts.Count() < 1)
- ExitProgram("No COM ports detected.", -1);
- else
- port = availablePorts[0];
-
- for(int i = 0; i < args.Count(); i++)
- {
- if ((args[i].ToLower()).StartsWith("-c"))
- {
- Console.WriteLine("PORT: {0}", args[i]);
- }
- if ((args[i].ToLower()).StartsWith("-b"))
- {
- Console.WriteLine("BAUD: {0}", args[i]);
- }
- if ((args[i].ToLower()).StartsWith("-p"))
- {
- Console.WriteLine("PARITY: {0}", args[i]);
- }
- if ((args[i].ToLower()).StartsWith("-d"))
- {
- Console.WriteLine("DATABITS: {0}", args[i]);
- }
- if ((args[i].ToLower()).StartsWith("-s"))
- {
- Console.WriteLine("STOPBITS: {0}", args[i]);
- }
- }
-
-
-
- ExitProgram("That's All Folks!", 1);
_serialPort = new SerialPort("COM15", 9600, Parity.None, 8, StopBits.One);
_serialPort.Handshake = Handshake.None;
@@ -107,12 +76,128 @@ namespace SimplySerial
}
+ ///
+ /// Validates and processes any command-line arguments that were passed in. Invalid arguments will halt program execution.
+ ///
+ /// Command-line parameters
+ static void ProcessArguments(string[] args)
+ {
+ // get a list of all available com ports
+ string[] availablePorts = SerialPort.GetPortNames();
+
+ // iterate through command-line arguments
+ foreach (string arg in args)
+ {
+ // split argument into components based on 'key:value' formatting
+ string[] argument = arg.Split(':');
+
+ // switch to lower case and remove '/', '--' and '-' from beginning of arguments - we can process correctly without them
+ argument[0] = (argument[0].TrimStart('/', '-')).ToLower();
+
+ // help
+ if (argument[0].StartsWith("h") || argument[0].StartsWith("?"))
+ {
+ ExitProgram("Sorry, you're on your own.", 0);
+ }
+
+ // quiet (no output to console other than comes in via serial)
+ else if (argument[0].StartsWith("q"))
+ {
+ SimplySerial.Quiet = true;
+ }
+
+ // nowait (disables the "press any key to exit" function)
+ else if (argument[0].StartsWith("n"))
+ {
+ SimplySerial.NoWait = true;
+ }
+
+ // the remainder of possible command-line arguments require two parameters, so let's enforce that now
+ else if (argument.Count() < 2)
+ {
+ ExitProgram(("Invalid or incomplete argument <" + arg + ">\nTry 'SimplySerial help' to see a list of valid arguments"), -1);
+ }
+
+ // com port
+ else if (argument[0].StartsWith("c"))
+ {
+ string newPort = argument[1].ToUpper();
+
+ if (!argument[1].StartsWith("COM"))
+ newPort = "COM" + argument[1];
+ if (!availablePorts.Contains(newPort))
+ ExitProgram("Cannot find specified port <" + newPort + ">", -1);
+ port = newPort;
+ Output("PORT: " + port);
+ }
+
+ // baud rate
+ else if (argument[0].StartsWith("b"))
+ {
+ //validate requested baud rate
+ Output("BAUD: " + argument[1]);
+ }
+
+ // parity
+ else if (argument[0].StartsWith("p"))
+ {
+ //validate requested COM port
+ Output("PARITY: " + argument[1]);
+ }
+
+ // databits
+ else if (argument[0].StartsWith("d"))
+ {
+ //validate requested data bits
+ Output("DATABITS: " + argument[1]);
+ }
+
+ // stopbits
+ else if (argument[0].StartsWith("s"))
+ {
+ //validate requested stop bits
+ Output("STOPBITS: " + argument[1]);
+ }
+ else
+ {
+ ExitProgram(("Invalid or incomplete argument <" + arg + ">\nTry 'SimplySerial help' to see a list of valid arguments"), -1);
+ }
+ }
+
+ // default to the first/only available com port, exit with error if no ports are available
+ if (availablePorts.Count() >= 1)
+ SimplySerial.port = availablePorts[0];
+ else
+ ExitProgram("No COM ports detected.", -1);
+
+ ExitProgram("That's All Folks!", 1);
+
+ }
+
+ ///
+ /// Writes messages using Console.WriteLine() as long as the 'Quiet' option hasn't been enabled
+ ///
+ /// Message to output (assuming 'Quiet' is false)
+ static void Output(string message)
+ {
+ if (!SimplySerial.Quiet)
+ Console.WriteLine(message);
+ }
+
+ ///
+ /// Writes the specified exit message to the console, then waits for user to press a key before halting program execution.
+ ///
+ /// Message to display - should indicate the reason why the program is terminating.
+ /// Code to return to parent process. Should be <0 if an error occurred, >=0 if program is terminating normally.
static void ExitProgram(string message, int exitCode)
{
- Console.WriteLine(message);
+ Output(message);
Console.WriteLine("\nPress any key to exit...");
- while (!Console.KeyAvailable)
- Thread.Sleep(25);
+ if (!SimplySerial.NoWait)
+ {
+ while (!Console.KeyAvailable)
+ Thread.Sleep(25);
+ }
Environment.Exit(exitCode);
}
}