mirror of
https://github.com/PepperDash/Essentials.git
synced 2026-02-10 10:15:01 +00:00
Merge branch 'development' into bugfix/SystemMonitor-IndexOutOfRange
This commit is contained in:
@@ -1,11 +1,33 @@
|
||||
using PepperDash.Core;
|
||||
using System;
|
||||
using PepperDash.Core;
|
||||
|
||||
namespace PepperDash.Essentials.Core.DeviceTypeInterfaces
|
||||
{
|
||||
public interface IMobileControl:IKeyed
|
||||
/// <summary>
|
||||
/// Describes a MobileControlSystemController
|
||||
/// </summary>
|
||||
public interface IMobileControl : IKeyed
|
||||
{
|
||||
void CreateMobileControlRoomBridge(EssentialsRoomBase room);
|
||||
|
||||
void LinkSystemMonitorToAppServer();
|
||||
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Describes a MobileControl Room Bridge
|
||||
/// </summary>
|
||||
public interface IMobileControlRoomBridge : IKeyed
|
||||
{
|
||||
event EventHandler<EventArgs> UserCodeChanged;
|
||||
|
||||
string UserCode { get; }
|
||||
|
||||
string QrCodeUrl { get; }
|
||||
|
||||
string McServerUrl { get; }
|
||||
|
||||
string RoomName { get; }
|
||||
}
|
||||
}
|
||||
@@ -1,45 +1,45 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using Crestron.SimplSharp;
|
||||
using Crestron.SimplSharpPro;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using Crestron.SimplSharp;
|
||||
using Crestron.SimplSharpPro;
|
||||
using Crestron.SimplSharpPro.DeviceSupport;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using PepperDash.Essentials.Core.Config;
|
||||
|
||||
|
||||
using PepperDash.Core;
|
||||
|
||||
namespace PepperDash.Essentials.Core
|
||||
{
|
||||
|
||||
/// <summary>
|
||||
/// IR port wrapper. May act standalone
|
||||
/// </summary>
|
||||
public class IrOutputPortController : Device
|
||||
{
|
||||
uint IrPortUid;
|
||||
IROutputPort IrPort;
|
||||
|
||||
public ushort StandardIrPulseTime { get; set; }
|
||||
public string DriverFilepath { get; private set; }
|
||||
public bool DriverIsLoaded { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Constructor for IrDevice base class. If a null port is provided, this class will
|
||||
/// still function without trying to talk to a port.
|
||||
/// </summary>
|
||||
public IrOutputPortController(string key, IROutputPort port, string irDriverFilepath)
|
||||
: base(key)
|
||||
{
|
||||
//if (port == null) throw new ArgumentNullException("port");
|
||||
IrPort = port;
|
||||
if (port == null)
|
||||
{
|
||||
Debug.Console(0, this, "WARNING No valid IR Port assigned to controller. IR will not function");
|
||||
return;
|
||||
}
|
||||
LoadDriver(irDriverFilepath);
|
||||
using PepperDash.Essentials.Core.Config;
|
||||
|
||||
|
||||
using PepperDash.Core;
|
||||
|
||||
namespace PepperDash.Essentials.Core
|
||||
{
|
||||
|
||||
/// <summary>
|
||||
/// IR port wrapper. May act standalone
|
||||
/// </summary>
|
||||
public class IrOutputPortController : Device
|
||||
{
|
||||
uint IrPortUid;
|
||||
IROutputPort IrPort;
|
||||
|
||||
public ushort StandardIrPulseTime { get; set; }
|
||||
public string DriverFilepath { get; private set; }
|
||||
public bool DriverIsLoaded { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Constructor for IrDevice base class. If a null port is provided, this class will
|
||||
/// still function without trying to talk to a port.
|
||||
/// </summary>
|
||||
public IrOutputPortController(string key, IROutputPort port, string irDriverFilepath)
|
||||
: base(key)
|
||||
{
|
||||
//if (port == null) throw new ArgumentNullException("port");
|
||||
IrPort = port;
|
||||
if (port == null)
|
||||
{
|
||||
Debug.Console(0, this, "WARNING No valid IR Port assigned to controller. IR will not function");
|
||||
return;
|
||||
}
|
||||
LoadDriver(irDriverFilepath);
|
||||
}
|
||||
|
||||
public IrOutputPortController(string key, Func<DeviceConfig, IROutputPort> postActivationFunc,
|
||||
@@ -54,85 +54,85 @@ namespace PepperDash.Essentials.Core
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Loads the IR driver at path
|
||||
/// </summary>
|
||||
/// <param name="path"></param>
|
||||
public void LoadDriver(string path)
|
||||
{
|
||||
if (string.IsNullOrEmpty(path)) path = DriverFilepath;
|
||||
try
|
||||
{
|
||||
IrPortUid = IrPort.LoadIRDriver(path);
|
||||
DriverFilepath = path;
|
||||
StandardIrPulseTime = 200;
|
||||
DriverIsLoaded = true;
|
||||
}
|
||||
catch
|
||||
{
|
||||
DriverIsLoaded = false;
|
||||
var message = string.Format("WARNING IR Driver '{0}' failed to load", path);
|
||||
Debug.Console(0, this, message);
|
||||
ErrorLog.Error(message);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Starts and stops IR command on driver. Safe for missing commands
|
||||
/// </summary>
|
||||
public virtual void PressRelease(string command, bool state)
|
||||
{
|
||||
Debug.Console(2, this, "IR:'{0}'={1}", command, state);
|
||||
if (IrPort == null)
|
||||
{
|
||||
Debug.Console(2, this, "WARNING No IR Port assigned to controller");
|
||||
return;
|
||||
}
|
||||
if (!DriverIsLoaded)
|
||||
{
|
||||
Debug.Console(2, this, "WARNING IR driver is not loaded");
|
||||
return;
|
||||
}
|
||||
if (state)
|
||||
{
|
||||
if (IrPort.IsIRCommandAvailable(IrPortUid, command))
|
||||
IrPort.Press(IrPortUid, command);
|
||||
else
|
||||
NoIrCommandError(command);
|
||||
}
|
||||
else
|
||||
IrPort.Release();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Pulses a command on driver. Safe for missing commands
|
||||
/// </summary>
|
||||
public virtual void Pulse(string command, ushort time)
|
||||
{
|
||||
if (IrPort == null)
|
||||
{
|
||||
Debug.Console(2, this, "WARNING No IR Port assigned to controller");
|
||||
return;
|
||||
}
|
||||
if (!DriverIsLoaded)
|
||||
{
|
||||
Debug.Console(2, this, "WARNING IR driver is not loaded");
|
||||
return;
|
||||
}
|
||||
if (IrPort.IsIRCommandAvailable(IrPortUid, command))
|
||||
IrPort.PressAndRelease(IrPortUid, command, time);
|
||||
else
|
||||
NoIrCommandError(command);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Notifies the console when a bad command is used.
|
||||
/// </summary>
|
||||
protected void NoIrCommandError(string command)
|
||||
{
|
||||
Debug.Console(2, this, "Device {0}: IR Driver {1} does not contain command {2}",
|
||||
Key, IrPort.IRDriverFileNameByIRDriverId(IrPortUid), command);
|
||||
/// <summary>
|
||||
/// Loads the IR driver at path
|
||||
/// </summary>
|
||||
/// <param name="path"></param>
|
||||
public void LoadDriver(string path)
|
||||
{
|
||||
if (string.IsNullOrEmpty(path)) path = DriverFilepath;
|
||||
try
|
||||
{
|
||||
IrPortUid = IrPort.LoadIRDriver(path);
|
||||
DriverFilepath = path;
|
||||
StandardIrPulseTime = 200;
|
||||
DriverIsLoaded = true;
|
||||
}
|
||||
catch
|
||||
{
|
||||
DriverIsLoaded = false;
|
||||
var message = string.Format("WARNING IR Driver '{0}' failed to load", path);
|
||||
Debug.Console(0, this, message);
|
||||
ErrorLog.Error(message);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Starts and stops IR command on driver. Safe for missing commands
|
||||
/// </summary>
|
||||
public virtual void PressRelease(string command, bool state)
|
||||
{
|
||||
Debug.Console(2, this, "IR:'{0}'={1}", command, state);
|
||||
if (IrPort == null)
|
||||
{
|
||||
Debug.Console(2, this, "WARNING No IR Port assigned to controller");
|
||||
return;
|
||||
}
|
||||
if (!DriverIsLoaded)
|
||||
{
|
||||
Debug.Console(2, this, "WARNING IR driver is not loaded");
|
||||
return;
|
||||
}
|
||||
if (state)
|
||||
{
|
||||
if (IrPort.IsIRCommandAvailable(IrPortUid, command))
|
||||
IrPort.Press(IrPortUid, command);
|
||||
else
|
||||
NoIrCommandError(command);
|
||||
}
|
||||
else
|
||||
IrPort.Release();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Pulses a command on driver. Safe for missing commands
|
||||
/// </summary>
|
||||
public virtual void Pulse(string command, ushort time)
|
||||
{
|
||||
if (IrPort == null)
|
||||
{
|
||||
Debug.Console(2, this, "WARNING No IR Port assigned to controller");
|
||||
return;
|
||||
}
|
||||
if (!DriverIsLoaded)
|
||||
{
|
||||
Debug.Console(2, this, "WARNING IR driver is not loaded");
|
||||
return;
|
||||
}
|
||||
if (IrPort.IsIRCommandAvailable(IrPortUid, command))
|
||||
IrPort.PressAndRelease(IrPortUid, command, time);
|
||||
else
|
||||
NoIrCommandError(command);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Notifies the console when a bad command is used.
|
||||
/// </summary>
|
||||
protected void NoIrCommandError(string command)
|
||||
{
|
||||
Debug.Console(2, this, "Device {0}: IR Driver {1} does not contain command {2}",
|
||||
Key, IrPort.IRDriverFileNameByIRDriverId(IrPortUid), command);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -9,6 +9,7 @@ using PepperDash.Core;
|
||||
using PepperDash.Essentials.Core;
|
||||
using PepperDash.Essentials.Core.Config;
|
||||
using PepperDash.Essentials.Core.Devices;
|
||||
using PepperDash.Essentials.Core.DeviceTypeInterfaces;
|
||||
|
||||
namespace PepperDash.Essentials.Core
|
||||
{
|
||||
@@ -37,10 +38,32 @@ namespace PepperDash.Essentials.Core
|
||||
protected abstract Func<bool> IsWarmingFeedbackFunc { get; }
|
||||
protected abstract Func<bool> IsCoolingFeedbackFunc { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Indicates if this room is Mobile Control Enabled
|
||||
/// </summary>
|
||||
public bool IsMobileControlEnabled { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// The bridge for this room if Mobile Control is enabled
|
||||
/// </summary>
|
||||
public IMobileControlRoomBridge MobileControlRoomBridge { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// The config name of the source list
|
||||
/// </summary>
|
||||
public string SourceListKey { get; set; }
|
||||
///
|
||||
protected string _SourceListKey;
|
||||
public virtual string SourceListKey {
|
||||
get
|
||||
{
|
||||
return _SourceListKey;
|
||||
}
|
||||
set
|
||||
{
|
||||
_SourceListKey = value;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Timer used for informing the UIs of a shutdown
|
||||
@@ -58,7 +81,9 @@ namespace PepperDash.Essentials.Core
|
||||
|
||||
public Core.Privacy.MicrophonePrivacyController MicrophonePrivacy { get; set; }
|
||||
|
||||
public string LogoUrl { get; set; }
|
||||
public string LogoUrlLightBkgnd { get; set; }
|
||||
|
||||
public string LogoUrlDarkBkgnd { get; set; }
|
||||
|
||||
protected SecondsCountdownTimer RoomVacancyShutdownTimer { get; private set; }
|
||||
|
||||
@@ -128,6 +153,34 @@ namespace PepperDash.Essentials.Core
|
||||
});
|
||||
}
|
||||
|
||||
public override bool CustomActivate()
|
||||
{
|
||||
SetUpMobileControl();
|
||||
|
||||
return base.CustomActivate();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// If mobile control is enabled, sets the appropriate properties
|
||||
/// </summary>
|
||||
void SetUpMobileControl()
|
||||
{
|
||||
var mcBridgeKey = string.Format("mobileControlBridge-{0}", Key);
|
||||
var mcBridge = DeviceManager.GetDeviceForKey(mcBridgeKey);
|
||||
if (mcBridge == null)
|
||||
{
|
||||
Debug.Console(1, this, "*********************Mobile Control Bridge Not found for this room.");
|
||||
IsMobileControlEnabled = false;
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
MobileControlRoomBridge = mcBridge as IMobileControlRoomBridge;
|
||||
Debug.Console(1, this, "*********************Mobile Control Bridge found and enabled for this room");
|
||||
IsMobileControlEnabled = true;
|
||||
}
|
||||
}
|
||||
|
||||
void RoomVacancyShutdownPromptTimer_HasFinished(object sender, EventArgs e)
|
||||
{
|
||||
switch (VacancyMode)
|
||||
|
||||
@@ -14,6 +14,8 @@
|
||||
public UiSetupPropertiesConfig Setup { get; set; }
|
||||
public string HeaderStyle { get; set; }
|
||||
public bool IncludeInFusionRoomHealth { get; set; }
|
||||
public uint ScreenSaverTimeoutMin { get; set; }
|
||||
public uint ScreenSaverMovePositionIntervalMs { get; set; }
|
||||
|
||||
|
||||
/// <summary>
|
||||
@@ -26,6 +28,10 @@
|
||||
{
|
||||
SourcesOverflowCount = 5;
|
||||
HeaderStyle = CrestronTouchpanelPropertiesConfig.Habanero;
|
||||
|
||||
// Default values
|
||||
ScreenSaverTimeoutMin = 5;
|
||||
ScreenSaverMovePositionIntervalMs = 15000;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using Crestron.SimplSharp;
|
||||
using PepperDash.Essentials.Core;
|
||||
using PepperDash.Essentials.Devices.Common.VideoCodec.Cisco;
|
||||
|
||||
namespace PepperDash.Essentials.Devices.Common.Codec
|
||||
{
|
||||
public interface IHasExternalSourceSwitching
|
||||
{
|
||||
bool ExternalSourceListEnabled { get; }
|
||||
void AddExternalSource(string connectorId, string key, string name, eExternalSourceType type);
|
||||
void SetExternalSourceState(string key, eExternalSourceMode mode);
|
||||
void ClearExternalSources();
|
||||
Action<string, string> RunRouteAction { set;}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -112,6 +112,7 @@
|
||||
<Compile Include="Codec\eCodecCallStatus.cs" />
|
||||
<Compile Include="Codec\eMeetingPrivacy.cs" />
|
||||
<Compile Include="Codec\iCodecAudio.cs" />
|
||||
<Compile Include="Codec\IHasExternalSourceSwitching.cs" />
|
||||
<Compile Include="ImageProcessors\TVOneCorio.cs" />
|
||||
<Compile Include="ImageProcessors\TVOneCorioPropertiesConfig.cs" />
|
||||
<Compile Include="Power Controllers\Digitallogger.cs" />
|
||||
|
||||
@@ -15,16 +15,17 @@ using PepperDash.Essentials.Core.Config;
|
||||
using PepperDash.Essentials.Core.Routing;
|
||||
using PepperDash.Essentials.Devices.Common.Cameras;
|
||||
using PepperDash.Essentials.Devices.Common.Codec;
|
||||
using PepperDash.Essentials.Core;
|
||||
using PepperDash.Essentials.Devices.Common.VideoCodec;
|
||||
|
||||
namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco
|
||||
{
|
||||
enum eCommandType { SessionStart, SessionEnd, Command, GetStatus, GetConfiguration };
|
||||
public enum eExternalSourceType {camera, desktop, document_camera, mediaplayer, PC, whiteboard, other}
|
||||
public enum eExternalSourceMode {Ready, NotReady, Hidden, Error}
|
||||
|
||||
public class CiscoSparkCodec : VideoCodecBase, IHasCallHistory, IHasCallFavorites, IHasDirectory,
|
||||
IHasScheduleAwareness, IOccupancyStatusProvider, IHasCodecLayouts, IHasCodecSelfView,
|
||||
ICommunicationMonitor, IRouting, IHasCodecCameras, IHasCameraAutoMode, IHasCodecRoomPresets
|
||||
ICommunicationMonitor, IRouting, IHasCodecCameras, IHasCameraAutoMode, IHasCodecRoomPresets, IHasExternalSourceSwitching
|
||||
{
|
||||
public event EventHandler<DirectoryEventArgs> DirectoryResultReturned;
|
||||
|
||||
@@ -348,6 +349,7 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco
|
||||
|
||||
CallHistory = new CodecCallHistory();
|
||||
|
||||
|
||||
if (props.Favorites != null)
|
||||
{
|
||||
CallFavorites = new CodecCallFavorites();
|
||||
@@ -398,6 +400,11 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco
|
||||
SetUpCameras();
|
||||
|
||||
CreateOsdSource();
|
||||
|
||||
if (props.ExternalSourceListEnabled != null)
|
||||
{
|
||||
ExternalSourceListEnabled = props.ExternalSourceListEnabled;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -472,7 +479,8 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco
|
||||
prefix + "/Bookings" + Delimiter +
|
||||
prefix + "/Event/CallDisconnect" + Delimiter +
|
||||
prefix + "/Event/Bookings" + Delimiter +
|
||||
prefix + "/Event/CameraPresetListUpdated" + Delimiter;
|
||||
prefix + "/Event/CameraPresetListUpdated" + Delimiter +
|
||||
prefix + "/Event/UserInterface/Presentation/ExternalSource/Selected/SourceIdentifier" + Delimiter;
|
||||
|
||||
return base.CustomActivate();
|
||||
}
|
||||
@@ -629,6 +637,7 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -853,6 +862,18 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco
|
||||
{
|
||||
GetBookings(null);
|
||||
}
|
||||
|
||||
else if (response.IndexOf("\"UserInterface\":{") > -1 || response.IndexOf("\"UserInterface\": {") > -1) // External Source Trigger
|
||||
{
|
||||
CiscoCodecEvents.RootObject eventReceived = new CiscoCodecEvents.RootObject();
|
||||
JsonConvert.PopulateObject(response, eventReceived);
|
||||
Debug.Console(2, this, "*** Got an External Source Selection {0} {1}", eventReceived, eventReceived.Event.UserInterface, eventReceived.Event.UserInterface.Presentation.ExternalSource.Selected.SourceIdentifier.Value);
|
||||
|
||||
if (RunRouteAction != null)
|
||||
{
|
||||
RunRouteAction(eventReceived.Event.UserInterface.Presentation.ExternalSource.Selected.SourceIdentifier.Value, null);
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (response.IndexOf("\"CommandResponse\":{") > -1 || response.IndexOf("\"CommandResponse\": {") > -1)
|
||||
{
|
||||
@@ -1699,7 +1720,8 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco
|
||||
{
|
||||
get
|
||||
{
|
||||
if (CodecConfiguration.Configuration.H323 != null && CodecConfiguration.Configuration.H323.H323Alias.E164 != null)
|
||||
if (CodecConfiguration.Configuration.H323 != null && CodecConfiguration.Configuration.H323.H323Alias != null
|
||||
&& CodecConfiguration.Configuration.H323.H323Alias.ID != null)
|
||||
{
|
||||
return CodecConfiguration.Configuration.H323.H323Alias.ID.Value;
|
||||
}
|
||||
@@ -1801,9 +1823,76 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco
|
||||
SendText(string.Format("xCommand Call FarEndControl RoomPreset Activate CallId: {0} PresetId: {1}", GetCallId(), preset));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
#region IHasExternalSourceSwitching Members
|
||||
|
||||
/// <summary>
|
||||
/// Weather the Cisco supports External Source Lists or not
|
||||
/// </summary>
|
||||
public bool ExternalSourceListEnabled
|
||||
{
|
||||
get;
|
||||
private set;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Adds an external source to the Cisco
|
||||
/// </summary>
|
||||
/// <param name="connectorId"></param>
|
||||
/// <param name="key"></param>
|
||||
/// <param name="name"></param>
|
||||
public void AddExternalSource(string connectorId, string key, string name, eExternalSourceType type)
|
||||
{
|
||||
int id = 2;
|
||||
if (connectorId.ToLower() == "hdmiin3")
|
||||
{
|
||||
id = 3;
|
||||
}
|
||||
SendText(string.Format("xCommand UserInterface Presentation ExternalSource Add ConnectorId: {0} SourceIdentifier: \"{1}\" Name: \"{2}\" Type: {3}", id, key, name, type.ToString()));
|
||||
// SendText(string.Format("xCommand UserInterface Presentation ExternalSource State Set SourceIdentifier: \"{0}\" State: Ready", key));
|
||||
Debug.Console(2, this, "Adding ExternalSource {0} {1}", connectorId, name);
|
||||
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Sets the state of the External Source
|
||||
/// </summary>
|
||||
/// <param name="key"></param>
|
||||
/// <param name="mode"></param>
|
||||
public void SetExternalSourceState(string key, eExternalSourceMode mode)
|
||||
{
|
||||
SendText(string.Format("xCommand UserInterface Presentation ExternalSource State Set SourceIdentifier: \"{0}\" State: {1}", key, mode.ToString()));
|
||||
}
|
||||
/// <summary>
|
||||
/// Clears all external sources on the codec
|
||||
/// </summary>
|
||||
public void ClearExternalSources()
|
||||
{
|
||||
SendText("xCommand UserInterface Presentation ExternalSource RemoveAll");
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Action that will run when the External Source is selected.
|
||||
/// </summary>
|
||||
public Action<string, string> RunRouteAction { private get; set; }
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#endregion
|
||||
#region ExternalDevices
|
||||
|
||||
|
||||
|
||||
#endregion
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Represents a codec command that might need to have a friendly label applied for UI feedback purposes
|
||||
/// </summary>
|
||||
public class CodecCommandWithLabel
|
||||
|
||||
@@ -1,47 +1,50 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using Crestron.SimplSharp;
|
||||
|
||||
using PepperDash.Core;
|
||||
using PepperDash.Essentials.Core;
|
||||
|
||||
using Newtonsoft.Json;
|
||||
|
||||
namespace PepperDash.Essentials.Devices.Common.Codec
|
||||
{
|
||||
public class CiscoSparkCodecPropertiesConfig
|
||||
{
|
||||
[JsonProperty("communicationMonitorProperties")]
|
||||
public CommunicationMonitorConfig CommunicationMonitorProperties { get; set; }
|
||||
|
||||
[JsonProperty("favorites")]
|
||||
public List<CodecActiveCallItem> Favorites { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Valid values: "Local" or "Corporate"
|
||||
/// </summary>
|
||||
[JsonProperty("phonebookMode")]
|
||||
public string PhonebookMode { get; set; }
|
||||
|
||||
[JsonProperty("showSelfViewByDefault")]
|
||||
public bool ShowSelfViewByDefault { get; set; }
|
||||
|
||||
[JsonProperty("sharing")]
|
||||
public SharingProperties Sharing { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Optionsal property to set the limit of any phonebook queries for directory or searching
|
||||
/// </summary>
|
||||
[JsonProperty("phonebookResultsLimit")]
|
||||
public uint PhonebookResultsLimit { get; set; }
|
||||
|
||||
}
|
||||
|
||||
public class SharingProperties
|
||||
{
|
||||
[JsonProperty("autoShareContentWhileInCall")]
|
||||
public bool AutoShareContentWhileInCall { get; set; }
|
||||
}
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using Crestron.SimplSharp;
|
||||
|
||||
using PepperDash.Core;
|
||||
using PepperDash.Essentials.Core;
|
||||
|
||||
using Newtonsoft.Json;
|
||||
|
||||
namespace PepperDash.Essentials.Devices.Common.Codec
|
||||
{
|
||||
public class CiscoSparkCodecPropertiesConfig
|
||||
{
|
||||
[JsonProperty("communicationMonitorProperties")]
|
||||
public CommunicationMonitorConfig CommunicationMonitorProperties { get; set; }
|
||||
|
||||
[JsonProperty("favorites")]
|
||||
public List<CodecActiveCallItem> Favorites { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Valid values: "Local" or "Corporate"
|
||||
/// </summary>
|
||||
[JsonProperty("phonebookMode")]
|
||||
public string PhonebookMode { get; set; }
|
||||
|
||||
[JsonProperty("showSelfViewByDefault")]
|
||||
public bool ShowSelfViewByDefault { get; set; }
|
||||
|
||||
[JsonProperty("sharing")]
|
||||
public SharingProperties Sharing { get; set; }
|
||||
|
||||
[JsonProperty("externalSourceListEnabled")]
|
||||
public bool ExternalSourceListEnabled { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Optionsal property to set the limit of any phonebook queries for directory or searching
|
||||
/// </summary>
|
||||
[JsonProperty("phonebookResultsLimit")]
|
||||
public uint PhonebookResultsLimit { get; set; }
|
||||
|
||||
}
|
||||
|
||||
public class SharingProperties
|
||||
{
|
||||
[JsonProperty("autoShareContentWhileInCall")]
|
||||
public bool AutoShareContentWhileInCall { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -126,11 +126,36 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco
|
||||
public Encryption Encryption { get; set; }
|
||||
public RequestedURI RequestedURI { get; set; }
|
||||
public PeopleCountAverage PeopleCountAverage { get; set; }
|
||||
}
|
||||
|
||||
}
|
||||
public class UserInterface
|
||||
{
|
||||
public string id { get; set; }
|
||||
public Presentation Presentation { get; set; }
|
||||
}
|
||||
public class Presentation
|
||||
{
|
||||
public string id { get; set; }
|
||||
public ExternalSource ExternalSource { get; set; }
|
||||
}
|
||||
public class ExternalSource
|
||||
{
|
||||
public string id { get; set; }
|
||||
public Selected Selected { get; set; }
|
||||
}
|
||||
public class Selected
|
||||
{
|
||||
public string id { get; set; }
|
||||
public SourceIdentifier SourceIdentifier { get; set; }
|
||||
}
|
||||
public class SourceIdentifier
|
||||
{
|
||||
public string id { get; set; }
|
||||
public string Value { get; set; }
|
||||
}
|
||||
public class Event
|
||||
{
|
||||
public CallDisconnect CallDisconnect { get; set; }
|
||||
public CallDisconnect CallDisconnect { get; set; }
|
||||
public UserInterface UserInterface { get; set; }
|
||||
}
|
||||
|
||||
public class RootObject
|
||||
|
||||
Reference in New Issue
Block a user