Adds DisplayControllerBRidge

This commit is contained in:
Jason T Alborough
2019-01-21 11:42:47 -05:00
parent 6ea966ec6c
commit 6c02423a1c

View File

@@ -12,87 +12,121 @@ namespace PepperDash.Essentials.Bridges
{ {
public static class DisplayControllerApiExtensions public static class DisplayControllerApiExtensions
{ {
public static BasicTriList _TriList;
public static DisplayControllerJoinMap JoinMap;
public static int InputNumber;
public static IntFeedback InputNumberFeedback;
public static List<string> InputKeys = new List<string>();
public static void LinkToApi(this PepperDash.Essentials.Core.TwoWayDisplayBase displayDevice, BasicTriList trilist, uint joinStart, string joinMapKey) 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(1, "Linking to Trilist '{0}'", trilist.ID.ToString("X"));
Debug.Console(0, "Linking to Bridge Type {0}", displayDevice.GetType().Name.ToString()); Debug.Console(0, "Linking to Bridge Type {0}", displayDevice.GetType().Name.ToString());
var commMonitor = displayDevice as ICommunicationMonitor; trilist.StringInput[JoinMap.Name].StringValue = displayDevice.GetType().Name.ToString();
commMonitor.CommunicationMonitor.IsOnlineFeedback.LinkInputSig(trilist.BooleanInput[joinMap.IsOnline]);
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 // Poewer Off
trilist.SetSigTrueAction(joinMap.PowerOff, () => displayDevice.PowerOff()); trilist.SetSigTrueAction(JoinMap.PowerOff, () =>
displayDevice.PowerIsOnFeedback.LinkComplementInputSig(trilist.BooleanInput[joinMap.PowerOff]); {
InputNumber = 102;
InputNumberFeedback.FireUpdate();
displayDevice.PowerOff();
});
displayDevice.PowerIsOnFeedback.OutputChange += new EventHandler<FeedbackEventArgs>(PowerIsOnFeedback_OutputChange);
displayDevice.PowerIsOnFeedback.LinkComplementInputSig(trilist.BooleanInput[JoinMap.PowerOff]);
// Poewer On // Poewer On
trilist.SetSigTrueAction(joinMap.PowerOn, () => displayDevice.PowerOn()); trilist.SetSigTrueAction(JoinMap.PowerOn, () =>
displayDevice.PowerIsOnFeedback.LinkInputSig(trilist.BooleanInput[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<FeedbackEventArgs>(CurrentInputFeedback_OutputChange);
trilist.SetUShortSigAction(JoinMap.InputSelect, (a) =>
{ {
if (a == 0) if (a == 0)
{ {
displayDevice.PowerOff(); 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); 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) static void CurrentInputFeedback_OutputChange(object sender, FeedbackEventArgs e)
{ {
var tempIndex = sceneIndex - 1;
//trilist.SetSigTrueAction((uint)(joinMap.LightingSceneOffset + sceneIndex), () => displayDevice.SelectScene(displayDevice.LightingScenes[tempIndex])); Debug.Console(0, "CurrentInputFeedback_OutputChange {0}", e.StringValue);
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") static void PowerIsOnFeedback_OutputChange(object sender, FeedbackEventArgs e)
{ {
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; });
// Debug.Console(0, "PowerIsOnFeedback_OutputChange {0}", e.BoolValue);
/* if (!e.BoolValue)
var lutronLights = displayDevice as PepperDash.Essentials.Devices.Common.Environment.Lutron.LutronQuantumArea;
for (uint i = 1; i <= lightingBase.CircuitCount; i++)
{ {
var circuit = i; InputNumber = 102;
lightingBase.CircuitNameFeedbacks[circuit - 1].LinkInputSig(trilist.StringInput[joinMap.CircuitNames + circuit]); InputNumberFeedback.FireUpdate();
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));
} }
*/ else
{
InputNumber = 0;
InputNumberFeedback.FireUpdate();
} }
} }
}
public class DisplayControllerJoinMap : JoinMapBase 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 IsOnline { get; set; }
public uint PowerOff { get; set; } public uint PowerOff { get; set; }
public uint InputSelect { get; set; } public uint InputSelect { get; set; }
@@ -105,13 +139,16 @@ namespace PepperDash.Essentials.Bridges
public DisplayControllerJoinMap() public DisplayControllerJoinMap()
{ {
// Digital // Digital
IsOnline = 1; IsOnline = 50;
PowerOff = 1; PowerOff = 1;
PowerOn = 2; PowerOn = 2;
InputSelect = 1; InputSelect = 4;
IntegrationIdSet = 1; IntegrationIdSet = 1;
LightingSceneOffset = 10; LightingSceneOffset = 10;
ButtonVisibilityOffset = 40; ButtonVisibilityOffset = 40;
Name = 1;
InputNamesOffset = 10;
InputSelectOffset = 4;
// Analog // Analog
} }
@@ -125,8 +162,9 @@ namespace PepperDash.Essentials.Bridges
SelectScene = SelectScene + joinOffset; SelectScene = SelectScene + joinOffset;
LightingSceneOffset = LightingSceneOffset + joinOffset; LightingSceneOffset = LightingSceneOffset + joinOffset;
ButtonVisibilityOffset = ButtonVisibilityOffset + joinOffset; ButtonVisibilityOffset = ButtonVisibilityOffset + joinOffset;
Name = Name + joinOffset;
InputNamesOffset = InputNamesOffset + joinOffset;
InputSelectOffset = InputSelectOffset + joinOffset;
} }
} }