diff --git a/PepperDashEssentials/PepperDashEssentials.csproj b/PepperDashEssentials/PepperDashEssentials.csproj
index b7df4b0d..7b548dd5 100644
--- a/PepperDashEssentials/PepperDashEssentials.csproj
+++ b/PepperDashEssentials/PepperDashEssentials.csproj
@@ -137,7 +137,7 @@
-
+
diff --git a/PepperDashEssentials/Room/Config/EssentialsRoomConfig.cs b/PepperDashEssentials/Room/Config/EssentialsRoomConfig.cs
index 201b583c..6a59cc56 100644
--- a/PepperDashEssentials/Room/Config/EssentialsRoomConfig.cs
+++ b/PepperDashEssentials/Room/Config/EssentialsRoomConfig.cs
@@ -196,9 +196,20 @@ namespace PepperDash.Essentials.Room.Config
public string DefaultAudioKey { get; set; }
[JsonProperty("sourceListKey")]
public string SourceListKey { get; set; }
+ [JsonProperty("destinationListKey")]
+ public string DestinationListKey { get; set; }
[JsonProperty("defaultSourceItem")]
public string DefaultSourceItem { get; set; }
-
+ ///
+ /// Indicates if the room supports advanced sharing
+ ///
+ [JsonProperty("supportsAdvancedSharing")]
+ public bool SupportsAdvancedSharing { get; set; }
+ ///
+ /// Indicates if non-tech users can change the share mode
+ ///
+ [JsonProperty("userCanChangeShareMode")]
+ public bool UserCanChangeShareMode { get; set; }
}
public class EssentialsConferenceRoomPropertiesConfig : EssentialsAvRoomPropertiesConfig
diff --git a/PepperDashEssentials/Room/Config/DDVC01RoomPropertiesConfig.cs b/PepperDashEssentials/Room/Config/SimplRoomPropertiesConfig.cs
similarity index 78%
rename from PepperDashEssentials/Room/Config/DDVC01RoomPropertiesConfig.cs
rename to PepperDashEssentials/Room/Config/SimplRoomPropertiesConfig.cs
index be779f3a..f0fea9b9 100644
--- a/PepperDashEssentials/Room/Config/DDVC01RoomPropertiesConfig.cs
+++ b/PepperDashEssentials/Room/Config/SimplRoomPropertiesConfig.cs
@@ -8,19 +8,19 @@ using Newtonsoft.Json;
namespace PepperDash.Essentials.Room.Config
{
- public class DDVC01RoomPropertiesConfig : EssentialsHuddleVtc1PropertiesConfig
+ public class SimplRoomPropertiesConfig : EssentialsHuddleVtc1PropertiesConfig
{
[JsonProperty("roomPhoneNumber")]
public string RoomPhoneNumber { get; set; }
[JsonProperty("roomURI")]
public string RoomURI { get; set; }
[JsonProperty("speedDials")]
- public List SpeedDials { get; set; }
+ public List SpeedDials { get; set; }
[JsonProperty("volumeSliderNames")]
public List VolumeSliderNames { get; set; }
}
- public class DDVC01SpeedDial
+ public class SimplSpeedDial
{
[JsonProperty("name")]
public string Name { get; set; }
diff --git a/essentials-framework/Essentials Core/PepperDashEssentialsBase/Config/BasicConfig.cs b/essentials-framework/Essentials Core/PepperDashEssentialsBase/Config/BasicConfig.cs
index 7cbaa5a1..f44f6000 100644
--- a/essentials-framework/Essentials Core/PepperDashEssentialsBase/Config/BasicConfig.cs
+++ b/essentials-framework/Essentials Core/PepperDashEssentialsBase/Config/BasicConfig.cs
@@ -1,11 +1,6 @@
-using System;
-using System.Collections.Generic;
+using System.Collections.Generic;
using System.Linq;
-using System.Text;
-using Crestron.SimplSharp;
using Newtonsoft.Json;
-using PepperDash.Core;
-using PepperDash.Essentials.Core;
using Newtonsoft.Json.Linq;
@@ -25,12 +20,25 @@ namespace PepperDash.Essentials.Core.Config
[JsonProperty("sourceLists")]
public Dictionary> SourceLists { get; set; }
- [JsonProperty("tieLines")]
+ [JsonProperty("destinationLists")]
+ public Dictionary> DestinationLists { get; set; }
+
+ [JsonProperty("tieLines")]
public List TieLines { get; set; }
[JsonProperty("joinMaps")]
public Dictionary JoinMaps { get; set; }
+ public BasicConfig()
+ {
+ Info = new InfoConfig();
+ Devices = new List();
+ SourceLists = new Dictionary>();
+ DestinationLists = new Dictionary>();
+ TieLines = new List();
+ JoinMaps = new Dictionary();
+ }
+
///
/// Checks SourceLists for a given list and returns it if found. Otherwise, returns null
///
@@ -42,6 +50,21 @@ namespace PepperDash.Essentials.Core.Config
return SourceLists[key];
}
+ ///
+ /// Retrieves a DestinationListItem based on the key
+ ///
+ /// key of the item to retrieve
+ /// DestinationListItem if the key exists, null otherwise
+ public Dictionary GetDestinationListForKey(string key)
+ {
+ if (string.IsNullOrEmpty(key) || !DestinationLists.ContainsKey(key))
+ {
+ return null;
+ }
+
+ return DestinationLists[key];
+ }
+
///
/// Checks Devices for an item with a Key that matches and returns it if found. Otherwise, retunes null
///
diff --git a/essentials-framework/Essentials Core/PepperDashEssentialsBase/Config/Essentials/EssentialsConfig.cs b/essentials-framework/Essentials Core/PepperDashEssentialsBase/Config/Essentials/EssentialsConfig.cs
index cc3375e2..1e819414 100644
--- a/essentials-framework/Essentials Core/PepperDashEssentialsBase/Config/Essentials/EssentialsConfig.cs
+++ b/essentials-framework/Essentials Core/PepperDashEssentialsBase/Config/Essentials/EssentialsConfig.cs
@@ -51,6 +51,13 @@ namespace PepperDash.Essentials.Core.Config
[JsonProperty("rooms")]
public List Rooms { get; set; }
+
+
+ public EssentialsConfig()
+ : base()
+ {
+ Rooms = new List();
+ }
}
///
diff --git a/essentials-framework/Essentials Core/PepperDashEssentialsBase/DeviceTypeInterfaces/IMobileControl.cs b/essentials-framework/Essentials Core/PepperDashEssentialsBase/DeviceTypeInterfaces/IMobileControl.cs
index 2dfa7c41..c87e7865 100644
--- a/essentials-framework/Essentials Core/PepperDashEssentialsBase/DeviceTypeInterfaces/IMobileControl.cs
+++ b/essentials-framework/Essentials Core/PepperDashEssentialsBase/DeviceTypeInterfaces/IMobileControl.cs
@@ -20,6 +20,10 @@ namespace PepperDash.Essentials.Core.DeviceTypeInterfaces
{
event EventHandler UserCodeChanged;
+ event EventHandler UserPromptedForCode;
+
+ event EventHandler ClientJoined;
+
string UserCode { get; }
string QrCodeUrl { get; }
diff --git a/essentials-framework/Essentials Core/PepperDashEssentialsBase/Devices/DestinationListItem.cs b/essentials-framework/Essentials Core/PepperDashEssentialsBase/Devices/DestinationListItem.cs
new file mode 100644
index 00000000..49379e44
--- /dev/null
+++ b/essentials-framework/Essentials Core/PepperDashEssentialsBase/Devices/DestinationListItem.cs
@@ -0,0 +1,54 @@
+using Newtonsoft.Json;
+using PepperDash.Essentials.Core;
+
+namespace PepperDash.Essentials.Core
+{
+ public class DestinationListItem
+ {
+ [JsonProperty("sinkKey")]
+ public string SinkKey { get; set; }
+
+ private EssentialsDevice _sinkDevice;
+
+ [JsonIgnore]
+ public EssentialsDevice SinkDevice
+ {
+ get { return _sinkDevice ?? (_sinkDevice = DeviceManager.GetDeviceForKey(SinkKey) as EssentialsDevice); }
+ }
+
+ [JsonProperty("preferredName")]
+ public string PreferredName
+ {
+ get
+ {
+ if (!string.IsNullOrEmpty(Name))
+ {
+ return Name;
+ }
+
+ return SinkDevice == null ? "---" : SinkDevice.Name;
+ }
+ }
+
+ [JsonProperty("name")]
+ public string Name { get; set; }
+
+ [JsonProperty("includeInDestinationList")]
+ public bool IncludeInDestinationList { get; set; }
+
+ [JsonProperty("order")]
+ public int Order { get; set; }
+
+ [JsonProperty("surfaceLocation")]
+ public int SurfaceLocation { get; set; }
+
+ [JsonProperty("verticalLocation")]
+ public int VerticalLocation { get; set; }
+
+ [JsonProperty("horizontalLocation")]
+ public int HorizontalLocation { get; set; }
+
+ [JsonProperty("sinkType")]
+ public eRoutingSignalType SinkType { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/essentials-framework/Essentials Core/PepperDashEssentialsBase/Devices/SourceListItem.cs b/essentials-framework/Essentials Core/PepperDashEssentialsBase/Devices/SourceListItem.cs
index 601d75a7..e302a2a4 100644
--- a/essentials-framework/Essentials Core/PepperDashEssentialsBase/Devices/SourceListItem.cs
+++ b/essentials-framework/Essentials Core/PepperDashEssentialsBase/Devices/SourceListItem.cs
@@ -130,10 +130,24 @@ namespace PepperDash.Essentials.Core
[JsonProperty("sourceListKey")]
public string SourceListKey { get; set; }
+ ///
+ /// Indicates if the device associated with this source is controllable
+ ///
+ [JsonProperty("isControllable")]
+ public bool IsControllable { get; set; }
+
+ ///
+ /// Indicates that the device associated with this source has audio available
+ ///
+ [JsonProperty("isAudioSource")]
+ public bool IsAudioSource { get; set; }
+
public SourceListItem()
{
Icon = "Blank";
}
+
+
}
public class SourceRouteListItem
diff --git a/essentials-framework/Essentials Core/PepperDashEssentialsBase/PepperDash_Essentials_Core.csproj b/essentials-framework/Essentials Core/PepperDashEssentialsBase/PepperDash_Essentials_Core.csproj
index d5bce861..e4c775d0 100644
--- a/essentials-framework/Essentials Core/PepperDashEssentialsBase/PepperDash_Essentials_Core.csproj
+++ b/essentials-framework/Essentials Core/PepperDashEssentialsBase/PepperDash_Essentials_Core.csproj
@@ -189,6 +189,7 @@
+
diff --git a/essentials-framework/Essentials Core/PepperDashEssentialsBase/Plugins/PluginLoader.cs b/essentials-framework/Essentials Core/PepperDashEssentialsBase/Plugins/PluginLoader.cs
index 7192c667..ba4ffab4 100644
--- a/essentials-framework/Essentials Core/PepperDashEssentialsBase/Plugins/PluginLoader.cs
+++ b/essentials-framework/Essentials Core/PepperDashEssentialsBase/Plugins/PluginLoader.cs
@@ -400,6 +400,7 @@ namespace PepperDash.Essentials
{
Debug.Console(2, "Load Plugin not found. {0}.{2} is not a plugin factory. Exception: {1}",
loadedAssembly.Name, e.Message, type.Name);
+ continue;
}
}
diff --git a/essentials-framework/Essentials Core/PepperDashEssentialsBase/Queues/GenericQueue.cs b/essentials-framework/Essentials Core/PepperDashEssentialsBase/Queues/GenericQueue.cs
index a5def83d..a1cef30d 100644
--- a/essentials-framework/Essentials Core/PepperDashEssentialsBase/Queues/GenericQueue.cs
+++ b/essentials-framework/Essentials Core/PepperDashEssentialsBase/Queues/GenericQueue.cs
@@ -180,7 +180,7 @@ namespace PepperDash.Essentials.Core.Queues
{
try
{
- Debug.Console(2, this, "Processing queue item: '{0}'", item.ToString());
+ //Debug.Console(2, this, "Processing queue item: '{0}'", item.ToString());
item.Dispatch();
if (_delayEnabled)
diff --git a/essentials-framework/Essentials Devices Common/Essentials Devices Common/VideoCodec/CiscoCodec/CiscoSparkCodec.cs b/essentials-framework/Essentials Devices Common/Essentials Devices Common/VideoCodec/CiscoCodec/CiscoSparkCodec.cs
index 1cf6ade0..a0d4fb74 100644
--- a/essentials-framework/Essentials Devices Common/Essentials Devices Common/VideoCodec/CiscoCodec/CiscoSparkCodec.cs
+++ b/essentials-framework/Essentials Devices Common/Essentials Devices Common/VideoCodec/CiscoCodec/CiscoSparkCodec.cs
@@ -490,11 +490,21 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco
Debug.Console(2, this, "Setting QR code URL: {0}", mcBridge.QrCodeUrl);
mcBridge.UserCodeChanged += (o, a) => SendMcBrandingUrl(mcBridge);
+ mcBridge.UserPromptedForCode += (o, a) => DisplayUserCode(mcBridge.UserCode);
SendMcBrandingUrl(mcBridge);
}
}
+ ///
+ /// Displays the code for the specified duration
+ ///
+ /// Mobile Control user code
+ private void DisplayUserCode(string code)
+ {
+ SendText(string.Format("xcommand userinterface message alert display title:\"Mobile Control User Code:\" text:\"{0}\" duration: 30", code));
+ }
+
private void SendMcBrandingUrl(IMobileControlRoomBridge mcBridge)
{
if (mcBridge == null)
@@ -561,6 +571,7 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco
prefix + "/Status/Standby" + Delimiter +
prefix + "/Status/Video/Selfview" + Delimiter +
prefix + "/Status/Video/Layout" + Delimiter +
+ prefix + "/Status/Video/Input/MainVideoMute" + Delimiter +
prefix + "/Bookings" + Delimiter +
prefix + "/Event/CallDisconnect" + Delimiter +
prefix + "/Event/Bookings" + Delimiter +
@@ -1650,12 +1661,21 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco
public void CameraAutoModeOn()
{
+ if (CameraIsOffFeedback.BoolValue)
+ {
+ CameraMuteOff();
+ }
+
SendText("xCommand Cameras SpeakerTrack Activate");
- CameraMuteOff();
}
public void CameraAutoModeOff()
{
+ if (CameraIsOffFeedback.BoolValue)
+ {
+ CameraMuteOff();
+ }
+
SendText("xCommand Cameras SpeakerTrack Deactivate");
}
@@ -2011,7 +2031,7 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco
///
public void CameraMuteOn()
{
- SendText("xCommand Video InputMainVideo Mute");
+ SendText("xCommand Video Input MainVideo Mute");
}
///
@@ -2019,7 +2039,7 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco
///
public void CameraMuteOff()
{
- SendText("xCommand Video InputMainVideo Unmute");
+ SendText("xCommand Video Input MainVideo Unmute");
}
///