From aeb53b97d9334c70fca15237e614f2b43e2b5d04 Mon Sep 17 00:00:00 2001 From: BlueFinBima Date: Fri, 8 Aug 2025 09:51:05 +0100 Subject: [PATCH 01/10] Fix for #883 In addition to resolving this, I've moved the code into Helios.Controls (leaving a stub in DH98Mosquito for backwards compatibility). The toolbox Locking Three Way Toggle Switch is now a Helios.Base.LockingThreeWayToggleSwitch instead of Helios.DH98Mosquito.LockingThreeWayToggleSwitch which was the case in 1.6.6150.2. The consequence of this is that if someone with a dev build of Helios pulls out a Locking Three Way Toggle Switch from the toolbox, then it will not be available to users running 1.6.6150.2 and will potentially case an exception during profile load. If you're editing an existing control in a profile from 1.6.6150.2, then you'll be ok If you need to create a new Locking Three Way Toggle Switch, add it from the toolbox using Helios 1.6.6150.2, save the profile, then edit the control in the Dev Build --- .../Controls/LockingThreeWayToggleSwitch.cs | 156 +-------------- ...reeWayToggleSwitchAppearanceEditor.xaml.cs | 3 + ...ThreeWayToggleSwitchBehaviorEditor.xaml.cs | 3 + .../Controls/ThreeWayToggleSwitchLocking.cs | 185 ++++++++++++++++++ Helios/Helios.csproj | 1 + 5 files changed, 197 insertions(+), 151 deletions(-) create mode 100644 Helios/Controls/ThreeWayToggleSwitchLocking.cs diff --git a/Aircraft Mosquito Plugin/Controls/LockingThreeWayToggleSwitch.cs b/Aircraft Mosquito Plugin/Controls/LockingThreeWayToggleSwitch.cs index 8d604a5a9..6f345ed92 100644 --- a/Aircraft Mosquito Plugin/Controls/LockingThreeWayToggleSwitch.cs +++ b/Aircraft Mosquito Plugin/Controls/LockingThreeWayToggleSwitch.cs @@ -18,169 +18,23 @@ namespace GadrocsWorkshop.Helios.Controls.DH98Mosquito { using GadrocsWorkshop.Helios.Controls; using GadrocsWorkshop.Helios.ComponentModel; - using GadrocsWorkshop.Helios.Controls.Capabilities; - using System; - using System.Xml; - using static GadrocsWorkshop.Helios.Interfaces.DCS.Common.NetworkTriggerValue; - [HeliosControl("Helios.DH98Mosquito.LockingThreeWayToggleSwitch", "Locking Three Way Toggle Switches", "Three Way Toggle Switches", typeof(ThreeWayToggleSwitchRenderer), HeliosControlFlags.None)] - public class LockingThreeWayToggleSwitch : ThreeWayToggleSwitch + [HeliosControl("Helios.DH98Mosquito.LockingThreeWayToggleSwitch", "Locking Three Way Toggle Switches", "Three Way Toggle Switches", typeof(ThreeWayToggleSwitchRenderer), HeliosControlFlags.NotShownInUI)] + public class LockingThreeWayToggleSwitch : Controls.ThreeWayToggleSwitchLocking { - private HeliosValue _positionOneLockValue; - private HeliosValue _positionTwoLockValue; - private HeliosValue _positionThreeLockValue; - - private bool _positionOneLocked = false; - private bool _positionTwoLocked = false; - private bool _positionThreeLocked = false; - public LockingThreeWayToggleSwitch() : this("Locking Three Way Toggle Switch", new System.Windows.Size(50, 100)) {} - public LockingThreeWayToggleSwitch(string name, System.Windows.Size size) - : base(name, size) - { - _positionOneLockValue = new HeliosValue(this, BindingValue.Empty, "", "position one lock", "Lock Position 1.", "True / False", BindingValueUnits.Boolean); - _positionOneLockValue.Execute += PositionOneLock_Execute; - Values.Add(_positionOneLockValue); - Actions.Add(_positionOneLockValue); - _positionTwoLockValue = new HeliosValue(this, BindingValue.Empty, "", "position two lock", "Lock Position 2.", "True / False", BindingValueUnits.Boolean); - _positionTwoLockValue.Execute += PositionTwoLock_Execute; - Values.Add(_positionTwoLockValue); - Actions.Add(_positionTwoLockValue); - _positionThreeLockValue = new HeliosValue(this, BindingValue.Empty, "", "position three lock", "Lock Position 3.", "True / False", BindingValueUnits.Boolean); - _positionThreeLockValue.Execute += PositionThreeLock_Execute; - Values.Add(_positionThreeLockValue); - Actions.Add(_positionThreeLockValue); - - } + // Retained for Backwards Compatibility following move of this control to Helios.Controls + public LockingThreeWayToggleSwitch() : base("Locking Three Way Toggle Switch", new System.Windows.Size(50, 100)) { } + public LockingThreeWayToggleSwitch(string name, System.Windows.Size size) : base(name, size) { } #region Properties #endregion - void PositionOneLock_Execute(object action, HeliosActionEventArgs e) - { - _positionOneLocked = e.Value.BoolValue; - } - void PositionTwoLock_Execute(object action, HeliosActionEventArgs e) - { - _positionTwoLocked = e.Value.BoolValue; - } - void PositionThreeLock_Execute(object action, HeliosActionEventArgs e) - { - _positionThreeLocked = e.Value.BoolValue; - } #region HeliosControl Implementation - public override void Reset() - { - base.Reset(); - - BeginTriggerBypass(true); - SwitchPosition = DefaultPosition; - EndTriggerBypass(true); - } - - protected override void ThrowSwitch(ToggleSwitchBase.SwitchAction action) - { - if (action == SwitchAction.Increment) - { - switch (SwitchPosition) - { - case ThreeWayToggleSwitchPosition.One: - if (!_positionTwoLocked) - { - SwitchPosition = ThreeWayToggleSwitchPosition.Two; - } - break; - case ThreeWayToggleSwitchPosition.Two: - if (!_positionThreeLocked) - { - SwitchPosition = ThreeWayToggleSwitchPosition.Three; - } - break; - } - } - else if (action == SwitchAction.Decrement) - { - switch (SwitchPosition) - { - case ThreeWayToggleSwitchPosition.Two: - if (!_positionOneLocked) - { - SwitchPosition = ThreeWayToggleSwitchPosition.One; - } - break; - case ThreeWayToggleSwitchPosition.Three: - if (!_positionTwoLocked) - { - SwitchPosition = ThreeWayToggleSwitchPosition.Two; - } - break; - } - } - } - - public override void MouseUp(System.Windows.Point location) - { - base.MouseUp(location); - - switch (SwitchPosition) - { - case ThreeWayToggleSwitchPosition.One: - if (SwitchType == ThreeWayToggleSwitchType.MomOnMom || SwitchType == ThreeWayToggleSwitchType.MomOnOn) - { - if (!_positionTwoLocked) - { - SwitchPosition = ThreeWayToggleSwitchPosition.Two; - } - } - break; - case ThreeWayToggleSwitchPosition.Three: - if (SwitchType == ThreeWayToggleSwitchType.OnOnMom || SwitchType == ThreeWayToggleSwitchType.MomOnMom) - { - if (!_positionTwoLocked) - { - SwitchPosition = ThreeWayToggleSwitchPosition.Two; - } - } - break; - } - } - - public override void WriteXml(XmlWriter writer) - { - base.WriteXml(writer); - } - - public override void ReadXml(XmlReader reader) - { - base.ReadXml(reader); - } - #endregion #region Actions - - void SetPositionAction_Execute(object action, HeliosActionEventArgs e) - { - try - { - BeginTriggerBypass(e.BypassCascadingTriggers); - int newPosition = 0; - if (int.TryParse(e.Value.StringValue, out newPosition)) - { - if (newPosition > 0 && newPosition <= 3) - { - SwitchPosition = (ThreeWayToggleSwitchPosition)newPosition; - } - } - EndTriggerBypass(e.BypassCascadingTriggers); - } - catch - { - // No-op if the parse fails we won't set the position. - } - } - #endregion } } diff --git a/Helios/Controls/ThreeWayToggleSwitchAppearanceEditor.xaml.cs b/Helios/Controls/ThreeWayToggleSwitchAppearanceEditor.xaml.cs index f7b2d2d9e..6f924ec20 100644 --- a/Helios/Controls/ThreeWayToggleSwitchAppearanceEditor.xaml.cs +++ b/Helios/Controls/ThreeWayToggleSwitchAppearanceEditor.xaml.cs @@ -22,6 +22,9 @@ namespace GadrocsWorkshop.Helios.Controls /// Interaction logic for ToggleSwitchAppearanceEditor.xaml /// [HeliosPropertyEditor("Helios.Base.ThreeWayToggleSwitch", "Appearance")] + [HeliosPropertyEditor("Helios.Base.LockingThreeWayToggleSwitch", "Appearance")] + [HeliosPropertyEditor("Helios.DH98Mosquito.LockingThreeWayToggleSwitch", "Appearance")] + public partial class ThreeWayToggleSwitchAppearanceEditor : HeliosPropertyEditor { public ThreeWayToggleSwitchAppearanceEditor() diff --git a/Helios/Controls/ThreeWayToggleSwitchBehaviorEditor.xaml.cs b/Helios/Controls/ThreeWayToggleSwitchBehaviorEditor.xaml.cs index 0219860f2..f8a0c85af 100644 --- a/Helios/Controls/ThreeWayToggleSwitchBehaviorEditor.xaml.cs +++ b/Helios/Controls/ThreeWayToggleSwitchBehaviorEditor.xaml.cs @@ -23,6 +23,9 @@ namespace GadrocsWorkshop.Helios.Controls /// [HeliosPropertyEditor("Helios.Base.ThreeWayToggleSwitch", "Behavior")] [HeliosPropertyEditor("Helios.Base.RockerSwitch", "Behavior")] + [HeliosPropertyEditor("Helios.Base.LockingThreeWayToggleSwitch", "Behavior")] + [HeliosPropertyEditor("Helios.DH98Mosquito.LockingThreeWayToggleSwitch", "Behavior")] + public partial class ThreeWayToggleSwitchBehaviorEditor : HeliosPropertyEditor { public ThreeWayToggleSwitchBehaviorEditor() diff --git a/Helios/Controls/ThreeWayToggleSwitchLocking.cs b/Helios/Controls/ThreeWayToggleSwitchLocking.cs new file mode 100644 index 000000000..d9eccf7a8 --- /dev/null +++ b/Helios/Controls/ThreeWayToggleSwitchLocking.cs @@ -0,0 +1,185 @@ +// Copyright 2014 Craig Courtney +// Copyright 2025 Helios Contributors +// +// Helios is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Helios is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +namespace GadrocsWorkshop.Helios.Controls +{ + using GadrocsWorkshop.Helios.Controls; + using GadrocsWorkshop.Helios.ComponentModel; + using GadrocsWorkshop.Helios.Controls.Capabilities; + using System; + using System.Xml; + + [HeliosControl("Helios.Base.LockingThreeWayToggleSwitch", "Locking Three Way Toggle Switches", "Three Way Toggle Switches", typeof(ThreeWayToggleSwitchRenderer), HeliosControlFlags.None)] + public class ThreeWayToggleSwitchLocking : ThreeWayToggleSwitch + { + private HeliosValue _positionOneLockValue; + private HeliosValue _positionTwoLockValue; + private HeliosValue _positionThreeLockValue; + + private bool _positionOneLocked = false; + private bool _positionTwoLocked = false; + private bool _positionThreeLocked = false; + public ThreeWayToggleSwitchLocking() : this("Locking Three Way Toggle Switch", new System.Windows.Size(50, 100)) {} + public ThreeWayToggleSwitchLocking(string name, System.Windows.Size size) + : base(name, size) + { + _positionOneLockValue = new HeliosValue(this, BindingValue.Empty, "", "position one lock", "Lock Position 1.", "True / False", BindingValueUnits.Boolean); + _positionOneLockValue.Execute += PositionOneLock_Execute; + Values.Add(_positionOneLockValue); + Actions.Add(_positionOneLockValue); + _positionTwoLockValue = new HeliosValue(this, BindingValue.Empty, "", "position two lock", "Lock Position 2.", "True / False", BindingValueUnits.Boolean); + _positionTwoLockValue.Execute += PositionTwoLock_Execute; + Values.Add(_positionTwoLockValue); + Actions.Add(_positionTwoLockValue); + _positionThreeLockValue = new HeliosValue(this, BindingValue.Empty, "", "position three lock", "Lock Position 3.", "True / False", BindingValueUnits.Boolean); + _positionThreeLockValue.Execute += PositionThreeLock_Execute; + Values.Add(_positionThreeLockValue); + Actions.Add(_positionThreeLockValue); + + } + + #region Properties + + #endregion + + void PositionOneLock_Execute(object action, HeliosActionEventArgs e) + { + _positionOneLocked = e.Value.BoolValue; + } + void PositionTwoLock_Execute(object action, HeliosActionEventArgs e) + { + _positionTwoLocked = e.Value.BoolValue; + } + void PositionThreeLock_Execute(object action, HeliosActionEventArgs e) + { + _positionThreeLocked = e.Value.BoolValue; + } + #region HeliosControl Implementation + + public override void Reset() + { + base.Reset(); + + BeginTriggerBypass(true); + SwitchPosition = DefaultPosition; + EndTriggerBypass(true); + } + + protected override void ThrowSwitch(ToggleSwitchBase.SwitchAction action) + { + if (action == SwitchAction.Increment) + { + switch (SwitchPosition) + { + case ThreeWayToggleSwitchPosition.One: + if (!_positionTwoLocked) + { + SwitchPosition = ThreeWayToggleSwitchPosition.Two; + } + break; + case ThreeWayToggleSwitchPosition.Two: + if (!_positionThreeLocked) + { + SwitchPosition = ThreeWayToggleSwitchPosition.Three; + } + break; + } + } + else if (action == SwitchAction.Decrement) + { + switch (SwitchPosition) + { + case ThreeWayToggleSwitchPosition.Two: + if (!_positionOneLocked) + { + SwitchPosition = ThreeWayToggleSwitchPosition.One; + } + break; + case ThreeWayToggleSwitchPosition.Three: + if (!_positionTwoLocked) + { + SwitchPosition = ThreeWayToggleSwitchPosition.Two; + } + break; + } + } + } + + public override void MouseUp(System.Windows.Point location) + { + base.MouseUp(location); + + switch (SwitchPosition) + { + case ThreeWayToggleSwitchPosition.One: + if (SwitchType == ThreeWayToggleSwitchType.MomOnMom || SwitchType == ThreeWayToggleSwitchType.MomOnOn) + { + if (!_positionTwoLocked) + { + SwitchPosition = ThreeWayToggleSwitchPosition.Two; + } + } + break; + case ThreeWayToggleSwitchPosition.Three: + if (SwitchType == ThreeWayToggleSwitchType.OnOnMom || SwitchType == ThreeWayToggleSwitchType.MomOnMom) + { + if (!_positionTwoLocked) + { + SwitchPosition = ThreeWayToggleSwitchPosition.Two; + } + } + break; + } + } + + public override void WriteXml(XmlWriter writer) + { + base.WriteXml(writer); + } + + public override void ReadXml(XmlReader reader) + { + base.ReadXml(reader); + } + + #endregion + + #region Actions + + void SetPositionAction_Execute(object action, HeliosActionEventArgs e) + { + try + { + BeginTriggerBypass(e.BypassCascadingTriggers); + int newPosition = 0; + if (int.TryParse(e.Value.StringValue, out newPosition)) + { + if (newPosition > 0 && newPosition <= 3) + { + SwitchPosition = (ThreeWayToggleSwitchPosition)newPosition; + } + } + EndTriggerBypass(e.BypassCascadingTriggers); + } + catch + { + // No-op if the parse fails we won't set the position. + } + } + + #endregion + } +} diff --git a/Helios/Helios.csproj b/Helios/Helios.csproj index c2075be18..8d8e8a931 100644 --- a/Helios/Helios.csproj +++ b/Helios/Helios.csproj @@ -103,6 +103,7 @@ AlternateImageAppearanceEditor.xaml + From fed1157eacc9a6edc6f21c669f81dbd2551eda0d Mon Sep 17 00:00:00 2001 From: BlueFinBima Date: Tue, 12 Aug 2025 08:14:14 +0100 Subject: [PATCH 02/10] FIx for the pilot "Radio Remote Channel Switcher", "Mode Switch" argument 44 in the Mosquito interface. --- Aircraft Mosquito Plugin/Interfaces/MosquitoInterface.cs | 2 +- InterfaceFiles/Interfaces | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Aircraft Mosquito Plugin/Interfaces/MosquitoInterface.cs b/Aircraft Mosquito Plugin/Interfaces/MosquitoInterface.cs index 06a92333b..5dee7acb9 100644 --- a/Aircraft Mosquito Plugin/Interfaces/MosquitoInterface.cs +++ b/Aircraft Mosquito Plugin/Interfaces/MosquitoInterface.cs @@ -243,7 +243,7 @@ public DH98MosquitoInterface(string name) AddFunction(new PushButton(this, devices.VHF_RADIO.ToString("d"), "3005", "36", "Radio Remote Channel Switcher", "D Button", "%1d")); // "RADIO_D" AddFunction(Switch.CreateToggleSwitch(this, devices.VHF_RADIO.ToString("d"), "3006", "42", "1", "Position 1", "0", "Position 2", "Radio Remote Channel Switcher", "Dimmer Switch", "%1d")); // "RADIO_L_DIM" AddFunction(Switch.CreateToggleSwitch(this, devices.VHF_RADIO.ToString("d"), "3017", "43", "0", "Position 1", "1", "Position 2", "Radio Remote Channel Switcher", "Transmission Lock", "%1d")); // "RADIO_TLOCK" - AddFunction(new Switch(this, devices.VHF_RADIO.ToString("d"), "44", new SwitchPosition[] { new SwitchPosition("1.0", "Position 1", "3008"), new SwitchPosition("0.0", "Position 2", "3008"), new SwitchPosition("-1.0", "Position 3", "3007") }, "Radio Remote Channel Switcher", "Mode Switch", "%.1f")); // "RADIO_T_MODE" + AddFunction(new Switch(this, devices.VHF_RADIO.ToString("d"), "44", new SwitchPosition[] { new SwitchPosition("-1.0", "Position 1", "3008"), new SwitchPosition("0.0", "Position 2", "3007"), new SwitchPosition("1.0", "Position 3", "3007") }, "Radio Remote Channel Switcher", "Mode Switch", "%.1f")); // "RADIO_T_MODE" AddFunction(new Axis(this, devices.VHF_RADIO.ToString("d"), "3015", "364", 0.1d, 0d, 1d, "Radio Remote Channel Switcher", "Volume Knob", false, "%.1f")); // "RADIO_VOL" AddFunction(new FlagValue(this, "37", "Radio Remote Channel Switcher", "A Light (White)", "True when indicator is lit")); // "RADIO_A_L" AddFunction(new FlagValue(this, "38", "Radio Remote Channel Switcher", "B Light (White)", "True when indicator is lit")); // "RADIO_B_L" diff --git a/InterfaceFiles/Interfaces b/InterfaceFiles/Interfaces index 8e93225d5..27158a41c 160000 --- a/InterfaceFiles/Interfaces +++ b/InterfaceFiles/Interfaces @@ -1 +1 @@ -Subproject commit 8e93225d5b88c016df2c8904d094c857395ef6fd +Subproject commit 27158a41c3c4a26c1aa92667d0fde75d709288ef From 31409c437cffeeca1ab6d98d2ef8b8f49acba7a1 Mon Sep 17 00:00:00 2001 From: BlueFinBima Date: Wed, 13 Aug 2025 18:17:58 +0100 Subject: [PATCH 03/10] Add in new messages to make it explicit where an interface is loaded from. --- .../Interfaces/MosquitoInterface.cs | 10 ++++++++-- Helios/UDPInterface/BaseUDPInterface.cs | 3 +++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/Aircraft Mosquito Plugin/Interfaces/MosquitoInterface.cs b/Aircraft Mosquito Plugin/Interfaces/MosquitoInterface.cs index 5dee7acb9..2512ffdfd 100644 --- a/Aircraft Mosquito Plugin/Interfaces/MosquitoInterface.cs +++ b/Aircraft Mosquito Plugin/Interfaces/MosquitoInterface.cs @@ -18,10 +18,12 @@ namespace GadrocsWorkshop.Helios.Interfaces.DCS.DH98Mosquito { using GadrocsWorkshop.Helios.ComponentModel; using GadrocsWorkshop.Helios.Interfaces.DCS.Common; + using GadrocsWorkshop.Helios.UDPInterface; + using GadrocsWorkshop.Helios.Util; + using NLog; + using System; using System.Collections.Generic; using System.Linq; - using System; - using GadrocsWorkshop.Helios.UDPInterface; [HeliosInterface( "Helios.DH98Mosquito", // Helios internal type ID used in Profile XML, must never change @@ -32,6 +34,8 @@ namespace GadrocsWorkshop.Helios.Interfaces.DCS.DH98Mosquito public class DH98MosquitoInterface : DCSInterface { + private static readonly NLog.Logger Logger = NLog.LogManager.GetCurrentClassLogger(); + #pragma warning disable IDE1006 // Naming Standard issues #pragma warning disable IDE0051 // Remove unused private members @@ -529,6 +533,8 @@ public DH98MosquitoInterface(string name) } #endregion Radio Equipment + Logger.Info($"Helios Style 1 interface loaded for {TypeIdentifier}. (Interface contained {Functions.Count()} Network Functions)."); + #if (DEV) Console.WriteLine("Number of functions:\t{0}",Functions.Count()); foreach(DCSFunction nf in Functions) diff --git a/Helios/UDPInterface/BaseUDPInterface.cs b/Helios/UDPInterface/BaseUDPInterface.cs index 5adfca82e..40dc07b06 100644 --- a/Helios/UDPInterface/BaseUDPInterface.cs +++ b/Helios/UDPInterface/BaseUDPInterface.cs @@ -18,6 +18,7 @@ using GadrocsWorkshop.Helios.Interfaces.Capabilities.ProfileAwareInterface; using GadrocsWorkshop.Helios.Interfaces.DCS.Common; using GadrocsWorkshop.Helios.Json; +using GadrocsWorkshop.Helios.Util; using GadrocsWorkshop.Helios.Windows; using System; using System.Collections.Generic; @@ -31,6 +32,7 @@ using System.Runtime.InteropServices; using System.Security.Cryptography; using System.Timers; +using System.Windows; using System.Windows.Threading; namespace GadrocsWorkshop.Helios.UDPInterface @@ -525,6 +527,7 @@ protected bool LoadFunctionsFromJson() // if we survive the loading, install all these functions InstallFunctions(loaded); + Logger.Info($"Soft interface definition {jsonFileName} loaded from {Anonymizer.Anonymize(jsonPath)}. (Interface contained {loaded.Functions.Count()} Network Functions)."); return true; } From 572b1903ef8f686068b4411851e030987704e5e1 Mon Sep 17 00:00:00 2001 From: BlueFinBima Date: Wed, 13 Aug 2025 19:27:07 +0100 Subject: [PATCH 04/10] Interface Submodule commit to pull in the F-4U Water pressure gauge. --- InterfaceFiles/Interfaces | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/InterfaceFiles/Interfaces b/InterfaceFiles/Interfaces index 27158a41c..589fa2a79 160000 --- a/InterfaceFiles/Interfaces +++ b/InterfaceFiles/Interfaces @@ -1 +1 @@ -Subproject commit 27158a41c3c4a26c1aa92667d0fde75d709288ef +Subproject commit 589fa2a79de7d3f14c5a8245e67343bccffbca1e From 44258343c051c03798e6234904e59b036bc90ed5 Mon Sep 17 00:00:00 2001 From: BlueFinBima Date: Wed, 13 Aug 2025 19:27:07 +0100 Subject: [PATCH 05/10] Interface submodule commit to pick up F-4U Water Gauge. --- InterfaceFiles/Interfaces | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/InterfaceFiles/Interfaces b/InterfaceFiles/Interfaces index 589fa2a79..27158a41c 160000 --- a/InterfaceFiles/Interfaces +++ b/InterfaceFiles/Interfaces @@ -1 +1 @@ -Subproject commit 589fa2a79de7d3f14c5a8245e67343bccffbca1e +Subproject commit 27158a41c3c4a26c1aa92667d0fde75d709288ef From de69ea7e7fc12cea8390aa5e69d9bc3fcdd02c7f Mon Sep 17 00:00:00 2001 From: BlueFinBima Date: Thu, 14 Aug 2025 07:48:41 +0100 Subject: [PATCH 06/10] Interface SubModule commit --- InterfaceFiles/Interfaces | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/InterfaceFiles/Interfaces b/InterfaceFiles/Interfaces index 27158a41c..589fa2a79 160000 --- a/InterfaceFiles/Interfaces +++ b/InterfaceFiles/Interfaces @@ -1 +1 @@ -Subproject commit 27158a41c3c4a26c1aa92667d0fde75d709288ef +Subproject commit 589fa2a79de7d3f14c5a8245e67343bccffbca1e From 07b612e11ab1002843f13777ad1ea50e3b4a2136 Mon Sep 17 00:00:00 2001 From: BlueFinBima Date: Thu, 14 Aug 2025 11:19:19 +0100 Subject: [PATCH 07/10] Correct Configuration Manager problem where the NoInstallers was using the Debug version of the Mosquito interface. Also change the new messages about interface loading from Info to Debug. --- Aircraft Mosquito Plugin/Interfaces/MosquitoInterface.cs | 4 ++-- Helios.sln | 8 ++++---- Helios/UDPInterface/BaseUDPInterface.cs | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/Aircraft Mosquito Plugin/Interfaces/MosquitoInterface.cs b/Aircraft Mosquito Plugin/Interfaces/MosquitoInterface.cs index 2512ffdfd..2a4921c12 100644 --- a/Aircraft Mosquito Plugin/Interfaces/MosquitoInterface.cs +++ b/Aircraft Mosquito Plugin/Interfaces/MosquitoInterface.cs @@ -116,7 +116,7 @@ public DH98MosquitoInterface(string name) return; } #endif - // #define DEV +// #define DEV #if (DEV) Dictionary dcsBiosArgs = ProcessDCSBios.GetFunctions(); @@ -533,7 +533,7 @@ public DH98MosquitoInterface(string name) } #endregion Radio Equipment - Logger.Info($"Helios Style 1 interface loaded for {TypeIdentifier}. (Interface contained {Functions.Count()} Network Functions)."); + Logger.Debug($"Helios Style 1 interface loaded for {TypeIdentifier}. (Interface contained {Functions.Count()} Network Functions)."); #if (DEV) Console.WriteLine("Number of functions:\t{0}",Functions.Count()); diff --git a/Helios.sln b/Helios.sln index f8a97964b..1b6ccd180 100644 --- a/Helios.sln +++ b/Helios.sln @@ -1163,10 +1163,10 @@ Global {22369D75-FDCB-42A3-A1F9-B17CDD7D9A70}.JustInstallers|x64.Build.0 = Debug|x64 {22369D75-FDCB-42A3-A1F9-B17CDD7D9A70}.NoInstallers|AnyCPU.ActiveCfg = Debug|Any CPU {22369D75-FDCB-42A3-A1F9-B17CDD7D9A70}.NoInstallers|AnyCPU.Build.0 = Debug|Any CPU - {22369D75-FDCB-42A3-A1F9-B17CDD7D9A70}.NoInstallers|AnyCPU32.ActiveCfg = Debug|AnyCPU32 - {22369D75-FDCB-42A3-A1F9-B17CDD7D9A70}.NoInstallers|AnyCPU32.Build.0 = Debug|AnyCPU32 - {22369D75-FDCB-42A3-A1F9-B17CDD7D9A70}.NoInstallers|x64.ActiveCfg = Debug|x64 - {22369D75-FDCB-42A3-A1F9-B17CDD7D9A70}.NoInstallers|x64.Build.0 = Debug|x64 + {22369D75-FDCB-42A3-A1F9-B17CDD7D9A70}.NoInstallers|AnyCPU32.ActiveCfg = Release|AnyCPU32 + {22369D75-FDCB-42A3-A1F9-B17CDD7D9A70}.NoInstallers|AnyCPU32.Build.0 = Release|AnyCPU32 + {22369D75-FDCB-42A3-A1F9-B17CDD7D9A70}.NoInstallers|x64.ActiveCfg = Release|x64 + {22369D75-FDCB-42A3-A1F9-B17CDD7D9A70}.NoInstallers|x64.Build.0 = Release|x64 {22369D75-FDCB-42A3-A1F9-B17CDD7D9A70}.Release|AnyCPU.ActiveCfg = Release|Any CPU {22369D75-FDCB-42A3-A1F9-B17CDD7D9A70}.Release|AnyCPU.Build.0 = Release|Any CPU {22369D75-FDCB-42A3-A1F9-B17CDD7D9A70}.Release|AnyCPU32.ActiveCfg = Release|AnyCPU32 diff --git a/Helios/UDPInterface/BaseUDPInterface.cs b/Helios/UDPInterface/BaseUDPInterface.cs index 40dc07b06..1f22c8149 100644 --- a/Helios/UDPInterface/BaseUDPInterface.cs +++ b/Helios/UDPInterface/BaseUDPInterface.cs @@ -527,7 +527,7 @@ protected bool LoadFunctionsFromJson() // if we survive the loading, install all these functions InstallFunctions(loaded); - Logger.Info($"Soft interface definition {jsonFileName} loaded from {Anonymizer.Anonymize(jsonPath)}. (Interface contained {loaded.Functions.Count()} Network Functions)."); + Logger.Debug($"Soft interface definition {jsonFileName} loaded from {Anonymizer.Anonymize(jsonPath)}. (Interface contained {loaded.Functions.Count()} Network Functions)."); return true; } From bdbccdd2549aed8b54bb93d339560c00a931415e Mon Sep 17 00:00:00 2001 From: BlueFinBima Date: Thu, 14 Aug 2025 17:29:26 +0100 Subject: [PATCH 08/10] Corrections to the solution's Configuration Manager's settings to correctly use the release build for the Mosquito plugin --- .../Interfaces/MosquitoInterface.cs | 12 +-- Helios.sln | 88 +++++++++---------- 2 files changed, 50 insertions(+), 50 deletions(-) diff --git a/Aircraft Mosquito Plugin/Interfaces/MosquitoInterface.cs b/Aircraft Mosquito Plugin/Interfaces/MosquitoInterface.cs index 2a4921c12..272d2958c 100644 --- a/Aircraft Mosquito Plugin/Interfaces/MosquitoInterface.cs +++ b/Aircraft Mosquito Plugin/Interfaces/MosquitoInterface.cs @@ -111,12 +111,12 @@ public DH98MosquitoInterface(string name) // see if we can restore from JSON #if (!DEBUG) - if (LoadFunctionsFromJson()) - { - return; - } + if (LoadFunctionsFromJson()) + { + return; + } #endif -// #define DEV + // #define DEV #if (DEV) Dictionary dcsBiosArgs = ProcessDCSBios.GetFunctions(); @@ -533,7 +533,7 @@ public DH98MosquitoInterface(string name) } #endregion Radio Equipment - Logger.Debug($"Helios Style 1 interface loaded for {TypeIdentifier}. (Interface contained {Functions.Count()} Network Functions)."); + Logger.Debug($"Helios Style 1 interface loaded for {TypeIdentifier}. (Interface contains {Functions.Count()} Network Functions)."); #if (DEV) Console.WriteLine("Number of functions:\t{0}",Functions.Count()); diff --git a/Helios.sln b/Helios.sln index 1b6ccd180..e8ec4551d 100644 --- a/Helios.sln +++ b/Helios.sln @@ -738,8 +738,8 @@ Global {6297B32B-F34F-4610-9711-E7326907BA39}.JustInstallers|AnyCPU.Build.0 = Debug|Any CPU {6297B32B-F34F-4610-9711-E7326907BA39}.JustInstallers|AnyCPU32.ActiveCfg = Release|AnyCPU32 {6297B32B-F34F-4610-9711-E7326907BA39}.JustInstallers|x64.ActiveCfg = Release|x64 - {6297B32B-F34F-4610-9711-E7326907BA39}.NoInstallers|AnyCPU.ActiveCfg = Debug|Any CPU - {6297B32B-F34F-4610-9711-E7326907BA39}.NoInstallers|AnyCPU.Build.0 = Debug|Any CPU + {6297B32B-F34F-4610-9711-E7326907BA39}.NoInstallers|AnyCPU.ActiveCfg = Release|Any CPU + {6297B32B-F34F-4610-9711-E7326907BA39}.NoInstallers|AnyCPU.Build.0 = Release|Any CPU {6297B32B-F34F-4610-9711-E7326907BA39}.NoInstallers|AnyCPU32.ActiveCfg = Release|AnyCPU32 {6297B32B-F34F-4610-9711-E7326907BA39}.NoInstallers|AnyCPU32.Build.0 = Release|AnyCPU32 {6297B32B-F34F-4610-9711-E7326907BA39}.NoInstallers|x64.ActiveCfg = Release|x64 @@ -869,8 +869,8 @@ Global {F6533AAA-D2B1-43A7-9B5A-A789FD6835FC}.JustInstallers|AnyCPU.Build.0 = Debug|Any CPU {F6533AAA-D2B1-43A7-9B5A-A789FD6835FC}.JustInstallers|AnyCPU32.ActiveCfg = Release|AnyCPU32 {F6533AAA-D2B1-43A7-9B5A-A789FD6835FC}.JustInstallers|x64.ActiveCfg = Release|x64 - {F6533AAA-D2B1-43A7-9B5A-A789FD6835FC}.NoInstallers|AnyCPU.ActiveCfg = Debug|Any CPU - {F6533AAA-D2B1-43A7-9B5A-A789FD6835FC}.NoInstallers|AnyCPU.Build.0 = Debug|Any CPU + {F6533AAA-D2B1-43A7-9B5A-A789FD6835FC}.NoInstallers|AnyCPU.ActiveCfg = Release|Any CPU + {F6533AAA-D2B1-43A7-9B5A-A789FD6835FC}.NoInstallers|AnyCPU.Build.0 = Release|Any CPU {F6533AAA-D2B1-43A7-9B5A-A789FD6835FC}.NoInstallers|AnyCPU32.ActiveCfg = Release|AnyCPU32 {F6533AAA-D2B1-43A7-9B5A-A789FD6835FC}.NoInstallers|AnyCPU32.Build.0 = Release|AnyCPU32 {F6533AAA-D2B1-43A7-9B5A-A789FD6835FC}.NoInstallers|x64.ActiveCfg = Release|x64 @@ -891,8 +891,8 @@ Global {F996DF6B-2462-4DA4-9E2D-3FB800B5842D}.JustInstallers|AnyCPU.Build.0 = Debug|Any CPU {F996DF6B-2462-4DA4-9E2D-3FB800B5842D}.JustInstallers|AnyCPU32.ActiveCfg = Release|AnyCPU32 {F996DF6B-2462-4DA4-9E2D-3FB800B5842D}.JustInstallers|x64.ActiveCfg = Release|x64 - {F996DF6B-2462-4DA4-9E2D-3FB800B5842D}.NoInstallers|AnyCPU.ActiveCfg = Debug|Any CPU - {F996DF6B-2462-4DA4-9E2D-3FB800B5842D}.NoInstallers|AnyCPU.Build.0 = Debug|Any CPU + {F996DF6B-2462-4DA4-9E2D-3FB800B5842D}.NoInstallers|AnyCPU.ActiveCfg = Release|Any CPU + {F996DF6B-2462-4DA4-9E2D-3FB800B5842D}.NoInstallers|AnyCPU.Build.0 = Release|Any CPU {F996DF6B-2462-4DA4-9E2D-3FB800B5842D}.NoInstallers|AnyCPU32.ActiveCfg = Release|AnyCPU32 {F996DF6B-2462-4DA4-9E2D-3FB800B5842D}.NoInstallers|AnyCPU32.Build.0 = Release|AnyCPU32 {F996DF6B-2462-4DA4-9E2D-3FB800B5842D}.NoInstallers|x64.ActiveCfg = Release|x64 @@ -913,8 +913,8 @@ Global {B268E8E7-3491-4F17-AB84-D92158A33084}.JustInstallers|AnyCPU.Build.0 = Debug|Any CPU {B268E8E7-3491-4F17-AB84-D92158A33084}.JustInstallers|AnyCPU32.ActiveCfg = Release|AnyCPU32 {B268E8E7-3491-4F17-AB84-D92158A33084}.JustInstallers|x64.ActiveCfg = Release|x64 - {B268E8E7-3491-4F17-AB84-D92158A33084}.NoInstallers|AnyCPU.ActiveCfg = Debug|Any CPU - {B268E8E7-3491-4F17-AB84-D92158A33084}.NoInstallers|AnyCPU.Build.0 = Debug|Any CPU + {B268E8E7-3491-4F17-AB84-D92158A33084}.NoInstallers|AnyCPU.ActiveCfg = Release|Any CPU + {B268E8E7-3491-4F17-AB84-D92158A33084}.NoInstallers|AnyCPU.Build.0 = Release|Any CPU {B268E8E7-3491-4F17-AB84-D92158A33084}.NoInstallers|AnyCPU32.ActiveCfg = Release|AnyCPU32 {B268E8E7-3491-4F17-AB84-D92158A33084}.NoInstallers|AnyCPU32.Build.0 = Release|AnyCPU32 {B268E8E7-3491-4F17-AB84-D92158A33084}.NoInstallers|x64.ActiveCfg = Release|x64 @@ -935,8 +935,8 @@ Global {FE4E59AC-33B6-11EE-BE56-0242AC120002}.JustInstallers|AnyCPU.Build.0 = Debug|Any CPU {FE4E59AC-33B6-11EE-BE56-0242AC120002}.JustInstallers|AnyCPU32.ActiveCfg = Release|AnyCPU32 {FE4E59AC-33B6-11EE-BE56-0242AC120002}.JustInstallers|x64.ActiveCfg = Release|x64 - {FE4E59AC-33B6-11EE-BE56-0242AC120002}.NoInstallers|AnyCPU.ActiveCfg = Debug|Any CPU - {FE4E59AC-33B6-11EE-BE56-0242AC120002}.NoInstallers|AnyCPU.Build.0 = Debug|Any CPU + {FE4E59AC-33B6-11EE-BE56-0242AC120002}.NoInstallers|AnyCPU.ActiveCfg = Release|Any CPU + {FE4E59AC-33B6-11EE-BE56-0242AC120002}.NoInstallers|AnyCPU.Build.0 = Release|Any CPU {FE4E59AC-33B6-11EE-BE56-0242AC120002}.NoInstallers|AnyCPU32.ActiveCfg = Release|AnyCPU32 {FE4E59AC-33B6-11EE-BE56-0242AC120002}.NoInstallers|AnyCPU32.Build.0 = Release|AnyCPU32 {FE4E59AC-33B6-11EE-BE56-0242AC120002}.NoInstallers|x64.ActiveCfg = Release|x64 @@ -957,8 +957,8 @@ Global {EE4A369C-33B7-11EE-BE56-0242AC120002}.JustInstallers|AnyCPU.Build.0 = Debug|Any CPU {EE4A369C-33B7-11EE-BE56-0242AC120002}.JustInstallers|AnyCPU32.ActiveCfg = Release|AnyCPU32 {EE4A369C-33B7-11EE-BE56-0242AC120002}.JustInstallers|x64.ActiveCfg = Release|x64 - {EE4A369C-33B7-11EE-BE56-0242AC120002}.NoInstallers|AnyCPU.ActiveCfg = Debug|Any CPU - {EE4A369C-33B7-11EE-BE56-0242AC120002}.NoInstallers|AnyCPU.Build.0 = Debug|Any CPU + {EE4A369C-33B7-11EE-BE56-0242AC120002}.NoInstallers|AnyCPU.ActiveCfg = Release|Any CPU + {EE4A369C-33B7-11EE-BE56-0242AC120002}.NoInstallers|AnyCPU.Build.0 = Release|Any CPU {EE4A369C-33B7-11EE-BE56-0242AC120002}.NoInstallers|AnyCPU32.ActiveCfg = Release|AnyCPU32 {EE4A369C-33B7-11EE-BE56-0242AC120002}.NoInstallers|AnyCPU32.Build.0 = Release|AnyCPU32 {EE4A369C-33B7-11EE-BE56-0242AC120002}.NoInstallers|x64.ActiveCfg = Release|x64 @@ -979,8 +979,8 @@ Global {68108832-33B8-11EE-BE56-0242AC120002}.JustInstallers|AnyCPU.Build.0 = Debug|Any CPU {68108832-33B8-11EE-BE56-0242AC120002}.JustInstallers|AnyCPU32.ActiveCfg = Release|AnyCPU32 {68108832-33B8-11EE-BE56-0242AC120002}.JustInstallers|x64.ActiveCfg = Release|x64 - {68108832-33B8-11EE-BE56-0242AC120002}.NoInstallers|AnyCPU.ActiveCfg = Debug|Any CPU - {68108832-33B8-11EE-BE56-0242AC120002}.NoInstallers|AnyCPU.Build.0 = Debug|Any CPU + {68108832-33B8-11EE-BE56-0242AC120002}.NoInstallers|AnyCPU.ActiveCfg = Release|Any CPU + {68108832-33B8-11EE-BE56-0242AC120002}.NoInstallers|AnyCPU.Build.0 = Release|Any CPU {68108832-33B8-11EE-BE56-0242AC120002}.NoInstallers|AnyCPU32.ActiveCfg = Release|AnyCPU32 {68108832-33B8-11EE-BE56-0242AC120002}.NoInstallers|AnyCPU32.Build.0 = Release|AnyCPU32 {68108832-33B8-11EE-BE56-0242AC120002}.NoInstallers|x64.ActiveCfg = Release|x64 @@ -1001,8 +1001,8 @@ Global {43A15AF5-AF6F-4CA1-B9D1-BD6E77727B33}.JustInstallers|AnyCPU.Build.0 = Debug|Any CPU {43A15AF5-AF6F-4CA1-B9D1-BD6E77727B33}.JustInstallers|AnyCPU32.ActiveCfg = Release|AnyCPU32 {43A15AF5-AF6F-4CA1-B9D1-BD6E77727B33}.JustInstallers|x64.ActiveCfg = Release|x64 - {43A15AF5-AF6F-4CA1-B9D1-BD6E77727B33}.NoInstallers|AnyCPU.ActiveCfg = Debug|Any CPU - {43A15AF5-AF6F-4CA1-B9D1-BD6E77727B33}.NoInstallers|AnyCPU.Build.0 = Debug|Any CPU + {43A15AF5-AF6F-4CA1-B9D1-BD6E77727B33}.NoInstallers|AnyCPU.ActiveCfg = Release|Any CPU + {43A15AF5-AF6F-4CA1-B9D1-BD6E77727B33}.NoInstallers|AnyCPU.Build.0 = Release|Any CPU {43A15AF5-AF6F-4CA1-B9D1-BD6E77727B33}.NoInstallers|AnyCPU32.ActiveCfg = Release|AnyCPU32 {43A15AF5-AF6F-4CA1-B9D1-BD6E77727B33}.NoInstallers|AnyCPU32.Build.0 = Release|AnyCPU32 {43A15AF5-AF6F-4CA1-B9D1-BD6E77727B33}.NoInstallers|x64.ActiveCfg = Release|x64 @@ -1023,8 +1023,8 @@ Global {95EC3981-1B6E-4AB2-B40A-78C695CB69EA}.JustInstallers|AnyCPU.Build.0 = Debug|Any CPU {95EC3981-1B6E-4AB2-B40A-78C695CB69EA}.JustInstallers|AnyCPU32.ActiveCfg = Release|AnyCPU32 {95EC3981-1B6E-4AB2-B40A-78C695CB69EA}.JustInstallers|x64.ActiveCfg = Release|x64 - {95EC3981-1B6E-4AB2-B40A-78C695CB69EA}.NoInstallers|AnyCPU.ActiveCfg = Debug|Any CPU - {95EC3981-1B6E-4AB2-B40A-78C695CB69EA}.NoInstallers|AnyCPU.Build.0 = Debug|Any CPU + {95EC3981-1B6E-4AB2-B40A-78C695CB69EA}.NoInstallers|AnyCPU.ActiveCfg = Release|Any CPU + {95EC3981-1B6E-4AB2-B40A-78C695CB69EA}.NoInstallers|AnyCPU.Build.0 = Release|Any CPU {95EC3981-1B6E-4AB2-B40A-78C695CB69EA}.NoInstallers|AnyCPU32.ActiveCfg = Release|AnyCPU32 {95EC3981-1B6E-4AB2-B40A-78C695CB69EA}.NoInstallers|AnyCPU32.Build.0 = Release|AnyCPU32 {95EC3981-1B6E-4AB2-B40A-78C695CB69EA}.NoInstallers|x64.ActiveCfg = Release|x64 @@ -1045,8 +1045,8 @@ Global {68F29132-8E6D-4A8F-A45F-34799655E20A}.JustInstallers|AnyCPU.Build.0 = Debug|Any CPU {68F29132-8E6D-4A8F-A45F-34799655E20A}.JustInstallers|AnyCPU32.ActiveCfg = Release|AnyCPU32 {68F29132-8E6D-4A8F-A45F-34799655E20A}.JustInstallers|x64.ActiveCfg = Release|x64 - {68F29132-8E6D-4A8F-A45F-34799655E20A}.NoInstallers|AnyCPU.ActiveCfg = Debug|Any CPU - {68F29132-8E6D-4A8F-A45F-34799655E20A}.NoInstallers|AnyCPU.Build.0 = Debug|Any CPU + {68F29132-8E6D-4A8F-A45F-34799655E20A}.NoInstallers|AnyCPU.ActiveCfg = Release|Any CPU + {68F29132-8E6D-4A8F-A45F-34799655E20A}.NoInstallers|AnyCPU.Build.0 = Release|Any CPU {68F29132-8E6D-4A8F-A45F-34799655E20A}.NoInstallers|AnyCPU32.ActiveCfg = Release|AnyCPU32 {68F29132-8E6D-4A8F-A45F-34799655E20A}.NoInstallers|AnyCPU32.Build.0 = Release|AnyCPU32 {68F29132-8E6D-4A8F-A45F-34799655E20A}.NoInstallers|x64.ActiveCfg = Release|x64 @@ -1067,8 +1067,8 @@ Global {F75CF4CA-FA26-4F68-B523-C698D84AFD83}.JustInstallers|AnyCPU.Build.0 = Debug|Any CPU {F75CF4CA-FA26-4F68-B523-C698D84AFD83}.JustInstallers|AnyCPU32.ActiveCfg = Release|AnyCPU32 {F75CF4CA-FA26-4F68-B523-C698D84AFD83}.JustInstallers|x64.ActiveCfg = Release|x64 - {F75CF4CA-FA26-4F68-B523-C698D84AFD83}.NoInstallers|AnyCPU.ActiveCfg = Debug|Any CPU - {F75CF4CA-FA26-4F68-B523-C698D84AFD83}.NoInstallers|AnyCPU.Build.0 = Debug|Any CPU + {F75CF4CA-FA26-4F68-B523-C698D84AFD83}.NoInstallers|AnyCPU.ActiveCfg = Release|Any CPU + {F75CF4CA-FA26-4F68-B523-C698D84AFD83}.NoInstallers|AnyCPU.Build.0 = Release|Any CPU {F75CF4CA-FA26-4F68-B523-C698D84AFD83}.NoInstallers|AnyCPU32.ActiveCfg = Release|AnyCPU32 {F75CF4CA-FA26-4F68-B523-C698D84AFD83}.NoInstallers|AnyCPU32.Build.0 = Release|AnyCPU32 {F75CF4CA-FA26-4F68-B523-C698D84AFD83}.NoInstallers|x64.ActiveCfg = Release|x64 @@ -1089,8 +1089,8 @@ Global {FE3653F4-7633-45A0-AD9B-493D3688E586}.JustInstallers|AnyCPU.Build.0 = Debug|Any CPU {FE3653F4-7633-45A0-AD9B-493D3688E586}.JustInstallers|AnyCPU32.ActiveCfg = Release|AnyCPU32 {FE3653F4-7633-45A0-AD9B-493D3688E586}.JustInstallers|x64.ActiveCfg = Release|x64 - {FE3653F4-7633-45A0-AD9B-493D3688E586}.NoInstallers|AnyCPU.ActiveCfg = Debug|Any CPU - {FE3653F4-7633-45A0-AD9B-493D3688E586}.NoInstallers|AnyCPU.Build.0 = Debug|Any CPU + {FE3653F4-7633-45A0-AD9B-493D3688E586}.NoInstallers|AnyCPU.ActiveCfg = Release|Any CPU + {FE3653F4-7633-45A0-AD9B-493D3688E586}.NoInstallers|AnyCPU.Build.0 = Release|Any CPU {FE3653F4-7633-45A0-AD9B-493D3688E586}.NoInstallers|AnyCPU32.ActiveCfg = Release|AnyCPU32 {FE3653F4-7633-45A0-AD9B-493D3688E586}.NoInstallers|AnyCPU32.Build.0 = Release|AnyCPU32 {FE3653F4-7633-45A0-AD9B-493D3688E586}.NoInstallers|x64.ActiveCfg = Release|x64 @@ -1113,12 +1113,12 @@ Global {3EFF9CB2-BF47-4491-86F4-4553B03C897E}.JustInstallers|AnyCPU32.Build.0 = Debug|AnyCPU32 {3EFF9CB2-BF47-4491-86F4-4553B03C897E}.JustInstallers|x64.ActiveCfg = Debug|x64 {3EFF9CB2-BF47-4491-86F4-4553B03C897E}.JustInstallers|x64.Build.0 = Debug|x64 - {3EFF9CB2-BF47-4491-86F4-4553B03C897E}.NoInstallers|AnyCPU.ActiveCfg = Debug|Any CPU - {3EFF9CB2-BF47-4491-86F4-4553B03C897E}.NoInstallers|AnyCPU.Build.0 = Debug|Any CPU - {3EFF9CB2-BF47-4491-86F4-4553B03C897E}.NoInstallers|AnyCPU32.ActiveCfg = Debug|AnyCPU32 - {3EFF9CB2-BF47-4491-86F4-4553B03C897E}.NoInstallers|AnyCPU32.Build.0 = Debug|AnyCPU32 - {3EFF9CB2-BF47-4491-86F4-4553B03C897E}.NoInstallers|x64.ActiveCfg = Debug|x64 - {3EFF9CB2-BF47-4491-86F4-4553B03C897E}.NoInstallers|x64.Build.0 = Debug|x64 + {3EFF9CB2-BF47-4491-86F4-4553B03C897E}.NoInstallers|AnyCPU.ActiveCfg = Release|Any CPU + {3EFF9CB2-BF47-4491-86F4-4553B03C897E}.NoInstallers|AnyCPU.Build.0 = Release|Any CPU + {3EFF9CB2-BF47-4491-86F4-4553B03C897E}.NoInstallers|AnyCPU32.ActiveCfg = Release|AnyCPU32 + {3EFF9CB2-BF47-4491-86F4-4553B03C897E}.NoInstallers|AnyCPU32.Build.0 = Release|AnyCPU32 + {3EFF9CB2-BF47-4491-86F4-4553B03C897E}.NoInstallers|x64.ActiveCfg = Release|x64 + {3EFF9CB2-BF47-4491-86F4-4553B03C897E}.NoInstallers|x64.Build.0 = Release|x64 {3EFF9CB2-BF47-4491-86F4-4553B03C897E}.Release|AnyCPU.ActiveCfg = Release|Any CPU {3EFF9CB2-BF47-4491-86F4-4553B03C897E}.Release|AnyCPU.Build.0 = Release|Any CPU {3EFF9CB2-BF47-4491-86F4-4553B03C897E}.Release|AnyCPU32.ActiveCfg = Release|AnyCPU32 @@ -1137,12 +1137,12 @@ Global {8B293D30-A375-411D-90C3-1DCA93AA8C81}.JustInstallers|AnyCPU32.Build.0 = Debug|AnyCPU32 {8B293D30-A375-411D-90C3-1DCA93AA8C81}.JustInstallers|x64.ActiveCfg = Debug|x64 {8B293D30-A375-411D-90C3-1DCA93AA8C81}.JustInstallers|x64.Build.0 = Debug|x64 - {8B293D30-A375-411D-90C3-1DCA93AA8C81}.NoInstallers|AnyCPU.ActiveCfg = Debug|Any CPU - {8B293D30-A375-411D-90C3-1DCA93AA8C81}.NoInstallers|AnyCPU.Build.0 = Debug|Any CPU - {8B293D30-A375-411D-90C3-1DCA93AA8C81}.NoInstallers|AnyCPU32.ActiveCfg = Debug|AnyCPU32 - {8B293D30-A375-411D-90C3-1DCA93AA8C81}.NoInstallers|AnyCPU32.Build.0 = Debug|AnyCPU32 - {8B293D30-A375-411D-90C3-1DCA93AA8C81}.NoInstallers|x64.ActiveCfg = Debug|x64 - {8B293D30-A375-411D-90C3-1DCA93AA8C81}.NoInstallers|x64.Build.0 = Debug|x64 + {8B293D30-A375-411D-90C3-1DCA93AA8C81}.NoInstallers|AnyCPU.ActiveCfg = Release|Any CPU + {8B293D30-A375-411D-90C3-1DCA93AA8C81}.NoInstallers|AnyCPU.Build.0 = Release|Any CPU + {8B293D30-A375-411D-90C3-1DCA93AA8C81}.NoInstallers|AnyCPU32.ActiveCfg = Release|AnyCPU32 + {8B293D30-A375-411D-90C3-1DCA93AA8C81}.NoInstallers|AnyCPU32.Build.0 = Release|AnyCPU32 + {8B293D30-A375-411D-90C3-1DCA93AA8C81}.NoInstallers|x64.ActiveCfg = Release|x64 + {8B293D30-A375-411D-90C3-1DCA93AA8C81}.NoInstallers|x64.Build.0 = Release|x64 {8B293D30-A375-411D-90C3-1DCA93AA8C81}.Release|AnyCPU.ActiveCfg = Release|Any CPU {8B293D30-A375-411D-90C3-1DCA93AA8C81}.Release|AnyCPU.Build.0 = Release|Any CPU {8B293D30-A375-411D-90C3-1DCA93AA8C81}.Release|AnyCPU32.ActiveCfg = Release|AnyCPU32 @@ -1161,8 +1161,8 @@ Global {22369D75-FDCB-42A3-A1F9-B17CDD7D9A70}.JustInstallers|AnyCPU32.Build.0 = Debug|AnyCPU32 {22369D75-FDCB-42A3-A1F9-B17CDD7D9A70}.JustInstallers|x64.ActiveCfg = Debug|x64 {22369D75-FDCB-42A3-A1F9-B17CDD7D9A70}.JustInstallers|x64.Build.0 = Debug|x64 - {22369D75-FDCB-42A3-A1F9-B17CDD7D9A70}.NoInstallers|AnyCPU.ActiveCfg = Debug|Any CPU - {22369D75-FDCB-42A3-A1F9-B17CDD7D9A70}.NoInstallers|AnyCPU.Build.0 = Debug|Any CPU + {22369D75-FDCB-42A3-A1F9-B17CDD7D9A70}.NoInstallers|AnyCPU.ActiveCfg = Release|Any CPU + {22369D75-FDCB-42A3-A1F9-B17CDD7D9A70}.NoInstallers|AnyCPU.Build.0 = Release|Any CPU {22369D75-FDCB-42A3-A1F9-B17CDD7D9A70}.NoInstallers|AnyCPU32.ActiveCfg = Release|AnyCPU32 {22369D75-FDCB-42A3-A1F9-B17CDD7D9A70}.NoInstallers|AnyCPU32.Build.0 = Release|AnyCPU32 {22369D75-FDCB-42A3-A1F9-B17CDD7D9A70}.NoInstallers|x64.ActiveCfg = Release|x64 @@ -1185,12 +1185,12 @@ Global {9A126B83-3EBC-4D79-BB0A-F5AE11243C1C}.JustInstallers|AnyCPU32.Build.0 = Debug|AnyCPU32 {9A126B83-3EBC-4D79-BB0A-F5AE11243C1C}.JustInstallers|x64.ActiveCfg = Debug|x64 {9A126B83-3EBC-4D79-BB0A-F5AE11243C1C}.JustInstallers|x64.Build.0 = Debug|x64 - {9A126B83-3EBC-4D79-BB0A-F5AE11243C1C}.NoInstallers|AnyCPU.ActiveCfg = Debug|Any CPU - {9A126B83-3EBC-4D79-BB0A-F5AE11243C1C}.NoInstallers|AnyCPU.Build.0 = Debug|Any CPU - {9A126B83-3EBC-4D79-BB0A-F5AE11243C1C}.NoInstallers|AnyCPU32.ActiveCfg = Debug|AnyCPU32 - {9A126B83-3EBC-4D79-BB0A-F5AE11243C1C}.NoInstallers|AnyCPU32.Build.0 = Debug|AnyCPU32 - {9A126B83-3EBC-4D79-BB0A-F5AE11243C1C}.NoInstallers|x64.ActiveCfg = Debug|x64 - {9A126B83-3EBC-4D79-BB0A-F5AE11243C1C}.NoInstallers|x64.Build.0 = Debug|x64 + {9A126B83-3EBC-4D79-BB0A-F5AE11243C1C}.NoInstallers|AnyCPU.ActiveCfg = Release|Any CPU + {9A126B83-3EBC-4D79-BB0A-F5AE11243C1C}.NoInstallers|AnyCPU.Build.0 = Release|Any CPU + {9A126B83-3EBC-4D79-BB0A-F5AE11243C1C}.NoInstallers|AnyCPU32.ActiveCfg = Release|AnyCPU32 + {9A126B83-3EBC-4D79-BB0A-F5AE11243C1C}.NoInstallers|AnyCPU32.Build.0 = Release|AnyCPU32 + {9A126B83-3EBC-4D79-BB0A-F5AE11243C1C}.NoInstallers|x64.ActiveCfg = Release|x64 + {9A126B83-3EBC-4D79-BB0A-F5AE11243C1C}.NoInstallers|x64.Build.0 = Release|x64 {9A126B83-3EBC-4D79-BB0A-F5AE11243C1C}.Release|AnyCPU.ActiveCfg = Release|Any CPU {9A126B83-3EBC-4D79-BB0A-F5AE11243C1C}.Release|AnyCPU.Build.0 = Release|Any CPU {9A126B83-3EBC-4D79-BB0A-F5AE11243C1C}.Release|AnyCPU32.ActiveCfg = Release|AnyCPU32 From 9d78d073881081ab2d634d1b039c7d45bd209a0b Mon Sep 17 00:00:00 2001 From: BlueFinBima Date: Thu, 14 Aug 2025 18:02:17 +0100 Subject: [PATCH 09/10] More Configuration mamager changes for the soln. This time removing various aircraft Debug builds from the Just Installer configuration. --- Helios.sln | 24 ++++++++---------------- 1 file changed, 8 insertions(+), 16 deletions(-) diff --git a/Helios.sln b/Helios.sln index e8ec4551d..5db80a63d 100644 --- a/Helios.sln +++ b/Helios.sln @@ -1109,10 +1109,8 @@ Global {3EFF9CB2-BF47-4491-86F4-4553B03C897E}.Debug|x64.Build.0 = Debug|x64 {3EFF9CB2-BF47-4491-86F4-4553B03C897E}.JustInstallers|AnyCPU.ActiveCfg = Debug|Any CPU {3EFF9CB2-BF47-4491-86F4-4553B03C897E}.JustInstallers|AnyCPU.Build.0 = Debug|Any CPU - {3EFF9CB2-BF47-4491-86F4-4553B03C897E}.JustInstallers|AnyCPU32.ActiveCfg = Debug|AnyCPU32 - {3EFF9CB2-BF47-4491-86F4-4553B03C897E}.JustInstallers|AnyCPU32.Build.0 = Debug|AnyCPU32 - {3EFF9CB2-BF47-4491-86F4-4553B03C897E}.JustInstallers|x64.ActiveCfg = Debug|x64 - {3EFF9CB2-BF47-4491-86F4-4553B03C897E}.JustInstallers|x64.Build.0 = Debug|x64 + {3EFF9CB2-BF47-4491-86F4-4553B03C897E}.JustInstallers|AnyCPU32.ActiveCfg = Release|AnyCPU32 + {3EFF9CB2-BF47-4491-86F4-4553B03C897E}.JustInstallers|x64.ActiveCfg = Release|x64 {3EFF9CB2-BF47-4491-86F4-4553B03C897E}.NoInstallers|AnyCPU.ActiveCfg = Release|Any CPU {3EFF9CB2-BF47-4491-86F4-4553B03C897E}.NoInstallers|AnyCPU.Build.0 = Release|Any CPU {3EFF9CB2-BF47-4491-86F4-4553B03C897E}.NoInstallers|AnyCPU32.ActiveCfg = Release|AnyCPU32 @@ -1133,10 +1131,8 @@ Global {8B293D30-A375-411D-90C3-1DCA93AA8C81}.Debug|x64.Build.0 = Debug|x64 {8B293D30-A375-411D-90C3-1DCA93AA8C81}.JustInstallers|AnyCPU.ActiveCfg = Debug|Any CPU {8B293D30-A375-411D-90C3-1DCA93AA8C81}.JustInstallers|AnyCPU.Build.0 = Debug|Any CPU - {8B293D30-A375-411D-90C3-1DCA93AA8C81}.JustInstallers|AnyCPU32.ActiveCfg = Debug|AnyCPU32 - {8B293D30-A375-411D-90C3-1DCA93AA8C81}.JustInstallers|AnyCPU32.Build.0 = Debug|AnyCPU32 - {8B293D30-A375-411D-90C3-1DCA93AA8C81}.JustInstallers|x64.ActiveCfg = Debug|x64 - {8B293D30-A375-411D-90C3-1DCA93AA8C81}.JustInstallers|x64.Build.0 = Debug|x64 + {8B293D30-A375-411D-90C3-1DCA93AA8C81}.JustInstallers|AnyCPU32.ActiveCfg = Release|AnyCPU32 + {8B293D30-A375-411D-90C3-1DCA93AA8C81}.JustInstallers|x64.ActiveCfg = Release|x64 {8B293D30-A375-411D-90C3-1DCA93AA8C81}.NoInstallers|AnyCPU.ActiveCfg = Release|Any CPU {8B293D30-A375-411D-90C3-1DCA93AA8C81}.NoInstallers|AnyCPU.Build.0 = Release|Any CPU {8B293D30-A375-411D-90C3-1DCA93AA8C81}.NoInstallers|AnyCPU32.ActiveCfg = Release|AnyCPU32 @@ -1157,10 +1153,8 @@ Global {22369D75-FDCB-42A3-A1F9-B17CDD7D9A70}.Debug|x64.Build.0 = Debug|x64 {22369D75-FDCB-42A3-A1F9-B17CDD7D9A70}.JustInstallers|AnyCPU.ActiveCfg = Debug|Any CPU {22369D75-FDCB-42A3-A1F9-B17CDD7D9A70}.JustInstallers|AnyCPU.Build.0 = Debug|Any CPU - {22369D75-FDCB-42A3-A1F9-B17CDD7D9A70}.JustInstallers|AnyCPU32.ActiveCfg = Debug|AnyCPU32 - {22369D75-FDCB-42A3-A1F9-B17CDD7D9A70}.JustInstallers|AnyCPU32.Build.0 = Debug|AnyCPU32 - {22369D75-FDCB-42A3-A1F9-B17CDD7D9A70}.JustInstallers|x64.ActiveCfg = Debug|x64 - {22369D75-FDCB-42A3-A1F9-B17CDD7D9A70}.JustInstallers|x64.Build.0 = Debug|x64 + {22369D75-FDCB-42A3-A1F9-B17CDD7D9A70}.JustInstallers|AnyCPU32.ActiveCfg = Release|AnyCPU32 + {22369D75-FDCB-42A3-A1F9-B17CDD7D9A70}.JustInstallers|x64.ActiveCfg = Release|x64 {22369D75-FDCB-42A3-A1F9-B17CDD7D9A70}.NoInstallers|AnyCPU.ActiveCfg = Release|Any CPU {22369D75-FDCB-42A3-A1F9-B17CDD7D9A70}.NoInstallers|AnyCPU.Build.0 = Release|Any CPU {22369D75-FDCB-42A3-A1F9-B17CDD7D9A70}.NoInstallers|AnyCPU32.ActiveCfg = Release|AnyCPU32 @@ -1181,10 +1175,8 @@ Global {9A126B83-3EBC-4D79-BB0A-F5AE11243C1C}.Debug|x64.Build.0 = Debug|x64 {9A126B83-3EBC-4D79-BB0A-F5AE11243C1C}.JustInstallers|AnyCPU.ActiveCfg = Debug|Any CPU {9A126B83-3EBC-4D79-BB0A-F5AE11243C1C}.JustInstallers|AnyCPU.Build.0 = Debug|Any CPU - {9A126B83-3EBC-4D79-BB0A-F5AE11243C1C}.JustInstallers|AnyCPU32.ActiveCfg = Debug|AnyCPU32 - {9A126B83-3EBC-4D79-BB0A-F5AE11243C1C}.JustInstallers|AnyCPU32.Build.0 = Debug|AnyCPU32 - {9A126B83-3EBC-4D79-BB0A-F5AE11243C1C}.JustInstallers|x64.ActiveCfg = Debug|x64 - {9A126B83-3EBC-4D79-BB0A-F5AE11243C1C}.JustInstallers|x64.Build.0 = Debug|x64 + {9A126B83-3EBC-4D79-BB0A-F5AE11243C1C}.JustInstallers|AnyCPU32.ActiveCfg = Release|AnyCPU32 + {9A126B83-3EBC-4D79-BB0A-F5AE11243C1C}.JustInstallers|x64.ActiveCfg = Release|x64 {9A126B83-3EBC-4D79-BB0A-F5AE11243C1C}.NoInstallers|AnyCPU.ActiveCfg = Release|Any CPU {9A126B83-3EBC-4D79-BB0A-F5AE11243C1C}.NoInstallers|AnyCPU.Build.0 = Release|Any CPU {9A126B83-3EBC-4D79-BB0A-F5AE11243C1C}.NoInstallers|AnyCPU32.ActiveCfg = Release|AnyCPU32 From 51e668df19d9a8db6670a59170883dd3d8882f44 Mon Sep 17 00:00:00 2001 From: BlueFinBima Date: Sun, 17 Aug 2025 09:18:55 +0100 Subject: [PATCH 10/10] Fix 64bit installer to remove duplicate Mosquito.dll from the main application folder. --- Control Center/Control Center.csproj | 1 - Control Center/splash_logo.png | Bin 29564 -> 0 bytes Helios Installer/Helios Installer.vdproj | 1644 ++++++++++------------ 3 files changed, 757 insertions(+), 888 deletions(-) delete mode 100644 Control Center/splash_logo.png diff --git a/Control Center/Control Center.csproj b/Control Center/Control Center.csproj index 473f49efb..3a2541fbe 100644 --- a/Control Center/Control Center.csproj +++ b/Control Center/Control Center.csproj @@ -181,7 +181,6 @@ - diff --git a/Control Center/splash_logo.png b/Control Center/splash_logo.png deleted file mode 100644 index d67483fad6bff59ded2af25f2073652e5eee7e33..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29564 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 s)+UD+iB$