From f80aa956490d673ac8554f46ea0e633a2ec9c787 Mon Sep 17 00:00:00 2001 From: Neil Dorin Date: Wed, 6 May 2026 17:13:02 -0600 Subject: [PATCH] Refactor audio codec and display messaging interfaces - Introduced IDialerCallStatus interface to streamline call status handling in audio codecs. - Updated AudioCodecBase to implement IDialerCallStatus, providing a common structure for call status events. - Added IDisplayCurrentInput interface for display devices to expose current input information. - Created corresponding messenger classes for IDialerCallStatus and IDisplayCurrentInput to facilitate communication. - Implemented CameraControlMessenger for camera devices to manage camera controls and presets. - Added IWarmingCoolingMessenger for warming and cooling devices to handle status updates. - Updated MessengerFactoryRegistry to register new messenger classes and ensure proper device messaging. - Cleaned up CameraBase and removed unnecessary comments and whitespace in various files. Co-authored-by: Copilot --- .../AudioCodec/AudioCodecBase.cs | 24 +++++- .../Interfaces/IDialerCallStatus.cs | 20 +++++ .../Cameras/CameraBase.cs | 4 +- .../Interfaces/IDisplayCurrentInput.cs | 14 +++ ... => IRoutingSinkWithSwitchingMessenger.cs} | 0 ...Messenger.cs => CameraControlMessenger.cs} | 4 +- ...enger.cs => IDialerCallStatusMessenger.cs} | 11 +-- ...er.cs => IDisplayCurrentInputMessenger.cs} | 41 +++------ ...ssenger.cs => ILightingScenesMessenger.cs} | 0 ...nger.cs => IRoomEventScheduleMessenger.cs} | 6 +- ...er.cs => IShadesOpenCloseStopMessenger.cs} | 0 ...nger.cs => ITvPresetsProviderMessenger.cs} | 8 +- .../Messengers/IWarmingCoolingMessenger.cs | 86 +++++++++++++++++++ .../MessengerFactoryRegistry.cs | 27 +++--- 14 files changed, 185 insertions(+), 60 deletions(-) create mode 100644 src/PepperDash.Essentials.Devices.Common/AudioCodec/Interfaces/IDialerCallStatus.cs create mode 100644 src/PepperDash.Essentials.Devices.Common/Displays/Interfaces/IDisplayCurrentInput.cs rename src/PepperDash.Essentials.MobileControl.Messengers/DeviceTypeExtensions/{DisplayBaseMessenger.cs => IRoutingSinkWithSwitchingMessenger.cs} (100%) rename src/PepperDash.Essentials.MobileControl.Messengers/Messengers/{CameraBaseMessenger.cs => CameraControlMessenger.cs} (98%) rename src/PepperDash.Essentials.MobileControl.Messengers/Messengers/{AudioCodecBaseMessenger.cs => IDialerCallStatusMessenger.cs} (90%) rename src/PepperDash.Essentials.MobileControl.Messengers/Messengers/{TwoWayDisplayBaseMessenger.cs => IDisplayCurrentInputMessenger.cs} (57%) rename src/PepperDash.Essentials.MobileControl.Messengers/Messengers/{LightingBaseMessenger.cs => ILightingScenesMessenger.cs} (100%) rename src/PepperDash.Essentials.MobileControl.Messengers/Messengers/{RoomEventScheduleMessenger.cs => IRoomEventScheduleMessenger.cs} (90%) rename src/PepperDash.Essentials.MobileControl.Messengers/Messengers/{ShadeBaseMessenger.cs => IShadesOpenCloseStopMessenger.cs} (100%) rename src/PepperDash.Essentials.MobileControl.Messengers/Messengers/{DevicePresetsModelMessenger.cs => ITvPresetsProviderMessenger.cs} (93%) create mode 100644 src/PepperDash.Essentials.MobileControl.Messengers/Messengers/IWarmingCoolingMessenger.cs diff --git a/src/PepperDash.Essentials.Devices.Common/AudioCodec/AudioCodecBase.cs b/src/PepperDash.Essentials.Devices.Common/AudioCodec/AudioCodecBase.cs index dc0f98a6..5c0f3885 100644 --- a/src/PepperDash.Essentials.Devices.Common/AudioCodec/AudioCodecBase.cs +++ b/src/PepperDash.Essentials.Devices.Common/AudioCodec/AudioCodecBase.cs @@ -6,11 +6,19 @@ using PepperDash.Essentials.Devices.Common.Codec; namespace PepperDash.Essentials.Devices.Common.AudioCodec; -public abstract class AudioCodecBase : EssentialsDevice, IHasDialer, IUsageTracking, IAudioCodecInfo +/// +/// Base class for audio codecs. Provides common properties and methods for audio codecs, +/// as well as a common implementation of IDialerCallStatus to allow the AudioCodecBaseMessenger +/// to get call status information without requiring the full AudioCodecBase class. +/// This is useful for devices that have dialer call status information but do not need to implement +/// the full AudioCodecBase class. +/// +public abstract class AudioCodecBase : EssentialsDevice, IDialerCallStatus, IUsageTracking, IAudioCodecInfo { - + /// public event EventHandler CallStatusChange; + /// public AudioCodecInfo CodecInfo { get; protected set; } #region IUsageTracking Members @@ -41,8 +49,14 @@ public abstract class AudioCodecBase : EssentialsDevice, IHasDialer, IUsageTrack } // In most cases only a single call can be active + /// public List ActiveCalls { get; set; } + /// + /// Constructor + /// + /// + /// public AudioCodecBase(string key, string name) : base(key, name) { @@ -83,16 +97,22 @@ public abstract class AudioCodecBase : EssentialsDevice, IHasDialer, IUsageTrack #region IHasDialer Members + /// public abstract void Dial(string number); + /// public abstract void EndCall(CodecActiveCallItem activeCall); + /// public abstract void EndAllCalls(); + /// public abstract void AcceptCall(CodecActiveCallItem item); + public abstract void RejectCall(CodecActiveCallItem item); + public abstract void SendDtmf(string digit); #endregion diff --git a/src/PepperDash.Essentials.Devices.Common/AudioCodec/Interfaces/IDialerCallStatus.cs b/src/PepperDash.Essentials.Devices.Common/AudioCodec/Interfaces/IDialerCallStatus.cs new file mode 100644 index 00000000..7c32eecf --- /dev/null +++ b/src/PepperDash.Essentials.Devices.Common/AudioCodec/Interfaces/IDialerCallStatus.cs @@ -0,0 +1,20 @@ +using System.Collections.Generic; +using PepperDash.Essentials.Devices.Common.Codec; + +namespace PepperDash.Essentials.Devices.Common.AudioCodec; + +/// +/// Defines the contract for a device that has dialer call status information. This is used to provide a common interface for the AudioCodecBaseMessenger to get call status information without requiring the full AudioCodecBase class +/// +public interface IDialerCallStatus : IHasDialer +{ + /// + /// + /// + AudioCodecInfo CodecInfo { get; } + + /// + /// Gets or sets the list of active calls for the device. + /// + List ActiveCalls { get; set; } +} diff --git a/src/PepperDash.Essentials.Devices.Common/Cameras/CameraBase.cs b/src/PepperDash.Essentials.Devices.Common/Cameras/CameraBase.cs index a7b880c9..3ee7b7be 100644 --- a/src/PepperDash.Essentials.Devices.Common/Cameras/CameraBase.cs +++ b/src/PepperDash.Essentials.Devices.Common/Cameras/CameraBase.cs @@ -1,6 +1,4 @@ - - -using System; +using System; using System.Collections.Generic; using System.Linq; using Crestron.SimplSharpPro.DeviceSupport; diff --git a/src/PepperDash.Essentials.Devices.Common/Displays/Interfaces/IDisplayCurrentInput.cs b/src/PepperDash.Essentials.Devices.Common/Displays/Interfaces/IDisplayCurrentInput.cs new file mode 100644 index 00000000..dde208c8 --- /dev/null +++ b/src/PepperDash.Essentials.Devices.Common/Displays/Interfaces/IDisplayCurrentInput.cs @@ -0,0 +1,14 @@ +using PepperDash.Core; + +namespace PepperDash.Essentials.Core.DeviceTypeInterfaces +{ + /// + /// Defines the contract for a display device that has current input information. This is used to provide a common interface for the TwoWayDisplayBaseMessenger to get current input information without requiring the full TwoWayDisplayBase class + /// + public interface IDisplayCurrentInput : IKeyName +{ + /// + /// Gets the Current Input feedback for the display device. + /// + StringFeedback CurrentInputFeedback { get; } +} \ No newline at end of file diff --git a/src/PepperDash.Essentials.MobileControl.Messengers/DeviceTypeExtensions/DisplayBaseMessenger.cs b/src/PepperDash.Essentials.MobileControl.Messengers/DeviceTypeExtensions/IRoutingSinkWithSwitchingMessenger.cs similarity index 100% rename from src/PepperDash.Essentials.MobileControl.Messengers/DeviceTypeExtensions/DisplayBaseMessenger.cs rename to src/PepperDash.Essentials.MobileControl.Messengers/DeviceTypeExtensions/IRoutingSinkWithSwitchingMessenger.cs diff --git a/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/CameraBaseMessenger.cs b/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/CameraControlMessenger.cs similarity index 98% rename from src/PepperDash.Essentials.MobileControl.Messengers/Messengers/CameraBaseMessenger.cs rename to src/PepperDash.Essentials.MobileControl.Messengers/Messengers/CameraControlMessenger.cs index 8c9f0451..3c02ee59 100644 --- a/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/CameraBaseMessenger.cs +++ b/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/CameraControlMessenger.cs @@ -11,7 +11,7 @@ namespace PepperDash.Essentials.AppServer.Messengers /// /// Messenger for a CameraBase device /// - public class CameraBaseMessenger : MessengerBase where T : IKeyed + public class CameraControlMessenger : MessengerBase where T : IKeyed { /// /// Gets or sets the Camera @@ -24,7 +24,7 @@ namespace PepperDash.Essentials.AppServer.Messengers /// /// /// - public CameraBaseMessenger(string key, T camera, string messagePath) + public CameraControlMessenger(string key, T camera, string messagePath) : base(key, messagePath, camera as IKeyName) { if (camera == null) diff --git a/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/AudioCodecBaseMessenger.cs b/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/IDialerCallStatusMessenger.cs similarity index 90% rename from src/PepperDash.Essentials.MobileControl.Messengers/Messengers/AudioCodecBaseMessenger.cs rename to src/PepperDash.Essentials.MobileControl.Messengers/Messengers/IDialerCallStatusMessenger.cs index a1b30341..d9eacecd 100644 --- a/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/AudioCodecBaseMessenger.cs +++ b/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/IDialerCallStatusMessenger.cs @@ -1,20 +1,21 @@ using System; using System.Linq; using Newtonsoft.Json.Linq; +using PepperDash.Core; using PepperDash.Essentials.Devices.Common.AudioCodec; using PepperDash.Essentials.Devices.Common.Codec; namespace PepperDash.Essentials.AppServer.Messengers { /// - /// Provides a messaging bridge for an AudioCodecBase device + /// Provides a messaging bridge for an IDialerCallStatus device /// - public class AudioCodecBaseMessenger : MessengerBase + public class IDialerCallStatusMessenger : MessengerBase { /// /// Device being bridged /// - public AudioCodecBase Codec { get; private set; } + public IDialerCallStatus Codec { get; private set; } /// /// Constuctor @@ -22,8 +23,8 @@ namespace PepperDash.Essentials.AppServer.Messengers /// /// /// - public AudioCodecBaseMessenger(string key, AudioCodecBase codec, string messagePath) - : base(key, messagePath, codec) + public IDialerCallStatusMessenger(string key, IDialerCallStatus codec, string messagePath) + : base(key, messagePath, codec as IKeyName) { Codec = codec ?? throw new ArgumentNullException("codec"); codec.CallStatusChange += Codec_CallStatusChange; diff --git a/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/TwoWayDisplayBaseMessenger.cs b/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/IDisplayCurrentInputMessenger.cs similarity index 57% rename from src/PepperDash.Essentials.MobileControl.Messengers/Messengers/TwoWayDisplayBaseMessenger.cs rename to src/PepperDash.Essentials.MobileControl.Messengers/Messengers/IDisplayCurrentInputMessenger.cs index 77a7cc95..0239ecf9 100644 --- a/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/TwoWayDisplayBaseMessenger.cs +++ b/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/IDisplayCurrentInputMessenger.cs @@ -1,25 +1,27 @@ using Newtonsoft.Json; using Newtonsoft.Json.Linq; +using PepperDash.Core; using PepperDash.Essentials.Core; +using PepperDash.Essentials.Core.DeviceTypeInterfaces; using PepperDash.Essentials.Devices.Common.Displays; namespace PepperDash.Essentials.AppServer.Messengers { /// - /// Represents a TwoWayDisplayBaseMessenger + /// Represents a messenger for a display device that has current input information. /// - public class TwoWayDisplayBaseMessenger : MessengerBase + public class IDisplayCurrentInputMessenger : MessengerBase { - private readonly TwoWayDisplayBase _display; + private readonly IDisplayCurrentInput _display; /// - /// Initializes a new instance of the class. + /// Initializes a new instance of the class. /// /// /// /// - public TwoWayDisplayBaseMessenger(string key, string messagePath, TwoWayDisplayBase display) - : base(key, messagePath, display) + public IDisplayCurrentInputMessenger(string key, string messagePath, IDisplayCurrentInput display) + : base(key, messagePath, display as IKeyName) { _display = display; } @@ -31,9 +33,8 @@ namespace PepperDash.Essentials.AppServer.Messengers /// public void SendFullStatus(string id = null) { - var messageObj = new TwoWayDisplayBaseStateMessage + var messageObj = new CurrentInputStateMessage { - //PowerState = _display.PowerIsOnFeedback.BoolValue, CurrentInput = _display.CurrentInputFeedback.StringValue }; @@ -47,11 +48,9 @@ namespace PepperDash.Essentials.AppServer.Messengers AddAction("/fullStatus", (id, content) => SendFullStatus(id)); - AddAction("/displayStatus", (id, content) => SendFullStatus(id)); + AddAction("/currentInputStatus", (id, content) => SendFullStatus(id)); _display.CurrentInputFeedback.OutputChange += CurrentInputFeedbackOnOutputChange; - _display.IsCoolingDownFeedback.OutputChange += IsCoolingFeedbackOnOutputChange; - _display.IsWarmingUpFeedback.OutputChange += IsWarmingFeedbackOnOutputChange; } private void CurrentInputFeedbackOnOutputChange(object sender, FeedbackEventArgs feedbackEventArgs) @@ -61,24 +60,6 @@ namespace PepperDash.Essentials.AppServer.Messengers currentInput = feedbackEventArgs.StringValue }) ); - } - - private void IsWarmingFeedbackOnOutputChange(object sender, FeedbackEventArgs feedbackEventArgs) - { - PostStatusMessage(JToken.FromObject(new - { - isWarming = feedbackEventArgs.BoolValue - }) - ); - } - - private void IsCoolingFeedbackOnOutputChange(object sender, FeedbackEventArgs feedbackEventArgs) - { - PostStatusMessage(JToken.FromObject(new - { - isCooling = feedbackEventArgs.BoolValue - }) - ); } @@ -89,7 +70,7 @@ namespace PepperDash.Essentials.AppServer.Messengers /// /// Represents a TwoWayDisplayBaseStateMessage /// - public class TwoWayDisplayBaseStateMessage : DeviceStateMessageBase + public class CurrentInputStateMessage : DeviceStateMessageBase { //[JsonProperty("powerState", NullValueHandling = NullValueHandling.Ignore)] //public bool? PowerState { get; set; } diff --git a/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/LightingBaseMessenger.cs b/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/ILightingScenesMessenger.cs similarity index 100% rename from src/PepperDash.Essentials.MobileControl.Messengers/Messengers/LightingBaseMessenger.cs rename to src/PepperDash.Essentials.MobileControl.Messengers/Messengers/ILightingScenesMessenger.cs diff --git a/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/RoomEventScheduleMessenger.cs b/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/IRoomEventScheduleMessenger.cs similarity index 90% rename from src/PepperDash.Essentials.MobileControl.Messengers/Messengers/RoomEventScheduleMessenger.cs rename to src/PepperDash.Essentials.MobileControl.Messengers/Messengers/IRoomEventScheduleMessenger.cs index 8969dcd3..1112a85d 100644 --- a/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/RoomEventScheduleMessenger.cs +++ b/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/IRoomEventScheduleMessenger.cs @@ -11,17 +11,17 @@ namespace PepperDash.Essentials.AppServer.Messengers; /// /// Represents a RoomEventScheduleMessenger /// -public class RoomEventScheduleMessenger : MessengerBase +public class IRoomEventScheduleMessenger : MessengerBase { private readonly IRoomEventSchedule _room; /// - /// Initializes a new instance of the class. + /// Initializes a new instance of the class. /// /// /// /// - public RoomEventScheduleMessenger(string key, string messagePath, IRoomEventSchedule room) + public IRoomEventScheduleMessenger(string key, string messagePath, IRoomEventSchedule room) : base(key, messagePath, room as IKeyName) { _room = room; diff --git a/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/ShadeBaseMessenger.cs b/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/IShadesOpenCloseStopMessenger.cs similarity index 100% rename from src/PepperDash.Essentials.MobileControl.Messengers/Messengers/ShadeBaseMessenger.cs rename to src/PepperDash.Essentials.MobileControl.Messengers/Messengers/IShadesOpenCloseStopMessenger.cs diff --git a/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/DevicePresetsModelMessenger.cs b/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/ITvPresetsProviderMessenger.cs similarity index 93% rename from src/PepperDash.Essentials.MobileControl.Messengers/Messengers/DevicePresetsModelMessenger.cs rename to src/PepperDash.Essentials.MobileControl.Messengers/Messengers/ITvPresetsProviderMessenger.cs index 833a781b..fa9bd3b4 100644 --- a/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/DevicePresetsModelMessenger.cs +++ b/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/ITvPresetsProviderMessenger.cs @@ -10,19 +10,19 @@ using PepperDash.Essentials.Core.Presets; namespace PepperDash.Essentials.AppServer.Messengers { /// - /// Represents a DevicePresetsModelMessenger + /// Represents a ITvPresetsProviderMessenger /// - public class DevicePresetsModelMessenger : MessengerBase + public class ITvPresetsProviderMessenger : MessengerBase { private readonly ITvPresetsProvider _presetsDevice; /// - /// Constructor for DevicePresetsModelMessenger + /// Constructor for ITvPresetsProviderMessenger /// /// The key. /// The message path. /// The presets device. - public DevicePresetsModelMessenger(string key, string messagePath, ITvPresetsProvider presetsDevice) + public ITvPresetsProviderMessenger(string key, string messagePath, ITvPresetsProvider presetsDevice) : base(key, messagePath, presetsDevice as Device) { _presetsDevice = presetsDevice; diff --git a/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/IWarmingCoolingMessenger.cs b/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/IWarmingCoolingMessenger.cs new file mode 100644 index 00000000..54687e7b --- /dev/null +++ b/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/IWarmingCoolingMessenger.cs @@ -0,0 +1,86 @@ +using System.Text.Json.Serialization; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; +using PepperDash.Essentials.Core; + +namespace PepperDash.Essentials.AppServer.Messengers; + +/// +/// Messenger for devices that implement +/// +public class IWarmingCoolingMessenger : MessengerBase +{ + private readonly IWarmingCooling device; + + /// + /// Initializes a new instance of the class. + /// + /// + /// + /// + public IWarmingCoolingMessenger(string key, string messagePath, EssentialsDevice device) + : base(key, messagePath, device) + { + this.device = device as IWarmingCooling; + } + + /// + protected override void RegisterActions() + { + base.RegisterActions(); + + AddAction("/fullStatus", (id, content) => SendFullStatus(id)); + + AddAction("/warmingCoolingStatus", (id, content) => SendFullStatus(id)); + + device.IsWarmingUpFeedback.OutputChange += IsWarmingFeedbackOnOutputChange; + device.IsCoolingDownFeedback.OutputChange += IsCoolingFeedbackOnOutputChange; + } + + private void IsWarmingFeedbackOnOutputChange(object sender, FeedbackEventArgs feedbackEventArgs) + { + PostStatusMessage(JToken.FromObject(new + { + isWarming = feedbackEventArgs.BoolValue + })); + } + + private void IsCoolingFeedbackOnOutputChange(object sender, FeedbackEventArgs feedbackEventArgs) + { + PostStatusMessage(JToken.FromObject(new + { + isCooling = feedbackEventArgs.BoolValue + })); + } + + private void SendFullStatus(string id = null) + { + var messageObj = new IWarmingCoolingStateMessage + { + IsWarming = device.IsWarmingUpFeedback.BoolValue, + IsCooling = device.IsCoolingDownFeedback.BoolValue + }; + + PostStatusMessage(messageObj, id); + } +} + + +/// +/// Message object for warming/cooling status +/// +public class IWarmingCoolingStateMessage : DeviceStateMessageBase +{ + /// + /// Indicates whether the device is currently warming up. + /// + [JsonProperty("isWarming", NullValueHandling = NullValueHandling.Ignore)] + public bool IsWarming { get; set; } + + /// + /// Indicates whether the device is currently cooling down. + /// + [JsonProperty("isCooling", NullValueHandling = NullValueHandling.Ignore)] + public bool IsCooling { get; set; } +} + diff --git a/src/PepperDash.Essentials.MobileControl/MessengerFactoryRegistry.cs b/src/PepperDash.Essentials.MobileControl/MessengerFactoryRegistry.cs index 73e3dc22..060e594f 100644 --- a/src/PepperDash.Essentials.MobileControl/MessengerFactoryRegistry.cs +++ b/src/PepperDash.Essentials.MobileControl/MessengerFactoryRegistry.cs @@ -83,14 +83,14 @@ namespace PepperDash.Essentials // CameraBase only when the device does NOT also implement IHasCameraControls new MessengerFactoryEntry( typeof(CameraBase), - (d, mp, ck) => new CameraBaseMessenger( + (d, mp, ck) => new CameraControlMessenger( $"{d.Key}-cameraBase-{ck}", (CameraBase)d, mp), predicate: d => d is CameraBase && !(d is IHasCameraControls) ), new MessengerFactoryEntry( typeof(IHasCameraControls), - (d, mp, ck) => new CameraBaseMessenger( + (d, mp, ck) => new CameraControlMessenger( $"{d.Key}-hasCamerasWithControls-{ck}", (IHasCameraControls)d, mp) ), new MessengerFactoryEntry( @@ -102,7 +102,7 @@ namespace PepperDash.Essentials // ── Routing ────────────────────────────────────────────────────────────── // BlueJeansPc implements IRunRouteAction new MessengerFactoryEntry( - typeof(BlueJeansPc), + typeof(IRunRouteAction), (d, mp, ck) => new RunRouteActionMessenger( $"{d.Key}-runRouteAction-{ck}", (IRunRouteAction)d, mp) ), @@ -110,7 +110,7 @@ namespace PepperDash.Essentials // ── Presets ────────────────────────────────────────────────────────────── new MessengerFactoryEntry( typeof(ITvPresetsProvider), - (d, mp, ck) => new DevicePresetsModelMessenger( + (d, mp, ck) => new ITvPresetsProviderMessenger( $"{d.Key}-presets-{ck}", mp, (ITvPresetsProvider)d) ), @@ -121,9 +121,14 @@ namespace PepperDash.Essentials $"{d.Key}-displayBase-{ck}", mp, (IRoutingSinkWithSwitching)d) ), new MessengerFactoryEntry( - typeof(TwoWayDisplayBase), - (d, mp, ck) => new TwoWayDisplayBaseMessenger( - $"{d.Key}-twoWayDisplay-{ck}", mp, (TwoWayDisplayBase)d) + typeof(IDisplayCurrentInput), + (d, mp, ck) => new IDisplayCurrentInputMessenger( + $"{d.Key}-twoWayDisplay-{ck}", mp, (IDisplayCurrentInput)d) + ), + new MessengerFactoryEntry( + typeof(IWarmingCooling), + (d, mp, ck) => new IWarmingCoolingMessenger( + $"{d.Key}-warmingCooling-{ck}", mp, d) ), // ── Audio / Video ───────────────────────────────────────────────────────── @@ -160,9 +165,9 @@ namespace PepperDash.Essentials $"{d.Key}-videoCodec-{ck}", (VideoCodecBase)d, mp) ), new MessengerFactoryEntry( - typeof(AudioCodecBase), - (d, mp, ck) => new AudioCodecBaseMessenger( - $"{d.Key}-audioCodec-{ck}", (AudioCodecBase)d, mp) + typeof(IDialerCallStatus), + (d, mp, ck) => new IDialerCallStatusMessenger( + $"{d.Key}-audioCodec-{ck}", (IDialerCallStatus)d, mp) ), // ── Set-top box controls ────────────────────────────────────────────────── @@ -294,7 +299,7 @@ namespace PepperDash.Essentials // ── Event schedule ──────────────────────────────────────────────────────── new MessengerFactoryEntry( typeof(IRoomEventSchedule), - (d, mp, ck) => new RoomEventScheduleMessenger( + (d, mp, ck) => new IRoomEventScheduleMessenger( $"{d.Key}-schedule-{ck}", mp, (IRoomEventSchedule)d) ),