using System; using System.Xml; using DTS.Common.Enums; using System.Text; using DTS.Common.Utilities; using DTS.Common.Classes.Sensors; namespace DTS.DASLib.Service { /// /// Class for storing/applying Streaming output settings as a channel /// [Serializable] public class StreamOutputDASChannel : OutputDASChannel { /// /// CTOR to populate a channel's owning module and channel WRT that module. Calls /// base class CTOR. /// /// Module that contains this channel. /// ChannelNumber of this channel WRT owning module. public StreamOutputDASChannel(DASModule owner, int channelNumber) : base(owner, channelNumber) { } public StreamOutputDASChannel() { } /// /// Serial number of the sensor. /// public string SerialNumber { get; set; } /// /// The name of the hardware channel /// public string HardwareChannelName { get; set; } public string UDPProfileName { get; set; } = UDPStreamProfile.CH10_ANALOG_2HDR.ToString(); public ushort UDPTimeChannelId { get; set; } public ushort UDPDataChannelId { get; set; } public ushort IRIGTimeDataPacketIntervalMs { get; set; } /// /// time between sending TMATS information while streaming /// http://manuscript.dts.local/f/cases/29987/Add-CG-DP-TMATS-interval-UI-support /// public ushort TMATSIntervalMs { get; set; } = StreamOutputRecord.DEFAULT_TMATS_INTERVAL_MS; public string UDPAddress { get; set; } = string.Empty; public uint[] UDPTmNSConfig { get; set; } = new uint[8]; /// /// If the channel has a serial number in the SerialNumber field, it is "Configured". /// public override bool IsConfigured() { return !string.IsNullOrEmpty(SerialNumber); } public override string ToString() { return $"Stream{ModuleChannelNumber}"; } public override void WriteXml(XmlWriter writer) { base.WriteXml(writer); // SerialNumber XMLHelper.PutString(writer, "SerialNumber", SerialNumber); XMLHelper.PutString(writer, "HardwareChannelName", HardwareChannelName); XMLHelper.PutString(writer, "UDPProfileName", UDPProfileName); XMLHelper.PutString(writer, "UDPTimeChannelId", UDPTimeChannelId.ToString()); XMLHelper.PutString(writer, "UDPDataChannelId", UDPDataChannelId.ToString()); XMLHelper.PutString(writer, "IRIGTimeDataPacketIntervalMs", IRIGTimeDataPacketIntervalMs.ToString()); XMLHelper.PutString(writer, TMATS_INTERVAL_MS_TAG, TMATSIntervalMs.ToString()); XMLHelper.PutString(writer, "UDPAddress", UDPAddress.ToString()); XMLHelper.PutString(writer, "UDPTmNSConfig", ArrayToString.ArrayObjectToString(UDPTmNSConfig)); } private const string SERIALNUMBER_TAG = "SerialNumber"; private const string HARDWARECHANNELNAME_TAG = "HardwareChannelName"; private const string UDPPROFILENAME_TAG = "UDPProfileName"; private const string UDPTIMECHANNELID_TAG = "UDPTimeChannelId"; private const string UDPDATACHANNELID_TAG = "UDPDataChannelId"; private const string IRIGTIMEDATAPACKETINTERVALMS_TAG = "IRIGTimeDataPacketIntervalMs"; private const string UDPADDRESS_TAG = "UDPAddress"; private const string UDPTMNSCONFIG_TAG = "UDPTmNSConfig"; private const string TMATS_INTERVAL_MS_TAG = "TMATSIntervalMs"; protected override void HandleElement(XmlReader reader) { base.HandleElement(reader); if (reader.NodeType == XmlNodeType.Element) { var value = string.Empty; switch (reader.Name) { case SERIALNUMBER_TAG: SerialNumber = XMLHelper.GetString(reader); break; case HARDWARECHANNELNAME_TAG: HardwareChannelName = XMLHelper.GetString(reader); break; case UDPPROFILENAME_TAG: UDPProfileName = XMLHelper.GetString(reader); break; case UDPTIMECHANNELID_TAG: UDPTimeChannelId = Convert.ToUInt16(XMLHelper.GetInt(reader)); break; case UDPDATACHANNELID_TAG: UDPDataChannelId = Convert.ToUInt16(XMLHelper.GetInt(reader)); break; case IRIGTIMEDATAPACKETINTERVALMS_TAG: IRIGTimeDataPacketIntervalMs = Convert.ToUInt16(XMLHelper.GetInt(reader)); break; case UDPADDRESS_TAG: UDPAddress = XMLHelper.GetString(reader); break; case UDPTMNSCONFIG_TAG: UDPTmNSConfig = ArrayToString.StringToUIntArray(XMLHelper.GetString(reader)); break; case TMATS_INTERVAL_MS_TAG: TMATSIntervalMs = Convert.ToUInt16(XMLHelper.GetInt(reader)); break; default: // let child handle it return; } } } } }