using System; using System.Threading; using MECF.Framework.Simulator.Core.Driver; using System.Threading.Tasks; namespace Venus_Simulator.Devices { class AdTecGeneratorMockPMD : SerialPortDeviceSimulator { public enum GeneratorStatus { Unknown, OFF, ON, ERROR } public static GeneratorStatus _simGeneratorStatus; private const string EOF = "\r"; private const char MSG_DELIMITER = '_'; private const string MOCKUP_PORT = "COM49"; private string RFPower = "0"; public AdTecGeneratorMockPMD() : base(MOCKUP_PORT, -1, EOF, MSG_DELIMITER) { _simGeneratorStatus = GeneratorStatus.Unknown; } protected override void ProcessUnsplitMessage(string message) { if (string.IsNullOrEmpty(message)) throw new ArgumentException("Hardware command message is invalid"); string sRes = string.Empty; if (message.Contains(EOF)) { message = message.Remove(message.Length - 1); } string[] msgs = message.Split('\r'); foreach(string msg in msgs) { if (msg.Contains(" W")) { RFPower = msg.Split(' ')[0].ToString().PadLeft(5, '0'); if (_simGeneratorStatus == GeneratorStatus.ON) { sRes = $"2010000 12345 {RFPower} 00010 45678\r"; } } switch (msg) { case "Q": if (_simGeneratorStatus == GeneratorStatus.ON) { sRes = $"2010000 12345 {RFPower} 00010 45678\r"; } else if (_simGeneratorStatus == GeneratorStatus.OFF) { sRes = "2000000 12345 00000 00000 45678\r"; } break; case "G": _simGeneratorStatus = GeneratorStatus.ON; sRes = "\r"; break; case "S": _simGeneratorStatus = GeneratorStatus.OFF; sRes = "\r"; break; default: break; } //Thread.Sleep(200); sRes += "\r"; OnWriteMessage(sRes); } } } }