diff --git a/src/PepperDash.Essentials.Devices.Common/Cameras/CameraControl.cs b/src/PepperDash.Essentials.Devices.Common/Cameras/CameraControl.cs
deleted file mode 100644
index cec2f58b..00000000
--- a/src/PepperDash.Essentials.Devices.Common/Cameras/CameraControl.cs
+++ /dev/null
@@ -1,326 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using Crestron.SimplSharp;
-using PepperDash.Core;
-using PepperDash.Essentials.Core;
-
-namespace PepperDash.Essentials.Devices.Common.Cameras
-{
- ///
- /// Enum for camera control modes
- ///
- public enum eCameraControlMode
- {
- ///
- /// Manual control mode, where the camera is controlled directly by the user or system
- ///
- Manual = 0,
- ///
- /// Off control mode, where the camera is turned off or disabled
- ///
- Off,
- ///
- /// Auto control mode, where the camera automatically adjusts settings based on the environment or conditions
- ///
- Auto
- }
-
-
- ///
- /// Interface for devices that have cameras
- ///
- public interface IHasCameras : IKeyName
- {
- ///
- /// Event that is raised when a camera is selected
- ///
- event EventHandler CameraSelected;
-
- ///
- /// List of cameras on the device. This should be a list of CameraBase objects
- ///
- List Cameras { get; }
-
- ///
- /// The currently selected camera. This should be a CameraBase object
- ///
- CameraBase SelectedCamera { get; }
-
- ///
- /// Feedback that indicates the currently selected camera
- ///
- StringFeedback SelectedCameraFeedback { get; }
-
- ///
- /// Selects a camera from the list of available cameras based on the provided key.
- ///
- /// The unique identifier or name of the camera to select.
- void SelectCamera(string key);
- }
-
- ///
- /// Defines the contract for IHasCodecCameras
- ///
- 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
- {
- ///
- /// Feedback that indicates whether the camera is off
- ///
- BoolFeedback CameraIsOffFeedback { get; }
-
- ///
- /// Turns the camera off, blanking the near end video
- ///
- void CameraOff();
- }
-
- ///
- /// Describes the ability to mute and unmute camera video
- ///
- public interface IHasCameraMute
- {
- ///
- /// Feedback that indicates whether the camera is muted
- ///
- BoolFeedback CameraIsMutedFeedback { get; }
-
- ///
- /// Mutes the camera video, preventing it from being sent to the far end
- ///
- void CameraMuteOn();
-
- ///
- /// Unmutes the camera video, allowing it to be sent to the far end
- ///
- void CameraMuteOff();
-
- ///
- /// Toggles the camera mute state. If the camera is muted, it will be unmuted, and vice versa.
- ///
- void CameraMuteToggle();
- }
-
- ///
- /// Interface for devices that can mute and unmute their camera video, with an event for unmute requests
- ///
- public interface IHasCameraMuteWithUnmuteReqeust : IHasCameraMute
- {
- ///
- /// Event that is raised when a video unmute is requested, typically by the far end
- ///
- event EventHandler VideoUnmuteRequested;
- }
-
- ///
- /// Event arguments for the CameraSelected event
- ///
- public class CameraSelectedEventArgs : EventArgs
- {
- ///
- /// Gets or sets the SelectedCamera
- ///
- public CameraBase SelectedCamera { get; private set; }
-
- ///
- /// Constructor for CameraSelectedEventArgs
- ///
- ///
- public CameraSelectedEventArgs(CameraBase camera)
- {
- SelectedCamera = camera;
- }
- }
-
- ///
- /// Interface for devices that have a far end camera control
- ///
- public interface IHasFarEndCameraControl
- {
- ///
- /// Gets the far end camera, which is typically a CameraBase object that represents the camera at the far end of a call
- ///
- CameraBase FarEndCamera { get; }
-
- ///
- /// Feedback that indicates whether the far end camera is being controlled
- ///
- BoolFeedback ControllingFarEndCameraFeedback { get; }
-
- }
-
- ///
- /// Defines the contract for IAmFarEndCamera
- ///
- public interface IAmFarEndCamera
- {
-
- }
-
- ///
- /// Interface for devices that have camera controls
- ///
- public interface IHasCameraControls
- {
- }
-
- ///
- /// Defines the contract for IHasCameraPtzControl
- ///
- public interface IHasCameraPtzControl : IHasCameraPanControl, IHasCameraTiltControl, IHasCameraZoomControl
- {
- ///
- /// Resets the camera position
- ///
- void PositionHome();
- }
-
- ///
- /// Interface for camera pan control
- ///
- public interface IHasCameraPanControl : IHasCameraControls
- {
- ///
- /// Pans the camera left
- ///
- void PanLeft();
-
- ///
- /// Pans the camera right
- ///
- void PanRight();
-
- ///
- /// Stops the camera pan movement
- ///
- void PanStop();
- }
-
- ///
- /// Defines the contract for IHasCameraTiltControl
- ///
- public interface IHasCameraTiltControl : IHasCameraControls
- {
- ///
- /// Tilts the camera down
- ///
- void TiltDown();
-
- ///
- /// Tilts the camera up
- ///
- void TiltUp();
-
- ///
- /// Stops the camera tilt movement
- ///
- void TiltStop();
- }
-
- ///
- /// Defines the contract for IHasCameraZoomControl
- ///
- public interface IHasCameraZoomControl : IHasCameraControls
- {
- ///
- /// Zooms the camera in
- ///
- void ZoomIn();
-
- ///
- /// Zooms the camera out
- ///
- void ZoomOut();
-
- ///
- /// Stops the camera zoom movement
- ///
- void ZoomStop();
- }
-
- ///
- /// Defines the contract for IHasCameraFocusControl
- ///
- public interface IHasCameraFocusControl : IHasCameraControls
- {
- ///
- /// Focuses the camera near
- ///
- void FocusNear();
-
- ///
- /// Focuses the camera far
- ///
- void FocusFar();
-
- ///
- /// Stops the camera focus movement
- ///
- void FocusStop();
-
- ///
- /// Triggers the camera's auto focus functionality, if available.
- ///
- void TriggerAutoFocus();
- }
-
- ///
- /// Interface for devices that have auto focus mode control
- ///
- public interface IHasAutoFocusMode
- {
- ///
- /// Sets the focus mode to auto or manual, or toggles between them.
- ///
- void SetFocusModeAuto();
-
- ///
- /// Sets the focus mode to manual, allowing for manual focus adjustments.
- ///
- void SetFocusModeManual();
-
- ///
- /// Toggles the focus mode between auto and manual.
- ///
- void ToggleFocusMode();
- }
-
- ///
- /// Interface for devices that have camera auto mode control
- ///
- public interface IHasCameraAutoMode : IHasCameraControls
- {
- ///
- /// Enables or disables the camera's auto mode, which may include automatic adjustments for focus, exposure, and other settings.
- ///
- void CameraAutoModeOn();
-
- ///
- /// Disables the camera's auto mode, allowing for manual control of camera settings.
- ///
- void CameraAutoModeOff();
-
- ///
- /// Toggles the camera's auto mode state. If the camera is in auto mode, it will switch to manual mode, and vice versa.
- ///
- void CameraAutoModeToggle();
-
- ///
- /// Feedback that indicates whether the camera's auto mode is currently enabled.
- ///
- BoolFeedback CameraAutoModeIsOnFeedback { get; }
- }
-
-
-
-
-}
\ No newline at end of file
diff --git a/src/PepperDash.Essentials.Devices.Common/Cameras/Interfaces/CameraSelectedEventArgs.cs b/src/PepperDash.Essentials.Devices.Common/Cameras/Interfaces/CameraSelectedEventArgs.cs
new file mode 100644
index 00000000..bb2a85a2
--- /dev/null
+++ b/src/PepperDash.Essentials.Devices.Common/Cameras/Interfaces/CameraSelectedEventArgs.cs
@@ -0,0 +1,49 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace PepperDash.Essentials.Devices.Common.Cameras
+{
+ ///
+ /// Event arguments for the CameraSelected event
+ ///
+ [Obsolete("Use CameraSelectedEventArgs instead. This class will be removed in a future version")]
+ public class CameraSelectedEventArgs : EventArgs
+ {
+ /// Gets or sets the SelectedCamera
+ ///
+ public CameraBase SelectedCamera { get; private set; }
+
+ ///
+ /// Constructor for CameraSelectedEventArgs
+ ///
+ ///
+ public CameraSelectedEventArgs(CameraBase camera)
+ {
+ SelectedCamera = camera;
+ }
+ }
+
+ ///
+ /// Event arguments for the CameraSelected event
+ ///
+ ///
+ public class CameraSelectedEventArgs : EventArgs
+ {
+ ///
+ /// Gets or sets the SelectedCamera
+ ///
+ public T SelectedCamera { get; private set; }
+
+ ///
+ /// Constructor for CameraSelectedEventArgs
+ ///
+ ///
+ public CameraSelectedEventArgs(T camera)
+ {
+ SelectedCamera = camera;
+ }
+ }
+}
diff --git a/src/PepperDash.Essentials.Devices.Common/Cameras/Interfaces/IAmFarEndCamera.cs b/src/PepperDash.Essentials.Devices.Common/Cameras/Interfaces/IAmFarEndCamera.cs
new file mode 100644
index 00000000..a8e96664
--- /dev/null
+++ b/src/PepperDash.Essentials.Devices.Common/Cameras/Interfaces/IAmFarEndCamera.cs
@@ -0,0 +1,12 @@
+using PepperDash.Core;
+
+namespace PepperDash.Essentials.Devices.Common.Cameras
+{
+ ///
+ /// Defines the contract for IAmFarEndCamera
+ ///
+ public interface IAmFarEndCamera : IKeyName
+ {
+
+ }
+}
diff --git a/src/PepperDash.Essentials.Devices.Common/Cameras/Interfaces/IHasAutoFocusMode.cs b/src/PepperDash.Essentials.Devices.Common/Cameras/Interfaces/IHasAutoFocusMode.cs
new file mode 100644
index 00000000..0dbd5f52
--- /dev/null
+++ b/src/PepperDash.Essentials.Devices.Common/Cameras/Interfaces/IHasAutoFocusMode.cs
@@ -0,0 +1,24 @@
+
+namespace PepperDash.Essentials.Devices.Common.Cameras
+{
+ ///
+ /// Interface for devices that have auto focus mode control
+ ///
+ public interface IHasAutoFocusMode : IHasCameraControls
+ {
+ ///
+ /// Sets the focus mode to auto or manual, or toggles between them.
+ ///
+ void SetFocusModeAuto();
+
+ ///
+ /// Sets the focus mode to manual, allowing for manual focus adjustments.
+ ///
+ void SetFocusModeManual();
+
+ ///
+ /// Toggles the focus mode between auto and manual.
+ ///
+ void ToggleFocusMode();
+ }
+}
diff --git a/src/PepperDash.Essentials.Devices.Common/Cameras/Interfaces/IHasCameraAutoMode.cs b/src/PepperDash.Essentials.Devices.Common/Cameras/Interfaces/IHasCameraAutoMode.cs
new file mode 100644
index 00000000..9eeb1f40
--- /dev/null
+++ b/src/PepperDash.Essentials.Devices.Common/Cameras/Interfaces/IHasCameraAutoMode.cs
@@ -0,0 +1,31 @@
+using PepperDash.Essentials.Core;
+
+namespace PepperDash.Essentials.Devices.Common.Cameras
+{
+
+ ///
+ /// Interface for devices that have camera auto mode control
+ ///
+ public interface IHasCameraAutoMode : IHasCameraControls
+ {
+ ///
+ /// Enables or disables the camera's auto mode, which may include automatic adjustments for focus, exposure, and other settings.
+ ///
+ void CameraAutoModeOn();
+
+ ///
+ /// Disables the camera's auto mode, allowing for manual control of camera settings.
+ ///
+ void CameraAutoModeOff();
+
+ ///
+ /// Toggles the camera's auto mode state. If the camera is in auto mode, it will switch to manual mode, and vice versa.
+ ///
+ void CameraAutoModeToggle();
+
+ ///
+ /// Feedback that indicates whether the camera's auto mode is currently enabled.
+ ///
+ BoolFeedback CameraAutoModeIsOnFeedback { get; }
+ }
+}
diff --git a/src/PepperDash.Essentials.Devices.Common/Cameras/Interfaces/IHasCameraControls.cs b/src/PepperDash.Essentials.Devices.Common/Cameras/Interfaces/IHasCameraControls.cs
new file mode 100644
index 00000000..a4ed5937
--- /dev/null
+++ b/src/PepperDash.Essentials.Devices.Common/Cameras/Interfaces/IHasCameraControls.cs
@@ -0,0 +1,13 @@
+using PepperDash.Core;
+
+
+namespace PepperDash.Essentials.Devices.Common.Cameras
+{
+
+ ///
+ /// Interface for devices that have camera controls
+ ///
+ public interface IHasCameraControls : IKeyName
+ {
+ }
+}
diff --git a/src/PepperDash.Essentials.Devices.Common/Cameras/Interfaces/IHasCameraFocusControl.cs b/src/PepperDash.Essentials.Devices.Common/Cameras/Interfaces/IHasCameraFocusControl.cs
new file mode 100644
index 00000000..bf266d56
--- /dev/null
+++ b/src/PepperDash.Essentials.Devices.Common/Cameras/Interfaces/IHasCameraFocusControl.cs
@@ -0,0 +1,29 @@
+
+namespace PepperDash.Essentials.Devices.Common.Cameras
+{
+ ///
+ /// Defines the contract for IHasCameraFocusControl
+ ///
+ public interface IHasCameraFocusControl : IHasCameraControls
+ {
+ ///
+ /// Focuses the camera near
+ ///
+ void FocusNear();
+
+ ///
+ /// Focuses the camera far
+ ///
+ void FocusFar();
+
+ ///
+ /// Stops the camera focus movement
+ ///
+ void FocusStop();
+
+ ///
+ /// Triggers the camera's auto focus functionality, if available.
+ ///
+ void TriggerAutoFocus();
+ }
+}
diff --git a/src/PepperDash.Essentials.Devices.Common/Cameras/Interfaces/IHasCameraMute.cs b/src/PepperDash.Essentials.Devices.Common/Cameras/Interfaces/IHasCameraMute.cs
new file mode 100644
index 00000000..cae6f5ef
--- /dev/null
+++ b/src/PepperDash.Essentials.Devices.Common/Cameras/Interfaces/IHasCameraMute.cs
@@ -0,0 +1,31 @@
+using PepperDash.Core;
+using PepperDash.Essentials.Core;
+
+namespace PepperDash.Essentials.Devices.Common.Cameras
+{
+ ///
+ /// Describes the ability to mute and unmute camera video
+ ///
+ public interface IHasCameraMute : IKeyName
+ {
+ ///
+ /// Feedback that indicates whether the camera is muted
+ ///
+ BoolFeedback CameraIsMutedFeedback { get; }
+
+ ///
+ /// Mutes the camera video, preventing it from being sent to the far end
+ ///
+ void CameraMuteOn();
+
+ ///
+ /// Unmutes the camera video, allowing it to be sent to the far end
+ ///
+ void CameraMuteOff();
+
+ ///
+ /// Toggles the camera mute state. If the camera is muted, it will be unmuted, and vice versa.
+ ///
+ void CameraMuteToggle();
+ }
+}
diff --git a/src/PepperDash.Essentials.Devices.Common/Cameras/Interfaces/IHasCameraMuteWithUnmuteRequest.cs b/src/PepperDash.Essentials.Devices.Common/Cameras/Interfaces/IHasCameraMuteWithUnmuteRequest.cs
new file mode 100644
index 00000000..5426ea2b
--- /dev/null
+++ b/src/PepperDash.Essentials.Devices.Common/Cameras/Interfaces/IHasCameraMuteWithUnmuteRequest.cs
@@ -0,0 +1,16 @@
+using System;
+
+
+namespace PepperDash.Essentials.Devices.Common.Cameras
+{
+ ///
+ /// Interface for devices that can mute and unmute their camera video, with an event for unmute requests
+ ///
+ public interface IHasCameraMuteWithUnmuteReqeust : IHasCameraMute
+ {
+ ///
+ /// Event that is raised when a video unmute is requested, typically by the far end
+ ///
+ event EventHandler VideoUnmuteRequested;
+ }
+}
diff --git a/src/PepperDash.Essentials.Devices.Common/Cameras/Interfaces/IHasCameraOff.cs b/src/PepperDash.Essentials.Devices.Common/Cameras/Interfaces/IHasCameraOff.cs
new file mode 100644
index 00000000..6dc451c1
--- /dev/null
+++ b/src/PepperDash.Essentials.Devices.Common/Cameras/Interfaces/IHasCameraOff.cs
@@ -0,0 +1,27 @@
+using PepperDash.Essentials.Core;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace PepperDash.Essentials.Devices.Common.Cameras
+{
+
+
+ ///
+ /// To be implmented on codecs that can disable their camera(s) to blank the near end video
+ ///
+ public interface IHasCameraOff : IHasCameraControls
+ {
+ ///
+ /// Feedback that indicates whether the camera is off
+ ///
+ BoolFeedback CameraIsOffFeedback { get; }
+
+ ///
+ /// Turns the camera off, blanking the near end video
+ ///
+ void CameraOff();
+ }
+}
diff --git a/src/PepperDash.Essentials.Devices.Common/Cameras/Interfaces/IHasCameraPanControl.cs b/src/PepperDash.Essentials.Devices.Common/Cameras/Interfaces/IHasCameraPanControl.cs
new file mode 100644
index 00000000..507dc555
--- /dev/null
+++ b/src/PepperDash.Essentials.Devices.Common/Cameras/Interfaces/IHasCameraPanControl.cs
@@ -0,0 +1,24 @@
+
+namespace PepperDash.Essentials.Devices.Common.Cameras
+{
+ ///
+ /// Interface for camera pan control
+ ///
+ public interface IHasCameraPanControl : IHasCameraControls
+ {
+ ///
+ /// Pans the camera left
+ ///
+ void PanLeft();
+
+ ///
+ /// Pans the camera right
+ ///
+ void PanRight();
+
+ ///
+ /// Stops the camera pan movement
+ ///
+ void PanStop();
+ }
+}
diff --git a/src/PepperDash.Essentials.Devices.Common/Cameras/Interfaces/IHasCameraPtzControl.cs b/src/PepperDash.Essentials.Devices.Common/Cameras/Interfaces/IHasCameraPtzControl.cs
new file mode 100644
index 00000000..de2b52dd
--- /dev/null
+++ b/src/PepperDash.Essentials.Devices.Common/Cameras/Interfaces/IHasCameraPtzControl.cs
@@ -0,0 +1,14 @@
+
+namespace PepperDash.Essentials.Devices.Common.Cameras
+{
+ ///
+ /// Defines the contract for IHasCameraPtzControl
+ ///
+ public interface IHasCameraPtzControl : IHasCameraPanControl, IHasCameraTiltControl, IHasCameraZoomControl
+ {
+ ///
+ /// Resets the camera position
+ ///
+ void PositionHome();
+ }
+}
diff --git a/src/PepperDash.Essentials.Devices.Common/Cameras/Interfaces/IHasCameraTiltControl.cs b/src/PepperDash.Essentials.Devices.Common/Cameras/Interfaces/IHasCameraTiltControl.cs
new file mode 100644
index 00000000..87dc1751
--- /dev/null
+++ b/src/PepperDash.Essentials.Devices.Common/Cameras/Interfaces/IHasCameraTiltControl.cs
@@ -0,0 +1,24 @@
+
+namespace PepperDash.Essentials.Devices.Common.Cameras
+{
+ ///
+ /// Defines the contract for IHasCameraTiltControl
+ ///
+ public interface IHasCameraTiltControl : IHasCameraControls
+ {
+ ///
+ /// Tilts the camera down
+ ///
+ void TiltDown();
+
+ ///
+ /// Tilts the camera up
+ ///
+ void TiltUp();
+
+ ///
+ /// Stops the camera tilt movement
+ ///
+ void TiltStop();
+ }
+}
diff --git a/src/PepperDash.Essentials.Devices.Common/Cameras/Interfaces/IHasCameraZoomControl.cs b/src/PepperDash.Essentials.Devices.Common/Cameras/Interfaces/IHasCameraZoomControl.cs
new file mode 100644
index 00000000..72bf16c4
--- /dev/null
+++ b/src/PepperDash.Essentials.Devices.Common/Cameras/Interfaces/IHasCameraZoomControl.cs
@@ -0,0 +1,24 @@
+
+namespace PepperDash.Essentials.Devices.Common.Cameras
+{
+ ///
+ /// Defines the contract for IHasCameraZoomControl
+ ///
+ public interface IHasCameraZoomControl : IHasCameraControls
+ {
+ ///
+ /// Zooms the camera in
+ ///
+ void ZoomIn();
+
+ ///
+ /// Zooms the camera out
+ ///
+ void ZoomOut();
+
+ ///
+ /// Stops the camera zoom movement
+ ///
+ void ZoomStop();
+ }
+}
diff --git a/src/PepperDash.Essentials.Devices.Common/Cameras/Interfaces/IHasCameras.cs b/src/PepperDash.Essentials.Devices.Common/Cameras/Interfaces/IHasCameras.cs
new file mode 100644
index 00000000..f242f4f4
--- /dev/null
+++ b/src/PepperDash.Essentials.Devices.Common/Cameras/Interfaces/IHasCameras.cs
@@ -0,0 +1,40 @@
+using PepperDash.Core;
+using PepperDash.Essentials.Core;
+using System;
+using System.Collections.Generic;
+
+namespace PepperDash.Essentials.Devices.Common.Cameras
+{
+ ///
+ /// Interface for devices that have cameras
+ ///
+ [Obsolete("Use IHasCamerasWithControls instead. This interface will be removed in a future version")]
+ public interface IHasCameras : IKeyName
+ {
+ ///
+ /// Event that is raised when a camera is selected
+ ///
+ event EventHandler CameraSelected;
+
+ ///
+ /// List of cameras on the device. This should be a list of CameraBase objects
+ ///
+ List Cameras { get; }
+
+ ///
+ /// The currently selected camera. This should be a CameraBase object
+ ///
+ CameraBase SelectedCamera { get; }
+
+ ///
+ /// Feedback that indicates the currently selected camera
+ ///
+ StringFeedback SelectedCameraFeedback { get; }
+
+ ///
+ /// Selects a camera from the list of available cameras based on the provided key.
+ ///
+ /// The unique identifier or name of the camera to select.
+ void SelectCamera(string key);
+ }
+}
diff --git a/src/PepperDash.Essentials.Devices.Common/Cameras/Interfaces/IHasCamerasWithControls.cs b/src/PepperDash.Essentials.Devices.Common/Cameras/Interfaces/IHasCamerasWithControls.cs
new file mode 100644
index 00000000..a842364d
--- /dev/null
+++ b/src/PepperDash.Essentials.Devices.Common/Cameras/Interfaces/IHasCamerasWithControls.cs
@@ -0,0 +1,39 @@
+using PepperDash.Core;
+using PepperDash.Essentials.Core;
+using System;
+using System.Collections.Generic;
+
+namespace PepperDash.Essentials.Devices.Common.Cameras
+{
+ ///
+ /// Interface for devices that have cameras with controls
+ ///
+ public interface IHasCamerasWithControls : IKeyName, IKeyed
+ {
+ ///
+ /// List of cameras on the device. This should be a list of IHasCameraControls objects
+ ///
+ List Cameras { get; }
+
+ ///
+ /// The currently selected camera. This should be an IHasCameraControls object
+ ///
+ IHasCameraControls SelectedCamera { get; }
+
+ ///
+ /// Feedback that indicates the currently selected camera
+ ///
+ StringFeedback SelectedCameraFeedback { get; }
+
+ ///
+ /// Event that is raised when a camera is selected
+ ///
+ event EventHandler> CameraSelected;
+
+ ///
+ /// Selects a camera from the list of available cameras based on the provided key.
+ ///
+ ///
+ void SelectCamera(string key);
+ }
+}
diff --git a/src/PepperDash.Essentials.Devices.Common/Cameras/Interfaces/IHasCodecCameras.cs b/src/PepperDash.Essentials.Devices.Common/Cameras/Interfaces/IHasCodecCameras.cs
new file mode 100644
index 00000000..01cdf24e
--- /dev/null
+++ b/src/PepperDash.Essentials.Devices.Common/Cameras/Interfaces/IHasCodecCameras.cs
@@ -0,0 +1,13 @@
+
+namespace PepperDash.Essentials.Devices.Common.Cameras
+{
+
+ ///
+ /// Defines the contract for IHasCodecCameras
+ ///
+ public interface IHasCodecCameras : IHasCameras, IHasFarEndCameraControl
+ {
+
+ }
+
+}
diff --git a/src/PepperDash.Essentials.Devices.Common/Cameras/Interfaces/IHasFarEndCameraControl.cs b/src/PepperDash.Essentials.Devices.Common/Cameras/Interfaces/IHasFarEndCameraControl.cs
new file mode 100644
index 00000000..10a4ba69
--- /dev/null
+++ b/src/PepperDash.Essentials.Devices.Common/Cameras/Interfaces/IHasFarEndCameraControl.cs
@@ -0,0 +1,23 @@
+using PepperDash.Core;
+using PepperDash.Essentials.Core;
+
+
+namespace PepperDash.Essentials.Devices.Common.Cameras
+{
+ ///
+ /// Interface for devices that have a far end camera control
+ ///
+ public interface IHasFarEndCameraControl : IKeyName
+ {
+ ///
+ /// Gets the far end camera, which is typically a CameraBase object that represents the camera at the far end of a call
+ ///
+ CameraBase FarEndCamera { get; }
+
+ ///
+ /// Feedback that indicates whether the far end camera is being controlled
+ ///
+ BoolFeedback ControllingFarEndCameraFeedback { get; }
+
+ }
+}
diff --git a/src/PepperDash.Essentials.Devices.Common/Cameras/Interfaces/eCameraControlMode.cs b/src/PepperDash.Essentials.Devices.Common/Cameras/Interfaces/eCameraControlMode.cs
new file mode 100644
index 00000000..c966ac41
--- /dev/null
+++ b/src/PepperDash.Essentials.Devices.Common/Cameras/Interfaces/eCameraControlMode.cs
@@ -0,0 +1,24 @@
+
+
+namespace PepperDash.Essentials.Devices.Common.Cameras
+{
+ ///
+ /// Enum for camera control modes
+ ///
+ public enum eCameraControlMode
+ {
+ ///
+ /// Manual control mode, where the camera is controlled directly by the user or system
+ ///
+ Manual = 0,
+ ///
+ /// Off control mode, where the camera is turned off or disabled
+ ///
+ Off,
+ ///
+ /// Auto control mode, where the camera automatically adjusts settings based on the environment or conditions
+ ///
+ Auto
+ }
+
+}