Files
BQP/srcs/RobotNet10/RobotApp/Communication/Sick.SafetyScanners/DataStructures/SensorDataFeatures.cs
2026-07-13 09:25:40 +07:00

81 lines
2.7 KiB
C#

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