Added volume control switching to VTC1 class. Added volume zero/restore code to VTC1 and base classes. Related config

This commit is contained in:
Heath Volmer
2018-01-31 10:58:43 -07:00
parent 09b3f7c5e7
commit 4134622b28
6 changed files with 71 additions and 6 deletions

View File

@@ -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<EssentialsConfig>();
// 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
/// <param name="b"></param>
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;
}
/// <summary>
/// Returns the group for a given device key in config
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
public static string GetGroupForDeviceKey(string key)
{
var dev = ConfigObject.Devices.FirstOrDefault(d => d.Key.Equals(key, StringComparison.OrdinalIgnoreCase));

View File

@@ -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

View File

@@ -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

View File

@@ -122,7 +122,8 @@ namespace PepperDash.Essentials
string LastSourceKey;
/// <summary>
///
/// Sets the volume control device, and attaches/removes InUseTrackers with "audio"
/// tag to device.
/// </summary>
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")
{

View File

@@ -74,6 +74,13 @@ namespace PepperDash.Essentials
/// </summary>
protected abstract Func<bool> OnFeedbackFunc { get; }
protected Dictionary<IBasicVolumeWithFeedback, uint> SavedVolumeLevels = new Dictionary<IBasicVolumeWithFeedback, uint>();
/// <summary>
/// When volume control devices change, should we zero the one that we are leaving?
/// </summary>
public bool ZeroVolumeWhenSwtichingVolumeDevices { get; private set; }
/// <summary>
///
/// </summary>
@@ -223,6 +230,11 @@ namespace PepperDash.Essentials
}
}
//void SwapVolumeDevices(IBasicVolumeControls currentDevice, IBasicVolumeControls newDevice)
//{
//}
/// <summary>
/// Executes when RoomVacancyShutdownTimer expires. Used to trigger specific room actions as needed. Must nullify the timer object when executed
/// </summary>