diff --git a/PepperDashEssentials/Bridges/._DspControllerBridge.cs b/PepperDashEssentials/Bridges/._DspControllerBridge.cs
new file mode 100644
index 00000000..8b0df0af
Binary files /dev/null and b/PepperDashEssentials/Bridges/._DspControllerBridge.cs differ
diff --git a/PepperDashEssentials/Bridges/._EssentialDsp.cs b/PepperDashEssentials/Bridges/._EssentialDsp.cs
new file mode 100644
index 00000000..8cb32b62
Binary files /dev/null and b/PepperDashEssentials/Bridges/._EssentialDsp.cs differ
diff --git a/PepperDashEssentials/Bridges/BridgeBase.cs b/PepperDashEssentials/Bridges/BridgeBase.cs
index 47a70366..729b035e 100644
--- a/PepperDashEssentials/Bridges/BridgeBase.cs
+++ b/PepperDashEssentials/Bridges/BridgeBase.cs
@@ -16,6 +16,7 @@ using PepperDash.Essentials.Core.Config;
using PepperDash.Essentials.Core.CrestronIO;
using PepperDash.Essentials.DM;
using PepperDash.Essentials.Devices.Common.Cameras;
+using PepperDash.Essentials.Devices.Common.DSP;
namespace PepperDash.Essentials.Bridges
{
@@ -139,6 +140,11 @@ namespace PepperDash.Essentials.Bridges
(device as TVOneCorio).LinkToApi(Eisc, d.JoinStart, d.JoinMapKey);
continue;
}
+ else if (device is QscDsp)
+ {
+ (device as QscDsp).LinkToApi(Eisc, d.JoinStart, d.JoinMapKey);
+ continue;
+ }
}
}
diff --git a/PepperDashEssentials/Bridges/QscDspBridge.cs b/PepperDashEssentials/Bridges/QscDspBridge.cs
new file mode 100644
index 00000000..b7610858
--- /dev/null
+++ b/PepperDashEssentials/Bridges/QscDspBridge.cs
@@ -0,0 +1,224 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using Crestron.SimplSharp;
+using Crestron.SimplSharpPro.DeviceSupport;
+using PepperDash.Core;
+using PepperDash.Essentials.Core;
+using PepperDash.Essentials.Devices.Common;
+using PepperDash.Essentials.Devices.Common.DSP;
+
+namespace PepperDash.Essentials.Bridges
+{
+ public static class QscDspDeviceApiExtensions
+ {
+ public static void LinkToApi(this QscDsp DspDevice, BasicTriList trilist, uint joinStart, string joinMapKey)
+ {
+ var joinMap = JoinMapHelper.GetJoinMapForDevice(joinMapKey) as QscDspDeviceJoinMap;
+
+ if (joinMap == null)
+ joinMap = new QscDspDeviceJoinMap();
+
+ joinMap.OffsetJoinNumbers(joinStart);
+ Debug.Console(1, DspDevice, "Linking to Trilist '{0}'", trilist.ID.ToString("X"));
+ ushort x = 1;
+ var comm = DspDevice as ICommunicationMonitor;
+ DspDevice.CommunicationMonitor.IsOnlineFeedback.LinkInputSig(trilist.BooleanInput[joinMap.IsOnline]);
+ foreach (var channel in DspDevice.LevelControlPoints)
+ {
+ //var QscChannel = channel.Value as PepperDash.Essentials.Devices.Common.DSP.QscDspLevelControl;
+ Debug.Console(2, "QscChannel {0} connect", x);
+
+ var genericChannel = channel.Value as IBasicVolumeWithFeedback;
+ if (channel.Value.Enabled)
+ {
+ trilist.StringInput[joinMap.ChannelName + x].StringValue = channel.Value.LevelCustomName;
+ trilist.UShortInput[joinMap.ChannelType + x].UShortValue = (ushort)channel.Value.Type;
+
+ genericChannel.MuteFeedback.LinkInputSig(trilist.BooleanInput[joinMap.ChannelMuteToggle + x]);
+ genericChannel.VolumeLevelFeedback.LinkInputSig(trilist.UShortInput[joinMap.ChannelVolume + x]);
+
+ trilist.SetSigTrueAction(joinMap.ChannelMuteToggle + x, () => genericChannel.MuteToggle());
+ trilist.SetSigTrueAction(joinMap.ChannelMuteOn + x, () => genericChannel.MuteOn());
+ trilist.SetSigTrueAction(joinMap.ChannelMuteOff + x, () => genericChannel.MuteOff());
+
+ trilist.SetBoolSigAction(joinMap.ChannelVolumeUp + x, b => genericChannel.VolumeUp(b));
+ trilist.SetBoolSigAction(joinMap.ChannelVolumeDown + x, b => genericChannel.VolumeDown(b));
+
+ trilist.SetUShortSigAction(joinMap.ChannelVolume + x, u => genericChannel.SetVolume(u));
+
+ }
+ x++;
+ }
+ x = 1;
+ trilist.SetStringSigAction(joinMap.PresetStringCmd, s => DspDevice.RunPreset(s));
+ foreach (var preset in DspDevice.PresetList)
+ {
+ trilist.StringInput[joinMap.Presets + x].StringValue = preset.label;
+ trilist.SetSigTrueAction(joinMap.Presets + x, () => DspDevice.RunPresetNumber(x));
+ x++;
+ }
+ foreach (var dialer in DspDevice.Dialers)
+ {
+ trilist.SetSigTrueAction(joinMap.Keypad0, () => dialer.Value.SendKeypad(PepperDash.Essentials.Devices.Common.DSP.QscDspDialer.eKeypadKeys.Num0));
+ trilist.SetSigTrueAction(joinMap.Keypad1, () => dialer.Value.SendKeypad(PepperDash.Essentials.Devices.Common.DSP.QscDspDialer.eKeypadKeys.Num1));
+ trilist.SetSigTrueAction(joinMap.Keypad2, () => dialer.Value.SendKeypad(PepperDash.Essentials.Devices.Common.DSP.QscDspDialer.eKeypadKeys.Num2));
+ trilist.SetSigTrueAction(joinMap.Keypad3, () => dialer.Value.SendKeypad(PepperDash.Essentials.Devices.Common.DSP.QscDspDialer.eKeypadKeys.Num3));
+ trilist.SetSigTrueAction(joinMap.Keypad4, () => dialer.Value.SendKeypad(PepperDash.Essentials.Devices.Common.DSP.QscDspDialer.eKeypadKeys.Num4));
+ trilist.SetSigTrueAction(joinMap.Keypad5, () => dialer.Value.SendKeypad(PepperDash.Essentials.Devices.Common.DSP.QscDspDialer.eKeypadKeys.Num5));
+ trilist.SetSigTrueAction(joinMap.Keypad6, () => dialer.Value.SendKeypad(PepperDash.Essentials.Devices.Common.DSP.QscDspDialer.eKeypadKeys.Num6));
+ trilist.SetSigTrueAction(joinMap.Keypad7, () => dialer.Value.SendKeypad(PepperDash.Essentials.Devices.Common.DSP.QscDspDialer.eKeypadKeys.Num7));
+ trilist.SetSigTrueAction(joinMap.Keypad8, () => dialer.Value.SendKeypad(PepperDash.Essentials.Devices.Common.DSP.QscDspDialer.eKeypadKeys.Num8));
+ trilist.SetSigTrueAction(joinMap.Keypad9, () => dialer.Value.SendKeypad(PepperDash.Essentials.Devices.Common.DSP.QscDspDialer.eKeypadKeys.Num9));
+ trilist.SetSigTrueAction(joinMap.KeypadStar, () => dialer.Value.SendKeypad(PepperDash.Essentials.Devices.Common.DSP.QscDspDialer.eKeypadKeys.Star));
+ trilist.SetSigTrueAction(joinMap.KeypadPound, () => dialer.Value.SendKeypad(PepperDash.Essentials.Devices.Common.DSP.QscDspDialer.eKeypadKeys.Pound));
+ trilist.SetSigTrueAction(joinMap.KeypadClear, () => dialer.Value.SendKeypad(PepperDash.Essentials.Devices.Common.DSP.QscDspDialer.eKeypadKeys.Clear));
+ trilist.SetSigTrueAction(joinMap.KeypadBackspace, () => dialer.Value.SendKeypad(PepperDash.Essentials.Devices.Common.DSP.QscDspDialer.eKeypadKeys.Backspace));
+
+ trilist.SetSigTrueAction(joinMap.Dial, () => dialer.Value.Dial());
+ trilist.SetSigTrueAction(joinMap.DoNotDisturbToggle, () => dialer.Value.DoNotDisturbToggle());
+ trilist.SetSigTrueAction(joinMap.DoNotDisturbOn, () => dialer.Value.DoNotDisturbOn());
+ trilist.SetSigTrueAction(joinMap.DoNotDisturbOff, () => dialer.Value.DoNotDisturbOff());
+ trilist.SetSigTrueAction(joinMap.AutoAnswerToggle, () => dialer.Value.AutoAnswerToggle());
+ trilist.SetSigTrueAction(joinMap.AutoAnswerOn, () => dialer.Value.AutoAnswerOn());
+ trilist.SetSigTrueAction(joinMap.AutoAnswerOff, () => dialer.Value.AutoAnswerOff());
+
+ dialer.Value.DoNotDisturbFeedback.LinkInputSig(trilist.BooleanInput[joinMap.DoNotDisturbToggle]);
+ dialer.Value.DoNotDisturbFeedback.LinkInputSig(trilist.BooleanInput[joinMap.DoNotDisturbOn]);
+ dialer.Value.DoNotDisturbFeedback.LinkComplementInputSig(trilist.BooleanInput[joinMap.DoNotDisturbOff]);
+
+ dialer.Value.AutoAnswerFeedback.LinkInputSig(trilist.BooleanInput[joinMap.AutoAnswerToggle]);
+ dialer.Value.AutoAnswerFeedback.LinkInputSig(trilist.BooleanInput[joinMap.AutoAnswerOn]);
+ dialer.Value.AutoAnswerFeedback.LinkComplementInputSig(trilist.BooleanInput[joinMap.AutoAnswerOff]);
+
+ dialer.Value.OffHookFeedback.LinkInputSig(trilist.BooleanInput[joinMap.Dial]);
+ dialer.Value.DialStringFeedback.LinkInputSig(trilist.StringInput[joinMap.DialStringCmd]);
+ }
+
+
+
+ }
+ }
+ public class QscDspDeviceJoinMap : JoinMapBase
+ {
+ public uint IsOnline { get; set; }
+ public uint PresetStringCmd { get; set; }
+ public uint ChannelMuteToggle { get; set; }
+ public uint ChannelMuteOn { get; set; }
+ public uint ChannelMuteOff { get; set; }
+ public uint ChannelVolume { get; set; }
+ public uint ChannelType { get; set; }
+ public uint ChannelName { get; set; }
+ public uint ChannelVolumeUp { get; set; }
+ public uint ChannelVolumeDown { get; set; }
+ public uint Presets { get; set; }
+ public uint DialStringCmd { get; set; }
+ public uint Keypad0 { get; set; }
+ public uint Keypad1 { get; set; }
+ public uint Keypad2 { get; set; }
+ public uint Keypad3 { get; set; }
+ public uint Keypad4 { get; set; }
+ public uint Keypad5 { get; set; }
+ public uint Keypad6 { get; set; }
+ public uint Keypad7 { get; set; }
+ public uint Keypad8 { get; set; }
+ public uint Keypad9 { get; set; }
+ public uint KeypadStar { get; set; }
+ public uint KeypadPound { get; set; }
+ public uint KeypadClear { get; set; }
+ public uint KeypadBackspace { get; set; }
+ public uint Dial { get; set; }
+ public uint DoNotDisturbToggle { get; set; }
+ public uint DoNotDisturbOn { get; set; }
+ public uint DoNotDisturbOff { get; set; }
+ public uint AutoAnswerToggle { get; set; }
+ public uint AutoAnswerOn { get; set; }
+ public uint AutoAnswerOff { get; set; }
+
+ public uint CallPreset { get; set; }
+ public uint PresetFeedback { get; set; }
+
+ public QscDspDeviceJoinMap()
+ {
+ // Arrays
+ ChannelName = 200;
+ ChannelMuteToggle = 400;
+ ChannelMuteOn = 600;
+ ChannelMuteOff = 800;
+ ChannelVolume = 200;
+ ChannelVolumeUp = 1000;
+ ChannelVolumeDown = 1200;
+ ChannelType = 400;
+ Presets = 100;
+
+ // SIngleJoins
+ IsOnline = 1;
+ PresetStringCmd = 2000;
+ DialStringCmd = 3100;
+ Keypad0 = 3110;
+ Keypad1 = 3111;
+ Keypad2 = 3112;
+ Keypad3 = 3113;
+ Keypad4 = 3114;
+ Keypad5 = 3115;
+ Keypad6 = 3116;
+ Keypad7 = 3117;
+ Keypad8 = 3118;
+ Keypad9 = 3119;
+ KeypadStar = 3120;
+ KeypadPound = 3121;
+ KeypadClear = 3122;
+ KeypadBackspace = 3123;
+ DoNotDisturbToggle = 3132;
+ DoNotDisturbOn = 3133;
+ DoNotDisturbOff = 3134;
+ AutoAnswerToggle = 3127;
+ AutoAnswerOn = 3125;
+ AutoAnswerOff = 3126;
+ Dial = 3124;
+
+
+ }
+
+ public override void OffsetJoinNumbers(uint joinStart)
+ {
+ var joinOffset = joinStart - 1;
+ ChannelName = ChannelName + joinOffset;
+ ChannelMuteToggle = ChannelMuteToggle + joinOffset;
+ ChannelMuteOn = ChannelMuteOn + joinOffset;
+ ChannelMuteOff = ChannelMuteOff + joinOffset;
+ ChannelVolume = ChannelVolume + joinOffset;
+ ChannelVolumeUp = ChannelVolumeUp + joinOffset;
+ ChannelVolumeDown = ChannelVolumeDown + joinOffset;
+ ChannelType = ChannelType + joinOffset;
+ Presets = Presets + joinOffset;
+
+ IsOnline = IsOnline + joinOffset;
+ PresetStringCmd = PresetStringCmd + joinOffset;
+ DialStringCmd = DialStringCmd + joinOffset;
+ Keypad0 = Keypad0 + joinOffset;
+ Keypad1 = Keypad1 + joinOffset;
+ Keypad2 = Keypad2 + joinOffset;
+ Keypad3 = Keypad3 + joinOffset;
+ Keypad4 = Keypad4 + joinOffset;
+ Keypad5 = Keypad5 + joinOffset;
+ Keypad6 = Keypad6 + joinOffset;
+ Keypad7 = Keypad7 + joinOffset;
+ Keypad8 = Keypad8 + joinOffset;
+ Keypad9 = Keypad9 + joinOffset;
+ KeypadStar = KeypadStar + joinOffset;
+ KeypadPound = KeypadPound + joinOffset;
+ KeypadClear = KeypadClear + joinOffset;
+ KeypadBackspace = KeypadBackspace + joinOffset;
+ DoNotDisturbToggle = DoNotDisturbToggle + joinOffset;
+ DoNotDisturbOn = DoNotDisturbOn + joinOffset;
+ DoNotDisturbOff = DoNotDisturbOff + joinOffset;
+ AutoAnswerToggle = AutoAnswerToggle + joinOffset;
+ AutoAnswerOn = AutoAnswerOn + joinOffset;
+ AutoAnswerOff = AutoAnswerOff + joinOffset;
+ Dial = Dial + joinOffset;
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/PepperDashEssentials/PepperDashEssentials.csproj b/PepperDashEssentials/PepperDashEssentials.csproj
index 24f209e9..a7884035 100644
--- a/PepperDashEssentials/PepperDashEssentials.csproj
+++ b/PepperDashEssentials/PepperDashEssentials.csproj
@@ -117,6 +117,7 @@
+