diff --git a/Essentials/PepperDashEssentials/Config/ConfigReader.cs b/Essentials/PepperDashEssentials/Config/ConfigReader.cs index 76055d61..bd4b76af 100644 --- a/Essentials/PepperDashEssentials/Config/ConfigReader.cs +++ b/Essentials/PepperDashEssentials/Config/ConfigReader.cs @@ -18,7 +18,7 @@ namespace PepperDash.Essentials public static bool LoadConfig2() { - Debug.Console(0, "Using unmerged system/template configs."); + Debug.Console(0, "Loading unmerged system/template portal configuration file."); try { var filePath = string.Format(@"\NVRAM\program{0}\ConfigurationFile.json", @@ -35,7 +35,7 @@ namespace PepperDash.Essentials var doubleObj = JObject.Parse(fs.ReadToEnd()); ConfigObject = MergeConfigs(doubleObj).ToObject(); - // Extract SystemUrl and TemplateUrl + // Extract SystemUrl and TemplateUrl into final config output if (doubleObj["system_url"] != null) { @@ -83,7 +83,7 @@ namespace PepperDash.Essentials else merged.Add("sourceLists", Merge(template["sourceLists"], system["sourceLists"])); - // Template tie lines take precdence. Config tool probably can't do them at system + // Template tie lines take precdence. Config tool doesn't do them at system // level anyway... if (template["tieLines"] != null) merged.Add("tieLines", template["tieLines"]); @@ -141,7 +141,6 @@ namespace PepperDash.Essentials /// static JObject Merge(JObject o1, JObject o2) { - //Console.WriteLine("Merging {0}\ronto {1}", o2, o1); foreach (var o2Prop in o2) { var o1Value = o1[o2Prop.Key]; @@ -160,6 +159,11 @@ namespace PepperDash.Essentials return o1; } + /// + /// Returns the group for a given device key in config + /// + /// + /// public static string GetGroupForDeviceKey(string key) { var dev = ConfigObject.Devices.FirstOrDefault(d => d.Key.Equals(key, StringComparison.OrdinalIgnoreCase)); diff --git a/Essentials/PepperDashEssentials/Room/Config/EssentialsRoomConfig.cs b/Essentials/PepperDashEssentials/Room/Config/EssentialsRoomConfig.cs index 54f5a959..6327c8f2 100644 --- a/Essentials/PepperDashEssentials/Room/Config/EssentialsRoomConfig.cs +++ b/Essentials/PepperDashEssentials/Room/Config/EssentialsRoomConfig.cs @@ -188,6 +188,7 @@ namespace PepperDash.Essentials.Room.Config public EssentialsLogoPropertiesConfig Logo { get; set; } public EssentialsRoomTechConfig Tech { get; set; } public EssentialsRoomVolumesConfig Volumes { get; set; } + public bool ZeroVolumeWhenSwtichingVolumeDevices { get; set; } } public class EssentialsRoomMicrophonePrivacyConfig diff --git a/Essentials/PepperDashEssentials/Room/Types/EssentialsHuddleSpaceRoom.cs b/Essentials/PepperDashEssentials/Room/Types/EssentialsHuddleSpaceRoom.cs index 77076b36..3428db22 100644 --- a/Essentials/PepperDashEssentials/Room/Types/EssentialsHuddleSpaceRoom.cs +++ b/Essentials/PepperDashEssentials/Room/Types/EssentialsHuddleSpaceRoom.cs @@ -317,7 +317,7 @@ namespace PepperDash.Essentials } - // Set volume control on room, using default if non provided + // Set volume control, using default if non provided IBasicVolumeControls volDev = null; // Handle special cases for volume control if (string.IsNullOrEmpty(item.VolumeControlKey) @@ -334,6 +334,10 @@ namespace PepperDash.Essentials else if (dev is IHasVolumeDevice) volDev = (dev as IHasVolumeDevice).VolumeDevice; } + + if (ZeroVolumeWhenSwtichingVolumeDevices && CurrentVolumeControls is IBasicVolumeWithFeedback) + (CurrentVolumeControls as IBasicVolumeWithFeedback).SetVolume(0); + CurrentVolumeControls = volDev; // store the name and UI info for routes diff --git a/Essentials/PepperDashEssentials/Room/Types/EssentialsHuddleVtc1Room.cs b/Essentials/PepperDashEssentials/Room/Types/EssentialsHuddleVtc1Room.cs index 0a3cbf3d..bce73cb4 100644 --- a/Essentials/PepperDashEssentials/Room/Types/EssentialsHuddleVtc1Room.cs +++ b/Essentials/PepperDashEssentials/Room/Types/EssentialsHuddleVtc1Room.cs @@ -122,7 +122,8 @@ namespace PepperDash.Essentials string LastSourceKey; /// - /// + /// Sets the volume control device, and attaches/removes InUseTrackers with "audio" + /// tag to device. /// public IBasicVolumeControls CurrentVolumeControls { @@ -211,6 +212,7 @@ namespace PepperDash.Essentials else if (defaultAudio is IHasVolumeDevice) DefaultVolumeControls = (defaultAudio as IHasVolumeDevice).VolumeDevice; CurrentVolumeControls = DefaultVolumeControls; + var disp = DefaultDisplay as DisplayBase; if (disp != null) @@ -372,6 +374,48 @@ namespace PepperDash.Essentials (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; + else if (item.VolumeControlKey.Equals("$defaultDisplay", StringComparison.OrdinalIgnoreCase)) + volDev = DefaultDisplay as IBasicVolumeControls; + // 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; + } + + // 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") { diff --git a/Essentials/PepperDashEssentials/Room/Types/EssentialsRoomBase.cs b/Essentials/PepperDashEssentials/Room/Types/EssentialsRoomBase.cs index 7e18f55b..6a72929a 100644 --- a/Essentials/PepperDashEssentials/Room/Types/EssentialsRoomBase.cs +++ b/Essentials/PepperDashEssentials/Room/Types/EssentialsRoomBase.cs @@ -74,6 +74,13 @@ namespace PepperDash.Essentials /// protected abstract Func OnFeedbackFunc { get; } + protected Dictionary SavedVolumeLevels = new Dictionary(); + + /// + /// When volume control devices change, should we zero the one that we are leaving? + /// + public bool ZeroVolumeWhenSwtichingVolumeDevices { get; private set; } + /// /// /// @@ -223,6 +230,11 @@ namespace PepperDash.Essentials } } + //void SwapVolumeDevices(IBasicVolumeControls currentDevice, IBasicVolumeControls newDevice) + //{ + + //} + /// /// Executes when RoomVacancyShutdownTimer expires. Used to trigger specific room actions as needed. Must nullify the timer object when executed /// diff --git a/Release Package/PepperDashEssentials.cpz b/Release Package/PepperDashEssentials.cpz index 700a51d3..f4bf645d 100644 Binary files a/Release Package/PepperDashEssentials.cpz and b/Release Package/PepperDashEssentials.cpz differ