diff --git a/Essentials Core/PepperDashEssentialsBase/SmartObjects/SmartObjectDynamicList.cs b/Essentials Core/PepperDashEssentialsBase/SmartObjects/SmartObjectDynamicList.cs
index 5c4f767a..bf73ba1b 100644
--- a/Essentials Core/PepperDashEssentialsBase/SmartObjects/SmartObjectDynamicList.cs
+++ b/Essentials Core/PepperDashEssentialsBase/SmartObjects/SmartObjectDynamicList.cs
@@ -33,6 +33,12 @@ namespace PepperDash.Essentials.Core.SmartObjects
///
public int MaxCount { get; private set; }
+ ///
+ /// Wrapper for smart object
+ ///
+ ///
+ /// True if the standard user object action handler will be used
+ /// The starting join of the string sigs for the button labels
public SmartObjectDynamicList(SmartObject so, bool useUserObjectHandler, uint nameSigOffset) : base(so, useUserObjectHandler)
{
try
diff --git a/Essentials Core/PepperDashEssentialsBase/Touchpanels/TriListExtensions.cs b/Essentials Core/PepperDashEssentialsBase/Touchpanels/TriListExtensions.cs
index 15287a64..bc9ff012 100644
--- a/Essentials Core/PepperDashEssentialsBase/Touchpanels/TriListExtensions.cs
+++ b/Essentials Core/PepperDashEssentialsBase/Touchpanels/TriListExtensions.cs
@@ -81,21 +81,25 @@ namespace PepperDash.Essentials.Core
public static BoolOutputSig SetSigHeldAction(this BasicTriList tl, uint sigNum, uint heldMs, Action heldAction, Action releaseAction)
{
CTimer heldTimer = null;
+ bool wasHeld = false;
return tl.SetBoolSigAction(sigNum, press =>
{
if (press)
{
-
+ wasHeld = false;
// Could insert a pressed action here
heldTimer = new CTimer(o =>
{
// if still held and there's an action
if (tl.BooleanOutput[sigNum].BoolValue && heldAction != null)
+ {
+ wasHeld = true;
// Hold action here
heldAction();
+ }
}, heldMs);
}
- else if (heldTimer != null) // released
+ else if(!wasHeld) // released
{
heldTimer.Stop();
if (releaseAction != null)
diff --git a/Essentials/PepperDashEssentials/PepperDashEssentials.csproj b/Essentials/PepperDashEssentials/PepperDashEssentials.csproj
index ccb37bf3..cb43f6ca 100644
--- a/Essentials/PepperDashEssentials/PepperDashEssentials.csproj
+++ b/Essentials/PepperDashEssentials/PepperDashEssentials.csproj
@@ -164,12 +164,14 @@
+
+
-
+
diff --git a/Essentials/PepperDashEssentials/Room/Config/EssentialsRoomConfig.cs b/Essentials/PepperDashEssentials/Room/Config/EssentialsRoomConfig.cs
index 6ccb0f33..934bd1f5 100644
--- a/Essentials/PepperDashEssentials/Room/Config/EssentialsRoomConfig.cs
+++ b/Essentials/PepperDashEssentials/Room/Config/EssentialsRoomConfig.cs
@@ -141,7 +141,7 @@ namespace PepperDash.Essentials.Room.Config
if (Type == "url")
return Url;
if (Type == "system")
- return string.Format("http://{0}:5646/logo",
+ return string.Format("http://{0}:8080/logo.png",
CrestronEthernetHelper.GetEthernetParameter(CrestronEthernetHelper.ETHERNET_PARAMETER_TO_GET.GET_CURRENT_IP_ADDRESS, 0));
return null;
}
diff --git a/Essentials/PepperDashEssentials/UI/HttpLogoServer.cs b/Essentials/PepperDashEssentials/UI/HttpLogoServer.cs
index 8ff93a07..f04f6872 100644
--- a/Essentials/PepperDashEssentials/UI/HttpLogoServer.cs
+++ b/Essentials/PepperDashEssentials/UI/HttpLogoServer.cs
@@ -64,8 +64,6 @@ namespace PepperDash.Essentials
void Server_OnHttpRequest(object sender, OnHttpRequestArgs args)
{
var path = args.Request.Path;
- Debug.Console(0, "########## PATH={0}", path);
-
if (File.Exists(FileDirectory + @"\" + path))
{
string filePath = path.Replace('/', '\\');
@@ -74,7 +72,6 @@ namespace PepperDash.Essentials
{
args.Response.Header.ContentType = GetContentType(new FileInfo(localPath).Extension);
args.Response.ContentStream = new FileStream(localPath, FileMode.Open, FileAccess.Read);
- //args.Response.CloseStream = true;
}
else
{
diff --git a/Essentials/PepperDashEssentials/UI/JoinConstants/UIBoolJoin.cs b/Essentials/PepperDashEssentials/UI/JoinConstants/UIBoolJoin.cs
index 26cc59ea..7d2f41a2 100644
--- a/Essentials/PepperDashEssentials/UI/JoinConstants/UIBoolJoin.cs
+++ b/Essentials/PepperDashEssentials/UI/JoinConstants/UIBoolJoin.cs
@@ -206,6 +206,43 @@ namespace PepperDash.Essentials
// Letter joins start at 2921;
+
+
+ ///
+ /// 3101
+ ///
+ public const uint TechExitButton = 3101;
+ ///
+ /// 3106
+ ///
+ public const uint TechCommonItemsVisbible = 3106;
+ ///
+ /// 3107
+ ///
+ public const uint TechSystemStatusVisible = 3107;
+ ///
+ /// 3108
+ ///
+ public const uint TechDisplayControlsVisible = 3108;
+ ///
+ /// 3109
+ ///
+ public const uint TechPanelSetupVisible = 3109;
+ ///
+ /// 3110
+ ///
+ public const uint TechAdvancedVolumeVisible = 3110;
+ ///
+ /// 3111
+ ///
+ public const uint TechAboutVisible = 3111;
+ ///
+ /// 3112
+ ///
+ public const uint TechSchedulerVisible = 3112;
+
+
+
//******************************************************
///
/// 3811
@@ -300,14 +337,8 @@ namespace PepperDash.Essentials
/// 3891
///
public const uint VolumeDefaultPress = 3891;
- ///
- /// 3901
- ///
- public const uint TechPagesExitButton = 3901;
- ///
- /// 3902
- ///
- public const uint TechPanelSetupVisible = 3902;
+
+
///
/// 3999
///
diff --git a/Essentials/PepperDashEssentials/UI/JoinConstants/UISmartObjectJoin.cs b/Essentials/PepperDashEssentials/UI/JoinConstants/UISmartObjectJoin.cs
index ceea3a89..5769fc52 100644
--- a/Essentials/PepperDashEssentials/UI/JoinConstants/UISmartObjectJoin.cs
+++ b/Essentials/PepperDashEssentials/UI/JoinConstants/UISmartObjectJoin.cs
@@ -29,6 +29,10 @@
/// 15022 The main activity footer
///
public const uint ActivityFooterSRL = 15022;
+ ///
+ /// 3901 The Tech page menu list
+ ///
+ public const uint TechMenuList = 3901;
}
}
\ No newline at end of file
diff --git a/Essentials/PepperDashEssentials/UI/JoinConstants/UIStringlJoin.cs b/Essentials/PepperDashEssentials/UI/JoinConstants/UIStringlJoin.cs
index c49fae06..b38188c9 100644
--- a/Essentials/PepperDashEssentials/UI/JoinConstants/UIStringlJoin.cs
+++ b/Essentials/PepperDashEssentials/UI/JoinConstants/UIStringlJoin.cs
@@ -28,6 +28,14 @@ namespace PepperDash.Essentials
///
//public const uint KeypadText = 2901;
+ ///
+ /// 3101 - This is the start of the range 3101 - 3120
+ ///
+ public const uint TechMenuButtonTextStart = 3101;
+
+ //----- through 3120
+
+
///
/// 3812
///
diff --git a/Essentials/PepperDashEssentials/UIDrivers/Essentials/EssentialsHuddlePanelAvFunctionsDriver.cs b/Essentials/PepperDashEssentials/UIDrivers/Essentials/EssentialsHuddlePanelAvFunctionsDriver.cs
index fbf22900..ecd4fb04 100644
--- a/Essentials/PepperDashEssentials/UIDrivers/Essentials/EssentialsHuddlePanelAvFunctionsDriver.cs
+++ b/Essentials/PepperDashEssentials/UIDrivers/Essentials/EssentialsHuddlePanelAvFunctionsDriver.cs
@@ -220,7 +220,7 @@ namespace PepperDash.Essentials
// Setup button
TriList.SetSigHeldAction(UIBoolJoin.GearHeaderButtonPress, 2000,
() => PopupInterlock.ShowInterlockedWithToggle(UIBoolJoin.TechPanelSetupVisible));// ShowInterlockedModal(UIBoolJoin.TechPanelSetupVisible));
- TriList.SetSigFalseAction(UIBoolJoin.TechPagesExitButton, () =>
+ TriList.SetSigFalseAction(UIBoolJoin.TechExitButton, () =>
PopupInterlock.HideAndClear()); // HideCurrentInterlockedModal());
#warning This gets overridden by config after NYU demo
if(TriList is CrestronApp)
diff --git a/Essentials/PepperDashEssentials/UIDrivers/EssentialsHuddleVTC/EssentialsHuddleTechPageDriver.cs b/Essentials/PepperDashEssentials/UIDrivers/EssentialsHuddleVTC/EssentialsHuddleTechPageDriver.cs
new file mode 100644
index 00000000..67cb5d8f
--- /dev/null
+++ b/Essentials/PepperDashEssentials/UIDrivers/EssentialsHuddleVTC/EssentialsHuddleTechPageDriver.cs
@@ -0,0 +1,77 @@
+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.SmartObjects;
+using PepperDash.Essentials.Core.Touchpanels.Keyboards;
+
+namespace PepperDash.Essentials.UIDrivers
+{
+ public class EssentialsHuddleTechPageDriver : PanelDriverBase
+ {
+ SmartObjectDynamicList MenuList;
+ IAVDriver Parent;
+ JoinedSigInterlock PagesInterlock;
+
+ ///
+ ///
+ ///
+ ///
+ ///
+ public EssentialsHuddleTechPageDriver(BasicTriListWithSmartObject trilist, IAVDriver parent)
+ : base(trilist)
+ {
+ Parent = parent;
+ 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
+
+ MenuList.SetItemMainText(1, "System Status");
+ MenuList.SetItemButtonAction(1, b => {
+ if (b) PagesInterlock.ShowInterlocked(UIBoolJoin.TechSystemStatusVisible);
+ MenuList.SetFeedback(1, true);
+ });
+
+ MenuList.SetItemMainText(2, "Panel Setup");
+ MenuList.SetItemButtonAction(2, b => {
+ if (b) PagesInterlock.ShowInterlocked(UIBoolJoin.TechPanelSetupVisible);
+ MenuList.SetFeedback(2, true);
+ });
+
+ MenuList.SetItemMainText(3, "System Status");
+ MenuList.SetItemButtonAction(3, b => {
+ if (b) PagesInterlock.ShowInterlocked(UIBoolJoin.TechDisplayControlsVisible);
+ MenuList.SetFeedback(3, true);
+ });
+
+ MenuList.Count = 3;
+ }
+
+ public override void Show()
+ {
+ TriList.SetBool(UIBoolJoin.TechCommonItemsVisbible, true);
+ PagesInterlock.Show();
+ base.Show();
+ }
+
+ public override void Hide()
+ {
+ TriList.SetBool(UIBoolJoin.TechCommonItemsVisbible, false);
+ PagesInterlock.Hide();
+ base.Hide();
+ }
+ }
+}
\ No newline at end of file
diff --git a/Essentials/PepperDashEssentials/UIDrivers/EssentialsHuddleVTC/HuddleVTCPanelAvFunctionsDriver.cs b/Essentials/PepperDashEssentials/UIDrivers/EssentialsHuddleVTC/EssentialsHuddleVtc1PanelAvFunctionsDriver.cs
similarity index 96%
rename from Essentials/PepperDashEssentials/UIDrivers/EssentialsHuddleVTC/HuddleVTCPanelAvFunctionsDriver.cs
rename to Essentials/PepperDashEssentials/UIDrivers/EssentialsHuddleVTC/EssentialsHuddleVtc1PanelAvFunctionsDriver.cs
index da6f21c7..29eacc9b 100644
--- a/Essentials/PepperDashEssentials/UIDrivers/EssentialsHuddleVTC/HuddleVTCPanelAvFunctionsDriver.cs
+++ b/Essentials/PepperDashEssentials/UIDrivers/EssentialsHuddleVTC/EssentialsHuddleVtc1PanelAvFunctionsDriver.cs
@@ -121,16 +121,47 @@ namespace PepperDash.Essentials
///
JoinedSigInterlock StagingBarInterlock;
+ ///
+ /// Interlocks the various call-related subpages
+ ///
JoinedSigInterlock CallPagesInterlock;
+ ///
+ /// The Video codec driver
+ ///
PepperDash.Essentials.UIDrivers.VC.EssentialsVideoCodecUiDriver VCDriver;
+ ///
+ /// The driver for the tech page. Lazy getter for memory usage
+ ///
+ PepperDash.Essentials.UIDrivers.EssentialsHuddleTechPageDriver TechDriver
+ {
+ get
+ {
+ if (_TechDriver == null)
+ _TechDriver = new PepperDash.Essentials.UIDrivers.EssentialsHuddleTechPageDriver(TriList, this);
+ return _TechDriver;
+ }
+ }
+ PepperDash.Essentials.UIDrivers.EssentialsHuddleTechPageDriver _TechDriver;
+
+ ///
+ /// Controls timeout of notification ribbon timer
+ ///
CTimer RibbonTimer;
+ ///
+ /// The keyboard
+ ///
public PepperDash.Essentials.Core.Touchpanels.Keyboards.HabaneroKeyboardController Keyboard { get; private set; }
+ ///
+ /// The mode showing. Presentation or call.
+ ///
UiDisplayMode CurrentMode = UiDisplayMode.Start;
+
+
///
/// Constructor
///
@@ -277,9 +308,9 @@ namespace PepperDash.Essentials
// Setup button - shows volumes with default button OR hold for tech page
TriList.SetSigHeldAction(UIBoolJoin.GearHeaderButtonPress, 2000,
- () => PopupInterlock.ShowInterlockedWithToggle(UIBoolJoin.TechPanelSetupVisible),
+ ShowTech,
() => PopupInterlock.ShowInterlockedWithToggle(UIBoolJoin.VolumesPageVisible));
- TriList.SetSigFalseAction(UIBoolJoin.TechPagesExitButton, () =>
+ TriList.SetSigFalseAction(UIBoolJoin.TechExitButton, () =>
PopupInterlock.HideAndClear());
// Volume related things
@@ -379,6 +410,15 @@ namespace PepperDash.Essentials
}
}
+ ///
+ /// Reveals the tech page and puts away anything that's in the way.
+ ///
+ void ShowTech()
+ {
+ PopupInterlock.HideAndClear();
+ TechDriver.Show();
+ }
+
///
/// When the room is off, set the footer SRL
///
diff --git a/Essentials/PepperDashEssentials/UIDrivers/SigInterlock.cs b/Essentials/PepperDashEssentials/UIDrivers/SigInterlock.cs
new file mode 100644
index 00000000..e62fc7f3
--- /dev/null
+++ b/Essentials/PepperDashEssentials/UIDrivers/SigInterlock.cs
@@ -0,0 +1,99 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using Crestron.SimplSharp;
+using Crestron.SimplSharpPro;
+using Crestron.SimplSharpPro.DeviceSupport;
+
+using PepperDash.Core;
+using PepperDash.Essentials.Core;
+
+namespace PepperDash.Essentials
+{
+ ///
+ /// Used for interlocking sigs, using a set-clears-last-set model.
+ ///
+ public class SigInterlock
+ {
+ ///
+ ///
+ ///
+ public BoolInputSig CurrentSig { get; private set; }
+
+ ///
+ ///
+ ///
+ public SigInterlock()
+ {
+ }
+
+ ///
+ /// Hides CurrentJoin and shows join. Does nothing when resending CurrentJoin
+ ///
+ public void ShowInterlocked(BoolInputSig sig)
+ {
+ if (CurrentSig == sig)
+ return;
+ SetButDontShow(sig);
+ sig.BoolValue = true;
+ }
+
+ ///
+ ///
+ ///
+ ///
+ public void ShowInterlockedWithToggle(BoolInputSig sig)
+ {
+ if(CurrentSig == sig)
+ HideAndClear();
+ else
+ {
+ if(CurrentSig != null)
+ CurrentSig.BoolValue = false;
+ CurrentSig = sig;
+ CurrentSig.BoolValue = true;
+ }
+
+ }
+
+ ///
+ /// Hides current Sig and clears CurrentSig
+ ///
+ public void HideAndClear()
+ {
+ Hide();
+ CurrentSig = null;
+ }
+
+ ///
+ /// Hides the current Sig but does not clear the selected Sig in case
+ /// it needs to be reshown
+ ///
+ public void Hide()
+ {
+ if(CurrentSig != null)
+ CurrentSig.BoolValue = false;
+ }
+
+ ///
+ /// If CurrentSig is set, it restores that Sig
+ ///
+ public void Show()
+ {
+ if(CurrentSig != null)
+ CurrentSig.BoolValue = true;
+ }
+
+ ///
+ /// Useful for pre-setting the interlock but not enabling it. Sets CurrentSig
+ ///
+ ///
+ public void SetButDontShow(BoolInputSig sig)
+ {
+ if (CurrentSig != null)
+ CurrentSig.BoolValue = false;
+ CurrentSig = sig;
+ }
+ }
+}
\ No newline at end of file
diff --git a/Release Package/PepperDashEssentials.cpz b/Release Package/PepperDashEssentials.cpz
index 39091a7d..d9d9c054 100644
Binary files a/Release Package/PepperDashEssentials.cpz and b/Release Package/PepperDashEssentials.cpz differ
diff --git a/Release Package/PepperDashEssentials.dll b/Release Package/PepperDashEssentials.dll
index 6b4b4515..c813158f 100644
Binary files a/Release Package/PepperDashEssentials.dll and b/Release Package/PepperDashEssentials.dll differ