From 7958c64e67faa4b320e90ae047e61183a89208df Mon Sep 17 00:00:00 2001 From: Neil Dorin Date: Thu, 27 Jun 2019 14:21:09 -0600 Subject: [PATCH] Adds support for AirMediaControllerBridge --- .../Bridges/AirMediaControllerBridge.cs | 122 ++++++++++++++++++ .../Bridges/DisplayControllerBridge.cs | 53 ++++---- .../PepperDashEssentials.csproj | 1 + 3 files changed, 148 insertions(+), 28 deletions(-) create mode 100644 PepperDashEssentials/Bridges/AirMediaControllerBridge.cs diff --git a/PepperDashEssentials/Bridges/AirMediaControllerBridge.cs b/PepperDashEssentials/Bridges/AirMediaControllerBridge.cs new file mode 100644 index 00000000..9a447c7d --- /dev/null +++ b/PepperDashEssentials/Bridges/AirMediaControllerBridge.cs @@ -0,0 +1,122 @@ +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.Devices.Common; +using PepperDash.Essentials.DM.AirMedia; + +namespace PepperDash.Essentials.Bridges +{ + public static class AirMediaControllerApiExtensions + { + public static void LinkToApi(this AirMediaController airMedia, BasicTriList trilist, uint joinStart, string joinMapKey) + { + var joinMap = JoinMapHelper.GetJoinMapForDevice(joinMapKey) as AirMediaControllerJoinMap; + + if (joinMap == null) + { + joinMap = new AirMediaControllerJoinMap(); + } + + joinMap.OffsetJoinNumbers(joinStart); + + Debug.Console(1, "Linking to Trilist '{0}'", trilist.ID.ToString("X")); + Debug.Console(0, "Linking to Bridge Type {0}", airMedia.GetType().Name.ToString()); + + trilist.StringInput[joinMap.Name].StringValue = airMedia.GetType().Name.ToString(); + + var commMonitor = airMedia as ICommunicationMonitor; + if (commMonitor != null) + { + commMonitor.CommunicationMonitor.IsOnlineFeedback.LinkInputSig(trilist.BooleanInput[joinMap.IsOnline]); + } + + airMedia.IsInSessionFeedback.LinkInputSig(trilist.BooleanInput[joinMap.IsInSession]); + airMedia.HdmiVideoSyncDetectedFeedback.LinkInputSig(trilist.BooleanInput[joinMap.HdmiVideoSync]); + + trilist.SetSigTrueAction(joinMap.AutomaticInputRoutingEnabled, new Action( airMedia.AirMedia.DisplayControl.EnableAutomaticRouting)); + trilist.SetSigFalseAction(joinMap.AutomaticInputRoutingEnabled, new Action( airMedia.AirMedia.DisplayControl.DisableAutomaticRouting)); + airMedia.AutomaticInputRoutingEnabledFeedback.LinkInputSig(trilist.BooleanInput[joinMap.AutomaticInputRoutingEnabled]); + + trilist.SetUShortSigAction(joinMap.VideoOut, new Action((u) => airMedia.SelectVideoOut(u))); + + airMedia.VideoOutFeedback.LinkInputSig(trilist.UShortInput[joinMap.VideoOut]); + airMedia.ErrorFeedback.LinkInputSig(trilist.UShortInput[joinMap.ErrorFB]); + airMedia.NumberOfUsersConnectedFeedback.LinkInputSig(trilist.UShortInput[joinMap.NumberOfUsersConnectedFB]); + + trilist.SetUShortSigAction(joinMap.LoginCode, new Action((u) => airMedia.AirMedia.AirMedia.LoginCode.UShortValue = u)); + airMedia.LoginCodeFeedback.LinkInputSig(trilist.UShortInput[joinMap.LoginCode]); + + airMedia.ConnectionAddressFeedback.LinkInputSig(trilist.StringInput[joinMap.ConnectionAddressFB]); + airMedia.HostnameFeedback.LinkInputSig(trilist.StringInput[joinMap.HostnameFB]); + airMedia.SerialNumberFeedback.LinkInputSig(trilist.StringInput[joinMap.SerialNumberFeedback]); + } + + } + public class AirMediaControllerJoinMap : JoinMapBase + { + // Digital + public uint IsOnline { get; set; } + public uint IsInSession { get; set; } + public uint HdmiVideoSync { get; set; } + public uint AutomaticInputRoutingEnabled { get; set; } + + // Analog + public uint VideoOut { get; set; } + public uint ErrorFB { get; set; } + public uint NumberOfUsersConnectedFB { get; set; } + public uint LoginCode { get; set; } + + // Serial + public uint Name { get; set; } + public uint ConnectionAddressFB { get; set; } + public uint HostnameFB { get; set; } + public uint SerialNumberFeedback { get; set; } + + + public AirMediaControllerJoinMap() + { + // Digital + IsOnline = 1; + IsInSession = 2; + HdmiVideoSync = 3; + AutomaticInputRoutingEnabled = 4; + + // Analog + VideoOut = 1; + ErrorFB = 2; + NumberOfUsersConnectedFB = 3; + LoginCode = 4; + + // Serial + Name = 1; + ConnectionAddressFB = 2; + HostnameFB = 3; + SerialNumberFeedback = 4; + } + + public override void OffsetJoinNumbers(uint joinStart) + { + var joinOffset = joinStart - 1; + + IsOnline = IsOnline + joinOffset; + IsInSession = IsInSession + joinOffset; + HdmiVideoSync = HdmiVideoSync + joinOffset; + AutomaticInputRoutingEnabled = AutomaticInputRoutingEnabled + joinOffset; + + VideoOut = VideoOut + joinOffset; + ErrorFB = ErrorFB + joinOffset; + NumberOfUsersConnectedFB = NumberOfUsersConnectedFB + joinOffset; + LoginCode = LoginCode + joinOffset; + + Name = Name + joinOffset; + ConnectionAddressFB = ConnectionAddressFB + joinOffset; + HostnameFB = HostnameFB + joinOffset; + SerialNumberFeedback = SerialNumberFeedback + joinOffset; + } + } +} \ No newline at end of file diff --git a/PepperDashEssentials/Bridges/DisplayControllerBridge.cs b/PepperDashEssentials/Bridges/DisplayControllerBridge.cs index 594e888d..b9f31ad6 100644 --- a/PepperDashEssentials/Bridges/DisplayControllerBridge.cs +++ b/PepperDashEssentials/Bridges/DisplayControllerBridge.cs @@ -13,33 +13,30 @@ namespace PepperDash.Essentials.Bridges public static class DisplayControllerApiExtensions { - public static BasicTriList _TriList; - public static DisplayControllerJoinMap JoinMap; public static int InputNumber; public static IntFeedback InputNumberFeedback; public static List InputKeys = new List(); public static void LinkToApi(this PepperDash.Essentials.Core.DisplayBase displayDevice, BasicTriList trilist, uint joinStart, string joinMapKey) { - JoinMap = JoinMapHelper.GetJoinMapForDevice(joinMapKey) as DisplayControllerJoinMap; - _TriList = trilist; + var joinMap = JoinMapHelper.GetJoinMapForDevice(joinMapKey) as DisplayControllerJoinMap; - if (JoinMap == null) + if (joinMap == null) { - JoinMap = new DisplayControllerJoinMap(); + joinMap = new DisplayControllerJoinMap(); } - JoinMap.OffsetJoinNumbers(joinStart); + joinMap.OffsetJoinNumbers(joinStart); - Debug.Console(1, "Linking to Trilist '{0}'", _TriList.ID.ToString("X")); + Debug.Console(1, "Linking to Trilist '{0}'",trilist.ID.ToString("X")); Debug.Console(0, "Linking to Bridge Type {0}", displayDevice.GetType().Name.ToString()); - _TriList.StringInput[JoinMap.Name].StringValue = displayDevice.GetType().Name.ToString(); + trilist.StringInput[joinMap.Name].StringValue = displayDevice.GetType().Name.ToString(); var commMonitor = displayDevice as ICommunicationMonitor; if (commMonitor != null) { - commMonitor.CommunicationMonitor.IsOnlineFeedback.LinkInputSig(trilist.BooleanInput[JoinMap.IsOnline]); + commMonitor.CommunicationMonitor.IsOnlineFeedback.LinkInputSig(trilist.BooleanInput[joinMap.IsOnline]); } InputNumberFeedback = new IntFeedback(() => { return InputNumber; }); @@ -48,16 +45,16 @@ namespace PepperDash.Essentials.Bridges var twoWayDisplay = displayDevice as PepperDash.Essentials.Core.TwoWayDisplayBase; if (twoWayDisplay != null) { - trilist.SetBool(JoinMap.IsTwoWayDisplay, true); + trilist.SetBool(joinMap.IsTwoWayDisplay, true); twoWayDisplay.CurrentInputFeedback.OutputChange += new EventHandler(CurrentInputFeedback_OutputChange); - - InputNumberFeedback.LinkInputSig(_TriList.UShortInput[JoinMap.InputSelect]); + + InputNumberFeedback.LinkInputSig(trilist.UShortInput[joinMap.InputSelect]); } // Power Off - trilist.SetSigTrueAction(JoinMap.PowerOff, () => + trilist.SetSigTrueAction(joinMap.PowerOff, () => { InputNumber = 102; InputNumberFeedback.FireUpdate(); @@ -65,10 +62,10 @@ namespace PepperDash.Essentials.Bridges }); displayDevice.PowerIsOnFeedback.OutputChange += new EventHandler(PowerIsOnFeedback_OutputChange); - displayDevice.PowerIsOnFeedback.LinkComplementInputSig(trilist.BooleanInput[JoinMap.PowerOff]); + displayDevice.PowerIsOnFeedback.LinkComplementInputSig(trilist.BooleanInput[joinMap.PowerOff]); // PowerOn - trilist.SetSigTrueAction(JoinMap.PowerOn, () => + trilist.SetSigTrueAction(joinMap.PowerOn, () => { InputNumber = 0; InputNumberFeedback.FireUpdate(); @@ -76,21 +73,21 @@ namespace PepperDash.Essentials.Bridges }); - displayDevice.PowerIsOnFeedback.LinkInputSig(trilist.BooleanInput[JoinMap.PowerOn]); + displayDevice.PowerIsOnFeedback.LinkInputSig(trilist.BooleanInput[joinMap.PowerOn]); int count = 1; foreach (var input in displayDevice.InputPorts) { InputKeys.Add(input.Key.ToString()); var tempKey = InputKeys.ElementAt(count - 1); - trilist.SetSigTrueAction((ushort)(JoinMap.InputSelectOffset + count), () => { displayDevice.ExecuteSwitch(displayDevice.InputPorts[tempKey].Selector); }); - Debug.Console(2, displayDevice, "Setting Input Select Action on Digital Join {0} to Input: {1}", JoinMap.InputSelectOffset + count, displayDevice.InputPorts[tempKey].Key.ToString()); - trilist.StringInput[(ushort)(JoinMap.InputNamesOffset + count)].StringValue = input.Key.ToString(); + trilist.SetSigTrueAction((ushort)(joinMap.InputSelectOffset + count), () => { displayDevice.ExecuteSwitch(displayDevice.InputPorts[tempKey].Selector); }); + Debug.Console(2, displayDevice, "Setting Input Select Action on Digital Join {0} to Input: {1}", joinMap.InputSelectOffset + count, displayDevice.InputPorts[tempKey].Key.ToString()); + trilist.StringInput[(ushort)(joinMap.InputNamesOffset + count)].StringValue = input.Key.ToString(); count++; } - Debug.Console(2, displayDevice, "Setting Input Select Action on Analog Join {0}", JoinMap.InputSelect); - trilist.SetUShortSigAction(JoinMap.InputSelect, (a) => + Debug.Console(2, displayDevice, "Setting Input Select Action on Analog Join {0}", joinMap.InputSelect); + trilist.SetUShortSigAction(joinMap.InputSelect, (a) => { if (a == 0) { @@ -115,15 +112,15 @@ namespace PepperDash.Essentials.Bridges var volumeDisplay = displayDevice as IBasicVolumeControls; if (volumeDisplay != null) { - trilist.SetBoolSigAction(JoinMap.VolumeUp, (b) => volumeDisplay.VolumeUp(b)); - trilist.SetBoolSigAction(JoinMap.VolumeDown, (b) => volumeDisplay.VolumeDown(b)); - trilist.SetSigTrueAction(JoinMap.VolumeMute, () => volumeDisplay.MuteToggle()); + trilist.SetBoolSigAction(joinMap.VolumeUp, (b) => volumeDisplay.VolumeUp(b)); + trilist.SetBoolSigAction(joinMap.VolumeDown, (b) => volumeDisplay.VolumeDown(b)); + trilist.SetSigTrueAction(joinMap.VolumeMute, () => volumeDisplay.MuteToggle()); var volumeDisplayWithFeedback = volumeDisplay as IBasicVolumeWithFeedback; if(volumeDisplayWithFeedback != null) { - volumeDisplayWithFeedback.VolumeLevelFeedback.LinkInputSig(trilist.UShortInput[JoinMap.VolumeLevelFB]); - volumeDisplayWithFeedback.MuteFeedback.LinkInputSig(trilist.BooleanInput[JoinMap.VolumeMute]); + volumeDisplayWithFeedback.VolumeLevelFeedback.LinkInputSig(trilist.UShortInput[joinMap.VolumeLevelFB]); + volumeDisplayWithFeedback.MuteFeedback.LinkInputSig(trilist.BooleanInput[joinMap.VolumeMute]); } } } @@ -156,7 +153,7 @@ namespace PepperDash.Essentials.Bridges } - public class DisplayControllerJoinMap : JoinMapBase + public class DisplayControllerJoinMap : JoinMapBase { // Digital public uint PowerOff { get; set; } diff --git a/PepperDashEssentials/PepperDashEssentials.csproj b/PepperDashEssentials/PepperDashEssentials.csproj index b454f4b4..f594fbf3 100644 --- a/PepperDashEssentials/PepperDashEssentials.csproj +++ b/PepperDashEssentials/PepperDashEssentials.csproj @@ -119,6 +119,7 @@ +