diff --git a/Essentials Devices Common/Essentials Devices Common/VideoCodec/CiscoCodec/CiscoCodec.cs b/Essentials Devices Common/Essentials Devices Common/VideoCodec/CiscoCodec/CiscoCodec.cs
index 9ce170fe..0d9947b4 100644
--- a/Essentials Devices Common/Essentials Devices Common/VideoCodec/CiscoCodec/CiscoCodec.cs
+++ b/Essentials Devices Common/Essentials Devices Common/VideoCodec/CiscoCodec/CiscoCodec.cs
@@ -6,7 +6,6 @@ using Crestron.SimplSharp;
using Crestron.SimplSharp.Net.Https;
using Crestron.SimplSharp.CrestronXml;
using Crestron.SimplSharp.CrestronXml.Serialization;
-//using Crestron.SimplSharpPro;
using Newtonsoft.Json;
//using Cisco_One_Button_To_Push;
//using Cisco_SX80_Corporate_Phone_Book;
diff --git a/Essentials/PepperDashEssentials/Room/Types/EssentialsHuddleSpaceRoom.cs b/Essentials/PepperDashEssentials/Room/Types/EssentialsHuddleSpaceRoom.cs
index 592074cb..71afd3f1 100644
--- a/Essentials/PepperDashEssentials/Room/Types/EssentialsHuddleSpaceRoom.cs
+++ b/Essentials/PepperDashEssentials/Room/Types/EssentialsHuddleSpaceRoom.cs
@@ -200,7 +200,7 @@ namespace PepperDash.Essentials
///
///
///
- public override void Shutdown()
+ protected override void EndShutdown()
{
RunRouteAction("roomOff");
}
diff --git a/Essentials/PepperDashEssentials/Room/Types/EssentialsHuddleVtc1Room.cs b/Essentials/PepperDashEssentials/Room/Types/EssentialsHuddleVtc1Room.cs
index 73b5b8a9..51c55374 100644
--- a/Essentials/PepperDashEssentials/Room/Types/EssentialsHuddleVtc1Room.cs
+++ b/Essentials/PepperDashEssentials/Room/Types/EssentialsHuddleVtc1Room.cs
@@ -261,7 +261,7 @@ namespace PepperDash.Essentials
///
///
///
- public override void Shutdown()
+ protected override void EndShutdown()
{
RunRouteAction("roomOff");
VideoCodec.EndAllCalls();
@@ -338,6 +338,7 @@ namespace PepperDash.Essentials
}
catch (Exception e)
{
+ Debug.Console(1, this, "*#* EXCEPTION in end usage tracking:\r{0}", e);
}
}
}
diff --git a/Essentials/PepperDashEssentials/Room/Types/EssentialsPresentationRoom.cs b/Essentials/PepperDashEssentials/Room/Types/EssentialsPresentationRoom.cs
index adb35c8f..c784f91a 100644
--- a/Essentials/PepperDashEssentials/Room/Types/EssentialsPresentationRoom.cs
+++ b/Essentials/PepperDashEssentials/Room/Types/EssentialsPresentationRoom.cs
@@ -261,8 +261,8 @@ namespace PepperDash.Essentials
///
///
- ///
- public override void Shutdown()
+ ///
+ protected override void EndShutdown()
{
RunRouteAction("roomoff");
}
diff --git a/Essentials/PepperDashEssentials/Room/Types/EssentialsRoomBase.cs b/Essentials/PepperDashEssentials/Room/Types/EssentialsRoomBase.cs
index 23eeed2b..58bcf5a7 100644
--- a/Essentials/PepperDashEssentials/Room/Types/EssentialsRoomBase.cs
+++ b/Essentials/PepperDashEssentials/Room/Types/EssentialsRoomBase.cs
@@ -45,15 +45,25 @@ namespace PepperDash.Essentials
///
public int ShutdownPromptSeconds { get; set; }
public int ShutdownVacancySeconds { get; set; }
- public ShutdownType ShutdownType { get; private set; }
+ public eShutdownType ShutdownType { get; private set; }
public PepperDash.Essentials.Room.EssentialsRoomEmergencyBase Emergency { get; set; }
public string LogoUrl { get; set; }
- protected CTimer RoomVacancyShutdownTimer;
+ protected SecondsCountdownTimer RoomVacancyShutdownTimer { get; private set; }
- protected long RoomVacancyShutdownTimeout = 1800000; // 30 minutes by default
+ public eVacancyMode VacancyMode { get; private set; }
+
+ ///
+ /// Seconds after vacancy prompt is displayed until shutdown
+ ///
+ protected int RoomVacancyShutdownSeconds;
+
+ ///
+ /// Seconds after vacancy detected until prompt is displayed
+ ///
+ protected int RoomVacancyShutdownPromptSeconds;
///
///
@@ -67,44 +77,96 @@ namespace PepperDash.Essentials
///
public EssentialsRoomBase(string key, string name) : base(key, name)
{
+ // Setup the ShutdownPromptTimer
ShutdownPromptTimer = new SecondsCountdownTimer(Key + "-offTimer");
ShutdownPromptTimer.IsRunningFeedback.OutputChange += (o, a) =>
{
if (!ShutdownPromptTimer.IsRunningFeedback.BoolValue)
- ShutdownType = ShutdownType.None;
- };
+ ShutdownType = eShutdownType.None;
+ };
ShutdownPromptTimer.HasFinished += (o, a) => Shutdown(); // Shutdown is triggered
ShutdownPromptSeconds = 60;
ShutdownVacancySeconds = 120;
- ShutdownType = ShutdownType.None;
+ ShutdownType = eShutdownType.None;
+
+ RoomVacancyShutdownTimer = new SecondsCountdownTimer(Key + "-vacancyOffTimer");
+ //RoomVacancyShutdownTimer.IsRunningFeedback.OutputChange += (o, a) =>
+ //{
+ // if (!RoomVacancyShutdownTimer.IsRunningFeedback.BoolValue)
+ // ShutdownType = ShutdownType.Vacancy;
+ //};
+ RoomVacancyShutdownTimer.HasFinished += new EventHandler(RoomVacancyShutdownPromptTimer_HasFinished); // Shutdown is triggered
+
+ RoomVacancyShutdownPromptSeconds = 1500; // 25 min to prompt warning
+ RoomVacancyShutdownSeconds = 240; // 4 min after prompt will trigger shutdown prompt
+ VacancyMode = eVacancyMode.None;
OnFeedback = new BoolFeedback(OnFeedbackFunc);
IsWarmingUpFeedback = new BoolFeedback(IsWarmingFeedbackFunc);
IsCoolingDownFeedback = new BoolFeedback(IsCoolingFeedbackFunc);
+ }
+
+ void RoomVacancyShutdownPromptTimer_HasFinished(object sender, EventArgs e)
+ {
+ switch (VacancyMode)
+ {
+ case eVacancyMode.None:
+ StartRoomVacancyTimer(eVacancyMode.InInitialVacancy);
+ break;
+ case eVacancyMode.InInitialVacancy:
+ StartRoomVacancyTimer(eVacancyMode.InShutdownWarning);
+ break;
+ case eVacancyMode.InShutdownWarning:
+ StartShutdown(eShutdownType.Vacancy);
+ break;
+ default:
+ break;
+ }
}
///
///
///
///
- public void StartShutdown(ShutdownType type)
+ public void StartShutdown(eShutdownType type)
{
// Check for shutdowns running. Manual should override other shutdowns
- if (type == ShutdownType.Manual)
+ if (type == eShutdownType.Manual)
ShutdownPromptTimer.SecondsToCount = ShutdownPromptSeconds;
- else if (type == ShutdownType.Vacancy)
+ else if (type == eShutdownType.Vacancy)
ShutdownPromptTimer.SecondsToCount = ShutdownVacancySeconds;
ShutdownType = type;
ShutdownPromptTimer.Start();
+ }
+
+ public void StartRoomVacancyTimer(eVacancyMode mode)
+ {
+ if (mode == eVacancyMode.None)
+ RoomVacancyShutdownTimer.SecondsToCount = RoomVacancyShutdownPromptSeconds;
+ else if (mode == eVacancyMode.InInitialVacancy)
+ RoomVacancyShutdownTimer.SecondsToCount = RoomVacancyShutdownSeconds;
+ VacancyMode = mode;
+ RoomVacancyShutdownTimer.Start();
}
///
- ///
+ /// Resets the vacancy mode and shutsdwon the room
///
- public abstract void Shutdown();
+ public void Shutdown()
+ {
+ VacancyMode = eVacancyMode.None;
+ EndShutdown();
+ }
+
+ ///
+ /// This method is for the derived class to define it's specific shutdown
+ /// requirements but should not be called directly. It is called by Shutdown()
+ ///
+ protected abstract void EndShutdown();
+
///
/// Override this to implement a default volume level(s) method
@@ -127,13 +189,13 @@ namespace PepperDash.Essentials
if ((sender as IOccupancyStatusProvider).RoomIsOccupiedFeedback.BoolValue == false)
{
// Trigger the timer when the room is vacant
- RoomVacancyShutdownTimer = new CTimer(RoomVacatedForTimeoutPeriod, RoomVacancyShutdownTimeout);
+ StartRoomVacancyTimer(eVacancyMode.InInitialVacancy);
}
else
{
// Reset the timer when the room is occupied
- if(RoomVacancyShutdownTimer != null)
- RoomVacancyShutdownTimer.Reset(RoomVacancyShutdownTimeout);
+ if(RoomVacancyShutdownTimer.IsRunningFeedback.BoolValue)
+ RoomVacancyShutdownTimer.Cancel();
}
}
@@ -147,18 +209,25 @@ namespace PepperDash.Essentials
///
/// To describe the various ways a room may be shutting down
///
- public enum ShutdownType
+ public enum eShutdownType
{
- None,
+ None = 0,
External,
Manual,
Vacancy
+ }
+
+ public enum eVacancyMode
+ {
+ None = 0,
+ InInitialVacancy,
+ InShutdownWarning
}
///
///
///
- public enum WarmingCoolingMode
+ public enum eWarmingCoolingMode
{
None,
Warming,
diff --git a/Essentials/PepperDashEssentials/UIDrivers/Essentials/EssentialsHuddlePanelAvFunctionsDriver.cs b/Essentials/PepperDashEssentials/UIDrivers/Essentials/EssentialsHuddlePanelAvFunctionsDriver.cs
index c4dcf99f..350c0d58 100644
--- a/Essentials/PepperDashEssentials/UIDrivers/Essentials/EssentialsHuddlePanelAvFunctionsDriver.cs
+++ b/Essentials/PepperDashEssentials/UIDrivers/Essentials/EssentialsHuddlePanelAvFunctionsDriver.cs
@@ -473,7 +473,7 @@ namespace PepperDash.Essentials
|| CurrentRoom.ShutdownPromptTimer.IsRunningFeedback.BoolValue)
return;
- CurrentRoom.StartShutdown(ShutdownType.Manual);
+ CurrentRoom.StartShutdown(eShutdownType.Manual);
}
///
@@ -488,7 +488,7 @@ namespace PepperDash.Essentials
EndMeetingButtonSig.BoolValue = true;
ShareButtonSig.BoolValue = false;
- if (CurrentRoom.ShutdownType == ShutdownType.Manual)
+ if (CurrentRoom.ShutdownType == eShutdownType.Manual)
{
PowerDownModal = new ModalDialog(TriList);
var message = string.Format("Meeting will end in {0} seconds", CurrentRoom.ShutdownPromptSeconds);
diff --git a/Essentials/PepperDashEssentials/UIDrivers/EssentialsHuddleVTC/EssentialsHuddleVtc1PanelAvFunctionsDriver.cs b/Essentials/PepperDashEssentials/UIDrivers/EssentialsHuddleVTC/EssentialsHuddleVtc1PanelAvFunctionsDriver.cs
index 96284123..96407661 100644
--- a/Essentials/PepperDashEssentials/UIDrivers/EssentialsHuddleVTC/EssentialsHuddleVtc1PanelAvFunctionsDriver.cs
+++ b/Essentials/PepperDashEssentials/UIDrivers/EssentialsHuddleVTC/EssentialsHuddleVtc1PanelAvFunctionsDriver.cs
@@ -529,10 +529,10 @@ namespace PepperDash.Essentials
void SetActivityFooterFeedbacks()
{
CallButtonSig.BoolValue = CurrentMode == UiDisplayMode.Call
- && CurrentRoom.ShutdownType == ShutdownType.None;
+ && CurrentRoom.ShutdownType == eShutdownType.None;
ShareButtonSig.BoolValue = CurrentMode == UiDisplayMode.Presentation
- && CurrentRoom.ShutdownType == ShutdownType.None;
- EndMeetingButtonSig.BoolValue = CurrentRoom.ShutdownType != ShutdownType.None;
+ && CurrentRoom.ShutdownType == eShutdownType.None;
+ EndMeetingButtonSig.BoolValue = CurrentRoom.ShutdownType != eShutdownType.None;
}
///
@@ -655,7 +655,7 @@ namespace PepperDash.Essentials
|| CurrentRoom.ShutdownPromptTimer.IsRunningFeedback.BoolValue)
return;
- CurrentRoom.StartShutdown(ShutdownType.Manual);
+ CurrentRoom.StartShutdown(eShutdownType.Manual);
}
///
@@ -669,7 +669,7 @@ namespace PepperDash.Essentials
var timer = CurrentRoom.ShutdownPromptTimer;
SetActivityFooterFeedbacks();
- if (CurrentRoom.ShutdownType == ShutdownType.Manual)
+ if (CurrentRoom.ShutdownType == eShutdownType.Manual)
{
PowerDownModal = new ModalDialog(TriList);
var message = string.Format("Meeting will end in {0} seconds", CurrentRoom.ShutdownPromptSeconds);