mirror of
https://github.com/PepperDash/Essentials.git
synced 2026-02-15 20:54:55 +00:00
Mostly coded. Needs join numbers for ZoomRoomJoinMap values
This commit is contained in:
@@ -176,6 +176,7 @@
|
|||||||
<Compile Include="VideoCodec\ZoomRoom\ResponseObjects.cs" />
|
<Compile Include="VideoCodec\ZoomRoom\ResponseObjects.cs" />
|
||||||
<Compile Include="VideoCodec\ZoomRoom\ZoomRoom.cs" />
|
<Compile Include="VideoCodec\ZoomRoom\ZoomRoom.cs" />
|
||||||
<Compile Include="VideoCodec\ZoomRoom\ZoomRoomCamera.cs" />
|
<Compile Include="VideoCodec\ZoomRoom\ZoomRoomCamera.cs" />
|
||||||
|
<Compile Include="VideoCodec\ZoomRoom\ZoomRoomJoinMap.cs" />
|
||||||
<Compile Include="VideoCodec\ZoomRoom\ZoomRoomPropertiesConfig.cs" />
|
<Compile Include="VideoCodec\ZoomRoom\ZoomRoomPropertiesConfig.cs" />
|
||||||
<None Include="Properties\ControlSystem.cfg" />
|
<None Include="Properties\ControlSystem.cfg" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|||||||
@@ -25,20 +25,26 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public interface IHasZoomRoomLayouts : IHasCodecLayouts
|
public interface IHasZoomRoomLayouts : IHasCodecLayouts
|
||||||
{
|
{
|
||||||
BoolFeedback LayoutViewIsOnFirstPage { get; }
|
event EventHandler<LayoutInfoChangedEventArgs> AvailableLayoutsChanged;
|
||||||
BoolFeedback LayoutViewIsOnLastPage { get; }
|
|
||||||
BoolFeedback CanSwitchWallView { get; }
|
|
||||||
BoolFeedback CanSwitchSpeakerView { get; }
|
|
||||||
BoolFeedback CanSwitchShareOnAllScreens { get; }
|
|
||||||
BoolFeedback CanSwapContentWithThumbnail { get; }
|
|
||||||
|
|
||||||
List<ZoomRoom.eZoomRoomLayoutStyle> AvailableLayouts { get; }
|
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 CanSwapContentWithThumbnailFeedback { get; }
|
||||||
|
BoolFeedback ContentSwappedWithThumbnailFeedback { get; }
|
||||||
|
|
||||||
void GetLayouts(); // Mot sure this is necessary if we're already subscribed to zStatus Call Layout
|
ZoomRoom.zConfiguration.eLayoutStyle LastSelectedLayout { get; }
|
||||||
void SetLayout(ZoomRoom.eZoomRoomLayoutStyle layoutStyle);
|
ZoomRoom.zConfiguration.eLayoutStyle AvailableLayouts { get; }
|
||||||
|
|
||||||
|
void GetAvailableLayouts(); // Mot sure this is necessary if we're already subscribed to zStatus Call Layout
|
||||||
|
void SetLayout(ZoomRoom.zConfiguration.eLayoutStyle layoutStyle);
|
||||||
void SwapContentWithThumbnail();
|
void SwapContentWithThumbnail();
|
||||||
|
|
||||||
void LayoutTurnNextPage();
|
void LayoutTurnNextPage();
|
||||||
void LayoutTurnPreviousPage();
|
void LayoutTurnPreviousPage();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public class LayoutInfoChangedEventArgs : EventArgs
|
||||||
|
{
|
||||||
|
public ZoomRoom.zConfiguration.eLayoutStyle AvailableLayouts { get; set; }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -271,6 +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>
|
||||||
|
/// Use this method when using a plain VideoCodecControllerJoinMap
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="codec"></param>
|
||||||
|
/// <param name="trilist"></param>
|
||||||
|
/// <param name="joinStart"></param>
|
||||||
|
/// <param name="joinMapKey"></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)
|
||||||
{
|
{
|
||||||
@@ -288,136 +296,145 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec
|
|||||||
bridge.AddJoinMap(Key, joinMap);
|
bridge.AddJoinMap(Key, joinMap);
|
||||||
}
|
}
|
||||||
|
|
||||||
Debug.Console(1, this, "Linking to Trilist {0}", trilist.ID.ToString("X"));
|
LinkVideoCodecToApi(codec, trilist, joinMap);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
LinkVideoCodecDtmfToApi(trilist, joinMap);
|
|
||||||
|
|
||||||
LinkVideoCodecCallControlsToApi(trilist, joinMap);
|
|
||||||
|
|
||||||
LinkVideoCodecContentSharingToApi(trilist, joinMap);
|
|
||||||
|
|
||||||
LinkVideoCodecPrivacyToApi(trilist, joinMap);
|
|
||||||
|
|
||||||
LinkVideoCodecVolumeToApi(trilist, joinMap);
|
|
||||||
|
|
||||||
if (codec is ICommunicationMonitor)
|
|
||||||
{
|
|
||||||
LinkVideoCodecCommMonitorToApi(codec as ICommunicationMonitor, trilist, joinMap);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (codec is IHasCodecCameras)
|
|
||||||
{
|
|
||||||
LinkVideoCodecCameraToApi(codec as IHasCodecCameras, trilist, joinMap);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (codec is IHasCodecSelfView)
|
|
||||||
{
|
|
||||||
LinkVideoCodecSelfviewToApi(codec as IHasCodecSelfView, trilist, joinMap);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (codec is IHasCameraAutoMode)
|
|
||||||
{
|
|
||||||
trilist.SetBool(joinMap.CameraSupportsAutoMode.JoinNumber, SupportsCameraAutoMode);
|
|
||||||
LinkVideoCodecCameraModeToApi(codec as IHasCameraAutoMode, trilist, joinMap);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (codec is IHasCameraOff)
|
|
||||||
{
|
|
||||||
trilist.SetBool(joinMap.CameraSupportsOffMode.JoinNumber, SupportsCameraOff);
|
|
||||||
LinkVideoCodecCameraOffToApi(codec as IHasCameraOff, trilist, joinMap);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (codec is IHasCodecLayouts)
|
|
||||||
{
|
|
||||||
LinkVideoCodecCameraLayoutsToApi(codec as IHasCodecLayouts, trilist, joinMap);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (codec is IHasSelfviewPosition)
|
|
||||||
{
|
|
||||||
LinkVideoCodecSelfviewPositionToApi(codec as IHasSelfviewPosition, trilist, joinMap);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (codec is IHasDirectory)
|
|
||||||
{
|
|
||||||
LinkVideoCodecDirectoryToApi(codec as IHasDirectory, trilist, joinMap);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (codec is IHasScheduleAwareness)
|
|
||||||
{
|
|
||||||
LinkVideoCodecScheduleToApi(codec as IHasScheduleAwareness, trilist, joinMap);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (codec is IHasParticipants)
|
|
||||||
{
|
|
||||||
LinkVideoCodecParticipantsToApi(codec as IHasParticipants, trilist, joinMap);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (codec is IHasFarEndContentStatus)
|
|
||||||
{
|
|
||||||
(codec as IHasFarEndContentStatus).ReceivingContent.LinkInputSig(trilist.BooleanInput[joinMap.RecievingContent.JoinNumber]);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (codec is IHasPhoneDialing)
|
|
||||||
{
|
|
||||||
LinkVideoCodecPhoneToApi(codec as IHasPhoneDialing, trilist, joinMap);
|
|
||||||
}
|
|
||||||
|
|
||||||
trilist.OnlineStatusChange += (device, args) =>
|
|
||||||
{
|
|
||||||
if (!args.DeviceOnLine) return;
|
|
||||||
|
|
||||||
if (codec is IHasDirectory)
|
|
||||||
{
|
|
||||||
(codec as IHasDirectory).SetCurrentDirectoryToRoot();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (codec is IHasScheduleAwareness)
|
|
||||||
{
|
|
||||||
(codec as IHasScheduleAwareness).GetSchedule();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (codec is IHasParticipants)
|
|
||||||
{
|
|
||||||
UpdateParticipantsXSig((codec as IHasParticipants).Participants.CurrentParticipants);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (codec is IHasCameraAutoMode)
|
|
||||||
{
|
|
||||||
trilist.SetBool(joinMap.CameraSupportsAutoMode.JoinNumber, true);
|
|
||||||
|
|
||||||
(codec as IHasCameraAutoMode).CameraAutoModeIsOnFeedback.FireUpdate();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (codec is IHasCodecSelfView)
|
|
||||||
{
|
|
||||||
(codec as IHasCodecSelfView).SelfviewIsOnFeedback.FireUpdate();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (codec is IHasCameraAutoMode)
|
|
||||||
{
|
|
||||||
(codec as IHasCameraAutoMode).CameraAutoModeIsOnFeedback.FireUpdate();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (codec is IHasCameraOff)
|
|
||||||
{
|
|
||||||
(codec as IHasCameraOff).CameraIsOffFeedback.FireUpdate();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (codec is IHasPhoneDialing)
|
|
||||||
{
|
|
||||||
(codec as IHasPhoneDialing).PhoneOffHookFeedback.FireUpdate();
|
|
||||||
}
|
|
||||||
|
|
||||||
SharingContentIsOnFeedback.FireUpdate();
|
|
||||||
|
|
||||||
trilist.SetBool(joinMap.HookState.JoinNumber, IsInCall);
|
|
||||||
|
|
||||||
trilist.SetString(joinMap.CurrentCallData.JoinNumber, UpdateCallStatusXSig());
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Use this method when you need to pass in a join map that extends VideoCodecControllerJoinMap
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="codec"></param>
|
||||||
|
/// <param name="trilist"></param>
|
||||||
|
/// <param name="joinMap"></param>
|
||||||
|
protected void LinkVideoCodecToApi(VideoCodecBase codec, BasicTriList trilist, VideoCodecControllerJoinMap joinMap)
|
||||||
|
{
|
||||||
|
Debug.Console(1, this, "Linking to Trilist {0}", trilist.ID.ToString("X"));
|
||||||
|
|
||||||
|
LinkVideoCodecDtmfToApi(trilist, joinMap);
|
||||||
|
|
||||||
|
LinkVideoCodecCallControlsToApi(trilist, joinMap);
|
||||||
|
|
||||||
|
LinkVideoCodecContentSharingToApi(trilist, joinMap);
|
||||||
|
|
||||||
|
LinkVideoCodecPrivacyToApi(trilist, joinMap);
|
||||||
|
|
||||||
|
LinkVideoCodecVolumeToApi(trilist, joinMap);
|
||||||
|
|
||||||
|
if (codec is ICommunicationMonitor)
|
||||||
|
{
|
||||||
|
LinkVideoCodecCommMonitorToApi(codec as ICommunicationMonitor, trilist, joinMap);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (codec is IHasCodecCameras)
|
||||||
|
{
|
||||||
|
LinkVideoCodecCameraToApi(codec as IHasCodecCameras, trilist, joinMap);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (codec is IHasCodecSelfView)
|
||||||
|
{
|
||||||
|
LinkVideoCodecSelfviewToApi(codec as IHasCodecSelfView, trilist, joinMap);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (codec is IHasCameraAutoMode)
|
||||||
|
{
|
||||||
|
trilist.SetBool(joinMap.CameraSupportsAutoMode.JoinNumber, SupportsCameraAutoMode);
|
||||||
|
LinkVideoCodecCameraModeToApi(codec as IHasCameraAutoMode, trilist, joinMap);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (codec is IHasCameraOff)
|
||||||
|
{
|
||||||
|
trilist.SetBool(joinMap.CameraSupportsOffMode.JoinNumber, SupportsCameraOff);
|
||||||
|
LinkVideoCodecCameraOffToApi(codec as IHasCameraOff, trilist, joinMap);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (codec is IHasCodecLayouts)
|
||||||
|
{
|
||||||
|
LinkVideoCodecCameraLayoutsToApi(codec as IHasCodecLayouts, trilist, joinMap);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (codec is IHasSelfviewPosition)
|
||||||
|
{
|
||||||
|
LinkVideoCodecSelfviewPositionToApi(codec as IHasSelfviewPosition, trilist, joinMap);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (codec is IHasDirectory)
|
||||||
|
{
|
||||||
|
LinkVideoCodecDirectoryToApi(codec as IHasDirectory, trilist, joinMap);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (codec is IHasScheduleAwareness)
|
||||||
|
{
|
||||||
|
LinkVideoCodecScheduleToApi(codec as IHasScheduleAwareness, trilist, joinMap);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (codec is IHasParticipants)
|
||||||
|
{
|
||||||
|
LinkVideoCodecParticipantsToApi(codec as IHasParticipants, trilist, joinMap);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (codec is IHasFarEndContentStatus)
|
||||||
|
{
|
||||||
|
(codec as IHasFarEndContentStatus).ReceivingContent.LinkInputSig(trilist.BooleanInput[joinMap.RecievingContent.JoinNumber]);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (codec is IHasPhoneDialing)
|
||||||
|
{
|
||||||
|
LinkVideoCodecPhoneToApi(codec as IHasPhoneDialing, trilist, joinMap);
|
||||||
|
}
|
||||||
|
|
||||||
|
trilist.OnlineStatusChange += (device, args) =>
|
||||||
|
{
|
||||||
|
if (!args.DeviceOnLine) return;
|
||||||
|
|
||||||
|
if (codec is IHasDirectory)
|
||||||
|
{
|
||||||
|
(codec as IHasDirectory).SetCurrentDirectoryToRoot();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (codec is IHasScheduleAwareness)
|
||||||
|
{
|
||||||
|
(codec as IHasScheduleAwareness).GetSchedule();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (codec is IHasParticipants)
|
||||||
|
{
|
||||||
|
UpdateParticipantsXSig((codec as IHasParticipants).Participants.CurrentParticipants);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (codec is IHasCameraAutoMode)
|
||||||
|
{
|
||||||
|
trilist.SetBool(joinMap.CameraSupportsAutoMode.JoinNumber, true);
|
||||||
|
|
||||||
|
(codec as IHasCameraAutoMode).CameraAutoModeIsOnFeedback.FireUpdate();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (codec is IHasCodecSelfView)
|
||||||
|
{
|
||||||
|
(codec as IHasCodecSelfView).SelfviewIsOnFeedback.FireUpdate();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (codec is IHasCameraAutoMode)
|
||||||
|
{
|
||||||
|
(codec as IHasCameraAutoMode).CameraAutoModeIsOnFeedback.FireUpdate();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (codec is IHasCameraOff)
|
||||||
|
{
|
||||||
|
(codec as IHasCameraOff).CameraIsOffFeedback.FireUpdate();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (codec is IHasPhoneDialing)
|
||||||
|
{
|
||||||
|
(codec as IHasPhoneDialing).PhoneOffHookFeedback.FireUpdate();
|
||||||
|
}
|
||||||
|
|
||||||
|
SharingContentIsOnFeedback.FireUpdate();
|
||||||
|
|
||||||
|
trilist.SetBool(joinMap.HookState.JoinNumber, IsInCall);
|
||||||
|
|
||||||
|
trilist.SetString(joinMap.CurrentCallData.JoinNumber, UpdateCallStatusXSig());
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
private void LinkVideoCodecPhoneToApi(IHasPhoneDialing codec, BasicTriList trilist, VideoCodecControllerJoinMap joinMap)
|
private void LinkVideoCodecPhoneToApi(IHasPhoneDialing codec, BasicTriList trilist, VideoCodecControllerJoinMap joinMap)
|
||||||
{
|
{
|
||||||
codec.PhoneOffHookFeedback.LinkInputSig(trilist.BooleanInput[joinMap.PhoneHookState.JoinNumber]);
|
codec.PhoneOffHookFeedback.LinkInputSig(trilist.BooleanInput[joinMap.PhoneHookState.JoinNumber]);
|
||||||
|
|||||||
@@ -23,46 +23,6 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
|
|||||||
zCommand
|
zCommand
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// The available layout styles
|
|
||||||
/// </summary>
|
|
||||||
public enum eZoomRoomLayoutStyle
|
|
||||||
{
|
|
||||||
Gallery,
|
|
||||||
Speaker,
|
|
||||||
Strip,
|
|
||||||
ShareAll
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// The avaliable layout positions for the thumbnails
|
|
||||||
/// </summary>
|
|
||||||
public enum eZoomRoomLayoutPosition
|
|
||||||
{
|
|
||||||
Center,
|
|
||||||
Up,
|
|
||||||
Right,
|
|
||||||
UpRight,
|
|
||||||
Down,
|
|
||||||
DownRight,
|
|
||||||
Left,
|
|
||||||
UpLeft,
|
|
||||||
DownLeft
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// The available layout sizes
|
|
||||||
/// </summary>
|
|
||||||
public enum eZoomRoomLayoutSize
|
|
||||||
{
|
|
||||||
Off,
|
|
||||||
Size1,
|
|
||||||
Size2,
|
|
||||||
Size3,
|
|
||||||
Strip
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public abstract class NotifiableObject : INotifyPropertyChanged
|
public abstract class NotifiableObject : INotifyPropertyChanged
|
||||||
{
|
{
|
||||||
#region INotifyPropertyChanged Members
|
#region INotifyPropertyChanged Members
|
||||||
@@ -606,7 +566,7 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
|
|||||||
public bool can_Switch_Floating_Share_Content { get; set; }
|
public bool can_Switch_Floating_Share_Content { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// [on/off] // Set to On if it is possible to switch to Speaker view by invoking zConfiguration Call Layout Style: Speaker. The active speaker is shown full screen, and other video streams, like self-view, are shown in thumbnails.
|
/// [on/off] // Set to On if it is possible to invoke zConfiguration Call Layout Style: ShareAll, to switch to the ShareAll mode, where the content sharing is shown full screen on all monitors.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[JsonProperty("can_Switch_Share_On_All_Screens")]
|
[JsonProperty("can_Switch_Share_On_All_Screens")]
|
||||||
public bool can_Switch_Share_On_All_Screens
|
public bool can_Switch_Share_On_All_Screens
|
||||||
@@ -993,12 +953,14 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Flags]
|
||||||
public enum eLayoutStyle
|
public enum eLayoutStyle
|
||||||
{
|
{
|
||||||
Gallery,
|
None = 0,
|
||||||
Speaker,
|
Gallery = 1,
|
||||||
Strip,
|
Speaker = 2,
|
||||||
ShareAll
|
Strip = 4,
|
||||||
|
ShareAll = 8,
|
||||||
}
|
}
|
||||||
|
|
||||||
public enum eLayoutSize
|
public enum eLayoutSize
|
||||||
@@ -1023,20 +985,64 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
|
|||||||
DownLeft
|
DownLeft
|
||||||
}
|
}
|
||||||
|
|
||||||
public class Layout:NotifiableObject
|
public class Layout : NotifiableObject
|
||||||
{
|
{
|
||||||
public bool ShareThumb { get; set; }
|
private bool _shareThumb;
|
||||||
public eLayoutStyle Style { get; set; }
|
private eLayoutStyle _style;
|
||||||
public eLayoutSize Size { get; set; }
|
private eLayoutSize _size;
|
||||||
|
|
||||||
private eLayoutPosition _position;
|
private eLayoutPosition _position;
|
||||||
public eLayoutPosition Position {
|
|
||||||
|
public bool ShareThumb
|
||||||
|
{
|
||||||
|
get { return _shareThumb; }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (value != _shareThumb)
|
||||||
|
{
|
||||||
|
_shareThumb = value;
|
||||||
|
NotifyPropertyChanged("ShareThumb");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public eLayoutStyle Style
|
||||||
|
{
|
||||||
|
get { return _style; }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (value != _style)
|
||||||
|
{
|
||||||
|
_style = value;
|
||||||
|
NotifyPropertyChanged("Style");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public eLayoutSize Size
|
||||||
|
{
|
||||||
|
get { return _size; }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (value != _size)
|
||||||
|
{
|
||||||
|
_size = value;
|
||||||
|
NotifyPropertyChanged("Size");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public eLayoutPosition Position
|
||||||
|
{
|
||||||
get { return _position; }
|
get { return _position; }
|
||||||
set
|
set
|
||||||
{
|
{
|
||||||
_position = value;
|
if (value != _position)
|
||||||
NotifyPropertyChanged("Position");
|
{
|
||||||
} }
|
_position = value;
|
||||||
|
NotifyPropertyChanged("Position");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class Lock
|
public class Lock
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
|
|||||||
public class ZoomRoom : VideoCodecBase, IHasCodecSelfView, IHasDirectoryHistoryStack, ICommunicationMonitor,
|
public class ZoomRoom : VideoCodecBase, IHasCodecSelfView, IHasDirectoryHistoryStack, ICommunicationMonitor,
|
||||||
IRouting,
|
IRouting,
|
||||||
IHasScheduleAwareness, IHasCodecCameras, IHasParticipants, IHasCameraOff, IHasCameraMute, IHasCameraAutoMode,
|
IHasScheduleAwareness, IHasCodecCameras, IHasParticipants, IHasCameraOff, IHasCameraMute, IHasCameraAutoMode,
|
||||||
IHasFarEndContentStatus, IHasSelfviewPosition, IHasPhoneDialing
|
IHasFarEndContentStatus, IHasSelfviewPosition, IHasPhoneDialing, IHasZoomRoomLayouts
|
||||||
{
|
{
|
||||||
private const long MeetingRefreshTimer = 60000;
|
private const long MeetingRefreshTimer = 60000;
|
||||||
private const uint DefaultMeetingDurationMin = 30;
|
private const uint DefaultMeetingDurationMin = 30;
|
||||||
@@ -121,6 +121,17 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
|
|||||||
PhoneOffHookFeedback = new BoolFeedback(PhoneOffHookFeedbackFunc);
|
PhoneOffHookFeedback = new BoolFeedback(PhoneOffHookFeedbackFunc);
|
||||||
CallerIdNameFeedback = new StringFeedback(CallerIdNameFeedbackFunc);
|
CallerIdNameFeedback = new StringFeedback(CallerIdNameFeedbackFunc);
|
||||||
CallerIdNumberFeedback = new StringFeedback(CallerIdNumberFeedbackFunc);
|
CallerIdNumberFeedback = new StringFeedback(CallerIdNumberFeedbackFunc);
|
||||||
|
|
||||||
|
LocalLayoutFeedback = new StringFeedback(LocalLayoutFeedbackFunc);
|
||||||
|
|
||||||
|
LayoutViewIsOnFirstPageFeedback = new BoolFeedback(LayoutViewIsOnFirstPageFeedbackFunc);
|
||||||
|
|
||||||
|
LayoutViewIsOnLastPageFeedback = new BoolFeedback(LayoutViewIsOnLastPageFeedbackFunc);
|
||||||
|
|
||||||
|
CanSwapContentWithThumbnailFeedback = new BoolFeedback(CanSwapContentWithThumbnailFeedbackFunc);
|
||||||
|
|
||||||
|
ContentSwappedWithThumbnailFeedback = new BoolFeedback(ContentSwappedWithThumbnailFeedbackFunc);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public CommunicationGather PortGather { get; private set; }
|
public CommunicationGather PortGather { get; private set; }
|
||||||
@@ -216,11 +227,6 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected Func<string> LocalLayoutFeedbackFunc
|
|
||||||
{
|
|
||||||
get { return () => ""; }
|
|
||||||
}
|
|
||||||
|
|
||||||
protected Func<bool> LocalLayoutIsProminentFeedbackFunc
|
protected Func<bool> LocalLayoutIsProminentFeedbackFunc
|
||||||
{
|
{
|
||||||
get { return () => false; }
|
get { return () => false; }
|
||||||
@@ -484,11 +490,28 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
|
|||||||
|
|
||||||
Configuration.Call.Layout.PropertyChanged += (o, a) =>
|
Configuration.Call.Layout.PropertyChanged += (o, a) =>
|
||||||
{
|
{
|
||||||
if (a.PropertyName != "Position") return;
|
switch (a.PropertyName)
|
||||||
|
{
|
||||||
|
case "Position":
|
||||||
|
{
|
||||||
|
ComputeSelfviewPipStatus();
|
||||||
|
|
||||||
ComputeSelfviewPipStatus();
|
SelfviewPipPositionFeedback.FireUpdate();
|
||||||
|
|
||||||
SelfviewPipPositionFeedback.FireUpdate();
|
break;
|
||||||
|
}
|
||||||
|
case "ShareThumb":
|
||||||
|
{
|
||||||
|
ContentSwappedWithThumbnailFeedback.FireUpdate();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case "Style":
|
||||||
|
{
|
||||||
|
LocalLayoutFeedback.FireUpdate();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
Status.Call.Sharing.PropertyChanged += (o, a) =>
|
Status.Call.Sharing.PropertyChanged += (o, a) =>
|
||||||
@@ -548,37 +571,31 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
|
|||||||
switch (a.PropertyName)
|
switch (a.PropertyName)
|
||||||
{
|
{
|
||||||
case "can_Switch_Speaker_View":
|
case "can_Switch_Speaker_View":
|
||||||
{
|
|
||||||
// TODO: #697 Fire appropriate feedback(s)
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case "can_Switch_Wall_View":
|
case "can_Switch_Wall_View":
|
||||||
{
|
|
||||||
// #697 TODO: Fire appropriate feedback(s)
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case "can_Switch_Share_On_All_Screens":
|
case "can_Switch_Share_On_All_Screens":
|
||||||
{
|
{
|
||||||
// #697 TODO: Fire appropriate feedback(s)
|
// #697 TODO: Calls the method to compute the available layouts and set the value of AvailableLayouts enum
|
||||||
|
ComputeAvailableLayouts();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case "is_In_First_Page":
|
case "is_In_First_Page":
|
||||||
{
|
{
|
||||||
// TODO: #697 Fire appropriate feedback(s)
|
// TODO: #697 Fires appropriate feedback
|
||||||
//
|
LayoutViewIsOnFirstPageFeedback.FireUpdate();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case "is_In_Last_Page":
|
case "is_In_Last_Page":
|
||||||
{
|
{
|
||||||
// TODO: #697 Fire appropriate feedback(s)
|
// TODO: #697 Fires appropriate feedback
|
||||||
break;
|
LayoutViewIsOnLastPageFeedback.FireUpdate();
|
||||||
}
|
|
||||||
case "video_type":
|
|
||||||
{
|
|
||||||
// TODO: #697 Fire appropriate feedback(s)
|
|
||||||
// LocalLayoutFeedback.FireUpdate();
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
//case "video_type":
|
||||||
|
// {
|
||||||
|
// // TODO: #697 It appears as though the actual value we want to watch is Configuration.Call.Layout.Style
|
||||||
|
// LocalLayoutFeedback.FireUpdate();
|
||||||
|
// break;
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@@ -1639,7 +1656,75 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
|
|||||||
|
|
||||||
public override void LinkToApi(BasicTriList trilist, uint joinStart, string joinMapKey, EiscApiAdvanced bridge)
|
public override void LinkToApi(BasicTriList trilist, uint joinStart, string joinMapKey, EiscApiAdvanced bridge)
|
||||||
{
|
{
|
||||||
LinkVideoCodecToApi(this, trilist, joinStart, joinMapKey, bridge);
|
var joinMap = new ZoomRoomJoinMap(joinStart);
|
||||||
|
|
||||||
|
var customJoins = JoinMapHelper.TryGetJoinMapAdvancedForDevice(joinMapKey);
|
||||||
|
|
||||||
|
if (customJoins != null)
|
||||||
|
{
|
||||||
|
joinMap.SetCustomJoinData(customJoins);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (bridge != null)
|
||||||
|
{
|
||||||
|
bridge.AddJoinMap(Key, joinMap);
|
||||||
|
}
|
||||||
|
|
||||||
|
LinkVideoCodecToApi(this, trilist, joinMap);
|
||||||
|
|
||||||
|
LinkZoomRoomToApi(trilist, joinMap);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Links all the specific Zoom functionality to the API bridge
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="trilist"></param>
|
||||||
|
/// <param name="joinMap"></param>
|
||||||
|
public void LinkZoomRoomToApi(BasicTriList trilist, ZoomRoomJoinMap joinMap)
|
||||||
|
{
|
||||||
|
var codec = this as IHasZoomRoomLayouts;
|
||||||
|
|
||||||
|
if (codec != null)
|
||||||
|
{
|
||||||
|
codec.AvailableLayoutsChanged += (o, a) =>
|
||||||
|
{
|
||||||
|
trilist.SetBool(joinMap.LayoutGalleryIsAvailable.JoinNumber, a.AvailableLayouts
|
||||||
|
== (a.AvailableLayouts & zConfiguration.eLayoutStyle.Gallery));
|
||||||
|
trilist.SetBool(joinMap.LayoutSpeakerIsAvailable.JoinNumber, a.AvailableLayouts
|
||||||
|
== (a.AvailableLayouts & zConfiguration.eLayoutStyle.Speaker));
|
||||||
|
trilist.SetBool(joinMap.LayoutStripIsAvailable.JoinNumber, a.AvailableLayouts
|
||||||
|
== (a.AvailableLayouts & zConfiguration.eLayoutStyle.Strip));
|
||||||
|
trilist.SetBool(joinMap.LayoutShareAllIsAvailable.JoinNumber, a.AvailableLayouts
|
||||||
|
== (a.AvailableLayouts & zConfiguration.eLayoutStyle.ShareAll));
|
||||||
|
};
|
||||||
|
|
||||||
|
codec.CanSwapContentWithThumbnailFeedback.LinkInputSig(trilist.BooleanInput[joinMap.CanSwapContentWithThumbnail.JoinNumber]);
|
||||||
|
trilist.SetSigFalseAction(joinMap.SwapContentWithThumbnail.JoinNumber, () => codec.SwapContentWithThumbnail());
|
||||||
|
codec.ContentSwappedWithThumbnailFeedback.LinkInputSig(trilist.BooleanInput[joinMap.SwapContentWithThumbnail.JoinNumber]);
|
||||||
|
|
||||||
|
codec.LayoutViewIsOnFirstPageFeedback.LinkInputSig(trilist.BooleanInput[joinMap.LayoutIsOnFirstPage.JoinNumber]);
|
||||||
|
codec.LayoutViewIsOnLastPageFeedback.LinkInputSig(trilist.BooleanInput[joinMap.LayoutIsOnLastPage.JoinNumber]);
|
||||||
|
trilist.SetSigFalseAction(joinMap.LayoutTurnToNextPage.JoinNumber, () => codec.LayoutTurnNextPage() );
|
||||||
|
trilist.SetSigFalseAction(joinMap.LayoutTurnToPreviousPage.JoinNumber, () => codec.LayoutTurnPreviousPage());
|
||||||
|
|
||||||
|
|
||||||
|
trilist.SetStringSigAction(joinMap.GetSetCurrentLayout.JoinNumber, (s) =>
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var style = (zConfiguration.eLayoutStyle)Enum.Parse(typeof(zConfiguration.eLayoutStyle), s, true);
|
||||||
|
SetLayout(style);
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
Debug.Console(2, this, "Unable to parse '{0}' to zConfiguration.eLayoutStyle: {1}", s, e);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
codec.LocalLayoutFeedback.LinkInputSig(trilist.StringInput[joinMap.GetSetCurrentLayout.JoinNumber]);
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void ExecuteSwitch(object selector)
|
public override void ExecuteSwitch(object selector)
|
||||||
@@ -1938,6 +2023,123 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
|
|||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
#region IHasZoomRoomLayouts Members
|
||||||
|
|
||||||
|
public event EventHandler<LayoutInfoChangedEventArgs> AvailableLayoutsChanged;
|
||||||
|
|
||||||
|
private Func<bool> LayoutViewIsOnFirstPageFeedbackFunc {get {return () => Status.Layout.is_In_First_Page; } }
|
||||||
|
private Func<bool> LayoutViewIsOnLastPageFeedbackFunc { get { return () => Status.Layout.is_In_Last_Page; } }
|
||||||
|
private Func<bool> CanSwapContentWithThumbnailFeedbackFunc { get { return () => Status.Layout.can_Switch_Floating_Share_Content; } }
|
||||||
|
private Func<bool> ContentSwappedWithThumbnailFeedbackFunc { get { return () => Configuration.Call.Layout.ShareThumb; } }
|
||||||
|
|
||||||
|
public BoolFeedback LayoutViewIsOnFirstPageFeedback { get; private set; }
|
||||||
|
|
||||||
|
public BoolFeedback LayoutViewIsOnLastPageFeedback { get; private set; }
|
||||||
|
|
||||||
|
public BoolFeedback CanSwapContentWithThumbnailFeedback { get; private set; }
|
||||||
|
|
||||||
|
public BoolFeedback ContentSwappedWithThumbnailFeedback { get; private set; }
|
||||||
|
|
||||||
|
|
||||||
|
public zConfiguration.eLayoutStyle LastSelectedLayout { get; private set; }
|
||||||
|
|
||||||
|
public zConfiguration.eLayoutStyle AvailableLayouts { get; private set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Reads individual properties to determine if which layouts are avalailable
|
||||||
|
/// </summary>
|
||||||
|
private void ComputeAvailableLayouts()
|
||||||
|
{
|
||||||
|
zConfiguration.eLayoutStyle availableLayouts = zConfiguration.eLayoutStyle.None;
|
||||||
|
//TODO: #697 Compute the avaialble layouts and set the value of AvailableLayouts
|
||||||
|
if (Status.Layout.can_Switch_Wall_View)
|
||||||
|
{
|
||||||
|
availableLayouts |= zConfiguration.eLayoutStyle.Gallery;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Status.Layout.can_Switch_Speaker_View)
|
||||||
|
{
|
||||||
|
availableLayouts |= zConfiguration.eLayoutStyle.Speaker;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Status.Layout.can_Switch_Share_On_All_Screens)
|
||||||
|
{
|
||||||
|
availableLayouts |= zConfiguration.eLayoutStyle.ShareAll;
|
||||||
|
}
|
||||||
|
|
||||||
|
// There is no property that directly reports if strip mode is valid, but API stipulates
|
||||||
|
// that strip mode is available if the number of screens is 1
|
||||||
|
if (Status.NumberOfScreens.NumOfScreens == 1)
|
||||||
|
{
|
||||||
|
availableLayouts |= zConfiguration.eLayoutStyle.Strip;
|
||||||
|
}
|
||||||
|
|
||||||
|
var handler = AvailableLayoutsChanged;
|
||||||
|
if (handler != null)
|
||||||
|
{
|
||||||
|
handler(this, new LayoutInfoChangedEventArgs() { AvailableLayouts = availableLayouts });
|
||||||
|
}
|
||||||
|
|
||||||
|
AvailableLayouts = availableLayouts;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void GetAvailableLayouts()
|
||||||
|
{
|
||||||
|
SendText("zStatus Call Layout");
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SetLayout(zConfiguration.eLayoutStyle layoutStyle)
|
||||||
|
{
|
||||||
|
LastSelectedLayout = layoutStyle;
|
||||||
|
SendText(String.Format("zConfiguration Call Layout Style: {0}", layoutStyle.ToString()));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SwapContentWithThumbnail()
|
||||||
|
{
|
||||||
|
if (CanSwapContentWithThumbnailFeedback.BoolValue)
|
||||||
|
{
|
||||||
|
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
|
||||||
|
// to toggle the state
|
||||||
|
SendText(String.Format("zConfiguration Call Layout ShareThumb: {0}", oppositeValue));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void LayoutTurnNextPage()
|
||||||
|
{
|
||||||
|
SendText("zCommand Call Layout TurnPage Forward: On");
|
||||||
|
}
|
||||||
|
|
||||||
|
public void LayoutTurnPreviousPage()
|
||||||
|
{
|
||||||
|
SendText("zCommand Call Layout TurnPage Forward: Off");
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region IHasCodecLayouts Members
|
||||||
|
|
||||||
|
private Func<string> LocalLayoutFeedbackFunc { get { return () => Configuration.Call.Layout.Style.ToString(); } }
|
||||||
|
|
||||||
|
public StringFeedback LocalLayoutFeedback { get; private set; }
|
||||||
|
|
||||||
|
public void LocalLayoutToggle()
|
||||||
|
{
|
||||||
|
throw new NotImplementedException();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void LocalLayoutToggleSingleProminent()
|
||||||
|
{
|
||||||
|
throw new NotImplementedException();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void MinMaxLayoutToggle()
|
||||||
|
{
|
||||||
|
throw new NotImplementedException();
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|||||||
@@ -0,0 +1,141 @@
|
|||||||
|
using System;
|
||||||
|
using PepperDash.Essentials.Core;
|
||||||
|
using PepperDash.Essentials.Core.Bridges.JoinMaps;
|
||||||
|
|
||||||
|
namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
|
||||||
|
{
|
||||||
|
public class ZoomRoomJoinMap : VideoCodecControllerJoinMap
|
||||||
|
{
|
||||||
|
// TODO: #697 Set join numbers
|
||||||
|
|
||||||
|
[JoinName("LayoutIsOnFirstPage")]
|
||||||
|
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")]
|
||||||
|
public JoinDataComplete LayoutIsOnLastPage =
|
||||||
|
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("LayoutTurnToNextPage")]
|
||||||
|
public JoinDataComplete LayoutTurnToNextPage =
|
||||||
|
new JoinDataComplete(new JoinData { JoinNumber = 999, JoinSpan = 1 },
|
||||||
|
new JoinMetadata
|
||||||
|
{
|
||||||
|
Description = "Turns layout view to next page",
|
||||||
|
JoinCapabilities = eJoinCapabilities.FromSIMPL,
|
||||||
|
JoinType = eJoinType.Digital
|
||||||
|
});
|
||||||
|
|
||||||
|
[JoinName("LayoutTurnToPreviousPage")]
|
||||||
|
public JoinDataComplete LayoutTurnToPreviousPage =
|
||||||
|
new JoinDataComplete(new JoinData { JoinNumber = 999, JoinSpan = 1 },
|
||||||
|
new JoinMetadata
|
||||||
|
{
|
||||||
|
Description = "Turns layout view to previous page",
|
||||||
|
JoinCapabilities = eJoinCapabilities.FromSIMPL,
|
||||||
|
JoinType = eJoinType.Digital
|
||||||
|
});
|
||||||
|
|
||||||
|
[JoinName("CanSwapContentWithThumbnail")]
|
||||||
|
public JoinDataComplete CanSwapContentWithThumbnail =
|
||||||
|
new JoinDataComplete(new JoinData { JoinNumber = 999, JoinSpan = 1 },
|
||||||
|
new JoinMetadata
|
||||||
|
{
|
||||||
|
Description = "FB Indicates if content can be swapped with thumbnail",
|
||||||
|
JoinCapabilities = eJoinCapabilities.ToSIMPL,
|
||||||
|
JoinType = eJoinType.Digital
|
||||||
|
});
|
||||||
|
|
||||||
|
[JoinName("SwapContentWithThumbnail")]
|
||||||
|
public JoinDataComplete SwapContentWithThumbnail =
|
||||||
|
new JoinDataComplete(new JoinData { JoinNumber = 999, JoinSpan = 1 },
|
||||||
|
new JoinMetadata
|
||||||
|
{
|
||||||
|
Description = "Pulse to swap content with thumbnail. FB reports current state",
|
||||||
|
JoinCapabilities = eJoinCapabilities.ToFromSIMPL,
|
||||||
|
JoinType = eJoinType.Digital
|
||||||
|
});
|
||||||
|
|
||||||
|
[JoinName("GetSetCurrentLayout")]
|
||||||
|
public JoinDataComplete GetSetCurrentLayout =
|
||||||
|
new JoinDataComplete(new JoinData { JoinNumber = 999, 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
|
||||||
|
});
|
||||||
|
|
||||||
|
[JoinName("GetAvailableLayouts")]
|
||||||
|
public JoinDataComplete GetAvailableLayouts =
|
||||||
|
new JoinDataComplete(new JoinData { JoinNumber = 999, JoinSpan = 1 },
|
||||||
|
new JoinMetadata
|
||||||
|
{
|
||||||
|
Description = "Gets the available layouts. Will update the LayoutXXXXXIsAvailbale signals.",
|
||||||
|
JoinCapabilities = eJoinCapabilities.FromSIMPL,
|
||||||
|
JoinType = eJoinType.Serial
|
||||||
|
});
|
||||||
|
|
||||||
|
[JoinName("LayoutGalleryIsAvailable")]
|
||||||
|
public JoinDataComplete LayoutGalleryIsAvailable =
|
||||||
|
new JoinDataComplete(new JoinData { JoinNumber = 999, JoinSpan = 1 },
|
||||||
|
new JoinMetadata
|
||||||
|
{
|
||||||
|
Description = "FB Indicates if layout 'Gallery' is available",
|
||||||
|
JoinCapabilities = eJoinCapabilities.ToSIMPL,
|
||||||
|
JoinType = eJoinType.Digital
|
||||||
|
});
|
||||||
|
|
||||||
|
[JoinName("LayoutSpeakerIsAvailable")]
|
||||||
|
public JoinDataComplete LayoutSpeakerIsAvailable =
|
||||||
|
new JoinDataComplete(new JoinData { JoinNumber = 999, JoinSpan = 1 },
|
||||||
|
new JoinMetadata
|
||||||
|
{
|
||||||
|
Description = "FB Indicates if layout 'Speaker' is available",
|
||||||
|
JoinCapabilities = eJoinCapabilities.ToSIMPL,
|
||||||
|
JoinType = eJoinType.Digital
|
||||||
|
});
|
||||||
|
|
||||||
|
[JoinName("LayoutStripIsAvailable")]
|
||||||
|
public JoinDataComplete LayoutStripIsAvailable =
|
||||||
|
new JoinDataComplete(new JoinData { JoinNumber = 999, JoinSpan = 1 },
|
||||||
|
new JoinMetadata
|
||||||
|
{
|
||||||
|
Description = "FB Indicates if layout 'Strip' is available",
|
||||||
|
JoinCapabilities = eJoinCapabilities.ToSIMPL,
|
||||||
|
JoinType = eJoinType.Digital
|
||||||
|
});
|
||||||
|
|
||||||
|
[JoinName("LayoutShareAllIsAvailable")]
|
||||||
|
public JoinDataComplete LayoutShareAllIsAvailable =
|
||||||
|
new JoinDataComplete(new JoinData { JoinNumber = 999, JoinSpan = 1 },
|
||||||
|
new JoinMetadata
|
||||||
|
{
|
||||||
|
Description = "FB Indicates if layout 'ShareAll' is available",
|
||||||
|
JoinCapabilities = eJoinCapabilities.ToSIMPL,
|
||||||
|
JoinType = eJoinType.Digital
|
||||||
|
});
|
||||||
|
|
||||||
|
public ZoomRoomJoinMap(uint joinStart)
|
||||||
|
: base(joinStart, typeof(ZoomRoomJoinMap))
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public ZoomRoomJoinMap(uint joinStart, Type type)
|
||||||
|
: base(joinStart, type)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user