Files
Essentials/essentials-framework/Essentials Devices Common/Essentials Devices Common/VideoCodec/ZoomRoom/ZoomRoomCamera.cs
Neil Dorin 22aea3089d #773 Adds some debug and sets the Capabilities value on ZoomRoomCamera
Also updates RunRouteAction in EssentialsHuddleVtc1Room to still call down in to main RunRouteAction method if called with a sourceListKey
2021-08-09 14:41:31 -06:00

226 lines
5.5 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Crestron.SimplSharp;
using Crestron.SimplSharpPro.DeviceSupport;
using PepperDash.Essentials.Core.Bridges;
using PepperDash.Essentials.Devices.Common.Cameras;
namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
{
public enum eZoomRoomCameraState
{
Start,
Continue,
Stop,
RequestRemote,
GiveupRemote,
RequestedByFarEnd
}
public enum eZoomRoomCameraAction
{
Left,
Right,
Up,
Down,
In,
Out
}
public class ZoomRoomCamera : CameraBase, IHasCameraPtzControl, IBridgeAdvanced
{
protected ZoomRoom ParentCodec { get; private set; }
public int Id = 0; // ID of near end selected camara is always 0
private int ContinueTime = 10; // number of milliseconds between issuing continue commands
private CTimer ContinueTimer;
eZoomRoomCameraAction LastAction;
private bool isPanning;
private bool isTilting;
private bool isZooming;
//private bool isFocusing;
private bool isMoving
{
get
{
return isPanning || isTilting || isZooming;
}
}
public ZoomRoomCamera(string key, string name, ZoomRoom codec)
: base(key, name)
{
ParentCodec = codec;
Capabilities = eCameraCapabilities.Pan | eCameraCapabilities.Tilt | eCameraCapabilities.Zoom;
}
/// <summary>
/// Builds the command and triggers the parent ZoomRoom to send it
/// </summary>
/// <param name="state"></param>
/// <param name="action"></param>
void SendCommand(eZoomRoomCameraState state, eZoomRoomCameraAction action)
{
LastAction = action;
ParentCodec.SendText(string.Format("zCommand Call CameraControl Id: {0} State: {1} Action: {2}", Id, state, action));
}
void StartContinueTimer()
{
if (ContinueTimer == null)
ContinueTimer = new CTimer((o) => SendContinueAction(LastAction), null, ContinueTime, ContinueTime);
}
void SendContinueAction(eZoomRoomCameraAction action)
{
SendCommand(eZoomRoomCameraState.Continue, action);
}
void StopContinueTimer()
{
if (ContinueTimer == null)
{
return;
}
ContinueTimer.Stop();
ContinueTimer.Dispose();
ContinueTimer = null;
}
#region IHasCameraPtzControl Members
public void PositionHome()
{
throw new NotImplementedException();
}
#endregion
#region IHasCameraPanControl Members
public void PanLeft()
{
if (isMoving)
{
return;
}
SendCommand(eZoomRoomCameraState.Start, eZoomRoomCameraAction.Left);
StartContinueTimer();
isPanning = true;
}
public void PanRight()
{
if (isMoving)
{
return;
}
SendCommand(eZoomRoomCameraState.Start, eZoomRoomCameraAction.Right);
StartContinueTimer();
isPanning = true;
}
public void PanStop()
{
StopContinueTimer();
SendCommand(eZoomRoomCameraState.Stop, LastAction);
isPanning = false;
}
#endregion
#region IHasCameraTiltControl Members
public void TiltDown()
{
if (!isMoving)
{
SendCommand(eZoomRoomCameraState.Start, eZoomRoomCameraAction.Down);
StartContinueTimer();
isTilting = true;
}
}
public void TiltUp()
{
if (!isMoving)
{
SendCommand(eZoomRoomCameraState.Start, eZoomRoomCameraAction.Up);
StartContinueTimer();
isTilting = true;
}
}
public void TiltStop()
{
StopContinueTimer();
SendCommand(eZoomRoomCameraState.Stop, LastAction);
isTilting = false;
}
#endregion
#region IHasCameraZoomControl Members
public void ZoomIn()
{
if (!isMoving)
{
SendCommand(eZoomRoomCameraState.Start, eZoomRoomCameraAction.In);
StartContinueTimer();
isZooming = true;
}
}
public void ZoomOut()
{
if (!isMoving)
{
SendCommand(eZoomRoomCameraState.Start, eZoomRoomCameraAction.Out);
StartContinueTimer();
isZooming = true;
}
}
public void ZoomStop()
{
StopContinueTimer();
SendCommand(eZoomRoomCameraState.Stop, LastAction);
isZooming = false;
}
#endregion
public void LinkToApi(BasicTriList trilist, uint joinStart, string joinMapKey, EiscApiAdvanced bridge)
{
LinkCameraToApi(this, trilist, joinStart, joinMapKey, bridge);
}
}
public class ZoomRoomFarEndCamera : ZoomRoomCamera, IAmFarEndCamera
{
public ZoomRoomFarEndCamera(string key, string name, ZoomRoom codec, int id)
: base(key, name, codec)
{
Id = id;
}
}
}