lots of updates

This commit is contained in:
Andrew Welker
2020-10-02 16:58:18 -06:00
parent 27382a6be1
commit decdaf9f1f
11 changed files with 568 additions and 244 deletions

View File

@@ -36,6 +36,15 @@ namespace PepperDash_Essentials_Core.Bridges.JoinMaps
JoinType = eJoinType.Digital JoinType = eJoinType.Digital
}); });
[JoinName("CameraLayoutStringFb")] public JoinDataComplete CameraLayoutStringFb =
new JoinDataComplete(new JoinData {JoinNumber = 141, JoinSpan = 1},
new JoinMetadata
{
Description = "Current Layout Fb",
JoinCapabilities = eJoinCapabilities.ToSIMPL,
JoinType = eJoinType.Analog
});
[JoinName("CameraModeAuto")] public JoinDataComplete CameraModeAuto = [JoinName("CameraModeAuto")] public JoinDataComplete CameraModeAuto =
new JoinDataComplete(new JoinData {JoinNumber = 131, JoinSpan = 1}, new JoinDataComplete(new JoinData {JoinNumber = 131, JoinSpan = 1},
new JoinMetadata new JoinMetadata
@@ -90,6 +99,15 @@ namespace PepperDash_Essentials_Core.Bridges.JoinMaps
JoinType = eJoinType.Digital JoinType = eJoinType.Digital
}); });
[JoinName("CameraPresetNames")] public JoinDataComplete CameraPresetNames =
new JoinDataComplete(new JoinData {JoinNumber = 121, JoinSpan = 1},
new JoinMetadata
{
Description = "Camera Preset Names - XSIG, max of 15",
JoinCapabilities = eJoinCapabilities.ToSIMPL,
JoinType = eJoinType.Serial
});
[JoinName("CameraPresetSelect")] public JoinDataComplete CameraPresetSelect = [JoinName("CameraPresetSelect")] public JoinDataComplete CameraPresetSelect =
new JoinDataComplete(new JoinData {JoinNumber = 121, JoinSpan = 1}, new JoinDataComplete(new JoinData {JoinNumber = 121, JoinSpan = 1},
new JoinMetadata new JoinMetadata
@@ -99,13 +117,13 @@ namespace PepperDash_Essentials_Core.Bridges.JoinMaps
JoinType = eJoinType.Analog JoinType = eJoinType.Analog
}); });
[JoinName("CameraPresetNames")] public JoinDataComplete CameraPresetNames = [JoinName("CameraPresetSave")] public JoinDataComplete CameraPresetSave =
new JoinDataComplete(new JoinData {JoinNumber = 121, JoinSpan = 1}, new JoinDataComplete(new JoinData {JoinNumber = 121, JoinSpan = 1},
new JoinMetadata new JoinMetadata
{ {
Description = "Camera Preset Names - XSIG, max of 15", Description = "Save Selected Preset",
JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinCapabilities = eJoinCapabilities.ToFromSIMPL,
JoinType = eJoinType.Serial JoinType = eJoinType.Digital
}); });
[JoinName("CameraSelfView")] public JoinDataComplete CameraSelfView = [JoinName("CameraSelfView")] public JoinDataComplete CameraSelfView =
@@ -189,12 +207,30 @@ namespace PepperDash_Essentials_Core.Bridges.JoinMaps
JoinType = eJoinType.Serial JoinType = eJoinType.Serial
}); });
[JoinName("DirectoryHasChanged")] public JoinDataComplete DirectoryHasChanged = [JoinName("CurrentParticipants")] public JoinDataComplete CurrentParticipants =
new JoinDataComplete(new JoinData {JoinNumber = 103, JoinSpan = 1}, new JoinDataComplete(new JoinData {JoinNumber = 151, JoinSpan = 1},
new JoinMetadata()
{
Description = "Current Participants XSig",
JoinCapabilities = eJoinCapabilities.ToSIMPL,
JoinType = eJoinType.Serial
});
[JoinName("CurrentSource")] public JoinDataComplete CurrentSource =
new JoinDataComplete(new JoinData {JoinNumber = 201, JoinSpan = 1},
new JoinMetadata new JoinMetadata
{ {
Description = "Directory has changed FB", Description = "Current Source",
JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinCapabilities = eJoinCapabilities.ToSIMPL,
JoinType = eJoinType.Serial
});
[JoinName("DialMeeting")] public JoinDataComplete DialMeeting =
new JoinDataComplete(new JoinData {JoinNumber = 161, JoinSpan = 1},
new JoinMetadata
{
Description = "Join first joinable meeting",
JoinCapabilities = eJoinCapabilities.FromSIMPL,
JoinType = eJoinType.Digital JoinType = eJoinType.Digital
}); });
@@ -252,6 +288,15 @@ namespace PepperDash_Essentials_Core.Bridges.JoinMaps
JoinType = eJoinType.Digital JoinType = eJoinType.Digital
}); });
[JoinName("DirectoryHasChanged")] public JoinDataComplete DirectoryHasChanged =
new JoinDataComplete(new JoinData {JoinNumber = 103, JoinSpan = 1},
new JoinMetadata
{
Description = "Directory has changed FB",
JoinCapabilities = eJoinCapabilities.ToSIMPL,
JoinType = eJoinType.Digital
});
[JoinName("DirectoryIsRoot")] public JoinDataComplete DirectoryIsRoot = [JoinName("DirectoryIsRoot")] public JoinDataComplete DirectoryIsRoot =
new JoinDataComplete(new JoinData {JoinNumber = 102, JoinSpan = 1}, new JoinDataComplete(new JoinData {JoinNumber = 102, JoinSpan = 1},
new JoinMetadata new JoinMetadata
@@ -495,37 +540,12 @@ namespace PepperDash_Essentials_Core.Bridges.JoinMaps
JoinType = eJoinType.Digital JoinType = eJoinType.Digital
}); });
[JoinName("SpeedDialStart")] public JoinDataComplete SpeedDialStart =
new JoinDataComplete(new JoinData {JoinNumber = 41, JoinSpan = 4},
new JoinMetadata
{
Description = "Speed Dial",
JoinCapabilities = eJoinCapabilities.ToSIMPL,
JoinType = eJoinType.Digital
});
[JoinName("Schedule")] public JoinDataComplete Schedule = [JoinName("ManualDial")] public JoinDataComplete ManualDial =
new JoinDataComplete(new JoinData {JoinNumber = 102, JoinSpan = 1}, new JoinDataComplete(new JoinData {JoinNumber = 71, JoinSpan = 1},
new JoinMetadata new JoinMetadata
{ {
Description = "Schedule Data - XSIG", Description = "Dial manual string",
JoinCapabilities = eJoinCapabilities.ToSIMPL,
JoinType = eJoinType.Serial
});
[JoinName("DialMeeting")] public JoinDataComplete DialMeeting = new JoinDataComplete(new JoinData{JoinNumber=161, JoinSpan = 1},
new JoinMetadata
{
Description = "Join first joinable meeting",
JoinCapabilities = eJoinCapabilities.FromSIMPL,
JoinType = eJoinType.Digital
});
[JoinName("UpdateMeetings")] public JoinDataComplete UpdateMeetings =
new JoinDataComplete(new JoinData {JoinNumber = 162, JoinSpan = 1},
new JoinMetadata
{
Description = "Update Meetings",
JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinCapabilities = eJoinCapabilities.FromSIMPL,
JoinType = eJoinType.Digital JoinType = eJoinType.Digital
}); });
@@ -539,82 +559,15 @@ namespace PepperDash_Essentials_Core.Bridges.JoinMaps
JoinType = eJoinType.Analog JoinType = eJoinType.Analog
}); });
[JoinName("MicMuteOff")] public JoinDataComplete MicMuteOff =
[JoinName("CameraLayoutStringFb")] new JoinDataComplete(new JoinData {JoinNumber = 172, JoinSpan = 1},
public JoinDataComplete CameraLayoutStringFb =
new JoinDataComplete(new JoinData { JoinNumber = 141, JoinSpan = 1 },
new JoinMetadata new JoinMetadata
{ {
Description = "Current Layout Fb", Description = "Mic Mute Off",
JoinCapabilities = eJoinCapabilities.ToSIMPL,
JoinType = eJoinType.Analog
});
[JoinName("ManualDial")] public JoinDataComplete ManualDial =
new JoinDataComplete(new JoinData {JoinNumber = 71, JoinSpan = 1},
new JoinMetadata
{
Description = "Dial manual string",
JoinCapabilities = eJoinCapabilities.FromSIMPL,
JoinType = eJoinType.Digital
});
[JoinName("SourceShareStart")] public JoinDataComplete SourceShareStart =
new JoinDataComplete(new JoinData {JoinNumber = 201, JoinSpan = 1},
new JoinMetadata
{
Description = "Start Sharing & Feedback",
JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinCapabilities = eJoinCapabilities.ToFromSIMPL,
JoinType = eJoinType.Digital JoinType = eJoinType.Digital
}); });
[JoinName("SourceShareEnd")]
public JoinDataComplete SourceShareEnd =
new JoinDataComplete(new JoinData { JoinNumber = 202, JoinSpan = 1 },
new JoinMetadata
{
Description = "Stop Sharing & Feedback",
JoinCapabilities = eJoinCapabilities.ToFromSIMPL,
JoinType = eJoinType.Digital
});
[JoinName("AutoShareWhileInCall")] public JoinDataComplete SourceShareAutoStart =
new JoinDataComplete(new JoinData {JoinNumber = 203, JoinSpan = 1},
new JoinMetadata
{
Description = "When high, will autostart sharing when a call is joined",
JoinCapabilities = eJoinCapabilities.FromSIMPL,
JoinType = eJoinType.Digital
});
[JoinName("CurrentSource")] public JoinDataComplete CurrentSource = new JoinDataComplete(new JoinData{JoinNumber = 201, JoinSpan = 1},
new JoinMetadata
{
Description = "Current Source",
JoinCapabilities = eJoinCapabilities.ToSIMPL,
JoinType = eJoinType.Serial
});
[JoinName("CurrentParticipants")] public JoinDataComplete CurrentParticipants =
new JoinDataComplete(new JoinData{JoinNumber = 151, JoinSpan = 1},
new JoinMetadata()
{
Description = "Current Participants XSig",
JoinCapabilities = eJoinCapabilities.ToSIMPL,
JoinType = eJoinType.Serial
});
[JoinName("ParticipantCount")] public JoinDataComplete ParticipantCount = new JoinDataComplete(new JoinData{JoinNumber = 151, JoinSpan = 1},
new JoinMetadata
{
Description = "Current Participant Count",
JoinCapabilities = eJoinCapabilities.ToSIMPL,
JoinType = eJoinType.Analog
});
[JoinName("MicMuteOn")] public JoinDataComplete MicMuteOn = [JoinName("MicMuteOn")] public JoinDataComplete MicMuteOn =
new JoinDataComplete(new JoinData {JoinNumber = 171, JoinSpan = 1}, new JoinDataComplete(new JoinData {JoinNumber = 171, JoinSpan = 1},
new JoinMetadata new JoinMetadata
@@ -624,15 +577,6 @@ namespace PepperDash_Essentials_Core.Bridges.JoinMaps
JoinType = eJoinType.Digital JoinType = eJoinType.Digital
}); });
[JoinName("MicMuteOff")] public JoinDataComplete MicMuteOff =
new JoinDataComplete(new JoinData {JoinNumber = 172, JoinSpan = 1},
new JoinMetadata
{
Description = "Mic Mute Off",
JoinCapabilities = eJoinCapabilities.ToFromSIMPL,
JoinType = eJoinType.Digital
});
[JoinName("MicMuteToggle")] public JoinDataComplete MicMuteToggle = [JoinName("MicMuteToggle")] public JoinDataComplete MicMuteToggle =
new JoinDataComplete(new JoinData {JoinNumber = 173, JoinSpan = 1}, new JoinDataComplete(new JoinData {JoinNumber = 173, JoinSpan = 1},
new JoinMetadata new JoinMetadata
@@ -642,19 +586,126 @@ namespace PepperDash_Essentials_Core.Bridges.JoinMaps
JoinType = eJoinType.Digital JoinType = eJoinType.Digital
}); });
[JoinName("VolumeMuteOn")] [JoinName("MinutesBeforeMeetingStart")] public JoinDataComplete MinutesBeforeMeetingStart =
public JoinDataComplete VolumeMuteOn = new JoinDataComplete(new JoinData {JoinNumber = 41, JoinSpan = 1},
new JoinDataComplete(new JoinData { JoinNumber = 176, JoinSpan = 1 },
new JoinMetadata new JoinMetadata
{ {
Description = "Volume Mute On", Description = "Minutes before meeting start that a meeting is joinable",
JoinCapabilities = eJoinCapabilities.FromSIMPL,
JoinType = eJoinType.Analog
});
[JoinName("ParticipantCount")] public JoinDataComplete ParticipantCount =
new JoinDataComplete(new JoinData {JoinNumber = 151, JoinSpan = 1},
new JoinMetadata
{
Description = "Current Participant Count",
JoinCapabilities = eJoinCapabilities.ToSIMPL,
JoinType = eJoinType.Analog
});
[JoinName("Schedule")] public JoinDataComplete Schedule =
new JoinDataComplete(new JoinData {JoinNumber = 102, JoinSpan = 1},
new JoinMetadata
{
Description = "Schedule Data - XSIG",
JoinCapabilities = eJoinCapabilities.ToSIMPL,
JoinType = eJoinType.Serial
});
[JoinName("AutoShareWhileInCall")] public JoinDataComplete SourceShareAutoStart =
new JoinDataComplete(new JoinData {JoinNumber = 203, JoinSpan = 1},
new JoinMetadata
{
Description = "When high, will autostart sharing when a call is joined",
JoinCapabilities = eJoinCapabilities.FromSIMPL,
JoinType = eJoinType.Digital
});
[JoinName("SourceShareEnd")] public JoinDataComplete SourceShareEnd =
new JoinDataComplete(new JoinData {JoinNumber = 202, JoinSpan = 1},
new JoinMetadata
{
Description = "Stop Sharing & Feedback",
JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinCapabilities = eJoinCapabilities.ToFromSIMPL,
JoinType = eJoinType.Digital JoinType = eJoinType.Digital
}); });
[JoinName("VolumeMuteOff")] [JoinName("SourceShareStart")] public JoinDataComplete SourceShareStart =
public JoinDataComplete VolumeMuteOff = new JoinDataComplete(new JoinData {JoinNumber = 201, JoinSpan = 1},
new JoinDataComplete(new JoinData { JoinNumber = 177, JoinSpan = 1 }, new JoinMetadata
{
Description = "Start Sharing & Feedback",
JoinCapabilities = eJoinCapabilities.ToFromSIMPL,
JoinType = eJoinType.Digital
});
[JoinName("RecievingContent")] public JoinDataComplete RecievingContent =
new JoinDataComplete(new JoinData {JoinNumber = 204, JoinSpan = 1},
new JoinMetadata
{
Description = "Recieving content from the far end",
JoinType = eJoinType.Digital,
JoinCapabilities = eJoinCapabilities.ToSIMPL
});
[JoinName("SelfviewPosition")] public JoinDataComplete SelfviewPosition =
new JoinDataComplete(new JoinData {JoinNumber = 211, JoinSpan = 1},
new JoinMetadata
{
Description = "advance selfview position",
JoinCapabilities = eJoinCapabilities.FromSIMPL,
JoinType = eJoinType.Digital
});
[JoinName("SelfviewPositionFb")]
public JoinDataComplete SelfviewPositionFb =
new JoinDataComplete(new JoinData { JoinNumber = 211, JoinSpan = 1 },
new JoinMetadata
{
Description = "advance selfview position",
JoinCapabilities = eJoinCapabilities.ToSIMPL,
JoinType = eJoinType.Serial
});
[JoinName("SpeedDialStart")] public JoinDataComplete SpeedDialStart =
new JoinDataComplete(new JoinData {JoinNumber = 41, JoinSpan = 4},
new JoinMetadata
{
Description = "Speed Dial",
JoinCapabilities = eJoinCapabilities.ToSIMPL,
JoinType = eJoinType.Digital
});
[JoinName("UpdateMeetings")] public JoinDataComplete UpdateMeetings =
new JoinDataComplete(new JoinData {JoinNumber = 162, JoinSpan = 1},
new JoinMetadata
{
Description = "Update Meetings",
JoinCapabilities = eJoinCapabilities.FromSIMPL,
JoinType = eJoinType.Digital
});
[JoinName("VolumeDown")] public JoinDataComplete VolumeDown =
new JoinDataComplete(new JoinData {JoinNumber = 175, JoinSpan = 1},
new JoinMetadata
{
Description = "Volume Down",
JoinCapabilities = eJoinCapabilities.FromSIMPL,
JoinType = eJoinType.Digital
});
[JoinName("VolumeLevel")] public JoinDataComplete VolumeLevel =
new JoinDataComplete(new JoinData {JoinNumber = 174, JoinSpan = 1},
new JoinMetadata
{
Description = "Volume Level",
JoinCapabilities = eJoinCapabilities.ToFromSIMPL,
JoinType = eJoinType.Analog
});
[JoinName("VolumeMuteOff")] public JoinDataComplete VolumeMuteOff =
new JoinDataComplete(new JoinData {JoinNumber = 177, JoinSpan = 1},
new JoinMetadata new JoinMetadata
{ {
Description = "Volume Mute Off", Description = "Volume Mute Off",
@@ -662,9 +713,17 @@ namespace PepperDash_Essentials_Core.Bridges.JoinMaps
JoinType = eJoinType.Digital JoinType = eJoinType.Digital
}); });
[JoinName("VolumeMuteToggle")] [JoinName("VolumeMuteOn")] public JoinDataComplete VolumeMuteOn =
public JoinDataComplete VolumeMuteToggle = new JoinDataComplete(new JoinData {JoinNumber = 176, JoinSpan = 1},
new JoinDataComplete(new JoinData { JoinNumber = 178, JoinSpan = 1 }, new JoinMetadata
{
Description = "Volume Mute On",
JoinCapabilities = eJoinCapabilities.ToFromSIMPL,
JoinType = eJoinType.Digital
});
[JoinName("VolumeMuteToggle")] public JoinDataComplete VolumeMuteToggle =
new JoinDataComplete(new JoinData {JoinNumber = 178, JoinSpan = 1},
new JoinMetadata new JoinMetadata
{ {
Description = "Volume Mute Toggle", Description = "Volume Mute Toggle",
@@ -681,35 +740,6 @@ namespace PepperDash_Essentials_Core.Bridges.JoinMaps
JoinType = eJoinType.Digital JoinType = eJoinType.Digital
}); });
[JoinName("VolumeDown")]
public JoinDataComplete VolumeDown =
new JoinDataComplete(new JoinData { JoinNumber = 175, JoinSpan = 1 },
new JoinMetadata
{
Description = "Volume Down",
JoinCapabilities = eJoinCapabilities.FromSIMPL,
JoinType = eJoinType.Digital
});
[JoinName("VolumeLevel")]
public JoinDataComplete VolumeLevel =
new JoinDataComplete(new JoinData { JoinNumber = 174, JoinSpan = 1 },
new JoinMetadata
{
Description = "Volume Level",
JoinCapabilities = eJoinCapabilities.ToFromSIMPL,
JoinType = eJoinType.Analog
});
[JoinName("MinutesBeforeMeetingStart")] public JoinDataComplete MinutesBeforeMeetingStart =
new JoinDataComplete(new JoinData {JoinNumber = 41, JoinSpan = 1},
new JoinMetadata
{
Description = "Minutes before meeting start that a meeting is joinable",
JoinCapabilities = eJoinCapabilities.FromSIMPL,
JoinType = eJoinType.Analog
});
public VideoCodecControllerJoinMap(uint joinStart) : base(joinStart, typeof (VideoCodecControllerJoinMap)) public VideoCodecControllerJoinMap(uint joinStart) : base(joinStart, typeof (VideoCodecControllerJoinMap))
{ {
} }

