diff --git a/PepperDashEssentials/AppServer/Messengers/CameraBaseMessenger.cs b/PepperDashEssentials/AppServer/Messengers/CameraBaseMessenger.cs index f11130b0..043341a9 100644 --- a/PepperDashEssentials/AppServer/Messengers/CameraBaseMessenger.cs +++ b/PepperDashEssentials/AppServer/Messengers/CameraBaseMessenger.cs @@ -45,7 +45,17 @@ namespace PepperDash.Essentials.AppServer.Messengers void presetsCamera_PresetsListHasChanged(object sender, EventArgs e) { - SendCameraFullMessageObject(); + var presetsCamera = Camera as IHasCameraPresets; + + var presetList = new List(); + + if (presetsCamera != null) + presetList = presetsCamera.Presets; + + PostStatusMessage(new + { + presets = presetList + }); } protected override void CustomRegisterWithAppServer(MobileControlSystemController appServerController) diff --git a/PepperDashEssentials/AppServer/Messengers/SIMPLCameraBaseMessenger.cs b/PepperDashEssentials/AppServer/Messengers/SIMPLCameraBaseMessenger.cs new file mode 100644 index 00000000..d9e124fe --- /dev/null +++ b/PepperDashEssentials/AppServer/Messengers/SIMPLCameraBaseMessenger.cs @@ -0,0 +1,176 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Crestron.SimplSharp; +using Crestron.SimplSharpPro.DeviceSupport; +using Crestron.SimplSharpPro.EthernetCommunication; + +using PepperDash.Core; +using PepperDash.Essentials.Core; +using PepperDash.Essentials.Devices.Common.Cameras; + +namespace PepperDash.Essentials.AppServer.Messengers +{ + public class SIMPLCameraBaseMessenger : MessengerBase + { + BasicTriList EISC; + + CameraBase Camera; + + uint JoinStart; + + /// + /// 811 + /// + const uint BCameraControlUp = 1; + /// + /// 812 + /// + const uint BCameraControlDown = 2; + /// + /// 813 + /// + const uint BCameraControlLeft = 3; + /// + /// 814 + /// + const uint BCameraControlRight = 4; + /// + /// 815 + /// + const uint BCameraControlZoomIn = 5; + /// + /// 816 + /// + const uint BCameraControlZoomOut = 6; + /// + /// 821 - 826 + /// + const uint BCameraPresetStart = 11; + + /// + /// 831 + /// + const uint BCameraModeAuto = 21; + /// + /// 832 + /// + const uint BCameraModeManual = 22; + /// + /// 833 + /// + const uint BCameraModeOff = 23; + + + public SIMPLCameraBaseMessenger(string key, CameraBase camera, BasicTriList eisc, string messagePath, uint joinStart) + : base(key, messagePath) + { + if (camera == null) + throw new ArgumentNullException("camera"); + + EISC = eisc; + Camera = camera; + JoinStart = joinStart; + + var presetsCamera = Camera as IHasCameraPresets; + + if (presetsCamera != null) + { + presetsCamera.PresetsListHasChanged += new EventHandler(presetsCamera_PresetsListHasChanged); + } + } + + void presetsCamera_PresetsListHasChanged(object sender, EventArgs e) + { + var presetsCamera = Camera as IHasCameraPresets; + + var presetList = new List(); + + if (presetsCamera != null) + presetList = presetsCamera.Presets; + + PostStatusMessage(new + { + presets = presetList + }); + } + + protected override void CustomRegisterWithAppServer(MobileControlSystemController appServerController) + { + var asc = appServerController; + + + // Add press and holds using helper action + Action addPHAction = (s, u) => + AppServerController.AddAction(MessagePath + s, new PressAndHoldAction(b => EISC.SetBool(u, b))); + addPHAction("/cameraUp", BCameraControlUp + JoinStart); + addPHAction("/cameraDown", BCameraControlDown + JoinStart); + addPHAction("/cameraLeft", BCameraControlLeft + JoinStart); + addPHAction("/cameraRight", BCameraControlRight + JoinStart); + addPHAction("/cameraZoomIn", BCameraControlZoomIn + JoinStart); + addPHAction("/cameraZoomOut", BCameraControlZoomOut + JoinStart); + + Action addAction = (s, u) => + AppServerController.AddAction(MessagePath + s, new Action(() => EISC.PulseBool(u, 100))); + + addAction("/cameraModeAuto", BCameraModeAuto); + addAction("/cameraModeManual", BCameraModeManual); + addAction("/cameraModeOff", BCameraModeOff); + + // camera presets + for (uint i = 0; i < 6; i++) + { + addAction("/cameraPreset" + (i + 1), BCameraPresetStart + i); + } + + asc.AddAction(MessagePath + "/fullStatus", new Action(SendCameraFullMessageObject)); + + + } + + /// + /// Helper method to update the full status of the camera + /// + void SendCameraFullMessageObject() + { + var presetsCamera = Camera as IHasCameraPresets; + + var presetList = new List(); + + if (presetsCamera != null) + presetList = presetsCamera.Presets; + + PostStatusMessage(new + { + cameraMode = GetCameraMode(), + hasPresets = Camera is IHasCameraPresets, + presets = presetList + }); + } + + /// + /// + /// + void PostCameraMode() + { + PostStatusMessage(new + { + cameraMode = GetCameraMode() + }); + } + + /// + /// Computes the current camera mode + /// + /// + string GetCameraMode() + { + string m; + if (EISC.GetBool(BCameraModeAuto)) m = eCameraControlMode.Auto.ToString().ToLower(); + else if (EISC.GetBool(BCameraModeManual)) m = eCameraControlMode.Manual.ToString().ToLower(); + else m = eCameraControlMode.Off.ToString().ToLower(); + return m; + } + } +} \ No newline at end of file diff --git a/PepperDashEssentials/PepperDashEssentials.csproj b/PepperDashEssentials/PepperDashEssentials.csproj index 91f07c7d..fb77b945 100644 --- a/PepperDashEssentials/PepperDashEssentials.csproj +++ b/PepperDashEssentials/PepperDashEssentials.csproj @@ -115,6 +115,7 @@ + diff --git a/essentials-framework/Essentials Core/PepperDashEssentialsBase/Room/EssentialsRoomBase.cs b/essentials-framework/Essentials Core/PepperDashEssentialsBase/Room/EssentialsRoomBase.cs index e8193837..c5162ffc 100644 --- a/essentials-framework/Essentials Core/PepperDashEssentialsBase/Room/EssentialsRoomBase.cs +++ b/essentials-framework/Essentials Core/PepperDashEssentialsBase/Room/EssentialsRoomBase.cs @@ -172,6 +172,8 @@ namespace PepperDash.Essentials.Core RoomVacancyShutdownTimer.SecondsToCount = RoomVacancyShutdownPromptSeconds; else if (mode == eVacancyMode.InInitialVacancy) RoomVacancyShutdownTimer.SecondsToCount = RoomVacancyShutdownSeconds; + else if (mode == eVacancyMode.InShutdownWarning) + RoomVacancyShutdownTimer.SecondsToCount = 60; VacancyMode = mode; RoomVacancyShutdownTimer.Start();