diff --git a/PepperDashEssentials/Bridges/DisplayControllerBridge.cs b/PepperDashEssentials/Bridges/DisplayControllerBridge.cs index d154c624..8c266589 100644 --- a/PepperDashEssentials/Bridges/DisplayControllerBridge.cs +++ b/PepperDashEssentials/Bridges/DisplayControllerBridge.cs @@ -12,87 +12,121 @@ 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.TwoWayDisplayBase displayDevice, BasicTriList trilist, uint joinStart, string joinMapKey) { - var joinMap = JoinMapHelper.GetJoinMapForDevice(joinMapKey) as DisplayControllerJoinMap; + JoinMap = JoinMapHelper.GetJoinMapForDevice(joinMapKey) as DisplayControllerJoinMap; + _TriList = trilist; - 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(0, "Linking to Bridge Type {0}", displayDevice.GetType().Name.ToString()); - var commMonitor = displayDevice as ICommunicationMonitor; - commMonitor.CommunicationMonitor.IsOnlineFeedback.LinkInputSig(trilist.BooleanInput[joinMap.IsOnline]); - + trilist.StringInput[JoinMap.Name].StringValue = displayDevice.GetType().Name.ToString(); + InputNumberFeedback = new IntFeedback(() => { return InputNumber;}); + InputNumberFeedback.LinkInputSig(trilist.UShortInput[JoinMap.InputSelect]); + var commMonitor = displayDevice as ICommunicationMonitor; + commMonitor.CommunicationMonitor.IsOnlineFeedback.LinkInputSig(trilist.BooleanInput[JoinMap.IsOnline]); + // Poewer Off - trilist.SetSigTrueAction(joinMap.PowerOff, () => displayDevice.PowerOff()); - displayDevice.PowerIsOnFeedback.LinkComplementInputSig(trilist.BooleanInput[joinMap.PowerOff]); + trilist.SetSigTrueAction(JoinMap.PowerOff, () => + { + InputNumber = 102; + InputNumberFeedback.FireUpdate(); + displayDevice.PowerOff(); + }); + + displayDevice.PowerIsOnFeedback.OutputChange += new EventHandler(PowerIsOnFeedback_OutputChange); + displayDevice.PowerIsOnFeedback.LinkComplementInputSig(trilist.BooleanInput[JoinMap.PowerOff]); // Poewer On - trilist.SetSigTrueAction(joinMap.PowerOn, () => displayDevice.PowerOn()); - displayDevice.PowerIsOnFeedback.LinkInputSig(trilist.BooleanInput[joinMap.PowerOn]); + trilist.SetSigTrueAction(JoinMap.PowerOn, () => + { + InputNumber = 0; + InputNumberFeedback.FireUpdate(); + displayDevice.PowerOn(); + }); - trilist.SetUShortSigAction(joinMap.InputSelect, (a) => + 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); }); + trilist.StringInput[(ushort)(JoinMap.InputNamesOffset + count)].StringValue = input.Key.ToString(); + count++; + } + + displayDevice.CurrentInputFeedback.OutputChange += new EventHandler(CurrentInputFeedback_OutputChange); + trilist.SetUShortSigAction(JoinMap.InputSelect, (a) => { if (a == 0) { displayDevice.PowerOff(); + InputNumber = 0; } - else if (a > 0 && a < displayDevice.InputPorts.Count) + else if (a > 0 && a < displayDevice.InputPorts.Count && a != InputNumber) { displayDevice.ExecuteSwitch(displayDevice.InputPorts.ElementAt(a - 1).Selector); + InputNumber = a; } + else if (a == 102) + { + displayDevice.PowerToggle(); + + } + InputNumberFeedback.FireUpdate(); }); - // GenericLighitng Actions & FeedBack - - // int sceneIndex = 1; - /* - foreach (var scene in displayDevice.LightingScenes) - { - var tempIndex = sceneIndex - 1; - //trilist.SetSigTrueAction((uint)(joinMap.LightingSceneOffset + sceneIndex), () => displayDevice.SelectScene(displayDevice.LightingScenes[tempIndex])); - scene.IsActiveFeedback.LinkInputSig(trilist.BooleanInput[(uint)(joinMap.LightingSceneOffset + sceneIndex)]); - trilist.StringInput[(uint)(joinMap.LightingSceneOffset + sceneIndex)].StringValue = scene.Name; - trilist.BooleanInput[(uint)(joinMap.ButtonVisibilityOffset + sceneIndex)].BoolValue = true; - sceneIndex++; - } - - if (displayDevice.GetType().Name.ToString() == "LutronQuantumArea") - { - var lutronDevice = displayDevice as PepperDash.Essentials.Devices.Common.Environment.Lutron.LutronQuantumArea; - lutronDevice.CommunicationMonitor.IsOnlineFeedback.LinkInputSig(trilist.BooleanInput[joinMap.IsOnline]); - trilist.SetStringSigAction(joinMap.IntegrationIdSet, s => lutronDevice.IntegrationId = s); - } - */ - //ApiEisc.Eisc.SetStringSigAction(ApiMap.integrationID, (s) => { lutronLights.IntegrationId = s; }); - - - /* - var lutronLights = displayDevice as PepperDash.Essentials.Devices.Common.Environment.Lutron.LutronQuantumArea; - - - for (uint i = 1; i <= lightingBase.CircuitCount; i++) - { - var circuit = i; - lightingBase.CircuitNameFeedbacks[circuit - 1].LinkInputSig(trilist.StringInput[joinMap.CircuitNames + circuit]); - lightingBase.CircuitIsCritical[circuit - 1].LinkInputSig(trilist.BooleanInput[joinMap.CircuitIsCritical + circuit]); - lightingBase.CircuitState[circuit - 1].LinkInputSig(trilist.BooleanInput[joinMap.CircuitState + circuit]); - trilist.SetSigTrueAction(joinMap.CircuitCycle + circuit, () => lightingBase.CycleCircuit(circuit - 1)); - trilist.SetSigTrueAction(joinMap.CircuitOnCmd + circuit, () => lightingBase.TurnOnCircuit(circuit - 1)); - trilist.SetSigTrueAction(joinMap.CircuitOffCmd + circuit, () => lightingBase.TurnOffCircuit(circuit - 1)); - - } - */ + } + + static void CurrentInputFeedback_OutputChange(object sender, FeedbackEventArgs e) + { + + Debug.Console(0, "CurrentInputFeedback_OutputChange {0}", e.StringValue); + + } + + static void PowerIsOnFeedback_OutputChange(object sender, FeedbackEventArgs e) + { + + // Debug.Console(0, "PowerIsOnFeedback_OutputChange {0}", e.BoolValue); + if (!e.BoolValue) + { + InputNumber = 102; + InputNumberFeedback.FireUpdate(); + + } + else + { + InputNumber = 0; + InputNumberFeedback.FireUpdate(); + } + } + + + + } public class DisplayControllerJoinMap : JoinMapBase { + public uint Name { get; set; } + public uint InputNamesOffset { get; set; } + public uint InputSelectOffset { get; set; } public uint IsOnline { get; set; } public uint PowerOff { get; set; } public uint InputSelect { get; set; } @@ -105,13 +139,16 @@ namespace PepperDash.Essentials.Bridges public DisplayControllerJoinMap() { // Digital - IsOnline = 1; + IsOnline = 50; PowerOff = 1; PowerOn = 2; - InputSelect = 1; + InputSelect = 4; IntegrationIdSet = 1; LightingSceneOffset = 10; ButtonVisibilityOffset = 40; + Name = 1; + InputNamesOffset = 10; + InputSelectOffset = 4; // Analog } @@ -125,8 +162,9 @@ namespace PepperDash.Essentials.Bridges SelectScene = SelectScene + joinOffset; LightingSceneOffset = LightingSceneOffset + joinOffset; ButtonVisibilityOffset = ButtonVisibilityOffset + joinOffset; - - + Name = Name + joinOffset; + InputNamesOffset = InputNamesOffset + joinOffset; + InputSelectOffset = InputSelectOffset + joinOffset; } }