mirror of
https://github.com/PepperDash/Essentials.git
synced 2026-02-15 20:54:55 +00:00
Added volume control switching to VTC1 class. Added volume zero/restore code to VTC1 and base classes. Related config
This commit is contained in:
@@ -18,7 +18,7 @@ namespace PepperDash.Essentials
|
|||||||
|
|
||||||
public static bool LoadConfig2()
|
public static bool LoadConfig2()
|
||||||
{
|
{
|
||||||
Debug.Console(0, "Using unmerged system/template configs.");
|
Debug.Console(0, "Loading unmerged system/template portal configuration file.");
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var filePath = string.Format(@"\NVRAM\program{0}\ConfigurationFile.json",
|
var filePath = string.Format(@"\NVRAM\program{0}\ConfigurationFile.json",
|
||||||
@@ -35,7 +35,7 @@ namespace PepperDash.Essentials
|
|||||||
var doubleObj = JObject.Parse(fs.ReadToEnd());
|
var doubleObj = JObject.Parse(fs.ReadToEnd());
|
||||||
ConfigObject = MergeConfigs(doubleObj).ToObject<EssentialsConfig>();
|
ConfigObject = MergeConfigs(doubleObj).ToObject<EssentialsConfig>();
|
||||||
|
|
||||||
// Extract SystemUrl and TemplateUrl
|
// Extract SystemUrl and TemplateUrl into final config output
|
||||||
|
|
||||||
if (doubleObj["system_url"] != null)
|
if (doubleObj["system_url"] != null)
|
||||||
{
|
{
|
||||||
@@ -83,7 +83,7 @@ namespace PepperDash.Essentials
|
|||||||
else
|
else
|
||||||
merged.Add("sourceLists", Merge(template["sourceLists"], system["sourceLists"]));
|
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...
|
// level anyway...
|
||||||
if (template["tieLines"] != null)
|
if (template["tieLines"] != null)
|
||||||
merged.Add("tieLines", template["tieLines"]);
|
merged.Add("tieLines", template["tieLines"]);
|
||||||
@@ -141,7 +141,6 @@ namespace PepperDash.Essentials
|
|||||||
/// <param name="b"></param>
|
/// <param name="b"></param>
|
||||||
static JObject Merge(JObject o1, JObject o2)
|
static JObject Merge(JObject o1, JObject o2)
|
||||||
{
|
{
|
||||||
//Console.WriteLine("Merging {0}\ronto {1}", o2, o1);
|
|
||||||
foreach (var o2Prop in o2)
|
foreach (var o2Prop in o2)
|
||||||
{
|
{
|
||||||
var o1Value = o1[o2Prop.Key];
|
var o1Value = o1[o2Prop.Key];
|
||||||
@@ -160,6 +159,11 @@ namespace PepperDash.Essentials
|
|||||||
return o1;
|
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)
|
public static string GetGroupForDeviceKey(string key)
|
||||||
{
|
{
|
||||||
var dev = ConfigObject.Devices.FirstOrDefault(d => d.Key.Equals(key, StringComparison.OrdinalIgnoreCase));
|
var dev = ConfigObject.Devices.FirstOrDefault(d => d.Key.Equals(key, StringComparison.OrdinalIgnoreCase));
|
||||||
|
|||||||
@@ -188,6 +188,7 @@ namespace PepperDash.Essentials.Room.Config
|
|||||||
public EssentialsLogoPropertiesConfig Logo { get; set; }
|
public EssentialsLogoPropertiesConfig Logo { get; set; }
|
||||||
public EssentialsRoomTechConfig Tech { get; set; }
|
public EssentialsRoomTechConfig Tech { get; set; }
|
||||||
public EssentialsRoomVolumesConfig Volumes { get; set; }
|
public EssentialsRoomVolumesConfig Volumes { get; set; }
|
||||||
|
public bool ZeroVolumeWhenSwtichingVolumeDevices { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public class EssentialsRoomMicrophonePrivacyConfig
|
public class EssentialsRoomMicrophonePrivacyConfig
|
||||||
|
|||||||
@@ -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;
|
IBasicVolumeControls volDev = null;
|
||||||
// Handle special cases for volume control
|
// Handle special cases for volume control
|
||||||
if (string.IsNullOrEmpty(item.VolumeControlKey)
|
if (string.IsNullOrEmpty(item.VolumeControlKey)
|
||||||
@@ -334,6 +334,10 @@ namespace PepperDash.Essentials
|
|||||||
else if (dev is IHasVolumeDevice)
|
else if (dev is IHasVolumeDevice)
|
||||||
volDev = (dev as IHasVolumeDevice).VolumeDevice;
|
volDev = (dev as IHasVolumeDevice).VolumeDevice;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (ZeroVolumeWhenSwtichingVolumeDevices && CurrentVolumeControls is IBasicVolumeWithFeedback)
|
||||||
|
(CurrentVolumeControls as IBasicVolumeWithFeedback).SetVolume(0);
|
||||||
|
|
||||||
CurrentVolumeControls = volDev;
|
CurrentVolumeControls = volDev;
|
||||||
|
|
||||||
// store the name and UI info for routes
|
// store the name and UI info for routes
|
||||||
|
|||||||
@@ -122,7 +122,8 @@ namespace PepperDash.Essentials
|
|||||||
string LastSourceKey;
|
string LastSourceKey;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
///
|
/// Sets the volume control device, and attaches/removes InUseTrackers with "audio"
|
||||||
|
/// tag to device.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public IBasicVolumeControls CurrentVolumeControls
|
public IBasicVolumeControls CurrentVolumeControls
|
||||||
{
|
{
|
||||||
@@ -211,6 +212,7 @@ namespace PepperDash.Essentials
|
|||||||
else if (defaultAudio is IHasVolumeDevice)
|
else if (defaultAudio is IHasVolumeDevice)
|
||||||
DefaultVolumeControls = (defaultAudio as IHasVolumeDevice).VolumeDevice;
|
DefaultVolumeControls = (defaultAudio as IHasVolumeDevice).VolumeDevice;
|
||||||
CurrentVolumeControls = DefaultVolumeControls;
|
CurrentVolumeControls = DefaultVolumeControls;
|
||||||
|
|
||||||
|
|
||||||
var disp = DefaultDisplay as DisplayBase;
|
var disp = DefaultDisplay as DisplayBase;
|
||||||
if (disp != null)
|
if (disp != null)
|
||||||
@@ -372,6 +374,48 @@ namespace PepperDash.Essentials
|
|||||||
(item.SourceDevice as IUsageTracking).UsageTracker.StartDeviceUsage();
|
(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
|
// store the name and UI info for routes
|
||||||
if (item.SourceKey == "$off")
|
if (item.SourceKey == "$off")
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -74,6 +74,13 @@ namespace PepperDash.Essentials
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
protected abstract Func<bool> OnFeedbackFunc { get; }
|
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>
|
||||||
///
|
///
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -223,6 +230,11 @@ namespace PepperDash.Essentials
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//void SwapVolumeDevices(IBasicVolumeControls currentDevice, IBasicVolumeControls newDevice)
|
||||||
|
//{
|
||||||
|
|
||||||
|
//}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Executes when RoomVacancyShutdownTimer expires. Used to trigger specific room actions as needed. Must nullify the timer object when executed
|
/// Executes when RoomVacancyShutdownTimer expires. Used to trigger specific room actions as needed. Must nullify the timer object when executed
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
Binary file not shown.
Reference in New Issue
Block a user