View File

@@ -0,0 +1,7 @@
namespace PepperDash.Essentials.Core.DeviceTypeInterfaces
{
public interface IHasFarEndContentStatus
{
BoolFeedback ReceivingContent { get; }
}
}

View File

@@ -196,6 +196,7 @@
<Compile Include="Devices\ReconfigurableDevice.cs" /> <Compile Include="Devices\ReconfigurableDevice.cs" />
<Compile Include="Devices\VolumeDeviceChangeEventArgs.cs" /> <Compile Include="Devices\VolumeDeviceChangeEventArgs.cs" />
<Compile Include="DeviceTypeInterfaces\IHasBranding.cs" /> <Compile Include="DeviceTypeInterfaces\IHasBranding.cs" />
<Compile Include="DeviceTypeInterfaces\IHasFarEndContentStatus.cs" />
<Compile Include="DeviceTypeInterfaces\IMobileControl.cs" /> <Compile Include="DeviceTypeInterfaces\IMobileControl.cs" />
<Compile Include="Factory\DeviceFactory.cs" /> <Compile Include="Factory\DeviceFactory.cs" />
<Compile Include="Factory\IDeviceFactory.cs" /> <Compile Include="Factory\IDeviceFactory.cs" />

View File

@@ -121,6 +121,7 @@
<Compile Include="Cameras\CameraControl.cs" /> <Compile Include="Cameras\CameraControl.cs" />
<Compile Include="Display\PanasonicThDisplay.cs" /> <Compile Include="Display\PanasonicThDisplay.cs" />
<Compile Include="VideoCodec\Interfaces\IHasParticipants.cs" /> <Compile Include="VideoCodec\Interfaces\IHasParticipants.cs" />
<Compile Include="VideoCodec\Interfaces\IHasSelfviewPosition.cs" />
<Compile Include="VideoCodec\Interfaces\iVideoCodecInfo.cs" /> <Compile Include="VideoCodec\Interfaces\iVideoCodecInfo.cs" />
<Compile Include="Codec\iHasCallFavorites.cs" /> <Compile Include="Codec\iHasCallFavorites.cs" />
<Compile Include="Codec\iHasCallHistory.cs" /> <Compile Include="Codec\iHasCallHistory.cs" />

