mirror of
https://github.com/PepperDash/Essentials.git
synced 2026-02-07 00:35:07 +00:00
WIP Cresnet Gateway SUpport
This commit is contained in:
@@ -0,0 +1,30 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using Crestron.SimplSharp;
|
||||
|
||||
namespace PepperDash_Essentials_Core
|
||||
{
|
||||
public delegate void IsReadyEventHandler(object source, IsReadyEventArgs e);
|
||||
|
||||
public class IsReadyEventArgs : EventArgs
|
||||
{
|
||||
private readonly bool _EventData;
|
||||
|
||||
public IsReadyEventArgs(bool data)
|
||||
{
|
||||
_EventData = data;
|
||||
}
|
||||
|
||||
public bool GetData()
|
||||
{
|
||||
return _EventData;
|
||||
}
|
||||
}
|
||||
|
||||
public interface IHasReady
|
||||
{
|
||||
event IsReadyEventHandler IsReady;
|
||||
}
|
||||
}
|
||||
@@ -6,134 +6,182 @@ using Crestron.SimplSharp;
|
||||
using Crestron.SimplSharpPro;
|
||||
using Crestron.SimplSharpPro.Gateways;
|
||||
using Newtonsoft.Json;
|
||||
using Crestron.SimplSharpPro.DeviceSupport;
|
||||
|
||||
|
||||
using PepperDash.Core;
|
||||
using PepperDash.Essentials.Core;
|
||||
using PepperDash.Essentials.Core.Config;
|
||||
using PepperDash_Essentials_Core;
|
||||
|
||||
|
||||
namespace PepperDash.Essentials.Core
|
||||
namespace PepperDash.Essentials.Core
|
||||
{
|
||||
[Description("Wrapper class for Crestron Infinet-EX Gateways")]
|
||||
public class CenRfgwController : CrestronGenericBaseDevice
|
||||
{
|
||||
private GatewayBase _Gateway;
|
||||
public GatewayBase GateWay { get { return _Gateway; } }
|
||||
|
||||
/// <summary>
|
||||
/// Constructor for the on-board gateway
|
||||
/// </summary>
|
||||
/// <param name="key"></param>
|
||||
/// <param name="name"></param>
|
||||
public CenRfgwController(string key, string name, GatewayBase gateway) :
|
||||
base(key, name, gateway)
|
||||
{
|
||||
_Gateway = gateway;
|
||||
}
|
||||
|
||||
public static CenRfgwController GetNewExGatewayController(string key, string name, ushort ipId, ushort cresnetId, string gatewayType)
|
||||
{
|
||||
eExGatewayType type = (eExGatewayType)Enum.Parse(typeof(eExGatewayType), gatewayType, true);
|
||||
try
|
||||
{
|
||||
var cs = Global.ControlSystem;
|
||||
|
||||
GatewayBase gw = null;
|
||||
switch (type)
|
||||
{
|
||||
case eExGatewayType.Ethernet:
|
||||
gw = new CenRfgwEx(ipId, cs);
|
||||
break;
|
||||
case eExGatewayType.EthernetShared:
|
||||
gw = new CenRfgwExEthernetSharable(ipId, cs);
|
||||
break;
|
||||
case eExGatewayType.Cresnet:
|
||||
gw = new CenRfgwExCresnet(cresnetId, cs);
|
||||
break;
|
||||
}
|
||||
return new CenRfgwController(key, name, gw);
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
Debug.Console(0, "ERROR: Cannot create EX Gateway, id {0}, type {1}", type == eExGatewayType.Cresnet ? cresnetId : ipId, gatewayType);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
public static CenRfgwController GetNewErGatewayController(string key, string name, ushort ipId, ushort cresnetId, string gatewayType)
|
||||
{
|
||||
eExGatewayType type = (eExGatewayType)Enum.Parse(typeof(eExGatewayType), gatewayType, true);
|
||||
try
|
||||
{
|
||||
var cs = Global.ControlSystem;
|
||||
|
||||
GatewayBase gw = null;
|
||||
switch (type)
|
||||
{
|
||||
case eExGatewayType.Ethernet:
|
||||
gw = new CenErfgwPoe(ipId, cs);
|
||||
break;
|
||||
case eExGatewayType.EthernetShared:
|
||||
gw = new CenErfgwPoeEthernetSharable(ipId, cs);
|
||||
break;
|
||||
case eExGatewayType.Cresnet:
|
||||
gw = new CenErfgwPoeCresnet(cresnetId, cs);
|
||||
break;
|
||||
}
|
||||
return new CenRfgwController(key, name, gw);
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
Debug.Console(0, "ERROR: Cannot create ER Gateway, id {0}, type {1}", type== eExGatewayType.Cresnet ? cresnetId : ipId, gatewayType);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
public enum eExGatewayType
|
||||
{
|
||||
Ethernet, EthernetShared, Cresnet
|
||||
}
|
||||
[Description("Wrapper class for Crestron Infinet-EX Gateways")]
|
||||
public class CenRfgwController : CrestronGenericBaseDevice, IHasReady
|
||||
{
|
||||
public event IsReadyEventHandler IsReady;
|
||||
|
||||
private GatewayBase _gateway;
|
||||
|
||||
#region Factory
|
||||
public class CenRfgwControllerFactory : EssentialsDeviceFactory<CenRfgwController>
|
||||
{
|
||||
public CenRfgwControllerFactory()
|
||||
{
|
||||
TypeNames = new List<string>() { "cenrfgwex", "cenerfgwpoe" };
|
||||
}
|
||||
|
||||
public override EssentialsDevice BuildDevice(DeviceConfig dc)
|
||||
public GatewayBase GateWay
|
||||
{
|
||||
get { return _gateway; }
|
||||
}
|
||||
|
||||
Debug.Console(1, "Factory Attempting to create new CEN-GWEXER Device");
|
||||
|
||||
var props = JsonConvert.DeserializeObject<EssentialsRfGatewayConfig>(dc.Properties.ToString());
|
||||
/// <summary>
|
||||
/// Constructor for the on-board gateway
|
||||
/// </summary>
|
||||
/// <param name="key"></param>
|
||||
/// <param name="name"></param>
|
||||
public CenRfgwController(string key, string name, GatewayBase gateway) :
|
||||
base(key, name, gateway)
|
||||
{
|
||||
_gateway = gateway;
|
||||
IsReady(this, new IsReadyEventArgs(true));
|
||||
}
|
||||
|
||||
var type = dc.Type.ToLower();
|
||||
var control = props.Control;
|
||||
var ipid = control.IpIdInt;
|
||||
var cresnetId = control.CresnetIdInt;
|
||||
var gatewayType = props.GatewayType;
|
||||
|
||||
switch (type)
|
||||
public CenRfgwController(string key, Func<DeviceConfig, GatewayBase> preActivationFunc, DeviceConfig config) :
|
||||
base(key, config.Name)
|
||||
{
|
||||
IsReady(this, new IsReadyEventArgs(false));
|
||||
AddPreActivationAction(() =>
|
||||
{
|
||||
case ("cenrfgwex"):
|
||||
return CenRfgwController.GetNewExGatewayController(dc.Key, dc.Name,
|
||||
(ushort)ipid, (ushort)cresnetId, gatewayType);
|
||||
case ("cenerfgwpoe"):
|
||||
return CenRfgwController.GetNewErGatewayController(dc.Key, dc.Name,
|
||||
(ushort)ipid, (ushort)cresnetId, gatewayType);
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
_gateway = preActivationFunc(config);
|
||||
|
||||
RegisterCrestronGenericBase(_gateway);
|
||||
IsReady(this, new IsReadyEventArgs(true));
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
public static GatewayBase GetNewIpRfGateway(DeviceConfig dc)
|
||||
{
|
||||
var control = CommFactory.GetControlPropertiesConfig(dc);
|
||||
var name = dc.Name;
|
||||
var type = dc.Type;
|
||||
var key = dc.Key;
|
||||
var ipId = control.IpIdInt;
|
||||
|
||||
if (type.Equals("cenrfgwex", StringComparison.InvariantCultureIgnoreCase))
|
||||
{
|
||||
return new CenRfgwEx(ipId, Global.ControlSystem);
|
||||
}
|
||||
if (type.Equals("cenerfgwpoe", StringComparison.InvariantCultureIgnoreCase))
|
||||
{
|
||||
return new CenErfgwPoe(ipId, Global.ControlSystem);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public static GatewayBase GetNewSharedIpRfGateway(DeviceConfig dc)
|
||||
{
|
||||
var control = CommFactory.GetControlPropertiesConfig(dc);
|
||||
var ipId = control.IpIdInt;
|
||||
|
||||
if (dc.Type.Equals("cenrfgwex", StringComparison.InvariantCultureIgnoreCase))
|
||||
{
|
||||
return new CenRfgwExEthernetSharable(ipId, Global.ControlSystem);
|
||||
}
|
||||
if (dc.Type.Equals("cenerfgwpoe", StringComparison.InvariantCultureIgnoreCase))
|
||||
{
|
||||
return new CenErfgwPoeEthernetSharable(ipId, Global.ControlSystem);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public static GatewayBase GetCenRfgwCresnetController(DeviceConfig dc)
|
||||
{
|
||||
var control = CommFactory.GetControlPropertiesConfig(dc);
|
||||
var type = dc.Type;
|
||||
var cresnetId = control.CresnetIdInt;
|
||||
var branchId = control.ControlPortNumber;
|
||||
var parentKey = string.IsNullOrEmpty(control.ControlPortDevKey) ? "processor" : control.ControlPortDevKey;
|
||||
|
||||
if (parentKey.Equals("processor", StringComparison.CurrentCultureIgnoreCase))
|
||||
{
|
||||
Debug.Console(0, "Device {0} is a valid cresnet master - creating new GlsOdtCCn");
|
||||
if (type.Equals("cenerfgwpoe", StringComparison.InvariantCultureIgnoreCase))
|
||||
{
|
||||
return new CenErfgwPoeCresnet(cresnetId, Global.ControlSystem);
|
||||
}
|
||||
if (type.Equals("cenrfgwex", StringComparison.InvariantCultureIgnoreCase))
|
||||
{
|
||||
return new CenRfgwExCresnet(cresnetId, Global.ControlSystem);
|
||||
}
|
||||
}
|
||||
var cresnetBridge = DeviceManager.GetDeviceForKey(parentKey) as ICresnetBridge;
|
||||
|
||||
if (cresnetBridge != null)
|
||||
{
|
||||
Debug.Console(0, "Device {0} is a valid cresnet master - creating new GlsOdtCCn");
|
||||
|
||||
if (type.Equals("cenerfgwpoe", StringComparison.InvariantCultureIgnoreCase))
|
||||
{
|
||||
return new CenErfgwPoeCresnet(cresnetId, cresnetBridge.Branches[branchId]);
|
||||
}
|
||||
if (type.Equals("cenrfgwex", StringComparison.InvariantCultureIgnoreCase))
|
||||
{
|
||||
return new CenRfgwExCresnet(cresnetId, cresnetBridge.Branches[branchId]);
|
||||
}
|
||||
}
|
||||
Debug.Console(0, "Device {0} is not a valid cresnet master", branchId);
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
public enum eExGatewayType
|
||||
{
|
||||
Ethernet,
|
||||
EthernetShared,
|
||||
Cresnet
|
||||
}
|
||||
|
||||
|
||||
#region Factory
|
||||
|
||||
public class CenRfgwControllerFactory : EssentialsDeviceFactory<CenRfgwController>
|
||||
{
|
||||
public CenRfgwControllerFactory()
|
||||
{
|
||||
TypeNames = new List<string>() {"cenrfgwex", "cenerfgwpoe"};
|
||||
}
|
||||
|
||||
public override EssentialsDevice BuildDevice(DeviceConfig dc)
|
||||
{
|
||||
|
||||
Debug.Console(1, "Factory Attempting to create new CEN-GWEXER Device");
|
||||
|
||||
var props = JsonConvert.DeserializeObject<EssentialsRfGatewayConfig>(dc.Properties.ToString());
|
||||
|
||||
var type = dc.Type.ToLower();
|
||||
var control = props.Control;
|
||||
var ipid = control.IpIdInt;
|
||||
var cresnetId = control.CresnetIdInt;
|
||||
|
||||
eExGatewayType gatewayType =
|
||||
(eExGatewayType) Enum.Parse(typeof (eExGatewayType), props.GatewayType, true);
|
||||
|
||||
switch (gatewayType)
|
||||
{
|
||||
case (eExGatewayType.Ethernet):
|
||||
return new CenRfgwController(dc.Key, dc.Name, CenRfgwController.GetNewIpRfGateway(dc));
|
||||
case (eExGatewayType.EthernetShared):
|
||||
return new CenRfgwController(dc.Key, dc.Name, CenRfgwController.GetNewSharedIpRfGateway(dc));
|
||||
case (eExGatewayType.Cresnet):
|
||||
return new CenRfgwController(dc.Key, CenRfgwController.GetCenRfgwCresnetController, dc);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -192,6 +192,7 @@
|
||||
<Compile Include="Devices\VolumeDeviceChangeEventArgs.cs" />
|
||||
<Compile Include="Factory\DeviceFactory.cs" />
|
||||
<Compile Include="Factory\IDeviceFactory.cs" />
|
||||
<Compile Include="Factory\ReadyEventArgs.cs" />
|
||||
<Compile Include="Feedbacks\BoolFeedback.cs" />
|
||||
<Compile Include="Feedbacks\FeedbackCollection.cs" />
|
||||
<Compile Include="Feedbacks\FeedbackEventArgs.cs" />
|
||||
|
||||
@@ -21,6 +21,8 @@ namespace PepperDash.Essentials.Core
|
||||
[Description("Wrapper class for all HR-Series remotes")]
|
||||
public class Hrxx0WirelessRemoteController : EssentialsBridgeableDevice, IHasFeedback
|
||||
{
|
||||
private CenRfgwController _gateway;
|
||||
|
||||
private Hr1x0WirelessRemoteBase _remote;
|
||||
|
||||
public FeedbackCollection<Feedback> Feedbacks { get; set; }
|
||||
@@ -33,6 +35,39 @@ namespace PepperDash.Essentials.Core
|
||||
{
|
||||
Feedbacks = new FeedbackCollection<Feedback>();
|
||||
|
||||
var props = JsonConvert.DeserializeObject<CrestronRemotePropertiesConfig>(config.Properties.ToString());
|
||||
|
||||
var type = config.Type;
|
||||
var rfId = (uint)props.Control.InfinetIdInt;
|
||||
|
||||
GatewayBase gateway;
|
||||
|
||||
if (props.GatewayDeviceKey == "processor")
|
||||
{
|
||||
gateway = Global.ControlSystem.ControllerRFGatewayDevice;
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
var gatewayDev = DeviceManager.GetDeviceForKey(props.GatewayDeviceKey) as CenRfgwController;
|
||||
if (gatewayDev == null)
|
||||
{
|
||||
Debug.Console(0, "GetHr1x0WirelessRemote: Device '{0}' is not a valid device", props.GatewayDeviceKey);
|
||||
}
|
||||
if (gatewayDev != null)
|
||||
{
|
||||
Debug.Console(0, "GetHr1x0WirelessRemote: Device '{0}' is a valid device", props.GatewayDeviceKey);
|
||||
gateway = gatewayDev.GateWay;
|
||||
_gateway = gatewayDev;
|
||||
}
|
||||
}
|
||||
|
||||
if (_gateway != null)
|
||||
{
|
||||
_gateway.IsReady += new PepperDash_Essentials_Core.IsReadyEventHandler(_gateway_IsReady);
|
||||
}
|
||||
|
||||
|
||||
AddPreActivationAction(() =>
|
||||
{
|
||||
_remote = preActivationFunc(config);
|
||||
@@ -47,6 +82,11 @@ namespace PepperDash.Essentials.Core
|
||||
});
|
||||
}
|
||||
|
||||
void _gateway_IsReady(object source, PepperDash_Essentials_Core.IsReadyEventArgs e)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
void _remote_BaseEvent(GenericBase device, BaseEventArgs args)
|
||||
{
|
||||
if(args.EventId == Hr1x0EventIds.BatteryCriticalFeedbackEventId)
|
||||
@@ -137,11 +177,6 @@ namespace PepperDash.Essentials.Core
|
||||
return remoteBase;
|
||||
}
|
||||
|
||||
static void gateway_BaseEvent(GenericBase device, BaseEventArgs args)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Factory
|
||||
|
||||
@@ -614,6 +614,7 @@ namespace PepperDash.Essentials.DM
|
||||
var cecPort2 = outputCard.Card2.HdmiOutput;
|
||||
AddDmcHdoPorts(number, cecPort1, cecPort2);
|
||||
}
|
||||
|
||||
else if (type == "dmchdo")
|
||||
{
|
||||
var outputCard = new DmcHdoSingle(number, Chassis);
|
||||
|
||||
Reference in New Issue
Block a user