wip: update XML comments

This commit is contained in:
Erik Meyer
2026-01-28 15:42:44 -05:00
parent 92059aa43c
commit ca77506108
27 changed files with 625 additions and 33 deletions

View File

@@ -25,8 +25,14 @@ namespace PepperDash.Essentials.Core
{
RoomOnToDefaultSourceWhenOccupiedConfig PropertiesConfig;
/// <summary>
/// Gets or sets the FeatureEnabled
/// </summary>
public bool FeatureEnabled { get; private set; }
/// <summary>
/// Gets or sets the FeatureEnabledTime
/// </summary>
public DateTime FeatureEnabledTime { get; private set; }
ScheduledEvent FeatureEnableEvent;
@@ -51,6 +57,10 @@ namespace PepperDash.Essentials.Core
private Fusion.IEssentialsRoomFusionController FusionRoom;
/// <summary>
/// Constructor for RoomOnToDefaultSourceWhenOccupied
/// </summary>
/// <param name="config">config of the device</param>
public RoomOnToDefaultSourceWhenOccupied(DeviceConfig config) :
base (config)
{
@@ -152,7 +162,10 @@ namespace PepperDash.Essentials.Core
Debug.LogMessage(LogEventLevel.Debug, this, "Unable to get room from Device Manager with key: {0}", PropertiesConfig.RoomKey);
}
/// <summary>
/// CustomSetConfig method
/// </summary>
/// <param name="config">config of the device</param>
protected override void CustomSetConfig(DeviceConfig config)
{
var newPropertiesConfig = JsonConvert.DeserializeObject<RoomOnToDefaultSourceWhenOccupiedConfig>(config.Properties.ToString());
@@ -367,7 +380,8 @@ namespace PepperDash.Essentials.Core
/// <summary>
/// Checks existing event to see if it matches the execution time
/// </summary>
/// <param name="existingEvent"></param>
/// <param name="existingEvent">event we are checking</param>
/// <param name="newTime">time we are checking against</param>
/// <returns></returns>
bool CheckExistingEventTimeForMatch(ScheduledEvent existingEvent, DateTime newTime)
{
@@ -520,70 +534,70 @@ namespace PepperDash.Essentials.Core
/// </summary>
public class RoomOnToDefaultSourceWhenOccupiedConfig
{
[JsonProperty("roomKey")]
/// <summary>
/// Gets or sets the RoomKey
/// </summary>
[JsonProperty("roomKey")]
public string RoomKey { get; set; }
[JsonProperty("enableRoomOnWhenOccupied")]
/// <summary>
/// Gets or sets the EnableRoomOnWhenOccupied
/// </summary>
[JsonProperty("enableRoomOnWhenOccupied")]
public bool EnableRoomOnWhenOccupied { get; set; }
[JsonProperty("occupancyStartTime")]
/// <summary>
/// Gets or sets the OccupancyStartTime
/// </summary>
[JsonProperty("occupancyStartTime")]
public string OccupancyStartTime { get; set; }
[JsonProperty("occupancyEndTime")]
/// <summary>
/// Gets or sets the OccupancyEndTime
/// </summary>
[JsonProperty("occupancyEndTime")]
public string OccupancyEndTime { get; set; }
[JsonProperty("enableSunday")]
/// <summary>
/// Gets or sets the EnableSunday
/// </summary>
[JsonProperty("enableSunday")]
public bool EnableSunday { get; set; }
[JsonProperty("enableMonday")]
/// <summary>
/// Gets or sets the EnableMonday
/// </summary>
[JsonProperty("enableMonday")]
public bool EnableMonday { get; set; }
[JsonProperty("enableTuesday")]
/// <summary>
/// Gets or sets the EnableTuesday
/// </summary>
[JsonProperty("enableWednesday")]
public bool EnableTuesday { get; set; }
[JsonProperty("enableWednesday")]
/// <summary>
/// Gets or sets the EnableWednesday
/// </summary>
[JsonProperty("enableWednesday")]
public bool EnableWednesday { get; set; }
[JsonProperty("enableThursday")]
/// <summary>
/// Gets or sets the EnableThursday
/// </summary>
[JsonProperty("enableThursday")]
public bool EnableThursday { get; set; }
[JsonProperty("enableFriday")]
/// <summary>
/// Gets or sets the EnableFriday
/// </summary>
[JsonProperty("enableFriday")]
public bool EnableFriday { get; set; }
[JsonProperty("enableSaturday")]
/// <summary>
/// Gets or sets the EnableSaturday
/// </summary>
[JsonProperty("enableSaturday")]
public bool EnableSaturday { get; set; }
}
@@ -592,6 +606,9 @@ namespace PepperDash.Essentials.Core
/// </summary>
public class RoomOnToDefaultSourceWhenOccupiedFactory : EssentialsDeviceFactory<RoomOnToDefaultSourceWhenOccupied>
{
/// <summary>
/// Constructor for RoomOnToDefaultSourceWhenOccupiedFactory
/// </summary>
public RoomOnToDefaultSourceWhenOccupiedFactory()
{
TypeNames = new List<string>() { "roomonwhenoccupancydetectedfeature" };

View File

@@ -53,6 +53,9 @@ namespace PepperDash.Essentials.Core
private bool _isActive;
/// <summary>
/// Gets or sets IsActive
/// </summary>
[JsonProperty("isActive")]
public bool IsActive
{
@@ -69,16 +72,20 @@ namespace PepperDash.Essentials.Core
}
}
[JsonIgnore]
/// <summary>
/// Gets or sets the IsActiveFeedback
/// </summary>
[JsonIgnore]
public BoolFeedback IsActiveFeedback { get; private set; }
private List<DeviceActionWrapper> activationActions;
private List<DeviceActionWrapper> deactivationActions;
/// <summary>
/// Constructor for RoomCombinationScenario
/// </summary>
/// <param name="config">config of the room combine scenario</param>
public RoomCombinationScenario(RoomCombinationScenarioConfig config)
{
Key = config.Key;
@@ -98,6 +105,10 @@ namespace PepperDash.Essentials.Core
IsActiveFeedback = new BoolFeedback(() => _isActive);
}
/// <summary>
/// Activates the scenario
/// </summary>
/// <returns></returns>
public async Task Activate()
{
this.LogInformation("Activating Scenario {name} with {activationActionCount} action(s) defined", Name, activationActions.Count);
@@ -116,6 +127,10 @@ namespace PepperDash.Essentials.Core
IsActive = true;
}
/// <summary>
/// Deactivates the scenario
/// </summary>
/// <returns></returns>
public async Task Deactivate()
{
this.LogInformation("Deactivating Scenario {name} with {deactivationActionCount} action(s) defined", Name, deactivationActions.Count);

View File

@@ -9,6 +9,9 @@ namespace PepperDash.Essentials.Core
/// </summary>
public class EssentialsRoomEmergencyContactClosure : EssentialsRoomEmergencyBase, IEssentialsRoomEmergency
{
/// <summary>
/// Event fired when emergency state changes
/// </summary>
public event EventHandler<EventArgs> EmergencyStateChange;
IEssentialsRoom Room;
@@ -20,6 +23,12 @@ namespace PepperDash.Essentials.Core
/// </summary>
public bool InEmergency { get; private set; }
/// <summary>
/// Constructor for EssentialsRoomEmergencyContactClosure
/// </summary>
/// <param name="key">device key</param>
/// <param name="config">emergency device config</param>
/// <param name="room">the room associated with this emergency contact closure</param>
public EssentialsRoomEmergencyContactClosure(string key, EssentialsRoomEmergencyConfig config, IEssentialsRoom room) :
base(key)
{
@@ -95,8 +104,14 @@ namespace PepperDash.Essentials.Core
/// </summary>
public interface IEssentialsRoomEmergency
{
/// <summary>
/// Event fired when emergency state changes
/// </summary>
event EventHandler<EventArgs> EmergencyStateChange;
/// <summary>
/// Gets or sets the InEmergency
/// </summary>
bool InEmergency { get; }
}
}

View File

@@ -29,7 +29,14 @@ namespace PepperDash.Essentials.Core
/// </summary>
public event EventHandler<EventArgs> RoomOccupancyIsSet;
/// <summary>
/// Gets or sets the IsWarmingUpFeedback
/// </summary>
public BoolFeedback IsWarmingUpFeedback { get; private set; }
/// <summary>
/// Gets or sets the IsCoolingDownFeedback
/// </summary>
public BoolFeedback IsCoolingDownFeedback { get; private set; }
/// <summary>
@@ -37,10 +44,19 @@ namespace PepperDash.Essentials.Core
/// </summary>
public IOccupancyStatusProvider RoomOccupancy { get; protected set; }
/// <summary>
/// Gets or sets the OccupancyStatusProviderIsRemote
/// </summary>
public bool OccupancyStatusProviderIsRemote { get; private set; }
/// <summary>
/// Gets or sets the EnvironmentalControlDevices
/// </summary>
public List<EssentialsDevice> EnvironmentalControlDevices { get; protected set; }
/// <summary>
/// Indicates if the room has any environmental control devices
/// </summary>
public bool HasEnvironmentalControlDevices
{
get
@@ -49,7 +65,14 @@ namespace PepperDash.Essentials.Core
}
}
/// <summary>
/// Gets or sets the IsWarmingFeedbackFunc
/// </summary>
protected abstract Func<bool> IsWarmingFeedbackFunc { get; }
/// <summary>
/// Gets or sets the IsCoolingFeedbackFunc
/// </summary>
protected abstract Func<bool> IsCoolingFeedbackFunc { get; }
/// <summary>
@@ -62,6 +85,9 @@ namespace PepperDash.Essentials.Core
/// </summary>
public IMobileControlRoomMessenger MobileControlRoomBridge { get; private set; }
/// <summary>
/// The config name of the default source list
/// </summary>
protected const string _defaultListKey = "default";
/// <summary>
@@ -69,6 +95,10 @@ namespace PepperDash.Essentials.Core
/// </summary>
///
private string _sourceListKey;
/// <summary>
/// Gets or sets the SourceListKey
/// </summary>
public string SourceListKey {
get
{
@@ -91,6 +121,10 @@ namespace PepperDash.Essentials.Core
}
private string _destinationListKey;
/// <summary>
/// Gets or sets the DestinationListKey
/// </summary>
public string DestinationListKey
{
get
@@ -114,6 +148,10 @@ namespace PepperDash.Essentials.Core
}
private string _audioControlPointListKey;
/// <summary>
/// Gets or sets the AudioControlPointListKey
/// </summary>
public string AudioControlPointListKey
{
get
@@ -137,6 +175,10 @@ namespace PepperDash.Essentials.Core
}
private string _cameraListKey;
/// <summary>
/// Gets or sets the CameraListKey
/// </summary>
public string CameraListKey
{
get
@@ -165,16 +207,33 @@ namespace PepperDash.Essentials.Core
public SecondsCountdownTimer ShutdownPromptTimer { get; private set; }
/// <summary>
///
/// Gets or sets the ShutdownPromptSeconds
/// </summary>
public int ShutdownPromptSeconds { get; set; }
/// <summary>
/// Gets or sets the ShutdownVacancySeconds
/// </summary>
public int ShutdownVacancySeconds { get; set; }
/// <summary>
/// Gets or sets the ShutdownType
/// </summary>
public eShutdownType ShutdownType { get; private set; }
/// <summary>
/// Gets or sets the Emergency
/// </summary>
public EssentialsRoomEmergencyBase Emergency { get; set; }
/// <summary>
/// Gets or sets the MicrophonePrivacy
/// </summary>
public Core.Privacy.MicrophonePrivacyController MicrophonePrivacy { get; set; }
/// <summary>
/// Gets or sets the LogoUrlLightBkgnd
/// </summary>
public string LogoUrlLightBkgnd { get; set; }
/// <summary>
@@ -182,6 +241,9 @@ namespace PepperDash.Essentials.Core
/// </summary>
public string LogoUrlDarkBkgnd { get; set; }
/// <summary>
/// Gets or sets the RoomVacancyShutdownTimer
/// </summary>
protected SecondsCountdownTimer RoomVacancyShutdownTimer { get; private set; }
/// <summary>
@@ -204,6 +266,9 @@ namespace PepperDash.Essentials.Core
/// </summary>
protected abstract Func<bool> OnFeedbackFunc { get; }
/// <summary>
/// Gets or sets the SavedVolumeLevels
/// </summary>
protected Dictionary<IBasicVolumeWithFeedback, uint> SavedVolumeLevels = new Dictionary<IBasicVolumeWithFeedback, uint>();
/// <summary>
@@ -211,7 +276,10 @@ namespace PepperDash.Essentials.Core
/// </summary>
public bool ZeroVolumeWhenSwtichingVolumeDevices { get; private set; }
/// <summary>
/// Constructor for EssentialsRoomBase
/// </summary>
/// <param name="config">config of the device</param>
public EssentialsRoomBase(DeviceConfig config)
: base(config)
{
@@ -283,6 +351,10 @@ namespace PepperDash.Essentials.Core
}
}
/// <summary>
/// Sets the DestinationListKey property to the passed in value or the default if no value passed in
/// </summary>
/// <param name="destinationListKey">key of the destination list object</param>
protected void SetDestinationListKey(string destinationListKey)
{
if (!string.IsNullOrEmpty(destinationListKey))
@@ -396,6 +468,7 @@ namespace PepperDash.Essentials.Core
/// Sets the object to be used as the IOccupancyStatusProvider for the room. Can be an Occupancy Aggregator or a specific device
/// </summary>
/// <param name="statusProvider"></param>
/// <param name="timeoutMinutes"></param>
public void SetRoomOccupancy(IOccupancyStatusProvider statusProvider, int timeoutMinutes)
{
if (statusProvider == null)
@@ -479,16 +552,45 @@ namespace PepperDash.Essentials.Core
/// </summary>
public enum eShutdownType
{
/// <summary>
/// No shutdown in progress
/// </summary>
None = 0,
/// <summary>
/// Manual shutdown initiated
/// </summary>
External,
/// <summary>
/// Vacancy based shutdown
/// </summary>
Manual,
/// <summary>
/// Shutdown due to room vacancy
/// </summary>
Vacancy
}
/// <summary>
/// Enumeration of eVacancyMode values
/// </summary>
public enum eVacancyMode
{
/// <summary>
/// No vacancy detected
/// </summary>
None = 0,
/// <summary>
/// InInitialVacancy - countdown to warning
/// </summary>
InInitialVacancy,
/// <summary>
/// InShutdownWarning - countdown to shutdown
/// </summary>
InShutdownWarning
}
@@ -497,15 +599,33 @@ namespace PepperDash.Essentials.Core
/// </summary>
public enum eWarmingCoolingMode
{
/// <summary>
/// None
/// </summary>
None,
/// <summary>
/// Warming
/// </summary>
Warming,
/// <summary>
/// Cooling
/// </summary>
Cooling
}
/// <summary>
/// Base class for room emergency implementations
/// </summary>
public abstract class EssentialsRoomEmergencyBase : IKeyed
{
public string Key { get; private set; }
/// <summary>
/// Constructor for EssentialsRoomEmergencyBase
/// </summary>
/// <param name="key">key of the room</param>
public EssentialsRoomEmergencyBase(string key)
{
Key = key;

View File

@@ -17,34 +17,95 @@ namespace PepperDash.Essentials.Core
/// </summary>
public interface IEssentialsRoom : IKeyName, IReconfigurableDevice, IRunDefaultPresentRoute, IEnvironmentalControls
{
/// <summary>
/// Gets the PowerFeedback
/// </summary>
BoolFeedback OnFeedback { get; }
/// <summary>
/// Gets the IsOccupiedFeedback
/// </summary>
BoolFeedback IsWarmingUpFeedback { get; }
/// <summary>
/// Gets the IsCoolingDownFeedback
/// </summary>
BoolFeedback IsCoolingDownFeedback { get; }
/// <summary>
/// Gets a value indicating whether mobile control is enabled for this room
/// </summary>
bool IsMobileControlEnabled { get; }
/// <summary>
/// Gets the MobileControlRoomBridge
/// </summary>
IMobileControlRoomMessenger MobileControlRoomBridge { get; }
/// <summary>
/// Gets the SourceListKey
/// </summary>
string SourceListKey { get; }
/// <summary>
/// Gets the DestinationListKey
/// </summary>
string DestinationListKey { get; }
/// <summary>
/// Gets the AudioControlPointListKey
/// </summary>
string AudioControlPointListKey { get; }
/// <summary>
/// Gets the CameraListKey
/// </summary>
string CameraListKey { get; }
/// <summary>
/// Gets the ShutdownPromptTimer
/// </summary>
SecondsCountdownTimer ShutdownPromptTimer { get; }
/// <summary>
/// Gets the ShutdownVacancyTimer
/// </summary>
int ShutdownPromptSeconds { get; }
/// <summary>
/// Gets the ShutdownVacancySeconds
/// </summary>
int ShutdownVacancySeconds { get; }
/// <summary>
/// Gets the ShutdownType
/// </summary>
eShutdownType ShutdownType { get; }
/// <summary>
/// Gets the LogoUrlLightBkgnd
/// </summary>
string LogoUrlLightBkgnd { get; }
/// <summary>
/// Gets the LogoUrlDarkBkgnd
/// </summary>
string LogoUrlDarkBkgnd { get; }
/// <summary>
/// Starts the shutdown process
/// </summary>
/// <param name="type">type of shutdown event</param>
void StartShutdown(eShutdownType type);
/// <summary>
/// Shuts down the room
/// </summary>
void Shutdown();
/// <summary>
/// Powers on the room to either the default source or the last source used
/// </summary>
void PowerOnToDefaultOrLastSource();
}

View File

@@ -9,10 +9,21 @@ namespace PepperDash.Essentials.Core
/// </summary>
public interface IRoomEventSchedule
{
/// <summary>
/// Adds or updates a scheduled event
/// </summary>
/// <param name="eventConfig"></param>
void AddOrUpdateScheduledEvent(ScheduledEventConfig eventConfig);
/// <summary>
/// Removes a scheduled event by its key
/// </summary>
/// <returns></returns>
List<ScheduledEventConfig> GetScheduledEvents();
/// <summary>
/// Removes a scheduled event by its key
/// </summary>
event EventHandler<ScheduledEventEventArgs> ScheduledEventsChanged;
}

View File

@@ -11,6 +11,9 @@ namespace PepperDash.Essentials.Core
/// </summary>
public interface IHasInCallFeedback
{
/// <summary>
/// Gets the InCallFeedback
/// </summary>
BoolFeedback InCallFeedback { get; }
}
@@ -19,6 +22,9 @@ namespace PepperDash.Essentials.Core
/// </summary>
public interface IHasDefaultDisplay
{
/// <summary>
/// Gets the DefaultDisplay
/// </summary>
IRoutingSink DefaultDisplay { get; }
}
@@ -36,8 +42,19 @@ namespace PepperDash.Essentials.Core
/// </summary>
public interface IRunRouteAction
{
/// <summary>
/// Runs a route action
/// </summary>
/// <param name="routeKey"></param>
/// <param name="sourceListKey"></param>
void RunRouteAction(string routeKey, string sourceListKey);
/// <summary>
/// Runs a route action with a success callback
/// </summary>
/// <param name="routeKey"></param>
/// <param name="sourceListKey"></param>
/// <param name="successCallback"></param>
void RunRouteAction(string routeKey, string sourceListKey, Action successCallback);
}
@@ -46,6 +63,12 @@ namespace PepperDash.Essentials.Core
/// </summary>
public interface IRunDirectRouteAction
{
/// <summary>
/// Runs a direct route
/// </summary>
/// <param name="sourceKey"></param>
/// <param name="destinationKey"></param>
/// <param name="type"></param>
void RunDirectRoute(string sourceKey, string destinationKey, eRoutingSignalType type = eRoutingSignalType.AudioVideo);
}
@@ -54,8 +77,14 @@ namespace PepperDash.Essentials.Core
/// </summary>
public interface IHasMatrixRouting
{
/// <summary>
/// Gets the MatrixRoutingDeviceKey
/// </summary>
string MatrixRoutingDeviceKey { get; }
/// <summary>
/// Gets the EndpointKeys
/// </summary>
List<string> EndpointKeys { get; }
}
@@ -64,6 +93,9 @@ namespace PepperDash.Essentials.Core
/// </summary>
public interface IHasRoutingEndpoints
{
/// <summary>
/// Gets the EndpointKeys
/// </summary>
List<string> EndpointKeys { get; }
}
@@ -72,10 +104,21 @@ namespace PepperDash.Essentials.Core
/// </summary>
public interface IShutdownPromptTimer
{
/// <summary>
/// Gets the ShutdownPromptTimer
/// </summary>
SecondsCountdownTimer ShutdownPromptTimer { get; }
/// <summary>
/// Gets the ShutdownPromptSeconds
/// </summary>
/// <param name="seconds">number of seconds to set</param>
void SetShutdownPromptSeconds(int seconds);
/// <summary>
/// Starts the shutdown process
/// </summary>
/// <param name="type">type of shutdown event</param>
void StartShutdown(eShutdownType type);
}
@@ -84,14 +127,32 @@ namespace PepperDash.Essentials.Core
/// </summary>
public interface ITechPassword
{
/// <summary>
/// Event fired when tech password validation result is available
/// </summary>
event EventHandler<TechPasswordEventArgs> TechPasswordValidateResult;
/// <summary>
/// Event fired when tech password is changed
/// </summary>
event EventHandler<EventArgs> TechPasswordChanged;
/// <summary>
/// Gets the TechPasswordLength
/// </summary>
int TechPasswordLength { get; }
/// <summary>
/// Validates the tech password
/// </summary>
/// <param name="password">The tech password to validate</param>
void ValidateTechPassword(string password);
/// <summary>
/// Sets the tech password
/// </summary>
/// <param name="oldPassword">The current tech password</param>
/// <param name="newPassword">The new tech password to set</param>
void SetTechPassword(string oldPassword, string newPassword);
}
@@ -105,6 +166,10 @@ namespace PepperDash.Essentials.Core
/// </summary>
public bool IsValid { get; private set; }
/// <summary>
/// Constructor for TechPasswordEventArgs
/// </summary>
/// <param name="isValid"></param>
public TechPasswordEventArgs(bool isValid)
{
IsValid = isValid;
@@ -116,6 +181,10 @@ namespace PepperDash.Essentials.Core
/// </summary>
public interface IRunDefaultPresentRoute
{
/// <summary>
/// Runs the default present route
/// </summary>
/// <returns></returns>
bool RunDefaultPresentRoute();
}
@@ -124,6 +193,10 @@ namespace PepperDash.Essentials.Core
/// </summary>
public interface IRunDefaultCallRoute : IRunDefaultPresentRoute
{
/// <summary>
/// Runs the default call route
/// </summary>
/// <returns></returns>
bool RunDefaultCallRoute();
}
@@ -132,24 +205,59 @@ namespace PepperDash.Essentials.Core
/// </summary>
public interface IEnvironmentalControls
{
/// <summary>
/// Gets the EnvironmentalControlDevices
/// </summary>
List<EssentialsDevice> EnvironmentalControlDevices { get; }
/// <summary>
/// Gets a value indicating whether the room has environmental control devices
/// </summary>
bool HasEnvironmentalControlDevices { get; }
}
/// <summary>
/// Defines the contract for IRoomOccupancy
/// </summary>
public interface IRoomOccupancy : IKeyed
{
/// <summary>
/// Gets the RoomOccupancy
/// </summary>
IOccupancyStatusProvider RoomOccupancy { get; }
/// <summary>
/// Gets a value indicating whether the OccupancyStatusProviderIsRemote
/// </summary>
bool OccupancyStatusProviderIsRemote { get; }
/// <summary>
/// Sets the room occupancy
/// </summary>
/// <param name="statusProvider"></param>
/// <param name="timeoutMinutes"></param>
void SetRoomOccupancy(IOccupancyStatusProvider statusProvider, int timeoutMinutes);
/// <summary>
/// Called when the room has been vacated for the timeout period
/// </summary>
/// <param name="o"></param>
void RoomVacatedForTimeoutPeriod(object o);
/// <summary>
/// Starts the room vacancy timer
/// </summary>
/// <param name="mode">vacancy mode</param>
void StartRoomVacancyTimer(eVacancyMode mode);
/// <summary>
/// Gets the VacancyMode
/// </summary>
eVacancyMode VacancyMode { get; }
/// <summary>
/// Event fired when room occupancy is set
/// </summary>
event EventHandler<EventArgs> RoomOccupancyIsSet;
}
@@ -158,6 +266,9 @@ namespace PepperDash.Essentials.Core
/// </summary>
public interface IEmergency
{
/// <summary>
/// Gets the Emergency
/// </summary>
EssentialsRoomEmergencyBase Emergency { get; }
}
@@ -166,6 +277,9 @@ namespace PepperDash.Essentials.Core
/// </summary>
public interface IMicrophonePrivacy
{
/// <summary>
/// Gets the MicrophonePrivacy
/// </summary>
Core.Privacy.MicrophonePrivacyController MicrophonePrivacy { get; }
}
@@ -174,6 +288,9 @@ namespace PepperDash.Essentials.Core
/// </summary>
public interface IHasAccessoryDevices : IKeyName
{
/// <summary>
/// Gets the AccessoryDeviceKeys
/// </summary>
List<string> AccessoryDeviceKeys { get; }
}
@@ -182,6 +299,9 @@ namespace PepperDash.Essentials.Core
/// </summary>
public interface IHasCiscoNavigatorTouchpanel
{
/// <summary>
/// Gets the CiscoNavigatorTouchpanelKey
/// </summary>
string CiscoNavigatorTouchpanelKey { get; }
}
}

View File

@@ -12,33 +12,54 @@ namespace PepperDash.Essentials.Core
{
//***************************************************************************************************
/// <summary>
/// Abstract base class for Room
/// </summary>
public abstract class Room : Device, IHasFeedback
{
/// <summary>
/// Gets or sets the RoomIsOnFeedback
/// </summary>
public abstract BoolFeedback RoomIsOnFeedback { get; protected set; }
/// <summary>
/// Gets or sets the IsCoolingDownFeedback
/// </summary>
public abstract BoolFeedback IsCoolingDownFeedback { get; protected set; }
/// <summary>
/// Gets or sets the IsWarmingUpFeedback
/// </summary>
public abstract BoolFeedback IsWarmingUpFeedback { get; protected set; }
// In concrete classes, these should be computed from the relevant devices
/// <summary>
/// Gets or sets the CooldownTime
/// </summary>
/// <inheritdoc />
/// <summary>
/// Gets or sets the CooldownTime
/// </summary>
/// <inheritdoc />
public virtual uint CooldownTime { get { return 10000; } }
/// <summary>
/// Gets or sets the WarmupTime
/// </summary>
/// <inheritdoc />
/// <summary>
/// Gets or sets the WarmupTime
/// </summary>
/// <inheritdoc />
public virtual uint WarmupTime { get { return 5000; } }
/// <summary>
/// Gets or sets the Description
/// </summary>
/// <summary>
/// Gets or sets the Description
/// </summary>
public string Description { get; set; }
/// <summary>
/// Gets or sets the HelpMessage
/// </summary>
/// <summary>
/// Gets or sets the HelpMessage
/// </summary>
public string HelpMessage { get; set; }
/// <summary>
/// Room Constructor
/// </summary>
/// <param name="key">room key</param>
/// <param name="name">room name</param>
public Room(string key, string name)
: base(key, name)
{
@@ -59,6 +80,9 @@ namespace PepperDash.Essentials.Core
#region IDeviceWithOutputs Members
/// <summary>
/// Gets the Feedbacks
/// </summary>
public virtual FeedbackCollection<Feedback> Feedbacks
{
get

View File

@@ -13,6 +13,9 @@ namespace PepperDash.Essentials.Core
/// </summary>
public interface IOccupancyStatusProvider
{
/// <summary>
/// Gets the RoomIsOccupiedFeedback
/// </summary>
BoolFeedback RoomIsOccupiedFeedback { get; }
}
}

View File

@@ -326,6 +326,8 @@ namespace PepperDash.Essentials.Core
/// <param name="signalType">This recursive function should not be called with AudioVideo</param>
/// <param name="cycle">Just an informational counter</param>
/// <param name="routeTable">The RouteDescriptor being populated as the route is discovered</param>
/// <param name="outputPortToUse">The RoutingOutputPort to use for the route</param>
/// <param name="sourcePort">The specific source output port to use (optional)</param>
/// <returns>true if source is hit</returns>
private static bool GetRouteToSource(this IRoutingInputs destination, IRoutingOutputs source,
RoutingOutputPort outputPortToUse, List<IRoutingInputsOutputs> alreadyCheckedDevices,

View File

@@ -12,8 +12,14 @@ namespace PepperDash.Essentials.Core.Routing
/// </summary>
public interface IVideoSync : IKeyed
{
/// <summary>
/// Gets whether or not video sync is detected
/// </summary>
bool VideoSyncDetected { get; }
/// <summary>
/// Event raised when video sync changes
/// </summary>
event EventHandler VideoSyncChanged;
}
}

View File

@@ -7,9 +7,22 @@ namespace PepperDash.Essentials.Core.Routing
/// </summary>
public interface IMatrixRouting
{
/// <summary>
/// Gets the input slots
/// </summary>
Dictionary<string, IRoutingInputSlot> InputSlots { get; }
/// <summary>
/// Gets the output slots
/// </summary>
Dictionary<string, IRoutingOutputSlot> OutputSlots { get; }
/// <summary>
/// Routes the specified input slot to the specified output slot for the specified signal type
/// </summary>
/// <param name="inputSlotKey">key of the input slot</param>
/// <param name="outputSlotKey">key of the output slot</param>
/// <param name="type">signal type</param>
void Route(string inputSlotKey, string outputSlotKey, eRoutingSignalType type);
}
}

View File

@@ -5,6 +5,9 @@
/// </summary>
public interface IRmcRouting : IRoutingNumeric
{
/// <summary>
/// Feedback for the current Audio/Video source as a number
/// </summary>
IntFeedback AudioVideoSourceNumericFeedback { get; }
}
}

View File

@@ -11,6 +11,12 @@ namespace PepperDash.Essentials.Core
/// </summary>
public interface IRouting : IRoutingInputsOutputs
{
/// <summary>
/// Executes a switch on the device
/// </summary>
/// <param name="inputSelector">input selector</param>
/// <param name="outputSelector">output selector</param>
/// <param name="signalType">type of signal</param>
void ExecuteSwitch(object inputSelector, object outputSelector, eRoutingSignalType signalType);
}

View File

@@ -10,6 +10,9 @@ namespace PepperDash.Essentials.Core
/// </summary>
public interface IRoutingFeedback : IKeyName
{
/// <summary>
/// Event raised when a numeric switch changes
/// </summary>
event EventHandler<RoutingNumericEventArgs> NumericSwitchChange;
//void OnSwitchChange(RoutingNumericEventArgs e);
}

View File

@@ -17,6 +17,9 @@ namespace PepperDash.Essentials.Core
/// </summary>
public interface IRoutingHasVideoInputSyncFeedbacks
{
/// <summary>
/// Video Input Sync Feedbacks
/// </summary>
FeedbackCollection<BoolFeedback> VideoInputSyncFeedbacks { get; }
}
}

View File

@@ -5,6 +5,9 @@
/// </summary>
public interface IRoutingInputSlot: IRoutingSlot, IOnline, IVideoSync
{
/// <summary>
/// Gets the Tx device key
/// </summary>
string TxDeviceKey { get; }
}
}

View File

@@ -8,6 +8,9 @@ namespace PepperDash.Essentials.Core
/// </summary>
public interface IRoutingInputs : IKeyed
{
/// <summary>
/// Collection of Input Ports
/// </summary>
RoutingPortCollection<RoutingInputPort> InputPorts { get; }
}

View File

@@ -5,6 +5,12 @@
/// </summary>
public interface IRoutingNumeric : IRouting
{
/// <summary>
/// Executes a numeric switch on the device
/// </summary>
/// <param name="input">input selector</param>
/// <param name="output">output selector</param>
/// <param name="type">type of signal</param>
void ExecuteNumericSwitch(ushort input, ushort output, eRoutingSignalType type);
}
}

View File

@@ -8,10 +8,19 @@ namespace PepperDash.Essentials.Core.Routing
/// </summary>
public interface IRoutingOutputSlot : IRoutingSlot
{
/// <summary>
/// Event raised when output slot changes
/// </summary>
event EventHandler OutputSlotChanged;
/// <summary>
/// Gets the Rx device key
/// </summary>
string RxDeviceKey { get; }
/// <summary>
/// Gets the current routes
/// </summary>
Dictionary<eRoutingSignalType, IRoutingInputSlot> CurrentRoutes { get; }
}
}

View File

@@ -9,6 +9,9 @@ namespace PepperDash.Essentials.Core
/// </summary>
public interface IRoutingOutputs : IKeyed
{
/// <summary>
/// Collection of Output Ports
/// </summary>
RoutingPortCollection<RoutingOutputPort> OutputPorts { get; }
}

View File

@@ -12,6 +12,10 @@ namespace PepperDash.Essentials.Core
/// </summary>
public interface IRoutingSinkWithSwitching : IRoutingSink
{
/// <summary>
/// Executes a switch on the device
/// </summary>
/// <param name="inputSelector">input selector</param>
void ExecuteSwitch(object inputSelector);
}
@@ -20,6 +24,9 @@ namespace PepperDash.Essentials.Core
/// </summary>
public interface IRoutingSinkWithSwitchingWithInputPort:IRoutingSinkWithSwitching, IRoutingSinkWithInputPort
{
/// <summary>
/// Event raised when the input changes
/// </summary>
event InputChangedEventHandler InputChanged;
}

View File

@@ -12,8 +12,14 @@ namespace PepperDash.Essentials.Core.Routing
/// </summary>
public interface IRoutingSlot:IKeyName
{
/// <summary>
/// Gets the slot number
/// </summary>
int SlotNumber { get; }
/// <summary>
/// Gets the supported signal types
/// </summary>
eRoutingSignalType SupportedSignalTypes { get; }
}
}

View File

@@ -11,6 +11,9 @@ namespace PepperDash.Essentials.Core
/// </summary>
public class RouteDescriptorCollection
{
/// <summary>
/// DefaultCollection static property
/// </summary>
public static RouteDescriptorCollection DefaultCollection
{
get
@@ -57,6 +60,12 @@ namespace PepperDash.Essentials.Core
return RouteDescriptors.FirstOrDefault(rd => rd.Destination == destination);
}
/// <summary>
/// Gets the RouteDescriptor for a destination and input port key. Returns null if no matching RouteDescriptor exists.
/// </summary>
/// <param name="destination"></param>
/// <param name="inputPortKey"></param>
/// <returns></returns>
public RouteDescriptor GetRouteDescriptorForDestinationAndInputPort(IRoutingInputs destination, string inputPortKey)
{
Debug.LogMessage(LogEventLevel.Information, "Getting route descriptor for '{destination}':'{inputPortKey}'", destination?.Key ?? null, string.IsNullOrEmpty(inputPortKey) ? "auto" : inputPortKey);

View File

@@ -21,6 +21,9 @@ namespace PepperDash.Essentials.Core
/// <param name="selector">An object used to refer to this port in the IRouting device's ExecuteSwitch method.
/// May be string, number, whatever</param>
/// <param name="parent">The IRoutingInputs object this lives on</param>
/// <param name="key">key of the port</param>
/// <param name="type">type of the routing signal</param>
/// <param name="connType">connection type of the port</param>
public RoutingInputPort(string key, eRoutingSignalType type, eRoutingPortConnectionType connType,
object selector, IRoutingInputs parent)
: this (key, type, connType, selector, parent, false)
@@ -32,6 +35,12 @@ namespace PepperDash.Essentials.Core
/// the ports that link a DM card to a DM matrix bus
/// </summary>
/// <param name="isInternal">true for internal ports</param>
/// <param name="key">key of the port</param>
/// <param name="type">type of the routing signal</param>
/// <param name="connType">connection type of the port</param>
/// <param name="selector">An object used to refer to this port in the IRouting device's ExecuteSwitch method.
/// May be string, number, whatever</param>
/// <param name="parent">The IRoutingInputs object this lives on</param>
public RoutingInputPort(string key, eRoutingSignalType type, eRoutingPortConnectionType connType,
object selector, IRoutingInputs parent, bool isInternal)
: base(key, type, connType, selector, isInternal)

View File

@@ -5,7 +5,99 @@
/// </summary>
public enum eRoutingPortConnectionType
{
None, BackplaneOnly, DisplayPort, Dvi, Hdmi, Rgb, Vga, LineAudio, DigitalAudio, Sdi,
Composite, Component, DmCat, DmMmFiber, DmSmFiber, Speaker, Streaming, UsbC, HdBaseT
/// <summary>
/// No connection type
/// </summary>
None,
/// <summary>
/// Backplane only connection
/// </summary>
BackplaneOnly,
/// <summary>
/// Connection via cable
/// </summary>
DisplayPort,
/// <summary>
/// DVI connection
/// </summary>
Dvi,
/// <summary>
/// HDMI connection
/// </summary>
Hdmi,
/// <summary>
/// RGB connection
/// </summary>
Rgb,
/// <summary>
/// VGA connection
/// </summary>
Vga,
/// <summary>
/// Line audio connection
/// </summary>
LineAudio,
/// <summary>
/// Digital audio connection
/// </summary>
DigitalAudio,
/// <summary>
/// SDI connection
/// </summary>
Sdi,
/// <summary>
/// Composite connection
/// </summary>
Composite,
/// <summary>
/// Component connection
/// </summary>
Component,
/// <summary>
/// DM CAT connection
/// </summary>
DmCat,
/// <summary>
/// DM MM Fiber connection
/// </summary>
DmMmFiber,
/// <summary>
/// DM SM Fiber connection
/// </summary>
DmSmFiber,
/// <summary>
/// Speaker connection
/// </summary>
Speaker,
/// <summary>
/// Microphone connection
/// </summary>
Streaming,
/// <summary>
/// USB-C connection
/// </summary>
UsbC,
/// <summary>
/// HDBaseT connection
/// </summary>
HdBaseT
}
}

View File

@@ -3,17 +3,40 @@
namespace PepperDash.Essentials.Core
{
[Flags]
/// <summary>
/// Enumeration of eRoutingSignalType values
/// </summary>
[Flags]
public enum eRoutingSignalType
{
/// <summary>
/// Audio signal type
/// </summary>
Audio = 1,
/// <summary>
/// Video signal type
/// </summary>
Video = 2,
/// <summary>
/// AudioVideo signal type
/// </summary>
AudioVideo = Audio | Video,
/// <summary>
/// Control signal type
/// </summary>
UsbOutput = 8,
/// <summary>
/// Control signal type
/// </summary>
UsbInput = 16,
/// <summary>
/// Secondary audio signal type
/// </summary>
SecondaryAudio = 32
}
}