mirror of
https://github.com/PepperDash/Essentials.git
synced 2026-02-16 21:24:54 +00:00
Update to support Cisco Codec External Sources using Essentials Room logic.
Adds new interface for Codecs IHasExternalSourceSwitching Adds ability to set and clear External Sources in Cisco Spark device class Adds ability to send sources from the source list to the Cisco Spark in the "EssentialsHuddleVtc1Room" room [ ] still needs parsing when source is selected on the Cisco touch 10
This commit is contained in:
@@ -50,6 +50,24 @@ namespace PepperDash.Essentials
|
||||
|
||||
//************************
|
||||
|
||||
public override string SourceListKey
|
||||
{
|
||||
get
|
||||
{
|
||||
return _SourceListKey;
|
||||
}
|
||||
set
|
||||
{
|
||||
_SourceListKey = value;
|
||||
if(VideoCodec is IHasExternalSourceSwitching)
|
||||
{
|
||||
if((VideoCodec as IHasExternalSourceSwitching).ExternalSourceListEnabled)
|
||||
{
|
||||
SetCodecExternalSources();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected override Func<bool> OnFeedbackFunc
|
||||
{
|
||||
@@ -206,9 +224,14 @@ namespace PepperDash.Essentials
|
||||
|
||||
VideoCodec = DeviceManager.GetDeviceForKey(PropertiesConfig.VideoCodecKey) as
|
||||
PepperDash.Essentials.Devices.Common.VideoCodec.VideoCodecBase;
|
||||
|
||||
|
||||
if (VideoCodec == null)
|
||||
throw new ArgumentNullException("codec cannot be null");
|
||||
|
||||
|
||||
//todo Do the thing here JTA
|
||||
|
||||
AudioCodec = DeviceManager.GetDeviceForKey(PropertiesConfig.AudioCodecKey) as
|
||||
PepperDash.Essentials.Devices.Common.AudioCodec.AudioCodecBase;
|
||||
if (AudioCodec == null)
|
||||
@@ -298,6 +321,7 @@ namespace PepperDash.Essentials
|
||||
|
||||
|
||||
VideoCodec.CallStatusChange += (o, a) => this.InCallFeedback.FireUpdate();
|
||||
VideoCodec.IsReadyChange += (o, a) => this.SetCodecExternalSources();
|
||||
|
||||
if (AudioCodec != null)
|
||||
AudioCodec.CallStatusChange += (o, a) => this.InCallFeedback.FireUpdate();
|
||||
@@ -350,7 +374,6 @@ namespace PepperDash.Essentials
|
||||
return base.CustomActivate();
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
@@ -672,6 +695,30 @@ namespace PepperDash.Essentials
|
||||
(room as EssentialsHuddleSpaceRoom).RunRouteAction("roomOff");
|
||||
}
|
||||
|
||||
private void SetCodecExternalSources()
|
||||
{
|
||||
|
||||
string codecTieLine = "";
|
||||
codecTieLine = ConfigReader.ConfigObject.TieLines.SingleOrDefault(x => x.DestinationKey == VideoCodec.Key).DestinationPort;
|
||||
(VideoCodec as IHasExternalSourceSwitching).ClearExternalSources();
|
||||
(VideoCodec as IHasExternalSourceSwitching).RunRouteAction = RunRouteAction;
|
||||
var srcList = ConfigReader.ConfigObject.SourceLists.SingleOrDefault(x => x.Key == SourceListKey).Value.OrderBy(kv => kv.Value.Order);;
|
||||
|
||||
foreach (var kvp in srcList)
|
||||
{
|
||||
var srcConfig = kvp.Value;
|
||||
Debug.Console(1, "**** KEY {0}", kvp.Key);
|
||||
|
||||
if (kvp.Key != "codecOsd" && kvp.Key != "roomOff")
|
||||
{
|
||||
|
||||
(VideoCodec as IHasExternalSourceSwitching).AddExternalSource(codecTieLine, srcConfig.PreferredName);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#region IPrivacy Members
|
||||
|
||||
|
||||
|
||||
@@ -1050,10 +1050,13 @@ namespace PepperDash.Essentials
|
||||
|
||||
var inCall = CurrentRoom.InCallFeedback.BoolValue;
|
||||
var config = ConfigReader.ConfigObject.SourceLists;
|
||||
|
||||
|
||||
if (config.ContainsKey(_CurrentRoom.SourceListKey))
|
||||
{
|
||||
var srcList = config[_CurrentRoom.SourceListKey].OrderBy(kv => kv.Value.Order);
|
||||
|
||||
|
||||
// Setup sources list
|
||||
SourceStagingSrl.Clear();
|
||||
uint i = 1; // counter for UI list
|
||||
@@ -1076,6 +1079,8 @@ namespace PepperDash.Essentials
|
||||
b => { if (!b) UiSelectSource(routeKey); });
|
||||
SourceStagingSrl.AddItem(item); // add to the SRL
|
||||
item.RegisterForSourceChange(_CurrentRoom);
|
||||
Debug.Console(1, "**** KEY {0}", kvp.Key);
|
||||
|
||||
}
|
||||
SourceStagingSrl.Count = (ushort)(i - 1);
|
||||
}
|
||||
|
||||
@@ -51,7 +51,19 @@ namespace PepperDash.Essentials.Core
|
||||
/// <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
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using Crestron.SimplSharp;
|
||||
using PepperDash.Essentials.Core;
|
||||
namespace PepperDash.Essentials.Devices.Common.Codec
|
||||
{
|
||||
public interface IHasExternalSourceSwitching
|
||||
{
|
||||
bool ExternalSourceListEnabled { get; }
|
||||
void AddExternalSource(string connectorId, string name);
|
||||
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,16 @@ 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 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 +348,7 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco
|
||||
|
||||
CallHistory = new CodecCallHistory();
|
||||
|
||||
|
||||
if (props.Favorites != null)
|
||||
{
|
||||
CallFavorites = new CodecCallFavorites();
|
||||
@@ -398,6 +399,11 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco
|
||||
SetUpCameras();
|
||||
|
||||
CreateOsdSource();
|
||||
|
||||
if (props.ExternalSourceListEnabled != null)
|
||||
{
|
||||
ExternalSourceListEnabled = props.ExternalSourceListEnabled;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -472,7 +478,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 +636,11 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco
|
||||
}
|
||||
}
|
||||
}
|
||||
//TODO JTA FInish Parsing for External Sources
|
||||
if (args.Text == "ExternalSource")
|
||||
{
|
||||
RunRouteAction("", "");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1802,9 +1814,57 @@ 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>
|
||||
///
|
||||
/// </summary>
|
||||
public bool ExternalSourceListEnabled
|
||||
{
|
||||
get;
|
||||
private set;
|
||||
}
|
||||
|
||||
public void AddExternalSource(string connectorId, string name)
|
||||
{
|
||||
int id = 2;
|
||||
if (connectorId.ToLower() == "hdmiin3")
|
||||
{
|
||||
id = 3;
|
||||
}
|
||||
SendText(string.Format("xCommand UserInterface Presentation ExternalSource Add ConnectorId: {0} SourceIdentifier: \"{1}\" Name: \"{2}\" Type: desktop", id, name, name));
|
||||
Debug.Console(2, this, "Adding ExternalSource {0} {1}", connectorId, name);
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public void ClearExternalSources()
|
||||
{
|
||||
SendText("xCommand UserInterface Presentation ExternalSource RemoveAll");
|
||||
|
||||
}
|
||||
|
||||
|
||||
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
|
||||
|
||||
@@ -31,6 +31,9 @@ namespace PepperDash.Essentials.Devices.Common.Codec
|
||||
[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>
|
||||
|
||||
Reference in New Issue
Block a user