using System;
using System.Collections.Generic;
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 : 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;
}
}
}