Progress on CameraBaseMessenger

This commit is contained in:
Neil Dorin
2019-12-01 20:50:55 -07:00
parent b07e85c4e7
commit 0ed613de73
4 changed files with 102 additions and 4 deletions

View File

@@ -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
{
/// <summary>
/// Device being bridged
/// </summary>
public CameraBase Camera { get; set; }
/// <summary>
/// Constructor
/// </summary>
/// <param name="key"></param>
/// <param name="camera"></param>
/// <param name="messagePath"></param>
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<EventArgs>(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));
}
}
/// <summary>
/// Helper method to update the full status of the camera
/// </summary>
void SendCameraFullMessageObject()
{
var presetsCamera = Camera as IHasCameraPresets;
var presets = new List<CameraPreset>();
if (presetsCamera != null)
presets = presetsCamera.Presets;
var info = new
{
cameraMode = GetCameraMode(),
hasPresets = Camera as IHasCameraPresets,
presets = presets
};
}
/// <summary>
/// Computes the current camera mode
/// </summary>
/// <returns></returns>
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;
}
}
}

View File

@@ -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;
}

View File

@@ -87,6 +87,7 @@ namespace PepperDash.Essentials.Devices.Common.Cameras
}
}
public class CameraPropertiesConfig
{
public CommunicationMonitorConfig CommunicationMonitorProperties { get; set; }

View File

@@ -88,6 +88,8 @@ namespace PepperDash.Essentials.Devices.Common.Cameras
/// </summary>
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
/// </summary>
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
/// </summary>
public interface IHasCameraZoomControl
{
// void ZoomIn(bool pressRelease);
// void ZoomOut(bool pressRelease);
void ZoomIn();
void ZoomOut();
void ZoomStop();