diff --git a/PepperDashEssentials/Room/Types/EssentialsHuddleVtc1Room.cs b/PepperDashEssentials/Room/Types/EssentialsHuddleVtc1Room.cs index efb0ad7b..3d483951 100644 --- a/PepperDashEssentials/Room/Types/EssentialsHuddleVtc1Room.cs +++ b/PepperDashEssentials/Room/Types/EssentialsHuddleVtc1Room.cs @@ -1,7 +1,5 @@ using System; -using System.Collections.Generic; using System.Linq; -using System.Text; using Crestron.SimplSharp; using Newtonsoft.Json; @@ -90,10 +88,7 @@ namespace PepperDash.Essentials return () => { var disp = DefaultDisplay as DisplayBase; - if (disp != null) - return disp.IsWarmingUpFeedback.BoolValue; - else - return false; + return disp != null && disp.IsWarmingUpFeedback.BoolValue; }; } } @@ -107,10 +102,7 @@ namespace PepperDash.Essentials return () => { var disp = DefaultDisplay as DisplayBase; - if (disp != null) - return disp.IsCoolingDownFeedback.BoolValue; - else - return false; + return disp != null && disp.IsCoolingDownFeedback.BoolValue; }; } } @@ -135,7 +127,7 @@ namespace PepperDash.Essentials /// If room is off, enables power on to last source. Default true /// public bool EnablePowerOnToLastSource { get; set; } - string LastSourceKey; + private string _lastSourceKey; /// /// Sets the volume control device, and attaches/removes InUseTrackers with "audio" @@ -143,51 +135,51 @@ namespace PepperDash.Essentials /// public IBasicVolumeControls CurrentVolumeControls { - get { return _CurrentAudioDevice; } + get { return _currentAudioDevice; } set { - if (value == _CurrentAudioDevice) return; + if (value == _currentAudioDevice) return; - var oldDev = _CurrentAudioDevice; + 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; + _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"); + if (_currentAudioDevice is IInUseTracking) + (_currentAudioDevice as IInUseTracking).InUseTracker.AddUser(this, "audio"); } } - IBasicVolumeControls _CurrentAudioDevice; + IBasicVolumeControls _currentAudioDevice; /// /// The SourceListItem last run - containing names and icons /// public SourceListItem CurrentSourceInfo { - get { return _CurrentSourceInfo; } + get { return _currentSourceInfo; } set { - if (value == _CurrentSourceInfo) return; + if (value == _currentSourceInfo) return; var handler = CurrentSourceChange; // remove from in-use tracker, if so equipped - if(_CurrentSourceInfo != null && _CurrentSourceInfo.SourceDevice is IInUseTracking) - (_CurrentSourceInfo.SourceDevice as IInUseTracking).InUseTracker.RemoveUser(this, "control"); + if(_currentSourceInfo != null && _currentSourceInfo.SourceDevice is IInUseTracking) + (_currentSourceInfo.SourceDevice as IInUseTracking).InUseTracker.RemoveUser(this, "control"); if (handler != null) - handler(_CurrentSourceInfo, ChangeType.WillChange); + handler(_currentSourceInfo, ChangeType.WillChange); - _CurrentSourceInfo = value; + _currentSourceInfo = value; // add to in-use tracking - if (_CurrentSourceInfo != null && _CurrentSourceInfo.SourceDevice is IInUseTracking) - (_CurrentSourceInfo.SourceDevice as IInUseTracking).InUseTracker.AddUser(this, "control"); + if (_currentSourceInfo != null && _currentSourceInfo.SourceDevice is IInUseTracking) + (_currentSourceInfo.SourceDevice as IInUseTracking).InUseTracker.AddUser(this, "control"); if (handler != null) handler(_CurrentSourceInfo, ChangeType.DidChange); @@ -198,7 +190,7 @@ namespace PepperDash.Essentials } } } - SourceListItem _CurrentSourceInfo; + private SourceListItem _currentSourceInfo; public string CurrentSourceInfoKey { get; set; } @@ -213,7 +205,7 @@ namespace PepperDash.Essentials /// public IHasScheduleAwareness ScheduleSource { get { return VideoCodec as IHasScheduleAwareness; } } - CCriticalSection SourceSelectLock = new CCriticalSection(); + private readonly CCriticalSection _sourceSelectLock = new CCriticalSection(); public EssentialsHuddleVtc1Room(DeviceConfig config) : base(config) @@ -232,7 +224,7 @@ namespace PepperDash.Essentials throw new ArgumentNullException("codec cannot be null"); AudioCodec = DeviceManager.GetDeviceForKey(PropertiesConfig.AudioCodecKey) as - PepperDash.Essentials.Devices.Common.AudioCodec.AudioCodecBase; + AudioCodecBase; if (AudioCodec == null) Debug.Console(0, this, "No Audio Codec Found"); @@ -250,8 +242,8 @@ namespace PepperDash.Essentials { try { - if (DefaultAudioDevice is IBasicVolumeControls) - DefaultVolumeControls = DefaultAudioDevice as IBasicVolumeControls; + if (DefaultAudioDevice != null) + DefaultVolumeControls = DefaultAudioDevice; else if (DefaultAudioDevice is IHasVolumeDevice) DefaultVolumeControls = (DefaultAudioDevice as IHasVolumeDevice).VolumeDevice; CurrentVolumeControls = DefaultVolumeControls; @@ -260,8 +252,8 @@ namespace PepperDash.Essentials // Combines call feedback from both codecs if available InCallFeedback = new BoolFeedback(() => { - bool inAudioCall = false; - bool inVideoCall = false; + var inAudioCall = false; + var inVideoCall = false; if (AudioCodec != null) inAudioCall = AudioCodec.IsInCall; @@ -269,10 +261,7 @@ namespace PepperDash.Essentials if (VideoCodec != null) inVideoCall = VideoCodec.IsInCall; - if (inAudioCall || inVideoCall) - return true; - else - return false; + return inAudioCall || inVideoCall; }); var disp = DefaultDisplay as DisplayBase; @@ -300,25 +289,30 @@ namespace PepperDash.Essentials disp.IsWarmingUpFeedback.OutputChange += (o, a) => { IsWarmingUpFeedback.FireUpdate(); - if (!IsWarmingUpFeedback.BoolValue) - (CurrentVolumeControls as IBasicVolumeWithFeedback).SetVolume(DefaultVolume); - }; - disp.IsCoolingDownFeedback.OutputChange += (o, a) => - { - IsCoolingDownFeedback.FireUpdate(); + if (IsWarmingUpFeedback.BoolValue) + { + return; + } + + 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 - this.MicrophonePrivacy = EssentialsRoomConfigHelper.GetMicrophonePrivacy(PropertiesConfig, this); + MicrophonePrivacy = EssentialsRoomConfigHelper.GetMicrophonePrivacy(PropertiesConfig, this); Debug.Console(2, this, "Microphone Privacy Config evaluated."); // Get emergency object, if any - this.Emergency = EssentialsRoomConfigHelper.GetEmergency(PropertiesConfig, this); + Emergency = EssentialsRoomConfigHelper.GetEmergency(PropertiesConfig, this); Debug.Console(2, this, "Emergency Config evaluated."); @@ -327,14 +321,14 @@ namespace PepperDash.Essentials VideoCodec.IsReadyChange += (o, a) => { this.SetCodecExternalSources(); SetCodecBranding(); }; if (AudioCodec != null) - AudioCodec.CallStatusChange += (o, a) => this.InCallFeedback.FireUpdate(); + AudioCodec.CallStatusChange += (o, a) => InCallFeedback.FireUpdate(); 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?) 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); @@ -363,7 +357,7 @@ namespace PepperDash.Essentials if (PropertiesConfig.Occupancy != null) { 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); } @@ -424,7 +418,7 @@ namespace PepperDash.Essentials /// public void RunRouteAction(string routeKey) { - RunRouteAction(routeKey, new Action(() => { })); + RunRouteAction(routeKey, () => { }); } /// @@ -432,8 +426,7 @@ namespace PepperDash.Essentials /// /// /// - /// - public void RunRouteAction(string routeKey, string sourceListKey) + public void RunRouteAction(string routeKey, string souceListKey) { if (string.IsNullOrEmpty(sourceListKey)) { @@ -463,18 +456,18 @@ namespace PepperDash.Essentials throw new NotImplementedException(); } - /// - /// Gets a source from config list SourceListKey and dynamically build and executes the - /// route or commands - /// - /// + /// + /// Gets a source from config list SourceListKey and dynamically build and executes the + /// route or commands + /// public void RunRouteAction(string routeKey, Action successCallback) { // Run this on a separate thread - new CTimer(o => + //new CTimer + CrestronInvoke.BeginInvoke(o => { // try to prevent multiple simultaneous selections - SourceSelectLock.TryEnter(); + _sourceSelectLock.TryEnter(); try { @@ -496,9 +489,9 @@ namespace PepperDash.Essentials } // 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) { try @@ -518,7 +511,7 @@ namespace PepperDash.Essentials if (routeKey.ToLower() != "roomoff") { - LastSourceKey = routeKey; + _lastSourceKey = routeKey; } else CurrentSourceInfoKey = null; @@ -570,7 +563,7 @@ namespace PepperDash.Essentials if (ZeroVolumeWhenSwtichingVolumeDevices && CurrentVolumeControls is 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); } } @@ -614,7 +607,7 @@ namespace PepperDash.Essentials Debug.Console(1, this, "ERROR in routing: {0}", e); } - SourceSelectLock.Leave(); + _sourceSelectLock.Leave(); }, 0); // end of CTimer } @@ -645,9 +638,9 @@ namespace PepperDash.Essentials /// /// /// - bool DoRoute(SourceRouteListItem route) + private bool DoRoute(SourceRouteListItem route) { - IRoutingSink dest = null; + IRoutingSink dest; if (route.DestinationKey.Equals("$defaultaudio", StringComparison.OrdinalIgnoreCase)) dest = DefaultAudioDevice as IRoutingSinkNoSwitching; @@ -702,9 +695,9 @@ namespace PepperDash.Essentials /// public override void PowerOnToDefaultOrLastSource() { - if (!EnablePowerOnToLastSource || LastSourceKey == null) + if (!EnablePowerOnToLastSource || _lastSourceKey == null) return; - RunRouteAction(LastSourceKey); + RunRouteAction(_lastSourceKey); } /// @@ -715,7 +708,13 @@ namespace PepperDash.Essentials var allRooms = DeviceManager.AllDevices.Where(d => d is EssentialsHuddleSpaceRoom && !(d as EssentialsHuddleSpaceRoom).ExcludeFromGlobalFunctions); foreach (var room in allRooms) - (room as EssentialsHuddleSpaceRoom).RunRouteAction("roomOff"); + { + var essentialsHuddleSpaceRoom = room as EssentialsHuddleSpaceRoom; + if (essentialsHuddleSpaceRoom != null) + { + essentialsHuddleSpaceRoom.RunRouteAction("roomOff"); + } + } }