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) ); } }