using System; using System.Text; using DTS.Common.ICommunication; namespace DTS.DASLib.Command.TDAS { internal class TestTriggerCommandString : CommandString { protected override string _CommandString => "TESTTRIG"; protected override string _CommandDescription => "Test trigger"; public string SubCommand { get; set; } public string Status { get; set; } public override byte[] GetParameters() { var sb = new StringBuilder(); sb.Append(" "); sb.Append(SubCommand); return Encoding.ASCII.GetBytes(sb.ToString()); } } public class TestTrigger : CommandBase { public int ModuleIndex { get => ((TDASCommandPacketBase)baseCommand).ModuleIndex; set => ((TDASCommandPacketBase)baseCommand).ModuleIndex = value; } public enum SubCommandValues { ARM, STATUS, OFF }; public enum StatusValues { ARMED, OFF }; public SubCommandValues SubCommand { get => (SubCommandValues)Enum.Parse(typeof(SubCommandValues), _CommandString.SubCommand); set => _CommandString.SubCommand = value.ToString(); } public StatusValues TriggerStatus => (StatusValues)Enum.Parse(typeof(StatusValues), _CommandString.Status); private TestTriggerCommandString _CommandString { get { var command = baseCommand as TDASCommandPacketBase; return command?.GetCommandStringObject(0) as TestTriggerCommandString; } } public TestTrigger(DTS.Common.Interface.DASFactory.ICommunication sock) : base(sock) { var command = new TDASCommandPacketBase(new TestTriggerCommandString()) { RebuildBytes = true, RackCommand = false }; baseCommand = command; _CommandString.SubCommand = SubCommandValues.STATUS.ToString(); ; } public TestTrigger(DTS.Common.Interface.DASFactory.ICommunication sock, int msTimeout) : base(sock, msTimeout) { var command = new TDASCommandPacketBase(new TestTriggerCommandString()) { RackCommand = false, RebuildBytes = true }; baseCommand = command; _CommandString.SubCommand = SubCommandValues.STATUS.ToString(); } protected override void ProcessData() { if (null == baseResponse) { return; } var s = Encoding.ASCII.GetString(baseResponse.ToBytes()); var start = s.IndexOf(_CommandString.GetCommandPortion(), StringComparison.Ordinal) + _CommandString.GetCommandPortion().Length + 1; var end = s.IndexOf("\r\n", StringComparison.Ordinal); if (start >= 0 && end > start) { _responseData = s.Substring(start, end - start); } else { return; } var tokens = ResponseData.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); if (2 <= tokens.Length) { _CommandString.Status = tokens[1]; } } } internal class TestTriggerBroadcastCommandString : CommandString { protected override string _CommandString => ModuleIndex >= 0 ? $"*{ModuleIndex}TESTTRIG" : "*TESTTRIG"; protected override string _CommandDescription => ModuleIndex >= 0 ? $"Test trigger broadcast *{ModuleIndex}TESTTRIG" : "Test trigger broadcast *TESTTRIG"; public int ModuleIndex { get; set; } public string SubCommand { get; set; } public override byte[] GetParameters() { var sb = new StringBuilder(); sb.Append(" "); sb.Append(SubCommand); return Encoding.ASCII.GetBytes(sb.ToString()); } public TestTriggerBroadcastCommandString(int moduleIndex) { ModuleIndex = moduleIndex; } } public class TestTriggerBroadcast : CommandBase { private TestTriggerBroadcastCommandString _CommandString { get { var command = baseCommand as TDASCommandPacketBase; return command?.GetCommandStringObject(0) as TestTriggerBroadcastCommandString; } } public TestTrigger.SubCommandValues SubCommand { get => (TestTrigger.SubCommandValues)Enum.Parse(typeof(TestTrigger.SubCommandValues), _CommandString.SubCommand); set => _CommandString.SubCommand = value.ToString(); } public TestTriggerBroadcast(DTS.Common.Interface.DASFactory.ICommunication sock, int moduleIndex) : base(sock) { var command = new TDASCommandPacketBase(new TestTriggerBroadcastCommandString(moduleIndex)); command.RackCommand = false; command.RebuildBytes = true; baseCommand = command; _CommandString.SubCommand = TestTrigger.SubCommandValues.STATUS.ToString(); } public TestTriggerBroadcast(DTS.Common.Interface.DASFactory.ICommunication sock, int moduleIndex, int msTimeout) : base(sock, msTimeout) { var command = new TDASCommandPacketBase(new TestTriggerBroadcastCommandString(moduleIndex)); command.RackCommand = false; command.RebuildBytes = true; baseCommand = command; _CommandString.SubCommand = TestTrigger.SubCommandValues.STATUS.ToString(); } } }