View File

@@ -0,0 +1,14 @@
using PepperDash.Essentials.Core;
using PepperDash.Essentials.Devices.Common.VideoCodec.Cisco;
namespace PepperDash.Essentials.Core.DeviceTypeInterfaces
{
public interface IHasSelfviewPosition
{
StringFeedback SelfviewPipPositionFeedback { get; }
void SelfviewPipPositionSet(CodecCommandWithLabel position);
void SelfviewPipPositionToggle();
}
}

View File

@@ -13,6 +13,7 @@ using PepperDash.Essentials.Core;
using PepperDash.Essentials.Core.Bridges; using PepperDash.Essentials.Core.Bridges;
using PepperDash.Essentials.Core.Config; using PepperDash.Essentials.Core.Config;
using PepperDash.Essentials.Core.Devices; using PepperDash.Essentials.Core.Devices;
using PepperDash.Essentials.Core.DeviceTypeInterfaces;
using PepperDash.Essentials.Core.Routing; using PepperDash.Essentials.Core.Routing;
using PepperDash.Essentials.Devices.Common.Cameras; using PepperDash.Essentials.Devices.Common.Cameras;
using PepperDash.Essentials.Devices.Common.Codec; using PepperDash.Essentials.Devices.Common.Codec;
@@ -198,7 +199,7 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec
/// <param name="previousStatus"></param> /// <param name="previousStatus"></param>
/// <param name="newStatus"></param> /// <param name="newStatus"></param>
/// <param name="item"></param> /// <param name="item"></param>
protected void OnCallStatusChange(CodecActiveCallItem item) protected virtual void OnCallStatusChange(CodecActiveCallItem item)
{ {
var handler = CallStatusChange; var handler = CallStatusChange;
if (handler != null) if (handler != null)
@@ -322,6 +323,11 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec
LinkVideoCodecCameraLayoutsToApi(codec as IHasCodecLayouts, trilist, joinMap); LinkVideoCodecCameraLayoutsToApi(codec as IHasCodecLayouts, trilist, joinMap);
} }
if (codec is IHasSelfviewPosition)
{
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);
@@ -337,6 +343,11 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec
LinkVideoCodecParticipantsToApi(codec as IHasParticipants, trilist, joinMap); LinkVideoCodecParticipantsToApi(codec as IHasParticipants, trilist, joinMap);
} }
if (codec is IHasFarEndContentStatus)
{
(codec as IHasFarEndContentStatus).ReceivingContent.LinkInputSig(trilist.BooleanInput[joinMap.RecievingContent.JoinNumber]);
}
trilist.OnlineStatusChange += (device, args) => trilist.OnlineStatusChange += (device, args) =>
{ {
if (!args.DeviceOnLine) return; if (!args.DeviceOnLine) return;
@@ -360,15 +371,25 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec
{ {
trilist.SetBool(joinMap.CameraSupportsAutoMode.JoinNumber, true); trilist.SetBool(joinMap.CameraSupportsAutoMode.JoinNumber, true);
(codec as IHasCameraAutoMode).CameraAutoModeIsOnFeedback.InvokeFireUpdate(); (codec as IHasCameraAutoMode).CameraAutoModeIsOnFeedback.FireUpdate();
} }
if (codec is IHasCodecSelfView) if (codec is IHasCodecSelfView)
{ {
(codec as IHasCodecSelfView).SelfviewIsOnFeedback.InvokeFireUpdate(); (codec as IHasCodecSelfView).SelfviewIsOnFeedback.FireUpdate();
} }
SharingContentIsOnFeedback.InvokeFireUpdate(); if (codec is IHasCameraAutoMode)
{
(codec as IHasCameraAutoMode).CameraAutoModeIsOnFeedback.FireUpdate();
}
if (codec is IHasCameraOff)
{
(codec as IHasCameraOff).CameraIsOffFeedback.FireUpdate();
}
SharingContentIsOnFeedback.FireUpdate();
trilist.SetBool(joinMap.HookState.JoinNumber, IsInCall); trilist.SetBool(joinMap.HookState.JoinNumber, IsInCall);
@@ -376,11 +397,53 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec
}; };
} }
private void LinkVideoCodecSelfviewPositionToApi(IHasSelfviewPosition codec, BasicTriList trilist, VideoCodecControllerJoinMap joinMap)
{
trilist.SetSigFalseAction(joinMap.SelfviewPosition.JoinNumber, codec.SelfviewPipPositionToggle);
codec.SelfviewPipPositionFeedback.LinkInputSig(trilist.StringInput[joinMap.SelfviewPositionFb.JoinNumber]);
}
private void LinkVideoCodecCameraOffToApi(IHasCameraOff codec, BasicTriList trilist, VideoCodecControllerJoinMap joinMap) private void LinkVideoCodecCameraOffToApi(IHasCameraOff codec, BasicTriList trilist, VideoCodecControllerJoinMap joinMap)
{ {
codec.CameraIsOffFeedback.LinkInputSig(trilist.BooleanInput[joinMap.CameraModeOff.JoinNumber]);
trilist.SetSigFalseAction(joinMap.CameraModeOff.JoinNumber, codec.CameraOff); trilist.SetSigFalseAction(joinMap.CameraModeOff.JoinNumber, codec.CameraOff);
codec.CameraIsOffFeedback.OutputChange += (o, a) =>
{
if (a.BoolValue)
{
trilist.SetBool(joinMap.CameraModeOff.JoinNumber, true);
trilist.SetBool(joinMap.CameraModeManual.JoinNumber, false);
trilist.SetBool(joinMap.CameraModeAuto.JoinNumber, false);
return;
}
trilist.SetBool(joinMap.CameraModeOff.JoinNumber, false);
var autoCodec = codec as IHasCameraAutoMode;
if (autoCodec == null) return;
trilist.SetBool(joinMap.CameraModeAuto.JoinNumber, autoCodec.CameraAutoModeIsOnFeedback.BoolValue);
trilist.SetBool(joinMap.CameraModeManual.JoinNumber, !autoCodec.CameraAutoModeIsOnFeedback.BoolValue);
};
if (codec.CameraIsOffFeedback.BoolValue)
{
trilist.SetBool(joinMap.CameraModeOff.JoinNumber, true);
trilist.SetBool(joinMap.CameraModeManual.JoinNumber, false);
trilist.SetBool(joinMap.CameraModeAuto.JoinNumber, false);
return;
}
trilist.SetBool(joinMap.CameraModeOff.JoinNumber, false);
var autoModeCodec = codec as IHasCameraAutoMode;
if (autoModeCodec == null) return;
trilist.SetBool(joinMap.CameraModeAuto.JoinNumber, autoModeCodec.CameraAutoModeIsOnFeedback.BoolValue);
trilist.SetBool(joinMap.CameraModeManual.JoinNumber, !autoModeCodec.CameraAutoModeIsOnFeedback.BoolValue);
} }
private void LinkVideoCodecVolumeToApi(BasicTriList trilist, VideoCodecControllerJoinMap joinMap) private void LinkVideoCodecVolumeToApi(BasicTriList trilist, VideoCodecControllerJoinMap joinMap)
@@ -781,12 +844,53 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec
trilist.SetSigFalseAction(joinMap.CameraModeAuto.JoinNumber, codec.CameraAutoModeOn); trilist.SetSigFalseAction(joinMap.CameraModeAuto.JoinNumber, codec.CameraAutoModeOn);
trilist.SetSigFalseAction(joinMap.CameraModeManual.JoinNumber, codec.CameraAutoModeOff); trilist.SetSigFalseAction(joinMap.CameraModeManual.JoinNumber, codec.CameraAutoModeOff);
codec.CameraAutoModeIsOnFeedback.LinkInputSig(trilist.BooleanInput[joinMap.CameraModeAuto.JoinNumber]); codec.CameraAutoModeIsOnFeedback.OutputChange += (o, a) =>
codec.CameraAutoModeIsOnFeedback.LinkComplementInputSig( {
trilist.BooleanInput[joinMap.CameraModeManual.JoinNumber]); var offCodec = codec as IHasCameraOff;
if (offCodec != null)
{
if (offCodec.CameraIsOffFeedback.BoolValue)
{
trilist.SetBool(joinMap.CameraModeAuto.JoinNumber, false);
trilist.SetBool(joinMap.CameraModeManual.JoinNumber, false);
trilist.SetBool(joinMap.CameraModeOff.JoinNumber, true);
return;
} }
trilist.SetBool(joinMap.CameraModeAuto.JoinNumber, a.BoolValue);
trilist.SetBool(joinMap.CameraModeManual.JoinNumber, !a.BoolValue);
trilist.SetBool(joinMap.CameraModeOff.JoinNumber, false);
return;
}
trilist.SetBool(joinMap.CameraModeAuto.JoinNumber, a.BoolValue);
trilist.SetBool(joinMap.CameraModeManual.JoinNumber, !a.BoolValue);
trilist.SetBool(joinMap.CameraModeOff.JoinNumber, false);
};
var offModeCodec = codec as IHasCameraOff;
if (offModeCodec != null)
{
if (offModeCodec.CameraIsOffFeedback.BoolValue)
{
trilist.SetBool(joinMap.CameraModeAuto.JoinNumber, false);
trilist.SetBool(joinMap.CameraModeManual.JoinNumber, false);
trilist.SetBool(joinMap.CameraModeOff.JoinNumber, true);
return;
}
trilist.SetBool(joinMap.CameraModeAuto.JoinNumber, codec.CameraAutoModeIsOnFeedback.BoolValue);
trilist.SetBool(joinMap.CameraModeManual.JoinNumber, !codec.CameraAutoModeIsOnFeedback.BoolValue);
trilist.SetBool(joinMap.CameraModeOff.JoinNumber, false);
return;
}
trilist.SetBool(joinMap.CameraModeAuto.JoinNumber, codec.CameraAutoModeIsOnFeedback.BoolValue);
trilist.SetBool(joinMap.CameraModeManual.JoinNumber, !codec.CameraAutoModeIsOnFeedback.BoolValue);
trilist.SetBool(joinMap.CameraModeOff.JoinNumber, false);
}
private void LinkVideoCodecSelfviewToApi(IHasCodecSelfView codec, BasicTriList trilist, private void LinkVideoCodecSelfviewToApi(IHasCodecSelfView codec, BasicTriList trilist,
VideoCodecControllerJoinMap joinMap) VideoCodecControllerJoinMap joinMap)
@@ -875,8 +979,6 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec
{ {
var i = (ushort) codec.Cameras.FindIndex((c) => c.Key == args.SelectedCamera.Key); var i = (ushort) codec.Cameras.FindIndex((c) => c.Key == args.SelectedCamera.Key);
trilist.SetUshort(joinMap.CameraPresetSelect.JoinNumber, i);
if (codec is IHasCodecRoomPresets) if (codec is IHasCodecRoomPresets)
{ {
return; return;
@@ -891,24 +993,58 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec
SetCameraPresetNames(cam.Presets); SetCameraPresetNames(cam.Presets);
(args.SelectedCamera as IHasCameraPresets).PresetsListHasChanged += (o, eventArgs) => SetCameraPresetNames(cam.Presets); (args.SelectedCamera as IHasCameraPresets).PresetsListHasChanged += (o, eventArgs) => SetCameraPresetNames(cam.Presets);
trilist.SetUShortSigAction(joinMap.CameraPresetSelect.JoinNumber,
(a) =>
{
cam.PresetSelect(a);
trilist.SetUshort(joinMap.CameraPresetSelect.JoinNumber, a);
});
trilist.SetSigFalseAction(joinMap.CameraPresetSave.JoinNumber,
() =>
{
cam.PresetStore(trilist.UShortOutput[joinMap.CameraPresetSelect.JoinNumber].UShortValue,
String.Empty);
trilist.PulseBool(joinMap.CameraPresetSave.JoinNumber, 3000);
});
}; };
if (!(codec is IHasCodecRoomPresets)) return;
var presetCodec = codec as IHasCodecRoomPresets;
presetCodec.CodecRoomPresetsListHasChanged +=
(sender, args) => SetCameraPresetNames(presetCodec.NearEndPresets);
//Camera Presets //Camera Presets
trilist.SetUShortSigAction(joinMap.CameraPresetSelect.JoinNumber, (i) => trilist.SetUShortSigAction(joinMap.CameraPresetSelect.JoinNumber, (i) =>
{ {
if (codec.SelectedCamera == null) return; presetCodec.CodecRoomPresetSelect(i);
var cam = codec.SelectedCamera as IHasCameraPresets;
if (cam == null) return;
cam.PresetSelect(i);
trilist.SetUshort(joinMap.CameraPresetSelect.JoinNumber, i); trilist.SetUshort(joinMap.CameraPresetSelect.JoinNumber, i);
}); });
trilist.SetSigFalseAction(joinMap.CameraPresetSave.JoinNumber,
() =>
{
presetCodec.CodecRoomPresetStore(
trilist.UShortOutput[joinMap.CameraPresetSelect.JoinNumber].UShortValue, String.Empty);
trilist.PulseBool(joinMap.CameraPresetSave.JoinNumber, 3000);
});
} }
private string SetCameraPresetNames(List<CameraPreset> presets) private string SetCameraPresetNames(IEnumerable<CodecRoomPreset> presets)
{
return SetCameraPresetNames(presets.Select(p => p.Description).ToList());
}
private string SetCameraPresetNames(IEnumerable<CameraPreset> presets)
{
return SetCameraPresetNames(presets.Select(p => p.Description).ToList());
}
private string SetCameraPresetNames(ICollection<string> presets)
{ {
var i = 1; //start index for xsig; var i = 1; //start index for xsig;
@@ -916,7 +1052,7 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec
foreach (var preset in presets) foreach (var preset in presets)
{ {
var cameraPreset = new XSigSerialToken(i, preset.Description); var cameraPreset = new XSigSerialToken(i, preset);
tokenArray[i - 1] = cameraPreset; tokenArray[i - 1] = cameraPreset;
i++; i++;
} }

View File

@@ -370,7 +370,20 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
public CallRecordInfo CallRecordInfo { get; set; } public CallRecordInfo CallRecordInfo { get; set; }
public zCommand.InfoResult Info { get; set; } private zCommand.InfoResult _info;
public zCommand.InfoResult Info
{
get
{
return _info;
}
set
{
_info = value;
NotifyPropertyChanged("Info");
}
}
public Call() public Call()
{ {
@@ -702,7 +715,6 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
public class Camera : NotifiableObject public class Camera : NotifiableObject
{ {
private string _muteState;
private bool _mute; private bool _mute;
public bool Mute public bool Mute
@@ -710,30 +722,14 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
get { return _mute; } get { return _mute; }
set set
{ {
Debug.Console(1, "Camera Mute response received: {0}", value);
if (value == _mute) return; if (value == _mute) return;
_mute = value; _mute = value;
NotifyPropertyChanged("Mute"); NotifyPropertyChanged("Mute");
} }
} }
[JsonProperty("mute")]
public string MuteState
{
get
{
return _muteState;
}
set
{
if (value != _muteState)
{
_muteState = value;
Mute = _muteState == "on";
}
}
}
} }
public class Microphone : NotifiableObject public class Microphone : NotifiableObject
@@ -787,12 +783,20 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
DownLeft DownLeft
} }
public class Layout public class Layout:NotifiableObject
{ {
public bool ShareThumb { get; set; } public bool ShareThumb { get; set; }
public eLayoutStyle Style { get; set; } public eLayoutStyle Style { get; set; }
public eLayoutSize Size { get; set; } public eLayoutSize Size { get; set; }
public eLayoutPosition Position { get; set; }
private eLayoutPosition _position;
public eLayoutPosition Position {
get { return _position; }
set
{
_position = value;
NotifyPropertyChanged("Position");
} }
} }
public class Lock public class Lock

