Updates ZoomRoomJoinMap.cs with join numbers. Updated VideoCodecControllerJoinMap.cs to organize the joins in a logical pattern. Update VideoCodecBase to add the maxAnalogs to the logic calculating xsig indexes and offsets.

This commit is contained in:
Jason DeVito
2021-05-11 08:34:16 -05:00
parent 604f4ca22d
commit 116abbf962
5 changed files with 2573 additions and 2089 deletions

View File

@@ -27,8 +27,8 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec
{ {
event EventHandler<LayoutInfoChangedEventArgs> AvailableLayoutsChanged; event EventHandler<LayoutInfoChangedEventArgs> AvailableLayoutsChanged;
BoolFeedback LayoutViewIsOnFirstPageFeedback { get; } // TODO: #697 Consider modifying to report button visibility in func BoolFeedback LayoutViewIsOnFirstPageFeedback { get; } // TODO: #697 [ ] Consider modifying to report button visibility in func
BoolFeedback LayoutViewIsOnLastPageFeedback { get; } // TODO: #697 Consider modifying to report button visibility in func BoolFeedback LayoutViewIsOnLastPageFeedback { get; } // TODO: #697 [ ] Consider modifying to report button visibility in func
BoolFeedback CanSwapContentWithThumbnailFeedback { get; } BoolFeedback CanSwapContentWithThumbnailFeedback { get; }
BoolFeedback ContentSwappedWithThumbnailFeedback { get; } BoolFeedback ContentSwappedWithThumbnailFeedback { get; }

View File

@@ -271,14 +271,14 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec
public abstract void LinkToApi(BasicTriList trilist, uint joinStart, string joinMapKey, EiscApiAdvanced bridge); public abstract void LinkToApi(BasicTriList trilist, uint joinStart, string joinMapKey, EiscApiAdvanced bridge);
/// <summary> /// <summary>
/// Use this method when using a plain VideoCodecControllerJoinMap /// Use this method when using a plain VideoCodecControllerJoinMap
/// </summary> /// </summary>
/// <param name="codec"></param> /// <param name="codec"></param>
/// <param name="trilist"></param> /// <param name="trilist"></param>
/// <param name="joinStart"></param> /// <param name="joinStart"></param>
/// <param name="joinMapKey"></param> /// <param name="joinMapKey"></param>
/// <param name="bridge"></param> /// <param name="bridge"></param>
protected void LinkVideoCodecToApi(VideoCodecBase codec, BasicTriList trilist, uint joinStart, string joinMapKey, protected void LinkVideoCodecToApi(VideoCodecBase codec, BasicTriList trilist, uint joinStart, string joinMapKey,
EiscApiAdvanced bridge) EiscApiAdvanced bridge)
{ {
@@ -296,144 +296,144 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec
bridge.AddJoinMap(Key, joinMap); bridge.AddJoinMap(Key, joinMap);
} }
LinkVideoCodecToApi(codec, trilist, joinMap); LinkVideoCodecToApi(codec, trilist, joinMap);
} }
/// <summary> /// <summary>
/// Use this method when you need to pass in a join map that extends VideoCodecControllerJoinMap /// Use this method when you need to pass in a join map that extends VideoCodecControllerJoinMap
/// </summary> /// </summary>
/// <param name="codec"></param> /// <param name="codec"></param>
/// <param name="trilist"></param> /// <param name="trilist"></param>
/// <param name="joinMap"></param> /// <param name="joinMap"></param>
protected void LinkVideoCodecToApi(VideoCodecBase codec, BasicTriList trilist, VideoCodecControllerJoinMap joinMap) protected void LinkVideoCodecToApi(VideoCodecBase codec, BasicTriList trilist, VideoCodecControllerJoinMap joinMap)
{ {
Debug.Console(1, this, "Linking to Trilist {0}", trilist.ID.ToString("X")); Debug.Console(1, this, "Linking to Trilist {0}", trilist.ID.ToString("X"));
LinkVideoCodecDtmfToApi(trilist, joinMap); LinkVideoCodecDtmfToApi(trilist, joinMap);
LinkVideoCodecCallControlsToApi(trilist, joinMap); LinkVideoCodecCallControlsToApi(trilist, joinMap);
LinkVideoCodecContentSharingToApi(trilist, joinMap); LinkVideoCodecContentSharingToApi(trilist, joinMap);
LinkVideoCodecPrivacyToApi(trilist, joinMap); LinkVideoCodecPrivacyToApi(trilist, joinMap);
LinkVideoCodecVolumeToApi(trilist, joinMap); LinkVideoCodecVolumeToApi(trilist, joinMap);
if (codec is ICommunicationMonitor) if (codec is ICommunicationMonitor)
{ {
LinkVideoCodecCommMonitorToApi(codec as ICommunicationMonitor, trilist, joinMap); LinkVideoCodecCommMonitorToApi(codec as ICommunicationMonitor, trilist, joinMap);
} }
if (codec is IHasCodecCameras) if (codec is IHasCodecCameras)
{ {
LinkVideoCodecCameraToApi(codec as IHasCodecCameras, trilist, joinMap); LinkVideoCodecCameraToApi(codec as IHasCodecCameras, trilist, joinMap);
} }
if (codec is IHasCodecSelfView) if (codec is IHasCodecSelfView)
{ {
LinkVideoCodecSelfviewToApi(codec as IHasCodecSelfView, trilist, joinMap); LinkVideoCodecSelfviewToApi(codec as IHasCodecSelfView, trilist, joinMap);
} }
if (codec is IHasCameraAutoMode) if (codec is IHasCameraAutoMode)
{ {
trilist.SetBool(joinMap.CameraSupportsAutoMode.JoinNumber, SupportsCameraAutoMode); trilist.SetBool(joinMap.CameraSupportsAutoMode.JoinNumber, SupportsCameraAutoMode);
LinkVideoCodecCameraModeToApi(codec as IHasCameraAutoMode, trilist, joinMap); LinkVideoCodecCameraModeToApi(codec as IHasCameraAutoMode, trilist, joinMap);
} }
if (codec is IHasCameraOff) if (codec is IHasCameraOff)
{ {
trilist.SetBool(joinMap.CameraSupportsOffMode.JoinNumber, SupportsCameraOff); trilist.SetBool(joinMap.CameraSupportsOffMode.JoinNumber, SupportsCameraOff);
LinkVideoCodecCameraOffToApi(codec as IHasCameraOff, trilist, joinMap); LinkVideoCodecCameraOffToApi(codec as IHasCameraOff, trilist, joinMap);
} }
if (codec is IHasCodecLayouts) if (codec is IHasCodecLayouts)
{ {
LinkVideoCodecCameraLayoutsToApi(codec as IHasCodecLayouts, trilist, joinMap); LinkVideoCodecCameraLayoutsToApi(codec as IHasCodecLayouts, trilist, joinMap);
} }
if (codec is IHasSelfviewPosition) if (codec is IHasSelfviewPosition)
{ {
LinkVideoCodecSelfviewPositionToApi(codec as IHasSelfviewPosition, trilist, joinMap); LinkVideoCodecSelfviewPositionToApi(codec as IHasSelfviewPosition, trilist, joinMap);
} }
if (codec is IHasDirectory) if (codec is IHasDirectory)
{ {
LinkVideoCodecDirectoryToApi(codec as IHasDirectory, trilist, joinMap); LinkVideoCodecDirectoryToApi(codec as IHasDirectory, trilist, joinMap);
} }
if (codec is IHasScheduleAwareness) if (codec is IHasScheduleAwareness)
{ {
LinkVideoCodecScheduleToApi(codec as IHasScheduleAwareness, trilist, joinMap); LinkVideoCodecScheduleToApi(codec as IHasScheduleAwareness, trilist, joinMap);
} }
if (codec is IHasParticipants) if (codec is IHasParticipants)
{ {
LinkVideoCodecParticipantsToApi(codec as IHasParticipants, trilist, joinMap); LinkVideoCodecParticipantsToApi(codec as IHasParticipants, trilist, joinMap);
} }
if (codec is IHasFarEndContentStatus) if (codec is IHasFarEndContentStatus)
{ {
(codec as IHasFarEndContentStatus).ReceivingContent.LinkInputSig(trilist.BooleanInput[joinMap.RecievingContent.JoinNumber]); (codec as IHasFarEndContentStatus).ReceivingContent.LinkInputSig(trilist.BooleanInput[joinMap.RecievingContent.JoinNumber]);
} }
if (codec is IHasPhoneDialing) if (codec is IHasPhoneDialing)
{ {
LinkVideoCodecPhoneToApi(codec as IHasPhoneDialing, trilist, joinMap); LinkVideoCodecPhoneToApi(codec as IHasPhoneDialing, trilist, joinMap);
} }
trilist.OnlineStatusChange += (device, args) => trilist.OnlineStatusChange += (device, args) =>
{ {
if (!args.DeviceOnLine) return; if (!args.DeviceOnLine) return;
if (codec is IHasDirectory) if (codec is IHasDirectory)
{ {
(codec as IHasDirectory).SetCurrentDirectoryToRoot(); (codec as IHasDirectory).SetCurrentDirectoryToRoot();
} }
if (codec is IHasScheduleAwareness) if (codec is IHasScheduleAwareness)
{ {
(codec as IHasScheduleAwareness).GetSchedule(); (codec as IHasScheduleAwareness).GetSchedule();
} }
if (codec is IHasParticipants) if (codec is IHasParticipants)
{ {
UpdateParticipantsXSig((codec as IHasParticipants).Participants.CurrentParticipants); UpdateParticipantsXSig((codec as IHasParticipants).Participants.CurrentParticipants);
} }
if (codec is IHasCameraAutoMode) if (codec is IHasCameraAutoMode)
{ {
trilist.SetBool(joinMap.CameraSupportsAutoMode.JoinNumber, true); trilist.SetBool(joinMap.CameraSupportsAutoMode.JoinNumber, true);
(codec as IHasCameraAutoMode).CameraAutoModeIsOnFeedback.FireUpdate(); (codec as IHasCameraAutoMode).CameraAutoModeIsOnFeedback.FireUpdate();
} }
if (codec is IHasCodecSelfView) if (codec is IHasCodecSelfView)
{ {
(codec as IHasCodecSelfView).SelfviewIsOnFeedback.FireUpdate(); (codec as IHasCodecSelfView).SelfviewIsOnFeedback.FireUpdate();
} }
if (codec is IHasCameraAutoMode) if (codec is IHasCameraAutoMode)
{ {
(codec as IHasCameraAutoMode).CameraAutoModeIsOnFeedback.FireUpdate(); (codec as IHasCameraAutoMode).CameraAutoModeIsOnFeedback.FireUpdate();
} }
if (codec is IHasCameraOff) if (codec is IHasCameraOff)
{ {
(codec as IHasCameraOff).CameraIsOffFeedback.FireUpdate(); (codec as IHasCameraOff).CameraIsOffFeedback.FireUpdate();
} }
if (codec is IHasPhoneDialing) if (codec is IHasPhoneDialing)
{ {
(codec as IHasPhoneDialing).PhoneOffHookFeedback.FireUpdate(); (codec as IHasPhoneDialing).PhoneOffHookFeedback.FireUpdate();
} }
SharingContentIsOnFeedback.FireUpdate(); SharingContentIsOnFeedback.FireUpdate();
trilist.SetBool(joinMap.HookState.JoinNumber, IsInCall); trilist.SetBool(joinMap.HookState.JoinNumber, IsInCall);
trilist.SetString(joinMap.CurrentCallData.JoinNumber, UpdateCallStatusXSig()); trilist.SetString(joinMap.CurrentCallData.JoinNumber, UpdateCallStatusXSig());
}; };
} }
private void LinkVideoCodecPhoneToApi(IHasPhoneDialing codec, BasicTriList trilist, VideoCodecControllerJoinMap joinMap) private void LinkVideoCodecPhoneToApi(IHasPhoneDialing codec, BasicTriList trilist, VideoCodecControllerJoinMap joinMap)
{ {
@@ -548,8 +548,9 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec
trilist.SetUshort(joinMap.ParticipantCount.JoinNumber, (ushort)codec.Participants.CurrentParticipants.Count); trilist.SetUshort(joinMap.ParticipantCount.JoinNumber, (ushort)codec.Participants.CurrentParticipants.Count);
}; };
// TODO: #698 Figure out how to decode xsig data and trigger actions based on values from SIMPL // TODO: #698 [ ] Figure out how to decode xsig data and trigger actions based on values from SIMPL
// trilist.SetStringSigAction(joinMap.CurrentParticipants.JoinNumber, // add method here to decode the xsig info and trigger actions // add method here to decode the xsig info and trigger actions
//trilist.SetStringSigAction(joinMap.CurrentParticipants.JoinNumber, DecodeParticipantsXSig);
} }
private string UpdateParticipantsXSig(List<Participant> currentParticipants) private string UpdateParticipantsXSig(List<Participant> currentParticipants)
@@ -557,11 +558,11 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec
const int maxParticipants = 50; const int maxParticipants = 50;
const int maxDigitals = 7; const int maxDigitals = 7;
const int maxStrings = 1; const int maxStrings = 1;
const int maxAnalogs = 1; const int maxAnalogs = 1;
const int offset = maxDigitals + maxStrings; const int offset = maxDigitals + maxStrings + maxAnalogs;
var digitalIndex = maxStrings * maxParticipants; //15 var digitalIndex = maxStrings + maxAnalogs * maxParticipants; //15
var stringIndex = 0; var stringIndex = 0;
var analogIndex = 0; var analogIndex = 0;
var meetingIndex = 0; var meetingIndex = 0;
var tokenArray = new XSigToken[maxParticipants * offset]; var tokenArray = new XSigToken[maxParticipants * offset];
@@ -576,47 +577,88 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec
tokenArray[digitalIndex + 2] = new XSigDigitalToken(digitalIndex + 3, participant.CanMuteVideo); tokenArray[digitalIndex + 2] = new XSigDigitalToken(digitalIndex + 3, participant.CanMuteVideo);
tokenArray[digitalIndex + 3] = new XSigDigitalToken(digitalIndex + 4, participant.CanUnmuteVideo); tokenArray[digitalIndex + 3] = new XSigDigitalToken(digitalIndex + 4, participant.CanUnmuteVideo);
tokenArray[digitalIndex + 4] = new XSigDigitalToken(digitalIndex + 5, participant.IsHost); tokenArray[digitalIndex + 4] = new XSigDigitalToken(digitalIndex + 5, participant.IsHost);
tokenArray[digitalIndex + 5] = new XSigDigitalToken(digitalIndex + 6, participant.HandIsRaisedFb); tokenArray[digitalIndex + 5] = new XSigDigitalToken(digitalIndex + 6, participant.HandIsRaisedFb);
tokenArray[digitalIndex + 6] = new XSigDigitalToken(digitalIndex + 6, participant.IsPinnedFb); tokenArray[digitalIndex + 6] = new XSigDigitalToken(digitalIndex + 7, participant.IsPinnedFb);
//serials //serials
tokenArray[stringIndex] = new XSigSerialToken(stringIndex + 1, participant.Name); tokenArray[stringIndex] = new XSigSerialToken(stringIndex + 1, participant.Name);
//analogs //analogs
tokenArray[analogIndex] = new XSigAnalogToken(analogIndex + 1, (ushort)participant.ScreenIndexIsPinnedToFb); tokenArray[analogIndex] = new XSigAnalogToken(analogIndex + 1, (ushort)participant.ScreenIndexIsPinnedToFb);
digitalIndex += maxDigitals; digitalIndex += maxDigitals;
meetingIndex += offset; meetingIndex += offset;
stringIndex += maxStrings; stringIndex += maxStrings;
analogIndex += maxAnalogs; analogIndex += maxAnalogs;
} }
while (meetingIndex < maxParticipants * offset) while (meetingIndex < maxParticipants * offset)
{ {
//digitals //digitals
tokenArray[digitalIndex] = new XSigDigitalToken(digitalIndex + 1, false); tokenArray[digitalIndex] = new XSigDigitalToken(digitalIndex + 1, false);
tokenArray[digitalIndex + 1] = new XSigDigitalToken(digitalIndex + 2, false); tokenArray[digitalIndex + 1] = new XSigDigitalToken(digitalIndex + 2, false);
tokenArray[digitalIndex + 2] = new XSigDigitalToken(digitalIndex + 3, false); tokenArray[digitalIndex + 2] = new XSigDigitalToken(digitalIndex + 3, false);
tokenArray[digitalIndex + 3] = new XSigDigitalToken(digitalIndex + 4, false); tokenArray[digitalIndex + 3] = new XSigDigitalToken(digitalIndex + 4, false);
tokenArray[digitalIndex + 4] = new XSigDigitalToken(digitalIndex + 5, false); tokenArray[digitalIndex + 4] = new XSigDigitalToken(digitalIndex + 5, false);
tokenArray[digitalIndex + 5] = new XSigDigitalToken(digitalIndex + 6, false); tokenArray[digitalIndex + 5] = new XSigDigitalToken(digitalIndex + 6, false);
tokenArray[digitalIndex + 6] = new XSigDigitalToken(digitalIndex + 7, false); tokenArray[digitalIndex + 6] = new XSigDigitalToken(digitalIndex + 7, false);
//serials //serials
tokenArray[stringIndex] = new XSigSerialToken(stringIndex + 1, String.Empty); tokenArray[stringIndex] = new XSigSerialToken(stringIndex + 1, String.Empty);
//analogs //analogs
tokenArray[analogIndex] = new XSigAnalogToken(analogIndex + 1, 0); tokenArray[analogIndex] = new XSigAnalogToken(analogIndex + 1, 0);
digitalIndex += maxDigitals; digitalIndex += maxDigitals;
meetingIndex += offset; meetingIndex += offset;
stringIndex += maxStrings; stringIndex += maxStrings;
analogIndex += maxAnalogs; analogIndex += maxAnalogs;
} }
return GetXSigString(tokenArray); return GetXSigString(tokenArray);
} }
// TODO: #698 [ ] Figure out how to decode xsig data and trigger actions based on values from SIMPL
private void DecodeParticipantsXSig(string xsigData)
{
if (string.IsNullOrEmpty(xsigData)) return;
var bytes = Encoding.GetEncoding(XSigEncoding).GetBytes(xsigData);
using (var xsigStream = new XSigTokenStreamReader(new MemoryStream(bytes)))
{
XSigToken token = null;
while ((token = xsigStream.ReadXSigToken()) != null)
{
switch (token.TokenType)
{
case XSigTokenType.Digital:
{
var data = token as XSigDigitalToken;
if (data == null) return;
Debug.Console(1, this, "xSig Data TokenType: {0} | Index: {1} | Value: {2}",
data.TokenType, data.Index, data.Value.ToString());
break;
}
case XSigTokenType.Analog:
{
var data = token as XSigAnalogToken;
if (data == null) return;
Debug.Console(1, this, "xSig Data TokenType: {0} | Index: {1} | Value: {2}",
data.TokenType, data.Index, data.Value);
break;
}
case XSigTokenType.Serial:
{
var data = token as XSigSerialToken;
if (data == null) return;
Debug.Console(1, this, "xSig Data TokenType: {0} | Index: {1} | Value: {2}", data.TokenType, data.Index,
data.Value);
break;
}
}
}
}
}
private void LinkVideoCodecContentSharingToApi(BasicTriList trilist, VideoCodecControllerJoinMap joinMap) private void LinkVideoCodecContentSharingToApi(BasicTriList trilist, VideoCodecControllerJoinMap joinMap)
{ {
SharingContentIsOnFeedback.LinkInputSig(trilist.BooleanInput[joinMap.SourceShareStart.JoinNumber]); SharingContentIsOnFeedback.LinkInputSig(trilist.BooleanInput[joinMap.SourceShareStart.JoinNumber]);

View File

@@ -1723,7 +1723,6 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
public void LinkZoomRoomToApi(BasicTriList trilist, ZoomRoomJoinMap joinMap) public void LinkZoomRoomToApi(BasicTriList trilist, ZoomRoomJoinMap joinMap)
{ {
var layoutsCodec = this as IHasZoomRoomLayouts; var layoutsCodec = this as IHasZoomRoomLayouts;
if (layoutsCodec != null) if (layoutsCodec != null)
{ {
layoutsCodec.AvailableLayoutsChanged += (o, a) => layoutsCodec.AvailableLayoutsChanged += (o, a) =>
@@ -1746,7 +1745,7 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
layoutsCodec.LayoutViewIsOnLastPageFeedback.LinkInputSig(trilist.BooleanInput[joinMap.LayoutIsOnLastPage.JoinNumber]); layoutsCodec.LayoutViewIsOnLastPageFeedback.LinkInputSig(trilist.BooleanInput[joinMap.LayoutIsOnLastPage.JoinNumber]);
trilist.SetSigFalseAction(joinMap.LayoutTurnToNextPage.JoinNumber, () => layoutsCodec.LayoutTurnNextPage()); trilist.SetSigFalseAction(joinMap.LayoutTurnToNextPage.JoinNumber, () => layoutsCodec.LayoutTurnNextPage());
trilist.SetSigFalseAction(joinMap.LayoutTurnToPreviousPage.JoinNumber, () => layoutsCodec.LayoutTurnPreviousPage()); trilist.SetSigFalseAction(joinMap.LayoutTurnToPreviousPage.JoinNumber, () => layoutsCodec.LayoutTurnPreviousPage());
trilist.SetSigFalseAction(joinMap.GetAvailableLayouts.JoinNumber, () => layoutsCodec.GetAvailableLayouts());
trilist.SetStringSigAction(joinMap.GetSetCurrentLayout.JoinNumber, (s) => trilist.SetStringSigAction(joinMap.GetSetCurrentLayout.JoinNumber, (s) =>
{ {
@@ -1757,7 +1756,7 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
} }
catch (Exception e) catch (Exception e)
{ {
Debug.Console(2, this, "Unable to parse '{0}' to zConfiguration.eLayoutStyle: {1}", s, e); Debug.Console(1, this, "Unable to parse '{0}' to zConfiguration.eLayoutStyle: {1}", s, e);
} }
}); });
@@ -1765,14 +1764,13 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
} }
var pinCodec = this as IHasParticipantPinUnpin; var pinCodec = this as IHasParticipantPinUnpin;
if (pinCodec != null)
{
pinCodec.NumberOfScreensFeedback.LinkInputSig(trilist.UShortInput[joinMap.NumberOfScreens.JoinNumber]);
if (pinCodec != null) // Set the value of the local property to be used when pinning a participant
{ trilist.SetUShortSigAction(joinMap.ScreenIndexToPinUserTo.JoinNumber, (u) => ScreenIndexToPinUserTo = u);
pinCodec.NumberOfScreensFeedback.LinkInputSig(trilist.UShortInput[joinMap.NumberOfScreens.JoinNumber]); }
// Set the value of the local property to be used when pinning a participant
trilist.SetUShortSigAction(joinMap.ScreenIndexToPinUserTo.JoinNumber, (u) => ScreenIndexToPinUserTo = u);
}
} }
public override void ExecuteSwitch(object selector) public override void ExecuteSwitch(object selector)
@@ -2208,7 +2206,7 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
private void ComputeAvailableLayouts() private void ComputeAvailableLayouts()
{ {
zConfiguration.eLayoutStyle availableLayouts = zConfiguration.eLayoutStyle.None; zConfiguration.eLayoutStyle availableLayouts = zConfiguration.eLayoutStyle.None;
// TODO: #697 Compute the avaialble layouts and set the value of AvailableLayouts // TODO: #697 [ ] Compute the avaialble layouts and set the value of AvailableLayouts
// Will need to test and confirm that this logic evaluates correctly // Will need to test and confirm that this logic evaluates correctly
if (Status.Layout.can_Switch_Wall_View) if (Status.Layout.can_Switch_Wall_View)
{ {
@@ -2257,7 +2255,7 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
if (CanSwapContentWithThumbnailFeedback.BoolValue) if (CanSwapContentWithThumbnailFeedback.BoolValue)
{ {
var oppositeValue = ContentSwappedWithThumbnailFeedback.BoolValue ? "on" : "off"; // Get the value based on the opposite of the current state var oppositeValue = ContentSwappedWithThumbnailFeedback.BoolValue ? "on" : "off"; // Get the value based on the opposite of the current state
// TODO: #697 Need to verify the ternary above and make sure that the correct on/off value is being send based on the true/false value of the feedback // TODO: #697 [ ] Need to verify the ternary above and make sure that the correct on/off value is being send based on the true/false value of the feedback
// to toggle the state // to toggle the state
SendText(String.Format("zConfiguration Call Layout ShareThumb: {0}", oppositeValue)); SendText(String.Format("zConfiguration Call Layout ShareThumb: {0}", oppositeValue));
} }

View File

@@ -4,188 +4,270 @@ using PepperDash.Essentials.Core.Bridges.JoinMaps;
namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
{ {
public class ZoomRoomJoinMap : VideoCodecControllerJoinMap public class ZoomRoomJoinMap : VideoCodecControllerJoinMap
{ {
// TODO: #697 Set join numbers // TODO: #697 [X] Set join numbers
[JoinName("LayoutIsOnFirstPage")] #region Digital
public JoinDataComplete LayoutIsOnFirstPage =
new JoinDataComplete(new JoinData { JoinNumber = 999, JoinSpan = 1 },
new JoinMetadata
{
Description = "Indicates if layout is on first page",
JoinCapabilities = eJoinCapabilities.ToSIMPL,
JoinType = eJoinType.Digital
});
[JoinName("LayoutIsOnLastPage")] [JoinName("CanSwapContentWithThumbnail")]
public JoinDataComplete LayoutIsOnLastPage = public JoinDataComplete CanSwapContentWithThumbnail = new JoinDataComplete(
new JoinDataComplete(new JoinData { JoinNumber = 999, JoinSpan = 1 }, new JoinData
new JoinMetadata {
{ JoinNumber = 206,
Description = "Indicates if layout is on first page", JoinSpan = 1
JoinCapabilities = eJoinCapabilities.ToSIMPL, },
JoinType = eJoinType.Digital new JoinMetadata
}); {
Description = "FB Indicates if content can be swapped with thumbnail",
JoinCapabilities = eJoinCapabilities.ToSIMPL,
JoinType = eJoinType.Digital
});
[JoinName("LayoutTurnToNextPage")] [JoinName("SwapContentWithThumbnail")]
public JoinDataComplete LayoutTurnToNextPage = public JoinDataComplete SwapContentWithThumbnail = new JoinDataComplete(
new JoinDataComplete(new JoinData { JoinNumber = 999, JoinSpan = 1 }, new JoinData
new JoinMetadata {
{ JoinNumber = 206,
Description = "Turns layout view to next page", JoinSpan = 1
JoinCapabilities = eJoinCapabilities.FromSIMPL, },
JoinType = eJoinType.Digital new JoinMetadata
}); {
Description = "Pulse to swap content with thumbnail. FB reports current state",
JoinCapabilities = eJoinCapabilities.ToFromSIMPL,
JoinType = eJoinType.Digital
});
[JoinName("LayoutTurnToPreviousPage")] [JoinName("GetAvailableLayouts")]
public JoinDataComplete LayoutTurnToPreviousPage = public JoinDataComplete GetAvailableLayouts = new JoinDataComplete(
new JoinDataComplete(new JoinData { JoinNumber = 999, JoinSpan = 1 }, new JoinData
new JoinMetadata {
{ JoinNumber = 215,
Description = "Turns layout view to previous page", JoinSpan = 1
JoinCapabilities = eJoinCapabilities.FromSIMPL, },
JoinType = eJoinType.Digital new JoinMetadata
}); {
Description = "Gets the available layouts. Will update the LayoutXXXXXIsAvailbale signals.",
JoinCapabilities = eJoinCapabilities.FromSIMPL,
JoinType = eJoinType.Digital
});
[JoinName("CanSwapContentWithThumbnail")] [JoinName("LayoutIsOnFirstPage")]
public JoinDataComplete CanSwapContentWithThumbnail = public JoinDataComplete LayoutIsOnFirstPage = new JoinDataComplete(
new JoinDataComplete(new JoinData { JoinNumber = 999, JoinSpan = 1 }, new JoinData
new JoinMetadata {
{ JoinNumber = 216,
Description = "FB Indicates if content can be swapped with thumbnail", JoinSpan = 1
JoinCapabilities = eJoinCapabilities.ToSIMPL, },
JoinType = eJoinType.Digital new JoinMetadata
}); {
Description = "Indicates if layout is on first page",
JoinCapabilities = eJoinCapabilities.ToSIMPL,
JoinType = eJoinType.Digital
});
[JoinName("SwapContentWithThumbnail")] [JoinName("LayoutIsOnLastPage")]
public JoinDataComplete SwapContentWithThumbnail = public JoinDataComplete LayoutIsOnLastPage = new JoinDataComplete(
new JoinDataComplete(new JoinData { JoinNumber = 999, JoinSpan = 1 }, new JoinData
new JoinMetadata {
{ JoinNumber = 217,
Description = "Pulse to swap content with thumbnail. FB reports current state", JoinSpan = 1
JoinCapabilities = eJoinCapabilities.ToFromSIMPL, },
JoinType = eJoinType.Digital new JoinMetadata
}); {
Description = "Indicates if layout is on first page",
JoinCapabilities = eJoinCapabilities.ToSIMPL,
JoinType = eJoinType.Digital
});
[JoinName("GetSetCurrentLayout")] [JoinName("LayoutTurnToNextPage")]
public JoinDataComplete GetSetCurrentLayout = public JoinDataComplete LayoutTurnToNextPage = new JoinDataComplete(
new JoinDataComplete(new JoinData { JoinNumber = 999, JoinSpan = 1 }, new JoinData
new JoinMetadata {
{ JoinNumber = 216,
Description = "Sets and reports the current layout. Use the LayoutXXXXIsAvailable signals to determine valid layouts", JoinSpan = 1
JoinCapabilities = eJoinCapabilities.ToFromSIMPL, },
JoinType = eJoinType.Serial new JoinMetadata
}); {
Description = "Turns layout view to next page",
JoinCapabilities = eJoinCapabilities.FromSIMPL,
JoinType = eJoinType.Digital
});
[JoinName("GetAvailableLayouts")] [JoinName("LayoutTurnToPreviousPage")]
public JoinDataComplete GetAvailableLayouts = public JoinDataComplete LayoutTurnToPreviousPage = new JoinDataComplete(
new JoinDataComplete(new JoinData { JoinNumber = 999, JoinSpan = 1 }, new JoinData
new JoinMetadata {
{ JoinNumber = 217,
Description = "Gets the available layouts. Will update the LayoutXXXXXIsAvailbale signals.", JoinSpan = 1
JoinCapabilities = eJoinCapabilities.FromSIMPL, },
JoinType = eJoinType.Serial new JoinMetadata
}); {
Description = "Turns layout view to previous page",
JoinCapabilities = eJoinCapabilities.FromSIMPL,
JoinType = eJoinType.Digital
});
[JoinName("LayoutGalleryIsAvailable")] [JoinName("LayoutGalleryIsAvailable")]
public JoinDataComplete LayoutGalleryIsAvailable = public JoinDataComplete LayoutGalleryIsAvailable = new JoinDataComplete(
new JoinDataComplete(new JoinData { JoinNumber = 999, JoinSpan = 1 }, new JoinData
new JoinMetadata {
{ JoinNumber = 221,
Description = "FB Indicates if layout 'Gallery' is available", JoinSpan = 1
JoinCapabilities = eJoinCapabilities.ToSIMPL, },
JoinType = eJoinType.Digital new JoinMetadata
}); {
Description = "FB Indicates if layout 'Gallery' is available",
JoinCapabilities = eJoinCapabilities.ToSIMPL,
JoinType = eJoinType.Digital
});
[JoinName("LayoutSpeakerIsAvailable")] [JoinName("LayoutSpeakerIsAvailable")]
public JoinDataComplete LayoutSpeakerIsAvailable = public JoinDataComplete LayoutSpeakerIsAvailable = new JoinDataComplete(
new JoinDataComplete(new JoinData { JoinNumber = 999, JoinSpan = 1 }, new JoinData
new JoinMetadata {
{ JoinNumber = 222,
Description = "FB Indicates if layout 'Speaker' is available", JoinSpan = 1
JoinCapabilities = eJoinCapabilities.ToSIMPL, },
JoinType = eJoinType.Digital new JoinMetadata
}); {
Description = "FB Indicates if layout 'Speaker' is available",
JoinCapabilities = eJoinCapabilities.ToSIMPL,
JoinType = eJoinType.Digital
});
[JoinName("LayoutStripIsAvailable")] [JoinName("LayoutStripIsAvailable")]
public JoinDataComplete LayoutStripIsAvailable = public JoinDataComplete LayoutStripIsAvailable = new JoinDataComplete(
new JoinDataComplete(new JoinData { JoinNumber = 999, JoinSpan = 1 }, new JoinData
new JoinMetadata {
{ JoinNumber = 223,
Description = "FB Indicates if layout 'Strip' is available", JoinSpan = 1
JoinCapabilities = eJoinCapabilities.ToSIMPL, },
JoinType = eJoinType.Digital new JoinMetadata
}); {
Description = "FB Indicates if layout 'Strip' is available",
JoinCapabilities = eJoinCapabilities.ToSIMPL,
JoinType = eJoinType.Digital
});
[JoinName("LayoutShareAllIsAvailable")] [JoinName("LayoutShareAllIsAvailable")]
public JoinDataComplete LayoutShareAllIsAvailable = public JoinDataComplete LayoutShareAllIsAvailable = new JoinDataComplete(
new JoinDataComplete(new JoinData { JoinNumber = 999, JoinSpan = 1 }, new JoinData
new JoinMetadata {
{ JoinNumber = 224,
Description = "FB Indicates if layout 'ShareAll' is available", JoinSpan = 1
JoinCapabilities = eJoinCapabilities.ToSIMPL, },
JoinType = eJoinType.Digital new JoinMetadata
}); {
Description = "FB Indicates if layout 'ShareAll' is available",
JoinCapabilities = eJoinCapabilities.ToSIMPL,
JoinType = eJoinType.Digital
});
[JoinName("ScreenIndexToPinUserTo")] [JoinName("ParticipantAudioMuteToggleStart")]
public JoinDataComplete ScreenIndexToPinUserTo = public JoinDataComplete ParticipantAudioMuteToggleStart = new JoinDataComplete(
new JoinDataComplete(new JoinData { JoinNumber = 999, JoinSpan = 1 }, new JoinData
new JoinMetadata {
{ JoinNumber = 500,
Description = "Specifies the screen index a participant should be pinned to", JoinSpan = 100
JoinCapabilities = eJoinCapabilities.FromSIMPL, },
JoinType = eJoinType.Analog new JoinMetadata
}); {
Description = "Toggles the participant's audio mute status",
JoinCapabilities = eJoinCapabilities.ToSIMPL,
JoinType = eJoinType.Digital
});
[JoinName("NumberOfScreens")] [JoinName("ParticipantVideoMuteToggleStart")]
public JoinDataComplete NumberOfScreens = public JoinDataComplete ParticipantVideoMuteToggleStart = new JoinDataComplete(
new JoinDataComplete(new JoinData { JoinNumber = 999, JoinSpan = 1 }, new JoinData
new JoinMetadata {
{ JoinNumber = 800,
Description = "Reports the number of screens connected", JoinSpan = 100
JoinCapabilities = eJoinCapabilities.ToSIMPL, },
JoinType = eJoinType.Analog new JoinMetadata
}); {
Description = "Toggles the participant's video mute status",
JoinCapabilities = eJoinCapabilities.ToSIMPL,
JoinType = eJoinType.Digital
});
[JoinName("ParticipantAudioMuteToggleStart")] [JoinName("ParticipantPinToggleStart")]
public JoinDataComplete ParticipantAudioMuteToggleStart = public JoinDataComplete ParticipantPinToggleStart = new JoinDataComplete(
new JoinDataComplete(new JoinData { JoinNumber = 999, JoinSpan = 1 }, new JoinData
new JoinMetadata {
{ JoinNumber = 1100,
Description = "Toggles the participant's audio mute status", JoinSpan = 100
JoinCapabilities = eJoinCapabilities.ToSIMPL, },
JoinType = eJoinType.Digital new JoinMetadata
}); {
Description = "Toggles the participant's pin status",
JoinCapabilities = eJoinCapabilities.ToSIMPL,
JoinType = eJoinType.Digital
});
[JoinName("ParticipantVideoMuteToggleStart")] #endregion
public JoinDataComplete ParticipantVideoMuteToggleStart =
new JoinDataComplete(new JoinData { JoinNumber = 999, JoinSpan = 1 },
new JoinMetadata
{
Description = "Toggles the participant's video mute status",
JoinCapabilities = eJoinCapabilities.ToSIMPL,
JoinType = eJoinType.Digital
});
[JoinName("ParticipantPinToggleStart")]
public JoinDataComplete ParticipantPinToggleStart =
new JoinDataComplete(new JoinData { JoinNumber = 999, JoinSpan = 1 },
new JoinMetadata
{
Description = "Toggles the participant's pin status",
JoinCapabilities = eJoinCapabilities.ToSIMPL,
JoinType = eJoinType.Digital
});
public ZoomRoomJoinMap(uint joinStart) #region Analog
: base(joinStart, typeof(ZoomRoomJoinMap))
{
}
public ZoomRoomJoinMap(uint joinStart, Type type) [JoinName("NumberOfScreens")]
: base(joinStart, type) public JoinDataComplete NumberOfScreens = new JoinDataComplete(
{ new JoinData
} {
} JoinNumber = 11,
JoinSpan = 1
},
new JoinMetadata
{
Description = "Reports the number of screens connected",
JoinCapabilities = eJoinCapabilities.ToSIMPL,
JoinType = eJoinType.Analog
});
[JoinName("ScreenIndexToPinUserTo")]
public JoinDataComplete ScreenIndexToPinUserTo = new JoinDataComplete(
new JoinData
{
JoinNumber = 11,
JoinSpan = 1
},
new JoinMetadata
{
Description = "Specifies the screen index a participant should be pinned to",
JoinCapabilities = eJoinCapabilities.FromSIMPL,
JoinType = eJoinType.Analog
});
#endregion
#region Serials
[JoinName("GetSetCurrentLayout")]
public JoinDataComplete GetSetCurrentLayout = new JoinDataComplete(
new JoinData
{
JoinNumber = 215,
JoinSpan = 1
},
new JoinMetadata
{
Description = "Sets and reports the current layout. Use the LayoutXXXXIsAvailable signals to determine valid layouts",
JoinCapabilities = eJoinCapabilities.ToFromSIMPL,
JoinType = eJoinType.Serial
});
#endregion
public ZoomRoomJoinMap(uint joinStart)
: base(joinStart, typeof(ZoomRoomJoinMap))
{
}
public ZoomRoomJoinMap(uint joinStart, Type type)
: base(joinStart, type)
{
}
}
} }