Merge branch 'development' into hotfix/video-codec-base

This commit is contained in:
Andrew Welker
2025-02-19 17:53:02 -06:00
committed by GitHub
12 changed files with 232 additions and 72 deletions

View File

@@ -91,8 +91,8 @@ we receive and the availability of resources to evaluate contributions, we antic
project remains dynamic and relevant. This may affect our responsiveness and ability to accept pull requests project remains dynamic and relevant. This may affect our responsiveness and ability to accept pull requests
quickly. This does not mean we are ignoring them. quickly. This does not mean we are ignoring them.
- Not all innovative ideas need to be accepted as pull requests into this GitHub project to be valuable to the community. - Not all innovative ideas need to be accepted as pull requests into this GitHub project to be valuable to the community.
There may be times when we recommend that you just share your code for some enhancement to Ghidra from your own There may be times when we recommend that you just share your code for some enhancement to Essentials from your own
repository. As we identify and recognize extensions that are of general interest to the reverse engineering community, we repository. As we identify and recognize extensions that are of general interest to Essentials, we
may seek to incorporate them with our baseline. may seek to incorporate them with our baseline.
## Legal ## Legal

View File

@@ -70,7 +70,7 @@ namespace PepperDash.Essentials.Bridges
catch (NullReferenceException) catch (NullReferenceException)
{ {
Debug.ConsoleWithLog(0, this, Debug.ConsoleWithLog(0, this,
"Please update the bridge config to use EiscBridgeAdvanced with this device: {0}", device.Key); "Please update the bridge config to use eiscApiAdvanced with this device: {0}", device.Key);
} }
} }
Debug.Console(1, this, "Devices Linked."); Debug.Console(1, this, "Devices Linked.");

View File

@@ -20,6 +20,18 @@ namespace PepperDash.Essentials.Core.Bridges
public JoinDataComplete AutomaticInputRoutingEnabled = new JoinDataComplete(new JoinData { JoinNumber = 4, JoinSpan = 1 }, public JoinDataComplete AutomaticInputRoutingEnabled = new JoinDataComplete(new JoinData { JoinNumber = 4, JoinSpan = 1 },
new JoinMetadata { Description = "Air Media Automatic Input Routing Enable(d)", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Digital }); new JoinMetadata { Description = "Air Media Automatic Input Routing Enable(d)", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Digital });
[JoinName("HdmiInHdcpSupportOn")]
public JoinDataComplete HdmiInHdcpSupportOn = new JoinDataComplete(new JoinData { JoinNumber = 4, JoinSpan = 1 },
new JoinMetadata { Description = "Turns on HDCP support for HDMI in. Reports state as FB", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Digital });
[JoinName("HdmiInHdcpSupportOff")]
public JoinDataComplete HdmiInHdcpSupportOff = new JoinDataComplete(new JoinData { JoinNumber = 5, JoinSpan = 1 },
new JoinMetadata { Description = "Turns off HDCP support for HDMI in. Reports state as FB", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Digital });
[JoinName("HdmiInDisabledByHdcp")]
public JoinDataComplete HdmiInDisabledByHdcp = new JoinDataComplete(new JoinData { JoinNumber = 6, JoinSpan = 1 },
new JoinMetadata { Description = "Reports if ", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital });
[JoinName("VideoOut")] [JoinName("VideoOut")]
public JoinDataComplete VideoOut = new JoinDataComplete(new JoinData { JoinNumber = 1, JoinSpan = 1 }, public JoinDataComplete VideoOut = new JoinDataComplete(new JoinData { JoinNumber = 1, JoinSpan = 1 },
new JoinMetadata { Description = "Air Media Video Route Select / Feedback", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Analog }); new JoinMetadata { Description = "Air Media Video Route Select / Feedback", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Analog });

View File

