diff --git a/essentials-framework/Essentials Core/PepperDashEssentialsBase/Bridges/JoinMaps/VideoCodecControllerJoinMap.cs b/essentials-framework/Essentials Core/PepperDashEssentialsBase/Bridges/JoinMaps/VideoCodecControllerJoinMap.cs
index e28edecf..7e71ec22 100644
--- a/essentials-framework/Essentials Core/PepperDashEssentialsBase/Bridges/JoinMaps/VideoCodecControllerJoinMap.cs
+++ b/essentials-framework/Essentials Core/PepperDashEssentialsBase/Bridges/JoinMaps/VideoCodecControllerJoinMap.cs
@@ -36,6 +36,15 @@ namespace PepperDash_Essentials_Core.Bridges.JoinMaps
JoinType = eJoinType.Digital
});
+ [JoinName("CameraLayoutStringFb")] public JoinDataComplete CameraLayoutStringFb =
+ new JoinDataComplete(new JoinData {JoinNumber = 141, JoinSpan = 1},
+ new JoinMetadata
+ {
+ Description = "Current Layout Fb",
+ JoinCapabilities = eJoinCapabilities.ToSIMPL,
+ JoinType = eJoinType.Analog
+ });
+
[JoinName("CameraModeAuto")] public JoinDataComplete CameraModeAuto =
new JoinDataComplete(new JoinData {JoinNumber = 131, JoinSpan = 1},
new JoinMetadata
@@ -90,6 +99,15 @@ namespace PepperDash_Essentials_Core.Bridges.JoinMaps
JoinType = eJoinType.Digital
});
+ [JoinName("CameraPresetNames")] public JoinDataComplete CameraPresetNames =
+ new JoinDataComplete(new JoinData {JoinNumber = 121, JoinSpan = 1},
+ new JoinMetadata
+ {
+ Description = "Camera Preset Names - XSIG, max of 15",
+ JoinCapabilities = eJoinCapabilities.ToSIMPL,
+ JoinType = eJoinType.Serial
+ });
+
[JoinName("CameraPresetSelect")] public JoinDataComplete CameraPresetSelect =
new JoinDataComplete(new JoinData {JoinNumber = 121, JoinSpan = 1},
new JoinMetadata
@@ -99,13 +117,13 @@ namespace PepperDash_Essentials_Core.Bridges.JoinMaps
JoinType = eJoinType.Analog
});
- [JoinName("CameraPresetNames")] public JoinDataComplete CameraPresetNames =
+ [JoinName("CameraPresetSave")] public JoinDataComplete CameraPresetSave =
new JoinDataComplete(new JoinData {JoinNumber = 121, JoinSpan = 1},
new JoinMetadata
{
- Description = "Camera Preset Names - XSIG, max of 15",
- JoinCapabilities = eJoinCapabilities.ToSIMPL,
- JoinType = eJoinType.Serial
+ Description = "Save Selected Preset",
+ JoinCapabilities = eJoinCapabilities.ToFromSIMPL,
+ JoinType = eJoinType.Digital
});
[JoinName("CameraSelfView")] public JoinDataComplete CameraSelfView =
@@ -189,12 +207,30 @@ namespace PepperDash_Essentials_Core.Bridges.JoinMaps
JoinType = eJoinType.Serial
});
- [JoinName("DirectoryHasChanged")] public JoinDataComplete DirectoryHasChanged =
- new JoinDataComplete(new JoinData {JoinNumber = 103, JoinSpan = 1},
+ [JoinName("CurrentParticipants")] public JoinDataComplete CurrentParticipants =
+ new JoinDataComplete(new JoinData {JoinNumber = 151, JoinSpan = 1},
+ new JoinMetadata()
+ {
+ Description = "Current Participants XSig",
+ JoinCapabilities = eJoinCapabilities.ToSIMPL,
+ JoinType = eJoinType.Serial
+ });
+
+ [JoinName("CurrentSource")] public JoinDataComplete CurrentSource =
+ new JoinDataComplete(new JoinData {JoinNumber = 201, JoinSpan = 1},
new JoinMetadata
{
- Description = "Directory has changed FB",
+ Description = "Current Source",
JoinCapabilities = eJoinCapabilities.ToSIMPL,
+ JoinType = eJoinType.Serial
+ });
+
+ [JoinName("DialMeeting")] public JoinDataComplete DialMeeting =
+ new JoinDataComplete(new JoinData {JoinNumber = 161, JoinSpan = 1},
+ new JoinMetadata
+ {
+ Description = "Join first joinable meeting",
+ JoinCapabilities = eJoinCapabilities.FromSIMPL,
JoinType = eJoinType.Digital
});
@@ -252,6 +288,15 @@ namespace PepperDash_Essentials_Core.Bridges.JoinMaps
JoinType = eJoinType.Digital
});
+ [JoinName("DirectoryHasChanged")] public JoinDataComplete DirectoryHasChanged =
+ new JoinDataComplete(new JoinData {JoinNumber = 103, JoinSpan = 1},
+ new JoinMetadata
+ {
+ Description = "Directory has changed FB",
+ JoinCapabilities = eJoinCapabilities.ToSIMPL,
+ JoinType = eJoinType.Digital
+ });
+
[JoinName("DirectoryIsRoot")] public JoinDataComplete DirectoryIsRoot =
new JoinDataComplete(new JoinData {JoinNumber = 102, JoinSpan = 1},
new JoinMetadata
@@ -495,37 +540,12 @@ namespace PepperDash_Essentials_Core.Bridges.JoinMaps
JoinType = eJoinType.Digital
});
- [JoinName("SpeedDialStart")] public JoinDataComplete SpeedDialStart =
- new JoinDataComplete(new JoinData {JoinNumber = 41, JoinSpan = 4},
+
+ [JoinName("ManualDial")] public JoinDataComplete ManualDial =
+ new JoinDataComplete(new JoinData {JoinNumber = 71, JoinSpan = 1},
new JoinMetadata
{
- Description = "Speed Dial",
- JoinCapabilities = eJoinCapabilities.ToSIMPL,
- JoinType = eJoinType.Digital
- });
-
- [JoinName("Schedule")] public JoinDataComplete Schedule =
- new JoinDataComplete(new JoinData {JoinNumber = 102, JoinSpan = 1},
- new JoinMetadata
- {
- Description = "Schedule Data - XSIG",
- JoinCapabilities = eJoinCapabilities.ToSIMPL,
- JoinType = eJoinType.Serial
- });
-
- [JoinName("DialMeeting")] public JoinDataComplete DialMeeting = new JoinDataComplete(new JoinData{JoinNumber=161, JoinSpan = 1},
- new JoinMetadata
- {
- Description = "Join first joinable meeting",
- JoinCapabilities = eJoinCapabilities.FromSIMPL,
- JoinType = eJoinType.Digital
- });
-
- [JoinName("UpdateMeetings")] public JoinDataComplete UpdateMeetings =
- new JoinDataComplete(new JoinData {JoinNumber = 162, JoinSpan = 1},
- new JoinMetadata
- {
- Description = "Update Meetings",
+ Description = "Dial manual string",
JoinCapabilities = eJoinCapabilities.FromSIMPL,
JoinType = eJoinType.Digital
});
@@ -539,82 +559,15 @@ namespace PepperDash_Essentials_Core.Bridges.JoinMaps
JoinType = eJoinType.Analog
});
-
- [JoinName("CameraLayoutStringFb")]
- public JoinDataComplete CameraLayoutStringFb =
- new JoinDataComplete(new JoinData { JoinNumber = 141, JoinSpan = 1 },
- new JoinMetadata
- {
- Description = "Current Layout Fb",
- JoinCapabilities = eJoinCapabilities.ToSIMPL,
- JoinType = eJoinType.Analog
- });
-
-
-
-
- [JoinName("ManualDial")] public JoinDataComplete ManualDial =
- new JoinDataComplete(new JoinData {JoinNumber = 71, JoinSpan = 1},
+ [JoinName("MicMuteOff")] public JoinDataComplete MicMuteOff =
+ new JoinDataComplete(new JoinData {JoinNumber = 172, JoinSpan = 1},
new JoinMetadata
{
- Description = "Dial manual string",
- JoinCapabilities = eJoinCapabilities.FromSIMPL,
- JoinType = eJoinType.Digital
- });
-
- [JoinName("SourceShareStart")] public JoinDataComplete SourceShareStart =
- new JoinDataComplete(new JoinData {JoinNumber = 201, JoinSpan = 1},
- new JoinMetadata
- {
- Description = "Start Sharing & Feedback",
+ Description = "Mic Mute Off",
JoinCapabilities = eJoinCapabilities.ToFromSIMPL,
JoinType = eJoinType.Digital
});
- [JoinName("SourceShareEnd")]
- public JoinDataComplete SourceShareEnd =
- new JoinDataComplete(new JoinData { JoinNumber = 202, JoinSpan = 1 },
- new JoinMetadata
- {
- Description = "Stop Sharing & Feedback",
- JoinCapabilities = eJoinCapabilities.ToFromSIMPL,
- JoinType = eJoinType.Digital
- });
-
- [JoinName("AutoShareWhileInCall")] public JoinDataComplete SourceShareAutoStart =
- new JoinDataComplete(new JoinData {JoinNumber = 203, JoinSpan = 1},
- new JoinMetadata
- {
- Description = "When high, will autostart sharing when a call is joined",
- JoinCapabilities = eJoinCapabilities.FromSIMPL,
- JoinType = eJoinType.Digital
- });
-
- [JoinName("CurrentSource")] public JoinDataComplete CurrentSource = new JoinDataComplete(new JoinData{JoinNumber = 201, JoinSpan = 1},
- new JoinMetadata
- {
- Description = "Current Source",
- JoinCapabilities = eJoinCapabilities.ToSIMPL,
- JoinType = eJoinType.Serial
- });
-
- [JoinName("CurrentParticipants")] public JoinDataComplete CurrentParticipants =
- new JoinDataComplete(new JoinData{JoinNumber = 151, JoinSpan = 1},
- new JoinMetadata()
- {
- Description = "Current Participants XSig",
- JoinCapabilities = eJoinCapabilities.ToSIMPL,
- JoinType = eJoinType.Serial
- });
-
- [JoinName("ParticipantCount")] public JoinDataComplete ParticipantCount = new JoinDataComplete(new JoinData{JoinNumber = 151, JoinSpan = 1},
- new JoinMetadata
- {
- Description = "Current Participant Count",
- JoinCapabilities = eJoinCapabilities.ToSIMPL,
- JoinType = eJoinType.Analog
- });
-
[JoinName("MicMuteOn")] public JoinDataComplete MicMuteOn =
new JoinDataComplete(new JoinData {JoinNumber = 171, JoinSpan = 1},
new JoinMetadata
@@ -624,15 +577,6 @@ namespace PepperDash_Essentials_Core.Bridges.JoinMaps
JoinType = eJoinType.Digital
});
- [JoinName("MicMuteOff")] public JoinDataComplete MicMuteOff =
- new JoinDataComplete(new JoinData {JoinNumber = 172, JoinSpan = 1},
- new JoinMetadata
- {
- Description = "Mic Mute Off",
- JoinCapabilities = eJoinCapabilities.ToFromSIMPL,
- JoinType = eJoinType.Digital
- });
-
[JoinName("MicMuteToggle")] public JoinDataComplete MicMuteToggle =
new JoinDataComplete(new JoinData {JoinNumber = 173, JoinSpan = 1},
new JoinMetadata
@@ -642,35 +586,150 @@ namespace PepperDash_Essentials_Core.Bridges.JoinMaps
JoinType = eJoinType.Digital
});
- [JoinName("VolumeMuteOn")]
- public JoinDataComplete VolumeMuteOn =
- new JoinDataComplete(new JoinData { JoinNumber = 176, JoinSpan = 1 },
+ [JoinName("MinutesBeforeMeetingStart")] public JoinDataComplete MinutesBeforeMeetingStart =
+ new JoinDataComplete(new JoinData {JoinNumber = 41, JoinSpan = 1},
+ new JoinMetadata
+ {
+ Description = "Minutes before meeting start that a meeting is joinable",
+ JoinCapabilities = eJoinCapabilities.FromSIMPL,
+ JoinType = eJoinType.Analog
+ });
+
+ [JoinName("ParticipantCount")] public JoinDataComplete ParticipantCount =
+ new JoinDataComplete(new JoinData {JoinNumber = 151, JoinSpan = 1},
+ new JoinMetadata
+ {
+ Description = "Current Participant Count",
+ JoinCapabilities = eJoinCapabilities.ToSIMPL,
+ JoinType = eJoinType.Analog
+ });
+
+ [JoinName("Schedule")] public JoinDataComplete Schedule =
+ new JoinDataComplete(new JoinData {JoinNumber = 102, JoinSpan = 1},
+ new JoinMetadata
+ {
+ Description = "Schedule Data - XSIG",
+ JoinCapabilities = eJoinCapabilities.ToSIMPL,
+ JoinType = eJoinType.Serial
+ });
+
+ [JoinName("AutoShareWhileInCall")] public JoinDataComplete SourceShareAutoStart =
+ new JoinDataComplete(new JoinData {JoinNumber = 203, JoinSpan = 1},
+ new JoinMetadata
+ {
+ Description = "When high, will autostart sharing when a call is joined",
+ JoinCapabilities = eJoinCapabilities.FromSIMPL,
+ JoinType = eJoinType.Digital
+ });
+
+ [JoinName("SourceShareEnd")] public JoinDataComplete SourceShareEnd =
+ new JoinDataComplete(new JoinData {JoinNumber = 202, JoinSpan = 1},
+ new JoinMetadata
+ {
+ Description = "Stop Sharing & Feedback",
+ JoinCapabilities = eJoinCapabilities.ToFromSIMPL,
+ JoinType = eJoinType.Digital
+ });
+
+ [JoinName("SourceShareStart")] public JoinDataComplete SourceShareStart =
+ new JoinDataComplete(new JoinData {JoinNumber = 201, JoinSpan = 1},
+ new JoinMetadata
+ {
+ Description = "Start Sharing & Feedback",
+ JoinCapabilities = eJoinCapabilities.ToFromSIMPL,
+ JoinType = eJoinType.Digital
+ });
+
+ [JoinName("RecievingContent")] public JoinDataComplete RecievingContent =
+ new JoinDataComplete(new JoinData {JoinNumber = 204, JoinSpan = 1},
+ new JoinMetadata
+ {
+ Description = "Recieving content from the far end",
+ JoinType = eJoinType.Digital,
+ JoinCapabilities = eJoinCapabilities.ToSIMPL
+ });
+
+ [JoinName("SelfviewPosition")] public JoinDataComplete SelfviewPosition =
+ new JoinDataComplete(new JoinData {JoinNumber = 211, JoinSpan = 1},
+ new JoinMetadata
+ {
+ Description = "advance selfview position",
+ JoinCapabilities = eJoinCapabilities.FromSIMPL,
+ JoinType = eJoinType.Digital
+ });
+
+ [JoinName("SelfviewPositionFb")]
+ public JoinDataComplete SelfviewPositionFb =
+ new JoinDataComplete(new JoinData { JoinNumber = 211, JoinSpan = 1 },
new JoinMetadata
{
- Description = "Volume Mute On",
- JoinCapabilities = eJoinCapabilities.ToFromSIMPL,
- JoinType = eJoinType.Digital
+ Description = "advance selfview position",
+ JoinCapabilities = eJoinCapabilities.ToSIMPL,
+ JoinType = eJoinType.Serial
});
- [JoinName("VolumeMuteOff")]
- public JoinDataComplete VolumeMuteOff =
- new JoinDataComplete(new JoinData { JoinNumber = 177, JoinSpan = 1 },
- new JoinMetadata
- {
- Description = "Volume Mute Off",
- JoinCapabilities = eJoinCapabilities.ToFromSIMPL,
- JoinType = eJoinType.Digital
- });
+ [JoinName("SpeedDialStart")] public JoinDataComplete SpeedDialStart =
+ new JoinDataComplete(new JoinData {JoinNumber = 41, JoinSpan = 4},
+ new JoinMetadata
+ {
+ Description = "Speed Dial",
+ JoinCapabilities = eJoinCapabilities.ToSIMPL,
+ JoinType = eJoinType.Digital
+ });
- [JoinName("VolumeMuteToggle")]
- public JoinDataComplete VolumeMuteToggle =
- new JoinDataComplete(new JoinData { JoinNumber = 178, JoinSpan = 1 },
- new JoinMetadata
- {
- Description = "Volume Mute Toggle",
- JoinCapabilities = eJoinCapabilities.ToFromSIMPL,
- JoinType = eJoinType.Digital
- });
+ [JoinName("UpdateMeetings")] public JoinDataComplete UpdateMeetings =
+ new JoinDataComplete(new JoinData {JoinNumber = 162, JoinSpan = 1},
+ new JoinMetadata
+ {
+ Description = "Update Meetings",
+ JoinCapabilities = eJoinCapabilities.FromSIMPL,
+ JoinType = eJoinType.Digital
+ });
+
+ [JoinName("VolumeDown")] public JoinDataComplete VolumeDown =
+ new JoinDataComplete(new JoinData {JoinNumber = 175, JoinSpan = 1},
+ new JoinMetadata
+ {
+ Description = "Volume Down",
+ JoinCapabilities = eJoinCapabilities.FromSIMPL,
+ JoinType = eJoinType.Digital
+ });
+
+ [JoinName("VolumeLevel")] public JoinDataComplete VolumeLevel =
+ new JoinDataComplete(new JoinData {JoinNumber = 174, JoinSpan = 1},
+ new JoinMetadata
+ {
+ Description = "Volume Level",
+ JoinCapabilities = eJoinCapabilities.ToFromSIMPL,
+ JoinType = eJoinType.Analog
+ });
+
+ [JoinName("VolumeMuteOff")] public JoinDataComplete VolumeMuteOff =
+ new JoinDataComplete(new JoinData {JoinNumber = 177, JoinSpan = 1},
+ new JoinMetadata
+ {
+ Description = "Volume Mute Off",
+ JoinCapabilities = eJoinCapabilities.ToFromSIMPL,
+ JoinType = eJoinType.Digital
+ });
+
+ [JoinName("VolumeMuteOn")] public JoinDataComplete VolumeMuteOn =
+ new JoinDataComplete(new JoinData {JoinNumber = 176, JoinSpan = 1},
+ new JoinMetadata
+ {
+ Description = "Volume Mute On",
+ JoinCapabilities = eJoinCapabilities.ToFromSIMPL,
+ JoinType = eJoinType.Digital
+ });
+
+ [JoinName("VolumeMuteToggle")] public JoinDataComplete VolumeMuteToggle =
+ new JoinDataComplete(new JoinData {JoinNumber = 178, JoinSpan = 1},
+ new JoinMetadata
+ {
+ Description = "Volume Mute Toggle",
+ JoinCapabilities = eJoinCapabilities.ToFromSIMPL,
+ JoinType = eJoinType.Digital
+ });
[JoinName("VolumeUp")] public JoinDataComplete VolumeUp =
new JoinDataComplete(new JoinData {JoinNumber = 174, JoinSpan = 1},
@@ -681,35 +740,6 @@ namespace PepperDash_Essentials_Core.Bridges.JoinMaps
JoinType = eJoinType.Digital
});
- [JoinName("VolumeDown")]
- public JoinDataComplete VolumeDown =
- new JoinDataComplete(new JoinData { JoinNumber = 175, JoinSpan = 1 },
- new JoinMetadata
- {
- Description = "Volume Down",
- JoinCapabilities = eJoinCapabilities.FromSIMPL,
- JoinType = eJoinType.Digital
- });
-
- [JoinName("VolumeLevel")]
- public JoinDataComplete VolumeLevel =
- new JoinDataComplete(new JoinData { JoinNumber = 174, JoinSpan = 1 },
- new JoinMetadata
- {
- Description = "Volume Level",
- JoinCapabilities = eJoinCapabilities.ToFromSIMPL,
- JoinType = eJoinType.Analog
- });
-
- [JoinName("MinutesBeforeMeetingStart")] public JoinDataComplete MinutesBeforeMeetingStart =
- new JoinDataComplete(new JoinData {JoinNumber = 41, JoinSpan = 1},
- new JoinMetadata
- {
- Description = "Minutes before meeting start that a meeting is joinable",
- JoinCapabilities = eJoinCapabilities.FromSIMPL,
- JoinType = eJoinType.Analog
- });
-
public VideoCodecControllerJoinMap(uint joinStart) : base(joinStart, typeof (VideoCodecControllerJoinMap))
{
}
diff --git a/essentials-framework/Essentials Core/PepperDashEssentialsBase/DeviceTypeInterfaces/IHasFarEndContentStatus.cs b/essentials-framework/Essentials Core/PepperDashEssentialsBase/DeviceTypeInterfaces/IHasFarEndContentStatus.cs
new file mode 100644
index 00000000..21bde91f
--- /dev/null
+++ b/essentials-framework/Essentials Core/PepperDashEssentialsBase/DeviceTypeInterfaces/IHasFarEndContentStatus.cs
@@ -0,0 +1,7 @@
+namespace PepperDash.Essentials.Core.DeviceTypeInterfaces
+{
+ public interface IHasFarEndContentStatus
+ {
+ BoolFeedback ReceivingContent { get; }
+ }
+}
\ 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 3bd74bdc..7524c8d7 100644
--- a/essentials-framework/Essentials Core/PepperDashEssentialsBase/PepperDash_Essentials_Core.csproj
+++ b/essentials-framework/Essentials Core/PepperDashEssentialsBase/PepperDash_Essentials_Core.csproj
@@ -196,6 +196,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 94988b7b..f115f401 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
@@ -121,6 +121,7 @@
+
diff --git a/essentials-framework/Essentials Devices Common/Essentials Devices Common/VideoCodec/Interfaces/IHasSelfviewPosition.cs b/essentials-framework/Essentials Devices Common/Essentials Devices Common/VideoCodec/Interfaces/IHasSelfviewPosition.cs
new file mode 100644
index 00000000..5360b80a
--- /dev/null
+++ b/essentials-framework/Essentials Devices Common/Essentials Devices Common/VideoCodec/Interfaces/IHasSelfviewPosition.cs
@@ -0,0 +1,14 @@
+using PepperDash.Essentials.Core;
+using PepperDash.Essentials.Devices.Common.VideoCodec.Cisco;
+
+namespace PepperDash.Essentials.Core.DeviceTypeInterfaces
+{
+ public interface IHasSelfviewPosition
+ {
+ StringFeedback SelfviewPipPositionFeedback { get; }
+
+ void SelfviewPipPositionSet(CodecCommandWithLabel position);
+
+ void SelfviewPipPositionToggle();
+ }
+}
\ No newline at end of file
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 6874e049..1e9e96cd 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
@@ -12,7 +12,8 @@ using PepperDash.Core.WebApi.Presets;
using PepperDash.Essentials.Core;
using PepperDash.Essentials.Core.Bridges;
using PepperDash.Essentials.Core.Config;
-using PepperDash.Essentials.Core.Devices;
+using PepperDash.Essentials.Core.Devices;
+using PepperDash.Essentials.Core.DeviceTypeInterfaces;
using PepperDash.Essentials.Core.Routing;
using PepperDash.Essentials.Devices.Common.Cameras;
using PepperDash.Essentials.Devices.Common.Codec;
@@ -198,7 +199,7 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec
///
///
///
- protected void OnCallStatusChange(CodecActiveCallItem item)
+ protected virtual void OnCallStatusChange(CodecActiveCallItem item)
{
var handler = CallStatusChange;
if (handler != null)
@@ -320,6 +321,11 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec
if (codec is IHasCodecLayouts)
{
LinkVideoCodecCameraLayoutsToApi(codec as IHasCodecLayouts, trilist, joinMap);
+ }
+
+ if (codec is IHasSelfviewPosition)
+ {
+ LinkVideoCodecSelfviewPositionToApi(codec as IHasSelfviewPosition, trilist, joinMap);
}
if (codec is IHasDirectory)
@@ -335,6 +341,11 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec
if (codec is IHasParticipants)
{
LinkVideoCodecParticipantsToApi(codec as IHasParticipants, trilist, joinMap);
+ }
+
+ if (codec is IHasFarEndContentStatus)
+ {
+ (codec as IHasFarEndContentStatus).ReceivingContent.LinkInputSig(trilist.BooleanInput[joinMap.RecievingContent.JoinNumber]);
}
trilist.OnlineStatusChange += (device, args) =>
@@ -360,15 +371,25 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec
{
trilist.SetBool(joinMap.CameraSupportsAutoMode.JoinNumber, true);
- (codec as IHasCameraAutoMode).CameraAutoModeIsOnFeedback.InvokeFireUpdate();
+ (codec as IHasCameraAutoMode).CameraAutoModeIsOnFeedback.FireUpdate();
}
if (codec is IHasCodecSelfView)
{
- (codec as IHasCodecSelfView).SelfviewIsOnFeedback.InvokeFireUpdate();
+ (codec as IHasCodecSelfView).SelfviewIsOnFeedback.FireUpdate();
+ }
+
+ if (codec is IHasCameraAutoMode)
+ {
+ (codec as IHasCameraAutoMode).CameraAutoModeIsOnFeedback.FireUpdate();
+ }
+
+ if (codec is IHasCameraOff)
+ {
+ (codec as IHasCameraOff).CameraIsOffFeedback.FireUpdate();
}
- SharingContentIsOnFeedback.InvokeFireUpdate();
+ SharingContentIsOnFeedback.FireUpdate();
trilist.SetBool(joinMap.HookState.JoinNumber, IsInCall);
@@ -376,11 +397,53 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec
};
}
+ private void LinkVideoCodecSelfviewPositionToApi(IHasSelfviewPosition codec, BasicTriList trilist, VideoCodecControllerJoinMap joinMap)
+ {
+ trilist.SetSigFalseAction(joinMap.SelfviewPosition.JoinNumber, codec.SelfviewPipPositionToggle);
+
+ codec.SelfviewPipPositionFeedback.LinkInputSig(trilist.StringInput[joinMap.SelfviewPositionFb.JoinNumber]);
+ }
+
private void LinkVideoCodecCameraOffToApi(IHasCameraOff codec, BasicTriList trilist, VideoCodecControllerJoinMap joinMap)
{
- codec.CameraIsOffFeedback.LinkInputSig(trilist.BooleanInput[joinMap.CameraModeOff.JoinNumber]);
-
trilist.SetSigFalseAction(joinMap.CameraModeOff.JoinNumber, codec.CameraOff);
+
+ codec.CameraIsOffFeedback.OutputChange += (o, a) =>
+ {
+ if (a.BoolValue)
+ {
+ trilist.SetBool(joinMap.CameraModeOff.JoinNumber, true);
+ trilist.SetBool(joinMap.CameraModeManual.JoinNumber, false);
+ trilist.SetBool(joinMap.CameraModeAuto.JoinNumber, false);
+ return;
+ }
+
+ trilist.SetBool(joinMap.CameraModeOff.JoinNumber, false);
+
+ var autoCodec = codec as IHasCameraAutoMode;
+
+ if (autoCodec == null) return;
+
+ trilist.SetBool(joinMap.CameraModeAuto.JoinNumber, autoCodec.CameraAutoModeIsOnFeedback.BoolValue);
+ trilist.SetBool(joinMap.CameraModeManual.JoinNumber, !autoCodec.CameraAutoModeIsOnFeedback.BoolValue);
+ };
+
+ if (codec.CameraIsOffFeedback.BoolValue)
+ {
+ trilist.SetBool(joinMap.CameraModeOff.JoinNumber, true);
+ trilist.SetBool(joinMap.CameraModeManual.JoinNumber, false);
+ trilist.SetBool(joinMap.CameraModeAuto.JoinNumber, false);
+ return;
+ }
+
+ trilist.SetBool(joinMap.CameraModeOff.JoinNumber, false);
+
+ var autoModeCodec = codec as IHasCameraAutoMode;
+
+ if (autoModeCodec == null) return;
+
+ trilist.SetBool(joinMap.CameraModeAuto.JoinNumber, autoModeCodec.CameraAutoModeIsOnFeedback.BoolValue);
+ trilist.SetBool(joinMap.CameraModeManual.JoinNumber, !autoModeCodec.CameraAutoModeIsOnFeedback.BoolValue);
}
private void LinkVideoCodecVolumeToApi(BasicTriList trilist, VideoCodecControllerJoinMap joinMap)
@@ -779,15 +842,56 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec
private void LinkVideoCodecCameraModeToApi(IHasCameraAutoMode codec, BasicTriList trilist, VideoCodecControllerJoinMap joinMap)
{
trilist.SetSigFalseAction(joinMap.CameraModeAuto.JoinNumber, codec.CameraAutoModeOn);
- trilist.SetSigFalseAction(joinMap.CameraModeManual.JoinNumber, codec.CameraAutoModeOff);
-
- codec.CameraAutoModeIsOnFeedback.LinkInputSig(trilist.BooleanInput[joinMap.CameraModeAuto.JoinNumber]);
- codec.CameraAutoModeIsOnFeedback.LinkComplementInputSig(
- trilist.BooleanInput[joinMap.CameraModeManual.JoinNumber]);
+ trilist.SetSigFalseAction(joinMap.CameraModeManual.JoinNumber, codec.CameraAutoModeOff);
+
+ codec.CameraAutoModeIsOnFeedback.OutputChange += (o, a) =>
+ {
+ var offCodec = codec as IHasCameraOff;
+
+ if (offCodec != null)
+ {
+ if (offCodec.CameraIsOffFeedback.BoolValue)
+ {
+ trilist.SetBool(joinMap.CameraModeAuto.JoinNumber, false);
+ trilist.SetBool(joinMap.CameraModeManual.JoinNumber, false);
+ trilist.SetBool(joinMap.CameraModeOff.JoinNumber, true);
+ return;
+ }
+
+ trilist.SetBool(joinMap.CameraModeAuto.JoinNumber, a.BoolValue);
+ trilist.SetBool(joinMap.CameraModeManual.JoinNumber, !a.BoolValue);
+ trilist.SetBool(joinMap.CameraModeOff.JoinNumber, false);
+ return;
+ }
+
+ trilist.SetBool(joinMap.CameraModeAuto.JoinNumber, a.BoolValue);
+ trilist.SetBool(joinMap.CameraModeManual.JoinNumber, !a.BoolValue);
+ trilist.SetBool(joinMap.CameraModeOff.JoinNumber, false);
+ };
+
+ var offModeCodec = codec as IHasCameraOff;
+
+ if (offModeCodec != null)
+ {
+ if (offModeCodec.CameraIsOffFeedback.BoolValue)
+ {
+ trilist.SetBool(joinMap.CameraModeAuto.JoinNumber, false);
+ trilist.SetBool(joinMap.CameraModeManual.JoinNumber, false);
+ trilist.SetBool(joinMap.CameraModeOff.JoinNumber, true);
+ return;
+ }
+
+ trilist.SetBool(joinMap.CameraModeAuto.JoinNumber, codec.CameraAutoModeIsOnFeedback.BoolValue);
+ trilist.SetBool(joinMap.CameraModeManual.JoinNumber, !codec.CameraAutoModeIsOnFeedback.BoolValue);
+ trilist.SetBool(joinMap.CameraModeOff.JoinNumber, false);
+ return;
+ }
+
+ trilist.SetBool(joinMap.CameraModeAuto.JoinNumber, codec.CameraAutoModeIsOnFeedback.BoolValue);
+ trilist.SetBool(joinMap.CameraModeManual.JoinNumber, !codec.CameraAutoModeIsOnFeedback.BoolValue);
+ trilist.SetBool(joinMap.CameraModeOff.JoinNumber, false);
}
-
-
private void LinkVideoCodecSelfviewToApi(IHasCodecSelfView codec, BasicTriList trilist,
VideoCodecControllerJoinMap joinMap)
{
@@ -875,9 +979,7 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec
{
var i = (ushort) codec.Cameras.FindIndex((c) => c.Key == args.SelectedCamera.Key);
- trilist.SetUshort(joinMap.CameraPresetSelect.JoinNumber, i);
-
- if (codec is IHasCodecRoomPresets)
+ if (codec is IHasCodecRoomPresets)
{
return;
}
@@ -890,25 +992,59 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec
var cam = args.SelectedCamera as IHasCameraPresets;
SetCameraPresetNames(cam.Presets);
- (args.SelectedCamera as IHasCameraPresets).PresetsListHasChanged += (o, eventArgs) => SetCameraPresetNames(cam.Presets);
- };
+ (args.SelectedCamera as IHasCameraPresets).PresetsListHasChanged += (o, eventArgs) => SetCameraPresetNames(cam.Presets);
+
+ trilist.SetUShortSigAction(joinMap.CameraPresetSelect.JoinNumber,
+ (a) =>
+ {
+ cam.PresetSelect(a);
+ trilist.SetUshort(joinMap.CameraPresetSelect.JoinNumber, a);
+ });
+
+ trilist.SetSigFalseAction(joinMap.CameraPresetSave.JoinNumber,
+ () =>
+ {
+ cam.PresetStore(trilist.UShortOutput[joinMap.CameraPresetSelect.JoinNumber].UShortValue,
+ String.Empty);
+ trilist.PulseBool(joinMap.CameraPresetSave.JoinNumber, 3000);
+ });
+ };
+
+ if (!(codec is IHasCodecRoomPresets)) return;
+
+ var presetCodec = codec as IHasCodecRoomPresets;
+
+ presetCodec.CodecRoomPresetsListHasChanged +=
+ (sender, args) => SetCameraPresetNames(presetCodec.NearEndPresets);
//Camera Presets
- trilist.SetUShortSigAction(joinMap.CameraPresetSelect.JoinNumber, (i) =>
- {
- if (codec.SelectedCamera == null) return;
-
- var cam = codec.SelectedCamera as IHasCameraPresets;
-
- if (cam == null) return;
-
- cam.PresetSelect(i);
+ trilist.SetUShortSigAction(joinMap.CameraPresetSelect.JoinNumber, (i) =>
+ {
+ presetCodec.CodecRoomPresetSelect(i);
trilist.SetUshort(joinMap.CameraPresetSelect.JoinNumber, i);
- });
+ });
+
+ trilist.SetSigFalseAction(joinMap.CameraPresetSave.JoinNumber,
+ () =>
+ {
+ presetCodec.CodecRoomPresetStore(
+ trilist.UShortOutput[joinMap.CameraPresetSelect.JoinNumber].UShortValue, String.Empty);
+ trilist.PulseBool(joinMap.CameraPresetSave.JoinNumber, 3000);
+ });
+ }
+
+ private string SetCameraPresetNames(IEnumerable presets)
+ {
+ return SetCameraPresetNames(presets.Select(p => p.Description).ToList());
+ }
+
+ private string SetCameraPresetNames(IEnumerable presets)
+ {
+ return SetCameraPresetNames(presets.Select(p => p.Description).ToList());
}
- private string SetCameraPresetNames(List presets)
+ private string SetCameraPresetNames(ICollection presets)
{
var i = 1; //start index for xsig;
@@ -916,7 +1052,7 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec
foreach (var preset in presets)
{
- var cameraPreset = new XSigSerialToken(i, preset.Description);
+ var cameraPreset = new XSigSerialToken(i, preset);
tokenArray[i - 1] = cameraPreset;
i++;
}
diff --git a/essentials-framework/Essentials Devices Common/Essentials Devices Common/VideoCodec/ZoomRoom/ResponseObjects.cs b/essentials-framework/Essentials Devices Common/Essentials Devices Common/VideoCodec/ZoomRoom/ResponseObjects.cs
index f49f6281..5f316523 100644
--- a/essentials-framework/Essentials Devices Common/Essentials Devices Common/VideoCodec/ZoomRoom/ResponseObjects.cs
+++ b/essentials-framework/Essentials Devices Common/Essentials Devices Common/VideoCodec/ZoomRoom/ResponseObjects.cs
@@ -370,7 +370,20 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
public CallRecordInfo CallRecordInfo { get; set; }
- public zCommand.InfoResult Info { get; set; }
+ private zCommand.InfoResult _info;
+
+ public zCommand.InfoResult Info
+ {
+ get
+ {
+ return _info;
+ }
+ set
+ {
+ _info = value;
+ NotifyPropertyChanged("Info");
+ }
+ }
public Call()
{
@@ -702,7 +715,6 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
public class Camera : NotifiableObject
{
- private string _muteState;
private bool _mute;
public bool Mute
@@ -710,30 +722,14 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
get { return _mute; }
set
{
+ Debug.Console(1, "Camera Mute response received: {0}", value);
+
if (value == _mute) return;
-
+
_mute = value;
NotifyPropertyChanged("Mute");
}
}
-
- [JsonProperty("mute")]
- public string MuteState
- {
- get
- {
- return _muteState;
- }
- set
- {
- if (value != _muteState)
- {
- _muteState = value;
-
- Mute = _muteState == "on";
- }
- }
- }
}
public class Microphone : NotifiableObject
@@ -787,12 +783,20 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
DownLeft
}
- public class Layout
+ public class Layout:NotifiableObject
{
public bool ShareThumb { get; set; }
public eLayoutStyle Style { get; set; }
public eLayoutSize Size { get; set; }
- public eLayoutPosition Position { get; set; }
+
+ private eLayoutPosition _position;
+ public eLayoutPosition Position {
+ get { return _position; }
+ set
+ {
+ _position = value;
+ NotifyPropertyChanged("Position");
+ } }
}
public class Lock
diff --git a/essentials-framework/Essentials Devices Common/Essentials Devices Common/VideoCodec/ZoomRoom/ZoomRoom.cs b/essentials-framework/Essentials Devices Common/Essentials Devices Common/VideoCodec/ZoomRoom/ZoomRoom.cs
index 657a27c8..1b7e6ec4 100644
--- a/essentials-framework/Essentials Devices Common/Essentials Devices Common/VideoCodec/ZoomRoom/ZoomRoom.cs
+++ b/essentials-framework/Essentials Devices Common/Essentials Devices Common/VideoCodec/ZoomRoom/ZoomRoom.cs
@@ -11,16 +11,18 @@ using PepperDash.Core;
using PepperDash.Essentials.Core;
using PepperDash.Essentials.Core.Bridges;
using PepperDash.Essentials.Core.Config;
+using PepperDash.Essentials.Core.DeviceTypeInterfaces;
using PepperDash.Essentials.Core.Routing;
using PepperDash.Essentials.Devices.Common.Cameras;
using PepperDash.Essentials.Devices.Common.Codec;
+using PepperDash.Essentials.Devices.Common.VideoCodec.Cisco;
using PepperDash.Essentials.Devices.Common.VideoCodec.Interfaces;
namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
{
public class ZoomRoom : VideoCodecBase, IHasCodecSelfView, IHasDirectoryHistoryStack, ICommunicationMonitor,
IRouting,
- IHasScheduleAwareness, IHasCodecCameras, IHasParticipants, IHasCameraOff, IHasCameraAutoMode
+ IHasScheduleAwareness, IHasCodecCameras, IHasParticipants, IHasCameraOff, IHasCameraAutoMode, IHasFarEndContentStatus, IHasSelfviewPosition
{
private const long MeetingRefreshTimer = 60000;
private const uint DefaultMeetingDurationMin = 30;
@@ -98,6 +100,10 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
CodecSchedule = new CodecScheduleAwareness(MeetingRefreshTimer);
+ ReceivingContent = new BoolFeedback(FarEndIsSharingContentFeedbackFunc);
+
+ SelfviewPipPositionFeedback = new StringFeedback(SelfviewPipPositionFeedbackFunc);
+
SetUpFeedbackActions();
Cameras = new List();
@@ -152,7 +158,7 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
protected Func FarEndIsSharingContentFeedbackFunc
{
- get { return () => false; }
+ get { return () => Status.Call.Sharing.State == zEvent.eSharingState.Receiving; }
}
protected override Func MuteFeedbackFunc
@@ -183,17 +189,17 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
protected Func CameraIsOffFeedbackFunc
{
- get { return () => Configuration.Camera.Mute; }
+ get { return () => Configuration.Call.Camera.Mute; }
}
protected Func CameraAutoModeIsOnFeedbackFunc
{
- get { return () => !Configuration.Camera.Mute; }
+ get { return () => false; }
}
protected Func SelfviewPipPositionFeedbackFunc
{
- get { return () => ""; }
+ get { return () => _currentSelfviewPipPosition.Command; }
}
protected Func LocalLayoutFeedbackFunc
@@ -432,11 +438,23 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
}
};
- Configuration.Camera.PropertyChanged += (o, a) =>
+ Configuration.Call.Camera.PropertyChanged += (o, a) =>
{
+ Debug.Console(1, this, "Configuration.Call.Camera.PropertyChanged: {0}", a.PropertyName);
+
if (a.PropertyName != "Mute") return;
CameraIsOffFeedback.FireUpdate();
+ CameraAutoModeIsOnFeedback.FireUpdate();
+ };
+
+ Configuration.Call.Layout.PropertyChanged += (o, a) =>
+ {
+ if (a.PropertyName != "Position") return;
+
+ ComputeSelfviewPipStatus();
+
+ SelfviewPipPositionFeedback.FireUpdate();
};
Status.Call.Sharing.PropertyChanged += (o, a) =>
@@ -444,6 +462,16 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
if (a.PropertyName == "State")
{
SharingContentIsOnFeedback.FireUpdate();
+ ReceivingContent.FireUpdate();
+ }
+ };
+
+ Status.Call.PropertyChanged += (o, a) =>
+ {
+ if (a.PropertyName == "Info")
+ {
+ Debug.Console(1, this, "Updating Call Status");
+ UpdateCallStatus();
}
};
@@ -658,6 +686,7 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
_syncState.AddQueryToQueue("zCommand Bookings List");
_syncState.AddQueryToQueue("zCommand Call ListParticipants");
+ _syncState.AddQueryToQueue("zCommand Call Info");
_syncState.StartSync();
@@ -670,6 +699,14 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
private void ProcessMessage(string message)
{
// Counts the curly braces
+ if (message.Contains("client_loop: send disconnect: Broken pipe"))
+ {
+ Debug.Console(0, this, Debug.ErrorLogLevel.Error,
+ "Zoom Room Controller or App connected. Essentials will NOT control the Zoom Room until it is disconnected.");
+
+ return;
+ }
+
if (message.Contains('{'))
{
_jsonCurlyBraceCounter++;
@@ -759,9 +796,9 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
SendText("zFeedback Register Op: ex Path: /Event/InfoResult/info/callout_country_list");
Thread.Sleep(100);
- if (!_props.DisablePhonebookAutoDownload)
+ if (_props.DisablePhonebookAutoDownload)
{
- SendText("zFeedback Register ");
+ SendText("zFeedback Register Op: ex Path: /Event/Phonebook/AddedContact");
}
// switch to json format
SendText("format json");
@@ -841,6 +878,11 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
{
switch (topKey.ToLower())
{
+ case "inforesult":
+ {
+ JsonConvert.PopulateObject(responseObj.ToString(), Status.Call.Info);
+ break;
+ }
case "phonebooklistresult":
{
JsonConvert.PopulateObject(responseObj.ToString(), Status.Phonebook);
@@ -1160,6 +1202,8 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
{
JsonConvert.PopulateObject(responseObj.ToString(), Status.Sharing);
+ SetLayout();
+
break;
}
case "numberofscreens":
@@ -1224,6 +1268,24 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
}
}
+ private void SetLayout()
+ {
+ if(!_props.AutoDefaultLayouts) return;
+
+ if (
+ (Status.Call.Sharing.State == zEvent.eSharingState.Receiving ||
+ Status.Call.Sharing.State == zEvent.eSharingState.Sending))
+ {
+ SendText(String.Format("zconfiguration call layout style: {0}",
+ _props.DefaultSharingLayout));
+ }
+ else
+ {
+ SendText(String.Format("zconfiguration call layout style: {0}",
+ _props.DefaultCallLayout));
+ }
+ }
+
public void PrintCurrentCallParticipants()
{
if (Debug.Level <= 0)
@@ -1329,6 +1391,15 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
Debug.Console(1, this, "**************************************************************************");
}
+ protected override void OnCallStatusChange(CodecActiveCallItem item)
+ {
+ base.OnCallStatusChange(item);
+
+ if (_props.AutoDefaultLayouts)
+ {
+ SetLayout();
+ }
+ }
public override void StartSharing()
{
throw new NotImplementedException();
@@ -1631,6 +1702,52 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
public BoolFeedback CameraAutoModeIsOnFeedback { get; private set; }
#endregion
+
+ #region Implementation of IHasFarEndContentStatus
+
+ public BoolFeedback ReceivingContent { get; private set; }
+
+ #endregion
+
+ #region Implementation of IHasSelfviewPosition
+
+ private CodecCommandWithLabel _currentSelfviewPipPosition;
+
+ public StringFeedback SelfviewPipPositionFeedback { get; private set; }
+
+ public void SelfviewPipPositionSet(CodecCommandWithLabel position)
+ {
+ SendText(String.Format("zConfiguration Call Layout Position: {0}", position.Command));
+ }
+
+ public void SelfviewPipPositionToggle()
+ {
+ if (_currentSelfviewPipPosition != null)
+ {
+ var nextPipPositionIndex = SelfviewPipPositions.IndexOf(_currentSelfviewPipPosition) + 1;
+
+ if (nextPipPositionIndex >= SelfviewPipPositions.Count) // Check if we need to loop back to the first item in the list
+ nextPipPositionIndex = 0;
+
+ SelfviewPipPositionSet(SelfviewPipPositions[nextPipPositionIndex]);
+ }
+ }
+
+ public List SelfviewPipPositions = new List()
+ {
+ new CodecCommandWithLabel("UpLeft", "Center Left"),
+ new CodecCommandWithLabel("UpRight", "Center Right"),
+ new CodecCommandWithLabel("DownLeft", "Lower Left"),
+ new CodecCommandWithLabel("DownRight", "Lower Right")
+ };
+
+ void ComputeSelfviewPipStatus()
+ {
+ _currentSelfviewPipPosition =
+ SelfviewPipPositions.FirstOrDefault(
+ p => p.Command.ToLower().Equals(Configuration.Call.Layout.Position.ToString()));
+ }
+ #endregion
}
///
diff --git a/essentials-framework/Essentials Devices Common/Essentials Devices Common/VideoCodec/ZoomRoom/ZoomRoomCamera.cs b/essentials-framework/Essentials Devices Common/Essentials Devices Common/VideoCodec/ZoomRoom/ZoomRoomCamera.cs
index 464c8b9a..7a3abdaa 100644
--- a/essentials-framework/Essentials Devices Common/Essentials Devices Common/VideoCodec/ZoomRoom/ZoomRoomCamera.cs
+++ b/essentials-framework/Essentials Devices Common/Essentials Devices Common/VideoCodec/ZoomRoom/ZoomRoomCamera.cs
@@ -68,7 +68,6 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
///
/// Builds the command and triggers the parent ZoomRoom to send it
///
- ///
///
///
void SendCommand(eZoomRoomCameraState state, eZoomRoomCameraAction action)
@@ -86,16 +85,18 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
void SendContinueAction(eZoomRoomCameraAction action)
{
SendCommand(eZoomRoomCameraState.Continue, action);
- ContinueTimer.Reset();
}
void StopContinueTimer()
{
- if (ContinueTimer != null)
+ if (ContinueTimer == null)
{
- ContinueTimer.Stop();
- ContinueTimer.Dispose();
+ return;
}
+
+ ContinueTimer.Stop();
+ ContinueTimer.Dispose();
+ ContinueTimer = null;
}
#region IHasCameraPtzControl Members
@@ -111,22 +112,26 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
public void PanLeft()
{
- if (!isMoving)
+ if (isMoving)
{
- SendCommand(eZoomRoomCameraState.Start, eZoomRoomCameraAction.Left);
- StartContinueTimer();
- isPanning = true;
+ return;
}
+
+ SendCommand(eZoomRoomCameraState.Start, eZoomRoomCameraAction.Left);
+ StartContinueTimer();
+ isPanning = true;
}
public void PanRight()
{
- if (!isMoving)
+ if (isMoving)
{
- SendCommand(eZoomRoomCameraState.Start, eZoomRoomCameraAction.Right);
- StartContinueTimer();
- isPanning = true;
+ return;
}
+
+ SendCommand(eZoomRoomCameraState.Start, eZoomRoomCameraAction.Right);
+ StartContinueTimer();
+ isPanning = true;
}
public void PanStop()
diff --git a/essentials-framework/Essentials Devices Common/Essentials Devices Common/VideoCodec/ZoomRoom/ZoomRoomPropertiesConfig.cs b/essentials-framework/Essentials Devices Common/Essentials Devices Common/VideoCodec/ZoomRoom/ZoomRoomPropertiesConfig.cs
index 4e2545ec..38238023 100644
--- a/essentials-framework/Essentials Devices Common/Essentials Devices Common/VideoCodec/ZoomRoom/ZoomRoomPropertiesConfig.cs
+++ b/essentials-framework/Essentials Devices Common/Essentials Devices Common/VideoCodec/ZoomRoom/ZoomRoomPropertiesConfig.cs
@@ -16,5 +16,14 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
public bool DisablePhonebookAutoDownload { get; set; }
public bool SupportsCameraAutoMode { get; set; }
public bool SupportsCameraOff { get; set; }
+
+ //if true, the layouts will be set automatically when sharing starts/ends or a call is joined
+ public bool AutoDefaultLayouts { get; set; }
+
+ /* This layout will be selected when Sharing starts (either from Far end or locally)*/
+ public string DefaultSharingLayout { get; set; }
+
+ //This layout will be selected when a call is connected and no content is being shared
+ public string DefaultCallLayout { get; set; }
}
}
\ No newline at end of file
diff --git a/packages.config b/packages.config
index 40078601..296413b6 100644
--- a/packages.config
+++ b/packages.config
@@ -1,3 +1,3 @@
-
+
\ No newline at end of file