mirror of
https://github.com/PepperDash/Essentials.git
synced 2026-02-16 05:05:00 +00:00
Updates Vtc1 room types to allow for deactivation/activation
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -389,3 +389,4 @@ MigrationBackup/
|
|||||||
# Fody - auto-generated XML schema
|
# Fody - auto-generated XML schema
|
||||||
FodyWeavers.xsd
|
FodyWeavers.xsd
|
||||||
essentials-framework/Essentials Interfaces/PepperDash_Essentials_Interfaces/PepperDash_Essentials_Interfaces.csproj
|
essentials-framework/Essentials Interfaces/PepperDash_Essentials_Interfaces/PepperDash_Essentials_Interfaces.csproj
|
||||||
|
.DS_Store
|
||||||
|
|||||||
@@ -226,66 +226,66 @@ namespace PepperDash.Essentials
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Initialize()
|
public override void Initialize()
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
if (DefaultAudioDevice is IBasicVolumeControls)
|
//if (DefaultAudioDevice is IBasicVolumeControls)
|
||||||
DefaultVolumeControls = DefaultAudioDevice as IBasicVolumeControls;
|
// DefaultVolumeControls = DefaultAudioDevice as IBasicVolumeControls;
|
||||||
else if (DefaultAudioDevice is IHasVolumeDevice)
|
//else if (DefaultAudioDevice is IHasVolumeDevice)
|
||||||
DefaultVolumeControls = (DefaultAudioDevice as IHasVolumeDevice).VolumeDevice;
|
// DefaultVolumeControls = (DefaultAudioDevice as IHasVolumeDevice).VolumeDevice;
|
||||||
CurrentVolumeControls = DefaultVolumeControls;
|
//CurrentVolumeControls = DefaultVolumeControls;
|
||||||
|
|
||||||
|
|
||||||
// Combines call feedback from both codecs if available
|
//// Combines call feedback from both codecs if available
|
||||||
InCallFeedback = new BoolFeedback(() =>
|
//InCallFeedback = new BoolFeedback(() =>
|
||||||
{
|
//{
|
||||||
bool inAudioCall = false;
|
// bool inAudioCall = false;
|
||||||
bool inVideoCall = false;
|
// bool inVideoCall = false;
|
||||||
|
|
||||||
if (AudioCodec != null)
|
// if (AudioCodec != null)
|
||||||
inAudioCall = AudioCodec.IsInCall;
|
// inAudioCall = AudioCodec.IsInCall;
|
||||||
|
|
||||||
if (VideoCodec != null)
|
// if (VideoCodec != null)
|
||||||
inVideoCall = VideoCodec.IsInCall;
|
// inVideoCall = VideoCodec.IsInCall;
|
||||||
|
|
||||||
if (inAudioCall || inVideoCall)
|
// if (inAudioCall || inVideoCall)
|
||||||
return true;
|
// return true;
|
||||||
else
|
// else
|
||||||
return false;
|
// return false;
|
||||||
});
|
//});
|
||||||
|
|
||||||
SetupDisplays();
|
//SetupDisplays();
|
||||||
|
|
||||||
// Get Microphone Privacy object, if any MUST HAPPEN AFTER setting InCallFeedback
|
//// Get Microphone Privacy object, if any MUST HAPPEN AFTER setting InCallFeedback
|
||||||
this.MicrophonePrivacy = EssentialsRoomConfigHelper.GetMicrophonePrivacy(PropertiesConfig, this);
|
//this.MicrophonePrivacy = EssentialsRoomConfigHelper.GetMicrophonePrivacy(PropertiesConfig, this);
|
||||||
|
|
||||||
Debug.Console(2, this, "Microphone Privacy Config evaluated.");
|
//Debug.Console(2, this, "Microphone Privacy Config evaluated.");
|
||||||
|
|
||||||
// Get emergency object, if any
|
//// Get emergency object, if any
|
||||||
this.Emergency = EssentialsRoomConfigHelper.GetEmergency(PropertiesConfig, this);
|
//this.Emergency = EssentialsRoomConfigHelper.GetEmergency(PropertiesConfig, this);
|
||||||
|
|
||||||
Debug.Console(2, this, "Emergency Config evaluated.");
|
//Debug.Console(2, this, "Emergency Config evaluated.");
|
||||||
|
|
||||||
|
|
||||||
VideoCodec.CallStatusChange += (o, a) => this.InCallFeedback.FireUpdate();
|
//VideoCodec.CallStatusChange += (o, a) => this.InCallFeedback.FireUpdate();
|
||||||
VideoCodec.IsReadyChange += (o, a) => { this.SetCodecExternalSources(); SetCodecBranding(); };
|
//VideoCodec.IsReadyChange += (o, a) => { this.SetCodecExternalSources(); SetCodecBranding(); };
|
||||||
|
|
||||||
if (AudioCodec != null)
|
//if (AudioCodec != null)
|
||||||
AudioCodec.CallStatusChange += (o, a) => this.InCallFeedback.FireUpdate();
|
// AudioCodec.CallStatusChange += (o, a) => this.InCallFeedback.FireUpdate();
|
||||||
|
|
||||||
IsSharingFeedback = new BoolFeedback(() => VideoCodec.SharingContentIsOnFeedback.BoolValue);
|
//IsSharingFeedback = new BoolFeedback(() => VideoCodec.SharingContentIsOnFeedback.BoolValue);
|
||||||
VideoCodec.SharingContentIsOnFeedback.OutputChange += (o, a) => this.IsSharingFeedback.FireUpdate();
|
//VideoCodec.SharingContentIsOnFeedback.OutputChange += (o, a) => this.IsSharingFeedback.FireUpdate();
|
||||||
|
|
||||||
// link privacy to VC (for now?)
|
//// link privacy to VC (for now?)
|
||||||
PrivacyModeIsOnFeedback = new BoolFeedback(() => VideoCodec.PrivacyModeIsOnFeedback.BoolValue);
|
//PrivacyModeIsOnFeedback = new BoolFeedback(() => VideoCodec.PrivacyModeIsOnFeedback.BoolValue);
|
||||||
VideoCodec.PrivacyModeIsOnFeedback.OutputChange += (o, a) => this.PrivacyModeIsOnFeedback.FireUpdate();
|
//VideoCodec.PrivacyModeIsOnFeedback.OutputChange += (o, a) => this.PrivacyModeIsOnFeedback.FireUpdate();
|
||||||
|
|
||||||
CallTypeFeedback = new IntFeedback(() => 0);
|
//CallTypeFeedback = new IntFeedback(() => 0);
|
||||||
|
|
||||||
SetSourceListKey();
|
SetSourceListKey();
|
||||||
|
|
||||||
EnablePowerOnToLastSource = true;
|
//EnablePowerOnToLastSource = true;
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
@@ -297,7 +297,9 @@ namespace PepperDash.Essentials
|
|||||||
{
|
{
|
||||||
//DefaultDisplay = DeviceManager.GetDeviceForKey(PropertiesConfig.DefaultDisplayKey) as IRoutingSinkWithSwitching;
|
//DefaultDisplay = DeviceManager.GetDeviceForKey(PropertiesConfig.DefaultDisplayKey) as IRoutingSinkWithSwitching;
|
||||||
|
|
||||||
var destinationList = ConfigReader.ConfigObject.DestinationLists[PropertiesConfig.DestinationListKey];
|
var destinationList = ConfigReader.ConfigObject.DestinationLists[PropertiesConfig.DestinationListKey];
|
||||||
|
|
||||||
|
Displays.Clear();
|
||||||
|
|
||||||
foreach (var destination in destinationList)
|
foreach (var destination in destinationList)
|
||||||
{
|
{
|
||||||
@@ -314,37 +316,54 @@ namespace PepperDash.Essentials
|
|||||||
// Link power, warming, cooling to display
|
// Link power, warming, cooling to display
|
||||||
var dispTwoWay = display as IHasPowerControlWithFeedback;
|
var dispTwoWay = display as IHasPowerControlWithFeedback;
|
||||||
if (dispTwoWay != null)
|
if (dispTwoWay != null)
|
||||||
{
|
{
|
||||||
dispTwoWay.PowerIsOnFeedback.OutputChange += (o, a) =>
|
dispTwoWay.PowerIsOnFeedback.OutputChange -= PowerIsOnFeedback_OutputChange;
|
||||||
{
|
dispTwoWay.PowerIsOnFeedback.OutputChange += PowerIsOnFeedback_OutputChange;
|
||||||
if (dispTwoWay.PowerIsOnFeedback.BoolValue != OnFeedback.BoolValue)
|
|
||||||
{
|
if (dispTwoWay.PowerIsOnFeedback.BoolValue)
|
||||||
//if (!dispTwoWay.PowerIsOnFeedback.BoolValue)
|
{
|
||||||
// CurrentSourceInfo = null;
|
SetDefaultLevels();
|
||||||
OnFeedback.FireUpdate();
|
}
|
||||||
}
|
}
|
||||||
if (dispTwoWay.PowerIsOnFeedback.BoolValue)
|
|
||||||
{
|
display.IsWarmingUpFeedback.OutputChange -= IsWarmingUpFeedback_OutputChange;
|
||||||
SetDefaultLevels();
|
display.IsWarmingUpFeedback.OutputChange += IsWarmingUpFeedback_OutputChange;
|
||||||
}
|
|
||||||
};
|
display.IsCoolingDownFeedback.OutputChange -= IsCoolingDownFeedback_OutputChange;
|
||||||
}
|
display.IsCoolingDownFeedback.OutputChange += IsCoolingDownFeedback_OutputChange;
|
||||||
|
|
||||||
display.IsWarmingUpFeedback.OutputChange += (o, a) =>
|
|
||||||
{
|
|
||||||
IsWarmingUpFeedback.FireUpdate();
|
|
||||||
if (!IsWarmingUpFeedback.BoolValue)
|
|
||||||
(CurrentVolumeControls as IBasicVolumeWithFeedback).SetVolume(DefaultVolume);
|
|
||||||
};
|
|
||||||
display.IsCoolingDownFeedback.OutputChange += (o, a) =>
|
|
||||||
{
|
|
||||||
IsCoolingDownFeedback.FireUpdate();
|
|
||||||
};
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void IsCoolingDownFeedback_OutputChange(object sender, FeedbackEventArgs e)
|
||||||
|
{
|
||||||
|
IsCoolingDownFeedback.FireUpdate();
|
||||||
|
}
|
||||||
|
|
||||||
|
void IsWarmingUpFeedback_OutputChange(object sender, FeedbackEventArgs e)
|
||||||
|
{
|
||||||
|
IsWarmingUpFeedback.FireUpdate();
|
||||||
|
if (!IsWarmingUpFeedback.BoolValue)
|
||||||
|
(CurrentVolumeControls as IBasicVolumeWithFeedback).SetVolume(DefaultVolume);
|
||||||
|
}
|
||||||
|
|
||||||
|
void PowerIsOnFeedback_OutputChange(object sender, FeedbackEventArgs e)
|
||||||
|
{
|
||||||
|
var dispTwoWay = sender as IHasPowerControlWithFeedback;
|
||||||
|
|
||||||
|
if (dispTwoWay != null && dispTwoWay.PowerIsOnFeedback.BoolValue != OnFeedback.BoolValue)
|
||||||
|
{
|
||||||
|
//if (!dispTwoWay.PowerIsOnFeedback.BoolValue)
|
||||||
|
// CurrentSourceInfo = null;
|
||||||
|
OnFeedback.FireUpdate();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
private void SetSourceListKey()
|
private void SetSourceListKey()
|
||||||
{
|
{
|
||||||
if (!string.IsNullOrEmpty(PropertiesConfig.SourceListKey))
|
if (!string.IsNullOrEmpty(PropertiesConfig.SourceListKey))
|
||||||
@@ -367,26 +386,143 @@ namespace PepperDash.Essentials
|
|||||||
PropertiesConfig = newPropertiesConfig;
|
PropertiesConfig = newPropertiesConfig;
|
||||||
|
|
||||||
ConfigWriter.UpdateRoomConfig(config);
|
ConfigWriter.UpdateRoomConfig(config);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool Deactivate()
|
||||||
|
{
|
||||||
|
// Stop listining to this event when room deactivated
|
||||||
|
VideoCodec.IsReadyChange -= VideoCodec_IsReadyChange;
|
||||||
|
|
||||||
|
return base.Deactivate();
|
||||||
}
|
}
|
||||||
|
|
||||||
public override bool CustomActivate()
|
public override bool CustomActivate()
|
||||||
{
|
{
|
||||||
// Add Occupancy object from config
|
try
|
||||||
if (PropertiesConfig.Occupancy != null)
|
{
|
||||||
{
|
if (DefaultAudioDevice is IBasicVolumeControls)
|
||||||
Debug.Console(0, this, Debug.ErrorLogLevel.Notice, "Setting Occupancy Provider for room");
|
DefaultVolumeControls = DefaultAudioDevice as IBasicVolumeControls;
|
||||||
this.SetRoomOccupancy(DeviceManager.GetDeviceForKey(PropertiesConfig.Occupancy.DeviceKey) as
|
else if (DefaultAudioDevice is IHasVolumeDevice)
|
||||||
IOccupancyStatusProvider, PropertiesConfig.Occupancy.TimeoutMinutes);
|
DefaultVolumeControls = (DefaultAudioDevice as IHasVolumeDevice).VolumeDevice;
|
||||||
}
|
CurrentVolumeControls = DefaultVolumeControls;
|
||||||
|
|
||||||
this.LogoUrlLightBkgnd = PropertiesConfig.LogoLight.GetLogoUrlLight();
|
|
||||||
this.LogoUrlDarkBkgnd = PropertiesConfig.LogoDark.GetLogoUrlDark();
|
// Combines call feedback from both codecs if available
|
||||||
|
InCallFeedback = new BoolFeedback(() =>
|
||||||
this.DefaultSourceItem = PropertiesConfig.DefaultSourceItem;
|
{
|
||||||
this.DefaultVolume = (ushort)(PropertiesConfig.Volumes.Master.Level * 65535 / 100);
|
bool inAudioCall = false;
|
||||||
|
bool inVideoCall = false;
|
||||||
|
|
||||||
|
if (AudioCodec != null)
|
||||||
|
inAudioCall = AudioCodec.IsInCall;
|
||||||
|
|
||||||
|
if (VideoCodec != null)
|
||||||
|
inVideoCall = VideoCodec.IsInCall;
|
||||||
|
|
||||||
|
if (inAudioCall || inVideoCall)
|
||||||
|
return true;
|
||||||
|
else
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
|
||||||
|
SetupDisplays();
|
||||||
|
|
||||||
|
// Get Microphone Privacy object, if any MUST HAPPEN AFTER setting InCallFeedback
|
||||||
|
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);
|
||||||
|
|
||||||
|
Debug.Console(2, this, "Emergency Config evaluated.");
|
||||||
|
|
||||||
|
if (AudioCodec != null)
|
||||||
|
{
|
||||||
|
AudioCodec.CallStatusChange -= AudioCodec_CallStatusChange;
|
||||||
|
AudioCodec.CallStatusChange += AudioCodec_CallStatusChange;
|
||||||
|
}
|
||||||
|
|
||||||
|
VideoCodec.CallStatusChange -= VideoCodec_CallStatusChange;
|
||||||
|
VideoCodec.CallStatusChange += VideoCodec_CallStatusChange;
|
||||||
|
|
||||||
|
VideoCodec.IsReadyChange -= VideoCodec_IsReadyChange;
|
||||||
|
VideoCodec.IsReadyChange += VideoCodec_IsReadyChange;
|
||||||
|
|
||||||
|
VideoCodec.SharingContentIsOnFeedback.OutputChange -= SharingContentIsOnFeedback_OutputChange;
|
||||||
|
VideoCodec.SharingContentIsOnFeedback.OutputChange += SharingContentIsOnFeedback_OutputChange;
|
||||||
|
|
||||||
|
|
||||||
|
IsSharingFeedback = new BoolFeedback(() => VideoCodec.SharingContentIsOnFeedback.BoolValue);
|
||||||
|
|
||||||
|
// link privacy to VC (for now?)
|
||||||
|
PrivacyModeIsOnFeedback = new BoolFeedback(() => VideoCodec.PrivacyModeIsOnFeedback.BoolValue);
|
||||||
|
|
||||||
|
VideoCodec.PrivacyModeIsOnFeedback.OutputChange -= PrivacyModeIsOnFeedback_OutputChange;
|
||||||
|
VideoCodec.PrivacyModeIsOnFeedback.OutputChange += PrivacyModeIsOnFeedback_OutputChange;
|
||||||
|
|
||||||
|
CallTypeFeedback = new IntFeedback(() => 0);
|
||||||
|
|
||||||
|
SetSourceListKey();
|
||||||
|
|
||||||
|
EnablePowerOnToLastSource = true;
|
||||||
|
|
||||||
|
|
||||||
|
// Add Occupancy object from config
|
||||||
|
if (PropertiesConfig.Occupancy != null)
|
||||||
|
{
|
||||||
|
Debug.Console(0, this, Debug.ErrorLogLevel.Notice, "Setting Occupancy Provider for room");
|
||||||
|
this.SetRoomOccupancy(DeviceManager.GetDeviceForKey(PropertiesConfig.Occupancy.DeviceKey) as
|
||||||
|
IOccupancyStatusProvider, PropertiesConfig.Occupancy.TimeoutMinutes);
|
||||||
|
}
|
||||||
|
|
||||||
|
this.LogoUrlLightBkgnd = PropertiesConfig.LogoLight.GetLogoUrlLight();
|
||||||
|
this.LogoUrlDarkBkgnd = PropertiesConfig.LogoDark.GetLogoUrlDark();
|
||||||
|
|
||||||
|
this.DefaultSourceItem = PropertiesConfig.DefaultSourceItem;
|
||||||
|
this.DefaultVolume = (ushort)(PropertiesConfig.Volumes.Master.Level * 65535 / 100);
|
||||||
|
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
Debug.Console(0, this, "Error Activiating Room: {0}", e);
|
||||||
|
}
|
||||||
|
|
||||||
return base.CustomActivate();
|
return base.CustomActivate();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void AudioCodec_CallStatusChange(object sender, CodecCallStatusItemChangeEventArgs e)
|
||||||
|
{
|
||||||
|
InCallFeedback.FireUpdate();
|
||||||
|
}
|
||||||
|
|
||||||
|
void PrivacyModeIsOnFeedback_OutputChange(object sender, FeedbackEventArgs e)
|
||||||
|
{
|
||||||
|
PrivacyModeIsOnFeedback.FireUpdate();
|
||||||
|
}
|
||||||
|
|
||||||
|
void VideoCodec_IsReadyChange(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
SetUpVideoCodec();
|
||||||
|
}
|
||||||
|
|
||||||
|
void SetUpVideoCodec()
|
||||||
|
{
|
||||||
|
SetCodecExternalSources();
|
||||||
|
SetCodecBranding();
|
||||||
|
}
|
||||||
|
|
||||||
|
void VideoCodec_CallStatusChange(object sender, CodecCallStatusItemChangeEventArgs e)
|
||||||
|
{
|
||||||
|
InCallFeedback.FireUpdate();
|
||||||
|
}
|
||||||
|
|
||||||
|
void SharingContentIsOnFeedback_OutputChange(object sender, FeedbackEventArgs e)
|
||||||
|
{
|
||||||
|
IsSharingFeedback.FireUpdate();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
///
|
///
|
||||||
|
|||||||
@@ -19,6 +19,8 @@ namespace PepperDash.Essentials
|
|||||||
{
|
{
|
||||||
public class EssentialsHuddleVtc1Room : EssentialsRoomBase, IEssentialsHuddleVtc1Room
|
public class EssentialsHuddleVtc1Room : EssentialsRoomBase, IEssentialsHuddleVtc1Room
|
||||||
{
|
{
|
||||||
|
private IEssentialsRoomCombiner _roomCombiner;
|
||||||
|
|
||||||
private bool _codecExternalSourceChange;
|
private bool _codecExternalSourceChange;
|
||||||
public event EventHandler<VolumeDeviceChangeEventArgs> CurrentVolumeDeviceChange;
|
public event EventHandler<VolumeDeviceChangeEventArgs> CurrentVolumeDeviceChange;
|
||||||
public event SourceInfoChangeHandler CurrentSourceChange;
|
public event SourceInfoChangeHandler CurrentSourceChange;
|
||||||
@@ -234,7 +236,7 @@ namespace PepperDash.Essentials
|
|||||||
throw new ArgumentNullException("DefaultAudioDevice cannot be null");
|
throw new ArgumentNullException("DefaultAudioDevice cannot be null");
|
||||||
}
|
}
|
||||||
|
|
||||||
InitializeRoom();
|
Initialize();
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
@@ -242,109 +244,6 @@ namespace PepperDash.Essentials
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void InitializeRoom()
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
if (DefaultAudioDevice is IBasicVolumeControls)
|
|
||||||
DefaultVolumeControls = DefaultAudioDevice as IBasicVolumeControls;
|
|
||||||
else if (DefaultAudioDevice is IHasVolumeDevice)
|
|
||||||
DefaultVolumeControls = (DefaultAudioDevice as IHasVolumeDevice).VolumeDevice;
|
|
||||||
CurrentVolumeControls = DefaultVolumeControls;
|
|
||||||
|
|
||||||
|
|
||||||
// Combines call feedback from both codecs if available
|
|
||||||
InCallFeedback = new BoolFeedback(() =>
|
|
||||||
{
|
|
||||||
bool inAudioCall = false;
|
|
||||||
bool inVideoCall = false;
|
|
||||||
|
|
||||||
if (AudioCodec != null)
|
|
||||||
inAudioCall = AudioCodec.IsInCall;
|
|
||||||
|
|
||||||
if (VideoCodec != null)
|
|
||||||
inVideoCall = VideoCodec.IsInCall;
|
|
||||||
|
|
||||||
if (inAudioCall || inVideoCall)
|
|
||||||
return true;
|
|
||||||
else
|
|
||||||
return false;
|
|
||||||
});
|
|
||||||
|
|
||||||
var disp = DefaultDisplay as DisplayBase;
|
|
||||||
if (disp != null)
|
|
||||||
{
|
|
||||||
// Link power, warming, cooling to display
|
|
||||||
var dispTwoWay = disp as IHasPowerControlWithFeedback;
|
|
||||||
if (dispTwoWay != null)
|
|
||||||
{
|
|
||||||
dispTwoWay.PowerIsOnFeedback.OutputChange += (o, a) =>
|
|
||||||
{
|
|
||||||
if (dispTwoWay.PowerIsOnFeedback.BoolValue != OnFeedback.BoolValue)
|
|
||||||
{
|
|
||||||
if (!dispTwoWay.PowerIsOnFeedback.BoolValue)
|
|
||||||
CurrentSourceInfo = null;
|
|
||||||
OnFeedback.FireUpdate();
|
|
||||||
}
|
|
||||||
if (dispTwoWay.PowerIsOnFeedback.BoolValue)
|
|
||||||
{
|
|
||||||
SetDefaultLevels();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
disp.IsWarmingUpFeedback.OutputChange += (o, a) =>
|
|
||||||
{
|
|
||||||
IsWarmingUpFeedback.FireUpdate();
|
|
||||||
if (!IsWarmingUpFeedback.BoolValue)
|
|
||||||
(CurrentVolumeControls as IBasicVolumeWithFeedback).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);
|
|
||||||
|
|
||||||
Debug.Console(2, this, "Microphone Privacy Config evaluated.");
|
|
||||||
|
|
||||||
// Get emergency object, if any
|
|
||||||
this.Emergency = EssentialsRoomConfigHelper.GetEmergency(PropertiesConfig, this);
|
|
||||||
|
|
||||||
Debug.Console(2, this, "Emergency Config evaluated.");
|
|
||||||
|
|
||||||
|
|
||||||
VideoCodec.CallStatusChange += (o, a) => this.InCallFeedback.FireUpdate();
|
|
||||||
VideoCodec.IsReadyChange += (o, a) => { this.SetCodecExternalSources(); SetCodecBranding(); };
|
|
||||||
|
|
||||||
if (AudioCodec != null)
|
|
||||||
AudioCodec.CallStatusChange += (o, a) => this.InCallFeedback.FireUpdate();
|
|
||||||
|
|
||||||
IsSharingFeedback = new BoolFeedback(() => VideoCodec.SharingContentIsOnFeedback.BoolValue);
|
|
||||||
VideoCodec.SharingContentIsOnFeedback.OutputChange += (o, a) => this.IsSharingFeedback.FireUpdate();
|
|
||||||
|
|
||||||
// link privacy to VC (for now?)
|
|
||||||
PrivacyModeIsOnFeedback = new BoolFeedback(() => VideoCodec.PrivacyModeIsOnFeedback.BoolValue);
|
|
||||||
VideoCodec.PrivacyModeIsOnFeedback.OutputChange += (o, a) => this.PrivacyModeIsOnFeedback.FireUpdate();
|
|
||||||
|
|
||||||
CallTypeFeedback = new IntFeedback(() => 0);
|
|
||||||
|
|
||||||
SetupEnvironmentalControlDevices();
|
|
||||||
|
|
||||||
SetSourceListKey();
|
|
||||||
|
|
||||||
EnablePowerOnToLastSource = true;
|
|
||||||
}
|
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
Debug.Console(0, this, "Error Initializing Room: {0}", e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void SetupEnvironmentalControlDevices()
|
private void SetupEnvironmentalControlDevices()
|
||||||
{
|
{
|
||||||
@@ -352,6 +251,8 @@ namespace PepperDash.Essentials
|
|||||||
{
|
{
|
||||||
if (PropertiesConfig.Environment.Enabled)
|
if (PropertiesConfig.Environment.Enabled)
|
||||||
{
|
{
|
||||||
|
EnvironmentalControlDevices.Clear();
|
||||||
|
|
||||||
foreach (var d in PropertiesConfig.Environment.DeviceKeys)
|
foreach (var d in PropertiesConfig.Environment.DeviceKeys)
|
||||||
{
|
{
|
||||||
var envDevice = DeviceManager.GetDeviceForKey(d) as EssentialsDevice;
|
var envDevice = DeviceManager.GetDeviceForKey(d) as EssentialsDevice;
|
||||||
@@ -386,25 +287,190 @@ namespace PepperDash.Essentials
|
|||||||
ConfigWriter.UpdateRoomConfig(config);
|
ConfigWriter.UpdateRoomConfig(config);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override bool Deactivate()
|
||||||
|
{
|
||||||
|
|
||||||
|
// Stop listining to this event when room deactivated
|
||||||
|
VideoCodec.IsReadyChange -= VideoCodec_IsReadyChange;
|
||||||
|
|
||||||
|
return base.Deactivate();
|
||||||
|
}
|
||||||
|
|
||||||
public override bool CustomActivate()
|
public override bool CustomActivate()
|
||||||
{
|
{
|
||||||
// Add Occupancy object from config
|
try
|
||||||
if (PropertiesConfig.Occupancy != null)
|
|
||||||
{
|
{
|
||||||
Debug.Console(0, this, Debug.ErrorLogLevel.Notice, "Setting Occupancy Provider for room");
|
if (DefaultAudioDevice is IBasicVolumeControls)
|
||||||
this.SetRoomOccupancy(DeviceManager.GetDeviceForKey(PropertiesConfig.Occupancy.DeviceKey) as
|
DefaultVolumeControls = DefaultAudioDevice as IBasicVolumeControls;
|
||||||
IOccupancyStatusProvider, PropertiesConfig.Occupancy.TimeoutMinutes);
|
else if (DefaultAudioDevice is IHasVolumeDevice)
|
||||||
|
DefaultVolumeControls = (DefaultAudioDevice as IHasVolumeDevice).VolumeDevice;
|
||||||
|
CurrentVolumeControls = DefaultVolumeControls;
|
||||||
|
|
||||||
|
|
||||||
|
// Combines call feedback from both codecs if available
|
||||||
|
InCallFeedback = new BoolFeedback(() =>
|
||||||
|
{
|
||||||
|
bool inAudioCall = false;
|
||||||
|
bool inVideoCall = false;
|
||||||
|
|
||||||
|
if (AudioCodec != null)
|
||||||
|
inAudioCall = AudioCodec.IsInCall;
|
||||||
|
|
||||||
|
if (VideoCodec != null)
|
||||||
|
inVideoCall = VideoCodec.IsInCall;
|
||||||
|
|
||||||
|
if (inAudioCall || inVideoCall)
|
||||||
|
return true;
|
||||||
|
else
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
|
||||||
|
var disp = DefaultDisplay as DisplayBase;
|
||||||
|
if (disp != null)
|
||||||
|
{
|
||||||
|
// Link power, warming, cooling to display
|
||||||
|
var dispTwoWay = disp as IHasPowerControlWithFeedback;
|
||||||
|
if (dispTwoWay != null)
|
||||||
|
{
|
||||||
|
dispTwoWay.PowerIsOnFeedback.OutputChange -= PowerIsOnFeedback_OutputChange;
|
||||||
|
dispTwoWay.PowerIsOnFeedback.OutputChange += PowerIsOnFeedback_OutputChange;
|
||||||
|
}
|
||||||
|
|
||||||
|
disp.IsWarmingUpFeedback.OutputChange -= IsWarmingUpFeedback_OutputChange;
|
||||||
|
disp.IsWarmingUpFeedback.OutputChange += IsWarmingUpFeedback_OutputChange;
|
||||||
|
|
||||||
|
disp.IsCoolingDownFeedback.OutputChange -= IsCoolingDownFeedback_OutputChange;
|
||||||
|
disp.IsCoolingDownFeedback.OutputChange += IsCoolingDownFeedback_OutputChange;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Get Microphone Privacy object, if any MUST HAPPEN AFTER setting InCallFeedback
|
||||||
|
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);
|
||||||
|
|
||||||
|
Debug.Console(2, this, "Emergency Config evaluated.");
|
||||||
|
|
||||||
|
if (AudioCodec != null)
|
||||||
|
{
|
||||||
|
AudioCodec.CallStatusChange -= AudioCodec_CallStatusChange;
|
||||||
|
AudioCodec.CallStatusChange += AudioCodec_CallStatusChange;
|
||||||
|
}
|
||||||
|
|
||||||
|
VideoCodec.CallStatusChange -= VideoCodec_CallStatusChange;
|
||||||
|
VideoCodec.CallStatusChange += VideoCodec_CallStatusChange;
|
||||||
|
|
||||||
|
VideoCodec.IsReadyChange -= VideoCodec_IsReadyChange;
|
||||||
|
VideoCodec.IsReadyChange += VideoCodec_IsReadyChange;
|
||||||
|
|
||||||
|
VideoCodec.SharingContentIsOnFeedback.OutputChange -= SharingContentIsOnFeedback_OutputChange;
|
||||||
|
VideoCodec.SharingContentIsOnFeedback.OutputChange += SharingContentIsOnFeedback_OutputChange;
|
||||||
|
|
||||||
|
|
||||||
|
IsSharingFeedback = new BoolFeedback(() => VideoCodec.SharingContentIsOnFeedback.BoolValue);
|
||||||
|
|
||||||
|
// link privacy to VC (for now?)
|
||||||
|
PrivacyModeIsOnFeedback = new BoolFeedback(() => VideoCodec.PrivacyModeIsOnFeedback.BoolValue);
|
||||||
|
|
||||||
|
VideoCodec.PrivacyModeIsOnFeedback.OutputChange -= PrivacyModeIsOnFeedback_OutputChange;
|
||||||
|
VideoCodec.PrivacyModeIsOnFeedback.OutputChange += PrivacyModeIsOnFeedback_OutputChange;
|
||||||
|
|
||||||
|
CallTypeFeedback = new IntFeedback(() => 0);
|
||||||
|
|
||||||
|
SetupEnvironmentalControlDevices();
|
||||||
|
|
||||||
|
SetSourceListKey();
|
||||||
|
|
||||||
|
EnablePowerOnToLastSource = true;
|
||||||
|
|
||||||
|
|
||||||
|
// Add Occupancy object from config
|
||||||
|
if (PropertiesConfig.Occupancy != null)
|
||||||
|
{
|
||||||
|
Debug.Console(0, this, Debug.ErrorLogLevel.Notice, "Setting Occupancy Provider for room");
|
||||||
|
this.SetRoomOccupancy(DeviceManager.GetDeviceForKey(PropertiesConfig.Occupancy.DeviceKey) as
|
||||||
|
IOccupancyStatusProvider, PropertiesConfig.Occupancy.TimeoutMinutes);
|
||||||
|
}
|
||||||
|
|
||||||
|
this.LogoUrlLightBkgnd = PropertiesConfig.LogoLight.GetLogoUrlLight();
|
||||||
|
this.LogoUrlDarkBkgnd = PropertiesConfig.LogoDark.GetLogoUrlDark();
|
||||||
|
|
||||||
|
this.DefaultSourceItem = PropertiesConfig.DefaultSourceItem;
|
||||||
|
this.DefaultVolume = (ushort)(PropertiesConfig.Volumes.Master.Level * 65535 / 100);
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
Debug.Console(0, this, "Error Activiating Room: {0}", e);
|
||||||
}
|
}
|
||||||
|
|
||||||
this.LogoUrlLightBkgnd = PropertiesConfig.LogoLight.GetLogoUrlLight();
|
|
||||||
this.LogoUrlDarkBkgnd = PropertiesConfig.LogoDark.GetLogoUrlDark();
|
|
||||||
|
|
||||||
this.DefaultSourceItem = PropertiesConfig.DefaultSourceItem;
|
|
||||||
this.DefaultVolume = (ushort)(PropertiesConfig.Volumes.Master.Level * 65535 / 100);
|
|
||||||
|
|
||||||
return base.CustomActivate();
|
return base.CustomActivate();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void PrivacyModeIsOnFeedback_OutputChange(object sender, FeedbackEventArgs e)
|
||||||
|
{
|
||||||
|
PrivacyModeIsOnFeedback.FireUpdate();
|
||||||
|
}
|
||||||
|
|
||||||
|
void SharingContentIsOnFeedback_OutputChange(object sender, FeedbackEventArgs e)
|
||||||
|
{
|
||||||
|
IsSharingFeedback.FireUpdate();
|
||||||
|
}
|
||||||
|
|
||||||
|
void AudioCodec_CallStatusChange(object sender, CodecCallStatusItemChangeEventArgs e)
|
||||||
|
{
|
||||||
|
InCallFeedback.FireUpdate();
|
||||||
|
}
|
||||||
|
|
||||||
|
void VideoCodec_IsReadyChange(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
SetUpVideoCodec();
|
||||||
|
}
|
||||||
|
|
||||||
|
void SetUpVideoCodec()
|
||||||
|
{
|
||||||
|
SetCodecExternalSources();
|
||||||
|
SetCodecBranding();
|
||||||
|
}
|
||||||
|
|
||||||
|
void VideoCodec_CallStatusChange(object sender, CodecCallStatusItemChangeEventArgs e)
|
||||||
|
{
|
||||||
|
InCallFeedback.FireUpdate();
|
||||||
|
}
|
||||||
|
|
||||||
|
void IsCoolingDownFeedback_OutputChange(object sender, FeedbackEventArgs e)
|
||||||
|
{
|
||||||
|
IsCoolingDownFeedback.FireUpdate();
|
||||||
|
}
|
||||||
|
|
||||||
|
void IsWarmingUpFeedback_OutputChange(object sender, FeedbackEventArgs e)
|
||||||
|
{
|
||||||
|
IsWarmingUpFeedback.FireUpdate();
|
||||||
|
if (!IsWarmingUpFeedback.BoolValue)
|
||||||
|
(CurrentVolumeControls as IBasicVolumeWithFeedback).SetVolume(DefaultVolume);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void PowerIsOnFeedback_OutputChange(object sender, FeedbackEventArgs e)
|
||||||
|
{
|
||||||
|
var dispTwoWay = DefaultDisplay as IHasPowerControlWithFeedback;
|
||||||
|
|
||||||
|
if (dispTwoWay.PowerIsOnFeedback.BoolValue != OnFeedback.BoolValue)
|
||||||
|
{
|
||||||
|
if (!dispTwoWay.PowerIsOnFeedback.BoolValue)
|
||||||
|
CurrentSourceInfo = null;
|
||||||
|
OnFeedback.FireUpdate();
|
||||||
|
}
|
||||||
|
if (dispTwoWay.PowerIsOnFeedback.BoolValue)
|
||||||
|
{
|
||||||
|
SetDefaultLevels();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|||||||
Reference in New Issue
Block a user