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 fc5f68d4..a874838f 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/IHasMeetingLock.cs b/essentials-framework/Essentials Devices Common/Essentials Devices Common/VideoCodec/Interfaces/IHasMeetingLock.cs
new file mode 100644
index 00000000..97fcb725
--- /dev/null
+++ b/essentials-framework/Essentials Devices Common/Essentials Devices Common/VideoCodec/Interfaces/IHasMeetingLock.cs
@@ -0,0 +1,18 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using Crestron.SimplSharp;
+using PepperDash.Essentials.Core;
+
+namespace PepperDash.Essentials.Devices.Common.VideoCodec.Interfaces
+{
+ public interface IHasMeetingLock
+ {
+ BoolFeedback MeetingIsLockedFeedback { get; }
+
+ void LockMeeting();
+ void UnLockMeeting();
+ void ToggleMeetingLock();
+ }
+}
\ No newline at end of file
diff --git a/essentials-framework/Essentials Devices Common/Essentials Devices Common/VideoCodec/Interfaces/IHasParticipants.cs b/essentials-framework/Essentials Devices Common/Essentials Devices Common/VideoCodec/Interfaces/IHasParticipants.cs
index 409ccd89..776c91d3 100644
--- a/essentials-framework/Essentials Devices Common/Essentials Devices Common/VideoCodec/Interfaces/IHasParticipants.cs
+++ b/essentials-framework/Essentials Devices Common/Essentials Devices Common/VideoCodec/Interfaces/IHasParticipants.cs
@@ -12,6 +12,18 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Interfaces
public interface IHasParticipants
{
CodecParticipants Participants { get; }
+
+ ///
+ /// Removes the participant from the meeting
+ ///
+ ///
+ void RemoveParticipant(Participant participant);
+
+ ///
+ /// Sets the participant as the new host
+ ///
+ ///
+ void SetParticipantAsHost(Participant participant);
}
///
@@ -29,6 +41,11 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Interfaces
///
public interface IHasParticipantAudioMute : IHasParticipantVideoMute
{
+ ///
+ /// Mute audio of all participants
+ ///
+ void MuteAudioForAllParticipants();
+
void MuteAudioForParticipant(int userId);
void UnmuteAudioForParticipant(int userId);
void ToggleAudioForParticipant(int userId);
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 e6efd063..870b5faf 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
@@ -1123,9 +1123,25 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
}
}
- public class Lock
+ public class Lock : NotifiableObject
{
- public bool Enable { get; set; }
+ private bool _enable;
+
+ public bool Enable
+ {
+ get
+ {
+ return _enable;
+ }
+ set
+ {
+ if (value != _enable)
+ {
+ _enable = value;
+ NotifyPropertyChanged("Enable");
+ }
+ }
+ }
}
public class ClosedCaption
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 a43ea79c..3b1d294d 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
@@ -26,7 +26,7 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
IRouting,
IHasScheduleAwareness, IHasCodecCameras, IHasParticipants, IHasCameraOff, IHasCameraMute, IHasCameraAutoMode,
IHasFarEndContentStatus, IHasSelfviewPosition, IHasPhoneDialing, IHasZoomRoomLayouts, IHasParticipantPinUnpin,
- IHasParticipantAudioMute, IHasSelfviewSize, IPasswordPrompt, IHasStartMeeting, IHasMeetingInfo, IHasPresentationOnlyMeeting
+ IHasParticipantAudioMute, IHasSelfviewSize, IPasswordPrompt, IHasStartMeeting, IHasMeetingInfo, IHasPresentationOnlyMeeting, IHasMeetingLock
{
private const long MeetingRefreshTimer = 60000;
public uint DefaultMeetingDurationMin { get; private set; }
@@ -147,6 +147,8 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
ContentSwappedWithThumbnailFeedback = new BoolFeedback(ContentSwappedWithThumbnailFeedbackFunc);
NumberOfScreensFeedback = new IntFeedback(NumberOfScreensFeedbackFunc);
+
+ MeetingIsLockedFeedback = new BoolFeedback(() => Configuration.Call.Lock.Enable );
}
public CommunicationGather PortGather { get; private set; }
@@ -597,6 +599,14 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
}
};
+ Configuration.Call.Lock.PropertyChanged += (o, a) =>
+ {
+ if (a.PropertyName == "Enable")
+ {
+ MeetingIsLockedFeedback.FireUpdate();
+ }
+ };
+
// This is to deal with incorrect object structure coming back from the Zoom Room on v 5.6.3
Configuration.Client.Call.Layout.PropertyChanged += (o, a) =>
{
@@ -2334,6 +2344,56 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
}
}
+ ///
+ /// Invites contacts to a new meeting for a specified duration
+ ///
+ ///
+ ///
+ public void InviteContactsToNewMeeting(InvitableDirectoryContact[] contacts, uint duration)
+ {
+ if(duration == 0)
+ {
+ duration = DefaultMeetingDurationMin;
+ }
+
+ StringBuilder message = new StringBuilder();
+
+ // Add the prefix
+ message.Append(string.Format("zCommand Invite Duration: {0}", duration));
+
+ // Add each invitee
+ foreach (var contact in contacts)
+ {
+ var invitee = string.Format(" user: {0}", contact.ContactId);
+
+ message.Append(invitee);
+ }
+
+ SendText(message.ToString());
+ }
+
+ ///
+ /// Invites contacts to an existing meeting
+ ///
+ ///
+ public void InviteContactsToExistingMeeting(InvitableDirectoryContact[] contacts)
+ {
+ StringBuilder message = new StringBuilder();
+
+ // Add the prefix
+ message.Append(string.Format("zCommand Call Invite"));
+
+ // Add each invitee
+ foreach (var contact in contacts)
+ {
+ var invitee = string.Format(" user: {0}", contact.ContactId);
+
+ message.Append(invitee);
+ }
+
+ SendText(message.ToString());
+ }
+
///
/// Starts a PMI Meeting for the specified duration (or default meeting duration if 0 is specified)
@@ -2469,10 +2529,25 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
public CodecParticipants Participants { get; private set; }
+ public void RemoveParticipant(Participant participant)
+ {
+ SendText(string.Format("zCommand Call Expel Id: {0}", participant.UserId));
+ }
+
+ public void SetParticipantAsHost(Participant participant)
+ {
+ SendText(string.Format("zCommand Call HostChange Id: {0}", participant.UserId));
+ }
+
#endregion
#region IHasParticipantAudioMute Members
+ public void MuteAudioForAllParticipants()
+ {
+ SendText(string.Format("zCommand Call MuteAll Mute: on"));
+ }
+
public void MuteAudioForParticipant(int userId)
{
SendText(string.Format("zCommand Call MuteParticipant Mute: on Id: {0}", userId));
@@ -3034,7 +3109,35 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
}
#endregion
- }
+
+ #region IHasMeetingLock Members
+
+ public BoolFeedback MeetingIsLockedFeedback { get; private set; }
+
+ public void LockMeeting()
+ {
+ SendText(string.Format("zConfiguration Call Lock Enable: on"));
+ }
+
+ public void UnLockMeeting()
+ {
+ SendText(string.Format("zConfiguration Call Lock Enable: off"));
+ }
+
+ public void ToggleMeetingLock()
+ {
+ if (MeetingIsLockedFeedback.BoolValue)
+ {
+ UnLockMeeting();
+ }
+ else
+ {
+ LockMeeting();
+ }
+ }
+
+ #endregion
+ }
///
/// Zoom Room specific info object