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 3d9e5d30..21821d22 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
@@ -122,6 +122,7 @@
+
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 f03c1984..f6d32149 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
@@ -90,5 +90,11 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Interfaces
public bool HandIsRaisedFb { get; set; }
public bool IsPinnedFb { get; set; }
public int ScreenIndexIsPinnedToFb { get; set; }
+
+ public Participant()
+ {
+ // Initialize to -1 (no screen)
+ ScreenIndexIsPinnedToFb = -1;
+ }
}
}
\ No newline at end of file
diff --git a/essentials-framework/Essentials Devices Common/Essentials Devices Common/VideoCodec/Interfaces/IHasSelfviewSize.cs b/essentials-framework/Essentials Devices Common/Essentials Devices Common/VideoCodec/Interfaces/IHasSelfviewSize.cs
new file mode 100644
index 00000000..91ac3ec8
--- /dev/null
+++ b/essentials-framework/Essentials Devices Common/Essentials Devices Common/VideoCodec/Interfaces/IHasSelfviewSize.cs
@@ -0,0 +1,13 @@
+using PepperDash.Essentials.Devices.Common.VideoCodec.Cisco;
+
+namespace PepperDash.Essentials.Core.DeviceTypeInterfaces
+{
+ public interface IHasSelfviewSize
+ {
+ StringFeedback SelfviewPipSizeFeedback { get; }
+
+ void SelfviewPipSizeSet(CodecCommandWithLabel size);
+
+ void SelfviewPipSizeToggle();
+ }
+}
\ 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 dc9228ce..fc38a647 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
@@ -530,28 +530,43 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec
private void LinkVideoCodecParticipantsToApi(IHasParticipants codec, BasicTriList trilist, VideoCodecControllerJoinMap joinMap)
{
+ // make sure to update the values when the EISC comes online
+ trilist.OnlineStatusChange += (sender, args) =>
+ {
+ if (sender.IsOnline)
+ {
+ UpdateParticipantsXSig(codec, trilist, joinMap);
+ }
+ };
+
+ // set actions and update the values when the list changes
codec.Participants.ParticipantsListHasChanged += (sender, args) =>
{
- string participantsXSig;
-
- if (codec.Participants.CurrentParticipants.Count == 0)
- {
- participantsXSig = Encoding.GetEncoding(XSigEncoding).GetString(_clearBytes, 0, _clearBytes.Length);
- trilist.SetString(joinMap.CurrentParticipants.JoinNumber, participantsXSig);
- trilist.SetUshort(joinMap.ParticipantCount.JoinNumber, (ushort)codec.Participants.CurrentParticipants.Count);
- return;
- }
-
SetParticipantActions(trilist, joinMap, codec.Participants.CurrentParticipants);
- participantsXSig = UpdateParticipantsXSig(codec.Participants.CurrentParticipants);
-
- trilist.SetString(joinMap.CurrentParticipants.JoinNumber, participantsXSig);
-
- trilist.SetUshort(joinMap.ParticipantCount.JoinNumber, (ushort)codec.Participants.CurrentParticipants.Count);
+ UpdateParticipantsXSig(codec, trilist, joinMap);
};
}
+ private void UpdateParticipantsXSig(IHasParticipants codec, BasicTriList trilist, VideoCodecControllerJoinMap joinMap)
+ {
+ string participantsXSig;
+
+ if (codec.Participants.CurrentParticipants.Count == 0)
+ {
+ participantsXSig = Encoding.GetEncoding(XSigEncoding).GetString(_clearBytes, 0, _clearBytes.Length);
+ trilist.SetString(joinMap.CurrentParticipants.JoinNumber, participantsXSig);
+ trilist.SetUshort(joinMap.ParticipantCount.JoinNumber, (ushort)codec.Participants.CurrentParticipants.Count);
+ return;
+ }
+
+ participantsXSig = UpdateParticipantsXSig(codec.Participants.CurrentParticipants);
+
+ trilist.SetString(joinMap.CurrentParticipants.JoinNumber, participantsXSig);
+
+ trilist.SetUshort(joinMap.ParticipantCount.JoinNumber, (ushort)codec.Participants.CurrentParticipants.Count);
+ }
+
///
/// Sets the actions for each participant in the list
///
@@ -613,6 +628,39 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec
{
if (meetingIndex >= maxParticipants * offset) break;
+ Debug.Console(2, this,
+@"Updating Participant on xsig:
+Name: {0} (s{9})
+AudioMute: {1} (d{10})
+VideoMute: {2} (d{11})
+CanMuteVideo: {3} (d{12})
+CanUMuteVideo: {4} (d{13})
+IsHost: {5} (d{14})
+HandIsRaised: {6} (d{15})
+IsPinned: {7} (d{16})
+ScreenIndexIsPinnedTo: {8} (a{17})
+",
+ participant.Name,
+ participant.AudioMuteFb,
+ participant.VideoMuteFb,
+ participant.CanMuteVideo,
+ participant.CanUnmuteVideo,
+ participant.IsHost,
+ participant.HandIsRaisedFb,
+ participant.IsPinnedFb,
+ participant.ScreenIndexIsPinnedToFb,
+ stringIndex + 1,
+ digitalIndex + 1,
+ digitalIndex + 2,
+ digitalIndex + 3,
+ digitalIndex + 4,
+ digitalIndex + 5,
+ digitalIndex + 6,
+ digitalIndex + 7,
+ analogIndex + 1
+ );
+
+
//digitals
tokenArray[digitalIndex] = new XSigDigitalToken(digitalIndex + 1, participant.AudioMuteFb);
tokenArray[digitalIndex + 1] = new XSigDigitalToken(digitalIndex + 2, participant.VideoMuteFb);
@@ -622,6 +670,8 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec
tokenArray[digitalIndex + 5] = new XSigDigitalToken(digitalIndex + 6, participant.HandIsRaisedFb);
tokenArray[digitalIndex + 6] = new XSigDigitalToken(digitalIndex + 7, participant.IsPinnedFb);
+ Debug.Console(2, this, "Index: {0} byte value: {1}", digitalIndex + 7, ComTextHelper.GetEscapedText(tokenArray[digitalIndex + 6].GetBytes()));
+
//serials
tokenArray[stringIndex] = new XSigSerialToken(stringIndex + 1, participant.Name);
@@ -657,7 +707,12 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec
analogIndex += maxAnalogs;
}
- return GetXSigString(tokenArray);
+ var returnString = GetXSigString(tokenArray);
+
+ //Debug.Console(2, this, "{0}", ComTextHelper.GetEscapedText(Encoding.GetEncoding(28591).GetBytes(returnString)));
+
+
+ return returnString;
}
private void LinkVideoCodecContentSharingToApi(BasicTriList trilist, VideoCodecControllerJoinMap joinMap)
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 b45810ac..708abe34 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
@@ -1440,7 +1440,7 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
CanMuteVideo = p.IsVideoCanMuteByHost,
CanUnmuteVideo = p.IsVideoCanUnmuteByHost,
AudioMuteFb = p.AudioStatusState == "AUDIO_MUTED",
- VideoMuteFb = p.VideoStatusIsSending,
+ VideoMuteFb = !p.VideoStatusIsSending,
HandIsRaisedFb = p.HandStatus.HandIsRaisedAndValid,
}).ToList();
}
@@ -1454,16 +1454,16 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
{
if (participants == null)
{
- Debug.Console(1, "SortParticiapntListByHandStatu(participants == null)");
+ //Debug.Console(1, "SortParticiapntListByHandStatu(participants == null)");
return null;
}
// debug testing
- foreach (ListParticipant participant in participants)
- {
- Debug.Console(1, "{0} | IsValid: {1} | IsRaiseHand: {2} | HandIsRaisedAndValid: {3}",
- participant.UserName, participant.HandStatus.IsValid, participant.HandStatus.IsRaiseHand.ToString(), participant.HandStatus.HandIsRaisedAndValid.ToString());
- }
+ //foreach (ListParticipant participant in participants)
+ //{
+ // Debug.Console(1, "{0} | IsValid: {1} | IsRaiseHand: {2} | HandIsRaisedAndValid: {3}",
+ // participant.UserName, participant.HandStatus.IsValid, participant.HandStatus.IsRaiseHand.ToString(), participant.HandStatus.HandIsRaisedAndValid.ToString());
+ //}
List handRaisedParticipantsList = participants.Where(p => p.HandStatus.HandIsRaisedAndValid).ToList();
@@ -1471,8 +1471,8 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
{
IOrderedEnumerable orderByDescending = handRaisedParticipantsList.OrderByDescending(p => p.HandStatus.TimeStamp);
- foreach (var participant in handRaisedParticipantsList)
- Debug.Console(1, "handRaisedParticipantList: {0} | {1}", participant.UserName, participant.UserId);
+ //foreach (var participant in handRaisedParticipantsList)
+ // Debug.Console(1, "handRaisedParticipantList: {0} | {1}", participant.UserName, participant.UserId);
}
List allOtherParticipantsList = participants.Where(p => !p.HandStatus.HandIsRaisedAndValid).ToList();
@@ -1481,8 +1481,8 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
{
allOtherParticipantsList.OrderBy(p => p.UserName);
- foreach (var participant in allOtherParticipantsList)
- Debug.Console(1, "allOtherParticipantsList: {0} | {1}", participant.UserName, participant.UserId);
+ //foreach (var participant in allOtherParticipantsList)
+ // Debug.Console(1, "allOtherParticipantsList: {0} | {1}", participant.UserName, participant.UserId);
}
// merge the lists
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 2301e544..fc3f14a9 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
@@ -25,7 +25,7 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
public class ZoomRoom : VideoCodecBase, IHasCodecSelfView, IHasDirectoryHistoryStack, ICommunicationMonitor,
IRouting,
IHasScheduleAwareness, IHasCodecCameras, IHasParticipants, IHasCameraOff, IHasCameraMute, IHasCameraAutoMode,
- IHasFarEndContentStatus, IHasSelfviewPosition, IHasPhoneDialing, IHasZoomRoomLayouts, IHasParticipantPinUnpin, IHasParticipantAudioMute
+ IHasFarEndContentStatus, IHasSelfviewPosition, IHasPhoneDialing, IHasZoomRoomLayouts, IHasParticipantPinUnpin, IHasParticipantAudioMute, IHasSelfviewSize
{
private const long MeetingRefreshTimer = 60000;
private const uint DefaultMeetingDurationMin = 30;
@@ -109,6 +109,9 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
SelfviewPipPositionFeedback = new StringFeedback(SelfviewPipPositionFeedbackFunc);
+ // TODO: #714 [ ] SelfviewPipSizeFeedback
+ SelfviewPipSizeFeedback = new StringFeedback(SelfviewPipSizeFeedbackFunc);
+
SetUpFeedbackActions();
Cameras = new List();
@@ -228,6 +231,19 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
}
}
+ // TODO: #714 [ ] SelfviewPipSizeFeedbackFunc
+ protected Func SelfviewPipSizeFeedbackFunc
+ {
+ get
+ {
+ return
+ () =>
+ _currentSelfviewPipSize != null
+ ? _currentSelfviewPipSize.Command ?? "Unknown"
+ : "Unknown";
+ }
+ }
+
protected Func LocalLayoutIsProminentFeedbackFunc
{
get { return () => false; }
@@ -495,7 +511,7 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
{
case "Position":
{
- ComputeSelfviewPipStatus();
+ ComputeSelfviewPipPositionStatus();
SelfviewPipPositionFeedback.FireUpdate();
@@ -511,6 +527,15 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
LocalLayoutFeedback.FireUpdate();
break;
}
+ case "Size":
+ {
+ // TODO: #714 [ ] SetupFeedbackActions >> Size
+ ComputeSelfviewPipSizeStatus();
+
+ SelfviewPipSizeFeedback.FireUpdate();
+
+ break;
+ }
}
};
@@ -522,7 +547,7 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
{
case "Position":
{
- ComputeSelfviewPipStatus();
+ ComputeSelfviewPipPositionStatus();
SelfviewPipPositionFeedback.FireUpdate();
@@ -596,21 +621,22 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
Status.Layout.PropertyChanged += (o, a) =>
{
- switch (a.PropertyName)
+ Debug.Console(1, this, "Status.Layout.PropertyChanged a.PropertyName: {0}", a.PropertyName);
+ switch (a.PropertyName.ToLower())
{
- case "can_Switch_Speaker_View":
- case "can_Switch_Wall_View":
- case "can_Switch_Share_On_All_Screens":
+ case "can_switch_speaker_view":
+ case "can_switch_wall_view":
+ case "can_switch_share_on_all_screens":
{
ComputeAvailableLayouts();
break;
}
- case "is_In_First_Page":
+ case "is_in_first_page":
{
LayoutViewIsOnFirstPageFeedback.FireUpdate();
break;
}
- case "is_In_Last_Page":
+ case "is_in_last_page":
{
LayoutViewIsOnLastPageFeedback.FireUpdate();
break;
@@ -1319,6 +1345,25 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
{
var status = responseObj.ToObject();
+ Debug.Console(1, this, "Pin Status notification for UserId: {0}, ScreenIndex: {1}", status.PinnedUserId, status.ScreenIndex);
+
+ Participant alreadyPinnedParticipant = null;
+
+ // Check for a participant already pinned to the same screen index.
+ if (status.PinnedUserId > 0)
+ {
+ alreadyPinnedParticipant = Participants.CurrentParticipants.FirstOrDefault(p => p.ScreenIndexIsPinnedToFb.Equals(status.ScreenIndex));
+
+ // Make sure that the already pinned participant isn't the same ID as for this message. If true, clear the pinned fb.
+ if (alreadyPinnedParticipant != null && alreadyPinnedParticipant.UserId != status.PinnedUserId)
+ {
+ Debug.Console(1, this, "Participant: {0} with id: {1} already pinned to screenIndex {2}. Clearing pinned fb.",
+ alreadyPinnedParticipant.Name, alreadyPinnedParticipant.UserId, alreadyPinnedParticipant.ScreenIndexIsPinnedToFb);
+ alreadyPinnedParticipant.IsPinnedFb = false;
+ alreadyPinnedParticipant.ScreenIndexIsPinnedToFb = -1;
+ }
+ }
+
var participant = Participants.CurrentParticipants.FirstOrDefault(p => p.UserId.Equals(status.PinnedUserId));
if (participant != null)
@@ -1330,13 +1375,14 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
{
participant = Participants.CurrentParticipants.FirstOrDefault(p => p.ScreenIndexIsPinnedToFb.Equals(status.ScreenIndex));
- if (participant == null)
+ if (participant == null && alreadyPinnedParticipant == null)
{
- Debug.Console(2, this, "no matching participant found by pinned_user_id: {0} or screen_index: {1}", status.PinnedUserId, status.ScreenIndex);
+ Debug.Console(1, this, "no matching participant found by pinned_user_id: {0} or screen_index: {1}", status.PinnedUserId, status.ScreenIndex);
return;
}
- else
+ else if (participant != null)
{
+ Debug.Console(2, this, "Unpinning {0} with id: {1} from screen index: {2}", participant.Name, participant.UserId, status.ScreenIndex);
participant.IsPinnedFb = false;
participant.ScreenIndexIsPinnedToFb = -1;
}
@@ -1483,7 +1529,7 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
return;
}
- Debug.Console(1, this, "****************************Call Participants***************************");
+ Debug.Console(1, this, "*************************** Call Participants **************************");
foreach (var participant in Participants.CurrentParticipants)
{
Debug.Console(1, this, "Name: {0} Audio: {1} IsHost: {2}", participant.Name,
@@ -1570,7 +1616,7 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
}
}
- Debug.Console(1, this, "****************************Active Calls*********************************");
+ Debug.Console(1, this, "*************************** Active Calls ********************************");
// Clean up any disconnected calls left in the list
for (int i = 0; i < ActiveCalls.Count; i++)
@@ -1586,7 +1632,7 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
if (!call.IsActiveCall)
{
- Debug.Console(1, this, "******Removing Inactive Call: {0}******", call.Name);
+ Debug.Console(1, this, "***** Removing Inactive Call: {0} *****", call.Name);
ActiveCalls.Remove(call);
}
}
@@ -1741,7 +1787,7 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
LinkVideoCodecToApi(this, trilist, joinMap);
- LinkZoomRoomToApi(trilist, joinMap);
+ LinkZoomRoomToApi(trilist, joinMap);
}
///
@@ -1771,9 +1817,10 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
trilist.SetString(joinMap.LayoutStripIsAvailable.JoinNumber, zConfiguration.eLayoutStyle.Strip.ToString());
trilist.SetString(joinMap.LayoutShareAllIsAvailable.JoinNumber, zConfiguration.eLayoutStyle.ShareAll.ToString());
};
+
+ trilist.SetSigFalseAction(joinMap.SwapContentWithThumbnail.JoinNumber, () => layoutsCodec.SwapContentWithThumbnail());
layoutsCodec.CanSwapContentWithThumbnailFeedback.LinkInputSig(trilist.BooleanInput[joinMap.CanSwapContentWithThumbnail.JoinNumber]);
- trilist.SetSigFalseAction(joinMap.SwapContentWithThumbnail.JoinNumber, () => layoutsCodec.SwapContentWithThumbnail());
layoutsCodec.ContentSwappedWithThumbnailFeedback.LinkInputSig(trilist.BooleanInput[joinMap.SwapContentWithThumbnail.JoinNumber]);
layoutsCodec.LayoutViewIsOnFirstPageFeedback.LinkInputSig(trilist.BooleanInput[joinMap.LayoutIsOnFirstPage.JoinNumber]);
@@ -1795,7 +1842,7 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
}
});
- layoutsCodec.LocalLayoutFeedback.LinkInputSig(trilist.StringInput[joinMap.GetSetCurrentLayout.JoinNumber]);
+ layoutsCodec.LocalLayoutFeedback.LinkInputSig(trilist.StringInput[joinMap.GetSetCurrentLayout.JoinNumber]);
}
var pinCodec = this as IHasParticipantPinUnpin;
@@ -1806,7 +1853,43 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
// Set the value of the local property to be used when pinning a participant
trilist.SetUShortSigAction(joinMap.ScreenIndexToPinUserTo.JoinNumber, (u) => ScreenIndexToPinUserTo = u);
}
- }
+
+ // TODO: #714 [ ] LinkZoomRoomToApi >> layoutSizeCoodec
+ var layoutSizeCodec = this as IHasSelfviewSize;
+ if (layoutSizeCodec != null)
+ {
+ trilist.SetSigFalseAction(joinMap.GetSetSelfviewPipSize.JoinNumber, layoutSizeCodec.SelfviewPipSizeToggle);
+ trilist.SetStringSigAction(joinMap.GetSetSelfviewPipSize.JoinNumber, (s) =>
+ {
+ try
+ {
+ var size = (zConfiguration.eLayoutSize)Enum.Parse(typeof(zConfiguration.eLayoutSize), s, true);
+ var cmd = SelfviewPipSizes.FirstOrDefault(c => c.Command.Equals(size.ToString()));
+ SelfviewPipSizeSet(cmd);
+ }
+ catch (Exception e)
+ {
+ Debug.Console(1, this, "Unable to parse '{0}' to zConfiguration.eLayoutSize: {1}", s, e);
+ }
+ });
+
+ layoutSizeCodec.SelfviewPipSizeFeedback.LinkInputSig(trilist.StringInput[joinMap.GetSetSelfviewPipSize.JoinNumber]);
+ }
+
+ trilist.OnlineStatusChange += (device, args) =>
+ {
+ if (!args.DeviceOnLine) return;
+
+ ComputeAvailableLayouts();
+ layoutsCodec.LocalLayoutFeedback.FireUpdate();
+ layoutsCodec.CanSwapContentWithThumbnailFeedback.FireUpdate();
+ layoutsCodec.ContentSwappedWithThumbnailFeedback.FireUpdate();
+ layoutsCodec.LayoutViewIsOnFirstPageFeedback.FireUpdate();
+ layoutsCodec.LayoutViewIsOnLastPageFeedback.FireUpdate();
+ pinCodec.NumberOfScreensFeedback.FireUpdate();
+ layoutSizeCodec.SelfviewPipSizeFeedback.FireUpdate();
+ };
+ }
public override void ExecuteSwitch(object selector)
{
@@ -2177,13 +2260,58 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
new CodecCommandWithLabel("DownLeft", "Lower Left")
};
- private void ComputeSelfviewPipStatus()
+ private void ComputeSelfviewPipPositionStatus()
{
_currentSelfviewPipPosition =
SelfviewPipPositions.FirstOrDefault(
p => p.Command.ToLower().Equals(Configuration.Call.Layout.Position.ToString().ToLower()));
}
+ #endregion
+
+ // TODO: #714 [ ] Implementation of IHasSelfviewPipSize
+ #region Implementation of IHasSelfviewPipSize
+
+ private CodecCommandWithLabel _currentSelfviewPipSize;
+
+ public StringFeedback SelfviewPipSizeFeedback { get; private set; }
+
+ public void SelfviewPipSizeSet(CodecCommandWithLabel size)
+ {
+ SendText(String.Format("zConfiguration Call Layout Size: {0}", size.Command));
+ }
+
+ public void SelfviewPipSizeToggle()
+ {
+ if (_currentSelfviewPipSize != null)
+ {
+ var nextPipSizeIndex = SelfviewPipSizes.IndexOf(_currentSelfviewPipSize) + 1;
+
+ if (nextPipSizeIndex >= SelfviewPipSizes.Count)
+ // Check if we need to loop back to the first item in the list
+ nextPipSizeIndex = 0;
+
+ SelfviewPipSizeSet(SelfviewPipSizes[nextPipSizeIndex]);
+ }
+ }
+
+ public List SelfviewPipSizes = new List()
+ {
+ new CodecCommandWithLabel("Off", "Off"),
+ new CodecCommandWithLabel("Size1", "Size 1"),
+ new CodecCommandWithLabel("Size2", "Size 2"),
+ new CodecCommandWithLabel("Size3", "Size 3"),
+ new CodecCommandWithLabel("Strip", "Strip")
+ };
+
+ private void ComputeSelfviewPipSizeStatus()
+ {
+ _currentSelfviewPipSize =
+ SelfviewPipSizes.FirstOrDefault(
+ p => p.Command.ToLower().Equals(Configuration.Call.Layout.Size.ToString().ToLower()));
+ }
+
+
#endregion
#region Implementation of IHasPhoneDialing
@@ -2240,9 +2368,8 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
///
private void ComputeAvailableLayouts()
{
+ Debug.Console(1, this, "Computing available layouts...");
zConfiguration.eLayoutStyle availableLayouts = zConfiguration.eLayoutStyle.None;
- // TODO: #697 [X] Compute the avaialble layouts and set the value of AvailableLayouts
- // Will need to test and confirm that this logic evaluates correctly
if (Status.Layout.can_Switch_Wall_View)
{
availableLayouts |= zConfiguration.eLayoutStyle.Gallery;
@@ -2265,6 +2392,8 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
availableLayouts |= zConfiguration.eLayoutStyle.Strip;
}
+ Debug.Console(1, this, "availablelayouts: {0}", availableLayouts);
+
var handler = AvailableLayoutsChanged;
if (handler != null)
{
@@ -2339,7 +2468,7 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
public void MinMaxLayoutToggle()
{
throw new NotImplementedException();
- }
+ }
#endregion
diff --git a/essentials-framework/Essentials Devices Common/Essentials Devices Common/VideoCodec/ZoomRoom/ZoomRoomJoinMap.cs b/essentials-framework/Essentials Devices Common/Essentials Devices Common/VideoCodec/ZoomRoom/ZoomRoomJoinMap.cs
index 07265d20..f70c48bf 100644
--- a/essentials-framework/Essentials Devices Common/Essentials Devices Common/VideoCodec/ZoomRoom/ZoomRoomJoinMap.cs
+++ b/essentials-framework/Essentials Devices Common/Essentials Devices Common/VideoCodec/ZoomRoom/ZoomRoomJoinMap.cs
@@ -6,8 +6,6 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
{
public class ZoomRoomJoinMap : VideoCodecControllerJoinMap
{
- // TODO: #697 [X] Set join numbers
-
#region Digital
[JoinName("CanSwapContentWithThumbnail")]
@@ -162,7 +160,22 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
Description = "FB Indicates if layout 'ShareAll' is available",
JoinCapabilities = eJoinCapabilities.ToSIMPL,
JoinType = eJoinType.DigitalSerial
- });
+ });
+
+ // TODO: #714 [ ] JoinMap >> SelfivewPipSizeToggle
+ [JoinName("SelfviewPipSizeToggle")]
+ public JoinDataComplete SelfviewPipSizeToggle = new JoinDataComplete(
+ new JoinData
+ {
+ JoinNumber = 231,
+ JoinSpan = 1
+ },
+ new JoinMetadata
+ {
+ Description = "Toggles the selfview pip size, (aka layout size)",
+ JoinCapabilities = eJoinCapabilities.ToFromSIMPL,
+ JoinType = eJoinType.Digital
+ });
//[JoinName("ParticipantAudioMuteToggleStart")]
//public JoinDataComplete ParticipantAudioMuteToggleStart = new JoinDataComplete(
@@ -256,7 +269,22 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
Description = "Sets and reports the current layout. Use the LayoutXXXXIsAvailable signals to determine valid layouts",
JoinCapabilities = eJoinCapabilities.ToFromSIMPL,
JoinType = eJoinType.Serial
- });
+ });
+
+ // TODO: #714 [ ] JoinMap >> GetSetSelfviewPipSize
+ [JoinName("GetSetSelfviewPipSize")]
+ public JoinDataComplete GetSetSelfviewPipSize = new JoinDataComplete(
+ new JoinData
+ {
+ JoinNumber = 230,
+ JoinSpan = 1
+ },
+ new JoinMetadata
+ {
+ Description = "Sets and reports the selfview pip size, (aka layout size).",
+ JoinCapabilities = eJoinCapabilities.ToFromSIMPL,
+ JoinType = eJoinType.DigitalSerial
+ });
#endregion
diff --git a/packages.config b/packages.config
index b60e8578..3876040a 100644
--- a/packages.config
+++ b/packages.config
@@ -1,3 +1,3 @@
-
+
\ No newline at end of file