diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml
index e95ac127..839ae827 100644
--- a/.github/workflows/docker.yml
+++ b/.github/workflows/docker.yml
@@ -11,7 +11,7 @@ on:
env:
# solution path doesn't need slashes unless there it is multiple folders deep
- # solution name does not include extension. .sln is assumed
+ # solution name does not include extension. .sln is assumed
SOLUTION_PATH: PepperDashEssentials
SOLUTION_FILE: PepperDashEssentials
# Do not edit this, we're just creating it here
diff --git a/essentials-framework/Essentials Core/PepperDashEssentialsBase/Bridges/BridgeBase.cs b/essentials-framework/Essentials Core/PepperDashEssentialsBase/Bridges/BridgeBase.cs
index ecb53ffc..5bde418f 100644
--- a/essentials-framework/Essentials Core/PepperDashEssentialsBase/Bridges/BridgeBase.cs
+++ b/essentials-framework/Essentials Core/PepperDashEssentialsBase/Bridges/BridgeBase.cs
@@ -114,11 +114,13 @@ namespace PepperDash.Essentials.Core.Bridges
//{
// Debug.Console(2, this, "'{0}' is IBridge", device.Key);
//}
- if (device.GetType().GetCType().IsAssignableFrom(typeof (IBridgeAdvanced)))
+ if (!typeof (IBridgeAdvanced).IsAssignableFrom(device.GetType().GetCType()))
{
- var bridge = device as IBridgeAdvanced;
- if (bridge != null) bridge.LinkToApi(Eisc, d.JoinStart, d.JoinMapKey, this);
+ continue;
}
+
+ var bridge = device as IBridgeAdvanced;
+ if (bridge != null) bridge.LinkToApi(Eisc, d.JoinStart, d.JoinMapKey, this);
}
diff --git a/essentials-framework/Essentials Core/PepperDashEssentialsBase/Config/Comm and IR/ComPortController.cs b/essentials-framework/Essentials Core/PepperDashEssentialsBase/Config/Comm and IR/ComPortController.cs
index 07260c7e..3fbfb43d 100644
--- a/essentials-framework/Essentials Core/PepperDashEssentialsBase/Config/Comm and IR/ComPortController.cs
+++ b/essentials-framework/Essentials Core/PepperDashEssentialsBase/Config/Comm and IR/ComPortController.cs
@@ -30,7 +30,7 @@ namespace PepperDash.Essentials.Core
{
Port = postActivationFunc(config);
- ConfigureComPort();
+ RegisterAndConfigureComPort();
});
}
@@ -47,22 +47,21 @@ namespace PepperDash.Essentials.Core
Spec = spec;
//IsConnected = new BoolFeedback(CommonBoolCue.IsConnected, () => true);
- if (Port.Parent is CrestronControlSystem)
- {
-
-
- var result = Port.Register();
- if (result != eDeviceRegistrationUnRegistrationResponse.Success)
- {
- Debug.Console(0, this, "ERROR: Cannot register Com port: {0}", result);
- return; // false
- }
- }
- ConfigureComPort();
+ RegisterAndConfigureComPort();
}
- private void ConfigureComPort()
+ private void RegisterAndConfigureComPort()
{
+ if (Port.Parent is CrestronControlSystem)
+ {
+ var result = Port.Register();
+ if (result != eDeviceRegistrationUnRegistrationResponse.Success)
+ {
+ Debug.Console(0, this, "ERROR: Cannot register Com port: {0}", result);
+ return; // false
+ }
+ }
+
var specResult = Port.SetComPortSpec(Spec);
if (specResult != 0)
{
diff --git a/essentials-framework/Essentials Core/PepperDashEssentialsBase/Display/BasicIrDisplay.cs b/essentials-framework/Essentials Core/PepperDashEssentialsBase/Display/BasicIrDisplay.cs
index 95628e4e..fd83f2a2 100644
--- a/essentials-framework/Essentials Core/PepperDashEssentialsBase/Display/BasicIrDisplay.cs
+++ b/essentials-framework/Essentials Core/PepperDashEssentialsBase/Display/BasicIrDisplay.cs
@@ -14,7 +14,7 @@ using PepperDash.Essentials.Core.Routing;
namespace PepperDash.Essentials.Core
{
- public class BasicIrDisplay : DisplayBase, IBasicVolumeControls, IPower, IWarmingCooling
+ public class BasicIrDisplay : DisplayBase, IBasicVolumeControls, IBridgeAdvanced
{
public IrOutputPortController IrPort { get; private set; }
public ushort IrPulseTime { get; set; }
@@ -204,7 +204,7 @@ namespace PepperDash.Essentials.Core
#endregion
- public override void LinkToApi(BasicTriList trilist, uint joinStart, string joinMapKey, EiscApiAdvanced bridge)
+ public void LinkToApi(BasicTriList trilist, uint joinStart, string joinMapKey, EiscApiAdvanced bridge)
{
LinkDisplayToApi(this, trilist, joinStart, joinMapKey, bridge);
}
diff --git a/essentials-framework/Essentials Core/PepperDashEssentialsBase/Display/DisplayBase.cs b/essentials-framework/Essentials Core/PepperDashEssentialsBase/Display/DisplayBase.cs
index c8d46377..9f528322 100644
--- a/essentials-framework/Essentials Core/PepperDashEssentialsBase/Display/DisplayBase.cs
+++ b/essentials-framework/Essentials Core/PepperDashEssentialsBase/Display/DisplayBase.cs
@@ -1,290 +1,290 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using Crestron.SimplSharp;
-using Crestron.SimplSharpPro;
-using Crestron.SimplSharpPro.DeviceSupport;
-using Crestron.SimplSharpPro.DM;
-using Crestron.SimplSharpPro.DM.Endpoints;
-using Crestron.SimplSharpPro.DM.Endpoints.Transmitters;
-using Newtonsoft.Json;
-using PepperDash.Core;
-using PepperDash.Essentials.Core.Bridges;
-
-
-namespace PepperDash.Essentials.Core
-{
- ///
- ///
- ///
- public abstract class DisplayBase : EssentialsBridgeableDevice, IHasFeedback, IRoutingSinkWithSwitching, IPower, IWarmingCooling, IUsageTracking
- {
- public event SourceInfoChangeHandler CurrentSourceChange;
-
- public string CurrentSourceInfoKey { get; set; }
- public SourceListItem CurrentSourceInfo
- {
- get
- {
- return _CurrentSourceInfo;
- }
- set
- {
- if (value == _CurrentSourceInfo) return;
-
- var handler = CurrentSourceChange;
-
- if (handler != null)
- handler(_CurrentSourceInfo, ChangeType.WillChange);
-
- _CurrentSourceInfo = value;
-
- if (handler != null)
- handler(_CurrentSourceInfo, ChangeType.DidChange);
- }
- }
- SourceListItem _CurrentSourceInfo;
-
- public BoolFeedback PowerIsOnFeedback { get; protected set; }
- public BoolFeedback IsCoolingDownFeedback { get; protected set; }
- public BoolFeedback IsWarmingUpFeedback { get; private set; }
-
- public UsageTracking UsageTracker { get; set; }
-
- public uint WarmupTime { get; set; }
- public uint CooldownTime { get; set; }
-
- ///
- /// Bool Func that will provide a value for the PowerIsOn Output. Must be implemented
- /// by concrete sub-classes
- ///
- abstract protected Func PowerIsOnFeedbackFunc { get; }
- abstract protected Func IsCoolingDownFeedbackFunc { get; }
- abstract protected Func IsWarmingUpFeedbackFunc { get; }
-
-
- protected CTimer WarmupTimer;
- protected CTimer CooldownTimer;
-
- #region IRoutingInputs Members
-
- public RoutingPortCollection InputPorts { get; private set; }
-
- #endregion
-
- protected DisplayBase(string key, string name)
- : base(key, name)
- {
- PowerIsOnFeedback = new BoolFeedback("PowerOnFeedback", PowerIsOnFeedbackFunc);
- IsCoolingDownFeedback = new BoolFeedback("IsCoolingDown", IsCoolingDownFeedbackFunc);
- IsWarmingUpFeedback = new BoolFeedback("IsWarmingUp", IsWarmingUpFeedbackFunc);
-
- InputPorts = new RoutingPortCollection();
-
- PowerIsOnFeedback.OutputChange += PowerIsOnFeedback_OutputChange;
- }
-
- void PowerIsOnFeedback_OutputChange(object sender, EventArgs e)
- {
- if (UsageTracker != null)
- {
- if (PowerIsOnFeedback.BoolValue)
- UsageTracker.StartDeviceUsage();
- else
- UsageTracker.EndDeviceUsage();
- }
- }
-
- public abstract void PowerOn();
- public abstract void PowerOff();
- public abstract void PowerToggle();
-
- public virtual FeedbackCollection Feedbacks
- {
- get
- {
- return new FeedbackCollection
- {
- PowerIsOnFeedback,
- IsCoolingDownFeedback,
- IsWarmingUpFeedback
- };
- }
- }
-
- public abstract void ExecuteSwitch(object selector);
-
- protected void LinkDisplayToApi(DisplayBase displayDevice, BasicTriList trilist, uint joinStart, string joinMapKey,
- EiscApiAdvanced bridge)
- {
- var inputNumber = 0;
- var inputKeys = new List();
-
- var joinMap = new DisplayControllerJoinMap(joinStart);
-
- var joinMapSerialized = JoinMapHelper.GetSerializedJoinMapForDevice(joinMapKey);
-
- if (!string.IsNullOrEmpty(joinMapSerialized))
- joinMap = JsonConvert.DeserializeObject(joinMapSerialized);
-
- Debug.Console(1, "Linking to Trilist '{0}'", trilist.ID.ToString("X"));
- Debug.Console(0, "Linking to Display: {0}", displayDevice.Name);
-
- trilist.StringInput[joinMap.Name.JoinNumber].StringValue = displayDevice.Name;
-
- var commMonitor = displayDevice as ICommunicationMonitor;
- if (commMonitor != null)
- {
- commMonitor.CommunicationMonitor.IsOnlineFeedback.LinkInputSig(trilist.BooleanInput[joinMap.IsOnline.JoinNumber]);
- }
-
- var inputNumberFeedback = new IntFeedback(() => inputNumber);
-
- // Two way feedbacks
- var twoWayDisplay = displayDevice as TwoWayDisplayBase;
-
- if (twoWayDisplay != null)
- {
- trilist.SetBool(joinMap.IsTwoWayDisplay.JoinNumber, true);
-
- twoWayDisplay.CurrentInputFeedback.OutputChange += (o, a) => Debug.Console(0, "CurrentInputFeedback_OutputChange {0}", a.StringValue);
-
-
- inputNumberFeedback.LinkInputSig(trilist.UShortInput[joinMap.InputSelect.JoinNumber]);
- }
-
- // Power Off
- trilist.SetSigTrueAction(joinMap.PowerOff.JoinNumber, () =>
- {
- inputNumber = 102;
- inputNumberFeedback.FireUpdate();
- displayDevice.PowerOff();
- });
-
- displayDevice.PowerIsOnFeedback.OutputChange += (o, a) =>
- {
- if (!a.BoolValue)
- {
- inputNumber = 102;
- inputNumberFeedback.FireUpdate();
-
- }
- else
- {
- inputNumber = 0;
- inputNumberFeedback.FireUpdate();
- }
- };
-
- displayDevice.PowerIsOnFeedback.LinkComplementInputSig(trilist.BooleanInput[joinMap.PowerOff.JoinNumber]);
-
- // PowerOn
- trilist.SetSigTrueAction(joinMap.PowerOn.JoinNumber, () =>
- {
- inputNumber = 0;
- inputNumberFeedback.FireUpdate();
- displayDevice.PowerOn();
- });
-
-
- displayDevice.PowerIsOnFeedback.LinkInputSig(trilist.BooleanInput[joinMap.PowerOn.JoinNumber]);
-
- for (int i = 0; i < displayDevice.InputPorts.Count; i++)
- {
- if (i < joinMap.InputNamesOffset.JoinSpan)
- {
- inputKeys.Add(displayDevice.InputPorts[i].Key);
- var tempKey = inputKeys.ElementAt(i);
- trilist.SetSigTrueAction((ushort)(joinMap.InputSelectOffset.JoinNumber + i),
- () => displayDevice.ExecuteSwitch(displayDevice.InputPorts[tempKey].Selector));
- Debug.Console(2, displayDevice, "Setting Input Select Action on Digital Join {0} to Input: {1}",
- joinMap.InputSelectOffset.JoinNumber + i, displayDevice.InputPorts[tempKey].Key.ToString());
- trilist.StringInput[(ushort)(joinMap.InputNamesOffset.JoinNumber + i)].StringValue = displayDevice.InputPorts[i].Key.ToString();
- }
- else
- Debug.Console(0, displayDevice, Debug.ErrorLogLevel.Warning, "Device has {0} inputs. The Join Map allows up to {1} inputs. Discarding inputs {2} - {3} from bridge.",
- displayDevice.InputPorts.Count, joinMap.InputNamesOffset.JoinSpan, i + 1, displayDevice.InputPorts.Count);
- }
-
- Debug.Console(2, displayDevice, "Setting Input Select Action on Analog Join {0}", joinMap.InputSelect);
- trilist.SetUShortSigAction(joinMap.InputSelect.JoinNumber, (a) =>
- {
- if (a == 0)
- {
- displayDevice.PowerOff();
- inputNumber = 0;
- }
- 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();
-
- }
- if (twoWayDisplay != null)
- inputNumberFeedback.FireUpdate();
- });
-
-
- var volumeDisplay = displayDevice as IBasicVolumeControls;
- if (volumeDisplay == null) return;
-
- trilist.SetBoolSigAction(joinMap.VolumeUp.JoinNumber, volumeDisplay.VolumeUp);
- trilist.SetBoolSigAction(joinMap.VolumeDown.JoinNumber, volumeDisplay.VolumeDown);
- trilist.SetSigTrueAction(joinMap.VolumeMute.JoinNumber, volumeDisplay.MuteToggle);
-
- var volumeDisplayWithFeedback = volumeDisplay as IBasicVolumeWithFeedback;
-
- if (volumeDisplayWithFeedback == null) return;
- trilist.SetSigTrueAction(joinMap.VolumeMuteOn.JoinNumber, volumeDisplayWithFeedback.MuteOn);
- trilist.SetSigTrueAction(joinMap.VolumeMuteOff.JoinNumber, volumeDisplayWithFeedback.MuteOff);
-
-
- trilist.SetUShortSigAction(joinMap.VolumeLevel.JoinNumber, volumeDisplayWithFeedback.SetVolume);
- volumeDisplayWithFeedback.VolumeLevelFeedback.LinkInputSig(trilist.UShortInput[joinMap.VolumeLevel.JoinNumber]);
- volumeDisplayWithFeedback.MuteFeedback.LinkInputSig(trilist.BooleanInput[joinMap.VolumeMute.JoinNumber]);
- volumeDisplayWithFeedback.MuteFeedback.LinkInputSig(trilist.BooleanInput[joinMap.VolumeMuteOn.JoinNumber]);
- volumeDisplayWithFeedback.MuteFeedback.LinkComplementInputSig(trilist.BooleanInput[joinMap.VolumeMuteOff.JoinNumber]);
- }
- }
-
- ///
- ///
- ///
- public abstract class TwoWayDisplayBase : DisplayBase
- {
- public StringFeedback CurrentInputFeedback { get; private set; }
-
- abstract protected Func CurrentInputFeedbackFunc { get; }
-
-
- public static MockDisplay DefaultDisplay
- {
- get
- {
- if (_DefaultDisplay == null)
- _DefaultDisplay = new MockDisplay("default", "Default Display");
- return _DefaultDisplay;
- }
- }
- static MockDisplay _DefaultDisplay;
-
- public TwoWayDisplayBase(string key, string name)
- : base(key, name)
- {
- CurrentInputFeedback = new StringFeedback(CurrentInputFeedbackFunc);
-
- WarmupTime = 7000;
- CooldownTime = 15000;
-
- Feedbacks.Add(CurrentInputFeedback);
-
-
- }
-
- }
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using Crestron.SimplSharp;
+using Crestron.SimplSharpPro;
+using Crestron.SimplSharpPro.DeviceSupport;
+using Crestron.SimplSharpPro.DM;
+using Crestron.SimplSharpPro.DM.Endpoints;
+using Crestron.SimplSharpPro.DM.Endpoints.Transmitters;
+using Newtonsoft.Json;
+using PepperDash.Core;
+using PepperDash.Essentials.Core.Bridges;
+
+
+namespace PepperDash.Essentials.Core
+{
+ ///
+ ///
+ ///
+ public abstract class DisplayBase : EssentialsDevice, IHasFeedback, IRoutingSinkWithSwitching, IPower, IWarmingCooling, IUsageTracking
+ {
+ public event SourceInfoChangeHandler CurrentSourceChange;
+
+ public string CurrentSourceInfoKey { get; set; }
+ public SourceListItem CurrentSourceInfo
+ {
+ get
+ {
+ return _CurrentSourceInfo;
+ }
+ set
+ {
+ if (value == _CurrentSourceInfo) return;
+
+ var handler = CurrentSourceChange;
+
+ if (handler != null)
+ handler(_CurrentSourceInfo, ChangeType.WillChange);
+
+ _CurrentSourceInfo = value;
+
+ if (handler != null)
+ handler(_CurrentSourceInfo, ChangeType.DidChange);
+ }
+ }
+ SourceListItem _CurrentSourceInfo;
+
+ public BoolFeedback PowerIsOnFeedback { get; protected set; }
+ public BoolFeedback IsCoolingDownFeedback { get; protected set; }
+ public BoolFeedback IsWarmingUpFeedback { get; private set; }
+
+ public UsageTracking UsageTracker { get; set; }
+
+ public uint WarmupTime { get; set; }
+ public uint CooldownTime { get; set; }
+
+ ///
+ /// Bool Func that will provide a value for the PowerIsOn Output. Must be implemented
+ /// by concrete sub-classes
+ ///
+ abstract protected Func PowerIsOnFeedbackFunc { get; }
+ abstract protected Func IsCoolingDownFeedbackFunc { get; }
+ abstract protected Func IsWarmingUpFeedbackFunc { get; }
+
+
+ protected CTimer WarmupTimer;
+ protected CTimer CooldownTimer;
+
+ #region IRoutingInputs Members
+
+ public RoutingPortCollection InputPorts { get; private set; }
+
+ #endregion
+
+ protected DisplayBase(string key, string name)
+ : base(key, name)
+ {
+ PowerIsOnFeedback = new BoolFeedback("PowerOnFeedback", PowerIsOnFeedbackFunc);
+ IsCoolingDownFeedback = new BoolFeedback("IsCoolingDown", IsCoolingDownFeedbackFunc);
+ IsWarmingUpFeedback = new BoolFeedback("IsWarmingUp", IsWarmingUpFeedbackFunc);
+
+ InputPorts = new RoutingPortCollection();
+
+ PowerIsOnFeedback.OutputChange += PowerIsOnFeedback_OutputChange;
+ }
+
+ void PowerIsOnFeedback_OutputChange(object sender, EventArgs e)
+ {
+ if (UsageTracker != null)
+ {
+ if (PowerIsOnFeedback.BoolValue)
+ UsageTracker.StartDeviceUsage();
+ else
+ UsageTracker.EndDeviceUsage();
+ }
+ }
+
+ public abstract void PowerOn();
+ public abstract void PowerOff();
+ public abstract void PowerToggle();
+
+ public virtual FeedbackCollection Feedbacks
+ {
+ get
+ {
+ return new FeedbackCollection
+ {
+ PowerIsOnFeedback,
+ IsCoolingDownFeedback,
+ IsWarmingUpFeedback
+ };
+ }
+ }
+
+ public abstract void ExecuteSwitch(object selector);
+
+ protected void LinkDisplayToApi(DisplayBase displayDevice, BasicTriList trilist, uint joinStart, string joinMapKey,
+ EiscApiAdvanced bridge)
+ {
+ var inputNumber = 0;
+ var inputKeys = new List();
+
+ var joinMap = new DisplayControllerJoinMap(joinStart);
+
+ var joinMapSerialized = JoinMapHelper.GetSerializedJoinMapForDevice(joinMapKey);
+
+ if (!string.IsNullOrEmpty(joinMapSerialized))
+ joinMap = JsonConvert.DeserializeObject(joinMapSerialized);
+
+ Debug.Console(1, "Linking to Trilist '{0}'", trilist.ID.ToString("X"));
+ Debug.Console(0, "Linking to Display: {0}", displayDevice.Name);
+
+ trilist.StringInput[joinMap.Name.JoinNumber].StringValue = displayDevice.Name;
+
+ var commMonitor = displayDevice as ICommunicationMonitor;
+ if (commMonitor != null)
+ {
+ commMonitor.CommunicationMonitor.IsOnlineFeedback.LinkInputSig(trilist.BooleanInput[joinMap.IsOnline.JoinNumber]);
+ }
+
+ var inputNumberFeedback = new IntFeedback(() => inputNumber);
+
+ // Two way feedbacks
+ var twoWayDisplay = displayDevice as TwoWayDisplayBase;
+
+ if (twoWayDisplay != null)
+ {
+ trilist.SetBool(joinMap.IsTwoWayDisplay.JoinNumber, true);
+
+ twoWayDisplay.CurrentInputFeedback.OutputChange += (o, a) => Debug.Console(0, "CurrentInputFeedback_OutputChange {0}", a.StringValue);
+
+
+ inputNumberFeedback.LinkInputSig(trilist.UShortInput[joinMap.InputSelect.JoinNumber]);
+ }
+
+ // Power Off
+ trilist.SetSigTrueAction(joinMap.PowerOff.JoinNumber, () =>
+ {
+ inputNumber = 102;
+ inputNumberFeedback.FireUpdate();
+ displayDevice.PowerOff();
+ });
+
+ displayDevice.PowerIsOnFeedback.OutputChange += (o, a) =>
+ {
+ if (!a.BoolValue)
+ {
+ inputNumber = 102;
+ inputNumberFeedback.FireUpdate();
+
+ }
+ else
+ {
+ inputNumber = 0;
+ inputNumberFeedback.FireUpdate();
+ }
+ };
+
+ displayDevice.PowerIsOnFeedback.LinkComplementInputSig(trilist.BooleanInput[joinMap.PowerOff.JoinNumber]);
+
+ // PowerOn
+ trilist.SetSigTrueAction(joinMap.PowerOn.JoinNumber, () =>
+ {
+ inputNumber = 0;
+ inputNumberFeedback.FireUpdate();
+ displayDevice.PowerOn();
+ });
+
+
+ displayDevice.PowerIsOnFeedback.LinkInputSig(trilist.BooleanInput[joinMap.PowerOn.JoinNumber]);
+
+ for (int i = 0; i < displayDevice.InputPorts.Count; i++)
+ {
+ if (i < joinMap.InputNamesOffset.JoinSpan)
+ {
+ inputKeys.Add(displayDevice.InputPorts[i].Key);
+ var tempKey = inputKeys.ElementAt(i);
+ trilist.SetSigTrueAction((ushort)(joinMap.InputSelectOffset.JoinNumber + i),
+ () => displayDevice.ExecuteSwitch(displayDevice.InputPorts[tempKey].Selector));
+ Debug.Console(2, displayDevice, "Setting Input Select Action on Digital Join {0} to Input: {1}",
+ joinMap.InputSelectOffset.JoinNumber + i, displayDevice.InputPorts[tempKey].Key.ToString());
+ trilist.StringInput[(ushort)(joinMap.InputNamesOffset.JoinNumber + i)].StringValue = displayDevice.InputPorts[i].Key.ToString();
+ }
+ else
+ Debug.Console(0, displayDevice, Debug.ErrorLogLevel.Warning, "Device has {0} inputs. The Join Map allows up to {1} inputs. Discarding inputs {2} - {3} from bridge.",
+ displayDevice.InputPorts.Count, joinMap.InputNamesOffset.JoinSpan, i + 1, displayDevice.InputPorts.Count);
+ }
+
+ Debug.Console(2, displayDevice, "Setting Input Select Action on Analog Join {0}", joinMap.InputSelect);
+ trilist.SetUShortSigAction(joinMap.InputSelect.JoinNumber, (a) =>
+ {
+ if (a == 0)
+ {
+ displayDevice.PowerOff();
+ inputNumber = 0;
+ }
+ 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();
+
+ }
+ if (twoWayDisplay != null)
+ inputNumberFeedback.FireUpdate();
+ });
+
+
+ var volumeDisplay = displayDevice as IBasicVolumeControls;
+ if (volumeDisplay == null) return;
+
+ trilist.SetBoolSigAction(joinMap.VolumeUp.JoinNumber, volumeDisplay.VolumeUp);
+ trilist.SetBoolSigAction(joinMap.VolumeDown.JoinNumber, volumeDisplay.VolumeDown);
+ trilist.SetSigTrueAction(joinMap.VolumeMute.JoinNumber, volumeDisplay.MuteToggle);
+
+ var volumeDisplayWithFeedback = volumeDisplay as IBasicVolumeWithFeedback;
+
+ if (volumeDisplayWithFeedback == null) return;
+ trilist.SetSigTrueAction(joinMap.VolumeMuteOn.JoinNumber, volumeDisplayWithFeedback.MuteOn);
+ trilist.SetSigTrueAction(joinMap.VolumeMuteOff.JoinNumber, volumeDisplayWithFeedback.MuteOff);
+
+
+ trilist.SetUShortSigAction(joinMap.VolumeLevel.JoinNumber, volumeDisplayWithFeedback.SetVolume);
+ volumeDisplayWithFeedback.VolumeLevelFeedback.LinkInputSig(trilist.UShortInput[joinMap.VolumeLevel.JoinNumber]);
+ volumeDisplayWithFeedback.MuteFeedback.LinkInputSig(trilist.BooleanInput[joinMap.VolumeMute.JoinNumber]);
+ volumeDisplayWithFeedback.MuteFeedback.LinkInputSig(trilist.BooleanInput[joinMap.VolumeMuteOn.JoinNumber]);
+ volumeDisplayWithFeedback.MuteFeedback.LinkComplementInputSig(trilist.BooleanInput[joinMap.VolumeMuteOff.JoinNumber]);
+ }
+ }
+
+ ///
+ ///
+ ///
+ public abstract class TwoWayDisplayBase : DisplayBase
+ {
+ public StringFeedback CurrentInputFeedback { get; private set; }
+
+ abstract protected Func CurrentInputFeedbackFunc { get; }
+
+
+ public static MockDisplay DefaultDisplay
+ {
+ get
+ {
+ if (_DefaultDisplay == null)
+ _DefaultDisplay = new MockDisplay("default", "Default Display");
+ return _DefaultDisplay;
+ }
+ }
+ static MockDisplay _DefaultDisplay;
+
+ public TwoWayDisplayBase(string key, string name)
+ : base(key, name)
+ {
+ CurrentInputFeedback = new StringFeedback(CurrentInputFeedbackFunc);
+
+ WarmupTime = 7000;
+ CooldownTime = 15000;
+
+ Feedbacks.Add(CurrentInputFeedback);
+
+
+ }
+
+ }
}
\ No newline at end of file
diff --git a/essentials-framework/Essentials Core/PepperDashEssentialsBase/Display/MockDisplay.cs b/essentials-framework/Essentials Core/PepperDashEssentialsBase/Display/MockDisplay.cs
index e6db4316..dcdba6d8 100644
--- a/essentials-framework/Essentials Core/PepperDashEssentialsBase/Display/MockDisplay.cs
+++ b/essentials-framework/Essentials Core/PepperDashEssentialsBase/Display/MockDisplay.cs
@@ -19,7 +19,7 @@ namespace PepperDash.Essentials.Core
///
///
///
- public class MockDisplay : TwoWayDisplayBase, IBasicVolumeWithFeedback
+ public class MockDisplay : TwoWayDisplayBase, IBasicVolumeWithFeedback, IBridgeAdvanced
{
public RoutingInputPort HdmiIn1 { get; private set; }
@@ -177,7 +177,7 @@ namespace PepperDash.Essentials.Core
#endregion
- public override void LinkToApi(BasicTriList trilist, uint joinStart, string joinMapKey, EiscApiAdvanced bridge)
+ public void LinkToApi(BasicTriList trilist, uint joinStart, string joinMapKey, EiscApiAdvanced bridge)
{
LinkDisplayToApi(this, trilist, joinStart, joinMapKey, bridge);
}
diff --git a/essentials-framework/Essentials Core/PepperDashEssentialsBase/Global/Global.cs b/essentials-framework/Essentials Core/PepperDashEssentialsBase/Global/Global.cs
index de533ebb..2f3e1823 100644
--- a/essentials-framework/Essentials Core/PepperDashEssentialsBase/Global/Global.cs
+++ b/essentials-framework/Essentials Core/PepperDashEssentialsBase/Global/Global.cs
@@ -98,25 +98,47 @@ namespace PepperDash.Essentials.Core
{
Debug.Console(2, "Comparing running version '{0}' to minimum version '{1}'", AssemblyVersion, minimumVersion);
+ if (String.IsNullOrEmpty(minimumVersion))
+ {
+ Debug.Console(0,"Plugin does not specify a minimum version. Loading plugin may not work as expected. Proceeding with loading plugin");
+ return true;
+ }
+
var runtimeVersion = Regex.Match(AssemblyVersion, @"^(\d*).(\d*).(\d*).*");
var runtimeVersionMajor = Int16.Parse(runtimeVersion.Groups[1].Value);
var runtimeVersionMinor = Int16.Parse(runtimeVersion.Groups[2].Value);
var runtimeVersionBuild = Int16.Parse(runtimeVersion.Groups[3].Value);
- // Check for beta build version
- if (runtimeVersionMajor == 0)
+ var runtimeVer = new Version(runtimeVersionMajor, runtimeVersionMinor, runtimeVersionBuild);
+
+ Version minimumVer;
+ try
{
- Debug.Console(2, "Running Local Build. Bypassing Dependency Check.");
- return true;
+ minimumVer = new Version(minimumVersion);
+ }
+ catch
+ {
+ Debug.Console(2, "unable to parse minimum version {0}. Bypassing plugin load.", minimumVersion);
+ return false;
}
+
+ // Check for beta build version
+ if (runtimeVer.Major != 0)
+ {
+ return runtimeVer.CompareTo(minimumVer) >= 0;
+ }
+
+ Debug.Console(2, "Running Local Build. Bypassing Dependency Check.");
+ return true;
+
+ /*
var minVersion = Regex.Match(minimumVersion, @"^(\d*).(\d*).(\d*)$");
if(!minVersion.Success)
{
- Debug.Console(2, "minimumVersion String does not match format xx.yy.zz");
- return false;
+
}
var minVersionMajor = Int16.Parse(minVersion.Groups[1].Value);
@@ -135,6 +157,7 @@ namespace PepperDash.Essentials.Core
return false;
return true;
+ */
}
static Global()
diff --git a/essentials-framework/Essentials DM/Essentials_DM/PepperDash_Essentials_DM.csproj b/essentials-framework/Essentials DM/Essentials_DM/PepperDash_Essentials_DM.csproj
index 9e3ca384..e08b30f6 100644
--- a/essentials-framework/Essentials DM/Essentials_DM/PepperDash_Essentials_DM.csproj
+++ b/essentials-framework/Essentials DM/Essentials_DM/PepperDash_Essentials_DM.csproj
@@ -84,7 +84,7 @@
False
- ..\..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SimplSharpReflectionInterface.dll
+ ..\..\..\..\..\..\ProgramData\Crestron\SDK\SimplSharpReflectionInterface.dll
diff --git a/essentials-framework/Essentials Devices Common/Essentials Devices Common/Cameras/CameraBase.cs b/essentials-framework/Essentials Devices Common/Essentials Devices Common/Cameras/CameraBase.cs
index bb7636db..960b8355 100644
--- a/essentials-framework/Essentials Devices Common/Essentials Devices Common/Cameras/CameraBase.cs
+++ b/essentials-framework/Essentials Devices Common/Essentials Devices Common/Cameras/CameraBase.cs
@@ -25,7 +25,7 @@ namespace PepperDash.Essentials.Devices.Common.Cameras
Focus = 8
}
- public abstract class CameraBase : EssentialsBridgeableDevice, IRoutingOutputs
+ public abstract class CameraBase : EssentialsDevice, IRoutingOutputs
{
public eCameraControlMode ControlMode { get; protected set; }
diff --git a/essentials-framework/Essentials Devices Common/Essentials Devices Common/Cameras/CameraVisca.cs b/essentials-framework/Essentials Devices Common/Essentials Devices Common/Cameras/CameraVisca.cs
index bb6758b6..4393229c 100644
--- a/essentials-framework/Essentials Devices Common/Essentials Devices Common/Cameras/CameraVisca.cs
+++ b/essentials-framework/Essentials Devices Common/Essentials Devices Common/Cameras/CameraVisca.cs
@@ -14,7 +14,7 @@ using Crestron.SimplSharp.Reflection;
namespace PepperDash.Essentials.Devices.Common.Cameras
{
- public class CameraVisca : CameraBase, IHasCameraPtzControl, ICommunicationMonitor, IHasCameraPresets, IPower
+ public class CameraVisca : CameraBase, IHasCameraPtzControl, ICommunicationMonitor, IHasCameraPresets, IPower, IBridgeAdvanced
{
public IBasicCommunication Communication { get; private set; }
public CommunicationGather PortGather { get; private set; }
@@ -82,7 +82,7 @@ namespace PepperDash.Essentials.Devices.Common.Cameras
return true;
}
- public override void LinkToApi(BasicTriList trilist, uint joinStart, string joinMapKey, EiscApiAdvanced bridge)
+ public void LinkToApi(BasicTriList trilist, uint joinStart, string joinMapKey, EiscApiAdvanced bridge)
{
LinkCameraToApi(this, trilist, joinStart, joinMapKey, bridge);
}
diff --git a/essentials-framework/Essentials Devices Common/Essentials Devices Common/Display/AvocorVTFDisplay.cs b/essentials-framework/Essentials Devices Common/Essentials Devices Common/Display/AvocorVTFDisplay.cs
index 19482029..20d9fbec 100644
--- a/essentials-framework/Essentials Devices Common/Essentials Devices Common/Display/AvocorVTFDisplay.cs
+++ b/essentials-framework/Essentials Devices Common/Essentials Devices Common/Display/AvocorVTFDisplay.cs
@@ -19,7 +19,7 @@ namespace PepperDash.Essentials.Devices.Displays
///
///
public class AvocorDisplay : TwoWayDisplayBase, IBasicVolumeWithFeedback, ICommunicationMonitor, IInputDisplayPort1,
- IInputHdmi1, IInputHdmi2, IInputHdmi3, IInputHdmi4, IInputVga1
+ IInputHdmi1, IInputHdmi2, IInputHdmi3, IInputHdmi4, IInputVga1, IBridgeAdvanced
{
public IBasicCommunication Communication { get; private set; }
public CommunicationGather PortGather { get; private set; }
@@ -203,7 +203,7 @@ namespace PepperDash.Essentials.Devices.Displays
return true;
}
- public override void LinkToApi(BasicTriList trilist, uint joinStart, string joinMapKey, EiscApiAdvanced bridge)
+ public void LinkToApi(BasicTriList trilist, uint joinStart, string joinMapKey, EiscApiAdvanced bridge)
{
LinkDisplayToApi(this, trilist, joinStart, joinMapKey, bridge);
}
diff --git a/essentials-framework/Essentials Devices Common/Essentials Devices Common/Display/NECPSXMDisplay.cs b/essentials-framework/Essentials Devices Common/Essentials Devices Common/Display/NECPSXMDisplay.cs
index 72311c7e..176f28ac 100644
--- a/essentials-framework/Essentials Devices Common/Essentials Devices Common/Display/NECPSXMDisplay.cs
+++ b/essentials-framework/Essentials Devices Common/Essentials Devices Common/Display/NECPSXMDisplay.cs
@@ -17,7 +17,7 @@ namespace PepperDash.Essentials.Devices.Displays
///
///
///
- public class NecPSXMDisplay : TwoWayDisplayBase, IBasicVolumeWithFeedback, ICommunicationMonitor
+ public class NecPSXMDisplay : TwoWayDisplayBase, IBasicVolumeWithFeedback, ICommunicationMonitor, IBridgeAdvanced
{
public IBasicCommunication Communication { get; private set; }
public CommunicationGather PortGather { get; private set; }
@@ -154,7 +154,7 @@ namespace PepperDash.Essentials.Devices.Displays
return true;
}
- public override void LinkToApi(BasicTriList trilist, uint joinStart, string joinMapKey, EiscApiAdvanced bridge)
+ public void LinkToApi(BasicTriList trilist, uint joinStart, string joinMapKey, EiscApiAdvanced bridge)
{
LinkDisplayToApi(this, trilist, joinStart, joinMapKey, bridge);
}
diff --git a/essentials-framework/Essentials Devices Common/Essentials Devices Common/Display/NecPaSeriesProjector.cs b/essentials-framework/Essentials Devices Common/Essentials Devices Common/Display/NecPaSeriesProjector.cs
index ae2bf760..86c8ddaa 100644
--- a/essentials-framework/Essentials Devices Common/Essentials Devices Common/Display/NecPaSeriesProjector.cs
+++ b/essentials-framework/Essentials Devices Common/Essentials Devices Common/Display/NecPaSeriesProjector.cs
@@ -11,7 +11,7 @@ using PepperDash.Essentials.Core.Bridges;
namespace PepperDash.Essentials.Devices.Displays
{
- public class NecPaSeriesProjector : ComTcpDisplayBase
+ public class NecPaSeriesProjector : ComTcpDisplayBase, IBridgeAdvanced
{
public readonly IntFeedback Lamp1RemainingPercent;
int _Lamp1RemainingPercent;
@@ -219,7 +219,7 @@ namespace PepperDash.Essentials.Devices.Displays
}
- public override void LinkToApi(BasicTriList trilist, uint joinStart, string joinMapKey, EiscApiAdvanced bridge)
+ public void LinkToApi(BasicTriList trilist, uint joinStart, string joinMapKey, EiscApiAdvanced bridge)
{
LinkDisplayToApi(this, trilist, joinStart, joinMapKey, bridge);
}
diff --git a/essentials-framework/Essentials Devices Common/Essentials Devices Common/Display/PanasonicThDisplay.cs b/essentials-framework/Essentials Devices Common/Essentials Devices Common/Display/PanasonicThDisplay.cs
index 3ac01d66..b8d33bd1 100644
--- a/essentials-framework/Essentials Devices Common/Essentials Devices Common/Display/PanasonicThDisplay.cs
+++ b/essentials-framework/Essentials Devices Common/Essentials Devices Common/Display/PanasonicThDisplay.cs
@@ -17,7 +17,7 @@ namespace PepperDash.Essentials.Devices.Displays
///
///
///
- public class PanasonicThDisplay : TwoWayDisplayBase, IBasicVolumeWithFeedback, ICommunicationMonitor
+ public class PanasonicThDisplay : TwoWayDisplayBase, IBasicVolumeWithFeedback, ICommunicationMonitor, IBridgeAdvanced
{
public IBasicCommunication Communication { get; private set; }
public CommunicationGather PortGather { get; private set; }
@@ -146,7 +146,7 @@ namespace PepperDash.Essentials.Devices.Displays
return true;
}
- public override void LinkToApi(BasicTriList trilist, uint joinStart, string joinMapKey, EiscApiAdvanced bridge)
+ public void LinkToApi(BasicTriList trilist, uint joinStart, string joinMapKey, EiscApiAdvanced bridge)
{
LinkDisplayToApi(this, trilist, joinStart, joinMapKey, bridge);
}
diff --git a/essentials-framework/Essentials Devices Common/Essentials Devices Common/Display/SamsungMDCDisplay.cs b/essentials-framework/Essentials Devices Common/Essentials Devices Common/Display/SamsungMDCDisplay.cs
index d56360f5..b2de0f8f 100644
--- a/essentials-framework/Essentials Devices Common/Essentials Devices Common/Display/SamsungMDCDisplay.cs
+++ b/essentials-framework/Essentials Devices Common/Essentials Devices Common/Display/SamsungMDCDisplay.cs
@@ -21,7 +21,7 @@ namespace PepperDash.Essentials.Devices.Displays
///
///
public class SamsungMDC : TwoWayDisplayBase, IBasicVolumeWithFeedback, ICommunicationMonitor, IInputDisplayPort1, IInputDisplayPort2,
- IInputHdmi1, IInputHdmi2, IInputHdmi3, IInputHdmi4
+ IInputHdmi1, IInputHdmi2, IInputHdmi3, IInputHdmi4, IBridgeAdvanced
{
public IBasicCommunication Communication { get; private set; }
@@ -152,7 +152,7 @@ namespace PepperDash.Essentials.Devices.Displays
return true;
}
- public override void LinkToApi(BasicTriList trilist, uint joinStart, string joinMapKey, EiscApiAdvanced bridge)
+ public void LinkToApi(BasicTriList trilist, uint joinStart, string joinMapKey, EiscApiAdvanced bridge)
{
LinkDisplayToApi(this, trilist, joinStart, joinMapKey, bridge);
}
diff --git a/essentials-framework/Essentials Devices Common/Essentials Devices Common/VideoCodec/CiscoCodec/CiscoCamera.cs b/essentials-framework/Essentials Devices Common/Essentials Devices Common/VideoCodec/CiscoCodec/CiscoCamera.cs
index 20035579..6f68b369 100644
--- a/essentials-framework/Essentials Devices Common/Essentials Devices Common/VideoCodec/CiscoCodec/CiscoCamera.cs
+++ b/essentials-framework/Essentials Devices Common/Essentials Devices Common/VideoCodec/CiscoCodec/CiscoCamera.cs
@@ -9,7 +9,7 @@ using PepperDash.Essentials.Devices.Common.Cameras;
namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco
{
- public class CiscoFarEndCamera : CameraBase, IHasCameraPtzControl, IAmFarEndCamera
+ public class CiscoFarEndCamera : CameraBase, IHasCameraPtzControl, IAmFarEndCamera, IBridgeAdvanced
{
protected CiscoSparkCodec ParentCodec { get; private set; }
@@ -100,13 +100,13 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco
ParentCodec.SendText(string.Format("xCommand Call FarEndControl Camera Stop CallId: {0}", CallId));
}
- public override void LinkToApi(BasicTriList trilist, uint joinStart, string joinMapKey, EiscApiAdvanced bridge)
+ public void LinkToApi(BasicTriList trilist, uint joinStart, string joinMapKey, EiscApiAdvanced bridge)
{
LinkCameraToApi(this, trilist, joinStart, joinMapKey, bridge);
}
}
- public class CiscoSparkCamera : CameraBase, IHasCameraPtzControl, IHasCameraFocusControl
+ public class CiscoSparkCamera : CameraBase, IHasCameraPtzControl, IHasCameraFocusControl, IBridgeAdvanced
{
///
/// The codec this camera belongs to
@@ -315,7 +315,7 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco
#endregion
- public override void LinkToApi(BasicTriList trilist, uint joinStart, string joinMapKey, EiscApiAdvanced bridge)
+ public void LinkToApi(BasicTriList trilist, uint joinStart, string joinMapKey, EiscApiAdvanced bridge)
{
LinkCameraToApi(this, trilist, joinStart, joinMapKey, bridge);
}
diff --git a/essentials-framework/Essentials Devices Common/Essentials Devices Common/VideoCodec/MockVC/MockVCCamera.cs b/essentials-framework/Essentials Devices Common/Essentials Devices Common/VideoCodec/MockVC/MockVCCamera.cs
index 23a5c9f5..0c008849 100644
--- a/essentials-framework/Essentials Devices Common/Essentials Devices Common/VideoCodec/MockVC/MockVCCamera.cs
+++ b/essentials-framework/Essentials Devices Common/Essentials Devices Common/VideoCodec/MockVC/MockVCCamera.cs
@@ -10,7 +10,7 @@ using PepperDash.Essentials.Devices.Common.VideoCodec;
namespace PepperDash.Essentials.Devices.Common.Cameras
{
- public class MockVCCamera : CameraBase, IHasCameraPtzControl, IHasCameraFocusControl
+ public class MockVCCamera : CameraBase, IHasCameraPtzControl, IHasCameraFocusControl, IBridgeAdvanced
{
protected VideoCodecBase ParentCodec { get; private set; }
@@ -113,13 +113,13 @@ namespace PepperDash.Essentials.Devices.Common.Cameras
#endregion
- public override void LinkToApi(BasicTriList trilist, uint joinStart, string joinMapKey, EiscApiAdvanced bridge)
+ public void LinkToApi(BasicTriList trilist, uint joinStart, string joinMapKey, EiscApiAdvanced bridge)
{
LinkCameraToApi(this, trilist, joinStart, joinMapKey, bridge);
}
}
- public class MockFarEndVCCamera : CameraBase, IHasCameraPtzControl, IAmFarEndCamera
+ public class MockFarEndVCCamera : CameraBase, IHasCameraPtzControl, IAmFarEndCamera, IBridgeAdvanced
{
protected VideoCodecBase ParentCodec { get; private set; }
@@ -198,7 +198,7 @@ namespace PepperDash.Essentials.Devices.Common.Cameras
#endregion
- public override void LinkToApi(BasicTriList trilist, uint joinStart, string joinMapKey, EiscApiAdvanced bridge)
+ public void LinkToApi(BasicTriList trilist, uint joinStart, string joinMapKey, EiscApiAdvanced bridge)
{
LinkCameraToApi(this, trilist, joinStart, joinMapKey, bridge);
}
diff --git a/essentials-framework/Essentials Devices Common/Essentials Devices Common/VideoCodec/ZoomRoom/ZoomRoomCamera.cs b/essentials-framework/Essentials Devices Common/Essentials Devices Common/VideoCodec/ZoomRoom/ZoomRoomCamera.cs
index 9ad0936b..4fa377ae 100644
--- a/essentials-framework/Essentials Devices Common/Essentials Devices Common/VideoCodec/ZoomRoom/ZoomRoomCamera.cs
+++ b/essentials-framework/Essentials Devices Common/Essentials Devices Common/VideoCodec/ZoomRoom/ZoomRoomCamera.cs
@@ -30,7 +30,7 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
}
- public class ZoomRoomCamera : CameraBase, IHasCameraPtzControl
+ public class ZoomRoomCamera : CameraBase, IHasCameraPtzControl, IBridgeAdvanced
{
protected ZoomRoom ParentCodec { get; private set; }
@@ -200,7 +200,7 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
#endregion
- public override void LinkToApi(BasicTriList trilist, uint joinStart, string joinMapKey, EiscApiAdvanced bridge)
+ public void LinkToApi(BasicTriList trilist, uint joinStart, string joinMapKey, EiscApiAdvanced bridge)
{
LinkCameraToApi(this, trilist, joinStart, joinMapKey, bridge);
}