diff --git a/PepperDashEssentials/AppServer/Messengers/CameraBaseMessenger.cs b/PepperDashEssentials/AppServer/Messengers/CameraBaseMessenger.cs index fbf1caf2..338bc86b 100644 --- a/PepperDashEssentials/AppServer/Messengers/CameraBaseMessenger.cs +++ b/PepperDashEssentials/AppServer/Messengers/CameraBaseMessenger.cs @@ -4,9 +4,99 @@ using System.Linq; using System.Text; using Crestron.SimplSharp; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; + +using PepperDash.Core; +using PepperDash.Essentials.Core; +using PepperDash.Essentials.Devices.Common.Cameras; + namespace PepperDash.Essentials.AppServer.Messengers { - public class CameraBaseMessenger + public class CameraBaseMessenger : MessengerBase { + /// + /// Device being bridged + /// + public CameraBase Camera { get; set; } + + /// + /// Constructor + /// + /// + /// + /// + public CameraBaseMessenger(string key, CameraBase camera, string messagePath) + : base(key, messagePath) + { + if (camera == null) + throw new ArgumentNullException("camera"); + + Camera = camera; + + var presetsCamera = Camera as IHasCameraPresets; + + if (presetsCamera != null) + { + presetsCamera.PresetsListHasChanged += new EventHandler(presetsCamera_PresetsListHasChanged); + } + + } + + void presetsCamera_PresetsListHasChanged(object sender, EventArgs e) + { + SendCameraFullMessageObject(); + } + + protected override void CustomRegisterWithAppServer(MobileControlSystemController appServerController) + { + appServerController.AddAction(MessagePath + "/fullStatus", new Action(SendCameraFullMessageObject)); + + var ptzCamera = Camera as IHasCameraPtzControl; + + if (ptzCamera != null) + { + // Need to evaluate how to pass through these P&H actions. Need a method that takes a bool maybe? + AppServerController.AddAction(MessagePath + "/cameraUp", new PressAndHoldAction(ptzCamera.TiltUp)); + + } + + } + + /// + /// Helper method to update the full status of the camera + /// + void SendCameraFullMessageObject() + { + var presetsCamera = Camera as IHasCameraPresets; + + var presets = new List(); + + if (presetsCamera != null) + presets = presetsCamera.Presets; + + var info = new + { + cameraMode = GetCameraMode(), + hasPresets = Camera as IHasCameraPresets, + presets = presets + }; + } + + /// + /// Computes the current camera mode + /// + /// + string GetCameraMode() + { + string m; + if (Camera is IHasCameraAutoMode && (Camera as IHasCameraAutoMode).CameraAutoModeIsOnFeedback.BoolValue) + m = eCameraControlMode.Auto.ToString().ToLower(); + else if (Camera is IPower && !(Camera as IPower).PowerIsOnFeedback.BoolValue) + m = eCameraControlMode.Off.ToString().ToLower(); + else + m = eCameraControlMode.Manual.ToString().ToLower(); + return m; + } } } \ No newline at end of file diff --git a/PepperDashEssentials/AppServer/Messengers/Ddvc01VtcMessenger.cs b/PepperDashEssentials/AppServer/Messengers/Ddvc01VtcMessenger.cs index e3de11d0..b7dfa22c 100644 --- a/PepperDashEssentials/AppServer/Messengers/Ddvc01VtcMessenger.cs +++ b/PepperDashEssentials/AppServer/Messengers/Ddvc01VtcMessenger.cs @@ -9,6 +9,7 @@ using Crestron.SimplSharpPro.EthernetCommunication; using PepperDash.Core; using PepperDash.Essentials.Core; using PepperDash.Essentials.Devices.Common.Codec; +using PepperDash.Essentials.Devices.Common.Cameras; namespace PepperDash.Essentials.AppServer.Messengers { @@ -557,9 +558,9 @@ namespace PepperDash.Essentials.AppServer.Messengers string GetCameraMode() { string m; - if (EISC.GetBool(BCameraModeAuto)) m = "auto"; - else if (EISC.GetBool(BCameraModeManual)) m = "manual"; - else m = "off"; + 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; } 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 079338e1..1bc53945 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 @@ -87,6 +87,7 @@ namespace PepperDash.Essentials.Devices.Common.Cameras } } + public class CameraPropertiesConfig { public CommunicationMonitorConfig CommunicationMonitorProperties { get; set; } diff --git a/essentials-framework/Essentials Devices Common/Essentials Devices Common/Cameras/CameraControl.cs b/essentials-framework/Essentials Devices Common/Essentials Devices Common/Cameras/CameraControl.cs index 43788336..36142bdd 100644 --- a/essentials-framework/Essentials Devices Common/Essentials Devices Common/Cameras/CameraControl.cs +++ b/essentials-framework/Essentials Devices Common/Essentials Devices Common/Cameras/CameraControl.cs @@ -88,6 +88,8 @@ namespace PepperDash.Essentials.Devices.Common.Cameras /// public interface IHasCameraPanControl { + // void PanLeft(bool pressRelease); + // void PanRight(bool pressRelease); void PanLeft(); void PanRight(); void PanStop(); @@ -98,6 +100,8 @@ namespace PepperDash.Essentials.Devices.Common.Cameras /// public interface IHasCameraTiltControl { + // void TiltDown(bool pressRelease); + // void TildUp(bool pressRelease); void TiltDown(); void TiltUp(); void TiltStop(); @@ -108,6 +112,8 @@ namespace PepperDash.Essentials.Devices.Common.Cameras /// public interface IHasCameraZoomControl { + // void ZoomIn(bool pressRelease); + // void ZoomOut(bool pressRelease); void ZoomIn(); void ZoomOut(); void ZoomStop();