diff --git a/PepperDashEssentials/Bridges/BridgeBase.cs b/PepperDashEssentials/Bridges/BridgeBase.cs index 1131c1b0..db5f2f98 100644 --- a/PepperDashEssentials/Bridges/BridgeBase.cs +++ b/PepperDashEssentials/Bridges/BridgeBase.cs @@ -11,6 +11,7 @@ using PepperDash.Core; using PepperDash.Essentials.Core; using PepperDash.Essentials.Core.Devices; using PepperDash.Essentials.Core.Config; +using PepperDash.Essentials.Core.CrestronIO; using PepperDash.Essentials.DM; namespace PepperDash.Essentials.Bridges @@ -94,6 +95,14 @@ namespace PepperDash.Essentials.Bridges (device as DmRmcControllerBase).LinkToApi(Eisc, d.JoinStart, d.JoinMapKey); continue; } + else if (device is GenericRelayDevice) + { + (device as GenericRelayDevice).LinkToApi(Eisc, d.JoinStart, d.JoinMapKey); + } + else if (device is IDigitalInput) + { + (device as IDigitalInput).LinkToApi(Eisc, d.JoinStart, d.JoinMapKey); + } } } diff --git a/PepperDashEssentials/Bridges/GenericRelayDeviceBridge.cs b/PepperDashEssentials/Bridges/GenericRelayDeviceBridge.cs new file mode 100644 index 00000000..3871a80e --- /dev/null +++ b/PepperDashEssentials/Bridges/GenericRelayDeviceBridge.cs @@ -0,0 +1,66 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Crestron.SimplSharp; +using Crestron.SimplSharpPro.DeviceSupport; + + +using PepperDash.Core; +using PepperDash.Essentials.Core; +using PepperDash.Essentials.Core.CrestronIO; + +namespace PepperDash.Essentials.Bridges +{ + public static class GenericRelayDeviceApiExtensions + { + public static void LinkToApi(this GenericRelayDevice relay, BasicTriList trilist, uint joinStart, string joinMapKey) + { + var joinMap = JoinMapHelper.GetJoinMapForDevice(joinMapKey) as GenericRelayControllerJoinMap; + + if (joinMap == null) + joinMap = new GenericRelayControllerJoinMap(); + + joinMap.OffsetJoinNumbers(joinStart); + + if (relay.RelayOutput == null) + { + Debug.Console(1, relay, "Unable to link device '{0}'. Relay is null", relay.Key); + return; + } + + Debug.Console(1, relay, "Linking to Trilist '{0}'", trilist.ID.ToString("X")); + + trilist.SetBoolSigAction(joinMap.Relay, new Action(b => + { + if (b) + relay.CloseRelay(); + else + relay.OpenRelay(); + })); + + // feedback for relay state + + relay.OutputIsOnFeedback.LinkInputSig(trilist.BooleanInput[joinMap.Relay]); + } + + } + + public class GenericRelayControllerJoinMap : JoinMapBase + { + //Digital + public uint Relay { get; set; } + + public GenericRelayControllerJoinMap() + { + Relay = 1; + } + + public override void OffsetJoinNumbers(uint joinStart) + { + var joinOffset = joinStart - 1; + + Relay = Relay + joinOffset; + } + } +} \ No newline at end of file diff --git a/PepperDashEssentials/Bridges/IBasicCommunicationBridge.cs b/PepperDashEssentials/Bridges/IBasicCommunicationBridge.cs index 230f7806..8eeed161 100644 --- a/PepperDashEssentials/Bridges/IBasicCommunicationBridge.cs +++ b/PepperDashEssentials/Bridges/IBasicCommunicationBridge.cs @@ -63,13 +63,18 @@ namespace PepperDash.Essentials.Bridges public class IBasicCommunicationJoinMap : JoinMapBase { - // Default joins + //Digital + public uint Connect { get; set; } + public uint Connected { get; set; } + + //Analog + public uint Status { get; set; } + + // Serial public uint TextReceived { get; set; } public uint SendText { get; set; } public uint SetPortConfig { get; set; } - public uint Connect { get; set; } - public uint Connected { get; set; } - public uint Status { get; set; } + public IBasicCommunicationJoinMap() { @@ -94,38 +99,5 @@ namespace PepperDash.Essentials.Bridges } } } - ///// - ///// - ///// - //public static class DmChassisControllerApiExtensions - //{ - // public static void LinkToApi(this PepperDash.Essentials.DM.DmChassisController chassis, - // BasicTriList trilist, Dictionary map, uint joinstart) - // { - // uint joinOffset = joinstart - 1; - - // uint videoSelectOffset = 0 + joinOffset; - // uint audioSelectOffset = 40 + joinOffset; - - - // // loop chassis number of inupts - // for (uint i = 1; i <= chassis.Chassis.NumberOfOutputs; i++) - // { - // trilist.SetUShortSigAction(videoSelectOffset + i, new Action(u => chassis.ExecuteSwitch(u, i, eRoutingSignalType.Video))); - // trilist.SetUShortSigAction(audioSelectOffset + i, new Action(u => chassis.ExecuteSwitch(u, i, eRoutingSignalType.Audio))); - // } - - // // wire up output change detection (try to add feedbacks or something to DMChassisController?? - - // // names? - - // // HDCP? - - - // } - //} - - - } \ No newline at end of file diff --git a/PepperDashEssentials/Bridges/IDigitalInputBridge.cs b/PepperDashEssentials/Bridges/IDigitalInputBridge.cs new file mode 100644 index 00000000..c33329dd --- /dev/null +++ b/PepperDashEssentials/Bridges/IDigitalInputBridge.cs @@ -0,0 +1,59 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Crestron.SimplSharp; +using Crestron.SimplSharpPro.DeviceSupport; + +using PepperDash.Core; +using PepperDash.Essentials.Core.CrestronIO; + +namespace PepperDash.Essentials.Bridges +{ + public static class IDigitalInputApiExtenstions + { + public static void LinkToApi(this IDigitalInput input, BasicTriList trilist, uint joinStart, string joinMapKey) + { + var joinMap = JoinMapHelper.GetJoinMapForDevice(joinMapKey) as IDigitalInputApiJoinMap; + + if (joinMap == null) + joinMap = new IDigitalInputApiJoinMap(); + + joinMap.OffsetJoinNumbers(joinStart); + + try + { + Debug.Console(1, input as Device, "Linking to Trilist '{0}'", trilist.ID.ToString("X")); + + // Link feedback for input state + input.InputStateFeedback.LinkInputSig(trilist.BooleanInput[joinMap.InputState]); + } + catch (Exception e) + { + Debug.Console(1, input as Device, "Unable to link device '{0}'. Input is null", (input as Device).Key); + Debug.Console(1, input as Device, "Error: {0}", e); + return; + } + } + + + } + + public class IDigitalInputApiJoinMap : JoinMapBase + { + //Digital + public uint InputState { get; set; } + + public IDigitalInputApiJoinMap() + { + InputState = 1; + } + + public override void OffsetJoinNumbers(uint joinStart) + { + var joinOffset = joinStart - 1; + + InputState = InputState + joinOffset; + } + } +} \ No newline at end of file diff --git a/PepperDashEssentials/ControlSystem.cs b/PepperDashEssentials/ControlSystem.cs index a5558cf3..aec533cd 100644 --- a/PepperDashEssentials/ControlSystem.cs +++ b/PepperDashEssentials/ControlSystem.cs @@ -4,6 +4,8 @@ using Crestron.SimplSharp; using Crestron.SimplSharp.CrestronIO; using Crestron.SimplSharpPro; using Crestron.SimplSharpPro.CrestronThread; +using Crestron.SimplSharpPro.Diagnostics; + using PepperDash.Core; using PepperDash.Essentials.Core; using PepperDash.Essentials.Core.Config; @@ -32,6 +34,8 @@ namespace PepperDash.Essentials /// public override void InitializeSystem() { + SystemMonitor.ProgramInitialization.ProgramInitializationUnderUserControl = true; + DeterminePlatform(); //CrestronConsole.AddNewConsoleCommand(s => GoWithLoad(), "go", "Loads configuration file", @@ -141,6 +145,8 @@ namespace PepperDash.Essentials "------------------------------------------------\r" + "------------------------------------------------"); } + + SystemMonitor.ProgramInitialization.ProgramInitializationUnderUserControl = true; } catch (Exception e) { diff --git a/PepperDashEssentials/PepperDashEssentials.csproj b/PepperDashEssentials/PepperDashEssentials.csproj index b4932ded..8270090c 100644 --- a/PepperDashEssentials/PepperDashEssentials.csproj +++ b/PepperDashEssentials/PepperDashEssentials.csproj @@ -114,8 +114,10 @@ + +