mirror of
https://github.com/PepperDash/Essentials.git
synced 2026-02-17 21:54:54 +00:00
feat: ICurrentSources interface to allow for tracking breakaway routing
This commit is contained in:
@@ -2,7 +2,14 @@
|
|||||||
|
|
||||||
namespace PepperDash.Essentials.Core.DeviceTypeInterfaces
|
namespace PepperDash.Essentials.Core.DeviceTypeInterfaces
|
||||||
{
|
{
|
||||||
public interface IDisplay: IHasFeedback, IRoutingSinkWithSwitching, IHasPowerControl, IWarmingCooling, IUsageTracking, IKeyName
|
/// <summary>
|
||||||
|
/// Interface for display devices that can be controlled and monitored.
|
||||||
|
/// This interface combines functionality for feedback, routing, power control,
|
||||||
|
/// warming/cooling, usage tracking, and key name management.
|
||||||
|
/// It is designed to be implemented by devices that require these capabilities,
|
||||||
|
/// such as projectors, displays, and other visual output devices.
|
||||||
|
/// </summary>
|
||||||
|
public interface IDisplay : IHasFeedback, IRoutingSinkWithSwitching, IHasPowerControl, IWarmingCooling, IUsageTracking, IKeyName
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -174,6 +174,13 @@ namespace PepperDash.Essentials.Core
|
|||||||
[JsonProperty("syncProviderDeviceKey")]
|
[JsonProperty("syncProviderDeviceKey")]
|
||||||
public string SyncProviderDeviceKey { get; set; }
|
public string SyncProviderDeviceKey { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Indicates if the source supports USB connections
|
||||||
|
/// </summary>
|
||||||
|
[JsonProperty("supportsUsb")]
|
||||||
|
public bool SupportsUsb { get; set; }
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Default constructor for SourceListItem, initializes the Icon to "Blank"
|
/// Default constructor for SourceListItem, initializes the Icon to "Blank"
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
28
src/PepperDash.Essentials.Core/Routing/ICurrentSources.cs
Normal file
28
src/PepperDash.Essentials.Core/Routing/ICurrentSources.cs
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
|
namespace PepperDash.Essentials.Core.Routing
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// The current sources for the room, keyed by eRoutingSignalType.
|
||||||
|
/// This allows for multiple sources to be tracked, such as audio and video.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// This interface is used to provide access to the current sources in a room,
|
||||||
|
/// allowing for more complex routing scenarios where multiple signal types are involved.
|
||||||
|
/// </remarks>
|
||||||
|
public interface ICurrentSources
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Gets the current sources for the room, keyed by eRoutingSignalType.
|
||||||
|
/// This dictionary contains the current source for each signal type, such as audio, video,
|
||||||
|
/// </summary>
|
||||||
|
Dictionary<eRoutingSignalType, SourceListItem> CurrentSources { get; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets the current source keys for the room, keyed by eRoutingSignalType.
|
||||||
|
/// This dictionary contains the keys for the current source for each signal type, such as audio,
|
||||||
|
/// </summary>
|
||||||
|
Dictionary<eRoutingSignalType, string> CurrentSourceKeys { get; }
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -9,6 +9,8 @@ using PepperDash.Essentials.Core.Routing;
|
|||||||
using PepperDash.Essentials.Core.Routing;
|
using PepperDash.Essentials.Core.Routing;
|
||||||
using PepperDash.Essentials.Core.Routing.Interfaces
|
using PepperDash.Essentials.Core.Routing.Interfaces
|
||||||
*/
|
*/
|
||||||
|
using System;
|
||||||
|
|
||||||
namespace PepperDash.Essentials.Core
|
namespace PepperDash.Essentials.Core
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -21,10 +23,24 @@ namespace PepperDash.Essentials.Core
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// For rooms with a single presentation source, change event
|
/// For rooms with a single presentation source, change event
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
[Obsolete("Use ICurrentSources instead")]
|
||||||
public interface IHasCurrentSourceInfoChange
|
public interface IHasCurrentSourceInfoChange
|
||||||
{
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// The key for the current source info, used to look up the source in the SourceList
|
||||||
|
/// </summary>
|
||||||
string CurrentSourceInfoKey { get; set; }
|
string CurrentSourceInfoKey { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// The current source info for the room, used to look up the source in the SourceList
|
||||||
|
/// </summary>
|
||||||
SourceListItem CurrentSourceInfo { get; set; }
|
SourceListItem CurrentSourceInfo { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Event that is raised when the current source info changes.
|
||||||
|
/// This is used to notify the system of changes to the current source info.
|
||||||
|
/// The event handler receives the new source info and the type of change that occurred.
|
||||||
|
/// </summary>
|
||||||
event SourceInfoChangeHandler CurrentSourceChange;
|
event SourceInfoChangeHandler CurrentSourceChange;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,4 +1,6 @@
|
|||||||
namespace PepperDash.Essentials.Core
|
using PepperDash.Essentials.Core.Routing;
|
||||||
|
|
||||||
|
namespace PepperDash.Essentials.Core
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// For fixed-source endpoint devices
|
/// For fixed-source endpoint devices
|
||||||
@@ -10,20 +12,18 @@
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// For fixed-source endpoint devices with an input port
|
/// For fixed-source endpoint devices with an input port
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public interface IRoutingSinkWithInputPort :IRoutingSink
|
public interface IRoutingSinkWithInputPort : IRoutingSink
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the current input port for this routing sink.
|
/// Gets the current input port for this routing sink.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
RoutingInputPort CurrentInputPort { get; }
|
RoutingInputPort CurrentInputPort { get; }
|
||||||
}
|
}
|
||||||
/*/// <summary>
|
|
||||||
/// For fixed-source endpoint devices
|
|
||||||
/// </summary>
|
|
||||||
public interface IRoutingSink<TSelector> : IRoutingInputs<TSelector>, IHasCurrentSourceInfoChange
|
|
||||||
{
|
|
||||||
void UpdateRouteRequest<TOutputSelector>(RouteRequest<TSelector, TOutputSelector> request);
|
|
||||||
|
|
||||||
RouteRequest<TSelector, TOutputSelector> GetRouteRequest<TOutputSelector>();
|
/// <summary>
|
||||||
}*/
|
/// Interface for routing sinks that have access to the current source information.
|
||||||
|
/// </summary>
|
||||||
|
public interface IRoutingSinkWithCurrentSources : IRoutingSink, ICurrentSources
|
||||||
|
{
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -1,21 +1,30 @@
|
|||||||
using Crestron.SimplSharp;
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using Crestron.SimplSharp;
|
||||||
using Crestron.SimplSharpPro.DeviceSupport;
|
using Crestron.SimplSharpPro.DeviceSupport;
|
||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
using PepperDash.Core;
|
using PepperDash.Core;
|
||||||
using PepperDash.Essentials.Core;
|
using PepperDash.Essentials.Core;
|
||||||
using PepperDash.Essentials.Core.Bridges;
|
using PepperDash.Essentials.Core.Bridges;
|
||||||
using PepperDash.Essentials.Core.DeviceTypeInterfaces;
|
using PepperDash.Essentials.Core.DeviceTypeInterfaces;
|
||||||
|
using PepperDash.Essentials.Core.Routing;
|
||||||
using Serilog.Events;
|
using Serilog.Events;
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using Feedback = PepperDash.Essentials.Core.Feedback;
|
using Feedback = PepperDash.Essentials.Core.Feedback;
|
||||||
|
|
||||||
namespace PepperDash.Essentials.Devices.Common.Displays
|
namespace PepperDash.Essentials.Devices.Common.Displays
|
||||||
{
|
{
|
||||||
public abstract class DisplayBase : EssentialsDevice, IDisplay
|
/// <summary>
|
||||||
|
/// Abstract base class for display devices that provides common display functionality
|
||||||
|
/// including power control, input switching, and routing capabilities.
|
||||||
|
/// </summary>
|
||||||
|
public abstract class DisplayBase : EssentialsDevice, IDisplay, ICurrentSources
|
||||||
{
|
{
|
||||||
private RoutingInputPort _currentInputPort;
|
private RoutingInputPort _currentInputPort;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets or sets the current input port that is selected on the display.
|
||||||
|
/// </summary>
|
||||||
public RoutingInputPort CurrentInputPort
|
public RoutingInputPort CurrentInputPort
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
@@ -33,11 +42,24 @@ namespace PepperDash.Essentials.Devices.Common.Displays
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Event that is raised when the input changes on the display.
|
||||||
|
/// </summary>
|
||||||
public event InputChangedEventHandler InputChanged;
|
public event InputChangedEventHandler InputChanged;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Event that is raised when the current source information changes.
|
||||||
|
/// </summary>
|
||||||
public event SourceInfoChangeHandler CurrentSourceChange;
|
public event SourceInfoChangeHandler CurrentSourceChange;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets or sets the key of the current source information.
|
||||||
|
/// </summary>
|
||||||
public string CurrentSourceInfoKey { get; set; }
|
public string CurrentSourceInfoKey { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets or sets the current source information for the display.
|
||||||
|
/// </summary>
|
||||||
public SourceListItem CurrentSourceInfo
|
public SourceListItem CurrentSourceInfo
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
@@ -61,31 +83,73 @@ namespace PepperDash.Essentials.Devices.Common.Displays
|
|||||||
}
|
}
|
||||||
SourceListItem _CurrentSourceInfo;
|
SourceListItem _CurrentSourceInfo;
|
||||||
|
|
||||||
|
/// <inheritdoc/>
|
||||||
|
public Dictionary<eRoutingSignalType, SourceListItem> CurrentSources { get; private set; }
|
||||||
|
|
||||||
|
/// <inheritdoc/>
|
||||||
|
public Dictionary<eRoutingSignalType, string> CurrentSourceKeys { get; private set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets feedback indicating whether the display is currently cooling down after being powered off.
|
||||||
|
/// </summary>
|
||||||
public BoolFeedback IsCoolingDownFeedback { get; protected set; }
|
public BoolFeedback IsCoolingDownFeedback { get; protected set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets feedback indicating whether the display is currently warming up after being powered on.
|
||||||
|
/// </summary>
|
||||||
public BoolFeedback IsWarmingUpFeedback { get; private set; }
|
public BoolFeedback IsWarmingUpFeedback { get; private set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets or sets the usage tracking instance for monitoring display usage statistics.
|
||||||
|
/// </summary>
|
||||||
public UsageTracking UsageTracker { get; set; }
|
public UsageTracking UsageTracker { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets or sets the warmup time in milliseconds for the display to become ready after power on.
|
||||||
|
/// </summary>
|
||||||
public uint WarmupTime { get; set; }
|
public uint WarmupTime { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets or sets the cooldown time in milliseconds for the display to fully power down.
|
||||||
|
/// </summary>
|
||||||
public uint CooldownTime { get; set; }
|
public uint CooldownTime { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Bool Func that will provide a value for the PowerIsOn Output. Must be implemented
|
/// Abstract function that must be implemented by derived classes to provide the cooling down feedback value.
|
||||||
/// by concrete sub-classes
|
/// Must be implemented by concrete sub-classes.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
abstract protected Func<bool> IsCoolingDownFeedbackFunc { get; }
|
abstract protected Func<bool> IsCoolingDownFeedbackFunc { get; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Abstract function that must be implemented by derived classes to provide the warming up feedback value.
|
||||||
|
/// Must be implemented by concrete sub-classes.
|
||||||
|
/// </summary>
|
||||||
abstract protected Func<bool> IsWarmingUpFeedbackFunc { get; }
|
abstract protected Func<bool> IsWarmingUpFeedbackFunc { get; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Timer used for managing display warmup timing.
|
||||||
|
/// </summary>
|
||||||
protected CTimer WarmupTimer;
|
protected CTimer WarmupTimer;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Timer used for managing display cooldown timing.
|
||||||
|
/// </summary>
|
||||||
protected CTimer CooldownTimer;
|
protected CTimer CooldownTimer;
|
||||||
|
|
||||||
#region IRoutingInputs Members
|
#region IRoutingInputs Members
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets the collection of input ports available on this display device.
|
||||||
|
/// </summary>
|
||||||
public RoutingPortCollection<RoutingInputPort> InputPorts { get; private set; }
|
public RoutingPortCollection<RoutingInputPort> InputPorts { get; private set; }
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Initializes a new instance of the DisplayBase class.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="key">The unique key identifier for this display device.</param>
|
||||||
|
/// <param name="name">The friendly name for this display device.</param>
|
||||||
protected DisplayBase(string key, string name)
|
protected DisplayBase(string key, string name)
|
||||||
: base(key, name)
|
: base(key, name)
|
||||||
{
|
{
|
||||||
@@ -94,12 +158,37 @@ namespace PepperDash.Essentials.Devices.Common.Displays
|
|||||||
|
|
||||||
InputPorts = new RoutingPortCollection<RoutingInputPort>();
|
InputPorts = new RoutingPortCollection<RoutingInputPort>();
|
||||||
|
|
||||||
|
CurrentSources = new Dictionary<eRoutingSignalType, SourceListItem>
|
||||||
|
{
|
||||||
|
{ eRoutingSignalType.Audio, null },
|
||||||
|
{ eRoutingSignalType.Video, null },
|
||||||
|
};
|
||||||
|
|
||||||
|
CurrentSourceKeys = new Dictionary<eRoutingSignalType, string>
|
||||||
|
{
|
||||||
|
{ eRoutingSignalType.Audio, string.Empty },
|
||||||
|
{ eRoutingSignalType.Video, string.Empty },
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Powers on the display device. Must be implemented by derived classes.
|
||||||
|
/// </summary>
|
||||||
public abstract void PowerOn();
|
public abstract void PowerOn();
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Powers off the display device. Must be implemented by derived classes.
|
||||||
|
/// </summary>
|
||||||
public abstract void PowerOff();
|
public abstract void PowerOff();
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Toggles the power state of the display device. Must be implemented by derived classes.
|
||||||
|
/// </summary>
|
||||||
public abstract void PowerToggle();
|
public abstract void PowerToggle();
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets the collection of feedback objects for this display device.
|
||||||
|
/// </summary>
|
||||||
public virtual FeedbackCollection<Feedback> Feedbacks
|
public virtual FeedbackCollection<Feedback> Feedbacks
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
@@ -112,8 +201,21 @@ namespace PepperDash.Essentials.Devices.Common.Displays
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Executes a switch to the specified input on the display device. Must be implemented by derived classes.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="selector">The selector object that identifies which input to switch to.</param>
|
||||||
public abstract void ExecuteSwitch(object selector);
|
public abstract void ExecuteSwitch(object selector);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Links the display device to an API using a trilist, join start, join map key, and bridge.
|
||||||
|
/// This overload uses serialized join map configuration.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="displayDevice">The display device to link.</param>
|
||||||
|
/// <param name="trilist">The BasicTriList for communication.</param>
|
||||||
|
/// <param name="joinStart">The starting join number for the device.</param>
|
||||||
|
/// <param name="joinMapKey">The key for the join map configuration.</param>
|
||||||
|
/// <param name="bridge">The EISC API bridge instance.</param>
|
||||||
protected void LinkDisplayToApi(DisplayBase displayDevice, BasicTriList trilist, uint joinStart, string joinMapKey,
|
protected void LinkDisplayToApi(DisplayBase displayDevice, BasicTriList trilist, uint joinStart, string joinMapKey,
|
||||||
EiscApiAdvanced bridge)
|
EiscApiAdvanced bridge)
|
||||||
{
|
{
|
||||||
@@ -130,12 +232,19 @@ namespace PepperDash.Essentials.Devices.Common.Displays
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Debug.LogMessage(LogEventLevel.Information,this,"Please update config to use 'eiscapiadvanced' to get all join map features for this device.");
|
Debug.LogMessage(LogEventLevel.Information, this, "Please update config to use 'eiscapiadvanced' to get all join map features for this device.");
|
||||||
}
|
}
|
||||||
|
|
||||||
LinkDisplayToApi(displayDevice, trilist, joinMap);
|
LinkDisplayToApi(displayDevice, trilist, joinMap);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Links the display device to an API using a trilist and join map.
|
||||||
|
/// This overload uses a pre-configured join map instance.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="displayDevice">The display device to link.</param>
|
||||||
|
/// <param name="trilist">The BasicTriList for communication.</param>
|
||||||
|
/// <param name="joinMap">The join map configuration for the device.</param>
|
||||||
protected void LinkDisplayToApi(DisplayBase displayDevice, BasicTriList trilist, DisplayControllerJoinMap joinMap)
|
protected void LinkDisplayToApi(DisplayBase displayDevice, BasicTriList trilist, DisplayControllerJoinMap joinMap)
|
||||||
{
|
{
|
||||||
Debug.LogMessage(LogEventLevel.Debug, "Linking to Trilist '{0}'", trilist.ID.ToString("X"));
|
Debug.LogMessage(LogEventLevel.Debug, "Linking to Trilist '{0}'", trilist.ID.ToString("X"));
|
||||||
@@ -270,17 +379,37 @@ namespace PepperDash.Essentials.Devices.Common.Displays
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Abstract base class for two-way display devices that provide feedback capabilities.
|
||||||
|
/// Extends DisplayBase with routing feedback and power control feedback functionality.
|
||||||
|
/// </summary>
|
||||||
public abstract class TwoWayDisplayBase : DisplayBase, IRoutingFeedback, IHasPowerControlWithFeedback
|
public abstract class TwoWayDisplayBase : DisplayBase, IRoutingFeedback, IHasPowerControlWithFeedback
|
||||||
{
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Gets feedback for the current input selection on the display.
|
||||||
|
/// </summary>
|
||||||
public StringFeedback CurrentInputFeedback { get; private set; }
|
public StringFeedback CurrentInputFeedback { get; private set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Abstract function that must be implemented by derived classes to provide the current input feedback value.
|
||||||
|
/// Must be implemented by concrete sub-classes.
|
||||||
|
/// </summary>
|
||||||
abstract protected Func<string> CurrentInputFeedbackFunc { get; }
|
abstract protected Func<string> CurrentInputFeedbackFunc { get; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets feedback indicating whether the display is currently powered on.
|
||||||
|
/// </summary>
|
||||||
public BoolFeedback PowerIsOnFeedback { get; protected set; }
|
public BoolFeedback PowerIsOnFeedback { get; protected set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Abstract function that must be implemented by derived classes to provide the power state feedback value.
|
||||||
|
/// Must be implemented by concrete sub-classes.
|
||||||
|
/// </summary>
|
||||||
abstract protected Func<bool> PowerIsOnFeedbackFunc { get; }
|
abstract protected Func<bool> PowerIsOnFeedbackFunc { get; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets the default mock display instance for testing and development purposes.
|
||||||
|
/// </summary>
|
||||||
public static MockDisplay DefaultDisplay
|
public static MockDisplay DefaultDisplay
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
@@ -292,6 +421,11 @@ namespace PepperDash.Essentials.Devices.Common.Displays
|
|||||||
}
|
}
|
||||||
static MockDisplay _DefaultDisplay;
|
static MockDisplay _DefaultDisplay;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Initializes a new instance of the TwoWayDisplayBase class.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="key">The unique key identifier for this display device.</param>
|
||||||
|
/// <param name="name">The friendly name for this display device.</param>
|
||||||
public TwoWayDisplayBase(string key, string name)
|
public TwoWayDisplayBase(string key, string name)
|
||||||
: base(key, name)
|
: base(key, name)
|
||||||
{
|
{
|
||||||
@@ -320,6 +454,9 @@ namespace PepperDash.Essentials.Devices.Common.Displays
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Event that is raised when a numeric switch change occurs on the display.
|
||||||
|
/// </summary>
|
||||||
public event EventHandler<RoutingNumericEventArgs> NumericSwitchChange;
|
public event EventHandler<RoutingNumericEventArgs> NumericSwitchChange;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|||||||
Reference in New Issue
Block a user