refactor: update constructors for touchpanel controller and base class

This commit is contained in:
Andrew Welker
2022-09-02 14:35:06 -06:00
parent d01be57f81
commit 88a16b577b
2 changed files with 77 additions and 132 deletions

View File

@@ -12,35 +12,21 @@ using PepperDash.Essentials.Core;
using PepperDash.Essentials.Core.Config; using PepperDash.Essentials.Core.Config;
using PepperDash.Essentials.Core.PageManagers; using PepperDash.Essentials.Core.PageManagers;
using PepperDash.Essentials.Core.UI; using PepperDash.Essentials.Core.UI;
using Newtonsoft.Json;
namespace PepperDash.Essentials namespace PepperDash.Essentials
{ {
public class EssentialsTouchpanelController : TouchpanelBase public class EssentialsTouchpanelController : TouchpanelBase
{ {
private CrestronTouchpanelPropertiesConfig _propertiesConfig;
public BasicTriListWithSmartObject Panel { get; private set; }
public PanelDriverBase PanelDriver { get; private set; } public PanelDriverBase PanelDriver { get; private set; }
CTimer BacklightTransitionedOnTimer; CTimer BacklightTransitionedOnTimer;
public EssentialsTouchpanelController(string key, string name, Tswx52ButtonVoiceControl tsw,
string projectName, string sgdPath)
: base(key, name, tsw, sgdPath)
{
}
public EssentialsTouchpanelController(string key, string name, Dge100 dge, string projectName, string sgdPath)
: base(key, name, dge, sgdPath)
{
}
/// <summary> /// <summary>
/// Config constructor /// Config constructor
/// </summary> /// </summary>
public EssentialsTouchpanelController(string key, string name, string type, CrestronTouchpanelPropertiesConfig props, uint id) public EssentialsTouchpanelController(string key, string name, BasicTriListWithSmartObject panel, CrestronTouchpanelPropertiesConfig config)
: base(key, name, type, props, id) : base(key, name, panel, config)
{ {
} }
@@ -56,7 +42,7 @@ namespace PepperDash.Essentials
Debug.Console(0, this, "Linking TP '{0}' to Room '{1}'", Key, roomKey); Debug.Console(0, this, "Linking TP '{0}' to Room '{1}'", Key, roomKey);
var mainDriver = new EssentialsPanelMainInterfaceDriver(Panel, _propertiesConfig); var mainDriver = new EssentialsPanelMainInterfaceDriver(Panel, _config);
// Then the sub drivers // Then the sub drivers
// spin up different room drivers depending on room type // spin up different room drivers depending on room type
@@ -65,15 +51,15 @@ namespace PepperDash.Essentials
{ {
// Screen Saver Driver // Screen Saver Driver
mainDriver.ScreenSaverController = new ScreenSaverController(mainDriver, _propertiesConfig); mainDriver.ScreenSaverController = new ScreenSaverController(mainDriver, _config);
// Header Driver // Header Driver
Debug.Console(0, this, "Adding header driver"); Debug.Console(0, this, "Adding header driver");
mainDriver.HeaderDriver = new EssentialsHeaderDriver(mainDriver, _propertiesConfig); mainDriver.HeaderDriver = new EssentialsHeaderDriver(mainDriver, _config);
// AV Driver // AV Driver
Debug.Console(0, this, "Adding huddle space AV driver"); Debug.Console(0, this, "Adding huddle space AV driver");
var avDriver = new EssentialsHuddlePanelAvFunctionsDriver(mainDriver, _propertiesConfig); var avDriver = new EssentialsHuddlePanelAvFunctionsDriver(mainDriver, _config);
avDriver.DefaultRoomKey = roomKey; avDriver.DefaultRoomKey = roomKey;
mainDriver.AvDriver = avDriver; mainDriver.AvDriver = avDriver;
avDriver.CurrentRoom = room as IEssentialsHuddleSpaceRoom; avDriver.CurrentRoom = room as IEssentialsHuddleSpaceRoom;
@@ -82,7 +68,7 @@ namespace PepperDash.Essentials
if (avDriver.CurrentRoom.PropertiesConfig.Environment != null && avDriver.CurrentRoom.PropertiesConfig.Environment.DeviceKeys.Count > 0) if (avDriver.CurrentRoom.PropertiesConfig.Environment != null && avDriver.CurrentRoom.PropertiesConfig.Environment.DeviceKeys.Count > 0)
{ {
Debug.Console(0, this, "Adding environment driver"); Debug.Console(0, this, "Adding environment driver");
mainDriver.EnvironmentDriver = new EssentialsEnvironmentDriver(mainDriver, _propertiesConfig); mainDriver.EnvironmentDriver = new EssentialsEnvironmentDriver(mainDriver, _config);
mainDriver.EnvironmentDriver.GetDevicesFromConfig(avDriver.CurrentRoom.PropertiesConfig.Environment); mainDriver.EnvironmentDriver.GetDevicesFromConfig(avDriver.CurrentRoom.PropertiesConfig.Environment);
} }
@@ -111,13 +97,13 @@ namespace PepperDash.Essentials
Debug.Console(0, this, "Adding huddle space VTC AV driver"); Debug.Console(0, this, "Adding huddle space VTC AV driver");
// Screen Saver Driver // Screen Saver Driver
mainDriver.ScreenSaverController = new ScreenSaverController(mainDriver, _propertiesConfig); mainDriver.ScreenSaverController = new ScreenSaverController(mainDriver, _config);
// Header Driver // Header Driver
mainDriver.HeaderDriver = new EssentialsHeaderDriver(mainDriver, _propertiesConfig); mainDriver.HeaderDriver = new EssentialsHeaderDriver(mainDriver, _config);
// AV Driver // AV Driver
var avDriver = new EssentialsHuddleVtc1PanelAvFunctionsDriver(mainDriver, _propertiesConfig); var avDriver = new EssentialsHuddleVtc1PanelAvFunctionsDriver(mainDriver, _config);
var codecDriver = new PepperDash.Essentials.UIDrivers.VC.EssentialsVideoCodecUiDriver(Panel, avDriver, var codecDriver = new PepperDash.Essentials.UIDrivers.VC.EssentialsVideoCodecUiDriver(Panel, avDriver,
(room as IEssentialsHuddleVtc1Room).VideoCodec, mainDriver.HeaderDriver); (room as IEssentialsHuddleVtc1Room).VideoCodec, mainDriver.HeaderDriver);
@@ -130,7 +116,7 @@ namespace PepperDash.Essentials
if (avDriver.CurrentRoom.PropertiesConfig.Environment != null && avDriver.CurrentRoom.PropertiesConfig.Environment.DeviceKeys.Count > 0) if (avDriver.CurrentRoom.PropertiesConfig.Environment != null && avDriver.CurrentRoom.PropertiesConfig.Environment.DeviceKeys.Count > 0)
{ {
Debug.Console(0, this, "Adding environment driver"); Debug.Console(0, this, "Adding environment driver");
mainDriver.EnvironmentDriver = new EssentialsEnvironmentDriver(mainDriver, _propertiesConfig); mainDriver.EnvironmentDriver = new EssentialsEnvironmentDriver(mainDriver, _config);
mainDriver.EnvironmentDriver.GetDevicesFromConfig(avDriver.CurrentRoom.PropertiesConfig.Environment); mainDriver.EnvironmentDriver.GetDevicesFromConfig(avDriver.CurrentRoom.PropertiesConfig.Environment);
} }
@@ -229,13 +215,69 @@ namespace PepperDash.Essentials
public override EssentialsDevice BuildDevice(DeviceConfig dc) public override EssentialsDevice BuildDevice(DeviceConfig dc)
{ {
var comm = CommFactory.GetControlPropertiesConfig(dc); var comm = CommFactory.GetControlPropertiesConfig(dc);
var props = Newtonsoft.Json.JsonConvert.DeserializeObject<CrestronTouchpanelPropertiesConfig>(dc.Properties.ToString()); var props = JsonConvert.DeserializeObject<CrestronTouchpanelPropertiesConfig>(dc.Properties.ToString());
var panel = GetPanelForType(dc.Type, comm.IpIdInt, props.ProjectName);
Debug.Console(1, "Factory Attempting to create new EssentialsTouchpanelController"); Debug.Console(1, "Factory Attempting to create new EssentialsTouchpanelController");
var panelController = new EssentialsTouchpanelController(dc.Key, dc.Name, dc.Type, props, comm.IpIdInt); var panelController = new EssentialsTouchpanelController(dc.Key, dc.Name, panel, props);
return panelController; return panelController;
} }
private BasicTriListWithSmartObject GetPanelForType(string type, uint id, string projectName)
{
type = type.ToLower();
try
{
if (type == "crestronapp")
{
var app = new CrestronApp(id, Global.ControlSystem);
app.ParameterProjectName.Value = projectName;
return app;
}
else if (type == "xpanel")
return new XpanelForSmartGraphics(id, Global.ControlSystem);
else if (type == "tsw550")
return new Tsw550(id, Global.ControlSystem);
else if (type == "tsw552")
return new Tsw552(id, Global.ControlSystem);
else if (type == "tsw560")
return new Tsw560(id, Global.ControlSystem);
else if (type == "tsw750")
return new Tsw750(id, Global.ControlSystem);
else if (type == "tsw752")
return new Tsw752(id, Global.ControlSystem);
else if (type == "tsw760")
return new Tsw760(id, Global.ControlSystem);
else if (type == "tsw1050")
return new Tsw1050(id, Global.ControlSystem);
else if (type == "tsw1052")
return new Tsw1052(id, Global.ControlSystem);
else if (type == "tsw1060")
return new Tsw1060(id, Global.ControlSystem);
else if (type == "tsw570")
return new Tsw570(id, Global.ControlSystem);
else if (type == "tsw770")
return new Tsw770(id, Global.ControlSystem);
else if (type == "ts770")
return new Ts770(id, Global.ControlSystem);
else if (type == "tsw1070")
return new Tsw1070(id, Global.ControlSystem);
else if (type == "ts1070")
return new Ts1070(id, Global.ControlSystem);
else
{
Debug.Console(0, Debug.ErrorLogLevel.Notice, "WARNING: Cannot create TSW controller with type '{0}'", type);
return null;
}
}
catch (Exception e)
{
Debug.Console(0, Debug.ErrorLogLevel.Notice, "WARNING: Cannot create TSW base class. Panel will not function: {0}", e.Message);
return null;
}
}
} }
} }

View File

@@ -28,49 +28,9 @@ namespace PepperDash.Essentials.Core.UI
protected TouchpanelBase(string key, string name, Tswx52ButtonVoiceControl tsw, string sgdPath) protected TouchpanelBase(string key, string name, Tswx52ButtonVoiceControl tsw, string sgdPath)
:base(key, name) :base(key, name)
{ {
Panel = tsw;
//moving loading of SGD to preactivation action...should make creation quicker
AddPreActivationAction(() => {
if(!string.IsNullOrEmpty(sgdPath))
{
Debug.Console(1, this, "Loading sgd file from {0}", sgdPath);
Panel.LoadSmartObjects(sgdPath);
return;
}
Debug.Console(1, this, "No SGD file path defined");
});
Panel.SigChange += Panel_SigChange;
} }
/// <summary>
/// Constructor for use with DGE panels. This constructor attempts to load the provided SGD file from the provided SGD path and subscribes to the
/// `SigChange` event for the provided DGE.
/// </summary>
/// <param name="key">Essentials Device Key</param>
/// <param name="name">Essentials Device Name</param>
/// <param name="dge">Provided DGE</param>
/// <param name="sgdPath">Path to SGD file</param>
protected TouchpanelBase(string key, string name, Dge100 dge, string sgdPath):base(key, name)
{
Panel = dge;
AddPreActivationAction(() =>
{
if (!string.IsNullOrEmpty(sgdPath))
{
Debug.Console(1, this, "Loading sgd file from {0}", sgdPath);
Panel.LoadSmartObjects(sgdPath);
return;
}
Debug.Console(1, this, "No SGD file path defined");
});
Panel.SigChange += Panel_SigChange;
}
/// <summary> /// <summary>
/// Constructor for use with device Factory. A touch panel device will be created based on the provided IP-ID and the /// Constructor for use with device Factory. A touch panel device will be created based on the provided IP-ID and the
@@ -82,14 +42,10 @@ namespace PepperDash.Essentials.Core.UI
/// <param name="type">Touchpanel Type to build</param> /// <param name="type">Touchpanel Type to build</param>
/// <param name="config">Touchpanel Configuration</param> /// <param name="config">Touchpanel Configuration</param>
/// <param name="id">IP-ID to use for touch panel</param> /// <param name="id">IP-ID to use for touch panel</param>
protected TouchpanelBase(string key, string name, string type, CrestronTouchpanelPropertiesConfig config, uint id) protected TouchpanelBase(string key, string name, BasicTriListWithSmartObject panel, CrestronTouchpanelPropertiesConfig config)
:base(key, name) :base(key, name)
{ {
var panel = GetPanelForType(type, id); Panel = panel;
if(panel != null)
{
Panel = panel;
}
if (Panel is TswFt5ButtonSystem) if (Panel is TswFt5ButtonSystem)
{ {
@@ -100,7 +56,8 @@ namespace PepperDash.Essentials.Core.UI
tsw.ButtonStateChange += Tsw_ButtonStateChange; tsw.ButtonStateChange += Tsw_ButtonStateChange;
} }
_config = config;
AddPreActivationAction(() => { AddPreActivationAction(() => {
if (Panel.Register() != eDeviceRegistrationUnRegistrationResponse.Success) if (Panel.Register() != eDeviceRegistrationUnRegistrationResponse.Success)
@@ -112,7 +69,7 @@ namespace PepperDash.Essentials.Core.UI
{ {
Debug.Console(0, this, "Smart object file '{0}' not present in User folder. Looking for embedded file", sgdName); Debug.Console(0, this, "Smart object file '{0}' not present in User folder. Looking for embedded file", sgdName);
sgdName = Global.ApplicationDirectoryPathPrefix + Global.DirectorySeparator + "SGD" + Global.DirectorySeparator + config.SgdFile; sgdName = Global.ApplicationDirectoryPathPrefix + Global.DirectorySeparator + "SGD" + Global.DirectorySeparator + _config.SgdFile;
if (!File.Exists(sgdName)) if (!File.Exists(sgdName))
{ {
@@ -191,60 +148,6 @@ namespace PepperDash.Essentials.Core.UI
SetupPanelDrivers(newRoomKey); SetupPanelDrivers(newRoomKey);
} }
private BasicTriListWithSmartObject GetPanelForType(string type, uint id)
{
type = type.ToLower();
try
{
if (type == "crestronapp")
{
var app = new CrestronApp(id, Global.ControlSystem);
app.ParameterProjectName.Value = _config.ProjectName;
return app;
}
else if (type == "xpanel")
return new XpanelForSmartGraphics(id, Global.ControlSystem);
else if (type == "tsw550")
return new Tsw550(id, Global.ControlSystem);
else if (type == "tsw552")
return new Tsw552(id, Global.ControlSystem);
else if (type == "tsw560")
return new Tsw560(id, Global.ControlSystem);
else if (type == "tsw750")
return new Tsw750(id, Global.ControlSystem);
else if (type == "tsw752")
return new Tsw752(id, Global.ControlSystem);
else if (type == "tsw760")
return new Tsw760(id, Global.ControlSystem);
else if (type == "tsw1050")
return new Tsw1050(id, Global.ControlSystem);
else if (type == "tsw1052")
return new Tsw1052(id, Global.ControlSystem);
else if (type == "tsw1060")
return new Tsw1060(id, Global.ControlSystem);
else if (type == "tsw570")
return new Tsw570(id, Global.ControlSystem);
else if (type == "tsw770")
return new Tsw770(id, Global.ControlSystem);
else if (type == "ts770")
return new Ts770(id, Global.ControlSystem);
else if (type == "tsw1070")
return new Tsw1070(id, Global.ControlSystem);
else if (type == "ts1070")
return new Ts1070(id, Global.ControlSystem);
else
{
Debug.Console(0, this, Debug.ErrorLogLevel.Notice, "WARNING: Cannot create TSW controller with type '{0}'", type);
return null;
}
}
catch (Exception e)
{
Debug.Console(0, this, Debug.ErrorLogLevel.Notice, "WARNING: Cannot create TSW base class. Panel will not function: {0}", e.Message);
return null;
}
}
private void Panel_SigChange(object currentDevice, Crestron.SimplSharpPro.SigEventArgs args) private void Panel_SigChange(object currentDevice, Crestron.SimplSharpPro.SigEventArgs args)
{ {
if (Debug.Level == 2) if (Debug.Level == 2)