using System; using System.Collections.Generic; using System.Linq; using System.Text; using Crestron.SimplSharp; using Crestron.SimplSharpPro; using PepperDash.Core; namespace PepperDash.Essentials.Core { /// /// Helper class for various Sig events /// public class SigHelper { /// /// Runs action when Sig is pressed /// /// public static void Pressed(Sig sig, Action act) { if (sig.BoolValue) act(); } /// /// Runs action when Sig is released /// public static void Released(Sig sig, Action act) { if (!sig.BoolValue) act(); } /// /// Safely sets an action to non-null sig /// public static void SetBoolOutAction(BoolOutputSig sig, Action a) { if (sig != null) sig.UserObject = a; } /// /// Safely clears action of non-null sig. /// public static void ClearBoolOutAction(BoolOutputSig sig) { if (sig != null) sig.UserObject = null; } /// /// Does a timed ramp, where the time is scaled proportional to the /// remaining range to cover /// /// Ushort sig to scale /// Level to go to /// In ms (not hundredths like Crestron Sig ramp function) public static void RampTimeScaled(Sig sig, ushort newLevel, uint time) { ushort level = sig.UShortValue; int diff = Math.Abs(level - newLevel); uint scaledTime = (uint)(diff * time / 65535); Ramp(sig, newLevel, scaledTime); } /// /// Ramps signal /// /// /// /// In ms (not hundredths like Crestron Sig ramp function) public static void Ramp(Sig sig, ushort level, uint time) { sig.CreateRamp(level, time / 10); } } }