@@ -68,7 +68,13 @@ namespace PepperDash.Essentials.Core.Bridges
public JoinDataComplete HdcpInputPortCount = new JoinDataComplete(new JoinData { JoinNumber = 5, JoinSpan = 1 }, public JoinDataComplete HdcpInputPortCount = new JoinDataComplete(new JoinData { JoinNumber = 5, JoinSpan = 1 },
new JoinMetadata { Description = "Number of Input Ports that support HDCP", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Analog }); new JoinMetadata { Description = "Number of Input Ports that support HDCP", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Analog });
[JoinName("ScalerOutWallMode")]
public JoinDataComplete ScalerOutWallMode = new JoinDataComplete(new JoinData { JoinNumber = 6, JoinSpan = 1 },
new JoinMetadata { Description = "Set Wall Mode for Scaler video Wall mode", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Analog });
[JoinName("ScalerOutWallModeRaw")]
public JoinDataComplete ScalerOutWallModeRaw = new JoinDataComplete(new JoinData { JoinNumber = 7, JoinSpan = 1 },
new JoinMetadata { Description = "Set Wall Mode for Scaler video Wall mode", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinType = eJoinType.Analog });
/// <summary> /// <summary>
/// Constructor to use when instantiating this Join Map without inheriting from it /// Constructor to use when instantiating this Join Map without inheriting from it

View File

@@ -43,11 +43,12 @@ namespace PepperDash.Essentials.DM.AirMedia
public BoolFeedback HdmiVideoSyncDetectedFeedback { get; private set; } public BoolFeedback HdmiVideoSyncDetectedFeedback { get; private set; }
public StringFeedback SerialNumberFeedback { get; private set; } public StringFeedback SerialNumberFeedback { get; private set; }
public BoolFeedback AutomaticInputRoutingEnabledFeedback { get; private set; } public BoolFeedback AutomaticInputRoutingEnabledFeedback { get; private set; }
public BoolFeedback HdmiInHdcpSupportOnFeedback { get; private set; }
public BoolFeedback HdmiInDisabledByHdcpFeedback { get; private set; }
public AirMediaController(string key, string name, Am3x00 device, DeviceConfig dc, AirMediaPropertiesConfig props) public AirMediaController(string key, string name, Am3x00 device, DeviceConfig dc, AirMediaPropertiesConfig props)
: base(key, name, device) : base(key, name, device)
{ {
AirMedia = device; AirMedia = device;
DeviceConfig = dc; DeviceConfig = dc;
@@ -101,6 +102,8 @@ namespace PepperDash.Essentials.DM.AirMedia
LoginCodeFeedback = new IntFeedback(() => AirMedia.AirMedia.LoginCodeFeedback.UShortValue); LoginCodeFeedback = new IntFeedback(() => AirMedia.AirMedia.LoginCodeFeedback.UShortValue);
ConnectionAddressFeedback = new StringFeedback(() => AirMedia.AirMedia.ConnectionAddressFeedback.StringValue); ConnectionAddressFeedback = new StringFeedback(() => AirMedia.AirMedia.ConnectionAddressFeedback.StringValue);
HostnameFeedback = new StringFeedback(() => AirMedia.AirMedia.HostNameFeedback.StringValue); HostnameFeedback = new StringFeedback(() => AirMedia.AirMedia.HostNameFeedback.StringValue);
HdmiInHdcpSupportOnFeedback = new BoolFeedback(() => AirMedia.HdmiIn.HdcpSupportOnFeedback.BoolValue);
HdmiInDisabledByHdcpFeedback = new BoolFeedback(() => AirMedia.HdmiIn.DisabledByHdcpFeedback.BoolValue);
// TODO: Figure out if we can actually get the TSID/Serial // TODO: Figure out if we can actually get the TSID/Serial
SerialNumberFeedback = new StringFeedback(() => "unknown"); SerialNumberFeedback = new StringFeedback(() => "unknown");
@@ -178,6 +181,13 @@ namespace PepperDash.Essentials.DM.AirMedia
ConnectionAddressFeedback.LinkInputSig(trilist.StringInput[joinMap.ConnectionAddressFB.JoinNumber]); ConnectionAddressFeedback.LinkInputSig(trilist.StringInput[joinMap.ConnectionAddressFB.JoinNumber]);
HostnameFeedback.LinkInputSig(trilist.StringInput[joinMap.HostnameFB.JoinNumber]); HostnameFeedback.LinkInputSig(trilist.StringInput[joinMap.HostnameFB.JoinNumber]);
SerialNumberFeedback.LinkInputSig(trilist.StringInput[joinMap.SerialNumberFeedback.JoinNumber]); SerialNumberFeedback.LinkInputSig(trilist.StringInput[joinMap.SerialNumberFeedback.JoinNumber]);
trilist.SetSigFalseAction(joinMap.HdmiInHdcpSupportOn.JoinNumber, () => SetHcdpSupport(true));
HdmiInHdcpSupportOnFeedback.LinkInputSig(trilist.BooleanInput[joinMap.HdmiInHdcpSupportOn.JoinNumber]);
trilist.SetSigFalseAction(joinMap.HdmiInHdcpSupportOff.JoinNumber, () => SetHcdpSupport(false));
HdmiInHdcpSupportOnFeedback.LinkComplementInputSig(trilist.BooleanInput[joinMap.HdmiInHdcpSupportOff.JoinNumber]);
HdmiInDisabledByHdcpFeedback.LinkInputSig(trilist.BooleanInput[joinMap.HdmiInDisabledByHdcp.JoinNumber]);
} }
/// <summary> /// <summary>
@@ -248,6 +258,14 @@ namespace PepperDash.Essentials.DM.AirMedia
{ {
if (args.EventId == DMInputEventIds.SourceSyncEventId) if (args.EventId == DMInputEventIds.SourceSyncEventId)
HdmiVideoSyncDetectedFeedback.FireUpdate(); HdmiVideoSyncDetectedFeedback.FireUpdate();
else if (args.EventId == DMInputEventIds.HdcpSupportOnEventId)
{
HdmiInHdcpSupportOnFeedback.FireUpdate();
}
else if (args.EventId == DMInputEventIds.DisabledByHdcpEventId)
{
HdmiInDisabledByHdcpFeedback.FireUpdate();
}
} }
/// <summary> /// <summary>
@@ -296,6 +314,14 @@ namespace PepperDash.Essentials.DM.AirMedia
AirMedia.DisplayControl.VideoOut = AmX00DisplayControl.eAirMediaX00VideoSource.AirBoard; AirMedia.DisplayControl.VideoOut = AmX00DisplayControl.eAirMediaX00VideoSource.AirBoard;
} }
public void SetHcdpSupport(bool on)
{
if (on)
AirMedia.HdmiIn.HdcpSupportOn();
else
AirMedia.HdmiIn.HdcpSupportOff();
}
/// <summary> /// <summary>
/// Reboots the device /// Reboots the device
/// </summary> /// </summary>

