diff --git a/essentials-framework/Essentials Core/PepperDashEssentialsBase/PepperDash_Essentials_Core.csproj b/essentials-framework/Essentials Core/PepperDashEssentialsBase/PepperDash_Essentials_Core.csproj
index c8ecbde6..e0859077 100644
--- a/essentials-framework/Essentials Core/PepperDashEssentialsBase/PepperDash_Essentials_Core.csproj
+++ b/essentials-framework/Essentials Core/PepperDashEssentialsBase/PepperDash_Essentials_Core.csproj
@@ -94,7 +94,7 @@
False
- ..\..\..\..\..\..\ProgramData\Crestron\SDK\SimplSharpCWSHelperInterface.dll
+ ..\..\..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SimplSharpCWSHelperInterface.dll
False
diff --git a/essentials-framework/Essentials DM/Essentials_DM/AirMedia/AirMediaController.cs b/essentials-framework/Essentials DM/Essentials_DM/AirMedia/AirMediaController.cs
index ce2204fe..ff07a54b 100644
--- a/essentials-framework/Essentials DM/Essentials_DM/AirMedia/AirMediaController.cs
+++ b/essentials-framework/Essentials DM/Essentials_DM/AirMedia/AirMediaController.cs
@@ -19,7 +19,7 @@ namespace PepperDash.Essentials.DM.AirMedia
[Description("Wrapper class for an AM-200 or AM-300")]
public class AirMediaController : CrestronGenericBridgeableBaseDevice, IRoutingNumericWithFeedback, IIROutputPorts, IComPorts
{
- public AmX00 AirMedia { get; private set; }
+ public Am3x00 AirMedia { get; private set; }
public DeviceConfig DeviceConfig { get; private set; }
@@ -44,7 +44,7 @@ namespace PepperDash.Essentials.DM.AirMedia
public StringFeedback SerialNumberFeedback { get; private set; }
public BoolFeedback AutomaticInputRoutingEnabledFeedback { get; private set; }
- public AirMediaController(string key, string name, AmX00 device, DeviceConfig dc, AirMediaPropertiesConfig props)
+ public AirMediaController(string key, string name, Am3x00 device, DeviceConfig dc, AirMediaPropertiesConfig props)
: base(key, name, device)
{
@@ -95,24 +95,31 @@ namespace PepperDash.Essentials.DM.AirMedia
AirMedia.AirMedia.AirMediaChange += new Crestron.SimplSharpPro.DeviceSupport.GenericEventHandler(AirMedia_AirMediaChange);
- IsInSessionFeedback = new BoolFeedback(new Func(() => AirMedia.AirMedia.StatusFeedback.UShortValue == 0));
- ErrorFeedback = new IntFeedback(new Func(() => AirMedia.AirMedia.ErrorFeedback.UShortValue));
- NumberOfUsersConnectedFeedback = new IntFeedback(new Func(() => AirMedia.AirMedia.NumberOfUsersConnectedFeedback.UShortValue));
- LoginCodeFeedback = new IntFeedback(new Func(() => AirMedia.AirMedia.LoginCodeFeedback.UShortValue));
- ConnectionAddressFeedback = new StringFeedback(new Func(() => AirMedia.AirMedia.ConnectionAddressFeedback.StringValue));
- HostnameFeedback = new StringFeedback(new Func(() => AirMedia.AirMedia.HostNameFeedback.StringValue));
+ IsInSessionFeedback = new BoolFeedback(() => AirMedia.AirMedia.StatusFeedback.UShortValue == 0);
+ ErrorFeedback = new IntFeedback(() => AirMedia.AirMedia.ErrorFeedback.UShortValue);
+ NumberOfUsersConnectedFeedback = new IntFeedback(() => AirMedia.AirMedia.NumberOfUsersConnectedFeedback.UShortValue);
+ LoginCodeFeedback = new IntFeedback(() => AirMedia.AirMedia.LoginCodeFeedback.UShortValue);
+ ConnectionAddressFeedback = new StringFeedback(() => AirMedia.AirMedia.ConnectionAddressFeedback.StringValue);
+ HostnameFeedback = new StringFeedback(() => AirMedia.AirMedia.HostNameFeedback.StringValue);
// TODO: Figure out if we can actually get the TSID/Serial
- SerialNumberFeedback = new StringFeedback(new Func(() => "unknown"));
+ SerialNumberFeedback = new StringFeedback(() => "unknown");
- AirMedia.DisplayControl.DisplayControlChange += new Crestron.SimplSharpPro.DeviceSupport.GenericEventHandler(DisplayControl_DisplayControlChange);
+ AirMedia.DisplayControl.DisplayControlChange += DisplayControl_DisplayControlChange;
- VideoOutFeedback = new IntFeedback(new Func(() => Convert.ToInt16(AirMedia.DisplayControl.VideoOutFeedback)));
- AutomaticInputRoutingEnabledFeedback = new BoolFeedback(new Func(() => AirMedia.DisplayControl.EnableAutomaticRoutingFeedback.BoolValue));
+ VideoOutFeedback = new IntFeedback(() => Convert.ToInt16(AirMedia.DisplayControl.VideoOutFeedback));
+ AutomaticInputRoutingEnabledFeedback = new BoolFeedback(() => AirMedia.DisplayControl.EnableAutomaticRoutingFeedback.BoolValue);
- AirMedia.HdmiIn.StreamChange += new Crestron.SimplSharpPro.DeviceSupport.StreamEventHandler(HdmiIn_StreamChange);
+ // Not all AirMedia versions support HDMI In like the 3200
+ if (AirMedia.HdmiIn != null)
+ {
+ AirMedia.HdmiIn.StreamChange += HdmiIn_StreamChange;
+ HdmiVideoSyncDetectedFeedback = new BoolFeedback(() => AirMedia.HdmiIn.SyncDetectedFeedback.BoolValue);
+ return;
+ }
- HdmiVideoSyncDetectedFeedback = new BoolFeedback(new Func(() => AirMedia.HdmiIn.SyncDetectedFeedback.BoolValue));
+ // Return false if the AirMedia device doesn't support HDMI Input
+ HdmiVideoSyncDetectedFeedback = new BoolFeedback(() => false);
}
public override bool CustomActivate()
@@ -122,7 +129,7 @@ namespace PepperDash.Essentials.DM.AirMedia
else
AirMedia.DisplayControl.DisableAutomaticRouting();
- return base.CustomActivate();
+ return true;
}
public override void LinkToApi(BasicTriList trilist, uint joinStart, string joinMapKey, EiscApiAdvanced bridge)
@@ -179,31 +186,53 @@ namespace PepperDash.Essentials.DM.AirMedia
/// Arguments defined as IKeyName sender, output, input, and eRoutingSignalType
private void OnSwitchChange(RoutingNumericEventArgs e)
{
- var newEvent = NumericSwitchChange;
- if (newEvent != null) newEvent(this, e);
- }
+ var handler = NumericSwitchChange;
+
+ if (handler == null) return;
+
+ handler(this, e);
+ }
void AirMedia_AirMediaChange(object sender, Crestron.SimplSharpPro.DeviceSupport.GenericEventArgs args)
{
- if (args.EventId == AirMediaInputSlot.AirMediaStatusFeedbackEventId)
- IsInSessionFeedback.FireUpdate();
- else if (args.EventId == AirMediaInputSlot.AirMediaErrorFeedbackEventId)
- ErrorFeedback.FireUpdate();
- else if (args.EventId == AirMediaInputSlot.AirMediaNumberOfUserConnectedEventId)
- NumberOfUsersConnectedFeedback.FireUpdate();
- else if (args.EventId == AirMediaInputSlot.AirMediaLoginCodeEventId)
- LoginCodeFeedback.FireUpdate();
- else if (args.EventId == AirMediaInputSlot.AirMediaConnectionAddressFeedbackEventId)
- ConnectionAddressFeedback.FireUpdate();
- else if (args.EventId == AirMediaInputSlot.AirMediaHostNameFeedbackEventId)
- HostnameFeedback.FireUpdate();
+ switch (args.EventId)
+ {
+ case AirMediaInputSlot.AirMediaStatusFeedbackEventId:
+ {
+ IsInSessionFeedback.FireUpdate();
+ break;
+ }
+ case AirMediaInputSlot.AirMediaErrorFeedbackEventId:
+ {
+ ErrorFeedback.FireUpdate();
+ break;
+ }
+ case AirMediaInputSlot.AirMediaNumberOfUserConnectedEventId:
+ {
+ NumberOfUsersConnectedFeedback.FireUpdate();
+ break;
+ }
+ case AirMediaInputSlot.AirMediaLoginCodeEventId:
+ {
+ LoginCodeFeedback.FireUpdate();
+ break;
+ }
+ case AirMediaInputSlot.AirMediaConnectionAddressFeedbackEventId:
+ {
+ ConnectionAddressFeedback.FireUpdate();
+ break;
+ }
+ case AirMediaInputSlot.AirMediaHostNameFeedbackEventId:
+ {
+ HostnameFeedback.FireUpdate();
+ break;
+ }
+ }
}
void DisplayControl_DisplayControlChange(object sender, Crestron.SimplSharpPro.DeviceSupport.GenericEventArgs args)
{
- if (args.EventId == AmX00.VideoOutFeedbackEventId)
- {
VideoOutFeedback.FireUpdate();
var localInputPort =
@@ -211,8 +240,7 @@ namespace PepperDash.Essentials.DM.AirMedia
OnSwitchChange(new RoutingNumericEventArgs(1, VideoOutFeedback.UShortValue, OutputPorts.First(),
localInputPort, eRoutingSignalType.AudioVideo));
- }
- else if (args.EventId == AmX00.EnableAutomaticRoutingFeedbackEventId)
+
AutomaticInputRoutingEnabledFeedback.FireUpdate();
}
@@ -342,7 +370,7 @@ namespace PepperDash.Essentials.DM.AirMedia
{
public AirMediaControllerFactory()
{
- TypeNames = new List() { "am200", "am300" };
+ TypeNames = new List() { "am200", "am300", "am3200" };
}
public override EssentialsDevice BuildDevice(DeviceConfig dc)
@@ -351,12 +379,26 @@ namespace PepperDash.Essentials.DM.AirMedia
Debug.Console(1, "Factory Attempting to create new AirMedia Device");
- var props = JsonConvert.DeserializeObject(dc.Properties.ToString());
- AmX00 amDevice = null;
- if (type == "am200")
- amDevice = new Crestron.SimplSharpPro.DM.AirMedia.Am200(props.Control.IpIdInt, Global.ControlSystem);
- else if (type == "am300")
- amDevice = new Crestron.SimplSharpPro.DM.AirMedia.Am300(props.Control.IpIdInt, Global.ControlSystem);
+ var props = dc.Properties.ToObject();
+ Am3x00 amDevice = null;
+ switch (type)
+ {
+ case "am200" :
+ {
+ amDevice = new Am200(props.Control.IpIdInt, Global.ControlSystem);
+ break;
+ }
+ case "am300" :
+ {
+ amDevice = new Am300(props.Control.IpIdInt, Global.ControlSystem);
+ break;
+ }
+ case "am3200" :
+ {
+ amDevice = new Am3200(props.Control.IpIdInt, Global.ControlSystem);
+ break;
+ }
+ }
return new AirMediaController(dc.Key, dc.Name, amDevice, dc, props);
diff --git a/essentials-framework/Essentials DM/Essentials_DM/Endpoints/Receivers/DmRmc150SController.cs b/essentials-framework/Essentials DM/Essentials_DM/Endpoints/Receivers/DmRmc150SController.cs
index f33dd5be..0753ed4a 100644
--- a/essentials-framework/Essentials DM/Essentials_DM/Endpoints/Receivers/DmRmc150SController.cs
+++ b/essentials-framework/Essentials DM/Essentials_DM/Endpoints/Receivers/DmRmc150SController.cs
@@ -1,99 +1,99 @@
-using Crestron.SimplSharpPro;
-using Crestron.SimplSharpPro.DeviceSupport;
-using Crestron.SimplSharpPro.DM;
-using Crestron.SimplSharpPro.DM.Endpoints.Receivers;
-
-using PepperDash.Essentials.Core;
-using PepperDash.Essentials.Core.Bridges;
-
-namespace PepperDash.Essentials.DM
-{
- ///
- /// Builds a controller for basic DM-RMCs with Com and IR ports and no control functions
- ///
+using Crestron.SimplSharpPro;
+using Crestron.SimplSharpPro.DeviceSupport;
+using Crestron.SimplSharpPro.DM;
+using Crestron.SimplSharpPro.DM.Endpoints.Receivers;
+
+using PepperDash.Essentials.Core;
+using PepperDash.Essentials.Core.Bridges;
+
+namespace PepperDash.Essentials.DM
+{
+ ///
+ /// Builds a controller for basic DM-RMCs with Com and IR ports and no control functions
+ ///
///
- [Description("Wrapper Class for DM-RMC-150-S")]
- public class DmRmc150SController : DmRmcControllerBase, IRoutingInputsOutputs,
- IIROutputPorts, IComPorts, ICec
- {
- private readonly DmRmc150S _rmc;
-
- public RoutingInputPort DmIn { get; private set; }
- public RoutingOutputPort HdmiOut { get; private set; }
-
- public RoutingPortCollection InputPorts
- {
- get; private set;
- }
-
- public RoutingPortCollection OutputPorts
- {
- get;
- private set ;
- }
-
- ///
- /// Make a Crestron RMC and put it in here
- ///
- public DmRmc150SController(string key, string name, DmRmc150S rmc)
- : base(key, name, rmc)
- {
- _rmc = rmc;
- DmIn = new RoutingInputPort(DmPortName.DmIn, eRoutingSignalType.AudioVideo,
- eRoutingPortConnectionType.DmCat, 0, this);
- HdmiOut = new RoutingOutputPort(DmPortName.HdmiOut, eRoutingSignalType.AudioVideo,
- eRoutingPortConnectionType.Hdmi, null, this);
-
- EdidManufacturerFeedback = new StringFeedback(() => _rmc.HdmiOutput.ConnectedDevice.Manufacturer.StringValue);
- EdidNameFeedback = new StringFeedback(() => _rmc.HdmiOutput.ConnectedDevice.Name.StringValue);
- EdidPreferredTimingFeedback = new StringFeedback(() => _rmc.HdmiOutput.ConnectedDevice.PreferredTiming.StringValue);
- EdidSerialNumberFeedback = new StringFeedback(() => _rmc.HdmiOutput.ConnectedDevice.SerialNumber.StringValue);
-
- InputPorts = new RoutingPortCollection {DmIn};
- OutputPorts = new RoutingPortCollection {HdmiOut};
-
- _rmc.HdmiOutput.ConnectedDevice.DeviceInformationChange += ConnectedDevice_DeviceInformationChange;
-
- // Set Ports for CEC
- HdmiOut.Port = _rmc.HdmiOutput;
- }
-
- void ConnectedDevice_DeviceInformationChange(ConnectedDeviceInformation connectedDevice, ConnectedDeviceEventArgs args)
- {
- switch (args.EventId)
- {
- case ConnectedDeviceEventIds.ManufacturerEventId:
- EdidManufacturerFeedback.FireUpdate();
- break;
- case ConnectedDeviceEventIds.NameEventId:
- EdidNameFeedback.FireUpdate();
- break;
- case ConnectedDeviceEventIds.PreferredTimingEventId:
- EdidPreferredTimingFeedback.FireUpdate();
- break;
- case ConnectedDeviceEventIds.SerialNumberEventId:
- EdidSerialNumberFeedback.FireUpdate();
- break;
- }
- }
-
- public override void LinkToApi(BasicTriList trilist, uint joinStart, string joinMapKey, EiscApiAdvanced bridge)
- {
- LinkDmRmcToApi(this, trilist, joinStart, joinMapKey, bridge);
- }
-
- #region IIROutputPorts Members
- public CrestronCollection IROutputPorts { get { return _rmc.IROutputPorts; } }
- public int NumberOfIROutputPorts { get { return _rmc.NumberOfIROutputPorts; } }
- #endregion
-
- #region IComPorts Members
- public CrestronCollection ComPorts { get { return _rmc.ComPorts; } }
- public int NumberOfComPorts { get { return _rmc.NumberOfComPorts; } }
- #endregion
-
- #region ICec Members
- public Cec StreamCec { get { return _rmc.HdmiOutput.StreamCec; } }
- #endregion
- }
+ [Description("Wrapper Class for DM-RMC-150-S")]
+ public class DmRmc150SController : DmRmcControllerBase, IRoutingInputsOutputs,
+ IIROutputPorts, IComPorts, ICec
+ {
+ private readonly DmRmc150S _rmc;
+
+ public RoutingInputPort DmIn { get; private set; }
+ public RoutingOutputPort HdmiOut { get; private set; }
+
+ public RoutingPortCollection InputPorts
+ {
+ get; private set;
+ }
+
+ public RoutingPortCollection OutputPorts
+ {
+ get;
+ private set ;
+ }
+
+ ///
+ /// Make a Crestron RMC and put it in here
+ ///
+ public DmRmc150SController(string key, string name, DmRmc150S rmc)
+ : base(key, name, rmc)
+ {
+ _rmc = rmc;
+ DmIn = new RoutingInputPort(DmPortName.DmIn, eRoutingSignalType.AudioVideo,
+ eRoutingPortConnectionType.DmCat, 0, this);
+ HdmiOut = new RoutingOutputPort(DmPortName.HdmiOut, eRoutingSignalType.AudioVideo,
+ eRoutingPortConnectionType.Hdmi, null, this);
+
+ EdidManufacturerFeedback = new StringFeedback(() => _rmc.HdmiOutput.ConnectedDevice.Manufacturer.StringValue);
+ EdidNameFeedback = new StringFeedback(() => _rmc.HdmiOutput.ConnectedDevice.Name.StringValue);
+ EdidPreferredTimingFeedback = new StringFeedback(() => _rmc.HdmiOutput.ConnectedDevice.PreferredTiming.StringValue);
+ EdidSerialNumberFeedback = new StringFeedback(() => _rmc.HdmiOutput.ConnectedDevice.SerialNumber.StringValue);
+
+ InputPorts = new RoutingPortCollection {DmIn};
+ OutputPorts = new RoutingPortCollection {HdmiOut};
+
+ _rmc.HdmiOutput.ConnectedDevice.DeviceInformationChange += ConnectedDevice_DeviceInformationChange;
+
+ // Set Ports for CEC
+ HdmiOut.Port = _rmc.HdmiOutput;
+ }
+
+ void ConnectedDevice_DeviceInformationChange(ConnectedDeviceInformation connectedDevice, ConnectedDeviceEventArgs args)
+ {
+ switch (args.EventId)
+ {
+ case ConnectedDeviceEventIds.ManufacturerEventId:
+ EdidManufacturerFeedback.FireUpdate();
+ break;
+ case ConnectedDeviceEventIds.NameEventId:
+ EdidNameFeedback.FireUpdate();
+ break;
+ case ConnectedDeviceEventIds.PreferredTimingEventId:
+ EdidPreferredTimingFeedback.FireUpdate();
+ break;
+ case ConnectedDeviceEventIds.SerialNumberEventId:
+ EdidSerialNumberFeedback.FireUpdate();
+ break;
+ }
+ }
+
+ public override void LinkToApi(BasicTriList trilist, uint joinStart, string joinMapKey, EiscApiAdvanced bridge)
+ {
+ LinkDmRmcToApi(this, trilist, joinStart, joinMapKey, bridge);
+ }
+
+ #region IIROutputPorts Members
+ public CrestronCollection IROutputPorts { get { return _rmc.IROutputPorts; } }
+ public int NumberOfIROutputPorts { get { return _rmc.NumberOfIROutputPorts; } }
+ #endregion
+
+ #region IComPorts Members
+ public CrestronCollection ComPorts { get { return _rmc.ComPorts; } }
+ public int NumberOfComPorts { get { return _rmc.NumberOfComPorts; } }
+ #endregion
+
+ #region ICec Members
+ public Cec StreamCec { get { return _rmc.HdmiOutput.StreamCec; } }
+ #endregion
+ }
}
\ No newline at end of file