diff --git a/Essentials Core/PepperDashEssentialsBase/Routing/RoutingPortNames.cs b/Essentials Core/PepperDashEssentialsBase/Routing/RoutingPortNames.cs
index c50055fd..7e72230b 100644
--- a/Essentials Core/PepperDashEssentialsBase/Routing/RoutingPortNames.cs
+++ b/Essentials Core/PepperDashEssentialsBase/Routing/RoutingPortNames.cs
@@ -132,6 +132,30 @@ namespace PepperDash.Essentials.Core.Routing
///
public const string HdmiOut = "hdmiOut";
///
+ /// hdmiOut1
+ ///
+ public const string HdmiOut1 = "hdmiOut1";
+ ///
+ /// hdmiOut2
+ ///
+ public const string HdmiOut2 = "hdmiOut2";
+ ///
+ /// hdmiOut3
+ ///
+ public const string HdmiOut3 = "hdmiOut3";
+ ///
+ /// hdmiOut4
+ ///
+ public const string HdmiOut4 = "hdmiOut4";
+ ///
+ /// hdmiOut5
+ ///
+ public const string HdmiOut5 = "hdmiOut5";
+ ///
+ /// hdmiOut6
+ ///
+ public const string HdmiOut6 = "hdmiOut6";
+ ///
/// none
///
public const string None = "none";
diff --git a/Essentials Devices Common/Essentials Devices Common/VideoCodec/CiscoCodec/CiscoSparkCodec.cs b/Essentials Devices Common/Essentials Devices Common/VideoCodec/CiscoCodec/CiscoSparkCodec.cs
index 2eb023df..d148a45d 100644
--- a/Essentials Devices Common/Essentials Devices Common/VideoCodec/CiscoCodec/CiscoSparkCodec.cs
+++ b/Essentials Devices Common/Essentials Devices Common/VideoCodec/CiscoCodec/CiscoSparkCodec.cs
@@ -207,10 +207,12 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco
public bool CommDebuggingIsOn;
-
string Delimiter = "\r\n";
- int PresentationSource;
+ ///
+ /// Used to track the current connector used for the presentation source
+ ///
+ int PresentationSourceConnector;
string PresentationSourceKey;
@@ -227,9 +229,11 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco
// **___________________________________________________________________**
public RoutingInputPort CodecOsdIn { get; private set; }
- public RoutingInputPort HdmiIn1 { get; private set; }
public RoutingInputPort HdmiIn2 { get; private set; }
- public RoutingOutputPort HdmiOut { get; private set; }
+ public RoutingInputPort HdmiIn3 { get; private set; }
+ public RoutingOutputPort HdmiOut1 { get; private set; }
+ public RoutingOutputPort HdmiOut2 { get; private set; }
+
// Constructor for IBasicCommunication
public CiscoSparkCodec(string key, string name, IBasicCommunication comm, CiscoSparkCodecPropertiesConfig props )
@@ -304,18 +308,20 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco
CodecOsdIn = new RoutingInputPort(RoutingPortNames.CodecOsd, eRoutingSignalType.AudioVideo,
eRoutingPortConnectionType.Hdmi, new Action(StopSharing), this);
- HdmiIn1 = new RoutingInputPort(RoutingPortNames.HdmiIn1, eRoutingSignalType.AudioVideo,
- eRoutingPortConnectionType.Hdmi, new Action(SelectPresentationSource1), this);
HdmiIn2 = new RoutingInputPort(RoutingPortNames.HdmiIn2, eRoutingSignalType.AudioVideo,
- eRoutingPortConnectionType.Hdmi, new Action(SelectPresentationSource2), this);
+ eRoutingPortConnectionType.Hdmi, new Action(SelectPresentationSourceConnector2), this);
+ HdmiIn3 = new RoutingInputPort(RoutingPortNames.HdmiIn3, eRoutingSignalType.AudioVideo,
+ eRoutingPortConnectionType.Hdmi, new Action(SelectPresentationSourceConnector3), this);
- HdmiOut = new RoutingOutputPort(RoutingPortNames.HdmiOut, eRoutingSignalType.AudioVideo,
+ HdmiOut1 = new RoutingOutputPort(RoutingPortNames.HdmiOut1, eRoutingSignalType.AudioVideo,
eRoutingPortConnectionType.Hdmi, null, this);
+ HdmiOut2 = new RoutingOutputPort(RoutingPortNames.HdmiOut2, eRoutingSignalType.AudioVideo,
+ eRoutingPortConnectionType.Hdmi, null, this);
InputPorts.Add(CodecOsdIn);
- InputPorts.Add(HdmiIn1);
InputPorts.Add(HdmiIn2);
- OutputPorts.Add(HdmiOut);
+ InputPorts.Add(HdmiIn3);
+ OutputPorts.Add(HdmiOut1);
CreateOsdSource();
}
@@ -540,6 +546,19 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco
JsonConvert.PopulateObject(response, tempCodecStatus);
+ // Check to see if the message contains /Status/Conference/Presentation/LocalInstance and extract source value
+ var conference = tempCodecStatus.Status.Conference;
+
+ if (conference.Presentation.LocalInstance.Count > 0)
+ {
+ if (!string.IsNullOrEmpty(conference.Presentation.LocalInstance[0].ghost))
+ PresentationSourceConnector = 0;
+ else if (conference.Presentation.LocalInstance[0].Source != null)
+ {
+ PresentationSourceConnector = conference.Presentation.LocalInstance[0].Source.IntValue;
+ }
+ }
+
// Check to see if this is a call status message received after the initial status message
if (tempCodecStatus.Status.Call.Count > 0)
{
@@ -783,6 +802,7 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco
public void ExecuteSwitch(object inputSelector, object outputSelector, eRoutingSignalType signalType)
{
ExecuteSwitch(inputSelector);
+ PresentationSourceKey = inputSelector.ToString();
}
@@ -972,9 +992,9 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco
}
}
- public void SelectPresentationSource(int source)
+ public void SelectPresentationByConnector(int connector)
{
- PresentationSource = source;
+ PresentationSourceConnector = connector;
StartSharing();
}
@@ -982,17 +1002,17 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco
///
/// Select source 1 as the presetnation source
///
- public void SelectPresentationSource1()
+ public void SelectPresentationSourceConnector2()
{
- SelectPresentationSource(1);
+ SelectPresentationByConnector(2);
}
///
/// Select source 2 as the presetnation source
///
- public void SelectPresentationSource2()
+ public void SelectPresentationSourceConnector3()
{
- SelectPresentationSource(2);
+ SelectPresentationByConnector(3);
}
///
@@ -1007,7 +1027,7 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco
else
sendingMode = "LocalOnly";
- SendText(string.Format("xCommand Presentation Start PresentationSource: {0} SendingMode: {1}", PresentationSource, sendingMode));
+ SendText(string.Format("xCommand Presentation Start PresentationSource: {0} SendingMode: {1}", PresentationSourceConnector, sendingMode));
}
///
@@ -1015,6 +1035,8 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco
///
public override void StopSharing()
{
+ PresentationSourceConnector = 0;
+
SendText("xCommand Presentation Stop");
}
diff --git a/Essentials Devices Common/Essentials Devices Common/VideoCodec/CiscoCodec/xStatus.cs b/Essentials Devices Common/Essentials Devices Common/VideoCodec/CiscoCodec/xStatus.cs
index 46b1dcfb..e33606f0 100644
--- a/Essentials Devices Common/Essentials Devices Common/VideoCodec/CiscoCodec/xStatus.cs
+++ b/Essentials Devices Common/Essentials Devices Common/VideoCodec/CiscoCodec/xStatus.cs
@@ -397,9 +397,39 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco
public RequestFloorAvailability RequestFloorAvailability { get; set; }
}
- public class Source2
+ public class Source2 : ValueProperty
{
- public string Value { get; set; }
+ string _Value;
+
+ ///
+ /// Sets Value and triggers the action when set
+ ///
+ public string Value
+ {
+ get
+ {
+ return _Value;
+ }
+ set
+ {
+ _Value = value;
+ OnValueChanged();
+ }
+ }
+
+ ///
+ /// Converted value of _Value for use as feedback
+ ///
+ public int IntValue
+ {
+ get
+ {
+ if (!string.IsNullOrEmpty(_Value))
+ return Convert.ToInt32(_Value);
+ else
+ return 0;
+ }
+ }
}
public class SendingMode
@@ -410,16 +440,22 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco
public class LocalInstance
{
public string id { get; set; }
+ public string ghost { get; set; }
public SendingMode SendingMode {get; set;}
public Source2 Source { get; set; }
+
+ public LocalInstance()
+ {
+ Source = new Source2();
+ }
}
public class Presentation
{
- public CallId2 CallId { get; set; }
- public Mode2 Mode { get; set; }
- public Whiteboard Whiteboard { get; set; }
- public List LocalInstance { get; set; }
+ public CallId2 CallId { get; set; }
+ public Mode2 Mode { get; set; }
+ public Whiteboard Whiteboard { get; set; }
+ public List LocalInstance { get; set; }
public Presentation()
{
diff --git a/Essentials/PepperDashEssentials/UIDrivers/EssentialsHuddleVTC/EssentialsHuddleVtc1PanelAvFunctionsDriver.cs b/Essentials/PepperDashEssentials/UIDrivers/EssentialsHuddleVTC/EssentialsHuddleVtc1PanelAvFunctionsDriver.cs
index ae348e62..e42ee37f 100644
--- a/Essentials/PepperDashEssentials/UIDrivers/EssentialsHuddleVTC/EssentialsHuddleVtc1PanelAvFunctionsDriver.cs
+++ b/Essentials/PepperDashEssentials/UIDrivers/EssentialsHuddleVTC/EssentialsHuddleVtc1PanelAvFunctionsDriver.cs
@@ -73,6 +73,8 @@ namespace PepperDash.Essentials
StringInputSig HeaderCallButtonIconSig;
+ BoolFeedback CallSharingInfoVisibleFeedback;
+
///
/// The parent driver for this
@@ -185,12 +187,7 @@ namespace PepperDash.Essentials
CTimer NextMeetingTimer;
- ///
- /// Tracks whether the user dismissed the meeting popup, while the system was on. Always false when
- /// system is off.
- ///
- bool NextMeetingWarningWasDismissed;
- ///
+ ///
/// Tracks the last meeting that was cancelled
///
Meeting LastMeetingDismissed;
@@ -945,6 +942,16 @@ namespace PepperDash.Essentials
_CurrentRoom.CurrentSingleSourceChange += CurrentRoom_SourceInfoChange;
RefreshSourceInfo();
+
+ CallSharingInfoVisibleFeedback = new BoolFeedback(() => _CurrentRoom.VideoCodec.SharingContentIsOnFeedback.BoolValue);
+ _CurrentRoom.VideoCodec.SharingContentIsOnFeedback.OutputChange += new EventHandler(SharingContentIsOnFeedback_OutputChange);
+ CallSharingInfoVisibleFeedback.LinkInputSig(TriList.BooleanInput[UIBoolJoin.CallSharedSourceInfoVisible]);
+
+ SetActiveCallListSharingContentStatus();
+
+ if (_CurrentRoom != null)
+ _CurrentRoom.CurrentSingleSourceChange += new SourceInfoChangeHandler(CurrentRoom_CurrentSingleSourceChange);
+
SetupHeaderButtons();
}
else
@@ -954,6 +961,46 @@ namespace PepperDash.Essentials
}
}
+ ///
+ /// Updates the current shared source label on the call list when the source changes
+ ///
+ ///
+ ///
+ ///
+ void CurrentRoom_CurrentSingleSourceChange(EssentialsRoomBase room, SourceListItem info, ChangeType type)
+ {
+ if (_CurrentRoom.VideoCodec.SharingContentIsOnFeedback.BoolValue)
+ TriList.StringInput[UIStringJoin.CallSharedSourceNameText].StringValue = _CurrentRoom.CurrentSourceInfo.PreferredName;
+ }
+
+ ///
+ /// Fires when the sharing source feedback of the codec changes
+ ///
+ ///
+ ///
+ void SharingContentIsOnFeedback_OutputChange(object sender, EventArgs e)
+ {
+ SetActiveCallListSharingContentStatus();
+ }
+
+ ///
+ /// Sets the values for the text and button visibilty for the active call list source sharing info
+ ///
+ void SetActiveCallListSharingContentStatus()
+ {
+ CallSharingInfoVisibleFeedback.FireUpdate();
+
+ string callListSharedSourceLabel;
+
+ if (_CurrentRoom.VideoCodec.SharingContentIsOnFeedback.BoolValue)
+ callListSharedSourceLabel = _CurrentRoom.CurrentSourceInfo.PreferredName;
+ else
+ callListSharedSourceLabel = "None";
+
+ TriList.StringInput[UIStringJoin.CallSharedSourceNameText].StringValue = callListSharedSourceLabel;
+ }
+
+
///
///
///
@@ -1456,7 +1503,6 @@ namespace PepperDash.Essentials
{
PepperDash.Essentials.Core.Touchpanels.Keyboards.HabaneroKeyboardController Keyboard { get; }
JoinedSigInterlock PopupInterlock { get; }
- EssentialsHuddleVtc1Room CurrentRoom { get; }
void ShowNotificationRibbon(string message, int timeout);
void HideNotificationRibbon();
void ComputeHeaderCallStatus(VideoCodecBase codec);
diff --git a/Essentials/PepperDashEssentials/UIDrivers/VC/EssentialsVideoCodecUiDriver.cs b/Essentials/PepperDashEssentials/UIDrivers/VC/EssentialsVideoCodecUiDriver.cs
index 02fa848b..4fad912a 100644
--- a/Essentials/PepperDashEssentials/UIDrivers/VC/EssentialsVideoCodecUiDriver.cs
+++ b/Essentials/PepperDashEssentials/UIDrivers/VC/EssentialsVideoCodecUiDriver.cs
@@ -79,9 +79,6 @@ namespace PepperDash.Essentials.UIDrivers.VC
StringBuilder SearchStringBuilder = new StringBuilder();
BoolFeedback SearchStringBackspaceVisibleFeedback;
- BoolFeedback CallSharingInfoVisibleFeedback;
- //StringFeedback CallSharingInfoTextFeedback;
-
ModalDialog IncomingCallModal;
eKeypadMode KeypadMode;
@@ -106,7 +103,7 @@ namespace PepperDash.Essentials.UIDrivers.VC
Parent = parent;
SetupCallStagingPopover();
SetupDialKeypad();
- ActiveCallsSRL = new SubpageReferenceList(TriList, UISmartObjectJoin.CodecActiveCallsHeaderList, 3, 3, 3);
+ ActiveCallsSRL = new SubpageReferenceList(triList, UISmartObjectJoin.CodecActiveCallsHeaderList, 5,5,5);
SetupDirectoryList();
SetupRecentCallsList();
SetupFavorites();
@@ -148,7 +145,7 @@ namespace PepperDash.Essentials.UIDrivers.VC
DialStringBackspaceVisibleFeedback = new BoolFeedback(() => DialStringBuilder.Length > 0);
DialStringBackspaceVisibleFeedback
- .LinkInputSig(TriList.BooleanInput[UIBoolJoin.VCKeypadBackspaceVisible]);
+ .LinkInputSig(triList.BooleanInput[UIBoolJoin.VCKeypadBackspaceVisible]);
SearchStringFeedback = new StringFeedback(() =>
{
@@ -168,26 +165,21 @@ namespace PepperDash.Essentials.UIDrivers.VC
SearchStringBackspaceVisibleFeedback = new BoolFeedback(() => SearchStringBuilder.Length > 0);
SearchStringBackspaceVisibleFeedback.LinkInputSig(triList.BooleanInput[UIBoolJoin.VCDirectoryBackspaceVisible]);
- TriList.SetSigFalseAction(UIBoolJoin.VCDirectoryBackPress, GetDirectoryParentFolderContents);
+ triList.SetSigFalseAction(UIBoolJoin.VCDirectoryBackPress, GetDirectoryParentFolderContents);
DirectoryBackButtonVisibleFeedback = new BoolFeedback(() => CurrentDirectoryResult != (codec as IHasDirectory).DirectoryRoot);
DirectoryBackButtonVisibleFeedback
- .LinkInputSig(TriList.BooleanInput[UIBoolJoin.VCDirectoryBackVisible]);
+ .LinkInputSig(triList.BooleanInput[UIBoolJoin.VCDirectoryBackVisible]);
- TriList.SetSigFalseAction(UIBoolJoin.VCKeypadTextPress, RevealKeyboard);
+ triList.SetSigFalseAction(UIBoolJoin.VCKeypadTextPress, RevealKeyboard);
- TriList.SetSigFalseAction(UIBoolJoin.VCDirectorySearchTextPress, RevealKeyboard);
+ triList.SetSigFalseAction(UIBoolJoin.VCDirectorySearchTextPress, RevealKeyboard);
//TriList.SetSigFalseAction(UIBoolJoin.VCDirectoryBackspacePress, SearchKeypadBackspacePress);
- TriList.SetSigHeldAction(UIBoolJoin.VCDirectoryBackspacePress, 500,
+ triList.SetSigHeldAction(UIBoolJoin.VCDirectoryBackspacePress, 500,
StartSearchBackspaceRepeat, StopSearchBackspaceRepeat, SearchKeypadBackspacePress);
- CallSharingInfoVisibleFeedback = new BoolFeedback(() => Codec.SharingContentIsOnFeedback.BoolValue);
- codec.SharingContentIsOnFeedback.OutputChange += new EventHandler(SharingContentIsOnFeedback_OutputChange);
- CallSharingInfoVisibleFeedback.LinkInputSig(triList.BooleanInput[UIBoolJoin.CallSharedSourceInfoVisible]);
- Parent.CurrentRoom.CurrentSingleSourceChange += new SourceInfoChangeHandler(CurrentRoom_CurrentSingleSourceChange);
-
- TriList.SetSigFalseAction(UIBoolJoin.CallStopSharingPress, Codec.StopSharing);
+ triList.SetSigFalseAction(UIBoolJoin.CallStopSharingPress, Codec.StopSharing);
}
catch (Exception e)
{
@@ -195,36 +187,6 @@ namespace PepperDash.Essentials.UIDrivers.VC
}
}
- ///
- /// Updates the current shared source label on the call list when the source changes
- ///
- ///
- ///
- ///
- void CurrentRoom_CurrentSingleSourceChange(EssentialsRoomBase room, SourceListItem info, ChangeType type)
- {
- if (Codec.SharingContentIsOnFeedback.BoolValue)
- TriList.StringInput[UIStringJoin.CallSharedSourceNameText].StringValue = Parent.CurrentRoom.CurrentSourceInfo.PreferredName;
- }
-
- ///
- /// Fires when the sharing source feedback of the codec changes
- ///
- ///
- ///
- void SharingContentIsOnFeedback_OutputChange(object sender, EventArgs e)
- {
- CallSharingInfoVisibleFeedback.FireUpdate();
-
- string callListSharedSourceLabel;
-
- if (Codec.SharingContentIsOnFeedback.BoolValue)
- callListSharedSourceLabel = Parent.CurrentRoom.CurrentSourceInfo.PreferredName;
- else
- callListSharedSourceLabel = "None";
-
- TriList.StringInput[UIStringJoin.CallSharedSourceNameText].StringValue = callListSharedSourceLabel;
- }
///
///
@@ -336,6 +298,7 @@ namespace PepperDash.Essentials.UIDrivers.VC
ActiveCallsSRL.StringInputSig(i, 1).StringValue = c.Name;
ActiveCallsSRL.StringInputSig(i, 2).StringValue = c.Number;
ActiveCallsSRL.StringInputSig(i, 3).StringValue = c.Status.ToString();
+ ActiveCallsSRL.StringInputSig(i, 4).StringValue = string.Format("Participant {0}", i);
ActiveCallsSRL.UShortInputSig(i, 1).UShortValue = (ushort)(c.Type == eCodecCallType.Video ? 2 : 1);
var cc = c; // for scope in lambda
ActiveCallsSRL.GetBoolFeedbackSig(i, 1).SetSigFalseAction(() => Codec.EndCall(cc));