View File

@@ -138,7 +138,7 @@ namespace PepperDash_Essentials_DM.Chassis
() => input.InputPort.HdcpSupportOnFeedback.BoolValue)); () => input.InputPort.HdcpSupportOnFeedback.BoolValue));
VideoInputSyncFeedbacks.Add(new BoolFeedback(index.ToString(CultureInfo.InvariantCulture), VideoInputSyncFeedbacks.Add(new BoolFeedback(index.ToString(CultureInfo.InvariantCulture),
() => input.VideoDetectedFeedback.BoolValue)); () => input.InputPort.SyncDetectedFeedback.BoolValue));
} }
// iterate through DM Lite inputs // iterate through DM Lite inputs
@@ -167,7 +167,7 @@ namespace PepperDash_Essentials_DM.Chassis
() => input.InputPort.HdcpSupportOnFeedback.BoolValue)); () => input.InputPort.HdcpSupportOnFeedback.BoolValue));
VideoInputSyncFeedbacks.Add(new BoolFeedback(index.ToString(CultureInfo.InvariantCulture), VideoInputSyncFeedbacks.Add(new BoolFeedback(index.ToString(CultureInfo.InvariantCulture),
() => input.VideoDetectedFeedback.BoolValue)); () => input.InputPort.SyncDetectedFeedback.BoolValue));
} }
_chassis.DMInputChange += _chassis_InputChange; _chassis.DMInputChange += _chassis_InputChange;
@@ -456,24 +456,37 @@ Selector: {4}
// _chassis input change event // _chassis input change event
private void _chassis_InputChange(Switch device, DMInputEventArgs args) private void _chassis_InputChange(Switch device, DMInputEventArgs args)
{ {
var eventId = args.EventId; switch (args.EventId)
switch (eventId)
{ {
case DMInputEventIds.VideoDetectedEventId: case DMInputEventIds.RemoteTransmitterDetectedEventId:
{ {
Debug.Console(1, this, "Event ID {0}: Updating VideoInputSyncFeedbacks", eventId); // signal found on HD-PSXxx > Inputs > Inputs DM Lite X
foreach (var item in VideoInputSyncFeedbacks) Debug.Console(2, this, "{0} DM Input Event ID {1}-RemoteTransmitterDetected | Number {2}",
{ device.ToString(), args.EventId, args.Number);
item.FireUpdate(); break;
} }
case DMInputEventIds.SourceSyncEventId: // id-14
case DMInputEventIds.VideoDetectedEventId: // id-9
{
// signal found on HD-PSXxx > Inputs > HDMI/DM Lite X
Debug.Console(1, this, "{0} DM Input Event ID {1} | Number {2}: Updating VideoInputSyncFeedbacks",
device.Name, args.EventId, args.Number);
var input = args.Number;
var feedback = VideoInputSyncFeedbacks[(int)input];
if (feedback == null) return;
feedback.FireUpdate();
break; break;
} }
case DMInputEventIds.InputNameFeedbackEventId: case DMInputEventIds.InputNameFeedbackEventId:
case DMInputEventIds.InputNameEventId: case DMInputEventIds.InputNameEventId:
case DMInputEventIds.NameFeedbackEventId: case DMInputEventIds.NameFeedbackEventId:
{ {
Debug.Console(1, this, "Event ID {0}: Updating name feedbacks", eventId); Debug.Console(1, this, "{0} DM Input Event ID {1}-Name | Number {2}: Updating name feedbacks",
device.Name, args.EventId, args.Number);
var input = args.Number; var input = args.Number;
var name = _chassis.HdmiInputs[input].NameFeedback.StringValue; var name = _chassis.HdmiInputs[input].NameFeedback.StringValue;
@@ -483,7 +496,8 @@ Selector: {4}
} }
default: default:
{ {
Debug.Console(1, this, "Uhandled DM Input Event ID {0}", eventId); Debug.Console(1, this, "{0} DM Input Event ID {1} | Number {2}: Uhandled",
device.Name, args.EventId, args.Number);
break; break;
} }
} }
@@ -491,33 +505,53 @@ Selector: {4}
OnDmInputChange(args); OnDmInputChange(args);
} }
// _chassis output change event // _chassis output change event
private void _chassis_OutputChange(Switch device, DMOutputEventArgs args) private void _chassis_OutputChange(Switch device, DMOutputEventArgs args)
{ {
if (args.EventId != DMOutputEventIds.VideoOutEventId) return; switch (args.EventId)
{
case DMOutputEventIds.VideoOutEventId:
{
Debug.Console(2, this, "{0} DM Output Event Id {1} | Number {2} | Index {3}: VideoOutEventId",
device.Name, args.EventId, args.Number, args.Index);
var output = args.Number; var output = args.Number;
var input = _chassis.HdmiDmLiteOutputs[output].VideoOutFeedback == null var input = _chassis.HdmiDmLiteOutputs[output].VideoOutFeedback == null
? 0 ? 0
: _chassis.HdmiDmLiteOutputs[output].VideoOutFeedback.Number; : _chassis.HdmiDmLiteOutputs[output].VideoOutFeedback.Number;
var outputName = OutputNames[output]; var outputName = OutputNames[output];
var feedback = VideoOutputRouteFeedbacks[outputName]; var feedback = VideoOutputRouteFeedbacks[outputName];
if (feedback == null) return; if (feedback == null) return;
var inputPort = InputPorts.FirstOrDefault( var inputPort = InputPorts.FirstOrDefault(
p => p.FeedbackMatchObject == _chassis.HdmiDmLiteOutputs[output].VideoOutFeedback); p => p.FeedbackMatchObject == _chassis.HdmiDmLiteOutputs[output].VideoOutFeedback);
var outputPort = OutputPorts.FirstOrDefault( var outputPort = OutputPorts.FirstOrDefault(
p => p.FeedbackMatchObject == _chassis.HdmiDmLiteOutputs[output]); p => p.FeedbackMatchObject == _chassis.HdmiDmLiteOutputs[output]);
feedback.FireUpdate(); feedback.FireUpdate();
OnSwitchChange(new RoutingNumericEventArgs( OnSwitchChange(new RoutingNumericEventArgs(output, input, outputPort, inputPort, eRoutingSignalType.AudioVideo));
output, input, outputPort, inputPort, eRoutingSignalType.AudioVideo));
break;
}
case DMOutputEventIds.RemoteReceiverDetectedEventId:
{
// signal found on HD-PSXxx > Output[s] > Output [X] > DM Lite [X]
Debug.Console(2, this, "{0} DM Output Event Id {1} | Number {2} | Index {3}: RemoteRecevierDetectedEventId",
device.Name, args.EventId, args.Number, args.Index);
break;
}
default:
{
Debug.Console(2, this, "{0} DM Output Event Id {1} | Number {2} | Index:{3}: Unhandled",
device.Name, args.EventId, args.Number, args.Index);
break;
}
}
} }
@@ -543,9 +577,9 @@ Selector: {4}
#region Factory #region Factory
public class HdSp401ControllerFactory : EssentialsDeviceFactory<HdPsXxxController> public class HdPsXxxControllerFactory : EssentialsDeviceFactory<HdPsXxxController>
{ {
public HdSp401ControllerFactory() public HdPsXxxControllerFactory()
{ {
TypeNames = new List<string> { "hdps401", "hdps402", "hdps621", "hdps622" }; TypeNames = new List<string> { "hdps401", "hdps402", "hdps621", "hdps622" };
} }

View File

@@ -88,4 +88,10 @@ namespace PepperDash_Essentials_DM
{ {
eHdcpCapabilityType DisplayPortInHdcpCapability { get; } eHdcpCapabilityType DisplayPortInHdcpCapability { get; }
} }
public interface IhasWallMode
{
void SetWallMode(ushort walLMode);
}
} }

