diff --git a/essentials-framework/Essentials Core/PepperDashEssentialsBase/Bridges/JoinMaps/VideoCodecControllerJoinMap.cs b/essentials-framework/Essentials Core/PepperDashEssentialsBase/Bridges/JoinMaps/VideoCodecControllerJoinMap.cs
index dcb66a2e..c83f6332 100644
--- a/essentials-framework/Essentials Core/PepperDashEssentialsBase/Bridges/JoinMaps/VideoCodecControllerJoinMap.cs
+++ b/essentials-framework/Essentials Core/PepperDashEssentialsBase/Bridges/JoinMaps/VideoCodecControllerJoinMap.cs
@@ -525,6 +525,48 @@ namespace PepperDash.Essentials.Core.Bridges.JoinMaps
JoinType = eJoinType.Digital
});
+ [JoinName("CameraFocusNear")]
+ public JoinDataComplete CameraFocusNear = new JoinDataComplete(
+ new JoinData
+ {
+ JoinNumber = 117,
+ JoinSpan = 1
+ },
+ new JoinMetadata
+ {
+ Description = "Camera Focus Near",
+ JoinCapabilities = eJoinCapabilities.FromSIMPL,
+ JoinType = eJoinType.Digital
+ });
+
+ [JoinName("CameraFocusFar")]
+ public JoinDataComplete CameraFocusFar = new JoinDataComplete(
+ new JoinData
+ {
+ JoinNumber = 118,
+ JoinSpan = 1
+ },
+ new JoinMetadata
+ {
+ Description = "Camera Focus Far",
+ JoinCapabilities = eJoinCapabilities.FromSIMPL,
+ JoinType = eJoinType.Digital
+ });
+
+ [JoinName("CameraFocusAuto")]
+ public JoinDataComplete CameraFocusAuto = new JoinDataComplete(
+ new JoinData
+ {
+ JoinNumber = 119,
+ JoinSpan = 1
+ },
+ new JoinMetadata
+ {
+ Description = "Camera Auto Focus Trigger",
+ JoinCapabilities = eJoinCapabilities.FromSIMPL,
+ JoinType = eJoinType.Digital
+ });
+
[JoinName("CameraPresetSave")]
public JoinDataComplete CameraPresetSave = new JoinDataComplete(
new JoinData
diff --git a/essentials-framework/Essentials Devices Common/Essentials Devices Common/VideoCodec/CiscoCodec/CiscoSparkCodec.cs b/essentials-framework/Essentials Devices Common/Essentials Devices Common/VideoCodec/CiscoCodec/CiscoSparkCodec.cs
index 779fd310..172c186c 100644
--- a/essentials-framework/Essentials Devices Common/Essentials Devices Common/VideoCodec/CiscoCodec/CiscoSparkCodec.cs
+++ b/essentials-framework/Essentials Devices Common/Essentials Devices Common/VideoCodec/CiscoCodec/CiscoSparkCodec.cs
@@ -64,6 +64,8 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco
public BoolFeedback FarEndIsSharingContentFeedback { get; private set; }
+ public IntFeedback RingtoneVolumeFeedback { get; private set; }
+
private CodecCommandWithLabel CurrentSelfviewPipPosition;
private CodecCommandWithLabel CurrentLocalLayout;
@@ -324,6 +326,8 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco
PresentationViewMaximizedFeedback = new BoolFeedback(() => CurrentPresentationView == "Maximized");
+ RingtoneVolumeFeedback = new IntFeedback(() => CodecConfiguration.Configuration.Audio.SoundsAndAlerts.RingVolume.Volume);
+
Communication = comm;
if (props.CommunicationMonitorProperties != null)
@@ -436,6 +440,8 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco
CodecStatus.Status.Conference.Presentation.Mode.ValueChangedAction = FarEndIsSharingContentFeedback.FireUpdate;
CodecStatus.Status.Conference.DoNotDisturb.ValueChangedAction = DoNotDisturbModeIsOnFeedback.FireUpdate;
+ CodecConfiguration.Configuration.Audio.SoundsAndAlerts.RingVolume.ValueChangedAction = RingtoneVolumeFeedback.FireUpdate;
+
try
{
CodecStatus.Status.Video.Input.MainVideoMute.ValueChangedAction = CameraIsOffFeedback.FireUpdate;
@@ -1419,11 +1425,25 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco
#endregion
+ ///
+ /// Sends tones to the last connected call
+ ///
+ ///
public override void SendDtmf(string s)
{
SendText(string.Format("xCommand Call DTMFSend CallId: {0} DTMFString: \"{1}\"", GetCallId(), s));
}
+ ///
+ /// Sends tones to a specific call
+ ///
+ ///
+ ///
+ public void SendDtmf(string s, CodecActiveCallItem activeCall)
+ {
+ SendText(string.Format("xCommand Call DTMFSend CallId: {0} DTMFString: \"{1}\"", activeCall.Id, s));
+ }
+
public void SelectPresentationSource(int source)
{
PresentationSource = source;
@@ -1431,6 +1451,15 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco
StartSharing();
}
+ ///
+ /// Sets the ringtone volume level
+ ///
+ /// level from 0 - 100 in increments of 5
+ public void SetRingtoneVolume(int volume)
+ {
+ SendText(string.Format("xConfiguration Audio SoundsAndAlerts RingVolume: [0]", volume));
+ }
+
///
/// Select source 1 as the presetnation source
///
@@ -1447,6 +1476,8 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco
SelectPresentationSource(3);
}
+
+
///
/// Starts presentation sharing
///
@@ -1473,6 +1504,8 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco
SendText("xCommand Presentation Stop");
}
+
+
public override void PrivacyModeOn()
{
SendText("xCommand Audio Microphones Mute");
@@ -1601,6 +1634,8 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco
trilist.SetSigFalseAction(joinMap.DeactivateStandby.JoinNumber, () => halfwakeCodec.StandbyDeactivate());
trilist.SetSigFalseAction(joinMap.ActivateHalfWakeMode.JoinNumber, () => halfwakeCodec.HalfwakeActivate());
}
+
+ // TODO: Add mechanism to select a call instance to be able to direct DTMF tones to...
}
///
diff --git a/essentials-framework/Essentials Devices Common/Essentials Devices Common/VideoCodec/CiscoCodec/xConfiguration.cs b/essentials-framework/Essentials Devices Common/Essentials Devices Common/VideoCodec/CiscoCodec/xConfiguration.cs
index 8ae9e643..e6ee8e4d 100644
--- a/essentials-framework/Essentials Devices Common/Essentials Devices Common/VideoCodec/CiscoCodec/xConfiguration.cs
+++ b/essentials-framework/Essentials Devices Common/Essentials Devices Common/VideoCodec/CiscoCodec/xConfiguration.cs
@@ -112,16 +112,46 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco
public string Value { get; set; }
}
- public class RingVolume
+ public class RingVolume : ValueProperty
{
public string valueSpaceRef { get; set; }
- public string Value { get; set; }
+
+ string _Value;
+
+ ///
+ /// Sets Value and triggers the action when set
+ ///
+ public string Value
+ {
+ get
+ {
+ return _Value;
+ }
+ set
+ {
+ _Value = value;
+ OnValueChanged();
+ }
+ }
+
+ public int Volume
+ {
+ get
+ {
+ return Int32.Parse(_Value);
+ }
+ }
}
public class SoundsAndAlerts
{
public RingTone RingTone { get; set; }
public RingVolume RingVolume { get; set; }
+
+ public SoundsAndAlerts()
+ {
+ RingVolume = new RingVolume();
+ }
}
public class Audio
@@ -131,6 +161,12 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco
public Microphones Microphones { get; set; }
public Output Output { get; set; }
public SoundsAndAlerts SoundsAndAlerts { get; set; }
+
+
+ public Audio()
+ {
+ SoundsAndAlerts = new SoundsAndAlerts();
+ }
}
public class DefaultMode
@@ -1797,6 +1833,11 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco
public UserInterface UserInterface { get; set; }
public UserManagement UserManagement { get; set; }
public Video2 Video { get; set; }
+
+ public Configuration()
+ {
+ Audio = new Audio();
+ }
}
public class RootObject
diff --git a/essentials-framework/Essentials Devices Common/Essentials Devices Common/VideoCodec/CiscoCodec/xStatus.cs b/essentials-framework/Essentials Devices Common/Essentials Devices Common/VideoCodec/CiscoCodec/xStatus.cs
index eadc4c32..ca98c1fc 100644
--- a/essentials-framework/Essentials Devices Common/Essentials Devices Common/VideoCodec/CiscoCodec/xStatus.cs
+++ b/essentials-framework/Essentials Devices Common/Essentials Devices Common/VideoCodec/CiscoCodec/xStatus.cs
@@ -12,28 +12,28 @@ using PepperDash.Essentials.Devices.Common.VideoCodec.CiscoCodec;
namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco
{
+ // Helper Classes for Proerties
+ public abstract class ValueProperty
+ {
+ ///
+ /// Triggered when Value is set
+ ///
+ public Action ValueChangedAction { get; set; }
+
+ protected void OnValueChanged()
+ {
+ var a = ValueChangedAction;
+ if (a != null)
+ a();
+ }
+
+ }
+
///
/// This class exists to capture serialized data sent back by a Cisco codec in JSON output mode
///
public class CiscoCodecStatus
{
- // Helper Classes for Proerties
- public abstract class ValueProperty
- {
- ///
- /// Triggered when Value is set
- ///
- public Action ValueChangedAction { get; set; }
-
- protected void OnValueChanged()
- {
- var a = ValueChangedAction;
- if (a != null)
- a();
- }
-
- }
-
public class ConnectionStatus
{
diff --git a/essentials-framework/Essentials Devices Common/Essentials Devices Common/VideoCodec/VideoCodecBase.cs b/essentials-framework/Essentials Devices Common/Essentials Devices Common/VideoCodec/VideoCodecBase.cs
index 2549bea0..84900293 100644
--- a/essentials-framework/Essentials Devices Common/Essentials Devices Common/VideoCodec/VideoCodecBase.cs
+++ b/essentials-framework/Essentials Devices Common/Essentials Devices Common/VideoCodec/VideoCodecBase.cs
@@ -1201,6 +1201,39 @@ ScreenIndexIsPinnedTo: {8} (a{17})
else camera.ZoomStop();
});
+
+ trilist.SetBoolSigAction(joinMap.CameraFocusNear.JoinNumber, (b) =>
+ {
+ if (codec.SelectedCamera == null) return;
+ var camera = codec.SelectedCamera as IHasCameraFocusControl;
+
+ if (camera == null) return;
+
+ if (b) camera.FocusNear();
+ else camera.FocusStop();
+ });
+
+ trilist.SetBoolSigAction(joinMap.CameraFocusFar.JoinNumber, (b) =>
+ {
+ if (codec.SelectedCamera == null) return;
+ var camera = codec.SelectedCamera as IHasCameraFocusControl;
+
+ if (camera == null) return;
+
+ if (b) camera.FocusFar();
+ else camera.FocusStop();
+ });
+
+ trilist.SetSigFalseAction(joinMap.CameraFocusAuto.JoinNumber, () =>
+ {
+ if (codec.SelectedCamera == null) return;
+ var camera = codec.SelectedCamera as IHasCameraFocusControl;
+
+ if (camera == null) return;
+
+ camera.TriggerAutoFocus();
+ });
+
//Camera Select
trilist.SetUShortSigAction(joinMap.CameraNumberSelect.JoinNumber, (i) =>
{