Updated GenericRelayDevice

#205
This commit is contained in:
Trevor Payne
2020-05-20 16:44:38 -05:00
parent 1fee896a3d
commit 0dad34893e

View File

@@ -29,7 +29,62 @@ namespace PepperDash.Essentials.Core.CrestronIO
RelayOutput = relay; RelayOutput = relay;
RelayOutput.Register(); RelayOutput.Register();
RelayOutput.StateChange += new RelayEventHandler(RelayOutput_StateChange); RelayOutput.StateChange += RelayOutput_StateChange;
}
public GenericRelayDevice(string key, string name, Func<IOPortConfig, Relay> postActivationFunc,
IOPortConfig config)
: base(key, name )
{
AddPostActivationAction(() =>
{
RelayOutput = postActivationFunc(config);
RelayOutput.Register();
RelayOutput.StateChange += RelayOutput_StateChange;
});
}
private static Relay GetRelay(IOPortConfig dc)
{
IRelayPorts relayDevice;
if(dc.PortDeviceKey.Equals("processor"))
{
if (!Global.ControlSystem.SupportsRelay)
{
Debug.Console(0, "GetRelayDevice: Processor does not support relays");
return null;
}
relayDevice = Global.ControlSystem;
}
else
{
var relayDev = DeviceManager.GetDeviceForKey(dc.PortDeviceKey) as IRelayPorts;
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;
}
if (dc.PortNumber > relayDevice.NumberOfRelayPorts)
{
Debug.Console(0, "GetRelayDevice: Device {0} does not contain a port {1}", dc.PortDeviceKey, dc.PortNumber);
}
return relayDevice.RelayPorts[dc.PortNumber];
} }
void RelayOutput_StateChange(Relay relay, RelayEventArgs args) void RelayOutput_StateChange(Relay relay, RelayEventArgs args)
@@ -100,7 +155,6 @@ namespace PepperDash.Essentials.Core.CrestronIO
OutputIsOnFeedback.LinkInputSig(trilist.BooleanInput[joinMap.Relay.JoinNumber]); OutputIsOnFeedback.LinkInputSig(trilist.BooleanInput[joinMap.Relay.JoinNumber]);
} }
}
public class GenericRelayDeviceFactory : EssentialsDeviceFactory<GenericRelayDevice> public class GenericRelayDeviceFactory : EssentialsDeviceFactory<GenericRelayDevice>
{ {
@@ -114,10 +168,15 @@ namespace PepperDash.Essentials.Core.CrestronIO
Debug.Console(1, "Factory Attempting to create new Generic Relay Device"); Debug.Console(1, "Factory Attempting to create new Generic Relay Device");
var props = JsonConvert.DeserializeObject<IOPortConfig>(dc.Properties.ToString()); var props = JsonConvert.DeserializeObject<IOPortConfig>(dc.Properties.ToString());
var key = dc.Key;
IRelayPorts portDevice; if (props == null) return null;
var portDevice = new GenericRelayDevice(dc.Key, dc.Name, GetRelay, props);
return portDevice;
/*
if (props.PortDeviceKey == "processor") if (props.PortDeviceKey == "processor")
portDevice = Global.ControlSystem as IRelayPorts; portDevice = Global.ControlSystem as IRelayPorts;
else else
@@ -165,10 +224,12 @@ namespace PepperDash.Essentials.Core.CrestronIO
// Future: Check if portDevice is 3-series card or other non control system that supports versiports // Future: Check if portDevice is 3-series card or other non control system that supports versiports
} }
*/
return null;
} }
} }
} }
}