internal static ChannelConversionBlock Read(Mdf mdf, Stream stream, uint position) { stream.Position = position; var block = new ChannelConversionBlock(mdf); block.Read(stream); var data = new byte[block.Size - 4]; var read = stream.Read(data, 0, data.Length); if (read != data.Length) { throw new FormatException(); } block.PhysicalValueRangeValid = BitConverter.ToInt16(data, 0) != 0; block.MinPhysicalValue = BitConverter.ToDouble(data, 2); block.MaxPhysicalValue = BitConverter.ToDouble(data, 10); block.PhysicalUnit = mdf.IDBlock.Encoding.GetString(data, 18, 20).Humanize(); block.ConversionType = (ConversionType)BitConverter.ToUInt16(data, 38); block.SizeInformation = BitConverter.ToUInt16(data, 40); if (block.SizeInformation > 0) { block.AdditionalConversionData.Data = new byte[ConversionData.GetEstimatedParametersSize(block.ConversionType)]; Array.Copy(data, 42, block.AdditionalConversionData.Data, 0, block.AdditionalConversionData.Data.Length); } return(block); }
internal override void Write(byte[] array, ref int index) { base.Write(array, ref index); var bytesValueRange = BitConverter.GetBytes(PhysicalValueRangeValid); var bytesMinValue = BitConverter.GetBytes(MinPhysicalValue); var bytesMaxValue = BitConverter.GetBytes(MaxPhysicalValue); var bytesPhyUnit = Mdf.IDBlock.Encoding.GetBytes(PhysicalUnit); var bytesConversionType = BitConverter.GetBytes((ushort)ConversionType); Array.Copy(bytesValueRange, 0, array, index + 4, bytesValueRange.Length); Array.Copy(bytesMinValue, 0, array, index + 6, bytesMinValue.Length); Array.Copy(bytesMaxValue, 0, array, index + 14, bytesMaxValue.Length); Array.Copy(bytesPhyUnit, 0, array, index + 22, bytesPhyUnit.Length); Array.Copy(bytesConversionType, 0, array, index + 42, bytesConversionType.Length); if (AdditionalConversionData.Data != null && AdditionalConversionData.Data.Length > 0) { var bytesSizeInformation = BitConverter.GetBytes(ConversionData.GetEstimatedParametersCount(ConversionType)); Array.Copy(bytesSizeInformation, 0, array, index + 44, bytesSizeInformation.Length); Array.Copy(AdditionalConversionData.Data, 0, array, index + 46, AdditionalConversionData.Data.Length); } index += GetSize(); }
private ChannelConversionBlock(Mdf mdf) : base(mdf) { AdditionalConversionData = new ConversionData(this); }