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) {