public static StatusCode GetHdaQualityCode(uint quality)
{
uint hdaCode = quality & 0xFFFF0000;
// check for bits indicating an out right error.
if ((hdaCode & OpcRcw.Hda.Constants.OPCHDA_NOBOUND) != 0)
{
return StatusCodes.BadBoundNotFound;
}
if ((hdaCode & OpcRcw.Hda.Constants.OPCHDA_NODATA) != 0)
{
return StatusCodes.BadNoData;
}
if ((hdaCode & OpcRcw.Hda.Constants.OPCHDA_DATALOST) != 0)
{
return StatusCodes.BadDataLost;
}
if ((hdaCode & OpcRcw.Hda.Constants.OPCHDA_CONVERSION) != 0)
{
return StatusCodes.BadTypeMismatch;
}
// Get DA part (lower 2 bytes).
StatusCode code = GetQualityCode((short)(quality & 0x0000FFFF));
// check for bits that are placed in the info bits.
AggregateBits aggregateBits = 0;
if ((hdaCode & OpcRcw.Hda.Constants.OPCHDA_EXTRADATA) != 0)
{
aggregateBits |= AggregateBits.ExtraData;
}
if ((hdaCode & OpcRcw.Hda.Constants.OPCHDA_INTERPOLATED) != 0)
{
aggregateBits |= AggregateBits.Interpolated;
}
if ((hdaCode & OpcRcw.Hda.Constants.OPCHDA_RAW) != 0)
{
aggregateBits |= AggregateBits.Raw;
}
if ((hdaCode & OpcRcw.Hda.Constants.OPCHDA_CALCULATED) != 0)
{
aggregateBits |= AggregateBits.Calculated;
}
if ((hdaCode & OpcRcw.Hda.Constants.OPCHDA_PARTIAL) != 0)
{
aggregateBits |= AggregateBits.Partial;
}
if (aggregateBits != 0)
{
return code.SetAggregateBits(aggregateBits);
}
return code;
}