mirror of
https://github.com/PepperDash/Essentials.git
synced 2026-02-06 08:16:11 +00:00
Compare commits
5 Commits
copilot/fi
...
JTA
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5a2b1f431f | ||
|
|
6253d4becf | ||
|
|
1bb9bfab70 | ||
|
|
6aae1c6613 | ||
|
|
72477a9a24 |
BIN
PepperDashEssentials/Bridges/._DspControllerBridge.cs
Normal file
BIN
PepperDashEssentials/Bridges/._DspControllerBridge.cs
Normal file
Binary file not shown.
BIN
PepperDashEssentials/Bridges/._EssentialDsp.cs
Normal file
BIN
PepperDashEssentials/Bridges/._EssentialDsp.cs
Normal file
Binary file not shown.
BIN
PepperDashEssentials/Bridges/._EssentialTVOne.cs
Normal file
BIN
PepperDashEssentials/Bridges/._EssentialTVOne.cs
Normal file
Binary file not shown.
@@ -16,6 +16,7 @@ using PepperDash.Essentials.Core.Config;
|
|||||||
using PepperDash.Essentials.Core.CrestronIO;
|
using PepperDash.Essentials.Core.CrestronIO;
|
||||||
using PepperDash.Essentials.DM;
|
using PepperDash.Essentials.DM;
|
||||||
using PepperDash.Essentials.Devices.Common.Cameras;
|
using PepperDash.Essentials.Devices.Common.Cameras;
|
||||||
|
using PepperDash.Essentials.Devices.Common.DSP;
|
||||||
|
|
||||||
namespace PepperDash.Essentials.Bridges
|
namespace PepperDash.Essentials.Bridges
|
||||||
{
|
{
|
||||||
@@ -134,6 +135,16 @@ namespace PepperDash.Essentials.Bridges
|
|||||||
(device as DigitalLogger).LinkToApi(Eisc, d.JoinStart, d.JoinMapKey);
|
(device as DigitalLogger).LinkToApi(Eisc, d.JoinStart, d.JoinMapKey);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
else if (device is TVOneCorio)
|
||||||
|
{
|
||||||
|
(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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -27,7 +27,8 @@ namespace PepperDash.Essentials.Bridges
|
|||||||
Debug.Console(0, "Linking to lighting Type {0}", lightingDevice.GetType().Name.ToString());
|
Debug.Console(0, "Linking to lighting Type {0}", lightingDevice.GetType().Name.ToString());
|
||||||
|
|
||||||
// GenericLighitng Actions & FeedBack
|
// GenericLighitng Actions & FeedBack
|
||||||
trilist.SetUShortSigAction(joinMap.SelectScene, u => lightingDevice.SelectScene(lightingDevice.LightingScenes[u]));
|
trilist.SetUShortSigAction(joinMap.SelectScene, u => {if(u > 0) { lightingDevice.SelectScene(lightingDevice.LightingScenes[u-1]);}});
|
||||||
|
|
||||||
|
|
||||||
int sceneIndex = 1;
|
int sceneIndex = 1;
|
||||||
foreach (var scene in lightingDevice.LightingScenes)
|
foreach (var scene in lightingDevice.LightingScenes)
|
||||||
|
|||||||
224
PepperDashEssentials/Bridges/QscDspBridge.cs
Normal file
224
PepperDashEssentials/Bridges/QscDspBridge.cs
Normal file
@@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
54
PepperDashEssentials/Bridges/TvOneBridge.cs
Normal file
54
PepperDashEssentials/Bridges/TvOneBridge.cs
Normal file
@@ -0,0 +1,54 @@
|
|||||||
|
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;
|
||||||
|
|
||||||
|
namespace PepperDash.Essentials.Bridges
|
||||||
|
{
|
||||||
|
public static class TvOneApiExtensions
|
||||||
|
{
|
||||||
|
public static void LinkToApi(this TVOneCorio TvOne, BasicTriList trilist, uint joinStart, string joinMapKey)
|
||||||
|
{
|
||||||
|
var joinMap = JoinMapHelper.GetJoinMapForDevice(joinMapKey) as TvOneJoinMap;
|
||||||
|
|
||||||
|
if (joinMap == null)
|
||||||
|
joinMap = new TvOneJoinMap();
|
||||||
|
|
||||||
|
joinMap.OffsetJoinNumbers(joinStart);
|
||||||
|
Debug.Console(1, TvOne, "Linking to Trilist '{0}'", trilist.ID.ToString("X"));
|
||||||
|
|
||||||
|
TvOne.OnlineFeedback.LinkInputSig(trilist.BooleanInput[joinMap.IsOnline]);
|
||||||
|
trilist.SetUShortSigAction(joinMap.CallPreset, u => TvOne.CallPreset(u));
|
||||||
|
TvOne.PresetFeedback.LinkInputSig(trilist.UShortInput[joinMap.PresetFeedback]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public class TvOneJoinMap : JoinMapBase
|
||||||
|
{
|
||||||
|
public uint CallPreset { get; set; }
|
||||||
|
public uint PresetFeedback { get; set; }
|
||||||
|
public uint IsOnline { get; set; }
|
||||||
|
public TvOneJoinMap()
|
||||||
|
{
|
||||||
|
// Digital
|
||||||
|
CallPreset = 1;
|
||||||
|
PresetFeedback = 1;
|
||||||
|
IsOnline = 1;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void OffsetJoinNumbers(uint joinStart)
|
||||||
|
{
|
||||||
|
var joinOffset = joinStart - 1;
|
||||||
|
|
||||||
|
IsOnline = IsOnline + joinOffset;
|
||||||
|
CallPreset = CallPreset + joinOffset;
|
||||||
|
PresetFeedback = PresetFeedback + joinOffset;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -117,6 +117,8 @@
|
|||||||
<Compile Include="Bridges\BridgeBase.cs" />
|
<Compile Include="Bridges\BridgeBase.cs" />
|
||||||
<Compile Include="Bridges\BridgeFactory.cs" />
|
<Compile Include="Bridges\BridgeFactory.cs" />
|
||||||
<Compile Include="Bridges\CameraControllerBridge.cs" />
|
<Compile Include="Bridges\CameraControllerBridge.cs" />
|
||||||
|
<Compile Include="Bridges\QscDspBridge.cs" />
|
||||||
|
<Compile Include="Bridges\TvOneBridge.cs" />
|
||||||
<Compile Include="Bridges\DisplayControllerBridge.cs" />
|
<Compile Include="Bridges\DisplayControllerBridge.cs" />
|
||||||
<Compile Include="Bridges\DigitalLoggerBridge.cs" />
|
<Compile Include="Bridges\DigitalLoggerBridge.cs" />
|
||||||
<Compile Include="Bridges\DmChassisControllerBridge.cs" />
|
<Compile Include="Bridges\DmChassisControllerBridge.cs" />
|
||||||
|
|||||||
Submodule essentials-framework updated: 4cfd0abff1...f3c18df713
Reference in New Issue
Block a user