diff --git a/PepperDashEssentials/Bridges/DisplayControllerBridge.cs b/PepperDashEssentials/Bridges/DisplayControllerBridge.cs
new file mode 100644
index 00000000..9dd018fb
--- /dev/null
+++ b/PepperDashEssentials/Bridges/DisplayControllerBridge.cs
@@ -0,0 +1,120 @@
+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;
+
+namespace PepperDash.Essentials.Bridges
+{
+ public static class SamsungDisplayControllerApiExtensions
+ {
+ public static void LinkToApi(this PepperDash.Essentials.Core.TwoWayDisplayBase displayDevice, BasicTriList trilist, uint joinStart, string joinMapKey)
+ {
+ var joinMap = JoinMapHelper.GetJoinMapForDevice(joinMapKey) as DisplayControllerJoinMap;
+
+ if (joinMap == null)
+ {
+ joinMap = new DisplayControllerJoinMap();
+ }
+
+ joinMap.OffsetJoinNumbers(joinStart);
+ Debug.Console(1, "Linking to Trilist '{0}'", trilist.ID.ToString("X"));
+ Debug.Console(0, "Linking to lighting Type {0}", displayDevice.GetType().Name.ToString());
+
+ 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]);
+
+ // Poewer On
+ trilist.SetSigTrueAction(joinMap.PowerOn, () => displayDevice.PowerOn());
+ displayDevice.PowerIsOnFeedback.LinkInputSig(trilist.BooleanInput[joinMap.PowerOn]);
+
+ // 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));
+
+ }
+ */
+ }
+ }
+ public class DisplayControllerJoinMap : JoinMapBase
+ {
+ public uint IsOnline { get; set; }
+ public uint PowerOff { get; set; }
+ public uint PowerOn { get; set; }
+ public uint SelectScene { get; set; }
+ public uint LightingSceneOffset { get; set; }
+ public uint ButtonVisibilityOffset { get; set; }
+ public uint IntegrationIdSet { get; set; }
+
+ public DisplayControllerJoinMap()
+ {
+ // Digital
+ IsOnline = 1;
+ PowerOff = 1;
+ PowerOn = 2;
+ SelectScene = 1;
+ IntegrationIdSet = 1;
+ LightingSceneOffset = 10;
+ ButtonVisibilityOffset = 40;
+ // Analog
+ }
+
+ public override void OffsetJoinNumbers(uint joinStart)
+ {
+ var joinOffset = joinStart - 1;
+
+ IsOnline = IsOnline + joinOffset;
+ PowerOff = PowerOff + joinOffset;
+ PowerOn = PowerOn + joinOffset;
+ SelectScene = SelectScene + joinOffset;
+ LightingSceneOffset = LightingSceneOffset + joinOffset;
+ ButtonVisibilityOffset = ButtonVisibilityOffset + joinOffset;
+
+
+
+ }
+ }
+}
\ No newline at end of file
diff --git a/PepperDashEssentials/Bridges/DspControllerBridge.cs b/PepperDashEssentials/Bridges/DspControllerBridge.cs
new file mode 100644
index 00000000..9dd018fb
--- /dev/null
+++ b/PepperDashEssentials/Bridges/DspControllerBridge.cs
@@ -0,0 +1,120 @@
+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;
+
+namespace PepperDash.Essentials.Bridges
+{
+ public static class SamsungDisplayControllerApiExtensions
+ {
+ public static void LinkToApi(this PepperDash.Essentials.Core.TwoWayDisplayBase displayDevice, BasicTriList trilist, uint joinStart, string joinMapKey)
+ {
+ var joinMap = JoinMapHelper.GetJoinMapForDevice(joinMapKey) as DisplayControllerJoinMap;
+
+ if (joinMap == null)
+ {
+ joinMap = new DisplayControllerJoinMap();
+ }
+
+ joinMap.OffsetJoinNumbers(joinStart);
+ Debug.Console(1, "Linking to Trilist '{0}'", trilist.ID.ToString("X"));
+ Debug.Console(0, "Linking to lighting Type {0}", displayDevice.GetType().Name.ToString());
+
+ 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]);
+
+ // Poewer On
+ trilist.SetSigTrueAction(joinMap.PowerOn, () => displayDevice.PowerOn());
+ displayDevice.PowerIsOnFeedback.LinkInputSig(trilist.BooleanInput[joinMap.PowerOn]);
+
+ // 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));
+
+ }
+ */
+ }
+ }
+ public class DisplayControllerJoinMap : JoinMapBase
+ {
+ public uint IsOnline { get; set; }
+ public uint PowerOff { get; set; }
+ public uint PowerOn { get; set; }
+ public uint SelectScene { get; set; }
+ public uint LightingSceneOffset { get; set; }
+ public uint ButtonVisibilityOffset { get; set; }
+ public uint IntegrationIdSet { get; set; }
+
+ public DisplayControllerJoinMap()
+ {
+ // Digital
+ IsOnline = 1;
+ PowerOff = 1;
+ PowerOn = 2;
+ SelectScene = 1;
+ IntegrationIdSet = 1;
+ LightingSceneOffset = 10;
+ ButtonVisibilityOffset = 40;
+ // Analog
+ }
+
+ public override void OffsetJoinNumbers(uint joinStart)
+ {
+ var joinOffset = joinStart - 1;
+
+ IsOnline = IsOnline + joinOffset;
+ PowerOff = PowerOff + joinOffset;
+ PowerOn = PowerOn + joinOffset;
+ SelectScene = SelectScene + joinOffset;
+ LightingSceneOffset = LightingSceneOffset + joinOffset;
+ ButtonVisibilityOffset = ButtonVisibilityOffset + joinOffset;
+
+
+
+ }
+ }
+}
\ No newline at end of file
diff --git a/PepperDashEssentials/PepperDashEssentials.csproj b/PepperDashEssentials/PepperDashEssentials.csproj
index da678eb0..71a6a1d6 100644
--- a/PepperDashEssentials/PepperDashEssentials.csproj
+++ b/PepperDashEssentials/PepperDashEssentials.csproj
@@ -115,6 +115,7 @@
+
diff --git a/Release Package/PepperDashEssentials.cpz b/Release Package/PepperDashEssentials.cpz
deleted file mode 100644
index 730aac16..00000000
Binary files a/Release Package/PepperDashEssentials.cpz and /dev/null differ
diff --git a/Release Package/PepperDashEssentials.dll b/Release Package/PepperDashEssentials.dll
deleted file mode 100644
index 9832c536..00000000
Binary files a/Release Package/PepperDashEssentials.dll and /dev/null differ