diff --git a/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IHasScreensWithLayouts.cs b/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IHasScreensWithLayouts.cs
new file mode 100644
index 00000000..439462c6
--- /dev/null
+++ b/src/PepperDash.Essentials.Core/DeviceTypeInterfaces/IHasScreensWithLayouts.cs
@@ -0,0 +1,107 @@
+using Newtonsoft.Json;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace PepperDash.Essentials.Core.DeviceTypeInterfaces
+{
+ ///
+ /// This defines a device that has screens with layouts
+ /// Simply decorative
+ ///
+ public interface IHasScreensWithLayouts
+ {
+ ///
+ /// A dictionary of screens, keyed by screen ID, that contains information about each screen and its layouts.
+ ///
+ Dictionary Screens { get; }
+
+ ///
+ /// Applies a specific layout to a screen based on the provided screen ID and layout index.
+ ///
+ ///
+ ///
+ void ApplyLayout(uint screenId, uint layoutIndex);
+ }
+
+ ///
+ /// Represents information about a screen and its layouts.
+ ///
+ public class ScreenInfo
+ {
+
+ ///
+ /// Indicates whether the screen is enabled or not.
+ ///
+ [JsonProperty("enabled")]
+ public bool Enabled { get; set; }
+
+ ///
+ /// The name of the screen.
+ ///
+ [JsonProperty("name")]
+ public string Name { get; set; }
+
+ ///
+ /// The index of the screen.
+ ///
+ [JsonProperty("screenIndex")]
+ public int ScreenIndex { get; set; }
+
+ ///
+ /// A dictionary of layout information for the screen, keyed by layout ID.
+ ///
+ [JsonProperty("layouts")]
+ public Dictionary Layouts { get; set; }
+ }
+
+ ///
+ /// Represents information about a layout on a screen.
+ ///
+ public class LayoutInfo
+ {
+ ///
+ /// The name of the layout.
+ ///
+ [JsonProperty("layoutName")]
+ public string LayoutName { get; set; }
+
+ ///
+ /// The index of the layout.
+ ///
+ [JsonProperty("layoutIndex")]
+ public int LayoutIndex { get; set; }
+
+ ///
+ /// The type of the layout, which can be "single", "double", "triple", or "quad".
+ ///
+ [JsonProperty("layoutType")]
+ public string LayoutType { get; set; }
+
+ ///
+ /// A dictionary of window configurations for the layout, keyed by window ID.
+ ///
+ [JsonProperty("windows")]
+ public Dictionary Windows { get; set; }
+ }
+
+ ///
+ /// Represents the configuration of a window within a layout on a screen.
+ ///
+ public class WindowConfig
+ {
+ ///
+ /// The display label for the window
+ ///
+ [JsonProperty("label")]
+ public string Label { get; set; }
+
+ ///
+ /// The input for the window
+ ///
+ [JsonProperty("input")]
+ public string Input { get; set; }
+ }
+}
diff --git a/src/PepperDash.Essentials.Devices.Common/Codec/Cisco/IPresenterTrack.cs b/src/PepperDash.Essentials.Devices.Common/Codec/Cisco/IPresenterTrack.cs
new file mode 100644
index 00000000..f3f164bd
--- /dev/null
+++ b/src/PepperDash.Essentials.Devices.Common/Codec/Cisco/IPresenterTrack.cs
@@ -0,0 +1,95 @@
+using PepperDash.Core;
+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.Codec.Cisco
+{
+ ///
+ /// Describes the available tracking modes for a Cisco codec's Presenter Track feature.
+ ///
+ public enum ePresenterTrackMode
+ {
+ ///
+ /// Presenter Track is turned off.
+ ///
+ Off,
+ ///
+ /// Presenter Track follows the speaker's movements.
+ ///
+ Follow,
+ ///
+ /// Presenter Track is set to background mode, where it tracks the speaker but does not actively follow.
+ ///
+ Background,
+ ///
+ /// Presenter Track is set to persistent mode, where it maintains a fixed position or focus on the speaker.
+ ///
+ Persistent
+ }
+
+
+ ///
+ /// Describes the Presenter Track controls for a Cisco codec.
+ ///
+ public interface IPresenterTrack : IKeyed
+ {
+ ///
+ ///
+ ///
+ bool PresenterTrackAvailability { get; }
+
+ ///
+ /// Feedback indicating whether Presenter Track is available.
+ ///
+ BoolFeedback PresenterTrackAvailableFeedback { get; }
+
+ ///
+ /// Feedback indicating the current status of Presenter Track is off
+ ///
+ BoolFeedback PresenterTrackStatusOffFeedback { get; }
+
+ ///
+ /// Feedback indicating the current status of Presenter Track is follow
+ ///
+ BoolFeedback PresenterTrackStatusFollowFeedback { get; }
+
+ ///
+ /// Feedback indicating the current status of Presenter Track is background
+ ///
+ BoolFeedback PresenterTrackStatusBackgroundFeedback { get; }
+
+ ///
+ /// Feedback indicating the current status of Presenter Track is persistent
+ ///
+ BoolFeedback PresenterTrackStatusPersistentFeedback { get; }
+
+ ///
+ /// Indicates the current status of Presenter Track.
+ ///
+ bool PresenterTrackStatus { get; }
+
+ ///
+ /// Turns off Presenter Track.
+ ///
+ void PresenterTrackOff();
+
+ ///
+ /// Turns on Presenter Track in follow mode.
+ ///
+ void PresenterTrackFollow();
+
+ ///
+ /// Turns on Presenter Track in background mode.
+ ///
+ void PresenterTrackBackground();
+
+ ///
+ /// Turns on Presenter Track in persistent mode.
+ ///
+ void PresenterTrackPersistent();
+ }
+}
diff --git a/src/PepperDash.Essentials.Devices.Common/Codec/Cisco/ISpeakerTrack.cs b/src/PepperDash.Essentials.Devices.Common/Codec/Cisco/ISpeakerTrack.cs
new file mode 100644
index 00000000..83735183
--- /dev/null
+++ b/src/PepperDash.Essentials.Devices.Common/Codec/Cisco/ISpeakerTrack.cs
@@ -0,0 +1,40 @@
+using PepperDash.Core;
+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.Codec.Cisco
+{
+ ///
+ /// Describes the available tracking modes for a Cisco codec
+ ///
+ public interface ISpeakerTrack : IKeyed
+ {
+ ///
+ /// Indicates whether Speaker Track is available on the codec.
+ ///
+ bool SpeakerTrackAvailability { get; }
+
+ ///
+ ///
+ ///
+ BoolFeedback SpeakerTrackAvailableFeedback { get; }
+
+ ///
+ /// Feedback indicating the current status of Speaker Track is off
+ ///
+ bool SpeakerTrackStatus { get; }
+
+ ///
+ /// Turns Speaker Track off
+ ///
+ void SpeakerTrackOff();
+ ///
+ /// Turns Speaker Track on
+ ///
+ void SpeakerTrackOn();
+ }
+}
diff --git a/src/PepperDash.Essentials.Devices.Common/VideoCodec/CiscoCodec/RoomPresets.cs b/src/PepperDash.Essentials.Devices.Common/VideoCodec/CiscoCodec/RoomPresets.cs
index 8fc8a1d0..a6531a40 100644
--- a/src/PepperDash.Essentials.Devices.Common/VideoCodec/CiscoCodec/RoomPresets.cs
+++ b/src/PepperDash.Essentials.Devices.Common/VideoCodec/CiscoCodec/RoomPresets.cs
@@ -12,20 +12,45 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec
///
public interface IHasCodecRoomPresets
{
+ ///
+ /// Event that is raised when the list of room presets has changed.
+ ///
event EventHandler CodecRoomPresetsListHasChanged;
+ ///
+ /// List of near end presets that can be recalled.
+ ///
List NearEndPresets { get; }
+ ///
+ /// List of far end presets that can be recalled.
+ ///
List FarEndRoomPresets { get; }
+ ///
+ /// Selects a near end preset by its ID.
+ ///
+ ///
void CodecRoomPresetSelect(int preset);
- void CodecRoomPresetStore(int preset, string description);
+ ///
+ /// Stores a near end preset with the given ID and description.
+ ///
+ ///
+ ///
+ void CodecRoomPresetStore(int preset, string description);
+ ///
+ /// Selects a far end preset by its ID. This is typically used to recall a preset that has been defined on the far end codec.
+ ///
+ ///
void SelectFarEndPreset(int preset);
}
- public static class RoomPresets
+ ///
+ /// Static class for converting non-generic RoomPresets to generic CameraPresets.
+ ///
+ public static class RoomPresets
{
///
/// Converts non-generic RoomPresets to generic CameraPresets
@@ -47,6 +72,13 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec
///
public class CodecRoomPreset : PresetBase
{
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
public CodecRoomPreset(int id, string description, bool def, bool isDef)
: base(id, description, def, isDef)
{