public void LoadDictionaryTest() { SerialOptions serial = new SerialOptions(); var dictionary = new Dictionary <string, object>() { { "serial1", "dummy" }, { "serial2", "modem listenport:333" }, { "serial3", "nullmodem port:222 server:localhost" }, { "serial4", "directserial realport:COM5" } }; serial.LoadDictionary(dictionary); Assert.AreEqual(serial.Serial1.Device, SerialDevice.Dummy); Assert.AreEqual(serial.Serial2.Device, SerialDevice.Modem); Assert.AreEqual(serial.Serial2.Port, 333); Assert.AreEqual(serial.Serial3.Device, SerialDevice.NullModem); Assert.AreEqual(serial.Serial3.Port, 222); Assert.AreEqual(serial.Serial3.Server, "localhost"); Assert.AreEqual(serial.Serial4.Device, SerialDevice.DirectSerial); Assert.AreEqual(serial.Serial4.RealPort, "COM5"); }
public void ToStringTest() { var serial = SerialOptions.Create() .AddSerial1(Serial.CreateDummy()) .AddSerial2(Serial.CreateModem(333)) .AddSerial3(Serial.CreateNullModem(222, "localhost")) .AddSerial4(Serial.CreateDirectSerial("COM5")); var iniSerial = serial.ToString(); Assert.AreEqual(iniSerial, "[serial]\r\n\r\nserial1=dummy\r\nserial2=modem listenport:333\r\nserial3=nullmodem port:222 server:localhost\r\nserial4=directserial realport:COM5\r\n"); }
/// <summary> /// main entry point /// </summary> /// <param name="args">Arguments</param> /// <returns>some sort of weird exit code</returns> static int Main(string[] args) { #if DEBUG //while debugging we supply fake arguments matching our serial port //args is different from C++ "argv", as it does not contains the //executable call itself, so a length of 0 means 0 arguments. if (args.Length == 0) { args = new string[] { "COM3,9600,8,1,n,n" }; //args = new string[] { "net.cs" }; } #endif SerialOptions SO = parseParams(args); if (SO.valid) { SerialPort SP = new SerialPort(SO.Portname, SO.Baudrate, SO.Parity, SO.Databits, SO.Stopbits); SP.Handshake = SO.Handshake; SP.NewLine = "\r"; //VT100 return key is '\r' SP.Open(); VTconsole C = new VTconsole(SP); if (C.State != VTconsole.TerminalState.Ready) { Console.WriteLine("Waiting for terminal ready on {0}...", SO.Portname); while (C.State != VTconsole.TerminalState.Ready) { if (consoleExit()) { return(1); } Thread.Sleep(2000); } Console.WriteLine("Terminal ready"); } IPlugin P = null; if (File.Exists("INIT.cs") || File.Exists("INIT.dll")) { Console.WriteLine("Found 'INIT' Plugin. Loading external plugin..."); try { P = File.Exists("INIT.cs") ? PluginManager.LoadPlugin("INIT.cs") : PluginManager.LoadPluginLib("INIT.dll"); if (P == null) { throw new Exception("Cannot run INIT Plugin, see errors below"); } } catch (Exception ex) { Console.WriteLine("Loading failed.\r\nError: {0}", ex.Message); } if (P == null) { if (PluginManager.LastErrors != null) { foreach (CompilerError EE in PluginManager.LastErrors) { C.WriteLine("[{0};{1}] {2} {3}", EE.Line, EE.Column, EE.ErrorNumber, EE.ErrorText); } } Console.WriteLine("Defaulting to main plugin..."); P = new DirList(); } } else { Console.WriteLine("Starting main Plugin..."); P = new DirList(); } P.Start(C); while (!consoleExit() && P.IsRunning) { Thread.Sleep(500); } P.Stop(); C.Clear(); SP.Close(); Console.WriteLine("Application terminated"); } else { if (args.Length > 0 && File.Exists(args[0])) { try { PluginManager.Compile(File.ReadAllText(args[0]), args[0].Substring(0, args[0].LastIndexOf('.')) + ".dll"); Console.WriteLine("File compiled"); } catch (Exception ex) { Console.WriteLine("Error compiling {0}.\r\n{1}", args[0], ex.Message); } } else { help(); } } return(0); }
/// <summary> /// Extracts serial port options from arguments /// </summary> /// <param name="args">arguments</param> /// <returns>SerialOptions struct filled out as good as possible</returns> private static SerialOptions parseParams(string[] args) { SerialOptions SO = new SerialOptions(); //defaults SO.Baudrate = 9600; SO.Databits = 8; SO.Stopbits = StopBits.One; SO.Parity = Parity.None; SO.Handshake = Handshake.None; SO.valid = false; if (args.Length > 0) { args = args[0].Split(','); string[] ports = SerialPort.GetPortNames(); foreach (string port in ports) { if (port.ToLower() == args[0].ToLower()) { SO.Portname = port; SO.valid = true; } } } if (args.Length > 1 && SO.valid) { SO.valid = int.TryParse(args[1], out SO.Baudrate); } if (args.Length > 2 && SO.valid) { SO.valid = int.TryParse(args[2], out SO.Databits); } if (args.Length > 3 && SO.valid) { SO.valid = true; switch (args[3]) { case "0": SO.Stopbits = StopBits.None; break; case "1": SO.Stopbits = StopBits.One; break; case "1.5": SO.Stopbits = StopBits.OnePointFive; break; case "2": SO.Stopbits = StopBits.Two; break; default: SO.valid = false; break; } } if (args.Length > 4 && SO.valid) { SO.valid = true; switch (args[4].ToUpper()) { case "N": SO.Parity = Parity.None; break; case "E": SO.Parity = Parity.Even; break; case "O": SO.Parity = Parity.Odd; break; case "S": SO.Parity = Parity.Space; break; case "M": SO.Parity = Parity.Mark; break; default: SO.valid = false; break; } } if (args.Length > 5 && SO.valid) { SO.valid = true; switch (args[5].ToUpper()) { case "N": SO.Handshake = Handshake.None; break; case "X": SO.Handshake = Handshake.XOnXOff; break; case "R": SO.Handshake = Handshake.RequestToSend; break; case "B": SO.Handshake = Handshake.RequestToSendXOnXOff; break; default: SO.valid = false; break; } } return(SO); }