diff --git a/PepperDashEssentials/Bridges/JoinMaps/DmRmcControllerJoinMap.cs b/PepperDashEssentials/Bridges/JoinMaps/DmRmcControllerJoinMap.cs
index 7e1534bf..3d7cec8d 100644
--- a/PepperDashEssentials/Bridges/JoinMaps/DmRmcControllerJoinMap.cs
+++ b/PepperDashEssentials/Bridges/JoinMaps/DmRmcControllerJoinMap.cs
@@ -38,8 +38,12 @@ namespace PepperDash.Essentials.Bridges
/// Reports the EDID serial number value
///
public uint EdidSerialNumber { get; set; }
- #endregion
-
+ #endregion
+
+ #region Analogs
+ public uint AudioVideoSource { get; set; }
+ #endregion
+
public DmRmcControllerJoinMap()
{
// Digital
@@ -51,6 +55,9 @@ namespace PepperDash.Essentials.Bridges
EdidName = 3;
EdidPrefferedTiming = 4;
EdidSerialNumber = 5;
+
+ //Analog
+ AudioVideoSource = 1;
}
public override void OffsetJoinNumbers(uint joinStart)
@@ -62,7 +69,8 @@ namespace PepperDash.Essentials.Bridges
EdidManufacturer = EdidManufacturer + joinOffset;
EdidName = EdidName + joinOffset;
EdidPrefferedTiming = EdidPrefferedTiming + joinOffset;
- EdidSerialNumber = EdidSerialNumber + joinOffset;
+ EdidSerialNumber = EdidSerialNumber + joinOffset;
+ AudioVideoSource = AudioVideoSource + joinOffset;
}
}
}
\ No newline at end of file
diff --git a/essentials-framework/Essentials Core/PepperDashEssentialsBase/Bridges/JoinMaps/DmRmcControllerJoinMap.cs b/essentials-framework/Essentials Core/PepperDashEssentialsBase/Bridges/JoinMaps/DmRmcControllerJoinMap.cs
index 0bdedbbf..94b9396b 100644
--- a/essentials-framework/Essentials Core/PepperDashEssentialsBase/Bridges/JoinMaps/DmRmcControllerJoinMap.cs
+++ b/essentials-framework/Essentials Core/PepperDashEssentialsBase/Bridges/JoinMaps/DmRmcControllerJoinMap.cs
@@ -37,31 +37,39 @@ namespace PepperDash.Essentials.Core.Bridges
/// Reports the EDID serial number value
///
public uint EdidSerialNumber { get; set; }
- #endregion
-
- public DmRmcControllerJoinMap()
- {
- // Digital
- IsOnline = 1;
-
- // Serial
- CurrentOutputResolution = 1;
- EdidManufacturer = 2;
- EdidName = 3;
- EdidPrefferedTiming = 4;
- EdidSerialNumber = 5;
- }
-
- public override void OffsetJoinNumbers(uint joinStart)
- {
- var joinOffset = joinStart - 1;
-
- IsOnline = IsOnline + joinOffset;
- CurrentOutputResolution = CurrentOutputResolution + joinOffset;
- EdidManufacturer = EdidManufacturer + joinOffset;
- EdidName = EdidName + joinOffset;
- EdidPrefferedTiming = EdidPrefferedTiming + joinOffset;
- EdidSerialNumber = EdidSerialNumber + joinOffset;
- }
+ #endregion
+
+ #region Analogs
+ public uint AudioVideoSource { get; set; }
+ #endregion
+
+ public DmRmcControllerJoinMap()
+ {
+ // Digital
+ IsOnline = 1;
+
+ // Serial
+ CurrentOutputResolution = 1;
+ EdidManufacturer = 2;
+ EdidName = 3;
+ EdidPrefferedTiming = 4;
+ EdidSerialNumber = 5;
+
+ //Analog
+ AudioVideoSource = 1;
+ }
+
+ public override void OffsetJoinNumbers(uint joinStart)
+ {
+ var joinOffset = joinStart - 1;
+
+ IsOnline = IsOnline + joinOffset;
+ CurrentOutputResolution = CurrentOutputResolution + joinOffset;
+ EdidManufacturer = EdidManufacturer + joinOffset;
+ EdidName = EdidName + joinOffset;
+ EdidPrefferedTiming = EdidPrefferedTiming + joinOffset;
+ EdidSerialNumber = EdidSerialNumber + joinOffset;
+ AudioVideoSource = AudioVideoSource + joinOffset;
+ }
}
}
\ No newline at end of file
diff --git a/essentials-framework/Essentials Core/PepperDashEssentialsBase/Routing/RoutingInterfaces.cs b/essentials-framework/Essentials Core/PepperDashEssentialsBase/Routing/RoutingInterfaces.cs
index 0c642d5c..3b288290 100644
--- a/essentials-framework/Essentials Core/PepperDashEssentialsBase/Routing/RoutingInterfaces.cs
+++ b/essentials-framework/Essentials Core/PepperDashEssentialsBase/Routing/RoutingInterfaces.cs
@@ -89,6 +89,15 @@ namespace PepperDash.Essentials.Core
IntFeedback VideoSourceNumericFeedback { get; }
IntFeedback AudioSourceNumericFeedback { get; }
void ExecuteNumericSwitch(ushort input, ushort output, eRoutingSignalType type);
+ }
+
+ ///
+ /// Defines a receiver that has internal routing (DM-RMC-4K-Z-SCALER-C)
+ ///
+ public interface IRmcRouting : IRouting
+ {
+ IntFeedback AudioVideoSourceNumericFeedback { get; }
+ void ExecuteNumericSwitch(ushort input, ushort output, eRoutingSignalType type);
}
///
diff --git a/essentials-framework/Essentials DM/Essentials_DM/Endpoints/Receivers/DmRmcHelper.cs b/essentials-framework/Essentials DM/Essentials_DM/Endpoints/Receivers/DmRmcHelper.cs
index 1a5fe034..91085fca 100644
--- a/essentials-framework/Essentials DM/Essentials_DM/Endpoints/Receivers/DmRmcHelper.cs
+++ b/essentials-framework/Essentials DM/Essentials_DM/Endpoints/Receivers/DmRmcHelper.cs
@@ -1,308 +1,326 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using Crestron.SimplSharp;
-using Crestron.SimplSharpPro;
-using Crestron.SimplSharpPro.DeviceSupport;
-using Crestron.SimplSharpPro.DM;
-using Crestron.SimplSharpPro.DM.Endpoints;
-using Crestron.SimplSharpPro.DM.Endpoints.Receivers;
-using Newtonsoft.Json;
-using PepperDash.Core;
-using PepperDash.Essentials.Core;
-using PepperDash.Essentials.Core.Bridges;
-using PepperDash.Essentials.DM.Config;
-using PepperDash.Essentials.Core.Config;
-
-namespace PepperDash.Essentials.DM
-{
- [Description("Wrapper class for all DM-RMC variants")]
- public abstract class DmRmcControllerBase : CrestronGenericBridgeableBaseDevice
- {
- public virtual StringFeedback VideoOutputResolutionFeedback { get; protected set; }
- public virtual StringFeedback EdidManufacturerFeedback { get; protected set; }
- public virtual StringFeedback EdidNameFeedback { get; protected set; }
- public virtual StringFeedback EdidPreferredTimingFeedback { get; protected set; }
- public virtual StringFeedback EdidSerialNumberFeedback { get; protected set; }
-
- protected DmRmcControllerBase(string key, string name, EndpointReceiverBase device)
- : base(key, name, device)
- {
- // if wired to a chassis, skip registration step in base class
- if (device.DMOutput != null)
- {
- this.PreventRegistration = true;
- }
- AddToFeedbackList(VideoOutputResolutionFeedback, EdidManufacturerFeedback, EdidSerialNumberFeedback, EdidNameFeedback, EdidPreferredTimingFeedback);
- }
-
- protected void LinkDmRmcToApi(DmRmcControllerBase rmc, BasicTriList trilist, uint joinStart, string joinMapKey, EiscApiAdvanced bridge)
- {
- var joinMap = new DmRmcControllerJoinMap();
-
- var joinMapSerialized = JoinMapHelper.GetSerializedJoinMapForDevice(joinMapKey);
-
- if (!string.IsNullOrEmpty(joinMapSerialized))
- joinMap = JsonConvert.DeserializeObject(joinMapSerialized);
-
- joinMap.OffsetJoinNumbers(joinStart);
-
- Debug.Console(1, rmc, "Linking to Trilist '{0}'", trilist.ID.ToString("X"));
-
- rmc.IsOnline.LinkInputSig(trilist.BooleanInput[joinMap.IsOnline]);
- if (rmc.VideoOutputResolutionFeedback != null)
- rmc.VideoOutputResolutionFeedback.LinkInputSig(trilist.StringInput[joinMap.CurrentOutputResolution]);
- if (rmc.EdidManufacturerFeedback != null)
- rmc.EdidManufacturerFeedback.LinkInputSig(trilist.StringInput[joinMap.EdidManufacturer]);
- if (rmc.EdidNameFeedback != null)
- rmc.EdidNameFeedback.LinkInputSig(trilist.StringInput[joinMap.EdidName]);
- if (rmc.EdidPreferredTimingFeedback != null)
- rmc.EdidPreferredTimingFeedback.LinkInputSig(trilist.StringInput[joinMap.EdidPrefferedTiming]);
- if (rmc.EdidSerialNumberFeedback != null)
- rmc.EdidSerialNumberFeedback.LinkInputSig(trilist.StringInput[joinMap.EdidSerialNumber]);
- }
- }
-
- public abstract class DmHdBaseTControllerBase : CrestronGenericBaseDevice
- {
- public HDBaseTBase Rmc { get; protected set; }
-
- ///
- /// Make a Crestron RMC and put it in here
- ///
- public DmHdBaseTControllerBase(string key, string name, HDBaseTBase rmc)
- : base(key, name, rmc)
- {
-
- }
- }
-
- public class DmRmcHelper
- {
- ///
- /// A factory method for various DmTxControllers
- ///
- ///
- ///
- ///
- ///
- public static CrestronGenericBaseDevice GetDmRmcController(string key, string name, string typeName, DmRmcPropertiesConfig props)
- {
- // switch on type name... later...
-
- typeName = typeName.ToLower();
- uint ipid = props.Control.IpIdInt; // Convert.ToUInt16(props.Id, 16);
-
-
-
- // right here, we need to grab the tie line that associates this
- // RMC with a chassis or processor. If the RMC input's tie line is not
- // connected to a chassis, then it's parent is the processor.
- // If the RMC is connected to a chassis, then we need to grab the
- // output number from the tie line and use that to plug it in.
- // Example of chassis-connected:
- //{
- // "sourceKey": "dmMd8x8-1",
- // "sourcePort": "anyOut2",
- // "destinationKey": "dmRmc100C-2",
- // "destinationPort": "DmIn"
- //}
-
- // Tx -> RMC link:
- //{
- // "sourceKey": "dmTx201C-1",
- // "sourcePort": "DmOut",
- // "destinationKey": "dmRmc100C-2",
- // "destinationPort": "DmIn"
- //}
-
- var tlc = TieLineCollection.Default;
- // grab the tie line that has this key as
- // THIS DOESN'T WORK BECAUSE THE RMC THAT WE NEED (THIS) HASN'T BEEN MADE
- // YET AND THUS WILL NOT HAVE A TIE LINE...
- var inputTieLine = tlc.FirstOrDefault(t =>
- {
- var d = t.DestinationPort.ParentDevice;
- return d.Key.Equals(key, StringComparison.OrdinalIgnoreCase)
- && d is DmChassisController;
- });
-
- var pKey = props.ParentDeviceKey.ToLower();
-
-
-
-
- // Non-DM-chassis endpoints
- if (pKey == "processor")
- {
- // Catch constructor failures, mainly dues to IPID
- try
- {
- if (typeName.StartsWith("dmrmc100c"))
- return new DmRmcX100CController(key, name, new DmRmc100C(ipid, Global.ControlSystem));
- if (typeName.StartsWith("dmrmc100s"))
- return new DmRmc100SController(key, name, new DmRmc100S(ipid, Global.ControlSystem));
- if (typeName.StartsWith("dmrmc4k100c"))
- return new DmRmcX100CController(key, name, new DmRmc4k100C(ipid, Global.ControlSystem));
- if (typeName.StartsWith("dmrmc4kz100c"))
- return new DmRmc4kZ100CController(key, name, new DmRmc4kz100C(ipid, Global.ControlSystem));
- if (typeName.StartsWith("dmrmc150s"))
- return new DmRmc150SController(key, name, new DmRmc150S(ipid, Global.ControlSystem));
- if (typeName.StartsWith("dmrmc200c"))
- return new DmRmc200CController(key, name, new DmRmc200C(ipid, Global.ControlSystem));
- if (typeName.StartsWith("dmrmc200s"))
- return new DmRmc200SController(key, name, new DmRmc200S(ipid, Global.ControlSystem));
- if (typeName.StartsWith("dmrmc200s2"))
- return new DmRmc200S2Controller(key, name, new DmRmc200S2(ipid, Global.ControlSystem));
- if (typeName.StartsWith("dmrmcscalerc"))
- return new DmRmcScalerCController(key, name, new DmRmcScalerC(ipid, Global.ControlSystem));
- if (typeName.StartsWith("dmrmcscalers"))
- return new DmRmcScalerSController(key, name, new DmRmcScalerS(ipid, Global.ControlSystem));
- if (typeName.StartsWith("dmrmcscalers2"))
- return new DmRmcScalerS2Controller(key, name, new DmRmcScalerS2(ipid, Global.ControlSystem));
- if (typeName.StartsWith("dmrmc4kscalerc"))
- return new DmRmc4kScalerCController(key, name, new DmRmc4kScalerC(ipid, Global.ControlSystem));
- if (typeName.StartsWith("dmrmc4kscalercdsp"))
- return new DmRmc4kScalerCDspController(key, name, new DmRmc4kScalerCDsp(ipid, Global.ControlSystem));
- }
- catch (Exception e)
- {
- Debug.Console(0, "[{0}] WARNING: Cannot create DM-RMC device: {1}", key, e.Message);
- }
-
-
- Debug.Console(0, "Cannot create DM-RMC of type: '{0}'", typeName);
- }
- // Endpoints attached to DM Chassis
- else
- {
- var parentDev = DeviceManager.GetDeviceForKey(pKey);
- if (!(parentDev is IDmSwitch))
- {
- Debug.Console(0, "Cannot create DM device '{0}'. '{1}' is not a DM Chassis.",
- key, pKey);
- return null;
- }
-
- var chassis = (parentDev as IDmSwitch).Chassis;
- var num = props.ParentOutputNumber;
- if (num <= 0 || num > chassis.NumberOfOutputs)
- {
- Debug.Console(0, "Cannot create DM device '{0}'. Output number '{1}' is out of range",
- key, num);
- return null;
- }
- else
- {
- var controller = (parentDev as IDmSwitch);
- controller.RxDictionary.Add(num, key);
- }
- // Catch constructor failures, mainly dues to IPID
- try
- {
-
- // Must use different constructor for CPU3 chassis types. No IPID
- if (chassis is DmMd8x8Cpu3 || chassis is DmMd16x16Cpu3 ||
- chassis is DmMd32x32Cpu3 || chassis is DmMd8x8Cpu3rps ||
- chassis is DmMd16x16Cpu3rps || chassis is DmMd32x32Cpu3rps ||
- chassis is DmMd128x128 || chassis is DmMd64x64)
- {
- if (typeName.StartsWith("hdbasetrx"))
- return new HDBaseTRxController(key, name, new HDRx3CB(chassis.Outputs[num]));
- if (typeName.StartsWith("dmrmc4k100c1g"))
- return new DmRmc4k100C1GController(key, name, new DmRmc4K100C1G(chassis.Outputs[num]));
- if (typeName.StartsWith("dmrmc100c"))
- return new DmRmcX100CController(key, name, new DmRmc100C(chassis.Outputs[num]));
- if (typeName.StartsWith("dmrmc100s"))
- return new DmRmc100SController(key, name, new DmRmc100S(chassis.Outputs[num]));
- if (typeName.StartsWith("dmrmc4k100c"))
- return new DmRmcX100CController(key, name, new DmRmc4k100C(chassis.Outputs[num]));
- if (typeName.StartsWith("dmrmc4kz100c"))
- return new DmRmc4kZ100CController(key, name, new DmRmc4kz100C(chassis.Outputs[num]));
- if (typeName.StartsWith("dmrmc150s"))
- return new DmRmc150SController(key, name, new DmRmc150S(chassis.Outputs[num]));
- if (typeName.StartsWith("dmrmc200c"))
- return new DmRmc200CController(key, name, new DmRmc200C(chassis.Outputs[num]));
- if (typeName.StartsWith("dmrmc200s"))
- return new DmRmc200SController(key, name, new DmRmc200S(chassis.Outputs[num]));
- if (typeName.StartsWith("dmrmc200s2"))
- return new DmRmc200S2Controller(key, name, new DmRmc200S2(chassis.Outputs[num]));
- if (typeName.StartsWith("dmrmcscalerc"))
- return new DmRmcScalerCController(key, name, new DmRmcScalerC(chassis.Outputs[num]));
- if (typeName.StartsWith("dmrmcscalers"))
- return new DmRmcScalerSController(key, name, new DmRmcScalerS(chassis.Outputs[num]));
- if (typeName.StartsWith("dmrmcscalers2"))
- return new DmRmcScalerS2Controller(key, name, new DmRmcScalerS2(chassis.Outputs[num]));
- if (typeName.StartsWith("dmrmc4kscalerc"))
- return new DmRmc4kScalerCController(key, name, new DmRmc4kScalerC(chassis.Outputs[num]));
- if (typeName.StartsWith("dmrmc4kscalercdsp"))
- return new DmRmc4kScalerCDspController(key, name, new DmRmc4kScalerCDsp(chassis.Outputs[num]));
- }
- else
- {
- if (typeName.StartsWith("hdbasetrx"))
- return new HDBaseTRxController(key, name, new HDRx3CB(ipid, chassis.Outputs[num]));
- if (typeName.StartsWith("dmrmc4k100c1g"))
- return new DmRmc4k100C1GController(key, name, new DmRmc4K100C1G(ipid, chassis.Outputs[num]));
- if (typeName.StartsWith("dmrmc100c"))
- return new DmRmcX100CController(key, name, new DmRmc100C(ipid, chassis.Outputs[num]));
- if (typeName.StartsWith("dmrmc100s"))
- return new DmRmc100SController(key, name, new DmRmc100S(ipid, chassis.Outputs[num]));
- if (typeName.StartsWith("dmrmc4k100c"))
- return new DmRmcX100CController(key, name, new DmRmc4k100C(ipid, chassis.Outputs[num]));
- if (typeName.StartsWith("dmrmc4kz100c"))
- return new DmRmc4kZ100CController(key, name, new DmRmc4kz100C(ipid, chassis.Outputs[num]));
- if (typeName.StartsWith("dmrmc150s"))
- return new DmRmc150SController(key, name, new DmRmc150S(ipid, chassis.Outputs[num]));
- if (typeName.StartsWith("dmrmc200c"))
- return new DmRmc200CController(key, name, new DmRmc200C(ipid, chassis.Outputs[num]));
- if (typeName.StartsWith("dmrmc200s"))
- return new DmRmc200SController(key, name, new DmRmc200S(ipid, chassis.Outputs[num]));
- if (typeName.StartsWith("dmrmc200s2"))
- return new DmRmc200S2Controller(key, name, new DmRmc200S2(ipid, chassis.Outputs[num]));
- if (typeName.StartsWith("dmrmcscalerc"))
- return new DmRmcScalerCController(key, name, new DmRmcScalerC(ipid, chassis.Outputs[num]));
- if (typeName.StartsWith("dmrmcscalers"))
- return new DmRmcScalerSController(key, name, new DmRmcScalerS(ipid, chassis.Outputs[num]));
- if (typeName.StartsWith("dmrmcscalers2"))
- return new DmRmcScalerS2Controller(key, name, new DmRmcScalerS2(ipid, chassis.Outputs[num]));
- if (typeName.StartsWith("dmrmc4kscalerc"))
- return new DmRmc4kScalerCController(key, name, new DmRmc4kScalerC(ipid, chassis.Outputs[num]));
- if (typeName.StartsWith("dmrmc4kscalercdsp"))
- return new DmRmc4kScalerCDspController(key, name, new DmRmc4kScalerCDsp(ipid, chassis.Outputs[num]));
- }
- }
- catch (Exception e)
- {
- Debug.Console(0, "[{0}] WARNING: Cannot create DM-RMC device: {1}", key, e.Message);
- }
- }
-
- return null;
- }
- }
-
- public class DmRmcControllerFactory : EssentialsDeviceFactory
- {
- public DmRmcControllerFactory()
- {
- TypeNames = new List() { "hdbasetrx", "dmrmc4k100c1g", "dmrmc100c", "dmrmc100s", "dmrmc4k100c", "dmrmc150s",
- "dmrmc200c", "dmrmc200s", "dmrmc200s2", "dmrmcscalerc", "dmrmcscalers", "dmrmcscalers2", "dmrmc4kscalerc", "dmrmc4kscalercdsp",
- "dmrmc4kz100c" };
- }
-
- public override EssentialsDevice BuildDevice(DeviceConfig dc)
- {
- var type = dc.Type.ToLower();
-
- Debug.Console(1, "Factory Attempting to create new DM-RMC Device");
-
- var props = JsonConvert.DeserializeObject
- (dc.Properties.ToString());
- return PepperDash.Essentials.DM.DmRmcHelper.GetDmRmcController(dc.Key, dc.Name, type, props);
-
- }
- }
-
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using Crestron.SimplSharp;
+using Crestron.SimplSharpPro;
+using Crestron.SimplSharpPro.DeviceSupport;
+using Crestron.SimplSharpPro.DM;
+using Crestron.SimplSharpPro.DM.Endpoints;
+using Crestron.SimplSharpPro.DM.Endpoints.Receivers;
+using Newtonsoft.Json;
+using PepperDash.Core;
+using PepperDash.Essentials.Core;
+using PepperDash.Essentials.Core.Bridges;
+using PepperDash.Essentials.DM.Config;
+using PepperDash.Essentials.Core.Config;
+
+namespace PepperDash.Essentials.DM
+{
+ [Description("Wrapper class for all DM-RMC variants")]
+ public abstract class DmRmcControllerBase : CrestronGenericBridgeableBaseDevice
+ {
+ public virtual StringFeedback VideoOutputResolutionFeedback { get; protected set; }
+ public virtual StringFeedback EdidManufacturerFeedback { get; protected set; }
+ public virtual StringFeedback EdidNameFeedback { get; protected set; }
+ public virtual StringFeedback EdidPreferredTimingFeedback { get; protected set; }
+ public virtual StringFeedback EdidSerialNumberFeedback { get; protected set; }
+
+ protected DmRmcControllerBase(string key, string name, EndpointReceiverBase device)
+ : base(key, name, device)
+ {
+ // if wired to a chassis, skip registration step in base class
+ if (device.DMOutput != null)
+ {
+ this.PreventRegistration = true;
+ }
+ AddToFeedbackList(VideoOutputResolutionFeedback, EdidManufacturerFeedback, EdidSerialNumberFeedback, EdidNameFeedback, EdidPreferredTimingFeedback);
+ }
+
+ protected void LinkDmRmcToApi(DmRmcControllerBase rmc, BasicTriList trilist, uint joinStart, string joinMapKey, EiscApiAdvanced bridge)
+ {
+ var joinMap = new DmRmcControllerJoinMap();
+
+ var joinMapSerialized = JoinMapHelper.GetSerializedJoinMapForDevice(joinMapKey);
+
+ if (!string.IsNullOrEmpty(joinMapSerialized))
+ joinMap = JsonConvert.DeserializeObject(joinMapSerialized);
+
+ joinMap.OffsetJoinNumbers(joinStart);
+
+ Debug.Console(1, rmc, "Linking to Trilist '{0}'", trilist.ID.ToString("X"));
+
+ rmc.IsOnline.LinkInputSig(trilist.BooleanInput[joinMap.IsOnline]);
+ if (rmc.VideoOutputResolutionFeedback != null)
+ rmc.VideoOutputResolutionFeedback.LinkInputSig(trilist.StringInput[joinMap.CurrentOutputResolution]);
+ if (rmc.EdidManufacturerFeedback != null)
+ rmc.EdidManufacturerFeedback.LinkInputSig(trilist.StringInput[joinMap.EdidManufacturer]);
+ if (rmc.EdidNameFeedback != null)
+ rmc.EdidNameFeedback.LinkInputSig(trilist.StringInput[joinMap.EdidName]);
+ if (rmc.EdidPreferredTimingFeedback != null)
+ rmc.EdidPreferredTimingFeedback.LinkInputSig(trilist.StringInput[joinMap.EdidPrefferedTiming]);
+ if (rmc.EdidSerialNumberFeedback != null)
+ rmc.EdidSerialNumberFeedback.LinkInputSig(trilist.StringInput[joinMap.EdidSerialNumber]);
+
+ //If the device is an DM-RMC-4K-Z-SCALER-C
+ var routing = rmc as IRmcRouting;
+
+ if (routing != null)
+ {
+ if (routing.AudioVideoSourceNumericFeedback != null)
+ routing.AudioVideoSourceNumericFeedback.LinkInputSig(trilist.UShortInput[joinMap.AudioVideoSource]);
+
+ trilist.SetUShortSigAction(joinMap.AudioVideoSource, (a) => routing.ExecuteNumericSwitch(a, 1, eRoutingSignalType.AudioVideo));
+ }
+ }
+ }
+
+ public abstract class DmHdBaseTControllerBase : CrestronGenericBaseDevice
+ {
+ public HDBaseTBase Rmc { get; protected set; }
+
+ ///
+ /// Make a Crestron RMC and put it in here
+ ///
+ public DmHdBaseTControllerBase(string key, string name, HDBaseTBase rmc)
+ : base(key, name, rmc)
+ {
+
+ }
+ }
+
+ public class DmRmcHelper
+ {
+ ///
+ /// A factory method for various DmTxControllers
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static CrestronGenericBaseDevice GetDmRmcController(string key, string name, string typeName, DmRmcPropertiesConfig props)
+ {
+ // switch on type name... later...
+
+ typeName = typeName.ToLower();
+ uint ipid = props.Control.IpIdInt; // Convert.ToUInt16(props.Id, 16);
+
+
+
+ // right here, we need to grab the tie line that associates this
+ // RMC with a chassis or processor. If the RMC input's tie line is not
+ // connected to a chassis, then it's parent is the processor.
+ // If the RMC is connected to a chassis, then we need to grab the
+ // output number from the tie line and use that to plug it in.
+ // Example of chassis-connected:
+ //{
+ // "sourceKey": "dmMd8x8-1",
+ // "sourcePort": "anyOut2",
+ // "destinationKey": "dmRmc100C-2",
+ // "destinationPort": "DmIn"
+ //}
+
+ // Tx -> RMC link:
+ //{
+ // "sourceKey": "dmTx201C-1",
+ // "sourcePort": "DmOut",
+ // "destinationKey": "dmRmc100C-2",
+ // "destinationPort": "DmIn"
+ //}
+
+ var tlc = TieLineCollection.Default;
+ // grab the tie line that has this key as
+ // THIS DOESN'T WORK BECAUSE THE RMC THAT WE NEED (THIS) HASN'T BEEN MADE
+ // YET AND THUS WILL NOT HAVE A TIE LINE...
+ var inputTieLine = tlc.FirstOrDefault(t =>
+ {
+ var d = t.DestinationPort.ParentDevice;
+ return d.Key.Equals(key, StringComparison.OrdinalIgnoreCase)
+ && d is DmChassisController;
+ });
+
+ var pKey = props.ParentDeviceKey.ToLower();
+
+
+
+
+ // Non-DM-chassis endpoints
+ if (pKey == "processor")
+ {
+ // Catch constructor failures, mainly dues to IPID
+ try
+ {
+ if (typeName.StartsWith("dmrmc100c"))
+ return new DmRmcX100CController(key, name, new DmRmc100C(ipid, Global.ControlSystem));
+ if (typeName.StartsWith("dmrmc100s"))
+ return new DmRmc100SController(key, name, new DmRmc100S(ipid, Global.ControlSystem));
+ if (typeName.StartsWith("dmrmc4k100c"))
+ return new DmRmcX100CController(key, name, new DmRmc4k100C(ipid, Global.ControlSystem));
+ if (typeName.StartsWith("dmrmc4kz100c"))
+ return new DmRmc4kZ100CController(key, name, new DmRmc4kz100C(ipid, Global.ControlSystem));
+ if (typeName.StartsWith("dmrmc150s"))
+ return new DmRmc150SController(key, name, new DmRmc150S(ipid, Global.ControlSystem));
+ if (typeName.StartsWith("dmrmc200c"))
+ return new DmRmc200CController(key, name, new DmRmc200C(ipid, Global.ControlSystem));
+ if (typeName.StartsWith("dmrmc200s"))
+ return new DmRmc200SController(key, name, new DmRmc200S(ipid, Global.ControlSystem));
+ if (typeName.StartsWith("dmrmc200s2"))
+ return new DmRmc200S2Controller(key, name, new DmRmc200S2(ipid, Global.ControlSystem));
+ if (typeName.StartsWith("dmrmcscalerc"))
+ return new DmRmcScalerCController(key, name, new DmRmcScalerC(ipid, Global.ControlSystem));
+ if (typeName.StartsWith("dmrmcscalers"))
+ return new DmRmcScalerSController(key, name, new DmRmcScalerS(ipid, Global.ControlSystem));
+ if (typeName.StartsWith("dmrmcscalers2"))
+ return new DmRmcScalerS2Controller(key, name, new DmRmcScalerS2(ipid, Global.ControlSystem));
+ if (typeName.StartsWith("dmrmc4kscalerc"))
+ return new DmRmc4kScalerCController(key, name, new DmRmc4kScalerC(ipid, Global.ControlSystem));
+ if (typeName.StartsWith("dmrmc4kscalercdsp"))
+ return new DmRmc4kScalerCDspController(key, name, new DmRmc4kScalerCDsp(ipid, Global.ControlSystem));
+ if (typeName.StartsWith("dmrmc4kzscalerc"))
+ return new DmRmc4kZScalerCController(key, name, new DmRmc4kzScalerC(ipid, Global.ControlSystem));
+ }
+ catch (Exception e)
+ {
+ Debug.Console(0, "[{0}] WARNING: Cannot create DM-RMC device: {1}", key, e.Message);
+ }
+
+
+ Debug.Console(0, "Cannot create DM-RMC of type: '{0}'", typeName);
+ }
+ // Endpoints attached to DM Chassis
+ else
+ {
+ var parentDev = DeviceManager.GetDeviceForKey(pKey);
+ if (!(parentDev is IDmSwitch))
+ {
+ Debug.Console(0, "Cannot create DM device '{0}'. '{1}' is not a DM Chassis.",
+ key, pKey);
+ return null;
+ }
+
+ var chassis = (parentDev as IDmSwitch).Chassis;
+ var num = props.ParentOutputNumber;
+ if (num <= 0 || num > chassis.NumberOfOutputs)
+ {
+ Debug.Console(0, "Cannot create DM device '{0}'. Output number '{1}' is out of range",
+ key, num);
+ return null;
+ }
+ else
+ {
+ var controller = (parentDev as IDmSwitch);
+ controller.RxDictionary.Add(num, key);
+ }
+ // Catch constructor failures, mainly dues to IPID
+ try
+ {
+
+ // Must use different constructor for CPU3 chassis types. No IPID
+ if (chassis is DmMd8x8Cpu3 || chassis is DmMd16x16Cpu3 ||
+ chassis is DmMd32x32Cpu3 || chassis is DmMd8x8Cpu3rps ||
+ chassis is DmMd16x16Cpu3rps || chassis is DmMd32x32Cpu3rps ||
+ chassis is DmMd128x128 || chassis is DmMd64x64)
+ {
+ if (typeName.StartsWith("hdbasetrx"))
+ return new HDBaseTRxController(key, name, new HDRx3CB(chassis.Outputs[num]));
+ if (typeName.StartsWith("dmrmc4k100c1g"))
+ return new DmRmc4k100C1GController(key, name, new DmRmc4K100C1G(chassis.Outputs[num]));
+ if (typeName.StartsWith("dmrmc100c"))
+ return new DmRmcX100CController(key, name, new DmRmc100C(chassis.Outputs[num]));
+ if (typeName.StartsWith("dmrmc100s"))
+ return new DmRmc100SController(key, name, new DmRmc100S(chassis.Outputs[num]));
+ if (typeName.StartsWith("dmrmc4k100c"))
+ return new DmRmcX100CController(key, name, new DmRmc4k100C(chassis.Outputs[num]));
+ if (typeName.StartsWith("dmrmc4kz100c"))
+ return new DmRmc4kZ100CController(key, name, new DmRmc4kz100C(chassis.Outputs[num]));
+ if (typeName.StartsWith("dmrmc150s"))
+ return new DmRmc150SController(key, name, new DmRmc150S(chassis.Outputs[num]));
+ if (typeName.StartsWith("dmrmc200c"))
+ return new DmRmc200CController(key, name, new DmRmc200C(chassis.Outputs[num]));
+ if (typeName.StartsWith("dmrmc200s"))
+ return new DmRmc200SController(key, name, new DmRmc200S(chassis.Outputs[num]));
+ if (typeName.StartsWith("dmrmc200s2"))
+ return new DmRmc200S2Controller(key, name, new DmRmc200S2(chassis.Outputs[num]));
+ if (typeName.StartsWith("dmrmcscalerc"))
+ return new DmRmcScalerCController(key, name, new DmRmcScalerC(chassis.Outputs[num]));
+ if (typeName.StartsWith("dmrmcscalers"))
+ return new DmRmcScalerSController(key, name, new DmRmcScalerS(chassis.Outputs[num]));
+ if (typeName.StartsWith("dmrmcscalers2"))
+ return new DmRmcScalerS2Controller(key, name, new DmRmcScalerS2(chassis.Outputs[num]));
+ if (typeName.StartsWith("dmrmc4kscalerc"))
+ return new DmRmc4kScalerCController(key, name, new DmRmc4kScalerC(chassis.Outputs[num]));
+ if (typeName.StartsWith("dmrmc4kscalercdsp"))
+ return new DmRmc4kScalerCDspController(key, name, new DmRmc4kScalerCDsp(chassis.Outputs[num]));
+ if (typeName.StartsWith("dmrmc4kzscalerc"))
+ return new DmRmc4kZScalerCController(key, name, new DmRmc4kzScalerC(chassis.Outputs[num]));
+ }
+ else
+ {
+ if (typeName.StartsWith("hdbasetrx"))
+ return new HDBaseTRxController(key, name, new HDRx3CB(ipid, chassis.Outputs[num]));
+ if (typeName.StartsWith("dmrmc4k100c1g"))
+ return new DmRmc4k100C1GController(key, name, new DmRmc4K100C1G(ipid, chassis.Outputs[num]));
+ if (typeName.StartsWith("dmrmc100c"))
+ return new DmRmcX100CController(key, name, new DmRmc100C(ipid, chassis.Outputs[num]));
+ if (typeName.StartsWith("dmrmc100s"))
+ return new DmRmc100SController(key, name, new DmRmc100S(ipid, chassis.Outputs[num]));
+ if (typeName.StartsWith("dmrmc4k100c"))
+ return new DmRmcX100CController(key, name, new DmRmc4k100C(ipid, chassis.Outputs[num]));
+ if (typeName.StartsWith("dmrmc4kz100c"))
+ return new DmRmc4kZ100CController(key, name, new DmRmc4kz100C(ipid, chassis.Outputs[num]));
+ if (typeName.StartsWith("dmrmc150s"))
+ return new DmRmc150SController(key, name, new DmRmc150S(ipid, chassis.Outputs[num]));
+ if (typeName.StartsWith("dmrmc200c"))
+ return new DmRmc200CController(key, name, new DmRmc200C(ipid, chassis.Outputs[num]));
+ if (typeName.StartsWith("dmrmc200s"))
+ return new DmRmc200SController(key, name, new DmRmc200S(ipid, chassis.Outputs[num]));
+ if (typeName.StartsWith("dmrmc200s2"))
+ return new DmRmc200S2Controller(key, name, new DmRmc200S2(ipid, chassis.Outputs[num]));
+ if (typeName.StartsWith("dmrmcscalerc"))
+ return new DmRmcScalerCController(key, name, new DmRmcScalerC(ipid, chassis.Outputs[num]));
+ if (typeName.StartsWith("dmrmcscalers"))
+ return new DmRmcScalerSController(key, name, new DmRmcScalerS(ipid, chassis.Outputs[num]));
+ if (typeName.StartsWith("dmrmcscalers2"))
+ return new DmRmcScalerS2Controller(key, name, new DmRmcScalerS2(ipid, chassis.Outputs[num]));
+ if (typeName.StartsWith("dmrmc4kscalerc"))
+ return new DmRmc4kScalerCController(key, name, new DmRmc4kScalerC(ipid, chassis.Outputs[num]));
+ if (typeName.StartsWith("dmrmc4kscalercdsp"))
+ return new DmRmc4kScalerCDspController(key, name, new DmRmc4kScalerCDsp(ipid, chassis.Outputs[num]));
+ if (typeName.StartsWith("dmrmc4kzscalerc"))
+ return new DmRmc4kZScalerCController(key, name, new DmRmc4kzScalerC(chassis.Outputs[num]));
+
+ }
+ }
+ catch (Exception e)
+ {
+ Debug.Console(0, "[{0}] WARNING: Cannot create DM-RMC device: {1}", key, e.Message);
+ }
+ }
+
+ return null;
+ }
+ }
+
+ public class DmRmcControllerFactory : EssentialsDeviceFactory
+ {
+ public DmRmcControllerFactory()
+ {
+ TypeNames = new List() { "hdbasetrx", "dmrmc4k100c1g", "dmrmc100c", "dmrmc100s", "dmrmc4k100c", "dmrmc150s",
+ "dmrmc200c", "dmrmc200s", "dmrmc200s2", "dmrmcscalerc", "dmrmcscalers", "dmrmcscalers2", "dmrmc4kscalerc", "dmrmc4kscalercdsp",
+ "dmrmc4kz100c", "dmrmckzscalerc" };
+ }
+
+ public override EssentialsDevice BuildDevice(DeviceConfig dc)
+ {
+ var type = dc.Type.ToLower();
+
+ Debug.Console(1, "Factory Attempting to create new DM-RMC Device");
+
+ var props = JsonConvert.DeserializeObject
+ (dc.Properties.ToString());
+ return PepperDash.Essentials.DM.DmRmcHelper.GetDmRmcController(dc.Key, dc.Name, type, props);
+
+ }
+ }
+
}
\ No newline at end of file
diff --git a/essentials-framework/Essentials DM/Essentials_DM/PepperDash_Essentials_DM.csproj b/essentials-framework/Essentials DM/Essentials_DM/PepperDash_Essentials_DM.csproj
index 96533e96..9e3ca384 100644
--- a/essentials-framework/Essentials DM/Essentials_DM/PepperDash_Essentials_DM.csproj
+++ b/essentials-framework/Essentials DM/Essentials_DM/PepperDash_Essentials_DM.csproj
@@ -1,160 +1,161 @@
-
-
- Release
- AnyCPU
- 9.0.30729
- 2.0
- {9199CE8A-0C9F-4952-8672-3EED798B284F}
- Library
- Properties
- PepperDash_Essentials_DM
- PepperDash_Essentials_DM
- {0B4745B0-194B-4BB6-8E21-E9057CA92300};{4D628B5B-2FBC-4AA6-8C16-197242AEB884};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
- WindowsCE
- E2BECB1F-8C8C-41ba-B736-9BE7D946A398
- 5.0
- SmartDeviceProject1
- v3.5
- Windows CE
-
-
-
-
- .allowedReferenceRelatedFileExtensions
- true
- full
- false
- bin\
- DEBUG;TRACE;
- prompt
- 4
- 512
- true
- true
- off
-
-
- .allowedReferenceRelatedFileExtensions
- none
- true
- bin\
- prompt
- 4
- 512
- true
- true
- off
-
-
-
- False
- ..\..\..\..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SSPDevices\Crestron.SimplSharpPro.DeviceSupport.dll
-
-
- False
- ..\..\..\..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SSPDevices\Crestron.SimplSharpPro.DM.dll
-
-
- False
- ..\..\..\..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SSPDevices\Crestron.SimplSharpPro.UI.dll
-
-
-
- False
- ..\..\pepperdashcore-builds\PepperDash_Core.dll
-
-
- False
- ..\..\..\..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SimplSharpCustomAttributesInterface.dll
- False
-
-
- False
- ..\..\..\..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SimplSharpHelperInterface.dll
- False
-
-
- False
- ..\..\..\..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SimplSharpNewtonsoft.dll
-
-
- False
- ..\..\..\..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SimplSharpPro.exe
- False
-
-
- False
- ..\..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SimplSharpReflectionInterface.dll
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {A49AD6C8-FC0A-4CC0-9089-DFB4CF92D2B5}
- PepperDash_Essentials_Core
-
-
-
-
-
-
-
-
- rem S# Pro preparation will execute after these operations
-
+
+
+ Release
+ AnyCPU
+ 9.0.30729
+ 2.0
+ {9199CE8A-0C9F-4952-8672-3EED798B284F}
+ Library
+ Properties
+ PepperDash_Essentials_DM
+ PepperDash_Essentials_DM
+ {0B4745B0-194B-4BB6-8E21-E9057CA92300};{4D628B5B-2FBC-4AA6-8C16-197242AEB884};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
+ WindowsCE
+ E2BECB1F-8C8C-41ba-B736-9BE7D946A398
+ 5.0
+ SmartDeviceProject1
+ v3.5
+ Windows CE
+
+
+
+
+ .allowedReferenceRelatedFileExtensions
+ true
+ full
+ false
+ bin\
+ DEBUG;TRACE;
+ prompt
+ 4
+ 512
+ true
+ true
+ off
+
+
+ .allowedReferenceRelatedFileExtensions
+ none
+ true
+ bin\
+ prompt
+ 4
+ 512
+ true
+ true
+ off
+
+
+
+ False
+ ..\..\..\..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SSPDevices\Crestron.SimplSharpPro.DeviceSupport.dll
+
+
+ False
+ ..\..\..\..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SSPDevices\Crestron.SimplSharpPro.DM.dll
+
+
+ False
+ ..\..\..\..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SSPDevices\Crestron.SimplSharpPro.UI.dll
+
+
+
+ False
+ ..\..\pepperdashcore-builds\PepperDash_Core.dll
+
+
+ False
+ ..\..\..\..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SimplSharpCustomAttributesInterface.dll
+ False
+
+
+ False
+ ..\..\..\..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SimplSharpHelperInterface.dll
+ False
+
+
+ False
+ ..\..\..\..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SimplSharpNewtonsoft.dll
+
+
+ False
+ ..\..\..\..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SimplSharpPro.exe
+ False
+
+
+ False
+ ..\..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SimplSharpReflectionInterface.dll
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {A49AD6C8-FC0A-4CC0-9089-DFB4CF92D2B5}
+ PepperDash_Essentials_Core
+
+
+
+
+
+
+
+
+ rem S# Pro preparation will execute after these operations
+
\ No newline at end of file