using System; using System.Collections.Generic; using System.Text; using DTS.Common.Enums.DASFactory; using DTS.Common.ICommunication; using DTS.Common.Interface.DASFactory; namespace DTS.DASLib.Command.SLICEDB { public abstract class InformationCommands : CommandBase { protected enum Commands { Reserved = 0x00, QuerySerialNumber = 0x01, SetSerialNumber = 0x02, QueryFirmwareVersion = 0x03, QueryTime = 0x04, SetTime = 0x05, QueryDebugLevel = 0x06, SetDebugLevel = 0x07, QueryKernelVersion = 0x08, QueryMSPFirmwareVersion = 0x09, QueryProtocolVersion = 0x0A, QueryCalibrationDaysSince1970_01_01 = 0x0F, SetCalibrationDaysSince1970_01_01 = 0x10, }; protected abstract Commands _Command { get; } protected InformationCommands(DTS.Common.Interface.DASFactory.ICommunication sock) : base(sock) { command.Type = CommandPacket.CommandType.Information; command.SetCommand((byte)_Command, _Command.ToString()); } protected InformationCommands(DTS.Common.Interface.DASFactory.ICommunication sock, int TimeoutMillisec) : base(sock, TimeoutMillisec) { command.Type = CommandPacket.CommandType.Information; command.SetCommand((byte)_Command, _Command.ToString()); } public override void CommandToString(ref List> list) { base.CommandToString(ref list); if (null != recorder) { list[0].Add(recorder.SerialNumber); } } } public class QuerySerialNumber : InformationCommands { protected override InformationCommands.Commands _Command { get { return Commands.QuerySerialNumber; } } public QuerySerialNumber(DTS.Common.Interface.DASFactory.ICommunication sock) : base(sock) { } public QuerySerialNumber(DTS.Common.Interface.DASFactory.ICommunication sock, int TimeoutMillisec) : base(sock, TimeoutMillisec) { } private string _value; /// /// The serial number of the SLICE DB /// public string SerialNumber { get { return _value; } } protected override CommandReceiveAction WholePackage() { if (response.Status == DFConstantsAndEnums.CommandStatus.StatusNoError) { response.GetParameter(0, out _value); } else { _value = string.Empty; } return CommandReceiveAction.StopReceiving; } public override void ResponseToString(ref List> lines) { base.ResponseToString(ref lines); lines.Add(new List() { string.Format("Serial Number: {0}", SerialNumber) }); } } public class SetSerialNumber : InformationCommands { protected override InformationCommands.Commands _Command { get { return Commands.SetSerialNumber; } } public SetSerialNumber(DTS.Common.Interface.DASFactory.ICommunication sock) : base(sock) { } public SetSerialNumber(DTS.Common.Interface.DASFactory.ICommunication sock, int TimeoutMillisec) : base(sock, TimeoutMillisec) { } private string _value; /// /// The serial number of the SLICE DB /// public string SerialNumber { get { return _value; } set { _value = value; // Allocate parameter array (+1 for terminating null) command.Parameter = new byte[value.Length + 1]; command.SetParameter(0, value); } } public override void CommandToString(ref List> lines) { base.CommandToString(ref lines); lines.Add(new List() { string.Format("Serial Number: {0}", SerialNumber) }); } } public class SetCalibrationDaysSince1970_01_01 : InformationCommands { protected override InformationCommands.Commands _Command { get { return Commands.SetCalibrationDaysSince1970_01_01; } } public SetCalibrationDaysSince1970_01_01(ICommunication sock) : base(sock) { } public SetCalibrationDaysSince1970_01_01(ICommunication sock, int TimeoutMillisec) : base(sock, TimeoutMillisec) { } private string _value; /// /// The serial number of the SLICE DB /// public string CalibrationDaysSince1970_01_01 { get { return _value; } set { _value = value; // Allocate parameter array (+1 for terminating null) command.Parameter = new byte[value.Length + 1]; command.SetParameter(0, value); } } public override void CommandToString(ref List> lines) { base.CommandToString(ref lines); lines.Add(new List() { string.Format("CalibrationDaysSince1970_01_01: {0}", CalibrationDaysSince1970_01_01) }); } } public class QueryFirmwareVersion : InformationCommands { protected override InformationCommands.Commands _Command { get { return Commands.QueryFirmwareVersion; } } public QueryFirmwareVersion(DTS.Common.Interface.DASFactory.ICommunication sock) : base(sock) { } public QueryFirmwareVersion(DTS.Common.Interface.DASFactory.ICommunication sock, int TimeoutMillisec) : base(sock, TimeoutMillisec) { } private string _value; /// /// The current firmware version of the SLICE DB. /// public string FirmwareVersion { get { return _value; } } protected override CommandReceiveAction WholePackage() { if (response.Status == DFConstantsAndEnums.CommandStatus.StatusNoError) { response.GetParameter(0, out _value); } else { _value = string.Empty; } return CommandReceiveAction.StopReceiving; } public override void ResponseToString(ref List> lines) { base.ResponseToString(ref lines); lines.Add(new List() { string.Format("Firmware Version: {0}", FirmwareVersion) }); } } public class QueryTime : InformationCommands { protected override InformationCommands.Commands _Command { get { return Commands.QueryTime; } } public QueryTime(DTS.Common.Interface.DASFactory.ICommunication sock) : base(sock) { } public QueryTime(DTS.Common.Interface.DASFactory.ICommunication sock, int TimeoutMillisec) : base(sock, TimeoutMillisec) { } private DateTime _value; /// /// The current time according to the SLICE DB. /// public DateTime CurrentTime { get { return _value; } } protected override CommandReceiveAction WholePackage() { _value = new DateTime(1970, 1, 1); if (response.Status == DFConstantsAndEnums.CommandStatus.StatusNoError) { const int SecondsPosition = 0; const int MicrosecondsPosition = 4; UInt32 seconds, microseconds; response.GetParameter(SecondsPosition, out seconds); response.GetParameter(MicrosecondsPosition, out microseconds); _value = _value.AddMilliseconds(microseconds / 1000); _value = _value.AddSeconds(seconds); } return CommandReceiveAction.StopReceiving; } public override void ResponseToString(ref List> lines) { base.ResponseToString(ref lines); lines.Add(new List() { string.Format("Current Time: {0}", CurrentTime.ToLongDateString() + " " + CurrentTime.ToLongTimeString()) }); } } public class SetTime : InformationCommands { protected override InformationCommands.Commands _Command { get { return Commands.SetTime; } } public SetTime(DTS.Common.Interface.DASFactory.ICommunication sock) : base(sock) { } public SetTime(DTS.Common.Interface.DASFactory.ICommunication sock, int TimeoutMillisec) : base(sock, TimeoutMillisec) { } private DateTime _value; /// /// The current time according to the SLICE DB. /// public DateTime CurrentTime { get { return _value; } set { const int ParameterLength = 8; const int SecondsPosition = 0; const int MicrosecondsPosition = 4; _value = value; DateTime epoch = new DateTime(1970, 1, 1); TimeSpan sinceEpoch = _value - epoch; double dSecondsSinceEpoch = sinceEpoch.TotalSeconds; UInt32 secondsSinceEpoch = (UInt32)dSecondsSinceEpoch; UInt32 microsecondsSinceEpoch = (UInt32)((dSecondsSinceEpoch - secondsSinceEpoch) * 1000000.0 + 0.5); command.Parameter = new byte[ParameterLength]; command.SetParameter(SecondsPosition, secondsSinceEpoch); command.SetParameter(MicrosecondsPosition, microsecondsSinceEpoch); } } public override void CommandToString(ref List> lines) { base.CommandToString(ref lines); lines.Add(new List() { string.Format("Current Time: {0}", CurrentTime.ToLongDateString() + " " + CurrentTime.ToLongTimeString()) }); } } public class QueryProtocolVersion : InformationCommands { protected override InformationCommands.Commands _Command { get { return Commands.QueryProtocolVersion; } } public QueryProtocolVersion(DTS.Common.Interface.DASFactory.ICommunication sock) : base(sock) { } public QueryProtocolVersion(DTS.Common.Interface.DASFactory.ICommunication sock, int TimeoutMillisec) : base(sock, TimeoutMillisec) { } private byte _value; /// /// The current protocol version of the SLICE DB. /// public byte ProtocolVersion { get { return _value; } } protected override CommandReceiveAction WholePackage() { if (response.Status == DFConstantsAndEnums.CommandStatus.StatusNoError) { response.GetParameter(0, out _value); } else { _value = 0; } return CommandReceiveAction.StopReceiving; } public override void ResponseToString(ref List> lines) { base.ResponseToString(ref lines); lines.Add(new List() { string.Format("Firmware Version: {0}", ProtocolVersion) }); } } public class QueryKernelVersion : InformationCommands { protected override InformationCommands.Commands _Command { get { return Commands.QueryKernelVersion; } } public QueryKernelVersion(DTS.Common.Interface.DASFactory.ICommunication sock) : base(sock) { } public QueryKernelVersion(DTS.Common.Interface.DASFactory.ICommunication sock, int TimeoutMillisec) : base(sock, TimeoutMillisec) { } private string _value; /// /// The current Kernel firmware version of the SLICE DB. /// public string KernelFirmwareVersion { get { return _value; } } protected override CommandReceiveAction WholePackage() { if (response.Status == DFConstantsAndEnums.CommandStatus.StatusNoError) { response.GetParameter(0, out _value); } else { _value = string.Empty; } return CommandReceiveAction.StopReceiving; } public override void ResponseToString(ref List> lines) { base.ResponseToString(ref lines); lines.Add(new List() { string.Format("Firmware Version: {0}", KernelFirmwareVersion) }); } } //FB 16049 Support ECM Cal date query public class QueryCalibrationDaysSince1970_01_01 : InformationCommands { protected override InformationCommands.Commands _Command { get { return Commands.QueryCalibrationDaysSince1970_01_01; } } public QueryCalibrationDaysSince1970_01_01(ICommunication sock) : base(sock) { } public QueryCalibrationDaysSince1970_01_01(ICommunication sock, int TimeoutMillisec) : base(sock, TimeoutMillisec) { } private string _value; /// /// The serial number of the SLICE DB /// public string CalibrationDaysSince1970_01_01 { get { return _value; } } protected override CommandReceiveAction WholePackage() { if (response.Status == DFConstantsAndEnums.CommandStatus.StatusNoError) { response.GetParameter(0, out _value); } else { _value = string.Empty; } return CommandReceiveAction.StopReceiving; } public override void ResponseToString(ref List> lines) { base.ResponseToString(ref lines); lines.Add(new List() { string.Format("QueryCalibrationDaysSince1970_01_01: {0}", CalibrationDaysSince1970_01_01) }); } } public class QueryMSPFirmwareVersion : InformationCommands { protected override InformationCommands.Commands _Command { get { return Commands.QueryMSPFirmwareVersion; } } public QueryMSPFirmwareVersion(DTS.Common.Interface.DASFactory.ICommunication sock) : base(sock) { } public QueryMSPFirmwareVersion(DTS.Common.Interface.DASFactory.ICommunication sock, int TimeoutMillisec) : base(sock, TimeoutMillisec) { } private string _value; /// /// The current MSP firmware version of the SLICE DB. /// public string MSPFirmwareVersion { get { return _value; } } protected override CommandReceiveAction WholePackage() { if (response.Status == DFConstantsAndEnums.CommandStatus.StatusNoError) { response.GetParameter(0, out _value); } else { _value = string.Empty; } return CommandReceiveAction.StopReceiving; } public override void ResponseToString(ref List> lines) { base.ResponseToString(ref lines); lines.Add(new List() { string.Format("Firmware Version: {0}", MSPFirmwareVersion) }); } } }