diff --git a/src/PepperDash.Essentials.Core/CrestronIO/GenericDigitalInputDevice.cs b/src/PepperDash.Essentials.Core/CrestronIO/GenericDigitalInputDevice.cs
index 8463ae96..6f858144 100644
--- a/src/PepperDash.Essentials.Core/CrestronIO/GenericDigitalInputDevice.cs
+++ b/src/PepperDash.Essentials.Core/CrestronIO/GenericDigitalInputDevice.cs
@@ -2,59 +2,54 @@
using System;
using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using Crestron.SimplSharp;
using Crestron.SimplSharpPro;
using Crestron.SimplSharpPro.DeviceSupport;
using Newtonsoft.Json;
using PepperDash.Core;
+using PepperDash.Core.Logging;
using PepperDash.Essentials.Core.Bridges;
using PepperDash.Essentials.Core.Config;
-using Serilog.Events;
namespace PepperDash.Essentials.Core.CrestronIO
{
- [Description("Wrapper class for Digital Input")]
+
///
/// Represents a GenericDigitalInputDevice
///
- public class GenericDigitalInputDevice : EssentialsBridgeableDevice, IDigitalInput
+ /// [Description("Wrapper class for Digital Input")]
+ public class GenericDigitalInputDevice : EssentialsBridgeableDevice, IDigitalInput, IHasFeedback
{
- ///
- /// Gets or sets the InputPort
- ///
- public DigitalInput InputPort { get; private set; }
+ private DigitalInput inputPort;
///
/// Gets or sets the InputStateFeedback
///
public BoolFeedback InputStateFeedback { get; private set; }
- Func InputStateFeedbackFunc
- {
- get
- {
- return () => InputPort.State;
- }
- }
-
+ ///
+ public FeedbackCollection Feedbacks { get; private set; } = new FeedbackCollection();
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ /// key for device
+ /// name for device
+ /// function to call after activation. Should return the DigitalInput
+ /// config for device
public GenericDigitalInputDevice(string key, string name, Func postActivationFunc,
IOPortConfig config)
: base(key, name)
{
- InputStateFeedback = new BoolFeedback(InputStateFeedbackFunc);
+ InputStateFeedback = new BoolFeedback("inputState", () => inputPort.State);
AddPostActivationAction(() =>
{
- InputPort = postActivationFunc(config);
+ inputPort = postActivationFunc(config);
- InputPort.Register();
-
- InputPort.StateChange += InputPort_StateChange;
+ inputPort.Register();
+ inputPort.StateChange += InputPort_StateChange;
});
}
@@ -71,41 +66,31 @@ namespace PepperDash.Essentials.Core.CrestronIO
private static DigitalInput GetDigitalInput(IOPortConfig dc)
{
- IDigitalInputPorts ioPortDevice;
if (dc.PortDeviceKey.Equals("processor"))
{
if (!Global.ControlSystem.SupportsDigitalInput)
{
- Debug.LogMessage(LogEventLevel.Information, "GetDigitalInput: Processor does not support Digital Inputs");
+ Debug.LogError("GetDigitalInput: Processor does not support Digital Inputs");
return null;
}
- ioPortDevice = Global.ControlSystem;
+
+ return Global.ControlSystem.DigitalInputPorts[dc.PortNumber];
}
- else
+
+ if (!(DeviceManager.GetDeviceForKey(dc.PortDeviceKey) is IDigitalInputPorts ioPortDevice))
{
- var ioPortDev = DeviceManager.GetDeviceForKey(dc.PortDeviceKey) as IDigitalInputPorts;
- if (ioPortDev == null)
- {
- Debug.LogMessage(LogEventLevel.Information, "GetDigitalInput: Device {0} is not a valid device", dc.PortDeviceKey);
- return null;
- }
- ioPortDevice = ioPortDev;
- }
- if (ioPortDevice == null)
- {
- Debug.LogMessage(LogEventLevel.Information, "GetDigitalInput: Device '0' is not a valid IDigitalInputPorts Device", dc.PortDeviceKey);
+ Debug.LogError("GetDigitalInput: Device {key} is not a valid device", dc.PortDeviceKey);
return null;
}
if (dc.PortNumber > ioPortDevice.NumberOfDigitalInputPorts)
{
- Debug.LogMessage(LogEventLevel.Information, "GetDigitalInput: Device {0} does not contain a port {1}", dc.PortDeviceKey, dc.PortNumber);
+ Debug.LogError("GetDigitalInput: Device {key} does not contain a digital input port {port}", dc.PortDeviceKey, dc.PortNumber);
+ return null;
}
return ioPortDevice.DigitalInputPorts[dc.PortNumber];
-
-
}
#endregion
@@ -131,20 +116,20 @@ namespace PepperDash.Essentials.Core.CrestronIO
}
else
{
- Debug.LogMessage(LogEventLevel.Information, this, "Please update config to use 'eiscapiadvanced' to get all join map features for this device.");
+ this.LogWarning("Please update config to use 'eiscapiadvanced' to get all join map features for this device.");
}
try
{
- Debug.LogMessage(LogEventLevel.Debug, this, "Linking to Trilist '{0}'", trilist.ID.ToString("X"));
+ this.LogDebug("Linking to Trilist '{0}'", trilist.ID.ToString("X"));
// Link feedback for input state
InputStateFeedback.LinkInputSig(trilist.BooleanInput[joinMap.InputState.JoinNumber]);
}
catch (Exception e)
{
- Debug.LogMessage(LogEventLevel.Debug, this, "Unable to link device '{0}'. Input is null", Key);
- Debug.LogMessage(LogEventLevel.Debug, this, "Error: {0}", e);
+ this.LogError("Unable to link device {key}. {message}", Key, e.Message);
+ this.LogDebug(e, "Stack Trace: ");
}
}
@@ -153,22 +138,22 @@ namespace PepperDash.Essentials.Core.CrestronIO
#region Factory
///
- /// Represents a GenericDigitalInputDeviceFactory
+ /// Factory for creating GenericDigitalInputDevice devices
///
public class GenericDigitalInputDeviceFactory : EssentialsDeviceFactory
{
+ ///
+ /// Constructor for GenericDigitalInputDeviceFactory
+ ///
public GenericDigitalInputDeviceFactory()
{
TypeNames = new List() { "digitalinput" };
}
- ///
- /// BuildDevice method
- ///
///
public override EssentialsDevice BuildDevice(DeviceConfig dc)
{
- Debug.LogMessage(LogEventLevel.Debug, "Factory Attempting to create new Generic Digital Input Device");
+ Debug.LogDebug("Factory Attempting to create new Generic Digital Input Device");
var props = JsonConvert.DeserializeObject(dc.Properties.ToString());
diff --git a/src/PepperDash.Essentials.Core/CrestronIO/GenericVersiportAnalogInputDevice.cs b/src/PepperDash.Essentials.Core/CrestronIO/GenericVersiportAnalogInputDevice.cs
index c87a688c..ad5507d0 100644
--- a/src/PepperDash.Essentials.Core/CrestronIO/GenericVersiportAnalogInputDevice.cs
+++ b/src/PepperDash.Essentials.Core/CrestronIO/GenericVersiportAnalogInputDevice.cs
@@ -2,66 +2,64 @@
using System;
using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using Crestron.SimplSharp;
using Crestron.SimplSharpPro;
using Crestron.SimplSharpPro.DeviceSupport;
-
-using PepperDash.Core;
-using PepperDash.Essentials.Core.Config;
-using PepperDash.Essentials.Core.Bridges;
-
-
using Newtonsoft.Json;
-using Serilog.Events;
+using PepperDash.Core;
+using PepperDash.Core.Logging;
+using PepperDash.Essentials.Core.Bridges;
+using PepperDash.Essentials.Core.Config;
namespace PepperDash.Essentials.Core.CrestronIO
{
///
/// Represents a generic digital input deviced tied to a versiport
///
- public class GenericVersiportAnalogInputDevice : EssentialsBridgeableDevice, IAnalogInput
+ public class GenericVersiportAnalogInputDevice : EssentialsBridgeableDevice, IAnalogInput, IHasFeedback
{
- public Versiport InputPort { get; private set; }
+ private Versiport inputPort;
+ ///
public IntFeedback InputValueFeedback { get; private set; }
+
+ ///
+ /// Get the InputMinimumChangeFeedback
+ ///
+ ///
+ /// Updates when the analog input minimum change value changes
+ ///
public IntFeedback InputMinimumChangeFeedback { get; private set; }
- Func InputValueFeedbackFunc
- {
- get
- {
- return () => InputPort.AnalogIn;
- }
- }
-
- Func InputMinimumChangeFeedbackFunc
- {
- get { return () => InputPort.AnalogMinChange; }
- }
+ ///
+ public FeedbackCollection Feedbacks { get; private set; } = new FeedbackCollection();
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ /// key for the device
+ /// name for the device
+ /// function to call after activation
+ /// IO port configuration
public GenericVersiportAnalogInputDevice(string key, string name, Func postActivationFunc, IOPortConfig config) :
base(key, name)
{
- InputValueFeedback = new IntFeedback(InputValueFeedbackFunc);
- InputMinimumChangeFeedback = new IntFeedback(InputMinimumChangeFeedbackFunc);
+ InputValueFeedback = new IntFeedback("inputValue", () => inputPort.AnalogIn);
+ InputMinimumChangeFeedback = new IntFeedback("inputMinimumChange", () => inputPort.AnalogMinChange);
AddPostActivationAction(() =>
{
- InputPort = postActivationFunc(config);
+ inputPort = postActivationFunc(config);
- InputPort.Register();
+ inputPort.Register();
- InputPort.SetVersiportConfiguration(eVersiportConfiguration.AnalogInput);
- InputPort.AnalogMinChange = (ushort)(config.MinimumChange > 0 ? config.MinimumChange : 655);
+ inputPort.SetVersiportConfiguration(eVersiportConfiguration.AnalogInput);
+ inputPort.AnalogMinChange = (ushort)(config.MinimumChange > 0 ? config.MinimumChange : 655);
if (config.DisablePullUpResistor)
- InputPort.DisablePullUpResistor = true;
+ inputPort.DisablePullUpResistor = true;
- InputPort.VersiportChange += InputPort_VersiportChange;
-
- Debug.LogMessage(LogEventLevel.Debug, this, "Created GenericVersiportAnalogInputDevice on port '{0}'. DisablePullUpResistor: '{1}'", config.PortNumber, InputPort.DisablePullUpResistor);
+ inputPort.VersiportChange += InputPort_VersiportChange;
+ this.LogDebug("Created GenericVersiportAnalogInputDevice on port {port}. DisablePullUpResistor: {pullUpResistorDisabled}", config.PortNumber, inputPort.DisablePullUpResistor);
});
}
@@ -69,20 +67,17 @@ namespace PepperDash.Essentials.Core.CrestronIO
///
/// Set minimum voltage change for device to update voltage changed method
///
- /// valid values range from 0 - 65535, representing the full 100% range of the processor voltage source. Check processor documentation for details
- ///
- /// SetMinimumChange method
- ///
+ /// valid values range from 0 - 65535, representing the full 100% range of the processor voltage source. Check processor documentation for details
public void SetMinimumChange(ushort value)
{
- InputPort.AnalogMinChange = value;
+ inputPort.AnalogMinChange = value;
}
void InputPort_VersiportChange(Versiport port, VersiportEventArgs args)
{
- Debug.LogMessage(LogEventLevel.Debug, this, "Versiport change: {0}", args.Event);
+ this.LogDebug("Versiport change: {event}", args.Event);
- if(args.Event == eVersiportEvent.AnalogInChange)
+ if (args.Event == eVersiportEvent.AnalogInChange)
InputValueFeedback.FireUpdate();
if (args.Event == eVersiportEvent.AnalogMinChangeChange)
InputMinimumChangeFeedback.FireUpdate();
@@ -91,9 +86,6 @@ namespace PepperDash.Essentials.Core.CrestronIO
#region Bridge Linking
- ///
- /// LinkToApi method
- ///
///
public override void LinkToApi(BasicTriList trilist, uint joinStart, string joinMapKey, EiscApiAdvanced bridge)
{
@@ -110,12 +102,12 @@ namespace PepperDash.Essentials.Core.CrestronIO
}
else
{
- Debug.LogMessage(LogEventLevel.Information, this, "Please update config to use 'eiscapiadvanced' to get all join map features for this device.");
+ this.LogWarning("Please update config to use 'eiscapiadvanced' to get all join map features for this device.");
}
try
{
- Debug.LogMessage(LogEventLevel.Debug, this, "Linking to Trilist '{0}'", trilist.ID.ToString("X"));
+ this.LogDebug("Linking to Trilist '{trilistId}'", trilist.ID.ToString("X"));
// Link feedback for input state
InputValueFeedback.LinkInputSig(trilist.UShortInput[joinMap.InputValue.JoinNumber]);
@@ -125,8 +117,8 @@ namespace PepperDash.Essentials.Core.CrestronIO
}
catch (Exception e)
{
- Debug.LogMessage(LogEventLevel.Debug, this, "Unable to link device '{0}'. Input is null", Key);
- Debug.LogMessage(LogEventLevel.Debug, this, "Error: {0}", e);
+ this.LogError("Unable to link device {key}: {message}", Key, e.Message);
+ this.LogDebug(e, "Stack Trace: ");
}
trilist.OnlineStatusChange += (d, args) =>
@@ -138,11 +130,6 @@ namespace PepperDash.Essentials.Core.CrestronIO
}
- void trilist_OnlineStatusChange(GenericBase currentDevice, OnlineOfflineEventArgs args)
- {
- throw new NotImplementedException();
- }
-
#endregion
@@ -151,70 +138,55 @@ namespace PepperDash.Essentials.Core.CrestronIO
///
public static Versiport GetVersiportDigitalInput(IOPortConfig dc)
{
-
- IIOPorts ioPortDevice;
-
if (dc.PortDeviceKey.Equals("processor"))
{
if (!Global.ControlSystem.SupportsVersiport)
{
- Debug.LogMessage(LogEventLevel.Information, "GetVersiportAnalogInput: Processor does not support Versiports");
+ Debug.LogError("GetVersiportAnalogInput: Processor does not support Versiports");
return null;
}
- ioPortDevice = Global.ControlSystem;
+ return Global.ControlSystem.VersiPorts[dc.PortNumber];
}
- else
+
+ if (!(DeviceManager.GetDeviceForKey(dc.PortDeviceKey) is IIOPorts ioPortDevice))
{
- var ioPortDev = DeviceManager.GetDeviceForKey(dc.PortDeviceKey) as IIOPorts;
- if (ioPortDev == null)
- {
- Debug.LogMessage(LogEventLevel.Information, "GetVersiportAnalogInput: Device {0} is not a valid device", dc.PortDeviceKey);
- return null;
- }
- ioPortDevice = ioPortDev;
- }
- if (ioPortDevice == null)
- {
- Debug.LogMessage(LogEventLevel.Information, "GetVersiportAnalogInput: Device '0' is not a valid IIOPorts Device", dc.PortDeviceKey);
+ Debug.LogError("GetVersiportAnalogInput: Device {key} is not a valid device", dc.PortDeviceKey);
return null;
}
if (dc.PortNumber > ioPortDevice.NumberOfVersiPorts)
{
- Debug.LogMessage(LogEventLevel.Information, "GetVersiportAnalogInput: Device {0} does not contain a port {1}", dc.PortDeviceKey, dc.PortNumber);
+ Debug.LogError("GetVersiportAnalogInput: Device {key} does not contain a port {port}", dc.PortDeviceKey, dc.PortNumber);
return null;
}
- if(!ioPortDevice.VersiPorts[dc.PortNumber].SupportsAnalogInput)
+ if (!ioPortDevice.VersiPorts[dc.PortNumber].SupportsAnalogInput)
{
- Debug.LogMessage(LogEventLevel.Information, "GetVersiportAnalogInput: Device {0} does not support AnalogInput on port {1}", dc.PortDeviceKey, dc.PortNumber);
+ Debug.LogError("GetVersiportAnalogInput: Device {key} does not support AnalogInput on port {port}", dc.PortDeviceKey, dc.PortNumber);
return null;
}
-
return ioPortDevice.VersiPorts[dc.PortNumber];
-
-
}
}
///
- /// Represents a GenericVersiportAbalogInputDeviceFactory
+ /// Factory for creating GenericVersiportAnalogInputDevice devices
///
- public class GenericVersiportAbalogInputDeviceFactory : EssentialsDeviceFactory
+ public class GenericVersiportAnalogInputDeviceFactory : EssentialsDeviceFactory
{
- public GenericVersiportAbalogInputDeviceFactory()
+ ///
+ /// Constructor for GenericVersiportAnalogInputDeviceFactory
+ ///
+ public GenericVersiportAnalogInputDeviceFactory()
{
TypeNames = new List() { "versiportanaloginput" };
}
- ///
- /// BuildDevice method
- ///
///
public override EssentialsDevice BuildDevice(DeviceConfig dc)
{
- Debug.LogMessage(LogEventLevel.Debug, "Factory Attempting to create new Generic Versiport Device");
+ Debug.LogDebug("Factory Attempting to create new Generic Versiport Device");
var props = JsonConvert.DeserializeObject(dc.Properties.ToString());
diff --git a/src/PepperDash.Essentials.Core/CrestronIO/GenericVersiportInputDevice.cs b/src/PepperDash.Essentials.Core/CrestronIO/GenericVersiportInputDevice.cs
index f94137c3..e2c4474a 100644
--- a/src/PepperDash.Essentials.Core/CrestronIO/GenericVersiportInputDevice.cs
+++ b/src/PepperDash.Essentials.Core/CrestronIO/GenericVersiportInputDevice.cs
@@ -2,78 +2,82 @@
using System;
using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using Crestron.SimplSharp;
using Crestron.SimplSharpPro;
using Crestron.SimplSharpPro.DeviceSupport;
-
-using PepperDash.Core;
-using PepperDash.Essentials.Core.Config;
-using PepperDash.Essentials.Core.Bridges;
-
-
using Newtonsoft.Json;
-using Serilog.Events;
+using PepperDash.Core;
+using PepperDash.Core.Logging;
+using PepperDash.Essentials.Core.Bridges;
+using PepperDash.Essentials.Core.Config;
namespace PepperDash.Essentials.Core.CrestronIO
{
///
/// Represents a generic digital input deviced tied to a versiport
///
- public class GenericVersiportDigitalInputDevice : EssentialsBridgeableDevice, IDigitalInput, IPartitionStateProvider
+ public class GenericVersiportDigitalInputDevice : EssentialsBridgeableDevice, IDigitalInput, IPartitionStateProvider, IHasFeedback
{
- public Versiport InputPort { get; private set; }
+ private Versiport inputPort;
+ ///
+ /// Gets or sets the InputStateFeedback
+ ///
public BoolFeedback InputStateFeedback { get; private set; }
- Func InputStateFeedbackFunc
- {
- get
- {
- return () => InputPort.DigitalIn;
- }
- }
+ ///
+ public FeedbackCollection Feedbacks { get; private set; } = new FeedbackCollection();
///
/// Gets or sets the PartitionPresentFeedback
///
public BoolFeedback PartitionPresentFeedback { get; }
- public bool PartitionPresent => !InputStateFeedbackFunc();
+ ///
+ /// Get partition state
+ ///
+ public bool PartitionPresent => !inputPort.DigitalIn;
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ /// key for device
+ /// name for device
+ /// function to call after activation. Should return the Versiport
+ /// config for device
public GenericVersiportDigitalInputDevice(string key, string name, Func postActivationFunc, IOPortConfig config) :
base(key, name)
{
- InputStateFeedback = new BoolFeedback(InputStateFeedbackFunc);
- PartitionPresentFeedback = new BoolFeedback(() => !InputStateFeedbackFunc());
+ InputStateFeedback = new BoolFeedback("inputState", () => inputPort.DigitalIn);
+ PartitionPresentFeedback = new BoolFeedback("partitionPresent", () => !inputPort.DigitalIn);
AddPostActivationAction(() =>
{
- InputPort = postActivationFunc(config);
+ inputPort = postActivationFunc(config);
- InputPort.Register();
+ inputPort.Register();
- InputPort.SetVersiportConfiguration(eVersiportConfiguration.DigitalInput);
+ inputPort.SetVersiportConfiguration(eVersiportConfiguration.DigitalInput);
if (config.DisablePullUpResistor)
- InputPort.DisablePullUpResistor = true;
+ inputPort.DisablePullUpResistor = true;
- InputPort.VersiportChange += InputPort_VersiportChange;
+ inputPort.VersiportChange += InputPort_VersiportChange;
InputStateFeedback.FireUpdate();
PartitionPresentFeedback.FireUpdate();
- Debug.LogMessage(LogEventLevel.Debug, this, "Created GenericVersiportDigitalInputDevice on port '{0}'. DisablePullUpResistor: '{1}'", config.PortNumber, InputPort.DisablePullUpResistor);
+ this.LogDebug("Created GenericVersiportDigitalInputDevice for port {port}. DisablePullUpResistor: {pullUpResistorDisable}", config.PortNumber, inputPort.DisablePullUpResistor);
});
+ Feedbacks.Add(InputStateFeedback);
+ Feedbacks.Add(PartitionPresentFeedback);
}
void InputPort_VersiportChange(Versiport port, VersiportEventArgs args)
{
- Debug.LogMessage(LogEventLevel.Debug, this, "Versiport change: {0}", args.Event);
+ this.LogDebug("Versiport change: {0}", args.Event);
- if(args.Event == eVersiportEvent.DigitalInChange)
+ if (args.Event == eVersiportEvent.DigitalInChange)
{
InputStateFeedback.FireUpdate();
PartitionPresentFeedback.FireUpdate();
@@ -102,20 +106,20 @@ namespace PepperDash.Essentials.Core.CrestronIO
}
else
{
- Debug.LogMessage(LogEventLevel.Information, this, "Please update config to use 'eiscapiadvanced' to get all join map features for this device.");
+ this.LogWarning("Please update config to use 'eiscapiadvanced' to get all join map features for this device.");
}
try
{
- Debug.LogMessage(LogEventLevel.Debug, this, "Linking to Trilist '{0}'", trilist.ID.ToString("X"));
+ this.LogDebug("Linking to Trilist '{0}'", trilist.ID.ToString("X"));
// Link feedback for input state
InputStateFeedback.LinkInputSig(trilist.BooleanInput[joinMap.InputState.JoinNumber]);
}
catch (Exception e)
{
- Debug.LogMessage(LogEventLevel.Debug, this, "Unable to link device '{0}'. Input is null", Key);
- Debug.LogMessage(LogEventLevel.Debug, this, "Error: {0}", e);
+ this.LogError("Unable to link device {key}. Input is null. {message}", Key, e.Message);
+ this.LogDebug(e, "Stack Trace: ");
}
}
@@ -127,63 +131,50 @@ namespace PepperDash.Essentials.Core.CrestronIO
///
public static Versiport GetVersiportDigitalInput(IOPortConfig dc)
{
-
- IIOPorts ioPortDevice;
-
if (dc.PortDeviceKey.Equals("processor"))
{
if (!Global.ControlSystem.SupportsVersiport)
{
- Debug.LogMessage(LogEventLevel.Information, "GetVersiportDigitalInput: Processor does not support Versiports");
+ Debug.LogError("GetVersiportDigitalInput: Processor does not support Versiports");
return null;
}
- ioPortDevice = Global.ControlSystem;
+ return Global.ControlSystem.VersiPorts[dc.PortNumber];
}
- else
+
+ if (!(DeviceManager.GetDeviceForKey(dc.PortDeviceKey) is IIOPorts ioPortDevice))
{
- var ioPortDev = DeviceManager.GetDeviceForKey(dc.PortDeviceKey) as IIOPorts;
- if (ioPortDev == null)
- {
- Debug.LogMessage(LogEventLevel.Information, "GetVersiportDigitalInput: Device {0} is not a valid device", dc.PortDeviceKey);
- return null;
- }
- ioPortDevice = ioPortDev;
- }
- if (ioPortDevice == null)
- {
- Debug.LogMessage(LogEventLevel.Information, "GetVersiportDigitalInput: Device '0' is not a valid IIOPorts Device", dc.PortDeviceKey);
+ Debug.LogError("GetVersiportDigitalInput: Device {key} is not a valid device", dc.PortDeviceKey);
return null;
}
if (dc.PortNumber > ioPortDevice.NumberOfVersiPorts)
{
- Debug.LogMessage(LogEventLevel.Information, "GetVersiportDigitalInput: Device {0} does not contain a port {1}", dc.PortDeviceKey, dc.PortNumber);
+ Debug.LogError("GetVersiportDigitalInput: Device {key} does not contain versiport {port}", dc.PortDeviceKey, dc.PortNumber);
+ return null;
}
return ioPortDevice.VersiPorts[dc.PortNumber];
-
-
}
}
///
- /// Represents a GenericVersiportDigitalInputDeviceFactory
+ /// Factory class for GenericVersiportDigitalInputDevice
///
public class GenericVersiportDigitalInputDeviceFactory : EssentialsDeviceFactory
{
+ ///
+ /// Constructor for GenericVersiportDigitalInputDeviceFactory
+ ///
public GenericVersiportDigitalInputDeviceFactory()
{
TypeNames = new List() { "versiportinput" };
}
- ///
- /// BuildDevice method
- ///
///
public override EssentialsDevice BuildDevice(DeviceConfig dc)
{
- Debug.LogMessage(LogEventLevel.Debug, "Factory Attempting to create new Generic Versiport Device");
+ Debug.LogDebug("Factory Attempting to create new Generic Versiport Device");
var props = JsonConvert.DeserializeObject(dc.Properties.ToString());
diff --git a/src/PepperDash.Essentials.Core/CrestronIO/GenericVersiportOutputDevice.cs b/src/PepperDash.Essentials.Core/CrestronIO/GenericVersiportOutputDevice.cs
index 7a823c9a..ee3f0320 100644
--- a/src/PepperDash.Essentials.Core/CrestronIO/GenericVersiportOutputDevice.cs
+++ b/src/PepperDash.Essentials.Core/CrestronIO/GenericVersiportOutputDevice.cs
@@ -2,18 +2,13 @@
using System;
using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using Crestron.SimplSharp;
using Crestron.SimplSharpPro;
using Crestron.SimplSharpPro.DeviceSupport;
-
-using PepperDash.Core;
-using PepperDash.Essentials.Core.Config;
-using PepperDash.Essentials.Core.Bridges;
-
-
using Newtonsoft.Json;
+using PepperDash.Core;
+using PepperDash.Core.Logging;
+using PepperDash.Essentials.Core.Bridges;
+using PepperDash.Essentials.Core.Config;
using Serilog.Events;
namespace PepperDash.Essentials.Core.CrestronIO
@@ -21,76 +16,68 @@ namespace PepperDash.Essentials.Core.CrestronIO
///
/// Represents a generic digital input deviced tied to a versiport
///
- public class GenericVersiportDigitalOutputDevice : EssentialsBridgeableDevice, IDigitalOutput
+ public class GenericVersiportDigitalOutputDevice : EssentialsBridgeableDevice, IDigitalOutput, IHasFeedback
{
- public Versiport OutputPort { get; private set; }
+ private Versiport outputPort;
+ ///
+ /// Gets or sets the OutputStateFeedback
+ ///
public BoolFeedback OutputStateFeedback { get; private set; }
- Func OutputStateFeedbackFunc
- {
- get
- {
- return () => OutputPort.DigitalOut;
- }
- }
+ ///
+ public FeedbackCollection Feedbacks { get; private set; } = new FeedbackCollection();
+ ///
+ /// Initializes a new instance of the class.
+ ///
public GenericVersiportDigitalOutputDevice(string key, string name, Func postActivationFunc, IOPortConfig config) :
base(key, name)
{
- OutputStateFeedback = new BoolFeedback(OutputStateFeedbackFunc);
+ OutputStateFeedback = new BoolFeedback("outputState", () => outputPort.DigitalOut);
AddPostActivationAction(() =>
{
- OutputPort = postActivationFunc(config);
+ outputPort = postActivationFunc(config);
- OutputPort.Register();
+ outputPort.Register();
- if (!OutputPort.SupportsDigitalOutput)
+ if (!outputPort.SupportsDigitalOutput)
{
- Debug.LogMessage(LogEventLevel.Information, this, "Device does not support configuration as a Digital Output");
+ this.LogError("Device does not support configuration as a Digital Output");
return;
}
- OutputPort.SetVersiportConfiguration(eVersiportConfiguration.DigitalOutput);
+ outputPort.SetVersiportConfiguration(eVersiportConfiguration.DigitalOutput);
- OutputPort.VersiportChange += OutputPort_VersiportChange;
+ outputPort.VersiportChange += OutputPort_VersiportChange;
});
-
}
void OutputPort_VersiportChange(Versiport port, VersiportEventArgs args)
{
- Debug.LogMessage(LogEventLevel.Debug, this, "Versiport change: {0}", args.Event);
+ this.LogDebug("Versiport change: {event}", args.Event);
- if(args.Event == eVersiportEvent.DigitalOutChange)
+ if (args.Event == eVersiportEvent.DigitalOutChange)
OutputStateFeedback.FireUpdate();
}
///
/// Set value of the versiport digital output
///
- /// value to set the output to
- ///
- /// SetOutput method
- ///
+ /// value to set the output to
public void SetOutput(bool state)
{
- if (OutputPort.SupportsDigitalOutput)
- {
- Debug.LogMessage(LogEventLevel.Information, this, "Passed the Check");
-
- OutputPort.DigitalOut = state;
-
- }
- else
- {
- Debug.LogMessage(LogEventLevel.Information, this, "Versiport does not support Digital Output Mode");
- }
+ if (!outputPort.SupportsDigitalOutput)
+ {
+ this.LogError("Versiport does not support Digital Output Mode");
+ return;
+ }
+ outputPort.DigitalOut = state;
}
#region Bridge Linking
@@ -114,12 +101,12 @@ namespace PepperDash.Essentials.Core.CrestronIO
}
else
{
- Debug.LogMessage(LogEventLevel.Information, this, "Please update config to use 'eiscapiadvanced' to get all join map features for this device.");
+ this.LogWarning("Please update config to use 'eiscapiadvanced' to get all join map features for this device.");
}
try
{
- Debug.LogMessage(LogEventLevel.Debug, this, "Linking to Trilist '{0}'", trilist.ID.ToString("X"));
+ this.LogDebug("Linking to Trilist '{0}'", trilist.ID.ToString("X"));
// Link feedback for input state
OutputStateFeedback.LinkInputSig(trilist.BooleanInput[joinMap.OutputState.JoinNumber]);
@@ -127,8 +114,8 @@ namespace PepperDash.Essentials.Core.CrestronIO
}
catch (Exception e)
{
- Debug.LogMessage(LogEventLevel.Debug, this, "Unable to link device '{0}'. Input is null", Key);
- Debug.LogMessage(LogEventLevel.Debug, this, "Error: {0}", e);
+ this.LogError("Unable to link device: {message}", e.Message);
+ this.LogDebug(e, "Stack Trace: ");
}
}
@@ -140,41 +127,28 @@ namespace PepperDash.Essentials.Core.CrestronIO
///
public static Versiport GetVersiportDigitalOutput(IOPortConfig dc)
{
-
- IIOPorts ioPortDevice;
-
- if (dc.PortDeviceKey.Equals("processor"))
+ if (dc.PortDeviceKey.Equals("processor"))
+ {
+ if (!Global.ControlSystem.SupportsVersiport)
{
- if (!Global.ControlSystem.SupportsVersiport)
- {
- Debug.LogMessage(LogEventLevel.Information, "GetVersiportDigitalOuptut: Processor does not support Versiports");
- return null;
- }
- ioPortDevice = Global.ControlSystem;
- }
- else
- {
- var ioPortDev = DeviceManager.GetDeviceForKey(dc.PortDeviceKey) as IIOPorts;
- if (ioPortDev == null)
- {
- Debug.LogMessage(LogEventLevel.Information, "GetVersiportDigitalOuptut: Device {0} is not a valid device", dc.PortDeviceKey);
- return null;
- }
- ioPortDevice = ioPortDev;
- }
- if (ioPortDevice == null)
- {
- Debug.LogMessage(LogEventLevel.Information, "GetVersiportDigitalOuptut: Device '0' is not a valid IOPorts Device", dc.PortDeviceKey);
+ Debug.LogError("GetVersiportDigitalOutput: Processor does not support Versiports");
return null;
}
+ return Global.ControlSystem.VersiPorts[dc.PortNumber];
+ }
- if (dc.PortNumber > ioPortDevice.NumberOfVersiPorts)
- {
- Debug.LogMessage(LogEventLevel.Information, "GetVersiportDigitalOuptut: Device {0} does not contain a port {1}", dc.PortDeviceKey, dc.PortNumber);
- }
- var port = ioPortDevice.VersiPorts[dc.PortNumber];
- return port;
+ if (!(DeviceManager.GetDeviceForKey(dc.PortDeviceKey) is IIOPorts ioPortDevice))
+ {
+ Debug.LogError("GetVersiportDigitalOutput: Device {key} is not a valid device", dc.PortDeviceKey);
+ return null;
+ }
+ if (dc.PortNumber > ioPortDevice.NumberOfVersiPorts)
+ {
+ Debug.LogMessage(LogEventLevel.Information, "GetVersiportDigitalOutput: Device {0} does not contain a port {1}", dc.PortDeviceKey, dc.PortNumber);
+ return null;
+ }
+ return ioPortDevice.VersiPorts[dc.PortNumber];
}
}
@@ -184,18 +158,18 @@ namespace PepperDash.Essentials.Core.CrestronIO
///
public class GenericVersiportDigitalOutputDeviceFactory : EssentialsDeviceFactory
{
+ ///
+ /// Initialize a new instance of the class.
+ ///
public GenericVersiportDigitalOutputDeviceFactory()
{
TypeNames = new List() { "versiportoutput" };
}
- ///
- /// BuildDevice method
- ///
///
public override EssentialsDevice BuildDevice(DeviceConfig dc)
{
- Debug.LogMessage(LogEventLevel.Debug, "Factory Attempting to create new Generic Versiport Device");
+ Debug.LogDebug("Factory Attempting to create new Generic Versiport Device");
var props = JsonConvert.DeserializeObject(dc.Properties.ToString());
diff --git a/src/PepperDash.Essentials.Core/CrestronIO/IAnalogInput.cs b/src/PepperDash.Essentials.Core/CrestronIO/IAnalogInput.cs
index c647834e..426834ed 100644
--- a/src/PepperDash.Essentials.Core/CrestronIO/IAnalogInput.cs
+++ b/src/PepperDash.Essentials.Core/CrestronIO/IAnalogInput.cs
@@ -12,6 +12,12 @@ namespace PepperDash.Essentials.Core.CrestronIO
///
public interface IAnalogInput
{
+ ///
+ /// Get the InputValueFeedback.
+ ///
+ ///
+ /// Updates when the analog input value changes
+ ///
IntFeedback InputValueFeedback { get; }
}
}
\ No newline at end of file
diff --git a/src/PepperDash.Essentials.Core/CrestronIO/IOPortConfig.cs b/src/PepperDash.Essentials.Core/CrestronIO/IOPortConfig.cs
index 52db6300..8641df69 100644
--- a/src/PepperDash.Essentials.Core/CrestronIO/IOPortConfig.cs
+++ b/src/PepperDash.Essentials.Core/CrestronIO/IOPortConfig.cs
@@ -14,25 +14,28 @@ namespace PepperDash.Essentials.Core.CrestronIO
///
public class IOPortConfig
{
- [JsonProperty("portDeviceKey")]
///
/// Gets or sets the PortDeviceKey
///
+ [JsonProperty("portDeviceKey")]
public string PortDeviceKey { get; set; }
- [JsonProperty("portNumber")]
+
///
/// Gets or sets the PortNumber
///
+ [JsonProperty("portNumber")]
public uint PortNumber { get; set; }
- [JsonProperty("disablePullUpResistor")]
+
///
/// Gets or sets the DisablePullUpResistor
///
+ [JsonProperty("disablePullUpResistor")]
public bool DisablePullUpResistor { get; set; }
- [JsonProperty("minimumChange")]
+
///
/// Gets or sets the MinimumChange
///
+ [JsonProperty("minimumChange")]
public int MinimumChange { get; set; }
}
}
\ No newline at end of file
diff --git a/src/PepperDash.Essentials.Core/Devices/EssentialsDeviceFactory.cs b/src/PepperDash.Essentials.Core/Devices/EssentialsDeviceFactory.cs
index 3ac326bf..9c1a6a94 100644
--- a/src/PepperDash.Essentials.Core/Devices/EssentialsDeviceFactory.cs
+++ b/src/PepperDash.Essentials.Core/Devices/EssentialsDeviceFactory.cs
@@ -18,7 +18,7 @@ namespace PepperDash.Essentials.Core
public List TypeNames { get; protected set; }
///
- /// The method that will build the device
+ /// Build the device using the configuration
///
/// The device config
/// An instance of the device
diff --git a/src/PepperDash.Essentials.Core/Devices/IHasFeedbacks.cs b/src/PepperDash.Essentials.Core/Devices/IHasFeedbacks.cs
index 8850a6b1..330538e0 100644
--- a/src/PepperDash.Essentials.Core/Devices/IHasFeedbacks.cs
+++ b/src/PepperDash.Essentials.Core/Devices/IHasFeedbacks.cs
@@ -12,7 +12,7 @@ namespace PepperDash.Essentials.Core
public interface IHasFeedback : IKeyed
{
///
- /// This method shall return a list of all Output objects on a device,
+ /// This method returns a list of all Output objects on a device,
/// including all "aggregate" devices.
///
FeedbackCollection Feedbacks { get; }
diff --git a/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/DeviceVolumeMessenger.cs b/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/DeviceVolumeMessenger.cs
index 2eb965b9..fba7c643 100644
--- a/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/DeviceVolumeMessenger.cs
+++ b/src/PepperDash.Essentials.MobileControl.Messengers/Messengers/DeviceVolumeMessenger.cs
@@ -3,6 +3,7 @@ using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using PepperDash.Core;
+using PepperDash.Core.Logging;
using PepperDash.Essentials.Core;
namespace PepperDash.Essentials.AppServer.Messengers
@@ -12,7 +13,7 @@ namespace PepperDash.Essentials.AppServer.Messengers
///
public class DeviceVolumeMessenger : MessengerBase
{
- private readonly IBasicVolumeWithFeedback _localDevice;
+ private readonly IBasicVolumeControls device;
///
/// Initializes a new instance of the class.
@@ -20,27 +21,32 @@ namespace PepperDash.Essentials.AppServer.Messengers
/// The key.
/// The message path.
/// The device.
- public DeviceVolumeMessenger(string key, string messagePath, IBasicVolumeWithFeedback device)
+ public DeviceVolumeMessenger(string key, string messagePath, IBasicVolumeControls device)
: base(key, messagePath, device as IKeyName)
{
- _localDevice = device;
+ this.device = device;
}
private void SendStatus(string id = null)
{
try
{
+ if (!(device is IBasicVolumeWithFeedback feedbackDevice))
+ {
+ return;
+ }
+
var messageObj = new VolumeStateMessage
{
Volume = new Volume
{
- Level = _localDevice?.VolumeLevelFeedback.IntValue ?? -1,
- Muted = _localDevice?.MuteFeedback.BoolValue ?? false,
+ Level = feedbackDevice?.VolumeLevelFeedback.IntValue ?? -1,
+ Muted = feedbackDevice?.MuteFeedback.BoolValue ?? false,
HasMute = true, // assume all devices have mute for now
}
};
- if (_localDevice is IBasicVolumeWithFeedbackAdvanced volumeAdvanced)
+ if (device is IBasicVolumeWithFeedbackAdvanced volumeAdvanced)
{
messageObj.Volume.RawValue = volumeAdvanced.RawVolumeLevel.ToString();
messageObj.Volume.Units = volumeAdvanced.Units;
@@ -59,6 +65,44 @@ namespace PepperDash.Essentials.AppServer.Messengers
///
protected override void RegisterActions()
{
+ AddAction("/volumeUp", (id, content) => PressAndHoldHandler.HandlePressAndHold(DeviceKey, content, (b) =>
+ {
+ Debug.LogMessage(Serilog.Events.LogEventLevel.Verbose, "Calling {localDevice} volume up with {value}", DeviceKey, b);
+ try
+ {
+ device.VolumeUp(b);
+ }
+ catch (Exception ex)
+ {
+ Debug.LogMessage(ex, "Got exception during volume up: {Exception}", null, ex);
+ }
+ }));
+
+ AddAction("/muteToggle", (id, content) =>
+ {
+ device.MuteToggle();
+ });
+
+ AddAction("/volumeDown", (id, content) => PressAndHoldHandler.HandlePressAndHold(DeviceKey, content, (b) =>
+ {
+ Debug.LogMessage(Serilog.Events.LogEventLevel.Verbose, "Calling {localDevice} volume down with {value}", DeviceKey, b);
+
+ try
+ {
+ device.VolumeDown(b);
+ }
+ catch (Exception ex)
+ {
+ Debug.LogMessage(ex, "Got exception during volume down: {Exception}", null, ex);
+ }
+ }));
+
+ if (!(device is IBasicVolumeWithFeedback feedback))
+ {
+ this.LogDebug("Skipping feedback methods for {deviceKey}", (device as IKeyName)?.Key);
+ return;
+ }
+
AddAction("/fullStatus", (id, content) => SendStatus(id));
AddAction("/volumeStatus", (id, content) => SendStatus(id));
@@ -67,54 +111,24 @@ namespace PepperDash.Essentials.AppServer.Messengers
{
var volume = content.ToObject>();
- _localDevice.SetVolume(volume.Value);
+ feedback.SetVolume(volume.Value);
});
- AddAction("/muteToggle", (id, content) =>
- {
- _localDevice.MuteToggle();
- });
+
AddAction("/muteOn", (id, content) =>
{
- _localDevice.MuteOn();
+ feedback.MuteOn();
});
AddAction("/muteOff", (id, content) =>
{
- _localDevice.MuteOff();
+ feedback.MuteOff();
});
- AddAction("/volumeUp", (id, content) => PressAndHoldHandler.HandlePressAndHold(DeviceKey, content, (b) =>
- {
- Debug.LogMessage(Serilog.Events.LogEventLevel.Verbose, "Calling {localDevice} volume up with {value}", DeviceKey, b);
- try
- {
- _localDevice.VolumeUp(b);
- }
- catch (Exception ex)
- {
- Debug.LogMessage(ex, "Got exception during volume up: {Exception}", null, ex);
- }
- }));
-
- AddAction("/volumeDown", (id, content) => PressAndHoldHandler.HandlePressAndHold(DeviceKey, content, (b) =>
- {
- Debug.LogMessage(Serilog.Events.LogEventLevel.Verbose, "Calling {localDevice} volume down with {value}", DeviceKey, b);
-
- try
- {
- _localDevice.VolumeDown(b);
- }
- catch (Exception ex)
- {
- Debug.LogMessage(ex, "Got exception during volume down: {Exception}", null, ex);
- }
- }));
-
- _localDevice.MuteFeedback.OutputChange += (sender, args) =>
+ feedback.MuteFeedback.OutputChange += (sender, args) =>
{
PostStatusMessage(JToken.FromObject(
new
@@ -127,10 +141,10 @@ namespace PepperDash.Essentials.AppServer.Messengers
);
};
- _localDevice.VolumeLevelFeedback.OutputChange += (sender, args) =>
+ feedback.VolumeLevelFeedback.OutputChange += (sender, args) =>
{
var rawValue = "";
- if (_localDevice is IBasicVolumeWithFeedbackAdvanced volumeAdvanced)
+ if (feedback is IBasicVolumeWithFeedbackAdvanced volumeAdvanced)
{
rawValue = volumeAdvanced.RawVolumeLevel.ToString();
}
@@ -146,8 +160,6 @@ namespace PepperDash.Essentials.AppServer.Messengers
PostStatusMessage(JToken.FromObject(message));
};
-
-
}
#endregion
diff --git a/src/PepperDash.Essentials.MobileControl/MobileControlSystemController.cs b/src/PepperDash.Essentials.MobileControl/MobileControlSystemController.cs
index 73861291..7994afc3 100644
--- a/src/PepperDash.Essentials.MobileControl/MobileControlSystemController.cs
+++ b/src/PepperDash.Essentials.MobileControl/MobileControlSystemController.cs
@@ -499,15 +499,15 @@ namespace PepperDash.Essentials
messengerAdded = true;
}
- if (device is IBasicVolumeWithFeedback)
+ if (device is IBasicVolumeControls)
{
var deviceKey = device.Key;
this.LogVerbose(
- "Adding IBasicVolumeControlWithFeedback for {deviceKey}",
+ "Adding IBasicVolumeControls for {deviceKey}",
deviceKey
);
- var volControlDevice = device as IBasicVolumeWithFeedback;
+ var volControlDevice = device as IBasicVolumeControls;
var messenger = new DeviceVolumeMessenger(
$"{device.Key}-volume-{Key}",
string.Format("/device/{0}", deviceKey),
diff --git a/src/PepperDash.Essentials.MobileControl/Touchpanel/MobileControlTouchpanelController.cs b/src/PepperDash.Essentials.MobileControl/Touchpanel/MobileControlTouchpanelController.cs
index aedd323e..c1743d40 100644
--- a/src/PepperDash.Essentials.MobileControl/Touchpanel/MobileControlTouchpanelController.cs
+++ b/src/PepperDash.Essentials.MobileControl/Touchpanel/MobileControlTouchpanelController.cs
@@ -203,10 +203,18 @@ namespace PepperDash.Essentials.Touchpanel
this.csSubnetMask = IPAddress.Parse(csSubnetMask);
this.csIpAddress = IPAddress.Parse(csIpAddress);
}
- catch
+ catch (ArgumentException)
{
Debug.LogInformation("This processor does not have a CS LAN", this);
}
+ catch (InvalidOperationException)
+ {
+ Debug.LogInformation("This processor does not have a CS LAN", this);
+ }
+ catch (Exception ex)
+ {
+ Debug.LogError($"Unexpected exception when checking CS LAN: {ex}", this);
+ }
}
///