Merge pull request #471 from PepperDash/hotfix/DMPS-Routing-issues

Fix DMPS Routing Issues for 4K DMPS units
This commit is contained in:
Neil Dorin
2020-11-11 12:02:34 -07:00
committed by GitHub

View File

@@ -351,10 +351,19 @@ namespace PepperDash.Essentials.DM
; ;
}); });
AudioOutputFeedbacks[outputCard.Number] = new IntFeedback(() => AudioOutputFeedbacks[outputCard.Number] = new IntFeedback(() =>
{ {
if (outputCard.AudioOutFeedback != null) { return (ushort)outputCard.AudioOutFeedback.Number; } try
return 0; {
; if (outputCard.AudioOutFeedback != null)
{
return (ushort) outputCard.AudioOutFeedback.Number;
}
return 0;
}
catch (NotSupportedException)
{
return (ushort) outputCard.AudioOutSourceFeedback;
}
}); });
OutputNameFeedbacks[outputCard.Number] = new StringFeedback(() => OutputNameFeedbacks[outputCard.Number] = new StringFeedback(() =>
@@ -753,15 +762,31 @@ namespace PepperDash.Essentials.DM
} }
} }
else if (args.EventId == DMOutputEventIds.AudioOutEventId) else if (args.EventId == DMOutputEventIds.AudioOutEventId)
{ {
if (outputCard != null && outputCard.AudioOutFeedback != null) try
{ {
Debug.Console(2, this, "DMSwitchAudio:{0} Routed Input:{1} Output:{2}'", this.Name, outputCard.AudioOutFeedback.Number, output); if (outputCard != null && outputCard.AudioOutFeedback != null)
} {
if (AudioOutputFeedbacks.ContainsKey(output)) Debug.Console(2, this, "DMSwitchAudio:{0} Routed Input:{1} Output:{2}'", this.Name,
{ outputCard.AudioOutFeedback.Number, output);
AudioOutputFeedbacks[output].FireUpdate(); }
} if (AudioOutputFeedbacks.ContainsKey(output))
{
AudioOutputFeedbacks[output].FireUpdate();
}
}
catch (NotSupportedException)
{
if (outputCard != null)
{
Debug.Console(2, this, "DMSwitchAudio:{0} Routed Input:{1} Output:{2}'", Name,
outputCard.AudioOutSourceFeedback, output);
}
if (AudioOutputFeedbacks.ContainsKey(output))
{
AudioOutputFeedbacks[output].FireUpdate();
}
}
} }
else if (args.EventId == DMOutputEventIds.OutputNameEventId else if (args.EventId == DMOutputEventIds.OutputNameEventId
&& OutputNameFeedbacks.ContainsKey(output)) && OutputNameFeedbacks.ContainsKey(output))
@@ -793,68 +818,94 @@ namespace PepperDash.Essentials.DM
Debug.Console(2, this, "Attempting a DM route from input {0} to output {1} {2}", inputSelector, outputSelector, sigType); Debug.Console(2, this, "Attempting a DM route from input {0} to output {1} {2}", inputSelector, outputSelector, sigType);
var input = Convert.ToUInt32(inputSelector); // Cast can sometimes fail var input = Convert.ToUInt32(inputSelector); // Cast can sometimes fail
var output = Convert.ToUInt32(outputSelector); var output = Convert.ToUInt32(outputSelector);
if (input <= Dmps.NumberOfSwitcherInputs && output <= Dmps.NumberOfSwitcherOutputs) var sigTypeIsUsbOrVideo = ((sigType & eRoutingSignalType.Video) == eRoutingSignalType.Video) ||
{ ((sigType & eRoutingSignalType.UsbInput) == eRoutingSignalType.UsbInput) ||
// Check to see if there's an off timer waiting on this and if so, cancel ((sigType & eRoutingSignalType.UsbOutput) == eRoutingSignalType.UsbOutput);
var key = new PortNumberType(output, sigType);
if (input == 0) if ((input <= Dmps.NumberOfSwitcherInputs && output <= Dmps.NumberOfSwitcherOutputs &&
{ sigTypeIsUsbOrVideo) ||
StartOffTimer(key); (input <= Dmps.NumberOfSwitcherInputs + 5 && output <= Dmps.NumberOfSwitcherOutputs &&
} (sigType & eRoutingSignalType.Audio) == eRoutingSignalType.Audio))
else if (key.Number > 0) {
{ // Check to see if there's an off timer waiting on this and if so, cancel
if (RouteOffTimers.ContainsKey(key)) var key = new PortNumberType(output, sigType);
{ if (input == 0)
Debug.Console(2, this, "{0} cancelling route off due to new source", output); {
RouteOffTimers[key].Stop(); StartOffTimer(key);
RouteOffTimers.Remove(key); }
} else if (key.Number > 0)
} {
if (RouteOffTimers.ContainsKey(key))
DMInput inCard = input == 0 ? null : Dmps.SwitcherInputs[input] as DMInput; {
DMOutput outCard = output == 0 ? null : Dmps.SwitcherOutputs[output] as DMOutput; Debug.Console(2, this, "{0} cancelling route off due to new source", output);
RouteOffTimers[key].Stop();
//if (inCard != null) RouteOffTimers.Remove(key);
//{ }
// NOTE THAT BITWISE COMPARISONS - TO CATCH ALL ROUTING TYPES }
if ((sigType | eRoutingSignalType.Video) == eRoutingSignalType.Video)
{
DMOutput dmOutputCard = output == 0 ? null : Dmps.SwitcherOutputs[output] as DMOutput;
//SystemControl.VideoEnter.BoolValue = true;
if (outCard != null) //if (inCard != null)
outCard.VideoOut = inCard; //{
} // NOTE THAT BITWISE COMPARISONS - TO CATCH ALL ROUTING TYPES
if ((sigType & eRoutingSignalType.Video) == eRoutingSignalType.Video)
if ((sigType | eRoutingSignalType.Audio) == eRoutingSignalType.Audio) {
{ DMInput dmInputCard = input == 0 ? null : Dmps.SwitcherInputs[input] as DMInput;
if (outCard != null) //SystemControl.VideoEnter.BoolValue = true;
outCard.AudioOut = inCard; if (dmOutputCard != null)
} dmOutputCard.VideoOut = dmInputCard;
}
if ((sigType | eRoutingSignalType.UsbOutput) == eRoutingSignalType.UsbOutput)
{ if ((sigType & eRoutingSignalType.Audio) == eRoutingSignalType.Audio)
if (outCard != null) {
outCard.USBRoutedTo = inCard; DMInput dmInputCard = null;
} if (input <= Dmps.NumberOfSwitcherInputs)
{
if ((sigType | eRoutingSignalType.UsbInput) == eRoutingSignalType.UsbInput) dmInputCard = input == 0 ? null : Dmps.SwitcherInputs[input] as DMInput;
{ }
if (inCard != null)
inCard.USBRoutedTo = outCard; if (dmOutputCard != null)
} try
//} {
//else dmOutputCard.AudioOut = dmInputCard;
//{ }
// Debug.Console(1, this, "Unable to execute route from input {0} to output {1}. Input card not available", inputSelector, outputSelector); catch (NotSupportedException)
//} {
Debug.Console(1, this, "Routing input {0} audio to output {1}",
} (eDmps34KAudioOutSource) input, (CrestronControlSystem.eDmps34K350COutputs) output);
else
{ dmOutputCard.AudioOutSource = (eDmps34KAudioOutSource) input;
Debug.Console(1, this, "Unable to execute route from input {0} to output {1}", inputSelector, outputSelector); }
} }
if ((sigType & eRoutingSignalType.UsbOutput) == eRoutingSignalType.UsbOutput)
{
DMInput dmInputCard = input == 0 ? null : Dmps.SwitcherInputs[input] as DMInput;
if (dmOutputCard != null)
dmOutputCard.USBRoutedTo = dmInputCard;
}
if ((sigType & eRoutingSignalType.UsbInput) == eRoutingSignalType.UsbInput)
{
DMInput dmInputCard = input == 0 ? null : Dmps.SwitcherInputs[input] as DMInput;
if (dmInputCard != null)
dmInputCard.USBRoutedTo = dmOutputCard;
}
//}
//else
//{
// Debug.Console(1, this, "Unable to execute route from input {0} to output {1}. Input card not available", inputSelector, outputSelector);
//}
}
else
{
Debug.Console(1, this, "Unable to execute route from input {0} to output {1}", inputSelector,
outputSelector);
}
} }
catch (Exception e) catch (Exception e)
{ {