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
{