cleanup VtcRoom

This commit is contained in:
Andrew Welker
2020-06-24 09:53:03 -06:00
parent b11bed7cfa
commit b6cf8d2a4b

View File

@@ -1,7 +1,5 @@
using System; using System;
using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text;
using Crestron.SimplSharp; using Crestron.SimplSharp;
using Newtonsoft.Json; using Newtonsoft.Json;
@@ -76,10 +74,7 @@ namespace PepperDash.Essentials
return () => return () =>
{ {
var disp = DefaultDisplay as DisplayBase; var disp = DefaultDisplay as DisplayBase;
if (disp != null) return disp != null && disp.IsWarmingUpFeedback.BoolValue;
return disp.IsWarmingUpFeedback.BoolValue;
else
return false;
}; };
} }
} }
@@ -93,10 +88,7 @@ namespace PepperDash.Essentials
return () => return () =>
{ {
var disp = DefaultDisplay as DisplayBase; var disp = DefaultDisplay as DisplayBase;
if (disp != null) return disp != null && disp.IsCoolingDownFeedback.BoolValue;
return disp.IsCoolingDownFeedback.BoolValue;
else
return false;
}; };
} }
} }
@@ -121,7 +113,7 @@ namespace PepperDash.Essentials
/// If room is off, enables power on to last source. Default true /// If room is off, enables power on to last source. Default true
/// </summary> /// </summary>
public bool EnablePowerOnToLastSource { get; set; } public bool EnablePowerOnToLastSource { get; set; }
string LastSourceKey; private string _lastSourceKey;
/// <summary> /// <summary>
/// Sets the volume control device, and attaches/removes InUseTrackers with "audio" /// Sets the volume control device, and attaches/removes InUseTrackers with "audio"
@@ -129,56 +121,56 @@ namespace PepperDash.Essentials
/// </summary> /// </summary>
public IBasicVolumeControls CurrentVolumeControls public IBasicVolumeControls CurrentVolumeControls
{ {
get { return _CurrentAudioDevice; } get { return _currentAudioDevice; }
set set
{ {
if (value == _CurrentAudioDevice) return; if (value == _currentAudioDevice) return;
var oldDev = _CurrentAudioDevice; var oldDev = _currentAudioDevice;
// derigister this room from the device, if it can // derigister this room from the device, if it can
if (oldDev is IInUseTracking) if (oldDev is IInUseTracking)
(oldDev as IInUseTracking).InUseTracker.RemoveUser(this, "audio"); (oldDev as IInUseTracking).InUseTracker.RemoveUser(this, "audio");
var handler = CurrentVolumeDeviceChange; var handler = CurrentVolumeDeviceChange;
if (handler != null) if (handler != null)
CurrentVolumeDeviceChange(this, new VolumeDeviceChangeEventArgs(oldDev, value, ChangeType.WillChange)); CurrentVolumeDeviceChange(this, new VolumeDeviceChangeEventArgs(oldDev, value, ChangeType.WillChange));
_CurrentAudioDevice = value; _currentAudioDevice = value;
if (handler != null) if (handler != null)
CurrentVolumeDeviceChange(this, new VolumeDeviceChangeEventArgs(oldDev, value, ChangeType.DidChange)); CurrentVolumeDeviceChange(this, new VolumeDeviceChangeEventArgs(oldDev, value, ChangeType.DidChange));
// register this room with new device, if it can // register this room with new device, if it can
if (_CurrentAudioDevice is IInUseTracking) if (_currentAudioDevice is IInUseTracking)
(_CurrentAudioDevice as IInUseTracking).InUseTracker.AddUser(this, "audio"); (_currentAudioDevice as IInUseTracking).InUseTracker.AddUser(this, "audio");
} }
} }
IBasicVolumeControls _CurrentAudioDevice; IBasicVolumeControls _currentAudioDevice;
/// <summary> /// <summary>
/// The SourceListItem last run - containing names and icons /// The SourceListItem last run - containing names and icons
/// </summary> /// </summary>
public SourceListItem CurrentSourceInfo public SourceListItem CurrentSourceInfo
{ {
get { return _CurrentSourceInfo; } get { return _currentSourceInfo; }
set set
{ {
if (value == _CurrentSourceInfo) return; if (value == _currentSourceInfo) return;
var handler = CurrentSourceChange; var handler = CurrentSourceChange;
// remove from in-use tracker, if so equipped // remove from in-use tracker, if so equipped
if(_CurrentSourceInfo != null && _CurrentSourceInfo.SourceDevice is IInUseTracking) if(_currentSourceInfo != null && _currentSourceInfo.SourceDevice is IInUseTracking)
(_CurrentSourceInfo.SourceDevice as IInUseTracking).InUseTracker.RemoveUser(this, "control"); (_currentSourceInfo.SourceDevice as IInUseTracking).InUseTracker.RemoveUser(this, "control");
if (handler != null) if (handler != null)
handler(_CurrentSourceInfo, ChangeType.WillChange); handler(_currentSourceInfo, ChangeType.WillChange);
_CurrentSourceInfo = value; _currentSourceInfo = value;
// add to in-use tracking // add to in-use tracking
if (_CurrentSourceInfo != null && _CurrentSourceInfo.SourceDevice is IInUseTracking) if (_currentSourceInfo != null && _currentSourceInfo.SourceDevice is IInUseTracking)
(_CurrentSourceInfo.SourceDevice as IInUseTracking).InUseTracker.AddUser(this, "control"); (_currentSourceInfo.SourceDevice as IInUseTracking).InUseTracker.AddUser(this, "control");
if (handler != null) if (handler != null)
handler(_CurrentSourceInfo, ChangeType.DidChange); handler(_currentSourceInfo, ChangeType.DidChange);
} }
} }
SourceListItem _CurrentSourceInfo; private SourceListItem _currentSourceInfo;
public string CurrentSourceInfoKey { get; set; } public string CurrentSourceInfoKey { get; set; }
@@ -193,7 +185,7 @@ namespace PepperDash.Essentials
/// </summary> /// </summary>
public IHasScheduleAwareness ScheduleSource { get { return VideoCodec as IHasScheduleAwareness; } } public IHasScheduleAwareness ScheduleSource { get { return VideoCodec as IHasScheduleAwareness; } }
CCriticalSection SourceSelectLock = new CCriticalSection(); private readonly CCriticalSection _sourceSelectLock = new CCriticalSection();
public EssentialsHuddleVtc1Room(DeviceConfig config) public EssentialsHuddleVtc1Room(DeviceConfig config)
: base(config) : base(config)
@@ -205,12 +197,12 @@ namespace PepperDash.Essentials
DefaultDisplay = DeviceManager.GetDeviceForKey(PropertiesConfig.DefaultDisplayKey) as IRoutingSinkWithSwitching; DefaultDisplay = DeviceManager.GetDeviceForKey(PropertiesConfig.DefaultDisplayKey) as IRoutingSinkWithSwitching;
VideoCodec = DeviceManager.GetDeviceForKey(PropertiesConfig.VideoCodecKey) as VideoCodec = DeviceManager.GetDeviceForKey(PropertiesConfig.VideoCodecKey) as
PepperDash.Essentials.Devices.Common.VideoCodec.VideoCodecBase; VideoCodecBase;
if (VideoCodec == null) if (VideoCodec == null)
throw new ArgumentNullException("codec cannot be null"); throw new ArgumentNullException("codec cannot be null");
AudioCodec = DeviceManager.GetDeviceForKey(PropertiesConfig.AudioCodecKey) as AudioCodec = DeviceManager.GetDeviceForKey(PropertiesConfig.AudioCodecKey) as
PepperDash.Essentials.Devices.Common.AudioCodec.AudioCodecBase; AudioCodecBase;
if (AudioCodec == null) if (AudioCodec == null)
Debug.Console(0, this, "No Audio Codec Found"); Debug.Console(0, this, "No Audio Codec Found");
@@ -228,8 +220,8 @@ namespace PepperDash.Essentials
{ {
try try
{ {
if (DefaultAudioDevice is IBasicVolumeControls) if (DefaultAudioDevice != null)
DefaultVolumeControls = DefaultAudioDevice as IBasicVolumeControls; DefaultVolumeControls = DefaultAudioDevice;
else if (DefaultAudioDevice is IHasVolumeDevice) else if (DefaultAudioDevice is IHasVolumeDevice)
DefaultVolumeControls = (DefaultAudioDevice as IHasVolumeDevice).VolumeDevice; DefaultVolumeControls = (DefaultAudioDevice as IHasVolumeDevice).VolumeDevice;
CurrentVolumeControls = DefaultVolumeControls; CurrentVolumeControls = DefaultVolumeControls;
@@ -238,8 +230,8 @@ namespace PepperDash.Essentials
// Combines call feedback from both codecs if available // Combines call feedback from both codecs if available
InCallFeedback = new BoolFeedback(() => InCallFeedback = new BoolFeedback(() =>
{ {
bool inAudioCall = false; var inAudioCall = false;
bool inVideoCall = false; var inVideoCall = false;
if (AudioCodec != null) if (AudioCodec != null)
inAudioCall = AudioCodec.IsInCall; inAudioCall = AudioCodec.IsInCall;
@@ -247,10 +239,7 @@ namespace PepperDash.Essentials
if (VideoCodec != null) if (VideoCodec != null)
inVideoCall = VideoCodec.IsInCall; inVideoCall = VideoCodec.IsInCall;
if (inAudioCall || inVideoCall) return inAudioCall || inVideoCall;
return true;
else
return false;
}); });
var disp = DefaultDisplay as DisplayBase; var disp = DefaultDisplay as DisplayBase;
@@ -274,40 +263,45 @@ namespace PepperDash.Essentials
disp.IsWarmingUpFeedback.OutputChange += (o, a) => disp.IsWarmingUpFeedback.OutputChange += (o, a) =>
{ {
IsWarmingUpFeedback.FireUpdate(); IsWarmingUpFeedback.FireUpdate();
if (!IsWarmingUpFeedback.BoolValue) if (IsWarmingUpFeedback.BoolValue)
(CurrentVolumeControls as IBasicVolumeWithFeedback).SetVolume(DefaultVolume); {
}; return;
disp.IsCoolingDownFeedback.OutputChange += (o, a) => }
{
IsCoolingDownFeedback.FireUpdate(); var basicVolumeWithFeedback = CurrentVolumeControls as IBasicVolumeWithFeedback;
if (basicVolumeWithFeedback != null)
{
basicVolumeWithFeedback.SetVolume(DefaultVolume);
}
}; };
disp.IsCoolingDownFeedback.OutputChange += (o, a) => IsCoolingDownFeedback.FireUpdate();
} }
// Get Microphone Privacy object, if any MUST HAPPEN AFTER setting InCallFeedback // Get Microphone Privacy object, if any MUST HAPPEN AFTER setting InCallFeedback
this.MicrophonePrivacy = EssentialsRoomConfigHelper.GetMicrophonePrivacy(PropertiesConfig, this); MicrophonePrivacy = EssentialsRoomConfigHelper.GetMicrophonePrivacy(PropertiesConfig, this);
Debug.Console(2, this, "Microphone Privacy Config evaluated."); Debug.Console(2, this, "Microphone Privacy Config evaluated.");
// Get emergency object, if any // Get emergency object, if any
this.Emergency = EssentialsRoomConfigHelper.GetEmergency(PropertiesConfig, this); Emergency = EssentialsRoomConfigHelper.GetEmergency(PropertiesConfig, this);
Debug.Console(2, this, "Emergency Config evaluated."); Debug.Console(2, this, "Emergency Config evaluated.");
VideoCodec.CallStatusChange += (o, a) => this.InCallFeedback.FireUpdate(); VideoCodec.CallStatusChange += (o, a) => InCallFeedback.FireUpdate();
if (AudioCodec != null) if (AudioCodec != null)
AudioCodec.CallStatusChange += (o, a) => this.InCallFeedback.FireUpdate(); AudioCodec.CallStatusChange += (o, a) => InCallFeedback.FireUpdate();
IsSharingFeedback = new BoolFeedback(() => VideoCodec.SharingContentIsOnFeedback.BoolValue); IsSharingFeedback = new BoolFeedback(() => VideoCodec.SharingContentIsOnFeedback.BoolValue);
VideoCodec.SharingContentIsOnFeedback.OutputChange += (o, a) => this.IsSharingFeedback.FireUpdate(); VideoCodec.SharingContentIsOnFeedback.OutputChange += (o, a) => IsSharingFeedback.FireUpdate();
// link privacy to VC (for now?) // link privacy to VC (for now?)
PrivacyModeIsOnFeedback = new BoolFeedback(() => VideoCodec.PrivacyModeIsOnFeedback.BoolValue); PrivacyModeIsOnFeedback = new BoolFeedback(() => VideoCodec.PrivacyModeIsOnFeedback.BoolValue);
VideoCodec.PrivacyModeIsOnFeedback.OutputChange += (o, a) => this.PrivacyModeIsOnFeedback.FireUpdate(); VideoCodec.PrivacyModeIsOnFeedback.OutputChange += (o, a) => PrivacyModeIsOnFeedback.FireUpdate();
CallTypeFeedback = new IntFeedback(() => 0); CallTypeFeedback = new IntFeedback(() => 0);
@@ -336,14 +330,14 @@ namespace PepperDash.Essentials
if (PropertiesConfig.Occupancy != null) if (PropertiesConfig.Occupancy != null)
{ {
Debug.Console(0, this, Debug.ErrorLogLevel.Notice, "Setting Occupancy Provider for room"); Debug.Console(0, this, Debug.ErrorLogLevel.Notice, "Setting Occupancy Provider for room");
this.SetRoomOccupancy(DeviceManager.GetDeviceForKey(PropertiesConfig.Occupancy.DeviceKey) as SetRoomOccupancy(DeviceManager.GetDeviceForKey(PropertiesConfig.Occupancy.DeviceKey) as
IOccupancyStatusProvider, PropertiesConfig.Occupancy.TimeoutMinutes); IOccupancyStatusProvider, PropertiesConfig.Occupancy.TimeoutMinutes);
} }
this.LogoUrl = PropertiesConfig.Logo.GetUrl(); LogoUrl = PropertiesConfig.Logo.GetUrl();
this.SourceListKey = PropertiesConfig.SourceListKey; SourceListKey = PropertiesConfig.SourceListKey;
this.DefaultSourceItem = PropertiesConfig.DefaultSourceItem; DefaultSourceItem = PropertiesConfig.DefaultSourceItem;
this.DefaultVolume = (ushort)(PropertiesConfig.Volumes.Master.Level * 65535 / 100); DefaultVolume = (ushort)(PropertiesConfig.Volumes.Master.Level * 65535 / 100);
return base.CustomActivate(); return base.CustomActivate();
} }
@@ -394,7 +388,7 @@ namespace PepperDash.Essentials
/// <param name="routeKey"></param> /// <param name="routeKey"></param>
public void RunRouteAction(string routeKey) public void RunRouteAction(string routeKey)
{ {
RunRouteAction(routeKey, new Action(() => { })); RunRouteAction(routeKey, () => { });
} }
/// <summary> /// <summary>
@@ -402,7 +396,6 @@ namespace PepperDash.Essentials
/// </summary> /// </summary>
/// <param name="routeKey"></param> /// <param name="routeKey"></param>
/// <param name="souceListKey"></param> /// <param name="souceListKey"></param>
/// <param name="successCallback"></param>
public void RunRouteAction(string routeKey, string souceListKey) public void RunRouteAction(string routeKey, string souceListKey)
{ {
throw new NotImplementedException(); throw new NotImplementedException();
@@ -419,18 +412,18 @@ namespace PepperDash.Essentials
throw new NotImplementedException(); throw new NotImplementedException();
} }
/// <summary> /// <summary>
/// Gets a source from config list SourceListKey and dynamically build and executes the /// Gets a source from config list SourceListKey and dynamically build and executes the
/// route or commands /// route or commands
/// </summary> /// </summary>
/// <param name="name"></param>
public void RunRouteAction(string routeKey, Action successCallback) public void RunRouteAction(string routeKey, Action successCallback)
{ {
// Run this on a separate thread // Run this on a separate thread
new CTimer(o => //new CTimer
CrestronInvoke.BeginInvoke(o =>
{ {
// try to prevent multiple simultaneous selections // try to prevent multiple simultaneous selections
SourceSelectLock.TryEnter(); _sourceSelectLock.TryEnter();
try try
{ {
@@ -452,9 +445,9 @@ namespace PepperDash.Essentials
} }
// End usage timer on last source // End usage timer on last source
if (!string.IsNullOrEmpty(LastSourceKey)) if (!string.IsNullOrEmpty(_lastSourceKey))
{ {
var usageLastSource = dict[LastSourceKey].SourceDevice as IUsageTracking; var usageLastSource = dict[_lastSourceKey].SourceDevice as IUsageTracking;
if (usageLastSource != null && usageLastSource.UsageTracker != null) if (usageLastSource != null && usageLastSource.UsageTracker != null)
{ {
try try
@@ -474,7 +467,7 @@ namespace PepperDash.Essentials
if (routeKey.ToLower() != "roomoff") if (routeKey.ToLower() != "roomoff")
{ {
LastSourceKey = routeKey; _lastSourceKey = routeKey;
} }
else else
CurrentSourceInfoKey = null; CurrentSourceInfoKey = null;
@@ -526,7 +519,7 @@ namespace PepperDash.Essentials
if (ZeroVolumeWhenSwtichingVolumeDevices && CurrentVolumeControls is IBasicVolumeWithFeedback) if (ZeroVolumeWhenSwtichingVolumeDevices && CurrentVolumeControls is IBasicVolumeWithFeedback)
{ {
var vd = CurrentVolumeControls as IBasicVolumeWithFeedback; var vd = CurrentVolumeControls as IBasicVolumeWithFeedback;
ushort vol = (SavedVolumeLevels.ContainsKey(vd) ? (ushort)SavedVolumeLevels[vd] : DefaultVolume); var vol = (SavedVolumeLevels.ContainsKey(vd) ? (ushort)SavedVolumeLevels[vd] : DefaultVolume);
vd.SetVolume(vol); vd.SetVolume(vol);
} }
} }
@@ -557,7 +550,7 @@ namespace PepperDash.Essentials
Debug.Console(1, this, "ERROR in routing: {0}", e); Debug.Console(1, this, "ERROR in routing: {0}", e);
} }
SourceSelectLock.Leave(); _sourceSelectLock.Leave();
}, 0); // end of CTimer }, 0); // end of CTimer
} }
@@ -588,9 +581,9 @@ namespace PepperDash.Essentials
/// </summary> /// </summary>
/// <param name="route"></param> /// <param name="route"></param>
/// <returns></returns> /// <returns></returns>
bool DoRoute(SourceRouteListItem route) private bool DoRoute(SourceRouteListItem route)
{ {
IRoutingSink dest = null; IRoutingSink dest;
if (route.DestinationKey.Equals("$defaultaudio", StringComparison.OrdinalIgnoreCase)) if (route.DestinationKey.Equals("$defaultaudio", StringComparison.OrdinalIgnoreCase))
dest = DefaultAudioDevice as IRoutingSinkNoSwitching; dest = DefaultAudioDevice as IRoutingSinkNoSwitching;
@@ -644,9 +637,9 @@ namespace PepperDash.Essentials
/// </summary> /// </summary>
public override void PowerOnToDefaultOrLastSource() public override void PowerOnToDefaultOrLastSource()
{ {
if (!EnablePowerOnToLastSource || LastSourceKey == null) if (!EnablePowerOnToLastSource || _lastSourceKey == null)
return; return;
RunRouteAction(LastSourceKey); RunRouteAction(_lastSourceKey);
} }
/// <summary> /// <summary>
@@ -657,7 +650,13 @@ namespace PepperDash.Essentials
var allRooms = DeviceManager.AllDevices.Where(d => var allRooms = DeviceManager.AllDevices.Where(d =>
d is EssentialsHuddleSpaceRoom && !(d as EssentialsHuddleSpaceRoom).ExcludeFromGlobalFunctions); d is EssentialsHuddleSpaceRoom && !(d as EssentialsHuddleSpaceRoom).ExcludeFromGlobalFunctions);
foreach (var room in allRooms) foreach (var room in allRooms)
(room as EssentialsHuddleSpaceRoom).RunRouteAction("roomOff"); {
var essentialsHuddleSpaceRoom = room as EssentialsHuddleSpaceRoom;
if (essentialsHuddleSpaceRoom != null)
{
essentialsHuddleSpaceRoom.RunRouteAction("roomOff");
}
}
} }
#region IPrivacy Members #region IPrivacy Members