using System; using System.Collections.Generic; using System.Linq; using System.Text; using Crestron.SimplSharp; using PepperDash.Essentials.Core; namespace PepperDash.Essentials.Devices.Common.Cameras { public enum eCameraControlMode { Manual = 0, Off, Auto } public interface IHasCameras { event EventHandler CameraSelected; List Cameras { get; } CameraBase SelectedCamera { get; } StringFeedback SelectedCameraFeedback { get; } void SelectCamera(string key); } /// /// Aggregates far end cameras with near end cameras /// public interface IHasCodecCameras : IHasCameras, IHasFarEndCameraControl { } /// /// To be implmented on codecs that can disable their camera(s) to blank the near end video /// public interface IHasCameraOff { BoolFeedback CameraIsOffFeedback { get; } void CameraOff(); } /// /// Describes the ability to mute and unmute camera video /// public interface IHasCameraMute { BoolFeedback CameraIsMutedFeedback { get; } void CameraMuteOn(); void CameraMuteOff(); void CameraMuteToggle(); } public interface IHasCameraMuteWithUnmuteReqeust : IHasCameraMute { event EventHandler VideoUnmuteRequested; } public class CameraSelectedEventArgs : EventArgs { public CameraBase SelectedCamera { get; private set; } public CameraSelectedEventArgs(CameraBase camera) { SelectedCamera = camera; } } public interface IHasFarEndCameraControl { CameraBase FarEndCamera { get; } BoolFeedback ControllingFarEndCameraFeedback { get; } } /// /// Used to decorate a camera as a far end /// public interface IAmFarEndCamera { } public interface IHasCameraControls { } /// /// Aggregates the pan, tilt and zoom interfaces /// public interface IHasCameraPtzControl : IHasCameraPanControl, IHasCameraTiltControl, IHasCameraZoomControl { /// /// Resets the camera position /// void PositionHome(); } /// /// Interface for camera pan control /// public interface IHasCameraPanControl : IHasCameraControls { void PanLeft(); void PanRight(); void PanStop(); } /// /// Interface for camera tilt control /// public interface IHasCameraTiltControl : IHasCameraControls { void TiltDown(); void TiltUp(); void TiltStop(); } /// /// Interface for camera zoom control /// public interface IHasCameraZoomControl : IHasCameraControls { void ZoomIn(); void ZoomOut(); void ZoomStop(); } /// /// Interface for camera focus control /// public interface IHasCameraFocusControl : IHasCameraControls { void FocusNear(); void FocusFar(); void FocusStop(); void TriggerAutoFocus(); } public interface IHasAutoFocusMode { void SetFocusModeAuto(); void SetFocusModeManual(); void ToggleFocusMode(); } public interface IHasCameraAutoMode : IHasCameraControls { void CameraAutoModeOn(); void CameraAutoModeOff(); void CameraAutoModeToggle(); BoolFeedback CameraAutoModeIsOnFeedback { get; } } }