diff --git a/PepperDashEssentials/PepperDashEssentials.csproj b/PepperDashEssentials/PepperDashEssentials.csproj
index 14bd450a..d172076a 100644
--- a/PepperDashEssentials/PepperDashEssentials.csproj
+++ b/PepperDashEssentials/PepperDashEssentials.csproj
@@ -149,7 +149,8 @@
-
+
+
diff --git a/PepperDashEssentials/Room/Types/IEssentialsHuddleSpaceRoom.cs b/PepperDashEssentials/Room/Types/IEssentialsHuddleSpaceRoom.cs
deleted file mode 100644
index efc126f6..00000000
--- a/PepperDashEssentials/Room/Types/IEssentialsHuddleSpaceRoom.cs
+++ /dev/null
@@ -1,48 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using Crestron.SimplSharp;
-
-using PepperDash.Essentials.Core;
-using PepperDash.Essentials.Core.DeviceTypeInterfaces;
-using PepperDash.Essentials.Room.Config;
-using PepperDash.Essentials.Core.Devices;
-using PepperDash.Essentials.Devices.Common.Codec;
-using PepperDash.Essentials.Devices.Common.VideoCodec;
-using PepperDash.Essentials.Devices.Common.AudioCodec;
-
-
-using PepperDash.Core;
-
-namespace PepperDash.Essentials
-{
- public interface IEssentialsHuddleSpaceRoom : IEssentialsRoom, IHasCurrentSourceInfoChange, IRunRouteAction, IRunDefaultPresentRoute, IHasDefaultDisplay
- {
- bool ExcludeFromGlobalFunctions { get; }
-
- void RunRouteAction(string routeKey);
-
- EssentialsHuddleRoomPropertiesConfig PropertiesConfig { get; }
-
- IBasicVolumeControls CurrentVolumeControls { get; }
-
- event EventHandler CurrentVolumeDeviceChange;
- }
-
- public interface IEssentialsHuddleVtc1Room : IEssentialsRoom, IHasCurrentSourceInfoChange,
- IPrivacy, IHasCurrentVolumeControls, IRunRouteAction, IRunDefaultCallRoute, IHasVideoCodec, IHasAudioCodec, IHasDefaultDisplay, IHasInCallFeedback
- {
- EssentialsHuddleVtc1PropertiesConfig PropertiesConfig { get; }
-
- void RunRouteAction(string routeKey);
-
- IHasScheduleAwareness ScheduleSource { get; }
-
- BoolFeedback InCallFeedback { get; }
-
- BoolFeedback PrivacyModeIsOnFeedback { get; }
-
- string DefaultCodecRouteString { get; }
- }
-}
\ No newline at end of file
diff --git a/PepperDashEssentials/Room/Types/Interfaces/IEssentialsHuddleSpaceRoom.cs b/PepperDashEssentials/Room/Types/Interfaces/IEssentialsHuddleSpaceRoom.cs
new file mode 100644
index 00000000..c7f68e8b
--- /dev/null
+++ b/PepperDashEssentials/Room/Types/Interfaces/IEssentialsHuddleSpaceRoom.cs
@@ -0,0 +1,24 @@
+using System;
+
+using PepperDash.Essentials.Core;
+using PepperDash.Essentials.Room.Config;
+
+
+
+namespace PepperDash.Essentials
+{
+ public interface IEssentialsHuddleSpaceRoom : IEssentialsRoom, IHasCurrentSourceInfoChange, IRunRouteAction, IRunDefaultPresentRoute, IHasDefaultDisplay
+ {
+ bool ExcludeFromGlobalFunctions { get; }
+
+ void RunRouteAction(string routeKey);
+
+ EssentialsHuddleRoomPropertiesConfig PropertiesConfig { get; }
+
+ IBasicVolumeControls CurrentVolumeControls { get; }
+
+ event EventHandler CurrentVolumeDeviceChange;
+ }
+
+
+}
\ No newline at end of file
diff --git a/PepperDashEssentials/Room/Types/Interfaces/IEssentialsHuddleVtc1Room.cs b/PepperDashEssentials/Room/Types/Interfaces/IEssentialsHuddleVtc1Room.cs
new file mode 100644
index 00000000..662988a1
--- /dev/null
+++ b/PepperDashEssentials/Room/Types/Interfaces/IEssentialsHuddleVtc1Room.cs
@@ -0,0 +1,25 @@
+
+using PepperDash.Essentials.Core;
+using PepperDash.Essentials.Room.Config;
+using PepperDash.Essentials.Devices.Common.Codec;
+using PepperDash.Essentials.Devices.Common.VideoCodec;
+using PepperDash.Essentials.Devices.Common.AudioCodec;
+
+namespace PepperDash.Essentials
+{
+ public interface IEssentialsHuddleVtc1Room : IEssentialsRoom, IHasCurrentSourceInfoChange,
+ IPrivacy, IHasCurrentVolumeControls, IRunRouteAction, IRunDefaultCallRoute, IHasVideoCodec, IHasAudioCodec, IHasDefaultDisplay, IHasInCallFeedback
+ {
+ EssentialsHuddleVtc1PropertiesConfig PropertiesConfig { get; }
+
+ void RunRouteAction(string routeKey);
+
+ IHasScheduleAwareness ScheduleSource { get; }
+
+ BoolFeedback InCallFeedback { get; }
+
+ BoolFeedback PrivacyModeIsOnFeedback { get; }
+
+ string DefaultCodecRouteString { get; }
+ }
+}
\ No newline at end of file
diff --git a/PepperDashEssentials/UIDrivers/EssentialsHuddle/EssentialsHuddleTechPageDriver.cs b/PepperDashEssentials/UIDrivers/EssentialsHuddle/EssentialsHuddleTechPageDriver.cs
index b8e1dfd6..776e1034 100644
--- a/PepperDashEssentials/UIDrivers/EssentialsHuddle/EssentialsHuddleTechPageDriver.cs
+++ b/PepperDashEssentials/UIDrivers/EssentialsHuddle/EssentialsHuddleTechPageDriver.cs
@@ -1,326 +1,326 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Text.RegularExpressions;
-using Crestron.SimplSharp;
-using Crestron.SimplSharpPro.DeviceSupport;
-
-using PepperDash.Core;
-using PepperDash.Essentials;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Text.RegularExpressions;
+using Crestron.SimplSharp;
+using Crestron.SimplSharpPro.DeviceSupport;
+
+using PepperDash.Core;
+using PepperDash.Essentials;
using PepperDash.Essentials.Core;
-using PepperDash.Essentials.Core.Config;
-using PepperDash.Essentials.Core.SmartObjects;
-using PepperDash.Essentials.Core.Touchpanels.Keyboards;
-using PepperDash.Essentials.Devices.Displays;
-using PepperDash.Essentials.Room.Config;
-
-namespace PepperDash.Essentials.UIDrivers
-{
- public class EssentialsHuddleTechPageDriver : PanelDriverBase
- {
- ///
- ///
- ///
- SmartObjectDynamicList MenuList;
- ///
- ///
- ///
- SubpageReferenceList StatusList;
- ///
- /// The list of display controls
- ///
- SubpageReferenceList DisplayList;
- ///
- /// References lines in the list against device instances
- ///
- Dictionary StatusListDeviceIndexes;
- ///
- ///
- ///
- JoinedSigInterlock PagesInterlock;
-
- ///
- /// 1
- ///
- public const uint JoinText = 1;
-
- CTimer PinAuthorizedTimer;
-
- EssentialsRoomTechConfig Config;
-
- StringBuilder PinEntryBuilder = new StringBuilder(4);
-
- bool IsAuthorized;
-
- SmartObjectNumeric PinKeypad;
-
- ///
- ///
- ///
- ///
- ///
- public EssentialsHuddleTechPageDriver(BasicTriListWithSmartObject trilist, EssentialsRoomTechConfig config)
- : base(trilist)
- {
- Config = config;
-
- PagesInterlock = new JoinedSigInterlock(trilist);
- PagesInterlock.SetButDontShow(UIBoolJoin.TechSystemStatusVisible);
-
- trilist.SetSigFalseAction(UIBoolJoin.TechExitButton, Hide);
-
- MenuList = new SmartObjectDynamicList(trilist.SmartObjects[UISmartObjectJoin.TechMenuList],
- true, 3100);
-
- MenuList.SetFeedback(1, true); // initial fb
- ushort count = 0;
-
- MenuList.SetItemMainText(1, "System Status");
- MenuList.SetItemButtonAction(1, b => {
- if (b) PagesInterlock.ShowInterlocked(UIBoolJoin.TechSystemStatusVisible);
- MenuList.SetFeedback(1, true);
- });
-
- MenuList.SetItemMainText(2, "Display Controls");
- MenuList.SetItemButtonAction(2, b => {
- if (b) PagesInterlock.ShowInterlocked(UIBoolJoin.TechDisplayControlsVisible);
- MenuList.SetFeedback(2, true);
- });
-
- count = 2;
-
- // Don't show panel setup on iPad or xpanel
- if (TriList is Crestron.SimplSharpPro.DeviceSupport.TswFt5Button)
- {
- count++;
- MenuList.SetItemMainText(count, "Panel Setup");
- MenuList.SetItemButtonAction(count, b =>
- {
- if (b) PagesInterlock.ShowInterlocked(UIBoolJoin.TechPanelSetupVisible);
- MenuList.SetFeedback(count, true);
- });
- }
-
- MenuList.Count = count;
- BuildStatusList();
- BuildDisplayList();
- SetupPinModal();
- }
-
- ///
- ///
- ///
- public override void Show()
- {
- // divert to PIN if we need auth
- if (IsAuthorized)
- {
- // Cancel the auth timer so we don't deauth after coming back in
- if (PinAuthorizedTimer != null)
- PinAuthorizedTimer.Stop();
-
- TriList.SetBool(UIBoolJoin.TechCommonItemsVisbible, true);
- PagesInterlock.Show();
- base.Show();
- }
- else
- {
- TriList.SetBool(UIBoolJoin.PinDialog4DigitVisible, true);
- }
- }
-
- ///
- ///
- ///
- public override void Hide()
- {
- // Leave it authorized for 60 seconds.
- if (IsAuthorized)
- PinAuthorizedTimer = new CTimer(o => {
- IsAuthorized = false;
- PinAuthorizedTimer = null;
- }, 60000);
- TriList.SetBool(UIBoolJoin.TechCommonItemsVisbible, false);
- PagesInterlock.Hide();
- base.Hide();
- }
-
- ///
- /// Wire up the keypad and buttons
- ///
- void SetupPinModal()
- {
- TriList.SetSigFalseAction(UIBoolJoin.PinDialogCancelPress, CancelPinDialog);
- PinKeypad = new SmartObjectNumeric(TriList.SmartObjects[UISmartObjectJoin.TechPinDialogKeypad], true);
- PinKeypad.Digit0.UserObject = new Action(b => { if (b)DialPinDigit('0'); });
- PinKeypad.Digit1.UserObject = new Action(b => { if (b)DialPinDigit('1'); });
- PinKeypad.Digit2.UserObject = new Action(b => { if (b)DialPinDigit('2'); });
- PinKeypad.Digit3.UserObject = new Action(b => { if (b)DialPinDigit('3'); });
- PinKeypad.Digit4.UserObject = new Action(b => { if (b)DialPinDigit('4'); });
- PinKeypad.Digit5.UserObject = new Action(b => { if (b)DialPinDigit('5'); });
- PinKeypad.Digit6.UserObject = new Action(b => { if (b)DialPinDigit('6'); });
- PinKeypad.Digit7.UserObject = new Action(b => { if (b)DialPinDigit('7'); });
- PinKeypad.Digit8.UserObject = new Action(b => { if (b)DialPinDigit('8'); });
- PinKeypad.Digit9.UserObject = new Action(b => { if (b)DialPinDigit('9'); });
- }
-
- ///
- ///
- ///
- ///
- void DialPinDigit(char d)
- {
- PinEntryBuilder.Append(d);
- var len = PinEntryBuilder.Length;
- SetPinDotsFeedback(len);
-
- // check it!
- if (len == 4)
- {
- if (Config.Password == PinEntryBuilder.ToString())
- {
- IsAuthorized = true;
- SetPinDotsFeedback(0);
- TriList.SetBool(UIBoolJoin.PinDialog4DigitVisible, false);
- Show();
- }
- else
- {
- SetPinDotsFeedback(0);
- TriList.SetBool(UIBoolJoin.PinDialogErrorVisible, true);
- new CTimer(o =>
- {
- TriList.SetBool(UIBoolJoin.PinDialogErrorVisible, false);
- }, 1500);
- }
-
- PinEntryBuilder.Remove(0, len); // clear it either way
- }
- }
-
- ///
- /// Draws the dots as pin is entered
- ///
- ///
- void SetPinDotsFeedback(int len)
- {
- TriList.SetBool(UIBoolJoin.PinDialogDot1, len >= 1);
- TriList.SetBool(UIBoolJoin.PinDialogDot2, len >= 2);
- TriList.SetBool(UIBoolJoin.PinDialogDot3, len >= 3);
- TriList.SetBool(UIBoolJoin.PinDialogDot4, len == 4);
-
- }
-
- ///
- /// Does what it says
- ///
- void CancelPinDialog()
- {
- PinEntryBuilder.Remove(0, PinEntryBuilder.Length);
- TriList.SetBool(UIBoolJoin.PinDialog4DigitVisible, false);
- }
-
-
- ///
- ///
- ///
- void BuildStatusList()
- {
- StatusList = new SubpageReferenceList(TriList, UISmartObjectJoin.TechStatusList, 3, 3, 3);
- StatusListDeviceIndexes = new Dictionary();
- uint i = 0;
- foreach (var d in DeviceManager.AllDevices)
- {
- // make sure it is both ICommunicationMonitor and a Device
- var sd = d as ICommunicationMonitor;
- if (sd == null)
- continue;
- var dd = sd as Device;
- if(dd == null)
- continue;
- i++;
- StatusList.StringInputSig(i, 1).StringValue = dd.Name;
- StatusList.UShortInputSig(i, 1).UShortValue = (ushort)sd.CommunicationMonitor.Status;
- StatusListDeviceIndexes.Add(sd, i);
- sd.CommunicationMonitor.StatusChange += CommunicationMonitor_StatusChange ;
- }
- StatusList.Count = (ushort)i;
- }
-
- ///
- /// Builds the list of display controls
- ///
- void BuildDisplayList()
- {
- DisplayList = new SubpageReferenceList(TriList, UISmartObjectJoin.TechDisplayControlsList, 10, 3, 3);
-
- var devKeys = ConfigReader.ConfigObject.Devices.Where(d =>
- d.Group.Equals("display", StringComparison.OrdinalIgnoreCase)
- || d.Group.Equals("projector", StringComparison.OrdinalIgnoreCase))
- .Select(dd => dd.Key);
- var disps = DeviceManager.AllDevices.Where(d =>
- devKeys.Contains(d.Key));
- ushort i = 0;
- foreach (var disp in disps)
- {
- var display = disp as DisplayBase;
- if (display != null)
- {
- i++;
- DisplayList.StringInputSig(i, 1).StringValue = display.Name;
- DisplayList.GetBoolFeedbackSig(i, 1).SetSigFalseAction(display.PowerOn);
- DisplayList.GetBoolFeedbackSig(i, 2).SetSigFalseAction(display.PowerOff);
- if (display is TwoWayDisplayBase)
- {
- var powerOnSig = DisplayList.BoolInputSig(i, 1);
- (display as TwoWayDisplayBase).PowerIsOnFeedback.LinkInputSig(powerOnSig);
-
- var powerOffSig = DisplayList.BoolInputSig(1, 2);
- (display as TwoWayDisplayBase).PowerIsOnFeedback.LinkComplementInputSig(powerOffSig);
- }
- DisplayList.GetBoolFeedbackSig(i, 3).SetSigFalseAction(() =>
- { if (display is IInputHdmi1) (display as IInputHdmi1).InputHdmi1(); });
- DisplayList.GetBoolFeedbackSig(i, 4).SetSigFalseAction(() =>
- { if (display is IInputHdmi2) (display as IInputHdmi2).InputHdmi2(); });
- DisplayList.GetBoolFeedbackSig(i, 5).SetSigFalseAction(() =>
- { if (display is IInputHdmi3) (display as IInputHdmi3).InputHdmi3(); });
- //DisplayList.GetBoolFeedbackSig(i, 6).SetSigFalseAction(() =>
- //{ if (display is IInputHdmi4) (display as IInputHdmi4).InputHdmi4(); });
- DisplayList.GetBoolFeedbackSig(i, 6).SetSigFalseAction(() =>
- { if (display is IInputDisplayPort1) (display as IInputDisplayPort1).InputDisplayPort1(); });
-
-
- // Figure out some way to provide current input feedback
- if (display is TwoWayDisplayBase)
- {
- (display as TwoWayDisplayBase).CurrentInputFeedback.OutputChange += CurrentInputFeedback_OutputChange;
- }
- }
-
-
- }
-
- DisplayList.Count = i;
- }
-
-
- void CurrentInputFeedback_OutputChange(object sender, EventArgs e)
- {
-
- }
-
- ///
- ///
- ///
- void CommunicationMonitor_StatusChange(object sender, MonitorStatusChangeEventArgs e)
- {
- var c = sender as ICommunicationMonitor;
- if (StatusListDeviceIndexes.ContainsKey(c))
- {
- var i = StatusListDeviceIndexes[c];
- StatusList.UShortInputSig(i, 1).UShortValue = (ushort)e.Status;
- }
- }
- }
+using PepperDash.Essentials.Core.Config;
+using PepperDash.Essentials.Core.SmartObjects;
+using PepperDash.Essentials.Core.Touchpanels.Keyboards;
+using PepperDash.Essentials.Devices.Displays;
+using PepperDash.Essentials.Room.Config;
+
+namespace PepperDash.Essentials.UIDrivers
+{
+ public class EssentialsHuddleTechPageDriver : PanelDriverBase
+ {
+ ///
+ ///
+ ///
+ SmartObjectDynamicList MenuList;
+ ///
+ ///
+ ///
+ SubpageReferenceList StatusList;
+ ///
+ /// The list of display controls
+ ///
+ SubpageReferenceList DisplayList;
+ ///
+ /// References lines in the list against device instances
+ ///
+ Dictionary StatusListDeviceIndexes;
+ ///
+ ///
+ ///
+ JoinedSigInterlock PagesInterlock;
+
+ ///
+ /// 1
+ ///
+ public const uint JoinText = 1;
+
+ CTimer PinAuthorizedTimer;
+
+ EssentialsRoomTechConfig Config;
+
+ StringBuilder PinEntryBuilder = new StringBuilder(4);
+
+ bool IsAuthorized;
+
+ SmartObjectNumeric PinKeypad;
+
+ ///
+ ///
+ ///
+ ///
+ ///
+ public EssentialsHuddleTechPageDriver(BasicTriListWithSmartObject trilist, EssentialsRoomTechConfig config)
+ : base(trilist)
+ {
+ Config = config;
+
+ PagesInterlock = new JoinedSigInterlock(trilist);
+ PagesInterlock.SetButDontShow(UIBoolJoin.TechSystemStatusVisible);
+
+ trilist.SetSigFalseAction(UIBoolJoin.TechExitButton, Hide);
+
+ MenuList = new SmartObjectDynamicList(trilist.SmartObjects[UISmartObjectJoin.TechMenuList],
+ true, 3100);
+
+ MenuList.SetFeedback(1, true); // initial fb
+ ushort count = 0;
+
+ MenuList.SetItemMainText(1, "System Status");
+ MenuList.SetItemButtonAction(1, b => {
+ if (b) PagesInterlock.ShowInterlocked(UIBoolJoin.TechSystemStatusVisible);
+ MenuList.SetFeedback(1, true);
+ });
+
+ MenuList.SetItemMainText(2, "Display Controls");
+ MenuList.SetItemButtonAction(2, b => {
+ if (b) PagesInterlock.ShowInterlocked(UIBoolJoin.TechDisplayControlsVisible);
+ MenuList.SetFeedback(2, true);
+ });
+
+ count = 2;
+
+ // Don't show panel setup on iPad or xpanel
+ if (TriList is Crestron.SimplSharpPro.DeviceSupport.TswFt5Button)
+ {
+ count++;
+ MenuList.SetItemMainText(count, "Panel Setup");
+ MenuList.SetItemButtonAction(count, b =>
+ {
+ if (b) PagesInterlock.ShowInterlocked(UIBoolJoin.TechPanelSetupVisible);
+ MenuList.SetFeedback(count, true);
+ });
+ }
+
+ MenuList.Count = count;
+ BuildStatusList();
+ BuildDisplayList();
+ SetupPinModal();
+ }
+
+ ///
+ ///
+ ///
+ public override void Show()
+ {
+ // divert to PIN if we need auth
+ if (IsAuthorized)
+ {
+ // Cancel the auth timer so we don't deauth after coming back in
+ if (PinAuthorizedTimer != null)
+ PinAuthorizedTimer.Stop();
+
+ TriList.SetBool(UIBoolJoin.TechCommonItemsVisbible, true);
+ PagesInterlock.Show();
+ base.Show();
+ }
+ else
+ {
+ TriList.SetBool(UIBoolJoin.PinDialog4DigitVisible, true);
+ }
+ }
+
+ ///
+ ///
+ ///
+ public override void Hide()
+ {
+ // Leave it authorized for 60 seconds.
+ if (IsAuthorized)
+ PinAuthorizedTimer = new CTimer(o => {
+ IsAuthorized = false;
+ PinAuthorizedTimer = null;
+ }, 60000);
+ TriList.SetBool(UIBoolJoin.TechCommonItemsVisbible, false);
+ PagesInterlock.Hide();
+ base.Hide();
+ }
+
+ ///
+ /// Wire up the keypad and buttons
+ ///
+ void SetupPinModal()
+ {
+ TriList.SetSigFalseAction(UIBoolJoin.PinDialogCancelPress, CancelPinDialog);
+ PinKeypad = new SmartObjectNumeric(TriList.SmartObjects[UISmartObjectJoin.TechPinDialogKeypad], true);
+ PinKeypad.Digit0.UserObject = new Action(b => { if (b)DialPinDigit('0'); });
+ PinKeypad.Digit1.UserObject = new Action(b => { if (b)DialPinDigit('1'); });
+ PinKeypad.Digit2.UserObject = new Action(b => { if (b)DialPinDigit('2'); });
+ PinKeypad.Digit3.UserObject = new Action(b => { if (b)DialPinDigit('3'); });
+ PinKeypad.Digit4.UserObject = new Action(b => { if (b)DialPinDigit('4'); });
+ PinKeypad.Digit5.UserObject = new Action(b => { if (b)DialPinDigit('5'); });
+ PinKeypad.Digit6.UserObject = new Action(b => { if (b)DialPinDigit('6'); });
+ PinKeypad.Digit7.UserObject = new Action(b => { if (b)DialPinDigit('7'); });
+ PinKeypad.Digit8.UserObject = new Action(b => { if (b)DialPinDigit('8'); });
+ PinKeypad.Digit9.UserObject = new Action(b => { if (b)DialPinDigit('9'); });
+ }
+
+ ///
+ ///
+ ///
+ ///
+ void DialPinDigit(char d)
+ {
+ PinEntryBuilder.Append(d);
+ var len = PinEntryBuilder.Length;
+ SetPinDotsFeedback(len);
+
+ // check it!
+ if (len == 4)
+ {
+ if (Config.Password == PinEntryBuilder.ToString())
+ {
+ IsAuthorized = true;
+ SetPinDotsFeedback(0);
+ TriList.SetBool(UIBoolJoin.PinDialog4DigitVisible, false);
+ Show();
+ }
+ else
+ {
+ SetPinDotsFeedback(0);
+ TriList.SetBool(UIBoolJoin.PinDialogErrorVisible, true);
+ new CTimer(o =>
+ {
+ TriList.SetBool(UIBoolJoin.PinDialogErrorVisible, false);
+ }, 1500);
+ }
+
+ PinEntryBuilder.Remove(0, len); // clear it either way
+ }
+ }
+
+ ///
+ /// Draws the dots as pin is entered
+ ///
+ ///
+ void SetPinDotsFeedback(int len)
+ {
+ TriList.SetBool(UIBoolJoin.PinDialogDot1, len >= 1);
+ TriList.SetBool(UIBoolJoin.PinDialogDot2, len >= 2);
+ TriList.SetBool(UIBoolJoin.PinDialogDot3, len >= 3);
+ TriList.SetBool(UIBoolJoin.PinDialogDot4, len == 4);
+
+ }
+
+ ///
+ /// Does what it says
+ ///
+ void CancelPinDialog()
+ {
+ PinEntryBuilder.Remove(0, PinEntryBuilder.Length);
+ TriList.SetBool(UIBoolJoin.PinDialog4DigitVisible, false);
+ }
+
+
+ ///
+ ///
+ ///
+ void BuildStatusList()
+ {
+ StatusList = new SubpageReferenceList(TriList, UISmartObjectJoin.TechStatusList, 3, 3, 3);
+ StatusListDeviceIndexes = new Dictionary();
+ uint i = 0;
+ foreach (var d in DeviceManager.AllDevices)
+ {
+ // make sure it is both ICommunicationMonitor and a Device
+ var sd = d as ICommunicationMonitor;
+ if (sd == null)
+ continue;
+ var dd = sd as Device;
+ if(dd == null)
+ continue;
+ i++;
+ StatusList.StringInputSig(i, 1).StringValue = dd.Name;
+ StatusList.UShortInputSig(i, 1).UShortValue = (ushort)sd.CommunicationMonitor.Status;
+ StatusListDeviceIndexes.Add(sd, i);
+ sd.CommunicationMonitor.StatusChange += CommunicationMonitor_StatusChange ;
+ }
+ StatusList.Count = (ushort)i;
+ }
+
+ ///
+ /// Builds the list of display controls
+ ///
+ void BuildDisplayList()
+ {
+ DisplayList = new SubpageReferenceList(TriList, UISmartObjectJoin.TechDisplayControlsList, 10, 3, 3);
+
+ var devKeys = ConfigReader.ConfigObject.Devices.Where(d =>
+ d.Group.Equals("display", StringComparison.OrdinalIgnoreCase)
+ || d.Group.Equals("projector", StringComparison.OrdinalIgnoreCase))
+ .Select(dd => dd.Key);
+ var disps = DeviceManager.AllDevices.Where(d =>
+ devKeys.Contains(d.Key));
+ ushort i = 0;
+ foreach (var disp in disps)
+ {
+ var display = disp as DisplayBase;
+ if (display != null)
+ {
+ i++;
+ DisplayList.StringInputSig(i, 1).StringValue = display.Name;
+ DisplayList.GetBoolFeedbackSig(i, 1).SetSigFalseAction(display.PowerOn);
+ DisplayList.GetBoolFeedbackSig(i, 2).SetSigFalseAction(display.PowerOff);
+ if (display is TwoWayDisplayBase)
+ {
+ var powerOnSig = DisplayList.BoolInputSig(i, 1);
+ (display as TwoWayDisplayBase).PowerIsOnFeedback.LinkInputSig(powerOnSig);
+
+ var powerOffSig = DisplayList.BoolInputSig(1, 2);
+ (display as TwoWayDisplayBase).PowerIsOnFeedback.LinkComplementInputSig(powerOffSig);
+ }
+ DisplayList.GetBoolFeedbackSig(i, 3).SetSigFalseAction(() =>
+ { if (display is IInputHdmi1) (display as IInputHdmi1).InputHdmi1(); });
+ DisplayList.GetBoolFeedbackSig(i, 4).SetSigFalseAction(() =>
+ { if (display is IInputHdmi2) (display as IInputHdmi2).InputHdmi2(); });
+ DisplayList.GetBoolFeedbackSig(i, 5).SetSigFalseAction(() =>
+ { if (display is IInputHdmi3) (display as IInputHdmi3).InputHdmi3(); });
+ //DisplayList.GetBoolFeedbackSig(i, 6).SetSigFalseAction(() =>
+ //{ if (display is IInputHdmi4) (display as IInputHdmi4).InputHdmi4(); });
+ DisplayList.GetBoolFeedbackSig(i, 6).SetSigFalseAction(() =>
+ { if (display is IInputDisplayPort1) (display as IInputDisplayPort1).InputDisplayPort1(); });
+
+
+ // Figure out some way to provide current input feedback
+ if (display is TwoWayDisplayBase)
+ {
+ (display as TwoWayDisplayBase).CurrentInputFeedback.OutputChange += CurrentInputFeedback_OutputChange;
+ }
+ }
+
+
+ }
+
+ DisplayList.Count = i;
+ }
+
+
+ void CurrentInputFeedback_OutputChange(object sender, EventArgs e)
+ {
+
+ }
+
+ ///
+ ///
+ ///
+ void CommunicationMonitor_StatusChange(object sender, MonitorStatusChangeEventArgs e)
+ {
+ var c = sender as ICommunicationMonitor;
+ if (StatusListDeviceIndexes.ContainsKey(c))
+ {
+ var i = StatusListDeviceIndexes[c];
+ StatusList.UShortInputSig(i, 1).UShortValue = (ushort)e.Status;
+ }
+ }
+ }
}
\ No newline at end of file
diff --git a/essentials-framework/Essentials Core/PepperDashEssentialsBase/PartitionSensor/GlsPartitionSensorController.cs b/essentials-framework/Essentials Core/PepperDashEssentialsBase/PartitionSensor/GlsPartitionSensorController.cs
index 752a7107..114909c4 100644
--- a/essentials-framework/Essentials Core/PepperDashEssentialsBase/PartitionSensor/GlsPartitionSensorController.cs
+++ b/essentials-framework/Essentials Core/PepperDashEssentialsBase/PartitionSensor/GlsPartitionSensorController.cs
@@ -257,7 +257,7 @@ namespace PepperDash.Essentials.Core
public override EssentialsDevice BuildDevice(DeviceConfig dc)
{
- Debug.Console(1, "Factory Attempting to create new C2N-RTHS Device");
+ Debug.Console(1, "Factory Attempting to create new GlsPartitionSensorController Device");
return new GlsPartitionSensorController(dc.Key, GetGlsPartCnDevice, dc);
}
diff --git a/essentials-framework/Essentials Core/PepperDashEssentialsBase/Room/Combining/EssentialsRoomCombiner.cs b/essentials-framework/Essentials Core/PepperDashEssentialsBase/Room/Combining/EssentialsRoomCombiner.cs
index cbbb58d1..b68a4c04 100644
--- a/essentials-framework/Essentials Core/PepperDashEssentialsBase/Room/Combining/EssentialsRoomCombiner.cs
+++ b/essentials-framework/Essentials Core/PepperDashEssentialsBase/Room/Combining/EssentialsRoomCombiner.cs
@@ -46,9 +46,12 @@ namespace PepperDash.Essentials.Core
CreateScenarios();
- SetupPartitionStateProviders();
+ AddPostActivationAction(() =>
+ {
+ SetupPartitionStateProviders();
- SetRooms();
+ SetRooms();
+ });
}
void CreateScenarios()
@@ -243,4 +246,21 @@ namespace PepperDash.Essentials.Core
#endregion
}
+
+ public class EssentialsRoomCombinerFactory : EssentialsDeviceFactory
+ {
+ public EssentialsRoomCombinerFactory()
+ {
+ TypeNames = new List { "essentialsroomcombiner" };
+ }
+
+ public override EssentialsDevice BuildDevice(PepperDash.Essentials.Core.Config.DeviceConfig dc)
+ {
+ Debug.Console(1, "Factory Attempting to create new EssentialsRoomCombiner Device");
+
+ var props = dc.Properties.ToObject();
+
+ return new EssentialsRoomCombiner(dc.Key, props);
+ }
+ }
}
\ No newline at end of file