View File

@@ -11,16 +11,18 @@ using PepperDash.Core;
using PepperDash.Essentials.Core; using PepperDash.Essentials.Core;
using PepperDash.Essentials.Core.Bridges; using PepperDash.Essentials.Core.Bridges;
using PepperDash.Essentials.Core.Config; using PepperDash.Essentials.Core.Config;
using PepperDash.Essentials.Core.DeviceTypeInterfaces;
using PepperDash.Essentials.Core.Routing; using PepperDash.Essentials.Core.Routing;
using PepperDash.Essentials.Devices.Common.Cameras; using PepperDash.Essentials.Devices.Common.Cameras;
using PepperDash.Essentials.Devices.Common.Codec; using PepperDash.Essentials.Devices.Common.Codec;
using PepperDash.Essentials.Devices.Common.VideoCodec.Cisco;
using PepperDash.Essentials.Devices.Common.VideoCodec.Interfaces; using PepperDash.Essentials.Devices.Common.VideoCodec.Interfaces;
namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom 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, IHasCameraAutoMode IHasScheduleAwareness, IHasCodecCameras, IHasParticipants, IHasCameraOff, IHasCameraAutoMode, IHasFarEndContentStatus, IHasSelfviewPosition
{ {
private const long MeetingRefreshTimer = 60000; private const long MeetingRefreshTimer = 60000;
private const uint DefaultMeetingDurationMin = 30; private const uint DefaultMeetingDurationMin = 30;
@@ -98,6 +100,10 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
CodecSchedule = new CodecScheduleAwareness(MeetingRefreshTimer); CodecSchedule = new CodecScheduleAwareness(MeetingRefreshTimer);
ReceivingContent = new BoolFeedback(FarEndIsSharingContentFeedbackFunc);
SelfviewPipPositionFeedback = new StringFeedback(SelfviewPipPositionFeedbackFunc);
SetUpFeedbackActions(); SetUpFeedbackActions();
Cameras = new List<CameraBase>(); Cameras = new List<CameraBase>();
@@ -152,7 +158,7 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
protected Func<bool> FarEndIsSharingContentFeedbackFunc protected Func<bool> FarEndIsSharingContentFeedbackFunc
{ {
get { return () => false; } get { return () => Status.Call.Sharing.State == zEvent.eSharingState.Receiving; }
} }
protected override Func<bool> MuteFeedbackFunc protected override Func<bool> MuteFeedbackFunc
@@ -183,17 +189,17 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
protected Func<bool> CameraIsOffFeedbackFunc protected Func<bool> CameraIsOffFeedbackFunc
{ {
get { return () => Configuration.Camera.Mute; } get { return () => Configuration.Call.Camera.Mute; }
} }
protected Func<bool> CameraAutoModeIsOnFeedbackFunc protected Func<bool> CameraAutoModeIsOnFeedbackFunc
{ {
get { return () => !Configuration.Camera.Mute; } get { return () => false; }
} }
protected Func<string> SelfviewPipPositionFeedbackFunc protected Func<string> SelfviewPipPositionFeedbackFunc
{ {
get { return () => ""; } get { return () => _currentSelfviewPipPosition.Command; }
} }
protected Func<string> LocalLayoutFeedbackFunc protected Func<string> LocalLayoutFeedbackFunc
@@ -432,11 +438,23 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
} }
}; };
Configuration.Camera.PropertyChanged += (o, a) => Configuration.Call.Camera.PropertyChanged += (o, a) =>
{ {
Debug.Console(1, this, "Configuration.Call.Camera.PropertyChanged: {0}", a.PropertyName);
if (a.PropertyName != "Mute") return; if (a.PropertyName != "Mute") return;
CameraIsOffFeedback.FireUpdate(); CameraIsOffFeedback.FireUpdate();
CameraAutoModeIsOnFeedback.FireUpdate();
};
Configuration.Call.Layout.PropertyChanged += (o, a) =>
{
if (a.PropertyName != "Position") return;
ComputeSelfviewPipStatus();
SelfviewPipPositionFeedback.FireUpdate();
}; };
Status.Call.Sharing.PropertyChanged += (o, a) => Status.Call.Sharing.PropertyChanged += (o, a) =>
@@ -444,6 +462,16 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
if (a.PropertyName == "State") if (a.PropertyName == "State")
{ {
SharingContentIsOnFeedback.FireUpdate(); SharingContentIsOnFeedback.FireUpdate();
ReceivingContent.FireUpdate();
}
};
Status.Call.PropertyChanged += (o, a) =>
{
if (a.PropertyName == "Info")
{
Debug.Console(1, this, "Updating Call Status");
UpdateCallStatus();
} }
}; };
@@ -658,6 +686,7 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
_syncState.AddQueryToQueue("zCommand Bookings List"); _syncState.AddQueryToQueue("zCommand Bookings List");
_syncState.AddQueryToQueue("zCommand Call ListParticipants"); _syncState.AddQueryToQueue("zCommand Call ListParticipants");
_syncState.AddQueryToQueue("zCommand Call Info");
_syncState.StartSync(); _syncState.StartSync();
@@ -670,6 +699,14 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
private void ProcessMessage(string message) private void ProcessMessage(string message)
{ {
// Counts the curly braces // Counts the curly braces
if (message.Contains("client_loop: send disconnect: Broken pipe"))
{
Debug.Console(0, this, Debug.ErrorLogLevel.Error,
"Zoom Room Controller or App connected. Essentials will NOT control the Zoom Room until it is disconnected.");
return;
}
if (message.Contains('{')) if (message.Contains('{'))
{ {
_jsonCurlyBraceCounter++; _jsonCurlyBraceCounter++;
@@ -759,9 +796,9 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
SendText("zFeedback Register Op: ex Path: /Event/InfoResult/info/callout_country_list"); SendText("zFeedback Register Op: ex Path: /Event/InfoResult/info/callout_country_list");
Thread.Sleep(100); Thread.Sleep(100);
if (!_props.DisablePhonebookAutoDownload) if (_props.DisablePhonebookAutoDownload)
{ {
SendText("zFeedback Register "); SendText("zFeedback Register Op: ex Path: /Event/Phonebook/AddedContact");
} }
// switch to json format // switch to json format
SendText("format json"); SendText("format json");
@@ -841,6 +878,11 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
{ {
switch (topKey.ToLower()) switch (topKey.ToLower())
{ {
case "inforesult":
{
JsonConvert.PopulateObject(responseObj.ToString(), Status.Call.Info);
break;
}
case "phonebooklistresult": case "phonebooklistresult":
{ {
JsonConvert.PopulateObject(responseObj.ToString(), Status.Phonebook); JsonConvert.PopulateObject(responseObj.ToString(), Status.Phonebook);
@@ -1160,6 +1202,8 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
{ {
JsonConvert.PopulateObject(responseObj.ToString(), Status.Sharing); JsonConvert.PopulateObject(responseObj.ToString(), Status.Sharing);
SetLayout();
break; break;
} }
case "numberofscreens": case "numberofscreens":
@@ -1224,6 +1268,24 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
} }
} }
private void SetLayout()
{
if(!_props.AutoDefaultLayouts) return;
if (
(Status.Call.Sharing.State == zEvent.eSharingState.Receiving ||
Status.Call.Sharing.State == zEvent.eSharingState.Sending))
{
SendText(String.Format("zconfiguration call layout style: {0}",
_props.DefaultSharingLayout));
}
else
{
SendText(String.Format("zconfiguration call layout style: {0}",
_props.DefaultCallLayout));
}
}
public void PrintCurrentCallParticipants() public void PrintCurrentCallParticipants()
{ {
if (Debug.Level <= 0) if (Debug.Level <= 0)
@@ -1329,6 +1391,15 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
Debug.Console(1, this, "**************************************************************************"); Debug.Console(1, this, "**************************************************************************");
} }
protected override void OnCallStatusChange(CodecActiveCallItem item)
{
base.OnCallStatusChange(item);
if (_props.AutoDefaultLayouts)
{
SetLayout();
}
}
public override void StartSharing() public override void StartSharing()
{ {
throw new NotImplementedException(); throw new NotImplementedException();
@@ -1631,6 +1702,52 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
public BoolFeedback CameraAutoModeIsOnFeedback { get; private set; } public BoolFeedback CameraAutoModeIsOnFeedback { get; private set; }
#endregion #endregion
#region Implementation of IHasFarEndContentStatus
public BoolFeedback ReceivingContent { get; private set; }
#endregion
#region Implementation of IHasSelfviewPosition
private CodecCommandWithLabel _currentSelfviewPipPosition;
public StringFeedback SelfviewPipPositionFeedback { get; private set; }
public void SelfviewPipPositionSet(CodecCommandWithLabel position)
{
SendText(String.Format("zConfiguration Call Layout Position: {0}", position.Command));
}
public void SelfviewPipPositionToggle()
{
if (_currentSelfviewPipPosition != null)
{
var nextPipPositionIndex = SelfviewPipPositions.IndexOf(_currentSelfviewPipPosition) + 1;
if (nextPipPositionIndex >= SelfviewPipPositions.Count) // Check if we need to loop back to the first item in the list
nextPipPositionIndex = 0;
SelfviewPipPositionSet(SelfviewPipPositions[nextPipPositionIndex]);
}
}
public List<CodecCommandWithLabel> SelfviewPipPositions = new List<CodecCommandWithLabel>()
{
new CodecCommandWithLabel("UpLeft", "Center Left"),
new CodecCommandWithLabel("UpRight", "Center Right"),
new CodecCommandWithLabel("DownLeft", "Lower Left"),
new CodecCommandWithLabel("DownRight", "Lower Right")
};
void ComputeSelfviewPipStatus()
{
_currentSelfviewPipPosition =
SelfviewPipPositions.FirstOrDefault(
p => p.Command.ToLower().Equals(Configuration.Call.Layout.Position.ToString()));
}
#endregion
} }
/// <summary> /// <summary>

View File

@@ -68,7 +68,6 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
/// <summary> /// <summary>
/// Builds the command and triggers the parent ZoomRoom to send it /// Builds the command and triggers the parent ZoomRoom to send it
/// </summary> /// </summary>
/// <param name="id"></param>
/// <param name="state"></param> /// <param name="state"></param>
/// <param name="action"></param> /// <param name="action"></param>
void SendCommand(eZoomRoomCameraState state, eZoomRoomCameraAction action) void SendCommand(eZoomRoomCameraState state, eZoomRoomCameraAction action)
@@ -86,16 +85,18 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
void SendContinueAction(eZoomRoomCameraAction action) void SendContinueAction(eZoomRoomCameraAction action)
{ {
SendCommand(eZoomRoomCameraState.Continue, action); SendCommand(eZoomRoomCameraState.Continue, action);
ContinueTimer.Reset();
} }
void StopContinueTimer() void StopContinueTimer()
{ {
if (ContinueTimer != null) if (ContinueTimer == null)
{ {
return;
}
ContinueTimer.Stop(); ContinueTimer.Stop();
ContinueTimer.Dispose(); ContinueTimer.Dispose();
} ContinueTimer = null;
} }
#region IHasCameraPtzControl Members #region IHasCameraPtzControl Members
@@ -111,23 +112,27 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
public void PanLeft() public void PanLeft()
{ {
if (!isMoving) if (isMoving)
{ {
return;
}
SendCommand(eZoomRoomCameraState.Start, eZoomRoomCameraAction.Left); SendCommand(eZoomRoomCameraState.Start, eZoomRoomCameraAction.Left);
StartContinueTimer(); StartContinueTimer();
isPanning = true; isPanning = true;
} }
}
public void PanRight() public void PanRight()
{ {
if (!isMoving) if (isMoving)
{ {
return;
}
SendCommand(eZoomRoomCameraState.Start, eZoomRoomCameraAction.Right); SendCommand(eZoomRoomCameraState.Start, eZoomRoomCameraAction.Right);
StartContinueTimer(); StartContinueTimer();
isPanning = true; isPanning = true;
} }
}
public void PanStop() public void PanStop()
{ {

View File

@@ -16,5 +16,14 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
public bool DisablePhonebookAutoDownload { get; set; } public bool DisablePhonebookAutoDownload { get; set; }
public bool SupportsCameraAutoMode { get; set; } public bool SupportsCameraAutoMode { get; set; }
public bool SupportsCameraOff { get; set; } public bool SupportsCameraOff { get; set; }
//if true, the layouts will be set automatically when sharing starts/ends or a call is joined
public bool AutoDefaultLayouts { get; set; }
/* This layout will be selected when Sharing starts (either from Far end or locally)*/
public string DefaultSharingLayout { get; set; }
//This layout will be selected when a call is connected and no content is being shared
public string DefaultCallLayout { get; set; }
} }
} }

View File

@@ -1,3 +1,3 @@
<packages> <packages>
<package id="PepperDashCore" version="1.0.43-alpha-170" targetFramework="net35" allowedVersions="[1.0,1.1)"/> <package id="PepperDashCore" version="1.0.42" targetFramework="net35" allowedVersions="[1.0,1.1)"/>
</packages> </packages>