//****************************************************************************************************** // FrequencyValue.cs - Gbtc // // Copyright © 2012, Grid Protection Alliance. All Rights Reserved. // // Licensed to the Grid Protection Alliance (GPA) under one or more contributor license agreements. See // the NOTICE file distributed with this work for additional information regarding copyright ownership. // The GPA licenses this file to you under the MIT License (MIT), the "License"; you may // not use this file except in compliance with the License. You may obtain a copy of the License at: // // http://www.opensource.org/licenses/MIT // // Unless agreed to in writing, the subject software distributed under the License is distributed on an // "AS-IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. Refer to the // License for the specific language governing permissions and limitations. // // Code Modification History: // ---------------------------------------------------------------------------------------------------- // 04/27/2009 - J. Ritchie Carroll // Generated original version of source code. // 09/15/2009 - Stephen C. Wills // Added new header and license agreement. // 12/17/2012 - Starlynn Danyelle Gilliam // Modified Header. // //****************************************************************************************************** using System; using System.Runtime.Serialization; namespace GSF.PhasorProtocols.SelFastMessage { /// /// Represents the SEL Fast Message implementation of a . /// [Serializable] public class FrequencyValue : FrequencyValueBase { #region [ Constructors ] /// /// Creates a new . /// /// The parent of this . /// The associated with this . public FrequencyValue(IDataCell parent, IFrequencyDefinition frequencyDefinition) : base(parent, frequencyDefinition) { } /// /// Creates a new from specified parameters. /// /// The parent of this . /// The associated with this . /// The floating point value that represents this . /// The floating point value that represents the change in this over time. public FrequencyValue(DataCell parent, FrequencyDefinition frequencyDefinition, double frequency, double dfdt) : base(parent, frequencyDefinition, frequency, dfdt) { } /// /// Creates a new from serialization parameters. /// /// The with populated with data. /// The source for this deserialization. protected FrequencyValue(SerializationInfo info, StreamingContext context) : base(info, context) { } #endregion #region [ Properties ] /// /// Gets or sets the parent of this . /// public new virtual DataCell Parent { get => base.Parent as DataCell; set => base.Parent = value; } /// /// Gets or sets the associated with this . /// public new virtual FrequencyDefinition Definition { get => base.Definition as FrequencyDefinition; set => base.Definition = value; } /// /// Gets the length of the . /// /// /// The SEL Fast Message protocol provides frequency and df/dt as optional data measurements, so we override /// the default behavior to account for this change in operation. /// protected override int BodyLength => 4; /// /// Gets the binary body image of the object. /// protected override byte[] BodyImage => BigEndian.GetBytes((float)Frequency); #endregion #region [ Methods ] /// /// Parses the binary body image. /// /// Binary image to parse. /// Start index into to begin parsing. /// Length of valid data within . /// The length of the data that was parsed. protected override int ParseBodyImage(byte[] buffer, int startIndex, int length) { Frequency = BigEndian.ToSingle(buffer, startIndex); return 4; } #endregion #region [ Static ] // Static Methods // Delegate handler to create a new SEL Fast Message frequency value internal static IFrequencyValue CreateNewValue(IDataCell parent, IFrequencyDefinition definition, byte[] buffer, int startIndex, out int parsedLength) { IFrequencyValue frequency = new FrequencyValue(parent, definition); parsedLength = frequency.ParseBinaryImage(buffer, startIndex, 0); return frequency; } #endregion } }