View File

@@ -10,12 +10,13 @@ using PepperDash.Essentials.Core;
using PepperDash.Essentials.Core.Bridges; using PepperDash.Essentials.Core.Bridges;
using PepperDash.Core; using PepperDash.Core;
using PepperDash_Essentials_DM; using PepperDash_Essentials_DM;
using System.Collections.Generic;
namespace PepperDash.Essentials.DM namespace PepperDash.Essentials.DM
{ {
[Description("Wrapper Class for DM-RMC-4K-Z-SCALER-C")] [Description("Wrapper Class for DM-RMC-4K-Z-SCALER-C")]
public class DmRmc4kZScalerCController : DmRmcControllerBase, IRmcRoutingWithFeedback, public class DmRmc4kZScalerCController : DmRmcControllerBase, IRmcRoutingWithFeedback,
IIROutputPorts, IComPorts, ICec, IRelayPorts, IHasDmInHdcp, IHasHdmiInHdcp IIROutputPorts, IComPorts, ICec, IRelayPorts, IHasDmInHdcp, IHasHdmiInHdcp, IhasWallMode
{ {
private readonly DmRmc4kzScalerC _rmc; private readonly DmRmc4kzScalerC _rmc;
@@ -26,9 +27,10 @@ namespace PepperDash.Essentials.DM
public IntFeedback DmInHdcpStateFeedback { get; private set; } public IntFeedback DmInHdcpStateFeedback { get; private set; }
public IntFeedback HdmiInHdcpStateFeedback { get; private set; } public IntFeedback HdmiInHdcpStateFeedback { get; private set; }
public BoolFeedback HdmiVideoSyncFeedback { get; private set; } public BoolFeedback HdmiVideoSyncFeedback { get; private set; }
private Dictionary<ushort, EndpointScalerOutput.eWall> WallModes;
/// <summary> /// <summary>
/// The value of the current video source for the HDMI output on the receiver /// The value of the current video source for the HDMI output on the receiver
@@ -87,6 +89,9 @@ namespace PepperDash.Essentials.DM
VideoOutputResolutionFeedback = new StringFeedback(() => _rmc.HdmiOutput.GetVideoResolutionString()); VideoOutputResolutionFeedback = new StringFeedback(() => _rmc.HdmiOutput.GetVideoResolutionString());
VideoWallModeRawFeedback = new IntFeedback("ScalerVideoWallModeRaw",
() => (int)_rmc.Scaler.WallModeRawFeedback.UShortValue);
InputPorts = new RoutingPortCollection<RoutingInputPort> { DmIn, HdmiIn }; InputPorts = new RoutingPortCollection<RoutingInputPort> { DmIn, HdmiIn };
OutputPorts = new RoutingPortCollection<RoutingOutputPort> { HdmiOut }; OutputPorts = new RoutingPortCollection<RoutingOutputPort> { HdmiOut };
@@ -94,6 +99,7 @@ namespace PepperDash.Essentials.DM
_rmc.HdmiOutput.ConnectedDevice.DeviceInformationChange += ConnectedDevice_DeviceInformationChange; _rmc.HdmiOutput.ConnectedDevice.DeviceInformationChange += ConnectedDevice_DeviceInformationChange;
_rmc.HdmiIn.InputStreamChange += InputStreamChangeEvent; _rmc.HdmiIn.InputStreamChange += InputStreamChangeEvent;
_rmc.DmInput.InputStreamChange += InputStreamChangeEvent; _rmc.DmInput.InputStreamChange += InputStreamChangeEvent;
_rmc.Scaler.OutputChange += Scaler_OutputChange;
_rmc.OnlineStatusChange += _rmc_OnlineStatusChange; _rmc.OnlineStatusChange += _rmc_OnlineStatusChange;
@@ -101,6 +107,15 @@ namespace PepperDash.Essentials.DM
HdmiOut.Port = _rmc.HdmiOutput; HdmiOut.Port = _rmc.HdmiOutput;
AudioVideoSourceNumericFeedback = new IntFeedback(() => (ushort)(_rmc.SelectedSourceFeedback)); AudioVideoSourceNumericFeedback = new IntFeedback(() => (ushort)(_rmc.SelectedSourceFeedback));
WallModes = new Dictionary<ushort, EndpointScalerOutput.eWall>()
{
{0, EndpointScalerOutput.eWall.Disabled},
{2211, EndpointScalerOutput.eWall.Mode11},
{2212, EndpointScalerOutput.eWall.Mode12},
{2221, EndpointScalerOutput.eWall.Mode13},
{2222, EndpointScalerOutput.eWall.Mode14}
};
} }
void InputStreamChangeEvent(EndpointInputStream inputStream, EndpointInputStreamEventArgs args) void InputStreamChangeEvent(EndpointInputStream inputStream, EndpointInputStreamEventArgs args)
@@ -241,5 +256,47 @@ namespace PepperDash.Essentials.DM
_rmc.HdmiIn.HdcpCapability = hdcpState; _rmc.HdmiIn.HdcpCapability = hdcpState;
} }
#region IhasWallMode Members
public void SetWallMode(ushort wallMode)
{
EndpointScalerOutput.eWall wallValue;
if (WallModes.TryGetValue(wallMode, out wallValue))
_rmc.Scaler.WallMode = wallValue;
}
#endregion
public void SetWallModeRaw(ushort wallMode)
{
_rmc.Scaler.WallModeRaw.UShortValue = wallMode;
}
void Scaler_OutputChange(EndpointScalerOutput scalerOutput, ScalerOutputEventArgs args)
{
if (scalerOutput == null)
{
Debug.Console(1, this, "Scaler Output object is null");
return;
}
if (args == null)
{
Debug.Console(1, this, "Scaler Output Args are null");
return;
}
Debug.Console(2, this, "Scaler Event ID: {0}", args.EventId);
switch (args.EventId)
{
case ScalerOutputEventIds.WallModeFeedbackEventId:
VideoWallModeRawFeedback.FireUpdate();
break;
default:
Debug.Console(2, this, "Scaler Default Unhandled Event ID: {0}", args.EventId);
break;
}
}
} }
} }

