diff --git a/Essentials Core/PepperDashEssentialsBase/PepperDash_Essentials_Core.csproj b/Essentials Core/PepperDashEssentialsBase/PepperDash_Essentials_Core.csproj
index 94e66af1..6fe716eb 100644
--- a/Essentials Core/PepperDashEssentialsBase/PepperDash_Essentials_Core.csproj
+++ b/Essentials Core/PepperDashEssentialsBase/PepperDash_Essentials_Core.csproj
@@ -184,6 +184,7 @@
+
@@ -208,7 +209,7 @@
-
+
@@ -216,9 +217,9 @@
-
-
-
+
+
+
diff --git a/Essentials Core/PepperDashEssentialsBase/SubpageReferencList/DeviceStatusListController.cs b/Essentials Core/PepperDashEssentialsBase/SmartObjects/SubpageReferencList/DeviceStatusListController.cs
similarity index 100%
rename from Essentials Core/PepperDashEssentialsBase/SubpageReferencList/DeviceStatusListController.cs
rename to Essentials Core/PepperDashEssentialsBase/SmartObjects/SubpageReferencList/DeviceStatusListController.cs
diff --git a/Essentials Core/PepperDashEssentialsBase/SubpageReferencList/SourceListSubpageReferenceList.cs b/Essentials Core/PepperDashEssentialsBase/SmartObjects/SubpageReferencList/SourceListSubpageReferenceList.cs
similarity index 100%
rename from Essentials Core/PepperDashEssentialsBase/SubpageReferencList/SourceListSubpageReferenceList.cs
rename to Essentials Core/PepperDashEssentialsBase/SmartObjects/SubpageReferencList/SourceListSubpageReferenceList.cs
diff --git a/Essentials Core/PepperDashEssentialsBase/SubpageReferencList/SubpageReferenceList.cs b/Essentials Core/PepperDashEssentialsBase/SmartObjects/SubpageReferencList/SubpageReferenceList.cs
similarity index 100%
rename from Essentials Core/PepperDashEssentialsBase/SubpageReferencList/SubpageReferenceList.cs
rename to Essentials Core/PepperDashEssentialsBase/SmartObjects/SubpageReferencList/SubpageReferenceList.cs
diff --git a/Essentials Core/PepperDashEssentialsBase/SubpageReferencList/SubpageReferenceListItem.cs b/Essentials Core/PepperDashEssentialsBase/SmartObjects/SubpageReferencList/SubpageReferenceListItem.cs
similarity index 100%
rename from Essentials Core/PepperDashEssentialsBase/SubpageReferencList/SubpageReferenceListItem.cs
rename to Essentials Core/PepperDashEssentialsBase/SmartObjects/SubpageReferencList/SubpageReferenceListItem.cs
diff --git a/Essentials Core/PepperDashEssentialsBase/Touchpanels/Keyboards/HabaneroKeyboardController.cs b/Essentials Core/PepperDashEssentialsBase/Touchpanels/Keyboards/HabaneroKeyboardController.cs
new file mode 100644
index 00000000..8422ed0a
--- /dev/null
+++ b/Essentials Core/PepperDashEssentialsBase/Touchpanels/Keyboards/HabaneroKeyboardController.cs
@@ -0,0 +1,251 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using Crestron.SimplSharp;
+using Crestron.SimplSharpPro.DeviceSupport;
+
+namespace PepperDash.Essentials.Core.Touchpanels.Keyboards
+{
+ public class HabaneroKeyboardController
+ {
+ public BasicTriList TriList { get; private set; }
+
+ public StringFeedback OutputFeedback { get; private set; }
+
+ public bool IsVisible { get; private set; }
+
+ int ShiftMode;
+
+ StringBuilder Output;
+
+ public Action HideAction { get; set; }
+
+ ///
+ ///
+ ///
+ ///
+ public HabaneroKeyboardController(BasicTriList trilist)
+ {
+ TriList = trilist;
+ Output = new StringBuilder();
+ OutputFeedback = new StringFeedback(() => Output.ToString());
+
+ }
+
+ ///
+ /// Shows the keyboard and attaches sig handlers in the range of 2901-2969
+ ///
+ public void Show()
+ {
+ if (IsVisible)
+ return;
+
+ TriList.SetSigTrueAction(KeyboardClosePress, Hide);
+ TriList.SetSigTrueAction(2921, () => Append(A(ShiftMode)));
+ TriList.SetSigTrueAction(2922, () => Append(B(ShiftMode)));
+ TriList.SetSigTrueAction(2923, () => Append(C(ShiftMode)));
+ TriList.SetSigTrueAction(2924, () => Append(D(ShiftMode)));
+ TriList.SetSigTrueAction(2925, () => Append(E(ShiftMode)));
+ TriList.SetSigTrueAction(2926, () => Append(F(ShiftMode)));
+ TriList.SetSigTrueAction(2927, () => Append(G(ShiftMode)));
+ TriList.SetSigTrueAction(2928, () => Append(H(ShiftMode)));
+ TriList.SetSigTrueAction(2929, () => Append(I(ShiftMode)));
+ TriList.SetSigTrueAction(2930, () => Append(J(ShiftMode)));
+ TriList.SetSigTrueAction(2931, () => Append(K(ShiftMode)));
+ TriList.SetSigTrueAction(2932, () => Append(L(ShiftMode)));
+ TriList.SetSigTrueAction(2933, () => Append(M(ShiftMode)));
+ TriList.SetSigTrueAction(2934, () => Append(N(ShiftMode)));
+ TriList.SetSigTrueAction(2935, () => Append(O(ShiftMode)));
+ TriList.SetSigTrueAction(2936, () => Append(P(ShiftMode)));
+ TriList.SetSigTrueAction(2937, () => Append(Q(ShiftMode)));
+ TriList.SetSigTrueAction(2938, () => Append(R(ShiftMode)));
+ TriList.SetSigTrueAction(2939, () => Append(S(ShiftMode)));
+ TriList.SetSigTrueAction(2940, () => Append(T(ShiftMode)));
+ TriList.SetSigTrueAction(2941, () => Append(U(ShiftMode)));
+ TriList.SetSigTrueAction(2942, () => Append(V(ShiftMode)));
+ TriList.SetSigTrueAction(2943, () => Append(W(ShiftMode)));
+ TriList.SetSigTrueAction(2944, () => Append(X(ShiftMode)));
+ TriList.SetSigTrueAction(2945, () => Append(Y(ShiftMode)));
+ TriList.SetSigTrueAction(2946, () => Append(Z(ShiftMode)));
+ TriList.SetSigTrueAction(2947, () => Append('.'));
+ TriList.SetSigTrueAction(2948, () => Append('@'));
+ TriList.SetSigTrueAction(2949, () => Append(' '));
+ TriList.SetSigTrueAction(2950, Backspace);
+ TriList.SetSigTrueAction(2951, Clear);
+ TriList.SetSigTrueAction(2952, Shift);
+ TriList.SetSigTrueAction(2953, NumShift);
+
+ TriList.SetBool(KeyboardVisible, true);
+ IsVisible = true;
+ }
+
+ ///
+ /// Hides the keyboard and disconnects ALL sig handlers from 2901 - 2969
+ ///
+ public void Hide()
+ {
+ if (!IsVisible)
+ return;
+
+ for (uint i = 2901; i < 2970; i++)
+ TriList.ClearBoolSigAction(i);
+
+ // run attached actions
+ if(HideAction != null)
+ HideAction();
+
+ TriList.SetBool(KeyboardVisible, false);
+ IsVisible = false;
+ }
+
+ ///
+ ///
+ ///
+ ///
+ public void Append(char c)
+ {
+ Output.Append(c);
+ OutputFeedback.FireUpdate();
+ }
+
+ ///
+ ///
+ ///
+ ///
+ public void Append(string s)
+ {
+ Output.Append(s);
+ OutputFeedback.FireUpdate();
+ }
+
+ char A(int i) { return new char[] { 'a', 'A', '?', '?' }[i]; }
+ char B(int i) { return new char[] { 'b', 'B', ':', ':' }[i]; }
+ char C(int i) { return new char[] { 'c', 'C', '>', '>' }[i]; }
+ char D(int i) { return new char[] { 'd', 'D', '_', '_' }[i]; }
+ char E(int i) { return new char[] { 'e', 'E', '3', '#' }[i]; }
+ char F(int i) { return new char[] { 'f', 'F', '=', '=' }[i]; }
+ char G(int i) { return new char[] { 'g', 'G', '+', '+' }[i]; }
+ char H(int i) { return new char[] { 'h', 'H', '[', '[' }[i]; }
+ char I(int i) { return new char[] { 'i', 'I', '8', '*' }[i]; }
+ char J(int i) { return new char[] { 'j', 'J', ']', ']' }[i]; }
+ char K(int i) { return new char[] { 'k', 'K', '/', '/' }[i]; }
+ char L(int i) { return new char[] { 'l', 'L', '\\', '\\' }[i]; }
+ char M(int i) { return new char[] { 'm', 'M', '"', '"' }[i]; }
+ char N(int i) { return new char[] { 'n', 'N', '\'', '\'' }[i]; }
+ char O(int i) { return new char[] { 'o', 'O', '9', '(' }[i]; }
+ char P(int i) { return new char[] { 'p', 'P', '0', ')' }[i]; }
+ char Q(int i) { return new char[] { 'q', 'Q', '1', '!' }[i]; }
+ char R(int i) { return new char[] { 'r', 'R', '4', '$' }[i]; }
+ char S(int i) { return new char[] { 's', 'S', '-', '-' }[i]; }
+ char T(int i) { return new char[] { 't', 'T', '5', '%' }[i]; }
+ char U(int i) { return new char[] { 'u', 'U', '7', '&' }[i]; }
+ char V(int i) { return new char[] { 'v', 'V', ';', ';' }[i]; }
+ char W(int i) { return new char[] { 'w', 'W', '2', '@' }[i]; }
+ char X(int i) { return new char[] { 'x', 'X', '<', '<' }[i]; }
+ char Y(int i) { return new char[] { 'y', 'Y', '6', '^' }[i]; }
+ char Z(int i) { return new char[] { 'z', 'Z', ',', ',' }[i]; }
+
+ void Backspace()
+ {
+ if (Output.Length > 0)
+ {
+ Output.Remove(Output.Length - 1, 1);
+ OutputFeedback.FireUpdate();
+ }
+ }
+
+ void Clear()
+ {
+ Output.Remove(0, Output.Length);
+ OutputFeedback.FireUpdate();
+ }
+
+ void Shift()
+ {
+ if (ShiftMode == 0)
+ ShiftMode = 1;
+ else if (ShiftMode == 1)
+ ShiftMode = 0;
+ else if (ShiftMode == 2)
+ ShiftMode = 3;
+ else
+ ShiftMode = 2;
+
+ TriList.SetUshort(2951, 0); // 0 = up, 1 = down, 2 = #, 3 = 123
+ TriList.SetUshort(2952, 0); // 0 = #, 1 = abc
+ }
+
+ void NumShift()
+ {
+ if (ShiftMode == 0 || ShiftMode == 1)
+ ShiftMode = 2;
+ else if (ShiftMode == 2)
+ ShiftMode = 3;
+ else
+ ShiftMode = 0;
+ }
+
+
+ ///
+ /// 2901
+ ///
+ public const uint KeyboardVisible = 2901;
+ ///
+ /// 2902
+ ///
+ public const uint KeyboardClosePress = 2902;
+ ///
+ /// 2903
+ ///
+ public const uint KeyboardButton1Press = 2903;
+ ///
+ /// 2904
+ ///
+ public const uint KeyboardButton2Press = 2904;
+ ///
+ /// 2910
+ ///
+ public const uint KeyboardClearPress = 2910;
+ ///
+ /// 2911
+ ///
+ public const uint KeyboardClearVisible = 2911;
+
+ }
+
+ /* When in mode 0 (lowercase):
+ * shift button: up arrow 0
+ * numShift button: 123/#$@#$ 0
+ *
+ * - shift --> mode 1
+ * - double-tap shift --> caps lock
+ * - numShift --> mode 2
+ *
+ * mode 1 (uppercase)
+ * shift button: down arrow 1
+ * numShift button: 123/##$# 0
+ *
+ * - shift --> mode 0
+ * - numShift --> mode 2
+ *
+ * - Tapping any key will go back to mode 0
+ *
+ * mode 2 (numbers-sym)
+ * Shift button: #$#$#$ 2
+ * numShift: ABC 1
+ *
+ * - shift --> mode 3
+ * - double-tap shift --> caps lock
+ * - numShift --> mode 0
+ *
+ * mode 3 (sym)
+ * Shift button: 123 3
+ * numShift: ABC 1
+ *
+ * - shift --> mode 2
+ * - numShift --> mode 0
+ *
+ * - Tapping any key will go back to mode 2
+ */
+}
\ No newline at end of file
diff --git a/Essentials Devices Common/Essentials Devices Common/VideoCodec/MockVC/MockVC.cs b/Essentials Devices Common/Essentials Devices Common/VideoCodec/MockVC/MockVC.cs
index ed2bc949..307f26f1 100644
--- a/Essentials Devices Common/Essentials Devices Common/VideoCodec/MockVC/MockVC.cs
+++ b/Essentials Devices Common/Essentials Devices Common/VideoCodec/MockVC/MockVC.cs
@@ -91,8 +91,9 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec
public override void EndAllCalls()
{
Debug.Console(1, this, "EndAllCalls");
- foreach (var call in ActiveCalls)
+ for(int i = ActiveCalls.Count - 1; i >= 0; i--)
{
+ var call = ActiveCalls[i];
ActiveCalls.Remove(call);
SetNewCallStatusAndFireCallStatusChange(eCodecCallStatus.Disconnected, call);
}
diff --git a/Essentials/PepperDashEssentials/OTHER/Fusion/FusionSystemController.cs b/Essentials/PepperDashEssentials/OTHER/Fusion/FusionSystemController.cs
index 59b53112..1bcccf51 100644
--- a/Essentials/PepperDashEssentials/OTHER/Fusion/FusionSystemController.cs
+++ b/Essentials/PepperDashEssentials/OTHER/Fusion/FusionSystemController.cs
@@ -26,8 +26,8 @@ namespace PepperDash.Essentials.Fusion
public class EssentialsHuddleSpaceFusionSystemController : Device
{
public event EventHandler ScheduleChange;
- public event EventHandler MeetingEndWarning;
- public event EventHandler NextMeetingBeginWarning;
+ //public event EventHandler MeetingEndWarning;
+ //public event EventHandler NextMeetingBeginWarning;
FusionRoom FusionRoom;
EssentialsHuddleSpaceRoom Room;
diff --git a/Essentials/PepperDashEssentials/UI/EssentialsTouchpanelController.cs b/Essentials/PepperDashEssentials/UI/EssentialsTouchpanelController.cs
index 21130a5f..637dca18 100644
--- a/Essentials/PepperDashEssentials/UI/EssentialsTouchpanelController.cs
+++ b/Essentials/PepperDashEssentials/UI/EssentialsTouchpanelController.cs
@@ -154,7 +154,7 @@ namespace PepperDash.Essentials
{
Debug.Console(0, this, "Adding huddle space driver");
var avDriver = new EssentialsHuddleVtc1PanelAvFunctionsDriver(mainDriver, props);
- var codecDriver = new PepperDash.Essentials.UIDrivers.VC.EssentialsVideoCodecUiDriver(Panel,
+ var codecDriver = new PepperDash.Essentials.UIDrivers.VC.EssentialsVideoCodecUiDriver(Panel, avDriver,
(room as EssentialsHuddleVtc1Room).VideoCodec);
avDriver.SetVideoCodecDriver(codecDriver);
avDriver.CurrentRoom = room as EssentialsHuddleVtc1Room;
diff --git a/Essentials/PepperDashEssentials/UI/JoinConstants/UIBoolJoin.cs b/Essentials/PepperDashEssentials/UI/JoinConstants/UIBoolJoin.cs
index c055ff77..47da3076 100644
--- a/Essentials/PepperDashEssentials/UI/JoinConstants/UIBoolJoin.cs
+++ b/Essentials/PepperDashEssentials/UI/JoinConstants/UIBoolJoin.cs
@@ -22,8 +22,25 @@ namespace PepperDash.Essentials
///
public const uint VolumeDownPress = 902;
- //******************************************************
+ //****************************************************
+ // Codec General
+
+ ///
+ /// 1001
+ ///
+ public const uint CallEndPress = 1001;
+ ///
+ /// 1002
+ ///
+ public const uint CallEndAllConfirmPress = 1002;
+ ///
+ /// 1003 - For tapping the text field to reveal the keyboard
+ ///
+ public const uint CodecDirectorySearchTextPress = 1003;
+
+
// Audio Conference
+#warning Move these to 1100's
///
/// 1001
///
@@ -153,7 +170,21 @@ namespace PepperDash.Essentials
///
/// 2901
///
- public const uint KeyboardVisible = 2901;
+ public const uint KeyboardVisible = 2901;
+ ///
+ /// 2902
+ ///
+ public const uint KeyboardClosePress = 2902;
+ ///
+ /// 2903
+ ///
+ public const uint KeyboardButton1Press = 2903;
+ ///
+ /// 2904
+ ///
+ public const uint KeyboardButton2Press = 2904;
+
+
///
/// 2910
///
@@ -163,6 +194,9 @@ namespace PepperDash.Essentials
///
public const uint KeyboardClearVisible = 2911;
+ // Letter joins start at 2921;
+
+ //******************************************************
///
/// 3811
///
@@ -476,32 +510,31 @@ namespace PepperDash.Essentials
/// 15060
///
public const uint Display2AudioButtonPressAndFb = 15060;
-
///
/// 15061 Reveals the dual-display subpage
///
public const uint DualDisplayPageVisible = 15061;
-
///
/// 15062 Reveals the toggle switch for the sharing mode
///
public const uint ToggleSharingModeVisible = 15062;
-
///
/// 15063 Press for the toggle mode switch
///
public const uint ToggleSharingModePress = 15063;
-
///
/// 15064
///
public const uint LogoDefaultVisible = 15064;
-
///
/// 15065
///
public const uint LogoUrlVisible = 15065;
///
+ /// 15066 - Reveals the active calls header item
+ ///
+ public const uint HeaderActiveCallsListVisible = 15066;
+ ///
/// 15083 - Press for Call help desk on AC/VC
///
public const uint HelpPageShowCallButtonPress = 15083;
diff --git a/Essentials/PepperDashEssentials/UI/JoinConstants/UISmartObjectJoin.cs b/Essentials/PepperDashEssentials/UI/JoinConstants/UISmartObjectJoin.cs
index 3fdd58be..ceea3a89 100644
--- a/Essentials/PepperDashEssentials/UI/JoinConstants/UISmartObjectJoin.cs
+++ b/Essentials/PepperDashEssentials/UI/JoinConstants/UISmartObjectJoin.cs
@@ -3,6 +3,12 @@
public class UISmartObjectJoin
{
//******************************************************
+ // Conference
+ ///
+ /// 1001 - The list that reveals in header to show calls
+ ///
+ public const uint CodecActiveCallsHeaderList = 1001;
+
// Video Conference
///
diff --git a/Essentials/PepperDashEssentials/UIDrivers/EssentialsHuddleVTC/HuddleVTCPanelAvFunctionsDriver.cs b/Essentials/PepperDashEssentials/UIDrivers/EssentialsHuddleVTC/HuddleVTCPanelAvFunctionsDriver.cs
index b041e28f..60745dec 100644
--- a/Essentials/PepperDashEssentials/UIDrivers/EssentialsHuddleVTC/HuddleVTCPanelAvFunctionsDriver.cs
+++ b/Essentials/PepperDashEssentials/UIDrivers/EssentialsHuddleVTC/HuddleVTCPanelAvFunctionsDriver.cs
@@ -16,7 +16,7 @@ namespace PepperDash.Essentials
///
///
///
- public class EssentialsHuddleVtc1PanelAvFunctionsDriver : PanelDriverBase
+ public class EssentialsHuddleVtc1PanelAvFunctionsDriver : PanelDriverBase, IAVDriver
{
CrestronTouchpanelPropertiesConfig Config;
@@ -118,7 +118,7 @@ namespace PepperDash.Essentials
///
/// Represents
///
- JoinedSigInterlock PopupInterlock;
+ public JoinedSigInterlock PopupInterlock { get; private set; }
///
/// Interlock for various source, camera, call control bars. The bar above the activity footer. This is also
@@ -130,6 +130,8 @@ namespace PepperDash.Essentials
PepperDash.Essentials.UIDrivers.VC.EssentialsVideoCodecUiDriver VCDriver;
+ public PepperDash.Essentials.Core.Touchpanels.Keyboards.HabaneroKeyboardController Keyboard { get; private set; }
+
///
/// Constructor
///
@@ -152,15 +154,7 @@ namespace PepperDash.Essentials
SetupActivityFooterWhenRoomOff();
ShowVolumeGauge = true;
- //PowerOffTimeout = 30000;
-
- //TriList.StringInput[UIStringJoin.StartActivityText].StringValue = "Tap an activity below";
-
- // Reveal proper header buttons with/without lighting
- if(false) // has lighting
- TriList.SetBool(UIBoolJoin.CallLeftHeaderButtonVisible, true);
- else
- TriList.SetBool(UIBoolJoin.CallRightHeaderButtonVisible, true);
+ Keyboard = new PepperDash.Essentials.Core.Touchpanels.Keyboards.HabaneroKeyboardController(TriList);
}
///
@@ -272,9 +266,14 @@ namespace PepperDash.Essentials
if(roomConf.OneButtonMeeting != null && roomConf.OneButtonMeeting.Enable)
{
TriList.SetBool(UIBoolJoin.CalendarHeaderButtonVisible, true);
- TriList.SetSigFalseAction(UIBoolJoin.CallHeaderButtonPress, () =>
- { });
- }
+ TriList.SetBool(UIBoolJoin.CallLeftHeaderButtonVisible, true);
+ }
+ else
+ TriList.SetBool(UIBoolJoin.CallRightHeaderButtonVisible, true);
+
+ TriList.SetSigFalseAction(UIBoolJoin.CallHeaderButtonPress, () =>
+ PopupInterlock.ShowInterlockedWithToggle(UIBoolJoin.HeaderActiveCallsListVisible));
+
// Setup button - shows volumes with default button OR hold for tech page
TriList.SetSigHeldAction(UIBoolJoin.GearHeaderButtonPress, 2000,
@@ -307,34 +306,6 @@ namespace PepperDash.Essentials
base.Show();
}
- /////
- ///// Puts the UI into the "start" mode. System is off. Logo shows. Activity SRL is clear
- /////
- //void ShowStartMode()
- //{
- // SetupActivityFooterWhenRoomOff();
-
- // ShareButtonSig.BoolValue = false;
- // CallButtonSig.BoolValue = false;
- // ShowLogo();
- // StagingBarInterlock.ShowInterlocked(UIBoolJoin.StartPageVisible);
- // StagingBarInterlock.HideAndClear();
- //}
-
- //void ShowShareMode()
- //{
- // ShareButtonSig.BoolValue = true;
- // CallButtonSig.BoolValue = false;
- // StagingBarInterlock.ShowInterlocked(UIBoolJoin.SourceStagingBarVisible);
- //}
-
- //void ShowVideoCallMode()
- //{
- // ShareButtonSig.BoolValue = false;
- // CallButtonSig.BoolValue = true;
- // StagingBarInterlock.ShowInterlocked(UIBoolJoin.CallStagingBarVisible);
- //}
-
///
///
///
@@ -978,4 +949,13 @@ namespace PepperDash.Essentials
RefreshSourceInfo();
}
}
+
+ ///
+ /// For hanging off various common things that child drivers might need from a parent AV driver
+ ///
+ public interface IAVDriver
+ {
+ PepperDash.Essentials.Core.Touchpanels.Keyboards.HabaneroKeyboardController Keyboard { get; }
+ JoinedSigInterlock PopupInterlock { get; }
+ }
}
diff --git a/Essentials/PepperDashEssentials/UIDrivers/JoinedSigInterlock.cs b/Essentials/PepperDashEssentials/UIDrivers/JoinedSigInterlock.cs
index c383c7d3..09df5b1d 100644
--- a/Essentials/PepperDashEssentials/UIDrivers/JoinedSigInterlock.cs
+++ b/Essentials/PepperDashEssentials/UIDrivers/JoinedSigInterlock.cs
@@ -5,6 +5,9 @@ using System.Text;
using Crestron.SimplSharp;
using Crestron.SimplSharpPro.DeviceSupport;
+using PepperDash.Core;
+using PepperDash.Essentials.Core;
+
namespace PepperDash.Essentials
{
public class JoinedSigInterlock
@@ -26,7 +29,7 @@ namespace PepperDash.Essentials
if (CurrentJoin == join)
return;
SetButDontShow(join);
- TriList.BooleanInput[CurrentJoin].BoolValue = true;
+ TriList.SetBool(CurrentJoin, true);
}
///
@@ -74,7 +77,7 @@ namespace PepperDash.Essentials
}
///
- /// Useful for pre-setting the interlock but not enabling it.
+ /// Useful for pre-setting the interlock but not enabling it. Sets CurrentJoin
///
///
public void SetButDontShow(uint join)
diff --git a/Essentials/PepperDashEssentials/UIDrivers/VC/EssentialsVideoCodecUiDriver.cs b/Essentials/PepperDashEssentials/UIDrivers/VC/EssentialsVideoCodecUiDriver.cs
index 81d40683..78cf336c 100644
--- a/Essentials/PepperDashEssentials/UIDrivers/VC/EssentialsVideoCodecUiDriver.cs
+++ b/Essentials/PepperDashEssentials/UIDrivers/VC/EssentialsVideoCodecUiDriver.cs
@@ -16,8 +16,6 @@ namespace PepperDash.Essentials.UIDrivers.VC
{
-#warning When InCall, keypad text should clear. Keypad becomes DTMF only. Delete is gone and disabled. Send keypresses immediately to SendDTMF. Queue them in disaply string.
-#warning when Call ends, clear keypad text.
#warning FOR SPARK - (GFX also) we need a staging bar for in call state where there is no camera button
///
/// This fella will likely need to interact with the room's source, although that is routed via the spark...
@@ -26,6 +24,8 @@ namespace PepperDash.Essentials.UIDrivers.VC
///
public class EssentialsVideoCodecUiDriver : PanelDriverBase
{
+ IAVDriver Parent;
+
///
///
///
@@ -60,6 +60,8 @@ namespace PepperDash.Essentials.UIDrivers.VC
SmartObjectNumeric DialKeypad;
+ SubpageReferenceList ActiveCallsSRL;
+
// These are likely temp until we get a keyboard built
StringFeedback DialStringFeedback;
StringBuilder DialStringBuilder = new StringBuilder();
@@ -67,17 +69,21 @@ namespace PepperDash.Essentials.UIDrivers.VC
ModalDialog IncomingCallModal;
+ eKeypadMode KeypadMode;
+
///
///
///
///
///
- public EssentialsVideoCodecUiDriver(BasicTriListWithSmartObject triList, VideoCodecBase codec)
+ public EssentialsVideoCodecUiDriver(BasicTriListWithSmartObject triList, IAVDriver parent, VideoCodecBase codec)
: base(triList)
{
Codec = codec;
+ Parent = parent;
SetupCallStagingPopover();
SetupDialKeypad();
+ ActiveCallsSRL = new SubpageReferenceList(TriList, UISmartObjectJoin.CodecActiveCallsHeaderList, 3, 3, 3);
codec.CallStatusChange += new EventHandler(Codec_CallStatusChange);
@@ -118,6 +124,10 @@ namespace PepperDash.Essentials.UIDrivers.VC
case eCodecCallStatus.Connected:
// fire at SRL item
Debug.Console(1, "*#* UI: Call Connected {0}", call.Name);
+ KeypadMode = eKeypadMode.DTMF;
+ DialStringBuilder.Remove(0, DialStringBuilder.Length);
+ DialStringFeedback.FireUpdate();
+ TriList.SetBool(UIBoolJoin.KeyboardClearVisible, false);
break;
case eCodecCallStatus.Connecting:
// fire at SRL item
@@ -128,6 +138,12 @@ namespace PepperDash.Essentials.UIDrivers.VC
break;
case eCodecCallStatus.Disconnected:
Debug.Console(1, "*#* UI: Call Disconnecting {0}", call.Name);
+ if (!Codec.IsInCall)
+ {
+ KeypadMode = eKeypadMode.Dial;
+ DialStringBuilder.Remove(0, DialStringBuilder.Length);
+ DialStringFeedback.FireUpdate();
+ }
break;
case eCodecCallStatus.Disconnecting:
break;
@@ -153,6 +169,7 @@ namespace PepperDash.Essentials.UIDrivers.VC
TriList.UShortInput[UIUshortJoin.VCStagingConnectButtonMode].UShortValue = (ushort)(Codec.IsInCall ? 1 : 0);
StagingBarInterlock.ShowInterlocked(Codec.IsInCall ?
UIBoolJoin.VCStagingActivePopoverVisible : UIBoolJoin.VCStagingInactivePopoverVisible);
+
// Set mode of header button
if (!Codec.IsInCall)
TriList.SetUshort(UIUshortJoin.CallHeaderButtonMode, 0);
@@ -162,9 +179,29 @@ namespace PepperDash.Essentials.UIDrivers.VC
TriList.SetUshort(UIUshortJoin.CallHeaderButtonMode, 1);
// Update list of calls
- var activeList = Codec.ActiveCalls.Where(c => c.IsActiveCall).ToList();
- Debug.Console(1, "*#* UI - Codec has {0} calls", activeList.Count);
+ UpdateCallsHeaderList(call);
+ }
+ ///
+ /// Redraws the calls list on the header
+ ///
+ void UpdateCallsHeaderList(CodecActiveCallItem call)
+ {
+ var activeList = Codec.ActiveCalls.Where(c => c.IsActiveCall).ToList();
+ ActiveCallsSRL.Clear();
+ ushort i = 1;
+ foreach (var c in activeList)
+ {
+ var item = new SubpageReferenceListItem(1, ActiveCallsSRL);
+ ActiveCallsSRL.StringInputSig(i, 1).StringValue = c.Name;
+ ActiveCallsSRL.StringInputSig(i, 2).StringValue = c.Number;
+ ActiveCallsSRL.StringInputSig(i, 3).StringValue = c.Status.ToString();
+ 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));
+ i++;
+ }
+ ActiveCallsSRL.Count = (ushort)activeList.Count;
}
///
@@ -222,9 +259,20 @@ namespace PepperDash.Essentials.UIDrivers.VC
void SetupCallStagingPopover()
{
TriList.SetSigFalseAction(UIBoolJoin.VCStagingDirectoryPress, ShowDirectory);
- TriList.SetSigFalseAction(UIBoolJoin.VCStagingConnectPress, ConnectPress);
TriList.SetSigFalseAction(UIBoolJoin.VCStagingKeypadPress, ShowKeypad);
TriList.SetSigFalseAction(UIBoolJoin.VCStagingRecentsPress, ShowRecents);
+ TriList.SetSigFalseAction(UIBoolJoin.VCStagingConnectPress, ConnectPress);
+ TriList.SetSigFalseAction(UIBoolJoin.CallEndPress, () =>
+ {
+ if (Codec.ActiveCalls.Count > 1)
+ {
+ Debug.Console(1, "#*#*#*# FUCK ME!!!!");
+ Parent.PopupInterlock.ShowInterlocked(UIBoolJoin.HeaderActiveCallsListVisible);
+ }
+ else
+ Codec.EndAllCalls();
+ });
+ TriList.SetSigFalseAction(UIBoolJoin.CallEndAllConfirmPress, Codec.EndAllCalls);
}
///
@@ -276,6 +324,25 @@ namespace PepperDash.Essentials.UIDrivers.VC
// populate directory
VCControlsInterlock.ShowInterlocked(UIBoolJoin.VCDirectoryVisible);
StagingButtonFeedbackInterlock.ShowInterlocked(UIBoolJoin.VCStagingDirectoryPress);
+
+ TriList.SetSigFalseAction(UIBoolJoin.CodecDirectorySearchTextPress, () =>
+ {
+ var kb = Parent.Keyboard;
+ kb.OutputFeedback.OutputChange += new EventHandler(DirectoryKeyboardChange);
+ kb.HideAction += () =>
+ {
+ kb.OutputFeedback.OutputChange -= DirectoryKeyboardChange;
+ };
+
+ });
+ }
+
+ ///
+ ///
+ ///
+ void DirectoryKeyboardChange(object sender, EventArgs e)
+ {
+
}
void ShowRecents()
@@ -290,10 +357,7 @@ namespace PepperDash.Essentials.UIDrivers.VC
///
void ConnectPress()
{
- if (Codec.IsInCall)
- Codec.EndAllCalls();
- else
- Codec.Dial(DialStringBuilder.ToString());
+ Codec.Dial(DialStringBuilder.ToString());
}
@@ -303,10 +367,20 @@ namespace PepperDash.Essentials.UIDrivers.VC
///
void DialKeypadPress(string i)
{
- DialStringBuilder.Append(i);
- DialStringFeedback.FireUpdate();
- TriList.BooleanInput[UIBoolJoin.KeyboardClearVisible].BoolValue =
- DialStringBuilder.Length > 0;
+ if (KeypadMode == eKeypadMode.Dial)
+ {
+ DialStringBuilder.Append(i);
+ DialStringFeedback.FireUpdate();
+ TriList.BooleanInput[UIBoolJoin.KeyboardClearVisible].BoolValue =
+ DialStringBuilder.Length > 0;
+ }
+ else
+ {
+ Codec.SendDtmf(i);
+ DialStringBuilder.Append(i);
+ DialStringFeedback.FireUpdate();
+ // no delete key in this mode!
+ }
}
///
@@ -320,5 +394,10 @@ namespace PepperDash.Essentials.UIDrivers.VC
DialStringBuilder.Length > 0;
TriList.SetBool(UIBoolJoin.VCStagingConnectEnable, DialStringBuilder.Length > 0);
}
+
+ enum eKeypadMode
+ {
+ Dial, DTMF
+ }
}
}
\ No newline at end of file
diff --git a/Release Package/PepperDashEssentials.cpz b/Release Package/PepperDashEssentials.cpz
index feb3c651..67efe333 100644
Binary files a/Release Package/PepperDashEssentials.cpz and b/Release Package/PepperDashEssentials.cpz differ
diff --git a/Release Package/PepperDashEssentials.dll b/Release Package/PepperDashEssentials.dll
index 4a9581ef..e104408c 100644
Binary files a/Release Package/PepperDashEssentials.dll and b/Release Package/PepperDashEssentials.dll differ