mirror of
https://github.com/PepperDash/Essentials.git
synced 2026-02-14 20:24:57 +00:00
Merge pull request #892 from PepperDash/hotfix/generic-relay-dm-rmc-issues
Add `IRelayPorts` interface to `DmRmc4kzScalerCController`
This commit is contained in:
@@ -44,6 +44,12 @@ namespace PepperDash.Essentials.Core.CrestronIO
|
|||||||
{
|
{
|
||||||
RelayOutput = postActivationFunc(config);
|
RelayOutput = postActivationFunc(config);
|
||||||
|
|
||||||
|
if (RelayOutput == null)
|
||||||
|
{
|
||||||
|
Debug.Console(0, this, Debug.ErrorLogLevel.Error, "Unable to get parent relay device for device key {0} and port {1}", config.PortDeviceKey, config.PortNumber);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
RelayOutput.Register();
|
RelayOutput.Register();
|
||||||
|
|
||||||
RelayOutput.StateChange += RelayOutput_StateChange;
|
RelayOutput.StateChange += RelayOutput_StateChange;
|
||||||
@@ -61,33 +67,36 @@ namespace PepperDash.Essentials.Core.CrestronIO
|
|||||||
{
|
{
|
||||||
if (!Global.ControlSystem.SupportsRelay)
|
if (!Global.ControlSystem.SupportsRelay)
|
||||||
{
|
{
|
||||||
Debug.Console(0, "GetRelayDevice: Processor does not support relays");
|
Debug.Console(0, "Processor does not support relays");
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
relayDevice = Global.ControlSystem;
|
relayDevice = Global.ControlSystem;
|
||||||
|
|
||||||
|
return relayDevice.RelayPorts[dc.PortNumber];
|
||||||
}
|
}
|
||||||
else
|
|
||||||
|
var essentialsDevice = DeviceManager.GetDeviceForKey(dc.PortDeviceKey);
|
||||||
|
if (essentialsDevice == null)
|
||||||
{
|
{
|
||||||
var relayDev = DeviceManager.GetDeviceForKey(dc.PortDeviceKey) as IRelayPorts;
|
Debug.Console(0, "Device {0} was not found in Device Manager. Check configuration or for errors with device.", dc.PortDeviceKey);
|
||||||
if (relayDev == null)
|
|
||||||
{
|
|
||||||
Debug.Console(0, "GetRelayDevice: Device {0} is not a valid device", dc.PortDeviceKey);
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
relayDevice = relayDev;
|
|
||||||
}
|
|
||||||
if (relayDevice == null)
|
|
||||||
{
|
|
||||||
Debug.Console(0, "GetRelayDevice: Device '0' is not a valid IRelayPorts Device", dc.PortDeviceKey);
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dc.PortNumber > relayDevice.NumberOfRelayPorts)
|
relayDevice = essentialsDevice as IRelayPorts;
|
||||||
{
|
|
||||||
Debug.Console(0, "GetRelayDevice: Device {0} does not contain a port {1}", dc.PortDeviceKey, dc.PortNumber);
|
|
||||||
}
|
|
||||||
|
|
||||||
return relayDevice.RelayPorts[dc.PortNumber];
|
if (relayDevice == null)
|
||||||
|
{
|
||||||
|
Debug.Console(0, "Device {0} is not a valid relay parent. Please check configuration.", dc.PortDeviceKey);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (dc.PortNumber <= relayDevice.NumberOfRelayPorts)
|
||||||
|
{
|
||||||
|
return relayDevice.RelayPorts[dc.PortNumber];
|
||||||
|
}
|
||||||
|
|
||||||
|
Debug.Console(0, "Device {0} does not contain a port {1}", dc.PortDeviceKey, dc.PortNumber);
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
@@ -200,58 +209,6 @@ namespace PepperDash.Essentials.Core.CrestronIO
|
|||||||
var portDevice = new GenericRelayDevice(dc.Key, dc.Name, GetRelay, props);
|
var portDevice = new GenericRelayDevice(dc.Key, dc.Name, GetRelay, props);
|
||||||
|
|
||||||
return portDevice;
|
return portDevice;
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
if (props.PortDeviceKey == "processor")
|
|
||||||
portDevice = Global.ControlSystem as IRelayPorts;
|
|
||||||
else
|
|
||||||
portDevice = DeviceManager.GetDeviceForKey(props.PortDeviceKey) as IRelayPorts;
|
|
||||||
|
|
||||||
if (portDevice == null)
|
|
||||||
Debug.Console(0, "Unable to add relay device with key '{0}'. Port Device does not support relays", key);
|
|
||||||
else
|
|
||||||
{
|
|
||||||
var cs = (portDevice as CrestronControlSystem);
|
|
||||||
|
|
||||||
if (cs != null)
|
|
||||||
{
|
|
||||||
// The relay is on a control system processor
|
|
||||||
if (!cs.SupportsRelay || props.PortNumber > cs.NumberOfRelayPorts)
|
|
||||||
{
|
|
||||||
Debug.Console(0, "Port Device: {0} does not support relays or does not have enough relays");
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// The relay is on another device type
|
|
||||||
|
|
||||||
if (props.PortNumber > portDevice.NumberOfRelayPorts)
|
|
||||||
{
|
|
||||||
Debug.Console(0, "Port Device: {0} does not have enough relays");
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Relay relay = portDevice.RelayPorts[props.PortNumber];
|
|
||||||
|
|
||||||
if (!relay.Registered)
|
|
||||||
{
|
|
||||||
if (relay.Register() == eDeviceRegistrationUnRegistrationResponse.Success)
|
|
||||||
return new GenericRelayDevice(key, relay);
|
|
||||||
else
|
|
||||||
Debug.Console(0, "Attempt to register relay {0} on device with key '{1}' failed.", props.PortNumber, props.PortDeviceKey);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return new GenericRelayDevice(key, relay);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Future: Check if portDevice is 3-series card or other non control system that supports versiports
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ namespace PepperDash.Essentials.DM
|
|||||||
{
|
{
|
||||||
[Description("Wrapper Class for DM-RMC-4K-Z-SCALER-C")]
|
[Description("Wrapper Class for DM-RMC-4K-Z-SCALER-C")]
|
||||||
public class DmRmc4kZScalerCController : DmRmcControllerBase, IRmcRoutingWithFeedback,
|
public class DmRmc4kZScalerCController : DmRmcControllerBase, IRmcRoutingWithFeedback,
|
||||||
IIROutputPorts, IComPorts, ICec
|
IIROutputPorts, IComPorts, ICec, IRelayPorts
|
||||||
{
|
{
|
||||||
private readonly DmRmc4kzScalerC _rmc;
|
private readonly DmRmc4kzScalerC _rmc;
|
||||||
|
|
||||||
@@ -168,5 +168,18 @@ namespace PepperDash.Essentials.DM
|
|||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
#region Implementation of IRelayPorts
|
||||||
|
|
||||||
|
public CrestronCollection<Relay> RelayPorts
|
||||||
|
{
|
||||||
|
get { return _rmc.RelayPorts; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public int NumberOfRelayPorts
|
||||||
|
{
|
||||||
|
get { return _rmc.NumberOfRelayPorts; }
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user