View File

@@ -28,6 +28,9 @@ namespace PepperDash.Essentials.DM
public StringFeedback EdidPreferredTimingFeedback { get; protected set; } public StringFeedback EdidPreferredTimingFeedback { get; protected set; }
public StringFeedback EdidSerialNumberFeedback { get; protected set; } public StringFeedback EdidSerialNumberFeedback { get; protected set; }
public IntFeedback VideoWallModeFeedback { get; protected set; }
public IntFeedback VideoWallModeRawFeedback { get; protected set; }
protected DmRmcControllerBase(string key, string name, EndpointReceiverBase device) protected DmRmcControllerBase(string key, string name, EndpointReceiverBase device)
: base(key, name, device) : base(key, name, device)
{ {
@@ -167,8 +170,23 @@ namespace PepperDash.Essentials.DM
trilist.SetUShortSigAction(joinMap.AudioVideoSource.JoinNumber, trilist.SetUShortSigAction(joinMap.AudioVideoSource.JoinNumber,
a => routingWithFeedback.ExecuteNumericSwitch(a, 1, eRoutingSignalType.AudioVideo)); a => routingWithFeedback.ExecuteNumericSwitch(a, 1, eRoutingSignalType.AudioVideo));
var dmRmcScalerWithVideowall = rmc as DmRmc4kZScalerCController;
if (dmRmcScalerWithVideowall != null)
{
trilist.SetUShortSigAction(joinMap.ScalerOutWallMode.JoinNumber, a => dmRmcScalerWithVideowall.SetWallMode(a));
trilist.SetUShortSigAction(joinMap.ScalerOutWallModeRaw.JoinNumber, a => dmRmcScalerWithVideowall.SetWallModeRaw(a));
if (rmc.VideoWallModeFeedback != null)
rmc.VideoWallModeFeedback.LinkInputSig(trilist.UShortInput[joinMap.ScalerOutWallMode.JoinNumber]);
if (rmc.VideoWallModeRawFeedback != null)
rmc.VideoWallModeRawFeedback.LinkInputSig(trilist.UShortInput[joinMap.ScalerOutWallModeRaw.JoinNumber]);
}
} }
#region Implementation of IDeviceInfoProvider #region Implementation of IDeviceInfoProvider
public DeviceInfo DeviceInfo { get; private set; } public DeviceInfo DeviceInfo { get; private set; }

