public static DataValue SteppedInterpolate(DateTime timestamp, DataValue earlyBound)
{
// can't interpolate if no start bound.
if (StatusCode.IsBad(earlyBound.StatusCode))
{
return new DataValue(Variant.Null, StatusCodes.BadNoData, timestamp, timestamp);
}
DataValue dataValue = new DataValue();
dataValue.WrappedValue = earlyBound.WrappedValue;
dataValue.SourceTimestamp = timestamp;
dataValue.ServerTimestamp = timestamp;
dataValue.StatusCode = StatusCodes.Good;
// update status code.
if (StatusCode.IsBad(earlyBound.StatusCode))
{
dataValue.StatusCode = StatusCodes.BadNoData;
}
// update status code.
if (StatusCode.IsNotGood(earlyBound.StatusCode))
{
dataValue.StatusCode = StatusCodes.UncertainDataSubNormal;
}
dataValue.StatusCode = dataValue.StatusCode.SetAggregateBits(AggregateBits.Interpolated);
return dataValue;
}