namespace Sick.SafetyScanners.DataStructures;
///
/// Sensor data feature flags constants and helper methods
/// Used to configure which data blocks should be included in scan data output
///
public static class SensorDataFeatures
{
///
/// All features enabled (0b11111)
///
public const ushort All = 0b11111;
///
/// No features enabled
///
public const ushort None = 0;
///
/// General system state feature (bit 0)
///
public const ushort GeneralSystemState = 1 << 0;
///
/// Derived settings feature (bit 1)
///
public const ushort DerivedSettings = 1 << 1;
///
/// Measurement data feature (bit 2)
///
public const ushort MeasurementData = 1 << 2;
///
/// Intrusion data feature (bit 3)
///
public const ushort IntrusionData = 1 << 3;
///
/// Application data feature (bit 4)
///
public const ushort ApplicationData = 1 << 4;
///
/// Checks if a certain feature flag is set in the bitset
///
/// The bitset expressed as ushort
/// The feature flag to check
/// True if the flag is set, false otherwise
public static bool IsFlagSet(ushort bitset, ushort flag)
{
return (bitset & flag) == flag;
}
///
/// Converts boolean indicators (for the sensor features to be streamed) into a bitset
///
/// Indicator for the general system state channel
/// Turn on/off derived values
/// Turn on/off measurement data
/// Turn on/off safety field intrusion data
/// Turn on/off application data
/// A bitset containing indication flags for each feature channel
public static ushort ToFeatureFlags(
bool generalSystemState,
bool derivedSettings,
bool measurementData,
bool intrusionData,
bool applicationData)
{
return (ushort)(
(generalSystemState ? GeneralSystemState : 0) +
(derivedSettings ? DerivedSettings : 0) +
(measurementData ? MeasurementData : 0) +
(intrusionData ? IntrusionData : 0) +
(applicationData ? ApplicationData : 0)
);
}
}