View File

@@ -51,6 +51,7 @@ namespace PepperDash.Essentials.DM
InputPorts = new RoutingPortCollection<RoutingInputPort> {DmIn}; InputPorts = new RoutingPortCollection<RoutingInputPort> {DmIn};
OutputPorts = new RoutingPortCollection<RoutingOutputPort> {HdmiOut}; OutputPorts = new RoutingPortCollection<RoutingOutputPort> {HdmiOut};
// Set Ports for CEC // Set Ports for CEC
HdmiOut.Port = _rmc.HdmiOutput; HdmiOut.Port = _rmc.HdmiOutput;
} }

View File

@@ -59,7 +59,7 @@
<HintPath>..\..\..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SSPDevices\Crestron.SimplSharpPro.UI.dll</HintPath> <HintPath>..\..\..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SSPDevices\Crestron.SimplSharpPro.UI.dll</HintPath>
</Reference> </Reference>
<Reference Include="mscorlib" /> <Reference Include="mscorlib" />
<Reference Include="PepperDash_Core, Version=1.2.1.30543, Culture=neutral, processorArchitecture=MSIL"> <Reference Include="PepperDash_Core, Version=1.3.3.32940, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion> <SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\packages\PepperDashCore\lib\net35\PepperDash_Core.dll</HintPath> <HintPath>..\..\..\packages\PepperDashCore\lib\net35\PepperDash_Core.dll</HintPath>
</Reference> </Reference>

View File

@@ -1,3 +1,3 @@
<packages> <packages>
<package id="PepperDashCore" version="1.3.2" targetFramework="net35" allowedVersions="[1.0,2.0)"/> <package id="PepperDashCore" version="1.3.3-hotfix-390" targetFramework="net35" allowedVersions="[1.0,2.0)"/>
</packages> </packages>