diff --git a/CoordinateConverter/CoordinateConverter.csproj b/CoordinateConverter/CoordinateConverter.csproj
index b091926..22f9e7b 100644
--- a/CoordinateConverter/CoordinateConverter.csproj
+++ b/CoordinateConverter/CoordinateConverter.csproj
@@ -156,6 +156,7 @@
FormAH64DTC.cs
+ Designer
FormAH64PointDeleter.cs
diff --git a/CoordinateConverter/DCS/Aircraft/AH64/AH64.cs b/CoordinateConverter/DCS/Aircraft/AH64/AH64.cs
index 7faad9c..d4a43bf 100644
--- a/CoordinateConverter/DCS/Aircraft/AH64/AH64.cs
+++ b/CoordinateConverter/DCS/Aircraft/AH64/AH64.cs
@@ -11,21 +11,42 @@ namespace CoordinateConverter.DCS.Aircraft.AH64
///
public class AH64 : DCSAircraft
{
+ private bool? isPilot = null;
+
///
/// Gets or sets a value indicating whether the user is in the pilot or CPG seat.
///
///
/// true if this instance is pilot; otherwise, false.
///
- public bool IsPilot { get; private set; }
+ public bool? IsPilot {
+ get
+ {
+ DCSMessage message = new DCSMessage()
+ {
+ GetHandleData = new List()
+ {
+ "SEAT"
+ },
+ };
+ message = DCSConnection.SendRequest(message);
+ if (message != null && message.HandleData.ContainsKey("SEAT"))
+ {
+ isPilot = message.HandleData["SEAT"] == "0";
+ }
+
+ return isPilot;
+ } private set
+ {
+ isPilot = value;
+ }
+ }
///
/// Initializes a new instance of the class.
///
- /// if set to true [is pilot].
- public AH64(bool isPilot)
+ public AH64()
{
- IsPilot = isPilot;
}
///
@@ -80,6 +101,42 @@ public enum EDeviceCode
}
+ ///
+ /// Display codes.
+ ///
+ public enum EDisplayCodes
+ {
+ #pragma warning disable CS1591 // Missing XML comment for publicly visible type or member
+ PLT_EUFD = 17,
+ PLT_HMD = 21,
+ PLT_MFD_Left = 6,
+ PLT_MFD_Right = 8,
+ PLT_CMWS = 24,
+ CPG_MFD_Left = 10,
+ CPG_MFD_Right = 12,
+ CPG_EUFD = 18,
+ #pragma warning restore CS1591 // Missing XML comment for publicly visible type or member
+
+ }
+
+ ///
+ /// Display characters with special meanings
+ ///
+ public enum EDisplaySpecialChars
+ {
+ #pragma warning disable CS1591 // Missing XML comment for publicly visible type or member
+ IDM_Both = '~',
+ IDM_Own = '[',
+ IDM_Other = ']',
+ RTS_Own = '<',
+ RTS_Other = '>',
+ RTS_None = '=',
+ Squelch = '*',
+ MFD_Circle_Off = '}',
+ MFD_Circle_On = '{',
+ #pragma warning restore CS1591 // Missing XML comment for publicly visible type or member
+ }
+
///
/// Key codes
///
@@ -442,34 +499,36 @@ protected override List GetActions(object item)
throw new ArgumentException("Bad Point Type");
}
}
+ bool plt = IsPilot ?? true;
+ int mfd = (int)(plt ? EDeviceCode.PLT_RMFD : EDeviceCode.CPG_RMFD);
// DebugCommandList commands = new DebugCommandList
List commands = new List
{
// press ADD
- new DCSCommand((int)(IsPilot ? EDeviceCode.PLT_RMFD : EDeviceCode.CPG_RMFD), (int)EKeyCode.MFD_L2),
+ new DCSCommand(mfd, (int)EKeyCode.MFD_L2),
// press the waypoint type button
- extraData == null ? null : new DCSCommand((int)(IsPilot ? EDeviceCode.PLT_RMFD : EDeviceCode.CPG_RMFD), (int)keyMFDPointType),
+ extraData == null ? null : new DCSCommand(mfd, (int)keyMFDPointType),
// press ident
- new DCSCommand((int)(IsPilot ? EDeviceCode.PLT_RMFD : EDeviceCode.CPG_RMFD), (int)EKeyCode.MFD_L1)
+ new DCSCommand(mfd, (int)EKeyCode.MFD_L1)
};
// enter ident
- commands.AddRange(GetCommandsForKUText(ident, false, IsPilot));
+ commands.AddRange(GetCommandsForKUText(ident, false, plt));
// enter free text (max 3 chars)
- commands.AddRange(GetCommandsForKUText((coordinate.Name.Length <= 3 ? coordinate.Name : coordinate.Name.Substring(0, 3)) + '\n', false, IsPilot));
+ commands.AddRange(GetCommandsForKUText((coordinate.Name.Length <= 3 ? coordinate.Name : coordinate.Name.Substring(0, 3)) + '\n', false, plt));
// enter MGRS coordinates
// remove spaces and append enter
string mgrsString = string.Join(string.Empty ,coordinate.GetCoordinateStrMGRS(4).Where(ch => ch != ' ')) + '\n';
- commands.AddRange(GetCommandsForKUText(mgrsString, true, IsPilot));
+ commands.AddRange(GetCommandsForKUText(mgrsString, true, plt));
// enter altitude
if (coordinate.AltitudeInFt == 0 && coordinate.AltitudeIsAGL)
{
- commands.AddRange(GetCommandsForKUText("\n", false, IsPilot));
+ commands.AddRange(GetCommandsForKUText("\n", false, plt));
}
else
{
- commands.AddRange(GetCommandsForKUText(((int)Math.Round(coordinate.GetAltitudeValue(true))).ToString() + "\n", true, IsPilot));
+ commands.AddRange(GetCommandsForKUText(((int)Math.Round(coordinate.GetAltitudeValue(true))).ToString() + "\n", true, plt));
}
return commands;
}
@@ -520,6 +579,7 @@ public static bool GetIsValidTextForKU(string text, uint minLength = 1, uint max
/// The list of commands that is required to enter the text into the KU
public static List GetCommandsForKUText(string text, bool clearFirst, bool IsPilot)
{
+ int ku = (int)(IsPilot ? EDeviceCode.PLT_KU : EDeviceCode.CPG_KU);
List commands = new List();
// DebugCommandList commands = new DebugCommandList();
if (text == null)
@@ -529,7 +589,7 @@ public static List GetCommandsForKUText(string text, bool clearFirst
if (clearFirst)
{
- commands.Add(new DCSCommand((int)(IsPilot ? EDeviceCode.PLT_KU : EDeviceCode.CPG_KU), (int)EKeyCode.KU_CLR));
+ commands.Add(new DCSCommand(ku, (int)EKeyCode.KU_CLR));
}
// type the text
EKeyCode? prevKeyCode = null;
@@ -578,7 +638,7 @@ public static List GetCommandsForKUText(string text, bool clearFirst
{
commands.Last().Delay = 250;
}
- commands.Add(new DCSCommand((int)(IsPilot ? EDeviceCode.PLT_KU : EDeviceCode.CPG_KU), (int)keyCode.Value));
+ commands.Add(new DCSCommand(ku, (int)keyCode.Value));
prevKeyCode = keyCode;
}
}
@@ -596,7 +656,7 @@ protected override List GetPostActions()
return new List()
{
// press TSD to reset the screen
- new DCSCommand((int)(IsPilot ? EDeviceCode.PLT_RMFD : EDeviceCode.CPG_RMFD), (int)EKeyCode.MFD_TSD)
+ new DCSCommand((int)((IsPilot ?? true) ? EDeviceCode.PLT_RMFD : EDeviceCode.CPG_RMFD), (int)EKeyCode.MFD_TSD)
};
}
@@ -608,14 +668,15 @@ protected override List GetPostActions()
///
protected override List GetPreActions()
{
+ bool plt = IsPilot ?? true;
return new List
{
// press TSD
- new DCSCommand((int)(IsPilot ? EDeviceCode.PLT_RMFD : EDeviceCode.CPG_RMFD), (int)EKeyCode.MFD_TSD),
+ new DCSCommand((int)(plt ? EDeviceCode.PLT_RMFD : EDeviceCode.CPG_RMFD), (int)EKeyCode.MFD_TSD),
// go to point page
- new DCSCommand((int)(IsPilot ? EDeviceCode.PLT_RMFD : EDeviceCode.CPG_RMFD), (int)EKeyCode.MFD_B6),
+ new DCSCommand((int)(plt ? EDeviceCode.PLT_RMFD : EDeviceCode.CPG_RMFD), (int)EKeyCode.MFD_B6),
// clear KU
- new DCSCommand((int)(IsPilot ? EDeviceCode.PLT_KU : EDeviceCode.CPG_KU), (int)EKeyCode.KU_CLR),
+ new DCSCommand((int)(plt ? EDeviceCode.PLT_KU : EDeviceCode.CPG_KU), (int)EKeyCode.KU_CLR),
};
}
@@ -662,14 +723,15 @@ public override List GetPointOptionsForType(string pointTypeStr)
public int ClearPoints(EPointType pointType, int startIdx, int endIdx)
{
List commands = new List();
- int deviceId = IsPilot ? (int)EDeviceCode.PLT_RMFD : (int)EDeviceCode.CPG_RMFD;
+ bool plt = IsPilot ?? true;
+ int deviceId = plt ? (int)EDeviceCode.PLT_RMFD : (int)EDeviceCode.CPG_RMFD;
for (int pointIdx = startIdx; pointIdx <= endIdx ; pointIdx++)
{
commands.Add(new DCSCommand(deviceId, (int)EKeyCode.MFD_TSD)); // Reset to TSD after every point, to avoid weirdness.
commands.Add(new DCSCommand(deviceId, (int)EKeyCode.MFD_B6)); // Point
commands.Add(new DCSCommand(deviceId, (int)EKeyCode.MFD_L1)); // Point >
- commands.AddRange(GetCommandsForKUText(pointType.ToString().First() + pointIdx.ToString() + "\n", true, IsPilot)); // Enter point identifier
+ commands.AddRange(GetCommandsForKUText(pointType.ToString().First() + pointIdx.ToString() + "\n", true, plt)); // Enter point identifier
commands.Add(new DCSCommand(deviceId, (int)EKeyCode.MFD_L4)); // Del
commands.Add(new DCSCommand(deviceId, (int)EKeyCode.MFD_L3)); // Yes
}
diff --git a/CoordinateConverter/DCS/Aircraft/AH64/AH64DTCData.cs b/CoordinateConverter/DCS/Aircraft/AH64/AH64DTCData.cs
index 580cea0..cd7f20f 100644
--- a/CoordinateConverter/DCS/Aircraft/AH64/AH64DTCData.cs
+++ b/CoordinateConverter/DCS/Aircraft/AH64/AH64DTCData.cs
@@ -1,4 +1,5 @@
-using Newtonsoft.Json;
+using CoordinateConverter.DCS.Communication;
+using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
@@ -180,7 +181,8 @@ public bool ContainsTuningData
|| UHFTuneSetting != ETuneSetting.No_Change
|| FM1TuneSetting != ETuneSetting.No_Change
|| FM2TuneSetting != ETuneSetting.No_Change
- || HFTuneSetting != ETuneSetting.No_Change;
+ || HFTuneSetting != ETuneSetting.No_Change
+ || UHFGuardReceiver != EUHFGuardReceiver.No_Change;
}
}
@@ -247,6 +249,33 @@ public decimal VHFManualFrequency
/// The uhf tune setting.
///
public ETuneSetting UHFTuneSetting { get; set; } = ETuneSetting.No_Change;
+
+ ///
+ /// Whether the UHF Guard receiver is on or off
+ ///
+ public enum EUHFGuardReceiver
+ {
+ ///
+ /// Guard receiver stays in current configuration
+ ///
+ No_Change,
+ ///
+ /// Guard receiver is disabled
+ ///
+ Off,
+ ///
+ /// Guard receivr is enabled
+ ///
+ On,
+ }
+ ///
+ /// Gets or sets the guard receiver option for the UHF radio
+ ///
+ ///
+ /// The guard receiver setting
+ ///
+ public EUHFGuardReceiver UHFGuardReceiver { get; set; } = EUHFGuardReceiver.No_Change;
+
///
/// Gets or sets the uhf tune preset.
///
@@ -984,7 +1013,35 @@ protected override List GetActions(object item)
if (ContainsTuningData)
{
commands.Add(new DCSCommand(DeviceRMFD, (int)AH64.EKeyCode.MFD_COM));
- // Presets first
+ // UHF Guard receiver
+ if (UHFGuardReceiver != EUHFGuardReceiver.No_Change)
+ {
+ // get current status and press the button if not the correct one
+ int display = (int)(IsPilot ? AH64.EDisplayCodes.PLT_EUFD : AH64.EDisplayCodes.CPG_EUFD);
+ DCSMessage message = new DCSMessage()
+ {
+ GetCockpitDisplayData = new List() { display }
+ };
+ message = DCSConnection.SendRequest(message);
+ if (message != null && message.CockpitDisplayData.ContainsKey(display))
+ {
+ Dictionary displayData = message.CockpitDisplayData[display];
+ if (displayData.ContainsKey("Guard"))
+ {
+ string guardStr = displayData["Guard"];
+ bool currentGuardStatus = !string.IsNullOrEmpty(guardStr);
+
+ if (currentGuardStatus ^ (UHFGuardReceiver == EUHFGuardReceiver.On))
+ {
+ // need to press the buttons, currently on COM page
+ commands.Add(new DCSCommand(DeviceRMFD, (int)AH64.EKeyCode.MFD_T4)); // UHF
+ commands.Add(new DCSCommand(DeviceRMFD, (int)AH64.EKeyCode.MFD_L6)); // GUARD
+ commands.Add(new DCSCommand(DeviceRMFD, (int)AH64.EKeyCode.MFD_COM)); // Reset to com page
+ }
+ }
+ }
+ }
+ // Presets
int presetKey = -1;
if (VHFTuneSetting == ETuneSetting.Preset)
{
diff --git a/CoordinateConverter/DCS/Communication/CoordinateConverter.lua b/CoordinateConverter/DCS/Communication/CoordinateConverter.lua
index b80f84e..a0a80cf 100644
--- a/CoordinateConverter/DCS/Communication/CoordinateConverter.lua
+++ b/CoordinateConverter/DCS/Communication/CoordinateConverter.lua
@@ -1,6 +1,14 @@
-- REF: https://wiki.hoggitworld.com/view/DCS_export
-- REF: https://wiki.hoggitworld.com/view/DCS_Export_Script
+--[[
+
+show_param_handles_list() to show all cockpit parameters in an interactive windows in DCS
+get_param_handle("NAME") to get a handle for that parameter. use :get() to get the value
+ for example get_param_handle("SEAT"):get() -- 0 = PLT, 1 = CPG
+
+]]--
+
local LOG_MODNAME = "COORDINATECONVERTER"
local DEBUGGING = false -- if true logs all the things
local TESTING = false -- if true sends all available data, even unrequested
@@ -19,6 +27,29 @@ local upstreamLuaExportStop = LuaExportStop
local upstreamLuaExportAfterNextFrame = LuaExportAfterNextFrame
local upstreamLuaExportBeforeNextFrame = LuaExportBeforeNextFrame
+-- function to list content of an MFD or other cockpit display
+-- from https://github.com/ciribob/DCS-SimpleRadioStandalone/blob/5542bf796ff7ba54c9641b4e222f610e6cfec53b/Scripts/DCS-SRS/Scripts/DCS-SimpleRadioStandalone.lua#L3400
+function getListIndicatorValue(IndicatorID)
+ local ListIindicator = list_indication(IndicatorID)
+ local TmpReturn = {}
+
+ if ListIindicator == "" then
+ return nil
+ end
+
+ local ListindicatorMatch = ListIindicator:gmatch("-----------------------------------------\n([^\n]+)\n([^\n]*)\n")
+ while true do
+ local Key, Value = ListindicatorMatch()
+ if not Key then
+ break
+ end
+ TmpReturn[Key] = Value
+ end
+
+ return TmpReturn
+end
+
+
function LuaExportStop()
if upstreamLuaExportStop ~= nil then
successful, err = pcall(upstreamLuaExportStop)
@@ -193,6 +224,57 @@ function LuaExportAfterNextFrame()
end
end
+ -- handle get_handle request
+ if data["GetHandleData"] or TESTING then
+ if data["GetHandleData"] then
+ local f = function()
+ if DEBUGGING then
+ log.write(LOG_MODNAME, log.INFO, "Getting handle data")
+ end
+
+ response["HandleData"] = {}
+
+ for _, handleName in pairs(data["GetHandleData"]) do
+ local handle = get_param_handle(handleName)
+ if handle then
+ local data = handle:get()
+ response["HandleData"][handleName] = tostring(data)
+ end
+ end
+ end
+
+ success, errMsg = pcall(f)
+ if not success then
+ log.write(LOG_MODNAME, log.ERROR, "Failure to get handle data: " .. tostring(errMsg))
+ response["ErrorList"][#response["ErrorList"] + 1] = tostring(errMsg)
+ end
+ end
+ end
+
+ if data["GetCockpitDisplayData"] or TESTING then
+ local f = function()
+ if DEBUGGING then
+ log.write(LOG_MODNAME, log.INFO, "Getting cockpit display data")
+ end
+
+ response["CockpitDisplayData"] = {}
+
+ -- loop over 0 to 100 and call getListIndicatorValue
+ for _, displayIndex in ipairs(data["GetCockpitDisplayData"]) do
+ local data = getListIndicatorValue(displayIndex)
+ if data then
+ response["CockpitDisplayData"][tostring(displayIndex)] = data
+ end
+ end
+ end
+
+ success, errMsg = pcall(f)
+ if not success then
+ log.write(LOG_MODNAME, log.ERROR, "Failure to get cockpit display data: " .. tostring(errMsg))
+ response["ErrorList"][#response["ErrorList"] + 1] = tostring(errMsg)
+ end
+ end
+
-- handle camera position request
if data["FetchCameraPosition"] or TESTING then
local f = function()
diff --git a/CoordinateConverter/DCS/Communication/DCSMessage.cs b/CoordinateConverter/DCS/Communication/DCSMessage.cs
index fb60b1a..5c6cddf 100644
--- a/CoordinateConverter/DCS/Communication/DCSMessage.cs
+++ b/CoordinateConverter/DCS/Communication/DCSMessage.cs
@@ -43,6 +43,41 @@ public class DCSMessage
[JsonProperty("Model")]
public string AircraftType = null;
+ ///
+ /// Gets or sets the get handle request.
+ ///
+ ///
+ /// A list of handle names for which to get the data.
+ ///
+ [JsonProperty("GetHandleData")]
+ public List GetHandleData { get; set; } = null;
+
+ ///
+ /// Gets or sets the handle data.
+ ///
+ ///
+ /// The handle data returned by the server.
+ ///
+ [JsonProperty("HandleData")]
+ public Dictionary HandleData { get; set; } = null;
+
+ ///
+ /// Gets or sets whether to fetch cockpit display data.
+ ///
+ ///
+ /// Whether cockpit display data is to be gotten
+ ///
+ [JsonProperty("GetCockpitDisplayData")]
+ public List GetCockpitDisplayData { get; set; } = null;
+ ///
+ /// Gets or sets the cockpit display data.
+ ///
+ ///
+ /// The cockpit display data returned by the server.
+ ///
+ [JsonProperty("CockpitDisplayData")]
+ public Dictionary> CockpitDisplayData { get; set; } = null;
+
///
/// Ground elevation requests for lat/long and their responses
///
diff --git a/CoordinateConverter/DCS/Tools/FormAH64DTC.Designer.cs b/CoordinateConverter/DCS/Tools/FormAH64DTC.Designer.cs
index 5ce99f3..a4f7d26 100644
--- a/CoordinateConverter/DCS/Tools/FormAH64DTC.Designer.cs
+++ b/CoordinateConverter/DCS/Tools/FormAH64DTC.Designer.cs
@@ -240,6 +240,8 @@ private void InitializeComponent()
this.btnSave = new System.Windows.Forms.ToolStripButton();
this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator();
this.btnReset = new System.Windows.Forms.ToolStripButton();
+ this.ddlTuneUHFGuardReciever = new System.Windows.Forms.ComboBox();
+ this.label72 = new System.Windows.Forms.Label();
this.tabControl1.SuspendLayout();
this.tabRadio.SuspendLayout();
this.tabControl2.SuspendLayout();
@@ -1382,6 +1384,8 @@ private void InitializeComponent()
//
// tabTune
//
+ this.tabTune.Controls.Add(this.label72);
+ this.tabTune.Controls.Add(this.ddlTuneUHFGuardReciever);
this.tabTune.Controls.Add(this.groupBox10);
this.tabTune.Controls.Add(this.groupBox9);
this.tabTune.Controls.Add(this.groupBox8);
@@ -2976,6 +2980,25 @@ private void InitializeComponent()
this.btnReset.Text = "Reset";
this.btnReset.Click += new System.EventHandler(this.btnReset_Click);
//
+ // ddlTuneUHFGuardReciever
+ //
+ this.ddlTuneUHFGuardReciever.Font = new System.Drawing.Font("Courier New", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.ddlTuneUHFGuardReciever.FormattingEnabled = true;
+ this.ddlTuneUHFGuardReciever.Location = new System.Drawing.Point(76, 286);
+ this.ddlTuneUHFGuardReciever.Name = "ddlTuneUHFGuardReciever";
+ this.ddlTuneUHFGuardReciever.Size = new System.Drawing.Size(121, 22);
+ this.ddlTuneUHFGuardReciever.TabIndex = 16;
+ this.ddlTuneUHFGuardReciever.SelectedIndexChanged += new System.EventHandler(this.ddlTuneUHFGuardReciever_SelectedIndexChanged);
+ //
+ // label72
+ //
+ this.label72.AutoSize = true;
+ this.label72.Location = new System.Drawing.Point(9, 289);
+ this.label72.Name = "label72";
+ this.label72.Size = new System.Drawing.Size(61, 13);
+ this.label72.TabIndex = 17;
+ this.label72.Text = "UHF Guard";
+ //
// FormAH64DTC
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
@@ -3030,6 +3053,7 @@ private void InitializeComponent()
((System.ComponentModel.ISupportInitialize)(this.splitContainer3)).EndInit();
this.splitContainer3.ResumeLayout(false);
this.tabTune.ResumeLayout(false);
+ this.tabTune.PerformLayout();
this.groupBox10.ResumeLayout(false);
this.groupBox10.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.nudTuneHFRXManualFreq)).EndInit();
@@ -3283,5 +3307,7 @@ private void InitializeComponent()
private System.Windows.Forms.NumericUpDown nudTuneFM2ManualFreq;
private System.Windows.Forms.NumericUpDown nudTuneFM1ManualFreq;
private System.Windows.Forms.NumericUpDown nudTuneHFRXManualFreq;
+ private System.Windows.Forms.ComboBox ddlTuneUHFGuardReciever;
+ private System.Windows.Forms.Label label72;
}
}
\ No newline at end of file
diff --git a/CoordinateConverter/DCS/Tools/FormAH64DTC.cs b/CoordinateConverter/DCS/Tools/FormAH64DTC.cs
index 74e0275..64930dd 100644
--- a/CoordinateConverter/DCS/Tools/FormAH64DTC.cs
+++ b/CoordinateConverter/DCS/Tools/FormAH64DTC.cs
@@ -159,6 +159,15 @@ public FormAH64DTC(bool isPilot)
ddlPresetModemBaudRate.Items.Add(item);
}
+ ddlTuneUHFGuardReciever.ValueMember = "Value";
+ ddlTuneUHFGuardReciever.DisplayMember = "Text";
+ foreach (AH64DTCData.EUHFGuardReceiver guardReceiver in Enum.GetValues(typeof(AH64DTCData.EUHFGuardReceiver)))
+ {
+ string text = Enum.GetName(typeof(AH64DTCData.EUHFGuardReceiver), guardReceiver);
+ ComboItem item = new ComboItem(text, guardReceiver);
+ ddlTuneUHFGuardReciever.Items.Add(item);
+ }
+
// XPNDR
ddlXPNDRMode4Key.ValueMember = "Value";
@@ -421,6 +430,8 @@ private void RefreshControls()
rbTuneUHFNoChange.Checked = data.UHFTuneSetting == AH64DTCData.ETuneSetting.No_Change;
rbTuneUHFPreset.Checked = data.UHFTuneSetting == AH64DTCData.ETuneSetting.Preset;
rbTuneUHFMan.Checked = data.UHFTuneSetting == AH64DTCData.ETuneSetting.Manual;
+
+ ddlTuneUHFGuardReciever.SelectedIndex = ComboItem.FindValue(ddlTuneUHFGuardReciever, data.UHFGuardReceiver) ?? 0;
// FM1
nudTuneFM1ManualFreq.Value = data.FM1ManualFrequency;
ddlTuneFM1Preset.SelectedIndex = ComboItem.FindValue(ddlTuneFM1Preset, data.FM1TunePreset) ?? 0;
@@ -1256,6 +1267,11 @@ private void nudTuneUHFManualFreq_ValueChanged(object sender, EventArgs e)
{
data.UHFManualFrequency = nudTuneUHFManualFreq.Value;
}
+
+ private void ddlTuneUHFGuardReciever_SelectedIndexChanged(object sender, EventArgs e)
+ {
+ data.UHFGuardReceiver = ComboItem.GetSelectedValue(ddlTuneUHFGuardReciever);
+ }
#endregion
#region TuneFM1
diff --git a/CoordinateConverter/DCS/Tools/FormAH64DTC.resx b/CoordinateConverter/DCS/Tools/FormAH64DTC.resx
index 8bfcf80..e6e3808 100644
--- a/CoordinateConverter/DCS/Tools/FormAH64DTC.resx
+++ b/CoordinateConverter/DCS/Tools/FormAH64DTC.resx
@@ -120,6 +120,12 @@
True
+
+ True
+
+
+ True
+
True
@@ -214,73 +220,73 @@
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
- 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
- AA2uijm4svh6AAAAAElFTkSuQmCC
+ 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
+ C4o0bmQsQQAAAABJRU5ErkJggg==
diff --git a/CoordinateConverter/MainForm.Designer.cs b/CoordinateConverter/MainForm.Designer.cs
index 4e5c33b..87205e4 100644
--- a/CoordinateConverter/MainForm.Designer.cs
+++ b/CoordinateConverter/MainForm.Designer.cs
@@ -140,8 +140,7 @@ private void InitializeComponent()
this.tsmi_A10C = new System.Windows.Forms.ToolStripMenuItem();
this.tsmi_A10C_UseMGRS = new System.Windows.Forms.ToolStripMenuItem();
this.tsmi_AH64Menu = new System.Windows.Forms.ToolStripMenuItem();
- this.tsmi_AH64_PLT = new System.Windows.Forms.ToolStripMenuItem();
- this.tsmi_AH64_CPG = new System.Windows.Forms.ToolStripMenuItem();
+ this.tsmi_AH64 = new System.Windows.Forms.ToolStripMenuItem();
this.tsmi_AH64_ClearPoints = new System.Windows.Forms.ToolStripMenuItem();
this.tsmi_AH64_DTC = new System.Windows.Forms.ToolStripMenuItem();
this.tsmi_AV8B = new System.Windows.Forms.ToolStripMenuItem();
@@ -1489,14 +1488,14 @@ private void InitializeComponent()
this.tsmi_Auto.Checked = true;
this.tsmi_Auto.CheckState = System.Windows.Forms.CheckState.Checked;
this.tsmi_Auto.Name = "tsmi_Auto";
- this.tsmi_Auto.Size = new System.Drawing.Size(116, 22);
+ this.tsmi_Auto.Size = new System.Drawing.Size(180, 22);
this.tsmi_Auto.Text = "Auto";
this.tsmi_Auto.Click += new System.EventHandler(this.Tsmi_Aircraft_Auto_Click);
//
// toolStripSeparator1
//
this.toolStripSeparator1.Name = "toolStripSeparator1";
- this.toolStripSeparator1.Size = new System.Drawing.Size(113, 6);
+ this.toolStripSeparator1.Size = new System.Drawing.Size(177, 6);
//
// tsmi_A10CMenu
//
@@ -1504,7 +1503,7 @@ private void InitializeComponent()
this.tsmi_A10C,
this.tsmi_A10C_UseMGRS});
this.tsmi_A10CMenu.Name = "tsmi_A10CMenu";
- this.tsmi_A10CMenu.Size = new System.Drawing.Size(116, 22);
+ this.tsmi_A10CMenu.Size = new System.Drawing.Size(180, 22);
this.tsmi_A10CMenu.Text = "A10C";
//
// tsmi_A10C
@@ -1524,46 +1523,38 @@ private void InitializeComponent()
// tsmi_AH64Menu
//
this.tsmi_AH64Menu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
- this.tsmi_AH64_PLT,
- this.tsmi_AH64_CPG,
+ this.tsmi_AH64,
this.tsmi_AH64_ClearPoints,
this.tsmi_AH64_DTC});
this.tsmi_AH64Menu.Name = "tsmi_AH64Menu";
- this.tsmi_AH64Menu.Size = new System.Drawing.Size(116, 22);
+ this.tsmi_AH64Menu.Size = new System.Drawing.Size(180, 22);
this.tsmi_AH64Menu.Text = "AH64";
//
- // tsmi_AH64_PLT
+ // tsmi_AH64
//
- this.tsmi_AH64_PLT.Name = "tsmi_AH64_PLT";
- this.tsmi_AH64_PLT.Size = new System.Drawing.Size(162, 22);
- this.tsmi_AH64_PLT.Text = "AH64-PLT";
- this.tsmi_AH64_PLT.Click += new System.EventHandler(this.Tsmi_AircraftSelection_Click);
- //
- // tsmi_AH64_CPG
- //
- this.tsmi_AH64_CPG.Name = "tsmi_AH64_CPG";
- this.tsmi_AH64_CPG.Size = new System.Drawing.Size(162, 22);
- this.tsmi_AH64_CPG.Text = "AH-64-CPG";
- this.tsmi_AH64_CPG.Click += new System.EventHandler(this.Tsmi_AircraftSelection_Click);
+ this.tsmi_AH64.Name = "tsmi_AH64";
+ this.tsmi_AH64.Size = new System.Drawing.Size(180, 22);
+ this.tsmi_AH64.Text = "AH64";
+ this.tsmi_AH64.Click += new System.EventHandler(this.Tsmi_AircraftSelection_Click);
//
// tsmi_AH64_ClearPoints
//
this.tsmi_AH64_ClearPoints.Name = "tsmi_AH64_ClearPoints";
- this.tsmi_AH64_ClearPoints.Size = new System.Drawing.Size(162, 22);
+ this.tsmi_AH64_ClearPoints.Size = new System.Drawing.Size(180, 22);
this.tsmi_AH64_ClearPoints.Text = "Clear Points...";
this.tsmi_AH64_ClearPoints.Click += new System.EventHandler(this.Tsmi_AH64_ClearPoints_Click);
//
// tsmi_AH64_DTC
//
this.tsmi_AH64_DTC.Name = "tsmi_AH64_DTC";
- this.tsmi_AH64_DTC.Size = new System.Drawing.Size(162, 22);
+ this.tsmi_AH64_DTC.Size = new System.Drawing.Size(180, 22);
this.tsmi_AH64_DTC.Text = "DTC...";
this.tsmi_AH64_DTC.Click += new System.EventHandler(this.Tsmi_AH64_DTC_Click);
//
// tsmi_AV8B
//
this.tsmi_AV8B.Name = "tsmi_AV8B";
- this.tsmi_AV8B.Size = new System.Drawing.Size(116, 22);
+ this.tsmi_AV8B.Size = new System.Drawing.Size(180, 22);
this.tsmi_AV8B.Text = "AV8B";
this.tsmi_AV8B.Click += new System.EventHandler(this.Tsmi_AircraftSelection_Click);
//
@@ -1573,7 +1564,7 @@ private void InitializeComponent()
this.tsmi_F15E_Pilot,
this.tsmi_F15E_WSO});
this.tsmi_F15EMenu.Name = "tsmi_F15EMenu";
- this.tsmi_F15EMenu.Size = new System.Drawing.Size(116, 22);
+ this.tsmi_F15EMenu.Size = new System.Drawing.Size(180, 22);
this.tsmi_F15EMenu.Text = "F15E";
//
// tsmi_F15E_Pilot
@@ -1596,7 +1587,7 @@ private void InitializeComponent()
this.tsmi_F16,
this.tsmi_F16_SetFirstPoint});
this.tsmi_F16Menu.Name = "tsmi_F16Menu";
- this.tsmi_F16Menu.Size = new System.Drawing.Size(116, 22);
+ this.tsmi_F16Menu.Size = new System.Drawing.Size(180, 22);
this.tsmi_F16Menu.Text = "F16";
//
// tsmi_F16
@@ -1616,7 +1607,7 @@ private void InitializeComponent()
// tsmi_F18
//
this.tsmi_F18.Name = "tsmi_F18";
- this.tsmi_F18.Size = new System.Drawing.Size(116, 22);
+ this.tsmi_F18.Size = new System.Drawing.Size(180, 22);
this.tsmi_F18.Text = "F18";
this.tsmi_F18.Click += new System.EventHandler(this.Tsmi_AircraftSelection_Click);
//
@@ -1626,7 +1617,7 @@ private void InitializeComponent()
this.tsmi_JF17,
this.tsmi_JF17_SetFirstPoint});
this.tsmi_JF17Menu.Name = "tsmi_JF17Menu";
- this.tsmi_JF17Menu.Size = new System.Drawing.Size(116, 22);
+ this.tsmi_JF17Menu.Size = new System.Drawing.Size(180, 22);
this.tsmi_JF17Menu.Text = "JF17";
//
// tsmi_JF17
@@ -1646,14 +1637,14 @@ private void InitializeComponent()
// tsmi_KA50
//
this.tsmi_KA50.Name = "tsmi_KA50";
- this.tsmi_KA50.Size = new System.Drawing.Size(116, 22);
+ this.tsmi_KA50.Size = new System.Drawing.Size(180, 22);
this.tsmi_KA50.Text = "KA50";
this.tsmi_KA50.Click += new System.EventHandler(this.Tsmi_AircraftSelection_Click);
//
// tsmi_M2000
//
this.tsmi_M2000.Name = "tsmi_M2000";
- this.tsmi_M2000.Size = new System.Drawing.Size(116, 22);
+ this.tsmi_M2000.Size = new System.Drawing.Size(180, 22);
this.tsmi_M2000.Text = "M2000";
this.tsmi_M2000.Click += new System.EventHandler(this.Tsmi_AircraftSelection_Click);
//
@@ -2128,8 +2119,7 @@ private void InitializeComponent()
private ToolStripMenuItem tsmi_Opacity75;
private ToolStripMenuItem tsmi_ImportUnits;
private ToolStripMenuItem tsmi_AH64Menu;
- private ToolStripMenuItem tsmi_AH64_PLT;
- private ToolStripMenuItem tsmi_AH64_CPG;
+ private ToolStripMenuItem tsmi_AH64;
private ToolStripMenuItem tsmi_AH64_ClearPoints;
private ToolStripMenuItem tsmi_F15EMenu;
private ToolStripMenuItem tsmi_F15E_Pilot;
diff --git a/CoordinateConverter/MainForm.cs b/CoordinateConverter/MainForm.cs
index 27851a0..f4987a6 100644
--- a/CoordinateConverter/MainForm.cs
+++ b/CoordinateConverter/MainForm.cs
@@ -20,7 +20,7 @@ namespace CoordinateConverter
///
public partial class MainForm : Form
{
- private readonly GitHub.Version VERSION = new GitHub.Version(0, 6, 13);
+ private readonly GitHub.Version VERSION = new GitHub.Version(0, 6, 14);
#pragma warning disable CS1591 // Missing XML comment for publicly visible type or member
public static readonly Color ERROR_COLOR = Color.Pink;
@@ -1819,8 +1819,7 @@ private List AircraftSelectionMenuStripItems {
get => new List()
{
tsmi_A10C,
- tsmi_AH64_CPG,
- tsmi_AH64_PLT,
+ tsmi_AH64,
tsmi_AV8B,
tsmi_F15E_Pilot,
tsmi_F15E_WSO,
@@ -1837,7 +1836,7 @@ private Dictionary> AircraftMenuStripItemsForAircr
get => new Dictionary>()
{
{ typeof(A10C), new List() { tsmi_A10C, tsmi_A10C_UseMGRS } },
- { typeof(AH64), new List() { tsmi_AH64_CPG, tsmi_AH64_PLT, tsmi_AH64_ClearPoints, tsmi_AH64_DTC } },
+ { typeof(AH64), new List() { tsmi_AH64, tsmi_AH64_ClearPoints, tsmi_AH64_DTC } },
{ typeof(AV8B), new List() { tsmi_AV8B } },
{ typeof(F15E), new List() { tsmi_F15E_Pilot, tsmi_F15E_WSO } },
{ typeof(F16C), new List() { tsmi_F16, tsmi_F16_SetFirstPoint } },
@@ -1845,7 +1844,6 @@ private Dictionary> AircraftMenuStripItemsForAircr
{ typeof(F18C), new List() { tsmi_F18 } },
{ typeof(KA50), new List() { tsmi_KA50 } },
{ typeof(M2000), new List() { tsmi_M2000 } },
-
};
}
@@ -1901,8 +1899,7 @@ private void AutoSelectAircraft(string model)
{
break;
}
- FormAskBinaryQuestion isPltForm = new FormAskBinaryQuestion(this, "Which station are you in?", "Pilot", "CPG");
- Tsmi_AircraftSelection_Click(isPltForm.Result ? tsmi_AH64_PLT : tsmi_AH64_CPG, null);
+ Tsmi_AircraftSelection_Click(tsmi_AH64, null);
break;
case "FA-18C_hornet":
if (selectedAircraft != null && selectedAircraft.GetType() == typeof(F18C))
@@ -2007,13 +2004,9 @@ private void Tsmi_AircraftSelection_Click(object objSender, EventArgs e)
private bool SetSelectedAircraft(string ControlName)
{
// Remind user here: "Transfer uses MGRS instead of L/L if MGRS selected, cockpit must match"
- if (ControlName == tsmi_AH64_PLT.Name)
- {
- selectedAircraft = new AH64(true);
- }
- else if (ControlName == tsmi_AH64_CPG.Name)
+ if (ControlName == tsmi_AH64.Name)
{
- selectedAircraft = new AH64(false);
+ selectedAircraft = new AH64();
}
else if (ControlName == tsmi_F18.Name)
{
@@ -2834,7 +2827,7 @@ private void Tsmi_CheckForUpdates_Click(object sender, EventArgs e)
private void Tsmi_AH64_DTC_Click(object sender, EventArgs e)
{
- var ah64DTCForm = new FormAH64DTC((selectedAircraft as AH64).IsPilot);
+ var ah64DTCForm = new FormAH64DTC((selectedAircraft as AH64).IsPilot ?? true);
ah64DTCForm.TopMost = TopMost;
ah64DTCForm.ShowDialog();
pb_Transfer.Value = 0;
diff --git a/CoordinateConverter/todo.txt b/CoordinateConverter/todo.txt
index 3efe8e2..b987084 100644
--- a/CoordinateConverter/todo.txt
+++ b/CoordinateConverter/todo.txt
@@ -1,6 +1,18 @@
Unit list:
- Filter by unit type/name
+AH-64 DTC:
+ - Set up map options
+ - different lrfd/lst based on cockpit display data
+
+A-10C:
+ - Auto UTM/LL detection
+
+F-18:
+ - Auto set PRECISE
+ - Smarter Weapons selection, not based on wing loadout
+
+
Data Entry
- Fix spurious data entry errors for AH64 KU
diff --git a/Installer/Installer.wixproj b/Installer/Installer.wixproj
index 3c033e2..c61d09f 100644
--- a/Installer/Installer.wixproj
+++ b/Installer/Installer.wixproj
@@ -1,9 +1,9 @@
- Version=0.6.13
+ Version=0.6.14
- Version=0.6.13
+ Version=0.6.14