using System; using System.Collections.Generic; using System.Linq; using System.Text; using Crestron.SimplSharp; using PepperDash.Essentials.Devices.Common.Codec; using PepperDash.Core; using PepperDash.Essentials.Core; using PepperDash.Essentials.Core.DeviceTypeInterfaces; namespace PepperDash.Essentials.Devices.Common.DSP { public abstract class DspBase : EssentialsDevice, ILevelControls { public Dictionary LevelControlPoints { get; private set; } public Dictionary DialerControlPoints { get; private set; } public Dictionary SwitcherControlPoints { get; private set; } public DspBase(string key, string name) : base(key, name) { LevelControlPoints = new Dictionary(); DialerControlPoints = new Dictionary(); SwitcherControlPoints = new Dictionary(); } // in audio call feedback // VOIP // Phone dialer } // Fusion // Privacy state // Online state // level/mutes ? // AC Log call stats // Typical presets: // call default preset to restore levels and mutes public abstract class DspControlPoint :IKeyed { public string Key { get; } protected DspControlPoint(string key) => Key = key; } public abstract class DspLevelControlPoint :DspControlPoint, IBasicVolumeWithFeedback { public BoolFeedback MuteFeedback { get; } public IntFeedback VolumeLevelFeedback { get; } protected DspLevelControlPoint(string key, Func muteFeedbackFunc, Func volumeLevelFeedbackFunc) : base(key) { MuteFeedback = new BoolFeedback(muteFeedbackFunc); VolumeLevelFeedback = new IntFeedback(volumeLevelFeedbackFunc); } public abstract void MuteOff(); public abstract void MuteOn(); public abstract void MuteToggle(); public abstract void SetVolume(ushort level); public abstract void VolumeDown(bool pressRelease); public abstract void VolumeUp(bool pressRelease); } public abstract class DspDialerBase:DspControlPoint { protected DspDialerBase(string key) : base(key) { } } // Main program // VTC // ATC // Mics, unusual }