diff --git a/.gitignore b/.gitignore
index 94b7d400..739a60ab 100644
--- a/.gitignore
+++ b/.gitignore
@@ -389,3 +389,4 @@ MigrationBackup/
# Fody - auto-generated XML schema
FodyWeavers.xsd
essentials-framework/Essentials Interfaces/PepperDash_Essentials_Interfaces/PepperDash_Essentials_Interfaces.csproj
+.DS_Store
diff --git a/PepperDashEssentials/PepperDashEssentials.csproj b/PepperDashEssentials/PepperDashEssentials.csproj
index e4a0cff6..66a20f72 100644
--- a/PepperDashEssentials/PepperDashEssentials.csproj
+++ b/PepperDashEssentials/PepperDashEssentials.csproj
@@ -71,7 +71,7 @@
..\..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SSPDevices\Crestron.SimplSharpPro.UI.dll
-
+
False
..\packages\PepperDashCore\lib\net35\PepperDash_Core.dll
diff --git a/PepperDashEssentials/Room/Types/EssentialsCombinedHuddleVtc1Room.cs b/PepperDashEssentials/Room/Types/EssentialsCombinedHuddleVtc1Room.cs
index 50186d0b..cbe1b579 100644
--- a/PepperDashEssentials/Room/Types/EssentialsCombinedHuddleVtc1Room.cs
+++ b/PepperDashEssentials/Room/Types/EssentialsCombinedHuddleVtc1Room.cs
@@ -226,66 +226,66 @@ namespace PepperDash.Essentials
}
}
- void Initialize()
+ public override void Initialize()
{
try
{
- if (DefaultAudioDevice is IBasicVolumeControls)
- DefaultVolumeControls = DefaultAudioDevice as IBasicVolumeControls;
- else if (DefaultAudioDevice is IHasVolumeDevice)
- DefaultVolumeControls = (DefaultAudioDevice as IHasVolumeDevice).VolumeDevice;
- CurrentVolumeControls = DefaultVolumeControls;
+ //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;
+ //// Combines call feedback from both codecs if available
+ //InCallFeedback = new BoolFeedback(() =>
+ //{
+ // bool inAudioCall = false;
+ // bool inVideoCall = false;
- if (AudioCodec != null)
- inAudioCall = AudioCodec.IsInCall;
+ // if (AudioCodec != null)
+ // inAudioCall = AudioCodec.IsInCall;
- if (VideoCodec != null)
- inVideoCall = VideoCodec.IsInCall;
+ // if (VideoCodec != null)
+ // inVideoCall = VideoCodec.IsInCall;
- if (inAudioCall || inVideoCall)
- return true;
- else
- return false;
- });
+ // if (inAudioCall || inVideoCall)
+ // return true;
+ // else
+ // return false;
+ //});
- SetupDisplays();
+ //SetupDisplays();
- // Get Microphone Privacy object, if any MUST HAPPEN AFTER setting InCallFeedback
- this.MicrophonePrivacy = EssentialsRoomConfigHelper.GetMicrophonePrivacy(PropertiesConfig, this);
+ //// 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.");
+ //Debug.Console(2, this, "Microphone Privacy Config evaluated.");
- // Get emergency object, if any
- this.Emergency = EssentialsRoomConfigHelper.GetEmergency(PropertiesConfig, this);
+ //// Get emergency object, if any
+ //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.IsReadyChange += (o, a) => { this.SetCodecExternalSources(); SetCodecBranding(); };
+ //VideoCodec.CallStatusChange += (o, a) => this.InCallFeedback.FireUpdate();
+ //VideoCodec.IsReadyChange += (o, a) => { this.SetCodecExternalSources(); SetCodecBranding(); };
- if (AudioCodec != null)
- AudioCodec.CallStatusChange += (o, a) => this.InCallFeedback.FireUpdate();
+ //if (AudioCodec != null)
+ // AudioCodec.CallStatusChange += (o, a) => this.InCallFeedback.FireUpdate();
- IsSharingFeedback = new BoolFeedback(() => VideoCodec.SharingContentIsOnFeedback.BoolValue);
- VideoCodec.SharingContentIsOnFeedback.OutputChange += (o, a) => this.IsSharingFeedback.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();
+ //// link privacy to VC (for now?)
+ //PrivacyModeIsOnFeedback = new BoolFeedback(() => VideoCodec.PrivacyModeIsOnFeedback.BoolValue);
+ //VideoCodec.PrivacyModeIsOnFeedback.OutputChange += (o, a) => this.PrivacyModeIsOnFeedback.FireUpdate();
- CallTypeFeedback = new IntFeedback(() => 0);
+ //CallTypeFeedback = new IntFeedback(() => 0);
SetSourceListKey();
- EnablePowerOnToLastSource = true;
+ //EnablePowerOnToLastSource = true;
}
catch (Exception e)
{
@@ -297,7 +297,9 @@ namespace PepperDash.Essentials
{
//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)
{
@@ -314,37 +316,54 @@ namespace PepperDash.Essentials
// Link power, warming, cooling to display
var dispTwoWay = display 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();
- }
- };
- }
-
- display.IsWarmingUpFeedback.OutputChange += (o, a) =>
- {
- IsWarmingUpFeedback.FireUpdate();
- if (!IsWarmingUpFeedback.BoolValue)
- (CurrentVolumeControls as IBasicVolumeWithFeedback).SetVolume(DefaultVolume);
- };
- display.IsCoolingDownFeedback.OutputChange += (o, a) =>
- {
- IsCoolingDownFeedback.FireUpdate();
- };
+ {
+ dispTwoWay.PowerIsOnFeedback.OutputChange -= PowerIsOnFeedback_OutputChange;
+ dispTwoWay.PowerIsOnFeedback.OutputChange += PowerIsOnFeedback_OutputChange;
+
+ if (dispTwoWay.PowerIsOnFeedback.BoolValue)
+ {
+ SetDefaultLevels();
+ }
+ }
+
+ display.IsWarmingUpFeedback.OutputChange -= IsWarmingUpFeedback_OutputChange;
+ display.IsWarmingUpFeedback.OutputChange += IsWarmingUpFeedback_OutputChange;
+
+ display.IsCoolingDownFeedback.OutputChange -= IsCoolingDownFeedback_OutputChange;
+ display.IsCoolingDownFeedback.OutputChange += IsCoolingDownFeedback_OutputChange;
}
}
+ }
+
+ 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()
{
if (!string.IsNullOrEmpty(PropertiesConfig.SourceListKey))
@@ -354,9 +373,9 @@ namespace PepperDash.Essentials
else
{
SetSourceListKey(Key);
- }
-
- SetCodecExternalSources();
+ }
+
+ SetUpVideoCodec();
}
protected override void CustomSetConfig(DeviceConfig config)
@@ -367,26 +386,150 @@ namespace PepperDash.Essentials
PropertiesConfig = newPropertiesConfig;
ConfigWriter.UpdateRoomConfig(config);
+ }
+
+ public override bool Deactivate()
+ {
+ // Stop listining to this event when room deactivated
+ VideoCodec.IsReadyChange -= VideoCodec_IsReadyChange;
+
+ // Clear occupancy
+ RoomOccupancy = null;
+
+ Debug.Console(0, this, "Room '{0}' Deactivated", Name);
+
+ return base.Deactivate();
}
public override bool CustomActivate()
- {
- // 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);
-
+ {
+ 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;
+ });
+
+ 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);
+ }
+
+
+ Debug.Console(0, this, "Room '{0}' Activated", Name);
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();
+ }
+
+
///
///
@@ -779,7 +922,9 @@ namespace PepperDash.Essentials
videoCodecWithExternalSwitching.AddExternalSource(codecInputConnectorName, kvp.Key, srcConfig.PreferredName, PepperDash.Essentials.Devices.Common.VideoCodec.Cisco.eExternalSourceType.desktop);
videoCodecWithExternalSwitching.SetExternalSourceState(kvp.Key, PepperDash.Essentials.Devices.Common.VideoCodec.Cisco.eExternalSourceMode.Ready);
}
- }
+ }
+
+ Debug.Console(1, this, "Successfully set up codec external sources for room: {0}", Name);
}
catch (Exception e)
{
diff --git a/PepperDashEssentials/Room/Types/EssentialsHuddleVtc1Room.cs b/PepperDashEssentials/Room/Types/EssentialsHuddleVtc1Room.cs
index d04de3cc..2aae2f75 100644
--- a/PepperDashEssentials/Room/Types/EssentialsHuddleVtc1Room.cs
+++ b/PepperDashEssentials/Room/Types/EssentialsHuddleVtc1Room.cs
@@ -19,6 +19,8 @@ namespace PepperDash.Essentials
{
public class EssentialsHuddleVtc1Room : EssentialsRoomBase, IEssentialsHuddleVtc1Room
{
+ private IEssentialsRoomCombiner _roomCombiner;
+
private bool _codecExternalSourceChange;
public event EventHandler CurrentVolumeDeviceChange;
public event SourceInfoChangeHandler CurrentSourceChange;
@@ -234,7 +236,7 @@ namespace PepperDash.Essentials
throw new ArgumentNullException("DefaultAudioDevice cannot be null");
}
- InitializeRoom();
+ Initialize();
}
catch (Exception e)
{
@@ -242,8 +244,65 @@ namespace PepperDash.Essentials
}
}
- void InitializeRoom()
- {
+
+ private void SetupEnvironmentalControlDevices()
+ {
+ if (PropertiesConfig.Environment != null)
+ {
+ if (PropertiesConfig.Environment.Enabled)
+ {
+ EnvironmentalControlDevices.Clear();
+
+ foreach (var d in PropertiesConfig.Environment.DeviceKeys)
+ {
+ var envDevice = DeviceManager.GetDeviceForKey(d) as EssentialsDevice;
+ EnvironmentalControlDevices.Add(envDevice);
+ }
+ }
+ }
+ }
+
+
+ private void SetSourceListKey()
+ {
+ if (!string.IsNullOrEmpty(PropertiesConfig.SourceListKey))
+ {
+ SetSourceListKey(PropertiesConfig.SourceListKey);
+ }
+ else
+ {
+ SetSourceListKey(Key);
+ }
+
+ SetUpVideoCodec();
+ }
+
+ protected override void CustomSetConfig(DeviceConfig config)
+ {
+ var newPropertiesConfig = JsonConvert.DeserializeObject(config.Properties.ToString());
+
+ if (newPropertiesConfig != null)
+ PropertiesConfig = newPropertiesConfig;
+
+ ConfigWriter.UpdateRoomConfig(config);
+ }
+
+ public override bool Deactivate()
+ {
+
+ // Stop listining to this event when room deactivated
+ VideoCodec.IsReadyChange -= VideoCodec_IsReadyChange;
+
+ // Clear occupancy
+ RoomOccupancy = null;
+
+ Debug.Console(0, this, "Room '{0}' Deactivated", Name);
+
+ return base.Deactivate();
+ }
+
+ public override bool CustomActivate()
+ {
try
{
if (DefaultAudioDevice is IBasicVolumeControls)
@@ -278,32 +337,15 @@ namespace PepperDash.Essentials
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();
- }
- };
+ dispTwoWay.PowerIsOnFeedback.OutputChange -= PowerIsOnFeedback_OutputChange;
+ dispTwoWay.PowerIsOnFeedback.OutputChange += PowerIsOnFeedback_OutputChange;
}
- disp.IsWarmingUpFeedback.OutputChange += (o, a) =>
- {
- IsWarmingUpFeedback.FireUpdate();
- if (!IsWarmingUpFeedback.BoolValue)
- (CurrentVolumeControls as IBasicVolumeWithFeedback).SetVolume(DefaultVolume);
- };
- disp.IsCoolingDownFeedback.OutputChange += (o, a) =>
- {
- IsCoolingDownFeedback.FireUpdate();
- };
+ disp.IsWarmingUpFeedback.OutputChange -= IsWarmingUpFeedback_OutputChange;
+ disp.IsWarmingUpFeedback.OutputChange += IsWarmingUpFeedback_OutputChange;
+ disp.IsCoolingDownFeedback.OutputChange -= IsCoolingDownFeedback_OutputChange;
+ disp.IsCoolingDownFeedback.OutputChange += IsCoolingDownFeedback_OutputChange;
}
@@ -317,20 +359,30 @@ namespace PepperDash.Essentials
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();
+ {
+ 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);
- 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();
+
+ VideoCodec.PrivacyModeIsOnFeedback.OutputChange -= PrivacyModeIsOnFeedback_OutputChange;
+ VideoCodec.PrivacyModeIsOnFeedback.OutputChange += PrivacyModeIsOnFeedback_OutputChange;
CallTypeFeedback = new IntFeedback(() => 0);
@@ -339,72 +391,92 @@ namespace PepperDash.Essentials
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 Initializing Room: {0}", e);
- }
- }
-
- private void SetupEnvironmentalControlDevices()
- {
- if (PropertiesConfig.Environment != null)
- {
- if (PropertiesConfig.Environment.Enabled)
- {
- foreach (var d in PropertiesConfig.Environment.DeviceKeys)
- {
- var envDevice = DeviceManager.GetDeviceForKey(d) as EssentialsDevice;
- EnvironmentalControlDevices.Add(envDevice);
- }
- }
- }
- }
-
-
- private void SetSourceListKey()
- {
- if (!string.IsNullOrEmpty(PropertiesConfig.SourceListKey))
- {
- SetSourceListKey(PropertiesConfig.SourceListKey);
- }
- else
- {
- SetSourceListKey(Key);
+ Debug.Console(0, this, "Error Activiating Room: {0}", e);
}
- SetCodecExternalSources();
- }
-
- protected override void CustomSetConfig(DeviceConfig config)
- {
- var newPropertiesConfig = JsonConvert.DeserializeObject(config.Properties.ToString());
-
- if (newPropertiesConfig != null)
- PropertiesConfig = newPropertiesConfig;
-
- ConfigWriter.UpdateRoomConfig(config);
- }
-
- public override bool CustomActivate()
- {
- // 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);
-
+ Debug.Console(0, this, "Room '{0}' Activated", Name);
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();
+ }
+
+ }
+
///
@@ -832,6 +904,8 @@ namespace PepperDash.Essentials
videoCodecWithExternalSwitching.SetExternalSourceState(kvp.Key, PepperDash.Essentials.Devices.Common.VideoCodec.Cisco.eExternalSourceMode.Ready);
}
}
+ Debug.Console(1, this, "Successfully set up codec external sources for room: {0}", Name);
+
}
catch (Exception e)
{
diff --git a/essentials-framework/Essentials Core/PepperDashEssentialsBase/Bridges/JoinMaps/DmRmcControllerJoinMap.cs b/essentials-framework/Essentials Core/PepperDashEssentialsBase/Bridges/JoinMaps/DmRmcControllerJoinMap.cs
index cff5bffe..c0e7141f 100644
--- a/essentials-framework/Essentials Core/PepperDashEssentialsBase/Bridges/JoinMaps/DmRmcControllerJoinMap.cs
+++ b/essentials-framework/Essentials Core/PepperDashEssentialsBase/Bridges/JoinMaps/DmRmcControllerJoinMap.cs
@@ -8,6 +8,18 @@ namespace PepperDash.Essentials.Core.Bridges
public JoinDataComplete IsOnline = new JoinDataComplete(new JoinData { JoinNumber = 1, JoinSpan = 1 },
new JoinMetadata { Description = "DM RMC Online", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital });
+ [JoinName("VideoMuteOn")]
+ public JoinDataComplete VideoMuteOn = new JoinDataComplete(new JoinData { JoinNumber = 3, JoinSpan = 1 },
+ new JoinMetadata { Description = "DM RMC Mute Video", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Digital });
+
+ [JoinName("VideoMuteOff")]
+ public JoinDataComplete VideoMuteOff = new JoinDataComplete(new JoinData { JoinNumber = 4, JoinSpan = 1 },
+ new JoinMetadata { Description = "DM RMC UnMute Video", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Digital });
+
+ [JoinName("VideoMuteToggle")]
+ public JoinDataComplete VideoMuteToggle = new JoinDataComplete(new JoinData { JoinNumber = 5, JoinSpan = 1 },
+ new JoinMetadata { Description = "DM RMC Mute Video Toggle", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital });
+
[JoinName("CurrentOutputResolution")]
public JoinDataComplete CurrentOutputResolution = new JoinDataComplete(new JoinData { JoinNumber = 1, JoinSpan = 1 },
new JoinMetadata { Description = "DM RMC Current Output Resolution", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Serial });
diff --git a/essentials-framework/Essentials Core/PepperDashEssentialsBase/PartitionSensor/GlsPartitionSensorController.cs b/essentials-framework/Essentials Core/PepperDashEssentialsBase/PartitionSensor/GlsPartitionSensorController.cs
index 16b2f265..73f15cf2 100644
--- a/essentials-framework/Essentials Core/PepperDashEssentialsBase/PartitionSensor/GlsPartitionSensorController.cs
+++ b/essentials-framework/Essentials Core/PepperDashEssentialsBase/PartitionSensor/GlsPartitionSensorController.cs
@@ -85,18 +85,32 @@ namespace PepperDash.Essentials.Core
{
if (_partitionSensor.IsOnline == false) return;
- Debug.Console(1, this, "Attempting to apply settings to sensor from config");
+ // Default to enable
+ _partitionSensor.Enable.BoolValue = true;
- if (PropertiesConfig.Sensitivity != null)
- {
- Debug.Console(1, this, "Sensitivity found, attempting to set value '{0}' from config",
- PropertiesConfig.Sensitivity);
- _partitionSensor.Sensitivity.UShortValue = (ushort) PropertiesConfig.Sensitivity;
- }
- else
- {
- Debug.Console(1, this, "Sensitivity null, no value specified in config");
- }
+ Debug.Console(1, this, "Attempting to apply settings to sensor from config");
+
+ if (PropertiesConfig.Sensitivity != null)
+ {
+ Debug.Console(1, this, "Sensitivity found, attempting to set value '{0}' from config",
+ PropertiesConfig.Sensitivity);
+ _partitionSensor.Sensitivity.UShortValue = (ushort)PropertiesConfig.Sensitivity;
+ }
+ else
+ {
+ Debug.Console(1, this, "Sensitivity null, no value specified in config");
+ }
+
+ if (PropertiesConfig.Enable != null)
+ {
+ Debug.Console(1, this, "Enable found, attempting to set value '{0}' from config",
+ PropertiesConfig.Enable);
+ _partitionSensor.Enable.BoolValue = (bool)PropertiesConfig.Enable;
+ }
+ else
+ {
+ Debug.Console(1, this, "Enable null, no value specified in config");
+ }
}
diff --git a/essentials-framework/Essentials Core/PepperDashEssentialsBase/PartitionSensor/GlsPartitionSensorPropertiesConfig.cs b/essentials-framework/Essentials Core/PepperDashEssentialsBase/PartitionSensor/GlsPartitionSensorPropertiesConfig.cs
index 8a303662..c9f715b5 100644
--- a/essentials-framework/Essentials Core/PepperDashEssentialsBase/PartitionSensor/GlsPartitionSensorPropertiesConfig.cs
+++ b/essentials-framework/Essentials Core/PepperDashEssentialsBase/PartitionSensor/GlsPartitionSensorPropertiesConfig.cs
@@ -16,6 +16,9 @@ namespace PepperDash_Essentials_Core.PartitionSensor
/// The sensitivity range shall be between 1(lowest) to 10 (highest).
///
[JsonProperty("sensitivity")]
- public ushort? Sensitivity { get; set; }
+ public ushort? Sensitivity { get; set; }
+
+ [JsonProperty("enable")]
+ public bool? Enable { get; set; }
}
}
\ No newline at end of file
diff --git a/essentials-framework/Essentials Core/PepperDashEssentialsBase/PepperDash_Essentials_Core.csproj b/essentials-framework/Essentials Core/PepperDashEssentialsBase/PepperDash_Essentials_Core.csproj
index aff99ea7..12aac2b4 100644
--- a/essentials-framework/Essentials Core/PepperDashEssentialsBase/PepperDash_Essentials_Core.csproj
+++ b/essentials-framework/Essentials Core/PepperDashEssentialsBase/PepperDash_Essentials_Core.csproj
@@ -83,7 +83,7 @@
..\..\..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SSPDevices\Crestron.SimplSharpPro.UI.dll
-
+
False
..\..\..\packages\PepperDashCore\lib\net35\PepperDash_Core.dll
diff --git a/essentials-framework/Essentials Core/PepperDashEssentialsBase/Room/EssentialsRoomBase.cs b/essentials-framework/Essentials Core/PepperDashEssentialsBase/Room/EssentialsRoomBase.cs
index f5e3dee8..0c7e0de0 100644
--- a/essentials-framework/Essentials Core/PepperDashEssentialsBase/Room/EssentialsRoomBase.cs
+++ b/essentials-framework/Essentials Core/PepperDashEssentialsBase/Room/EssentialsRoomBase.cs
@@ -35,7 +35,7 @@ namespace PepperDash.Essentials.Core
public BoolFeedback IsWarmingUpFeedback { get; private set; }
public BoolFeedback IsCoolingDownFeedback { get; private set; }
- public IOccupancyStatusProvider RoomOccupancy { get; private set; }
+ public IOccupancyStatusProvider RoomOccupancy { get; protected set; }
public bool OccupancyStatusProviderIsRemote { get; private set; }
diff --git a/essentials-framework/Essentials DM/Essentials_DM/AirMedia/AirMediaController.cs b/essentials-framework/Essentials DM/Essentials_DM/AirMedia/AirMediaController.cs
index ff07a54b..b1fa3186 100644
--- a/essentials-framework/Essentials DM/Essentials_DM/AirMedia/AirMediaController.cs
+++ b/essentials-framework/Essentials DM/Essentials_DM/AirMedia/AirMediaController.cs
@@ -129,7 +129,7 @@ namespace PepperDash.Essentials.DM.AirMedia
else
AirMedia.DisplayControl.DisableAutomaticRouting();
- return true;
+ return base.CustomActivate();
}
public override void LinkToApi(BasicTriList trilist, uint joinStart, string joinMapKey, EiscApiAdvanced bridge)
diff --git a/essentials-framework/Essentials DM/Essentials_DM/Endpoints/Receivers/DmRmc4KScalerCController.cs b/essentials-framework/Essentials DM/Essentials_DM/Endpoints/Receivers/DmRmc4KScalerCController.cs
index 79069430..79debd63 100644
--- a/essentials-framework/Essentials DM/Essentials_DM/Endpoints/Receivers/DmRmc4KScalerCController.cs
+++ b/essentials-framework/Essentials DM/Essentials_DM/Endpoints/Receivers/DmRmc4KScalerCController.cs
@@ -7,6 +7,7 @@ using PepperDash.Core;
using PepperDash.Essentials.Core;
using PepperDash.Essentials.Core.Bridges;
using PepperDash_Essentials_DM;
+using System.Collections.Generic;
namespace PepperDash.Essentials.DM
{
@@ -16,7 +17,7 @@ namespace PepperDash.Essentials.DM
///
[Description("Wrapper Class for DM-RMC-4K-SCALER-C")]
public class DmRmc4kScalerCController : DmRmcControllerBase, IRoutingInputsOutputs, IBasicVolumeWithFeedback,
- IIROutputPorts, IComPorts, ICec, IRelayPorts, IHasDmInHdcp
+ IIROutputPorts, IComPorts, ICec, IRelayPorts, IHasDmInHdcp, IBasicVideoMuteWithFeedback
{
private readonly DmRmc4kScalerC _rmc;
@@ -68,6 +69,7 @@ namespace PepperDash.Essentials.DM
AddToFeedbackList(DmInHdcpStateFeedback);
+ VideoMuteIsOn = new BoolFeedback("HdmiOutputVideoMuteIsOn", () => _rmc.HdmiOutput.BlankEnabledFeedback.BoolValue);
_rmc.HdmiOutput.OutputStreamChange += HdmiOutput_OutputStreamChange;
_rmc.HdmiOutput.ConnectedDevice.DeviceInformationChange += ConnectedDevice_DeviceInformationChange;
@@ -83,6 +85,10 @@ namespace PepperDash.Essentials.DM
{
VideoOutputResolutionFeedback.FireUpdate();
}
+ else if (args.EventId == EndpointOutputStreamEventIds.BlankEnabledFeedbackEventId)
+ {
+ VideoMuteIsOn.FireUpdate();
+ }
}
void ConnectedDevice_DeviceInformationChange(ConnectedDeviceInformation connectedDevice, ConnectedDeviceEventArgs args)
@@ -216,5 +222,40 @@ namespace PepperDash.Essentials.DM
_rmc.DmInput.HdcpCapability = hdcpState;
}
+
+ #region IBasicVideoMuteWithFeedback Members
+
+ public BoolFeedback VideoMuteIsOn
+ {
+ get;
+ private set;
+ }
+
+ public void VideoMuteOn()
+ {
+ Debug.Console(2, this, "Video Mute On");
+ _rmc.HdmiOutput.BlankEnabled();
+ }
+
+ public void VideoMuteOff()
+ {
+ Debug.Console(2, this, "Video Mute Off");
+ _rmc.HdmiOutput.BlankDisabled();
+ }
+
+ #endregion
+
+ #region IBasicVideoMute Members
+
+ public void VideoMuteToggle()
+ {
+ Debug.Console(2, this, "Video Mute Toggle");
+ if (_rmc.HdmiOutput.BlankEnabledFeedback.BoolValue == true)
+ VideoMuteOff();
+ else
+ VideoMuteOn();
+ }
+
+ #endregion
}
}
\ No newline at end of file
diff --git a/essentials-framework/Essentials DM/Essentials_DM/Endpoints/Receivers/DmRmcHelper.cs b/essentials-framework/Essentials DM/Essentials_DM/Endpoints/Receivers/DmRmcHelper.cs
index 57f522fd..ee423436 100644
--- a/essentials-framework/Essentials DM/Essentials_DM/Endpoints/Receivers/DmRmcHelper.cs
+++ b/essentials-framework/Essentials DM/Essentials_DM/Endpoints/Receivers/DmRmcHelper.cs
@@ -59,8 +59,13 @@ namespace PepperDash.Essentials.DM
else
{
Debug.Console(0, this, "Please update config to use 'eiscapiadvanced' to get all join map features for this device.");
- }
+ }
+
+ LinkDmRmcToApi(rmc, trilist, joinMap);
+ }
+ protected void LinkDmRmcToApi(DmRmcControllerBase rmc, BasicTriList trilist, DmRmcControllerJoinMap joinMap)
+ {
Debug.Console(1, rmc, "Linking to Trilist '{0}'", trilist.ID.ToString("X"));
IsOnline.LinkInputSig(trilist.BooleanInput[joinMap.IsOnline.JoinNumber]);
@@ -137,7 +142,19 @@ namespace PepperDash.Essentials.DM
trilist.UShortInput[joinMap.HdcpSupportCapability.JoinNumber].UShortValue = (ushort)hdcpCapability;
- trilist.UShortInput[joinMap.HdcpInputPortCount.JoinNumber].UShortValue = (ushort)routing.InputPorts.Count;
+ trilist.UShortInput[joinMap.HdcpInputPortCount.JoinNumber].UShortValue = (ushort)routing.InputPorts.Count;
+
+ var dmRmcScalerCBasicVideoMuteWithFeedback = rmc as IBasicVideoMuteWithFeedback;
+
+ if (dmRmcScalerCBasicVideoMuteWithFeedback != null)
+ {
+ Debug.Console(1, this, "Device is IBasicVideoMuteWithFeedback, linking video mute");
+ trilist.SetSigTrueAction(joinMap.VideoMuteToggle.JoinNumber, () => dmRmcScalerCBasicVideoMuteWithFeedback.VideoMuteToggle());
+ trilist.SetSigTrueAction(joinMap.VideoMuteOn.JoinNumber, () => dmRmcScalerCBasicVideoMuteWithFeedback.VideoMuteOn());
+ trilist.SetSigTrueAction(joinMap.VideoMuteOff.JoinNumber, () => dmRmcScalerCBasicVideoMuteWithFeedback.VideoMuteOff());
+ dmRmcScalerCBasicVideoMuteWithFeedback.VideoMuteIsOn.LinkInputSig(trilist.BooleanInput[joinMap.VideoMuteOn.JoinNumber]);
+ dmRmcScalerCBasicVideoMuteWithFeedback.VideoMuteIsOn.LinkComplementInputSig(trilist.BooleanInput[joinMap.VideoMuteOff.JoinNumber]);
+ }
var routingWithFeedback = routing as IRmcRouting;
if (routingWithFeedback == null) return;
@@ -149,6 +166,7 @@ namespace PepperDash.Essentials.DM
trilist.SetUShortSigAction(joinMap.AudioVideoSource.JoinNumber,
a => routingWithFeedback.ExecuteNumericSwitch(a, 1, eRoutingSignalType.AudioVideo));
+
}
#region Implementation of IDeviceInfoProvider
diff --git a/essentials-framework/Essentials DM/Essentials_DM/PepperDash_Essentials_DM.csproj b/essentials-framework/Essentials DM/Essentials_DM/PepperDash_Essentials_DM.csproj
index 068d39cf..adfddbe3 100644
--- a/essentials-framework/Essentials DM/Essentials_DM/PepperDash_Essentials_DM.csproj
+++ b/essentials-framework/Essentials DM/Essentials_DM/PepperDash_Essentials_DM.csproj
@@ -59,7 +59,7 @@
..\..\..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SSPDevices\Crestron.SimplSharpPro.UI.dll
-
+
False
..\..\..\packages\PepperDashCore\lib\net35\PepperDash_Core.dll
@@ -153,6 +153,7 @@
+
diff --git a/essentials-framework/Essentials Devices Common/Essentials Devices Common/Essentials Devices Common.csproj b/essentials-framework/Essentials Devices Common/Essentials Devices Common/Essentials Devices Common.csproj
index a1cc37f2..845b61ef 100644
--- a/essentials-framework/Essentials Devices Common/Essentials Devices Common/Essentials Devices Common.csproj
+++ b/essentials-framework/Essentials Devices Common/Essentials Devices Common/Essentials Devices Common.csproj
@@ -63,7 +63,7 @@
..\..\..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SSPDevices\Crestron.SimplSharpPro.Lighting.dll
-
+
False
..\..\..\packages\PepperDashCore\lib\net35\PepperDash_Core.dll
diff --git a/packages.config b/packages.config
index 35ed241d..4b9c93be 100644
--- a/packages.config
+++ b/packages.config
@@ -1,3 +1,3 @@
-
+