diff --git a/PepperDashEssentials/UIDrivers/EssentialsHuddle/EssentialsHuddleTechPageDriver.cs b/PepperDashEssentials/UIDrivers/EssentialsHuddle/EssentialsHuddleTechPageDriver.cs
index b8e1dfd6..32d8ebe4 100644
--- a/PepperDashEssentials/UIDrivers/EssentialsHuddle/EssentialsHuddleTechPageDriver.cs
+++ b/PepperDashEssentials/UIDrivers/EssentialsHuddle/EssentialsHuddleTechPageDriver.cs
@@ -1,326 +1,326 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Text.RegularExpressions;
-using Crestron.SimplSharp;
-using Crestron.SimplSharpPro.DeviceSupport;
-
-using PepperDash.Core;
-using PepperDash.Essentials;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Text.RegularExpressions;
+using Crestron.SimplSharp;
+using Crestron.SimplSharpPro.DeviceSupport;
+
+using PepperDash.Core;
+using PepperDash.Essentials;
using PepperDash.Essentials.Core;
-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;
-
-namespace PepperDash.Essentials.UIDrivers
-{
- public class EssentialsHuddleTechPageDriver : PanelDriverBase
- {
- ///
- ///
- ///
- SmartObjectDynamicList MenuList;
- ///
- ///
- ///
- SubpageReferenceList StatusList;
- ///
- /// The list of display controls
- ///
- SubpageReferenceList DisplayList;
- ///
- /// References lines in the list against device instances
- ///
- Dictionary StatusListDeviceIndexes;
- ///
- ///
- ///
- JoinedSigInterlock PagesInterlock;
-
- ///
- /// 1
- ///
- public const uint JoinText = 1;
-
- CTimer PinAuthorizedTimer;
-
- EssentialsRoomTechConfig Config;
-
- StringBuilder PinEntryBuilder = new StringBuilder(4);
-
- bool IsAuthorized;
-
- SmartObjectNumeric PinKeypad;
-
- ///
- ///
- ///
- ///
- ///
- public EssentialsHuddleTechPageDriver(BasicTriListWithSmartObject trilist, EssentialsRoomTechConfig config)
- : base(trilist)
- {
- Config = config;
-
- PagesInterlock = new JoinedSigInterlock(trilist);
- PagesInterlock.SetButDontShow(UIBoolJoin.TechSystemStatusVisible);
-
- trilist.SetSigFalseAction(UIBoolJoin.TechExitButton, Hide);
-
- MenuList = new SmartObjectDynamicList(trilist.SmartObjects[UISmartObjectJoin.TechMenuList],
- true, 3100);
-
- MenuList.SetFeedback(1, true); // initial fb
- ushort count = 0;
-
- MenuList.SetItemMainText(1, "System Status");
- MenuList.SetItemButtonAction(1, b => {
- if (b) PagesInterlock.ShowInterlocked(UIBoolJoin.TechSystemStatusVisible);
- MenuList.SetFeedback(1, true);
- });
-
- MenuList.SetItemMainText(2, "Display Controls");
- MenuList.SetItemButtonAction(2, b => {
- if (b) PagesInterlock.ShowInterlocked(UIBoolJoin.TechDisplayControlsVisible);
- MenuList.SetFeedback(2, true);
- });
-
- count = 2;
-
- // Don't show panel setup on iPad or xpanel
- if (TriList is Crestron.SimplSharpPro.DeviceSupport.TswFt5Button)
- {
- count++;
- MenuList.SetItemMainText(count, "Panel Setup");
- MenuList.SetItemButtonAction(count, b =>
- {
- if (b) PagesInterlock.ShowInterlocked(UIBoolJoin.TechPanelSetupVisible);
- MenuList.SetFeedback(count, true);
- });
- }
-
- MenuList.Count = count;
- BuildStatusList();
- BuildDisplayList();
- SetupPinModal();
- }
-
- ///
- ///
- ///
- public override void Show()
- {
- // divert to PIN if we need auth
- if (IsAuthorized)
- {
- // Cancel the auth timer so we don't deauth after coming back in
- if (PinAuthorizedTimer != null)
- PinAuthorizedTimer.Stop();
-
- TriList.SetBool(UIBoolJoin.TechCommonItemsVisbible, true);
- PagesInterlock.Show();
- base.Show();
- }
- else
- {
- TriList.SetBool(UIBoolJoin.PinDialog4DigitVisible, true);
- }
- }
-
- ///
- ///
- ///
- public override void Hide()
- {
- // Leave it authorized for 60 seconds.
- if (IsAuthorized)
- PinAuthorizedTimer = new CTimer(o => {
- IsAuthorized = false;
- PinAuthorizedTimer = null;
- }, 60000);
- TriList.SetBool(UIBoolJoin.TechCommonItemsVisbible, false);
- PagesInterlock.Hide();
- base.Hide();
- }
-
- ///
- /// Wire up the keypad and buttons
- ///
- void SetupPinModal()
- {
- TriList.SetSigFalseAction(UIBoolJoin.PinDialogCancelPress, CancelPinDialog);
- PinKeypad = new SmartObjectNumeric(TriList.SmartObjects[UISmartObjectJoin.TechPinDialogKeypad], true);
- PinKeypad.Digit0.UserObject = new Action(b => { if (b)DialPinDigit('0'); });
- PinKeypad.Digit1.UserObject = new Action(b => { if (b)DialPinDigit('1'); });
- PinKeypad.Digit2.UserObject = new Action(b => { if (b)DialPinDigit('2'); });
- PinKeypad.Digit3.UserObject = new Action(b => { if (b)DialPinDigit('3'); });
- PinKeypad.Digit4.UserObject = new Action(b => { if (b)DialPinDigit('4'); });
- PinKeypad.Digit5.UserObject = new Action(b => { if (b)DialPinDigit('5'); });
- PinKeypad.Digit6.UserObject = new Action(b => { if (b)DialPinDigit('6'); });
- PinKeypad.Digit7.UserObject = new Action(b => { if (b)DialPinDigit('7'); });
- PinKeypad.Digit8.UserObject = new Action(b => { if (b)DialPinDigit('8'); });
- PinKeypad.Digit9.UserObject = new Action(b => { if (b)DialPinDigit('9'); });
- }
-
- ///
- ///
- ///
- ///
- void DialPinDigit(char d)
- {
- PinEntryBuilder.Append(d);
- var len = PinEntryBuilder.Length;
- SetPinDotsFeedback(len);
-
- // check it!
- if (len == 4)
- {
- if (Config.Password == PinEntryBuilder.ToString())
- {
- IsAuthorized = true;
- SetPinDotsFeedback(0);
- TriList.SetBool(UIBoolJoin.PinDialog4DigitVisible, false);
- Show();
- }
- else
- {
- SetPinDotsFeedback(0);
- TriList.SetBool(UIBoolJoin.PinDialogErrorVisible, true);
- new CTimer(o =>
- {
- TriList.SetBool(UIBoolJoin.PinDialogErrorVisible, false);
- }, 1500);
- }
-
- PinEntryBuilder.Remove(0, len); // clear it either way
- }
- }
-
- ///
- /// Draws the dots as pin is entered
- ///
- ///
- void SetPinDotsFeedback(int len)
- {
- TriList.SetBool(UIBoolJoin.PinDialogDot1, len >= 1);
- TriList.SetBool(UIBoolJoin.PinDialogDot2, len >= 2);
- TriList.SetBool(UIBoolJoin.PinDialogDot3, len >= 3);
- TriList.SetBool(UIBoolJoin.PinDialogDot4, len == 4);
-
- }
-
- ///
- /// Does what it says
- ///
- void CancelPinDialog()
- {
- PinEntryBuilder.Remove(0, PinEntryBuilder.Length);
- TriList.SetBool(UIBoolJoin.PinDialog4DigitVisible, false);
- }
-
-
- ///
- ///
- ///
- void BuildStatusList()
- {
- StatusList = new SubpageReferenceList(TriList, UISmartObjectJoin.TechStatusList, 3, 3, 3);
- StatusListDeviceIndexes = new Dictionary();
- uint i = 0;
- foreach (var d in DeviceManager.AllDevices)
- {
- // make sure it is both ICommunicationMonitor and a Device
- var sd = d as ICommunicationMonitor;
- if (sd == null)
- continue;
- var dd = sd as Device;
- if(dd == null)
- continue;
- i++;
- StatusList.StringInputSig(i, 1).StringValue = dd.Name;
- StatusList.UShortInputSig(i, 1).UShortValue = (ushort)sd.CommunicationMonitor.Status;
- StatusListDeviceIndexes.Add(sd, i);
- sd.CommunicationMonitor.StatusChange += CommunicationMonitor_StatusChange ;
- }
- StatusList.Count = (ushort)i;
- }
-
- ///
- /// Builds the list of display controls
- ///
- void BuildDisplayList()
- {
- DisplayList = new SubpageReferenceList(TriList, UISmartObjectJoin.TechDisplayControlsList, 10, 3, 3);
-
- var devKeys = ConfigReader.ConfigObject.Devices.Where(d =>
- d.Group.Equals("display", StringComparison.OrdinalIgnoreCase)
- || d.Group.Equals("projector", StringComparison.OrdinalIgnoreCase))
- .Select(dd => dd.Key);
- var disps = DeviceManager.AllDevices.Where(d =>
- devKeys.Contains(d.Key));
- ushort i = 0;
- foreach (var disp in disps)
- {
- var display = disp as DisplayBase;
- if (display != null)
- {
- i++;
- DisplayList.StringInputSig(i, 1).StringValue = display.Name;
- DisplayList.GetBoolFeedbackSig(i, 1).SetSigFalseAction(display.PowerOn);
- DisplayList.GetBoolFeedbackSig(i, 2).SetSigFalseAction(display.PowerOff);
- if (display is TwoWayDisplayBase)
- {
- var powerOnSig = DisplayList.BoolInputSig(i, 1);
- (display as TwoWayDisplayBase).PowerIsOnFeedback.LinkInputSig(powerOnSig);
-
- var powerOffSig = DisplayList.BoolInputSig(1, 2);
- (display as TwoWayDisplayBase).PowerIsOnFeedback.LinkComplementInputSig(powerOffSig);
- }
- DisplayList.GetBoolFeedbackSig(i, 3).SetSigFalseAction(() =>
- { if (display is IInputHdmi1) (display as IInputHdmi1).InputHdmi1(); });
- DisplayList.GetBoolFeedbackSig(i, 4).SetSigFalseAction(() =>
- { if (display is IInputHdmi2) (display as IInputHdmi2).InputHdmi2(); });
- DisplayList.GetBoolFeedbackSig(i, 5).SetSigFalseAction(() =>
- { if (display is IInputHdmi3) (display as IInputHdmi3).InputHdmi3(); });
- //DisplayList.GetBoolFeedbackSig(i, 6).SetSigFalseAction(() =>
- //{ if (display is IInputHdmi4) (display as IInputHdmi4).InputHdmi4(); });
- DisplayList.GetBoolFeedbackSig(i, 6).SetSigFalseAction(() =>
- { if (display is IInputDisplayPort1) (display as IInputDisplayPort1).InputDisplayPort1(); });
-
-
- // Figure out some way to provide current input feedback
- if (display is TwoWayDisplayBase)
- {
- (display as TwoWayDisplayBase).CurrentInputFeedback.OutputChange += CurrentInputFeedback_OutputChange;
- }
- }
-
-
- }
-
- DisplayList.Count = i;
- }
-
-
- void CurrentInputFeedback_OutputChange(object sender, EventArgs e)
- {
-
- }
-
- ///
- ///
- ///
- void CommunicationMonitor_StatusChange(object sender, MonitorStatusChangeEventArgs e)
- {
- var c = sender as ICommunicationMonitor;
- if (StatusListDeviceIndexes.ContainsKey(c))
- {
- var i = StatusListDeviceIndexes[c];
- StatusList.UShortInputSig(i, 1).UShortValue = (ushort)e.Status;
- }
- }
- }
+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;
+
+namespace PepperDash.Essentials.UIDrivers
+{
+ public class EssentialsHuddleTechPageDriver : PanelDriverBase
+ {
+ ///
+ ///
+ ///
+ SmartObjectDynamicList MenuList;
+ ///
+ ///
+ ///
+ SubpageReferenceList StatusList;
+ ///
+ /// The list of display controls
+ ///
+ SubpageReferenceList DisplayList;
+ ///
+ /// References lines in the list against device instances
+ ///
+ Dictionary StatusListDeviceIndexes;
+ ///
+ ///
+ ///
+ JoinedSigInterlock PagesInterlock;
+
+ ///
+ /// 1
+ ///
+ public const uint JoinText = 1;
+
+ CTimer PinAuthorizedTimer;
+
+ EssentialsRoomTechConfig Config;
+
+ StringBuilder PinEntryBuilder = new StringBuilder(4);
+
+ bool IsAuthorized;
+
+ SmartObjectNumeric PinKeypad;
+
+ ///
+ ///
+ ///
+ ///
+ ///
+ public EssentialsHuddleTechPageDriver(BasicTriListWithSmartObject trilist, EssentialsRoomTechConfig config)
+ : base(trilist)
+ {
+ Config = config;
+
+ PagesInterlock = new JoinedSigInterlock(trilist);
+ PagesInterlock.SetButDontShow(UIBoolJoin.TechSystemStatusVisible);
+
+ trilist.SetSigFalseAction(UIBoolJoin.TechExitButton, Hide);
+
+ MenuList = new SmartObjectDynamicList(trilist.SmartObjects[UISmartObjectJoin.TechMenuList],
+ true, 3100);
+
+ MenuList.SetFeedback(1, true); // initial fb
+ ushort count = 0;
+
+ MenuList.SetItemMainText(1, "System Status");
+ MenuList.SetItemButtonAction(1, b => {
+ if (b) PagesInterlock.ShowInterlocked(UIBoolJoin.TechSystemStatusVisible);
+ MenuList.SetFeedback(1, true);
+ });
+
+ MenuList.SetItemMainText(2, "Display Controls");
+ MenuList.SetItemButtonAction(2, b => {
+ if (b) PagesInterlock.ShowInterlocked(UIBoolJoin.TechDisplayControlsVisible);
+ MenuList.SetFeedback(2, true);
+ });
+
+ count = 2;
+
+ // Don't show panel setup on iPad or xpanel
+ if (TriList is Crestron.SimplSharpPro.DeviceSupport.TswFt5Button)
+ {
+ count++;
+ MenuList.SetItemMainText(count, "Panel Setup");
+ MenuList.SetItemButtonAction(count, b =>
+ {
+ if (b) PagesInterlock.ShowInterlocked(UIBoolJoin.TechPanelSetupVisible);
+ MenuList.SetFeedback(count, true);
+ });
+ }
+
+ MenuList.Count = count;
+ BuildStatusList();
+ BuildDisplayList();
+ SetupPinModal();
+ }
+
+ ///
+ ///
+ ///
+ public override void Show()
+ {
+ // divert to PIN if we need auth
+ if (IsAuthorized)
+ {
+ // Cancel the auth timer so we don't deauth after coming back in
+ if (PinAuthorizedTimer != null)
+ PinAuthorizedTimer.Stop();
+
+ TriList.SetBool(UIBoolJoin.TechCommonItemsVisbible, true);
+ PagesInterlock.Show();
+ base.Show();
+ }
+ else
+ {
+ TriList.SetBool(UIBoolJoin.PinDialog4DigitVisible, true);
+ }
+ }
+
+ ///
+ ///
+ ///
+ public override void Hide()
+ {
+ // Leave it authorized for 60 seconds.
+ if (IsAuthorized)
+ PinAuthorizedTimer = new CTimer(o => {
+ IsAuthorized = false;
+ PinAuthorizedTimer = null;
+ }, 60000);
+ TriList.SetBool(UIBoolJoin.TechCommonItemsVisbible, false);
+ PagesInterlock.Hide();
+ base.Hide();
+ }
+
+ ///
+ /// Wire up the keypad and buttons
+ ///
+ void SetupPinModal()
+ {
+ TriList.SetSigFalseAction(UIBoolJoin.PinDialogCancelPress, CancelPinDialog);
+ PinKeypad = new SmartObjectNumeric(TriList.SmartObjects[UISmartObjectJoin.TechPinDialogKeypad], true);
+ PinKeypad.Digit0.UserObject = new Action(b => { if (b)DialPinDigit('0'); });
+ PinKeypad.Digit1.UserObject = new Action(b => { if (b)DialPinDigit('1'); });
+ PinKeypad.Digit2.UserObject = new Action(b => { if (b)DialPinDigit('2'); });
+ PinKeypad.Digit3.UserObject = new Action(b => { if (b)DialPinDigit('3'); });
+ PinKeypad.Digit4.UserObject = new Action(b => { if (b)DialPinDigit('4'); });
+ PinKeypad.Digit5.UserObject = new Action(b => { if (b)DialPinDigit('5'); });
+ PinKeypad.Digit6.UserObject = new Action(b => { if (b)DialPinDigit('6'); });
+ PinKeypad.Digit7.UserObject = new Action(b => { if (b)DialPinDigit('7'); });
+ PinKeypad.Digit8.UserObject = new Action(b => { if (b)DialPinDigit('8'); });
+ PinKeypad.Digit9.UserObject = new Action(b => { if (b)DialPinDigit('9'); });
+ }
+
+ ///
+ ///
+ ///
+ ///
+ void DialPinDigit(char d)
+ {
+ PinEntryBuilder.Append(d);
+ var len = PinEntryBuilder.Length;
+ SetPinDotsFeedback(len);
+
+ // check it!
+ if (len == 4)
+ {
+ if (Config.Password == PinEntryBuilder.ToString())
+ {
+ IsAuthorized = true;
+ SetPinDotsFeedback(0);
+ TriList.SetBool(UIBoolJoin.PinDialog4DigitVisible, false);
+ Show();
+ }
+ else
+ {
+ SetPinDotsFeedback(0);
+ TriList.SetBool(UIBoolJoin.PinDialogErrorVisible, true);
+ new CTimer(o =>
+ {
+ TriList.SetBool(UIBoolJoin.PinDialogErrorVisible, false);
+ }, 1500);
+ }
+
+ PinEntryBuilder.Remove(0, len); // clear it either way
+ }
+ }
+
+ ///
+ /// Draws the dots as pin is entered
+ ///
+ ///
+ void SetPinDotsFeedback(int len)
+ {
+ TriList.SetBool(UIBoolJoin.PinDialogDot1, len >= 1);
+ TriList.SetBool(UIBoolJoin.PinDialogDot2, len >= 2);
+ TriList.SetBool(UIBoolJoin.PinDialogDot3, len >= 3);
+ TriList.SetBool(UIBoolJoin.PinDialogDot4, len == 4);
+
+ }
+
+ ///
+ /// Does what it says
+ ///
+ void CancelPinDialog()
+ {
+ PinEntryBuilder.Remove(0, PinEntryBuilder.Length);
+ TriList.SetBool(UIBoolJoin.PinDialog4DigitVisible, false);
+ }
+
+
+ ///
+ ///
+ ///
+ void BuildStatusList()
+ {
+ StatusList = new SubpageReferenceList(TriList, UISmartObjectJoin.TechStatusList, 3, 3, 3);
+ StatusListDeviceIndexes = new Dictionary();
+ uint i = 0;
+ foreach (var d in DeviceManager.AllDevices)
+ {
+ // make sure it is both ICommunicationMonitor and a Device
+ var sd = d as ICommunicationMonitor;
+ if (sd == null)
+ continue;
+ var dd = sd as Device;
+ if(dd == null)
+ continue;
+ i++;
+ StatusList.StringInputSig(i, 1).StringValue = dd.Name;
+ StatusList.UShortInputSig(i, 1).UShortValue = (ushort)sd.CommunicationMonitor.Status;
+ StatusListDeviceIndexes.Add(sd, i);
+ sd.CommunicationMonitor.StatusChange += CommunicationMonitor_StatusChange ;
+ }
+ StatusList.Count = (ushort)i;
+ }
+
+ ///
+ /// Builds the list of display controls
+ ///
+ void BuildDisplayList()
+ {
+ DisplayList = new SubpageReferenceList(TriList, UISmartObjectJoin.TechDisplayControlsList, 10, 3, 3);
+
+ var devKeys = ConfigReader.ConfigObject.Devices.Where(d =>
+ d.Group.Equals("display", StringComparison.OrdinalIgnoreCase)
+ || d.Group.Equals("projector", StringComparison.OrdinalIgnoreCase))
+ .Select(dd => dd.Key);
+ var disps = DeviceManager.AllDevices.Where(d =>
+ devKeys.Contains(d.Key));
+ ushort i = 0;
+ foreach (var disp in disps)
+ {
+ var display = disp as DisplayBase;
+ if (display != null)
+ {
+ i++;
+ DisplayList.StringInputSig(i, 1).StringValue = display.Name;
+ DisplayList.GetBoolFeedbackSig(i, 1).SetSigFalseAction(display.PowerOn);
+ DisplayList.GetBoolFeedbackSig(i, 2).SetSigFalseAction(display.PowerOff);
+ if (display is TwoWayDisplayBase)
+ {
+ var powerOnSig = DisplayList.BoolInputSig(i, 1);
+ (display as TwoWayDisplayBase).PowerIsOnFeedback.LinkInputSig(powerOnSig);
+
+ var powerOffSig = DisplayList.BoolInputSig(1, 2);
+ (display as TwoWayDisplayBase).PowerIsOnFeedback.LinkComplementInputSig(powerOffSig);
+ }
+ DisplayList.GetBoolFeedbackSig(i, 3).SetSigFalseAction(() =>
+ { if (display is IInputHdmi1) (display as IInputHdmi1).InputHdmi1(); });
+ DisplayList.GetBoolFeedbackSig(i, 4).SetSigFalseAction(() =>
+ { if (display is IInputHdmi2) (display as IInputHdmi2).InputHdmi2(); });
+ DisplayList.GetBoolFeedbackSig(i, 5).SetSigFalseAction(() =>
+ { if (display is IInputHdmi3) (display as IInputHdmi3).InputHdmi3(); });
+ //DisplayList.GetBoolFeedbackSig(i, 6).SetSigFalseAction(() =>
+ //{ if (display is IInputHdmi4) (display as IInputHdmi4).InputHdmi4(); });
+ DisplayList.GetBoolFeedbackSig(i, 6).SetSigFalseAction(() =>
+ { if (display is IInputDisplayPort1) (display as IInputDisplayPort1).InputDisplayPort1(); });
+
+
+ // Figure out some way to provide current input feedback
+ if (display is TwoWayDisplayBase)
+ {
+ (display as TwoWayDisplayBase).CurrentInputFeedback.OutputChange += CurrentInputFeedback_OutputChange;
+ }
+ }
+
+
+ }
+
+ DisplayList.Count = i;
+ }
+
+
+ void CurrentInputFeedback_OutputChange(object sender, EventArgs e)
+ {
+
+ }
+
+ ///
+ ///
+ ///
+ void CommunicationMonitor_StatusChange(object sender, MonitorStatusChangeEventArgs e)
+ {
+ var c = sender as ICommunicationMonitor;
+ if (c != null && StatusListDeviceIndexes.ContainsKey(c))
+ {
+ var i = StatusListDeviceIndexes[c];
+ StatusList.UShortInputSig(i, 1).UShortValue = (ushort)e.Status;
+ }
+ }
+ }
}
\ No newline at end of file
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 e2f5aaf4..57433187 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
@@ -157,7 +157,18 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
{
get
{
- return () => CrestronEnvironment.ScaleWithLimits(Configuration.Audio.Output.Volume, 100, 0, 65535, 0);
+ return () =>
+ {
+ var scaledVol = CrestronEnvironment.ScaleWithLimits(Configuration.Audio.Output.Volume, 100, 0, 65535, 0);
+
+ if (Configuration.Audio.Output.Volume != 0)
+ {
+ Debug.Console(2, this, "Storing previous volume level as: {0}, scaled: {1}", Configuration.Audio.Output.Volume, scaledVol);
+ _previousVolumeLevel = scaledVol; // Store the previous level for recall
+ }
+
+ return scaledVol;
+ };
}
}
@@ -1684,12 +1695,12 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
public override void MuteOff()
{
+ Debug.Console(2, this, "Unmuting to previous level: {0}", _previousVolumeLevel);
SetVolume((ushort)_previousVolumeLevel);
}
public override void MuteOn()
{
- _previousVolumeLevel = Configuration.Audio.Output.Volume; // Store the previous level for recall
SetVolume(0);
}