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();