From cb4a8640f0a8aecb4fee5d08ba69f0441fab1f66 Mon Sep 17 00:00:00 2001 From: Andrew Welker Date: Mon, 29 Jun 2020 11:31:35 -0600 Subject: [PATCH] Got things moved successfully --- .../EssentialsEnvironmentDriver.cs | 2 +- .../Essentials/EssentialsHeaderDriver.cs | 3 +- .../EssentialsHuddleTechPageDriver.cs | 2 +- ...entialsHuddleVtc1PanelAvFunctionsDriver.cs | 3 +- .../VC/EssentialsVideoCodecUiDriver.cs | 3 +- .../Codec/CodecActiveCallItem.cs | 5 - .../Codec/eCodecCallDirection.cs | 8 +- .../Codec/eCodecCallStatus.cs | 8 +- .../Codec/eCodecCallType.cs | 8 +- .../Codec/eMeetingPrivacy.cs | 8 +- .../Codec/iHasCallHistory.cs | 7 +- .../DeviceTypeInterfaces/IHasAudioCodec.cs | 4 +- .../Devices/AudioCodecBase.cs | 99 +++ ...lsHuddleSpaceFusionSystemControllerBase.cs | 2 +- .../Fusion/FusionCustomPropertiesBridge.cs | 1 + .../PepperDash_Essentials_Core.csproj | 1 + .../EssentialsNDisplayRoomPropertiesConfig.cs | 2 +- .../Room/Config/EssentialsRoomConfig.cs | 4 +- .../Room/Types/EssentialsDualDisplayRoom.cs | 650 +----------------- .../Room/Types/EssentialsHuddleSpaceRoom.cs | 3 +- .../Room/Types/EssentialsHuddleVtc1Room.cs | 7 +- .../Room/Types/EssentialsNDisplayRoomBase.cs | 1 + .../AudioCodec/MockAC/MockAC.cs | 1 + .../Essentials Devices Common.csproj | 5 - .../SoftCodec/BlueJeansPc.cs | 1 + .../VideoCodec/MockVC/MockVC.cs | 1 + .../VideoCodec/MockVC/MockVCCamera.cs | 1 + .../VideoCodec/ZoomRoom/ZoomRoom.cs | 3 +- 28 files changed, 143 insertions(+), 700 deletions(-) create mode 100644 essentials-framework/Essentials Core/PepperDashEssentialsBase/Devices/AudioCodecBase.cs diff --git a/PepperDashEssentials/UIDrivers/Environment Drivers/EssentialsEnvironmentDriver.cs b/PepperDashEssentials/UIDrivers/Environment Drivers/EssentialsEnvironmentDriver.cs index 6b908739..da980ae1 100644 --- a/PepperDashEssentials/UIDrivers/Environment Drivers/EssentialsEnvironmentDriver.cs +++ b/PepperDashEssentials/UIDrivers/Environment Drivers/EssentialsEnvironmentDriver.cs @@ -111,7 +111,7 @@ namespace PepperDash.Essentials /// /// Reads the device keys from the config and gets the devices by key /// - public void GetDevicesFromConfig(Room.Config.EssentialsEnvironmentPropertiesConfig EnvironmentPropertiesConfig) + public void GetDevicesFromConfig(Core.Rooms.Config.EssentialsEnvironmentPropertiesConfig EnvironmentPropertiesConfig) { if (EnvironmentPropertiesConfig != null) { diff --git a/PepperDashEssentials/UIDrivers/Essentials/EssentialsHeaderDriver.cs b/PepperDashEssentials/UIDrivers/Essentials/EssentialsHeaderDriver.cs index 67af1679..21c861a2 100644 --- a/PepperDashEssentials/UIDrivers/Essentials/EssentialsHeaderDriver.cs +++ b/PepperDashEssentials/UIDrivers/Essentials/EssentialsHeaderDriver.cs @@ -10,9 +10,10 @@ using Crestron.SimplSharpPro.DeviceSupport; using PepperDash.Core; using PepperDash.Essentials.Core; +using PepperDash.Essentials.Core.Devices.VideoCodec; using PepperDash.Essentials.Core.SmartObjects; using PepperDash.Essentials.Core.PageManagers; -using PepperDash.Essentials.Room.Config; +using PepperDash.Essentials.Core.Rooms.Config; using PepperDash.Essentials.Core.Devices.Codec; using PepperDash.Essentials.Devices.Common.VideoCodec; diff --git a/PepperDashEssentials/UIDrivers/EssentialsHuddle/EssentialsHuddleTechPageDriver.cs b/PepperDashEssentials/UIDrivers/EssentialsHuddle/EssentialsHuddleTechPageDriver.cs index b8e1dfd6..c973e86d 100644 --- a/PepperDashEssentials/UIDrivers/EssentialsHuddle/EssentialsHuddleTechPageDriver.cs +++ b/PepperDashEssentials/UIDrivers/EssentialsHuddle/EssentialsHuddleTechPageDriver.cs @@ -13,7 +13,7 @@ using PepperDash.Essentials.Core.Config; using PepperDash.Essentials.Core.SmartObjects; using PepperDash.Essentials.Core.Touchpanels.Keyboards; using PepperDash.Essentials.Devices.Displays; -using PepperDash.Essentials.Room.Config; +using PepperDash.Essentials.Core.Rooms.Config; namespace PepperDash.Essentials.UIDrivers { diff --git a/PepperDashEssentials/UIDrivers/EssentialsHuddleVTC/EssentialsHuddleVtc1PanelAvFunctionsDriver.cs b/PepperDashEssentials/UIDrivers/EssentialsHuddleVTC/EssentialsHuddleVtc1PanelAvFunctionsDriver.cs index a7be1c74..3e008da0 100644 --- a/PepperDashEssentials/UIDrivers/EssentialsHuddleVTC/EssentialsHuddleVtc1PanelAvFunctionsDriver.cs +++ b/PepperDashEssentials/UIDrivers/EssentialsHuddleVTC/EssentialsHuddleVtc1PanelAvFunctionsDriver.cs @@ -8,9 +8,10 @@ using Crestron.SimplSharpPro.UI; using PepperDash.Core; using PepperDash.Essentials.Core; using PepperDash.Essentials.Core.Config; +using PepperDash.Essentials.Core.Devices.VideoCodec; using PepperDash.Essentials.Core.SmartObjects; using PepperDash.Essentials.Core.PageManagers; -using PepperDash.Essentials.Room.Config; +using PepperDash.Essentials.Core.Rooms.Config; using PepperDash.Essentials.Core.Devices.Codec; using PepperDash.Essentials.Devices.Common.VideoCodec; diff --git a/PepperDashEssentials/UIDrivers/VC/EssentialsVideoCodecUiDriver.cs b/PepperDashEssentials/UIDrivers/VC/EssentialsVideoCodecUiDriver.cs index 51384139..b5ddd149 100644 --- a/PepperDashEssentials/UIDrivers/VC/EssentialsVideoCodecUiDriver.cs +++ b/PepperDashEssentials/UIDrivers/VC/EssentialsVideoCodecUiDriver.cs @@ -10,11 +10,12 @@ using Crestron.SimplSharpPro.DeviceSupport; using PepperDash.Core; using PepperDash.Essentials; using PepperDash.Essentials.Core; +using PepperDash.Essentials.Core.Devices.VideoCodec; using PepperDash.Essentials.Core.SmartObjects; using PepperDash.Essentials.Core.Touchpanels.Keyboards; using PepperDash.Essentials.Core.Devices.Codec; using PepperDash.Essentials.Devices.Common.VideoCodec; -using PepperDash.Essentials.Devices.Common.Cameras; +using PepperDash.Essentials.Devices.Core.VideoCodec; namespace PepperDash.Essentials.UIDrivers.VC { diff --git a/essentials-framework/Essentials Core/PepperDashEssentialsBase/DeviceTypeInterfaces/Codec/CodecActiveCallItem.cs b/essentials-framework/Essentials Core/PepperDashEssentialsBase/DeviceTypeInterfaces/Codec/CodecActiveCallItem.cs index f873b4cd..bba753d3 100644 --- a/essentials-framework/Essentials Core/PepperDashEssentialsBase/DeviceTypeInterfaces/Codec/CodecActiveCallItem.cs +++ b/essentials-framework/Essentials Core/PepperDashEssentialsBase/DeviceTypeInterfaces/Codec/CodecActiveCallItem.cs @@ -1,9 +1,4 @@ using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Crestron.SimplSharp; - using Newtonsoft.Json; using Newtonsoft.Json.Converters; diff --git a/essentials-framework/Essentials Core/PepperDashEssentialsBase/DeviceTypeInterfaces/Codec/eCodecCallDirection.cs b/essentials-framework/Essentials Core/PepperDashEssentialsBase/DeviceTypeInterfaces/Codec/eCodecCallDirection.cs index 54d763d3..e5099900 100644 --- a/essentials-framework/Essentials Core/PepperDashEssentialsBase/DeviceTypeInterfaces/Codec/eCodecCallDirection.cs +++ b/essentials-framework/Essentials Core/PepperDashEssentialsBase/DeviceTypeInterfaces/Codec/eCodecCallDirection.cs @@ -1,10 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Crestron.SimplSharp; - -namespace PepperDash.Essentials.Core.Devices.Codec +namespace PepperDash.Essentials.Core.Devices.Codec { public enum eCodecCallDirection diff --git a/essentials-framework/Essentials Core/PepperDashEssentialsBase/DeviceTypeInterfaces/Codec/eCodecCallStatus.cs b/essentials-framework/Essentials Core/PepperDashEssentialsBase/DeviceTypeInterfaces/Codec/eCodecCallStatus.cs index 99481814..59ff571a 100644 --- a/essentials-framework/Essentials Core/PepperDashEssentialsBase/DeviceTypeInterfaces/Codec/eCodecCallStatus.cs +++ b/essentials-framework/Essentials Core/PepperDashEssentialsBase/DeviceTypeInterfaces/Codec/eCodecCallStatus.cs @@ -1,10 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Crestron.SimplSharp; - -namespace PepperDash.Essentials.Core.Devices.Codec +namespace PepperDash.Essentials.Core.Devices.Codec { public enum eCodecCallStatus { diff --git a/essentials-framework/Essentials Core/PepperDashEssentialsBase/DeviceTypeInterfaces/Codec/eCodecCallType.cs b/essentials-framework/Essentials Core/PepperDashEssentialsBase/DeviceTypeInterfaces/Codec/eCodecCallType.cs index 829595bb..cc2ad15e 100644 --- a/essentials-framework/Essentials Core/PepperDashEssentialsBase/DeviceTypeInterfaces/Codec/eCodecCallType.cs +++ b/essentials-framework/Essentials Core/PepperDashEssentialsBase/DeviceTypeInterfaces/Codec/eCodecCallType.cs @@ -1,10 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Crestron.SimplSharp; - -namespace PepperDash.Essentials.Core.Devices.Codec +namespace PepperDash.Essentials.Core.Devices.Codec { public enum eCodecCallType diff --git a/essentials-framework/Essentials Core/PepperDashEssentialsBase/DeviceTypeInterfaces/Codec/eMeetingPrivacy.cs b/essentials-framework/Essentials Core/PepperDashEssentialsBase/DeviceTypeInterfaces/Codec/eMeetingPrivacy.cs index e687f7da..0bb0c3ab 100644 --- a/essentials-framework/Essentials Core/PepperDashEssentialsBase/DeviceTypeInterfaces/Codec/eMeetingPrivacy.cs +++ b/essentials-framework/Essentials Core/PepperDashEssentialsBase/DeviceTypeInterfaces/Codec/eMeetingPrivacy.cs @@ -1,10 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Crestron.SimplSharp; - -namespace PepperDash.Essentials.Core.Devices.Codec +namespace PepperDash.Essentials.Core.Devices.Codec { public enum eMeetingPrivacy { diff --git a/essentials-framework/Essentials Core/PepperDashEssentialsBase/DeviceTypeInterfaces/Codec/iHasCallHistory.cs b/essentials-framework/Essentials Core/PepperDashEssentialsBase/DeviceTypeInterfaces/Codec/iHasCallHistory.cs index 1a146d1a..bb5404d0 100644 --- a/essentials-framework/Essentials Core/PepperDashEssentialsBase/DeviceTypeInterfaces/Codec/iHasCallHistory.cs +++ b/essentials-framework/Essentials Core/PepperDashEssentialsBase/DeviceTypeInterfaces/Codec/iHasCallHistory.cs @@ -61,7 +61,12 @@ namespace PepperDash.Essentials.Core.Devices.Codec OnRecentCallsListChange(); } - + public void UpdateCallHistory(List newList) + { + RecentCalls = newList; + + OnRecentCallsListChange(); + } /// /// Generic call history entry, not device specific diff --git a/essentials-framework/Essentials Core/PepperDashEssentialsBase/DeviceTypeInterfaces/IHasAudioCodec.cs b/essentials-framework/Essentials Core/PepperDashEssentialsBase/DeviceTypeInterfaces/IHasAudioCodec.cs index 98f5844e..dd36fd54 100644 --- a/essentials-framework/Essentials Core/PepperDashEssentialsBase/DeviceTypeInterfaces/IHasAudioCodec.cs +++ b/essentials-framework/Essentials Core/PepperDashEssentialsBase/DeviceTypeInterfaces/IHasAudioCodec.cs @@ -1,6 +1,4 @@ -using PepperDash.Essentials.Core; - -namespace PepperDash.Essentials.Devices.Core.AudioCodec +namespace PepperDash.Essentials.Core.Devices.AudioCodec { /// /// For rooms that have audio codec diff --git a/essentials-framework/Essentials Core/PepperDashEssentialsBase/Devices/AudioCodecBase.cs b/essentials-framework/Essentials Core/PepperDashEssentialsBase/Devices/AudioCodecBase.cs new file mode 100644 index 00000000..c8a5c1ba --- /dev/null +++ b/essentials-framework/Essentials Core/PepperDashEssentialsBase/Devices/AudioCodecBase.cs @@ -0,0 +1,99 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using PepperDash.Essentials.Core.Devices.Codec; + +namespace PepperDash.Essentials.Core.Devices.AudioCodec +{ + public abstract class AudioCodecBase : EssentialsDevice, IHasDialer, IUsageTracking, IAudioCodecInfo + { + + public event EventHandler CallStatusChange; + + public AudioCodecInfo CodecInfo { get; protected set; } + + #region IUsageTracking Members + + /// + /// This object can be added by outside users of this class to provide usage tracking + /// for various services + /// + public UsageTracking UsageTracker { get; set; } + + #endregion + + /// + /// Returns true when any call is not in state Unknown, Disconnecting, Disconnected + /// + public bool IsInCall + { + get + { + bool value; + + if (ActiveCalls != null) + value = ActiveCalls.Any(c => c.IsActiveCall); + else + value = false; + return value; + } + } + + // In most cases only a single call can be active + public List ActiveCalls { get; set; } + + public AudioCodecBase(string key, string name) + : base(key, name) + { + ActiveCalls = new List(); + } + + /// + /// Helper method to fire CallStatusChange event with old and new status + /// + protected void SetNewCallStatusAndFireCallStatusChange(eCodecCallStatus newStatus, CodecActiveCallItem call) + { + call.Status = newStatus; + + OnCallStatusChange(call); + + } + + /// + /// + /// + /// + /// + /// + protected void OnCallStatusChange(CodecActiveCallItem item) + { + var handler = CallStatusChange; + if (handler != null) + handler(this, new CodecCallStatusItemChangeEventArgs(item)); + + if (UsageTracker != null) + { + if (IsInCall && !UsageTracker.UsageTrackingStarted) + UsageTracker.StartDeviceUsage(); + else if (UsageTracker.UsageTrackingStarted && !IsInCall) + UsageTracker.EndDeviceUsage(); + } + } + + #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 + } +} \ No newline at end of file diff --git a/essentials-framework/Essentials Core/PepperDashEssentialsBase/Fusion/EssentialsHuddleSpaceFusionSystemControllerBase.cs b/essentials-framework/Essentials Core/PepperDashEssentialsBase/Fusion/EssentialsHuddleSpaceFusionSystemControllerBase.cs index 39cd7d78..c46290a2 100644 --- a/essentials-framework/Essentials Core/PepperDashEssentialsBase/Fusion/EssentialsHuddleSpaceFusionSystemControllerBase.cs +++ b/essentials-framework/Essentials Core/PepperDashEssentialsBase/Fusion/EssentialsHuddleSpaceFusionSystemControllerBase.cs @@ -18,7 +18,7 @@ using PepperDash.Core; using PepperDash.Essentials; using PepperDash.Essentials.Core; using PepperDash.Essentials.Core.Config; - +using PepperDash.Essentials.Core.Rooms; namespace PepperDash.Essentials.Core.Fusion diff --git a/essentials-framework/Essentials Core/PepperDashEssentialsBase/Fusion/FusionCustomPropertiesBridge.cs b/essentials-framework/Essentials Core/PepperDashEssentialsBase/Fusion/FusionCustomPropertiesBridge.cs index 01b230f9..99ced5ea 100644 --- a/essentials-framework/Essentials Core/PepperDashEssentialsBase/Fusion/FusionCustomPropertiesBridge.cs +++ b/essentials-framework/Essentials Core/PepperDashEssentialsBase/Fusion/FusionCustomPropertiesBridge.cs @@ -10,6 +10,7 @@ using PepperDash.Core; using PepperDash.Essentials.Core; using PepperDash.Essentials.Core.Config; using PepperDash.Essentials.Core.Devices; +using PepperDash.Essentials.Core.Rooms; namespace PepperDash.Essentials.Core.Fusion { diff --git a/essentials-framework/Essentials Core/PepperDashEssentialsBase/PepperDash_Essentials_Core.csproj b/essentials-framework/Essentials Core/PepperDashEssentialsBase/PepperDash_Essentials_Core.csproj index ce3ee1ef..cbfe10df 100644 --- a/essentials-framework/Essentials Core/PepperDashEssentialsBase/PepperDash_Essentials_Core.csproj +++ b/essentials-framework/Essentials Core/PepperDashEssentialsBase/PepperDash_Essentials_Core.csproj @@ -186,6 +186,7 @@ + diff --git a/essentials-framework/Essentials Core/PepperDashEssentialsBase/Room/Config/EssentialsNDisplayRoomPropertiesConfig.cs b/essentials-framework/Essentials Core/PepperDashEssentialsBase/Room/Config/EssentialsNDisplayRoomPropertiesConfig.cs index 2d2d95c4..30d1ea38 100644 --- a/essentials-framework/Essentials Core/PepperDashEssentialsBase/Room/Config/EssentialsNDisplayRoomPropertiesConfig.cs +++ b/essentials-framework/Essentials Core/PepperDashEssentialsBase/Room/Config/EssentialsNDisplayRoomPropertiesConfig.cs @@ -10,7 +10,7 @@ namespace PepperDash.Essentials.Core.Rooms.Config /// /// /// - public class EssentialsNDisplayRoomPropertiesConfig : EssentialsConferenceRoomPropertiesConfig + public class EssentialsNDisplayRoomPropertiesConfig : EssentialsHuddleRoomPropertiesConfig { [JsonProperty("defaultAudioBehavior")] public string DefaultAudioBehavior { get; set; } diff --git a/essentials-framework/Essentials Core/PepperDashEssentialsBase/Room/Config/EssentialsRoomConfig.cs b/essentials-framework/Essentials Core/PepperDashEssentialsBase/Room/Config/EssentialsRoomConfig.cs index d2d011d3..97c93033 100644 --- a/essentials-framework/Essentials Core/PepperDashEssentialsBase/Room/Config/EssentialsRoomConfig.cs +++ b/essentials-framework/Essentials Core/PepperDashEssentialsBase/Room/Config/EssentialsRoomConfig.cs @@ -40,9 +40,9 @@ namespace PepperDash.Essentials.Core.Rooms.Config return null; } - rm = new EssentialsDualDisplayRoom(roomConfig); + //rm = new EssentialsDualDisplayRoom(); - return rm; + return null; } /// diff --git a/essentials-framework/Essentials Core/PepperDashEssentialsBase/Room/Types/EssentialsDualDisplayRoom.cs b/essentials-framework/Essentials Core/PepperDashEssentialsBase/Room/Types/EssentialsDualDisplayRoom.cs index 92422f22..f93b579e 100644 --- a/essentials-framework/Essentials Core/PepperDashEssentialsBase/Room/Types/EssentialsDualDisplayRoom.cs +++ b/essentials-framework/Essentials Core/PepperDashEssentialsBase/Room/Types/EssentialsDualDisplayRoom.cs @@ -7,654 +7,16 @@ using Newtonsoft.Json; using PepperDash.Core; using PepperDash.Essentials.Core; using PepperDash.Essentials.Core.Config; -using PepperDash.Essentials.Room.Config; +using PepperDash.Essentials.Core.Rooms; +using PepperDash.Essentials.Core.Rooms.Config; using PepperDash.Essentials.Core.Devices.Codec; -using PepperDash.Essentials.Devices.Common.VideoCodec; -using PepperDash.Essentials.Devices.Common.AudioCodec; +using PepperDash.Essentials.Core.Devices.VideoCodec; +using PepperDash.Essentials.Core.Devices.AudioCodec; namespace PepperDash.Essentials { - public class EssentialsDualDisplayRoom : EssentialsNDisplayRoomBase, IHasCurrentVolumeControls, - IRunRouteAction, IPrivacy, IRunDefaultCallRoute, IHasVideoCodec, IHasAudioCodec, IHasInCallFeedback + public class EssentialsDualDisplayRoom { - public event EventHandler CurrentVolumeDeviceChange; - - public EssentialsDualDisplayRoomPropertiesConfig PropertiesConfig { get; private set; } - - //************************ - // Call-related stuff - - public BoolFeedback InCallFeedback { get; private set; } - - /// - /// States: 0 for on hook, 1 for video, 2 for audio, 3 for telekenesis - /// - public IntFeedback CallTypeFeedback { get; private set; } - - /// - /// - /// - public BoolFeedback PrivacyModeIsOnFeedback { get; private set; } - - /// - /// When something in the room is sharing with the far end or through other means - /// - public BoolFeedback IsSharingFeedback { get; private set; } - - public IRoutingSinkWithSwitching LeftDisplay { get; private set; } - public IRoutingSinkWithSwitching RightDisplay { get; private set; } - - - protected override Func OnFeedbackFunc - { - get - { - return () => - { - var leftDisp = LeftDisplay as DisplayBase; - var rightDisp = RightDisplay as DisplayBase; - var val = leftDisp != null && leftDisp.CurrentSourceInfo != null - && leftDisp.CurrentSourceInfo.Type == eSourceListItemType.Route - && rightDisp != null && rightDisp.CurrentSourceInfo != null - && rightDisp.CurrentSourceInfo.Type == eSourceListItemType.Route; - return val; - }; - } - } - - /// - /// - /// - protected override Func IsWarmingFeedbackFunc - { - get - { - return () => - { - var leftDisp = LeftDisplay as DisplayBase; - var rightDisp = RightDisplay as DisplayBase; - if (leftDisp != null && RightDisplay != null) - return rightDisp != null && (leftDisp.IsWarmingUpFeedback.BoolValue || rightDisp.IsWarmingUpFeedback.BoolValue); - return false; - }; - } - } - - /// - /// - /// - protected override Func IsCoolingFeedbackFunc - { - get - { - return () => - { - var leftDisp = LeftDisplay as DisplayBase; - var rightDisp = RightDisplay as DisplayBase; - if (leftDisp != null && RightDisplay != null) - return rightDisp != null && (leftDisp.IsCoolingDownFeedback.BoolValue || rightDisp.IsCoolingDownFeedback.BoolValue); - return false; - }; - } - } - - public IBasicVolumeControls DefaultAudioDevice { get; private set; } - public IBasicVolumeControls DefaultVolumeControls { get; private set; } - - public VideoCodecBase VideoCodec { get; private set; } - - public AudioCodecBase AudioCodec { get; private set; } - - public bool ExcludeFromGlobalFunctions { get; set; } - - public string DefaultSourceItem { get; set; } - - public ushort DefaultVolume { get; set; } - - /// - /// If room is off, enables power on to last source. Default true - /// - public bool EnablePowerOnToLastSource { get; set; } - string _lastSourceKey; - - /// - /// Sets the volume control device, and attaches/removes InUseTrackers with "audio" - /// tag to device. - /// - public IBasicVolumeControls CurrentVolumeControls - { - get { return _currentAudioDevice; } - set - { - if (value == _currentAudioDevice) return; - - var oldDev = _currentAudioDevice; - // derigister this room from the device, if it can - if (oldDev is IInUseTracking) - (oldDev as IInUseTracking).InUseTracker.RemoveUser(this, "audio"); - var handler = CurrentVolumeDeviceChange; - if (handler != null) - CurrentVolumeDeviceChange(this, new VolumeDeviceChangeEventArgs(oldDev, value, ChangeType.WillChange)); - _currentAudioDevice = value; - if (handler != null) - CurrentVolumeDeviceChange(this, new VolumeDeviceChangeEventArgs(oldDev, value, ChangeType.DidChange)); - // register this room with new device, if it can - if (_currentAudioDevice is IInUseTracking) - (_currentAudioDevice as IInUseTracking).InUseTracker.AddUser(this, "audio"); - } - } - IBasicVolumeControls _currentAudioDevice; - - /// - /// "codecOsd" - /// - public string DefaultCodecRouteString { get { return "codecOsd"; } } - - /// - /// Temporary implementation. Returns the schedule-ready object or null if none. Fow now, - /// always returns the VideoCodec if it is capable - /// - public IHasScheduleAwareness ScheduleSource { get { return VideoCodec as IHasScheduleAwareness; } } - - readonly CCriticalSection _sourceSelectLock = new CCriticalSection(); - - public EssentialsDualDisplayRoom(DeviceConfig config) - : base(config) - { - try - { - PropertiesConfig = JsonConvert.DeserializeObject - (config.Properties.ToString()); - - var leftDisp = PropertiesConfig.Displays[eSourceListItemDestinationTypes.leftDisplay]; - if (leftDisp != null) - { - if (!string.IsNullOrEmpty(leftDisp.Key)) - { - LeftDisplay = DeviceManager.GetDeviceForKey(leftDisp.Key) as IRoutingSinkWithSwitching; - Displays.Add(eSourceListItemDestinationTypes.leftDisplay, LeftDisplay); - } - else - Debug.Console(0, this, "Unable to get LeftDisplay for Room"); - } - - var rightDisp = PropertiesConfig.Displays[eSourceListItemDestinationTypes.rightDisplay]; - if (rightDisp != null) - { - if (!string.IsNullOrEmpty(rightDisp.Key)) - { - LeftDisplay = DeviceManager.GetDeviceForKey(rightDisp.Key) as IRoutingSinkWithSwitching; - Displays.Add(eSourceListItemDestinationTypes.rightDisplay, RightDisplay); - } - else - Debug.Console(0, this, "Unable to get LeftDisplay for Room"); - } - - VideoCodec = DeviceManager.GetDeviceForKey(PropertiesConfig.VideoCodecKey) as - VideoCodecBase; - if (VideoCodec == null) - throw new ArgumentNullException("codec cannot be null"); - - AudioCodec = DeviceManager.GetDeviceForKey(PropertiesConfig.AudioCodecKey) as - AudioCodecBase; - if (AudioCodec == null) - Debug.Console(0, this, "No Audio Codec Found"); - - DefaultAudioDevice = DeviceManager.GetDeviceForKey(PropertiesConfig.DefaultAudioKey) as IBasicVolumeControls; - - Initialize(); - } - catch (Exception e) - { - Debug.Console(1, this, "Error building room \n{0}", e); - } - } - - void Initialize() - { - if (DefaultAudioDevice != null) - DefaultVolumeControls = DefaultAudioDevice; - else if (DefaultAudioDevice is IHasVolumeDevice) - DefaultVolumeControls = (DefaultAudioDevice as IHasVolumeDevice).VolumeDevice; - CurrentVolumeControls = DefaultVolumeControls; - - - var leftDisp = LeftDisplay as DisplayBase; - if (leftDisp != null) - InitializeDisplay(leftDisp); - - var rightDisp = RightDisplay as DisplayBase; - if (rightDisp != null) - InitializeDisplay(rightDisp); - - // Get Microphone Privacy object, if any - MicrophonePrivacy = EssentialsRoomConfigHelper.GetMicrophonePrivacy(PropertiesConfig, this); - - Debug.Console(2, this, "Microphone Privacy Config evaluated."); - - // Get emergency object, if any - Emergency = EssentialsRoomConfigHelper.GetEmergency(PropertiesConfig, this); - - Debug.Console(2, this, "Emergency Config evaluated."); - - // Combines call feedback from both codecs if available - InCallFeedback = new BoolFeedback(() => - { - bool inAudioCall = false; - bool inVideoCall = false; - - if (AudioCodec != null) - inAudioCall = AudioCodec.IsInCall; - - if (VideoCodec != null) - inVideoCall = VideoCodec.IsInCall; - - return inAudioCall || inVideoCall; - }); - - VideoCodec.CallStatusChange += (o, a) => InCallFeedback.FireUpdate(); - - if (AudioCodec != null) - AudioCodec.CallStatusChange += (o, a) => InCallFeedback.FireUpdate(); - - IsSharingFeedback = new BoolFeedback(() => VideoCodec.SharingContentIsOnFeedback.BoolValue); - VideoCodec.SharingContentIsOnFeedback.OutputChange += (o, a) => IsSharingFeedback.FireUpdate(); - - // link privacy to VC (for now?) - PrivacyModeIsOnFeedback = new BoolFeedback(() => VideoCodec.PrivacyModeIsOnFeedback.BoolValue); - VideoCodec.PrivacyModeIsOnFeedback.OutputChange += (o, a) => PrivacyModeIsOnFeedback.FireUpdate(); - - CallTypeFeedback = new IntFeedback(() => 0); - - SourceListKey = "default"; - EnablePowerOnToLastSource = true; - } - - void InitializeDisplay(DisplayBase disp) - { - if (disp != null) - { - // Link power, warming, cooling to display - disp.PowerIsOnFeedback.OutputChange += (o, a) => - { - if (disp.PowerIsOnFeedback.BoolValue != OnFeedback.BoolValue) - { - if (!disp.PowerIsOnFeedback.BoolValue) - disp.CurrentSourceInfo = null; - OnFeedback.FireUpdate(); - } - if (disp.PowerIsOnFeedback.BoolValue) - { - SetDefaultLevels(); - } - }; - - disp.IsWarmingUpFeedback.OutputChange += (o, a) => - { - IsWarmingUpFeedback.FireUpdate(); - if (IsWarmingUpFeedback.BoolValue) - { - return; - } - - var basicVolumeWithFeedback = CurrentVolumeControls as IBasicVolumeWithFeedback; - if (basicVolumeWithFeedback != null) - { - basicVolumeWithFeedback.SetVolume(DefaultVolume); - } - }; - disp.IsCoolingDownFeedback.OutputChange += (o, a) => IsCoolingDownFeedback.FireUpdate(); - } - } - - protected override void CustomSetConfig(DeviceConfig config) - { - var newPropertiesConfig = JsonConvert.DeserializeObject(config.Properties.ToString()); - - if (newPropertiesConfig != null) - PropertiesConfig = newPropertiesConfig; - - ConfigWriter.UpdateRoomConfig(config); - } - - public override bool CustomActivate() - { - // Add Occupancy object from config - if (PropertiesConfig.Occupancy != null) - SetRoomOccupancy(DeviceManager.GetDeviceForKey(PropertiesConfig.Occupancy.DeviceKey) as - IOccupancyStatusProvider, PropertiesConfig.Occupancy.TimeoutMinutes); - - LogoUrl = PropertiesConfig.Logo.GetUrl(); - SourceListKey = PropertiesConfig.SourceListKey; - DefaultSourceItem = PropertiesConfig.DefaultSourceItem; - DefaultVolume = (ushort)(PropertiesConfig.Volumes.Master.Level * 65535 / 100); - - return base.CustomActivate(); - } - - /// - /// - /// - protected override void EndShutdown() - { - VideoCodec.EndAllCalls(); - - SetDefaultLevels(); - - RunDefaultPresentRoute(); - - CrestronEnvironment.Sleep(1000); - - RunRouteAction("roomOff", SourceListKey); - } - - /// - /// Routes the default source item, if any. Returns true when default route exists - /// - public override bool RunDefaultPresentRoute() - { - if (DefaultSourceItem != null) - RunRouteAction(DefaultSourceItem, SourceListKey); - - return DefaultSourceItem != null; - } - - /// - /// Sets up the room when started into call mode without presenting a source - /// - /// - public bool RunDefaultCallRoute() - { - RunRouteAction(DefaultCodecRouteString, SourceListKey); - return true; - } - - /// - /// - /// - /// - /// - public void RunRouteAction(string routeKey, string sourceListKey) - { - RunRouteAction(routeKey, sourceListKey, null); - } - - /// - /// Gets a source from config list SourceListKey and dynamically build and executes the - /// route or commands - /// - /// - /// - /// - public void RunRouteAction(string routeKey, string sourceListKey, Action successCallback) - { - // Run this on a separate thread - //new CTimer - CrestronInvoke.BeginInvoke(o => - { - // try to prevent multiple simultaneous selections - _sourceSelectLock.TryEnter(); - - try - { - - Debug.Console(1, this, "Run route action '{0}'", routeKey); - var dict = ConfigReader.ConfigObject.GetSourceListForKey(sourceListKey); - if (dict == null) - { - Debug.Console(1, this, "WARNING: Config source list '{0}' not found", sourceListKey); - return; - } - - // Try to get the list item by it's string key - if (!dict.ContainsKey(routeKey)) - { - Debug.Console(1, this, "WARNING: No item '{0}' found on config list '{1}'", - routeKey, SourceListKey); - return; - } - - // End usage timer on last source - if (!string.IsNullOrEmpty(_lastSourceKey)) - { - var usageLastSource = dict[_lastSourceKey].SourceDevice as IUsageTracking; - if (usageLastSource != null && usageLastSource.UsageTracker != null) - { - try - { - // There MAY have been failures in here. Protect - usageLastSource.UsageTracker.EndDeviceUsage(); - } - catch (Exception e) - { - Debug.Console(1, this, "*#* EXCEPTION in end usage tracking:\r{0}", e); - } - } - } - - // Let's run it - var item = dict[routeKey]; - if (routeKey.ToLower() != "roomoff") - { - - _lastSourceKey = routeKey; - } - //else - // CurrentSourceInfoKey = null; - - // hand off the individual routes to this helper - foreach (var route in item.RouteList) - DoRouteItem(route, item, routeKey); - - // Start usage timer on routed source - var usageNewSource = item.SourceDevice as IUsageTracking; - if (usageNewSource != null && usageNewSource.UsageTracker != null) // Have to make sure there is a usage tracker! - { - (item.SourceDevice as IUsageTracking).UsageTracker.StartDeviceUsage(); - } - - // See if this can be moved into common, base-class method ------------- - - - // Set volume control, using default if non provided - IBasicVolumeControls volDev = null; - // Handle special cases for volume control - if (string.IsNullOrEmpty(item.VolumeControlKey) - || item.VolumeControlKey.Equals("$defaultAudio", StringComparison.OrdinalIgnoreCase)) - volDev = DefaultVolumeControls; - - // Or a specific device, probably rarely used. - else - { - var dev = DeviceManager.GetDeviceForKey(item.VolumeControlKey); - if (dev is IBasicVolumeControls) - volDev = dev as IBasicVolumeControls; - else if (dev is IHasVolumeDevice) - volDev = (dev as IHasVolumeDevice).VolumeDevice; - } - - if (volDev != CurrentVolumeControls) - { - // zero the volume on the device we are leaving. - // Set the volume to default on device we are entering - if (ZeroVolumeWhenSwtichingVolumeDevices && CurrentVolumeControls is IBasicVolumeWithFeedback) - { - var vd = CurrentVolumeControls as IBasicVolumeWithFeedback; - SavedVolumeLevels[vd] = (uint)vd.VolumeLevelFeedback.IntValue; - vd.SetVolume(0); - } - - CurrentVolumeControls = volDev; - if (ZeroVolumeWhenSwtichingVolumeDevices && CurrentVolumeControls is IBasicVolumeWithFeedback) - { - var vd = CurrentVolumeControls as IBasicVolumeWithFeedback; - ushort vol = (SavedVolumeLevels.ContainsKey(vd) ? (ushort)SavedVolumeLevels[vd] : DefaultVolume); - vd.SetVolume(vol); - } - } - // ----------------------------------------------------------------------- - - - - // store the name and UI info for routes - if (item.SourceKey == "$off") - { - LeftDisplay.CurrentSourceInfoKey = routeKey; - LeftDisplay.CurrentSourceInfo = null; - RightDisplay.CurrentSourceInfoKey = routeKey; - RightDisplay.CurrentSourceInfo = null; - } - //else if (item.SourceKey != null) - //{ - // if(item.RouteList - // CurrentSourceInfoKey = routeKey; - // CurrentSourceInfo = item; - //} - - OnFeedback.FireUpdate(); - - // report back when done - if (successCallback != null) - successCallback(); - } - catch (Exception e) - { - Debug.Console(1, this, "ERROR in routing: {0}", e); - } - - _sourceSelectLock.Leave(); - }, 0); // end of CTimer - } - - - /// - /// - /// - /// - /// - /// - void DoRouteItem(SourceRouteListItem route, SourceListItem sourceItem, string sourceItemKey) - { - // if there is a $defaultAll on route, run two separate - if (route.DestinationKey.Equals("$defaultAll", StringComparison.OrdinalIgnoreCase)) - { - // Going to assume a single-path route for now - var tempVideo = new SourceRouteListItem - { - DestinationKey = "$defaultDisplay", - SourceKey = route.SourceKey, - Type = eRoutingSignalType.Video - }; - DoRoute(tempVideo, sourceItem, sourceItemKey); - } - else - DoRoute(route, sourceItem, sourceItemKey); - } - - /// - /// - /// - /// - /// - private bool DoRoute(SourceRouteListItem route, SourceListItem sourceItem, string sourceItemKey) - { - IRoutingSink dest = null; - - if (route.DestinationKey.Equals("$defaultaudio", StringComparison.OrdinalIgnoreCase)) - dest = DefaultAudioDevice as IRoutingSinkNoSwitching; - else if (route.DestinationKey.Equals(LeftDisplay.Key, StringComparison.OrdinalIgnoreCase)) - dest = LeftDisplay; - else if (route.DestinationKey.Equals(RightDisplay.Key, StringComparison.OrdinalIgnoreCase)) - dest = RightDisplay; - else - dest = DeviceManager.GetDeviceForKey(route.DestinationKey) as IRoutingSinkNoSwitching; - - if (dest == null) - { - Debug.Console(1, this, "Cannot route, unknown destination '{0}'", route.DestinationKey); - return false; - } - - if (route.SourceKey.Equals("$off", StringComparison.OrdinalIgnoreCase)) - { - dest.ReleaseRoute(); - - - - if (dest is IPower) - (dest as IPower).PowerOff(); - } - else - { - var source = DeviceManager.GetDeviceForKey(route.SourceKey) as IRoutingOutputs; - if (source == null) - { - Debug.Console(1, this, "Cannot route unknown source '{0}' to {1}", route.SourceKey, route.DestinationKey); - return false; - } - dest.ReleaseAndMakeRoute(source, route.Type); - - dest.CurrentSourceInfoKey = sourceItemKey; - dest.CurrentSourceInfo = sourceItem; - } - return true; - } - - public override void RoomVacatedForTimeoutPeriod(object o) - { - //Implement this - } - - /// - /// Does what it says - /// - public override void SetDefaultLevels() - { - Debug.Console(1, this, "Restoring default levels"); - var vc = CurrentVolumeControls as IBasicVolumeWithFeedback; - if (vc != null) - vc.SetVolume(DefaultVolume); - } - /// - /// Will power the room on with the last-used source - /// - public override void PowerOnToDefaultOrLastSource() - { - if (!EnablePowerOnToLastSource || _lastSourceKey == null) - return; - RunRouteAction(_lastSourceKey, SourceListKey); - } - - /// - /// Runs "roomOff" action on all rooms not set to ExcludeFromGlobalFunctions - /// - public static void AllRoomsOff() - { - var allRooms = DeviceManager.AllDevices.OfType().Where(d => !d.ExcludeFromGlobalFunctions); - foreach (var room in allRooms) - { - room.RunRouteAction("roomOff", room.SourceListKey); - } - } - - #region IPrivacy Members - - - public void PrivacyModeOff() - { - VideoCodec.PrivacyModeOff(); - } - - public void PrivacyModeOn() - { - VideoCodec.PrivacyModeOn(); - } - - public void PrivacyModeToggle() - { - VideoCodec.PrivacyModeToggle(); - } - - #endregion + } } \ No newline at end of file diff --git a/essentials-framework/Essentials Core/PepperDashEssentialsBase/Room/Types/EssentialsHuddleSpaceRoom.cs b/essentials-framework/Essentials Core/PepperDashEssentialsBase/Room/Types/EssentialsHuddleSpaceRoom.cs index 75b2523d..b36039f4 100644 --- a/essentials-framework/Essentials Core/PepperDashEssentialsBase/Room/Types/EssentialsHuddleSpaceRoom.cs +++ b/essentials-framework/Essentials Core/PepperDashEssentialsBase/Room/Types/EssentialsHuddleSpaceRoom.cs @@ -3,7 +3,8 @@ using Newtonsoft.Json; using PepperDash.Core; using PepperDash.Essentials.Core; using PepperDash.Essentials.Core.Config; -using PepperDash.Essentials.Room.Config; +using PepperDash.Essentials.Core.Rooms; +using PepperDash.Essentials.Core.Rooms.Config; namespace PepperDash.Essentials { diff --git a/essentials-framework/Essentials Core/PepperDashEssentialsBase/Room/Types/EssentialsHuddleVtc1Room.cs b/essentials-framework/Essentials Core/PepperDashEssentialsBase/Room/Types/EssentialsHuddleVtc1Room.cs index 7fbe8c2a..28638937 100644 --- a/essentials-framework/Essentials Core/PepperDashEssentialsBase/Room/Types/EssentialsHuddleVtc1Room.cs +++ b/essentials-framework/Essentials Core/PepperDashEssentialsBase/Room/Types/EssentialsHuddleVtc1Room.cs @@ -7,6 +7,9 @@ using Newtonsoft.Json; using PepperDash.Core; using PepperDash.Essentials.Core; using PepperDash.Essentials.Core.Config; +using PepperDash.Essentials.Core.Devices.AudioCodec; +using PepperDash.Essentials.Core.Devices.Codec; +using PepperDash.Essentials.Core.Devices.VideoCodec; using PepperDash.Essentials.Core.Rooms; using PepperDash.Essentials.Core.Rooms.Config; @@ -91,7 +94,7 @@ namespace PepperDash.Essentials if (AudioCodec == null) Debug.Console(0, this, "No Audio Codec Found"); - DefaultAudioDevice = DeviceManager.GetDeviceForKey(PropertiesConfig.DefaultAudioKey) as IBasicVolumeControls; + DefaultAudioDevice = DeviceManager.GetDeviceForKey(PropertiesConfig.DefaultAudioKey) as IRoutingSink; Initialize(); } @@ -106,7 +109,7 @@ namespace PepperDash.Essentials try { if (DefaultAudioDevice != null) - DefaultVolumeControls = DefaultAudioDevice; + DefaultVolumeControls = DefaultAudioDevice as IBasicVolumeControls; else if (DefaultAudioDevice is IHasVolumeDevice) DefaultVolumeControls = (DefaultAudioDevice as IHasVolumeDevice).VolumeDevice; CurrentVolumeControls = DefaultVolumeControls; diff --git a/essentials-framework/Essentials Core/PepperDashEssentialsBase/Room/Types/EssentialsNDisplayRoomBase.cs b/essentials-framework/Essentials Core/PepperDashEssentialsBase/Room/Types/EssentialsNDisplayRoomBase.cs index 17e764e9..70b690fc 100644 --- a/essentials-framework/Essentials Core/PepperDashEssentialsBase/Room/Types/EssentialsNDisplayRoomBase.cs +++ b/essentials-framework/Essentials Core/PepperDashEssentialsBase/Room/Types/EssentialsNDisplayRoomBase.cs @@ -1,6 +1,7 @@ using System.Collections.Generic; using PepperDash.Essentials.Core; using PepperDash.Essentials.Core.Config; +using PepperDash.Essentials.Core.Rooms; namespace PepperDash.Essentials { diff --git a/essentials-framework/Essentials Devices Common/Essentials Devices Common/AudioCodec/MockAC/MockAC.cs b/essentials-framework/Essentials Devices Common/Essentials Devices Common/AudioCodec/MockAC/MockAC.cs index a610b729..462992a9 100644 --- a/essentials-framework/Essentials Devices Common/Essentials Devices Common/AudioCodec/MockAC/MockAC.cs +++ b/essentials-framework/Essentials Devices Common/Essentials Devices Common/AudioCodec/MockAC/MockAC.cs @@ -7,6 +7,7 @@ using Crestron.SimplSharp; using PepperDash.Core; using PepperDash.Essentials.Core; using PepperDash.Essentials.Core.Config; +using PepperDash.Essentials.Core.Devices.AudioCodec; using PepperDash.Essentials.Core.Devices.Codec; namespace PepperDash.Essentials.Devices.Common.AudioCodec diff --git a/essentials-framework/Essentials Devices Common/Essentials Devices Common/Essentials Devices Common.csproj b/essentials-framework/Essentials Devices Common/Essentials Devices Common/Essentials Devices Common.csproj index 8453aec0..a77bc39f 100644 --- a/essentials-framework/Essentials Devices Common/Essentials Devices Common/Essentials Devices Common.csproj +++ b/essentials-framework/Essentials Devices Common/Essentials Devices Common/Essentials Devices Common.csproj @@ -100,10 +100,6 @@ - - - - @@ -152,7 +148,6 @@ - diff --git a/essentials-framework/Essentials Devices Common/Essentials Devices Common/SoftCodec/BlueJeansPc.cs b/essentials-framework/Essentials Devices Common/Essentials Devices Common/SoftCodec/BlueJeansPc.cs index 3e17f81d..89b96ccc 100644 --- a/essentials-framework/Essentials Devices Common/Essentials Devices Common/SoftCodec/BlueJeansPc.cs +++ b/essentials-framework/Essentials Devices Common/Essentials Devices Common/SoftCodec/BlueJeansPc.cs @@ -6,6 +6,7 @@ using Crestron.SimplSharp; using PepperDash.Core; using PepperDash.Essentials.Core; +using PepperDash.Essentials.Core.Rooms; using PepperDash.Essentials.Core.Routing; using PepperDash.Essentials.Core.Devices; using PepperDash.Essentials.Core.Config; diff --git a/essentials-framework/Essentials Devices Common/Essentials Devices Common/VideoCodec/MockVC/MockVC.cs b/essentials-framework/Essentials Devices Common/Essentials Devices Common/VideoCodec/MockVC/MockVC.cs index f979719f..bb2d31ab 100644 --- a/essentials-framework/Essentials Devices Common/Essentials Devices Common/VideoCodec/MockVC/MockVC.cs +++ b/essentials-framework/Essentials Devices Common/Essentials Devices Common/VideoCodec/MockVC/MockVC.cs @@ -8,6 +8,7 @@ using PepperDash.Core; using PepperDash.Essentials.Core; using PepperDash.Essentials.Core.Bridges; using PepperDash.Essentials.Core.Config; +using PepperDash.Essentials.Core.Devices.VideoCodec; using PepperDash.Essentials.Core.Routing; using PepperDash.Essentials.Core.Devices.Codec; using PepperDash.Essentials.Devices.Common.Cameras; diff --git a/essentials-framework/Essentials Devices Common/Essentials Devices Common/VideoCodec/MockVC/MockVCCamera.cs b/essentials-framework/Essentials Devices Common/Essentials Devices Common/VideoCodec/MockVC/MockVCCamera.cs index 0c008849..e834cc49 100644 --- a/essentials-framework/Essentials Devices Common/Essentials Devices Common/VideoCodec/MockVC/MockVCCamera.cs +++ b/essentials-framework/Essentials Devices Common/Essentials Devices Common/VideoCodec/MockVC/MockVCCamera.cs @@ -6,6 +6,7 @@ using Crestron.SimplSharp; using Crestron.SimplSharpPro.DeviceSupport; using PepperDash.Core; using PepperDash.Essentials.Core.Bridges; +using PepperDash.Essentials.Core.Devices.VideoCodec; using PepperDash.Essentials.Devices.Common.VideoCodec; namespace PepperDash.Essentials.Devices.Common.Cameras diff --git a/essentials-framework/Essentials Devices Common/Essentials Devices Common/VideoCodec/ZoomRoom/ZoomRoom.cs b/essentials-framework/Essentials Devices Common/Essentials Devices Common/VideoCodec/ZoomRoom/ZoomRoom.cs index 3a6a33d4..c7bbb850 100644 --- a/essentials-framework/Essentials Devices Common/Essentials Devices Common/VideoCodec/ZoomRoom/ZoomRoom.cs +++ b/essentials-framework/Essentials Devices Common/Essentials Devices Common/VideoCodec/ZoomRoom/ZoomRoom.cs @@ -15,8 +15,7 @@ using PepperDash.Essentials.Core.Devices.VideoCodec; using PepperDash.Essentials.Core.Routing; using PepperDash.Essentials.Devices.Common.Cameras; using PepperDash.Essentials.Core.Devices.Codec; -using PepperDash.Essentials.Devices.Common.Occupancy; -using PepperDash.Essentials.Devices.Common.VideoCodec; +using PepperDash.Essentials.Devices.Core.VideoCodec; namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom {