From 11774d86089197d33596a2d1eb3904ae500026f2 Mon Sep 17 00:00:00 2001 From: Jello Date: Wed, 4 Feb 2026 11:11:10 -0500 Subject: [PATCH 1/2] auto enable joystick setting added checkbox in planner configs to auto enable joysticks when connected joystick loop checks the auto enable setting and enables the joystick if available joystick setup enable/disable button is greyed out when auto enable is turned on --- .../ConfigPlanner.Designer.cs | 10 + GCSViews/ConfigurationView/ConfigPlanner.cs | 6 + GCSViews/ConfigurationView/ConfigPlanner.resx | 216 ++++++++++-------- Joystick/JoystickSetup.cs | 78 +++---- MainV2.cs | 30 +++ 5 files changed, 208 insertions(+), 132 deletions(-) diff --git a/GCSViews/ConfigurationView/ConfigPlanner.Designer.cs b/GCSViews/ConfigurationView/ConfigPlanner.Designer.cs index d168c8790b..f353891d10 100644 --- a/GCSViews/ConfigurationView/ConfigPlanner.Designer.cs +++ b/GCSViews/ConfigurationView/ConfigPlanner.Designer.cs @@ -123,6 +123,7 @@ private void InitializeComponent() this.label13 = new System.Windows.Forms.Label(); this.BUT_mapCacheDir = new MissionPlanner.Controls.MyButton(); this.CHK_rtsresetesp32 = new System.Windows.Forms.CheckBox(); + this.CHK_joystickautoenable = new System.Windows.Forms.CheckBox(); ((System.ComponentModel.ISupportInitialize)(this.NUM_tracklength)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.num_gcsid)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.num_linelength)).BeginInit(); @@ -891,9 +892,17 @@ private void InitializeComponent() this.CHK_rtsresetesp32.UseVisualStyleBackColor = true; this.CHK_rtsresetesp32.CheckedChanged += new System.EventHandler(this.CHK_rtsresetesp32_CheckedChanged); // + // CHK_joystickautoenable + // + resources.ApplyResources(this.CHK_joystickautoenable, "CHK_joystickautoenable"); + this.CHK_joystickautoenable.Name = "CHK_joystickautoenable"; + this.CHK_joystickautoenable.UseVisualStyleBackColor = true; + this.CHK_joystickautoenable.CheckedChanged += new System.EventHandler(this.CHK_joystickautoenable_CheckedChanged); + // // ConfigPlanner // resources.ApplyResources(this, "$this"); + this.Controls.Add(this.CHK_joystickautoenable); this.Controls.Add(this.CHK_rtsresetesp32); this.Controls.Add(this.label10); this.Controls.Add(this.cmb_secondarydisplaystyle); @@ -1094,5 +1103,6 @@ private void InitializeComponent() public System.Windows.Forms.ComboBox CMB_mapCache; private Controls.MyButton BUT_mapCacheDir; private System.Windows.Forms.CheckBox CHK_rtsresetesp32; + private System.Windows.Forms.CheckBox CHK_joystickautoenable; } } diff --git a/GCSViews/ConfigurationView/ConfigPlanner.cs b/GCSViews/ConfigurationView/ConfigPlanner.cs index 4770d7bef9..6ca7c20a04 100644 --- a/GCSViews/ConfigurationView/ConfigPlanner.cs +++ b/GCSViews/ConfigurationView/ConfigPlanner.cs @@ -174,6 +174,7 @@ public void Activate() // setup other config state SetCheckboxFromConfig("CHK_resetapmonconnect", CHK_resetapmonconnect); SetCheckboxFromConfig("CHK_rtsresetesp32", CHK_rtsresetesp32); + SetCheckboxFromConfig("CHK_Joystick_AutoEnable", CHK_joystickautoenable); CMB_rateattitude.Text = MainV2.comPort.MAV.cs.rateattitude.ToString(); CMB_rateposition.Text = MainV2.comPort.MAV.cs.rateposition.ToString(); @@ -1190,5 +1191,10 @@ private void BUT_mapCacheDir_Click(object sender, EventArgs e) { } } + + private void CHK_joystickautoenable_CheckedChanged(object sender, EventArgs e) + { + Settings.Instance["CHK_Joystick_AutoEnable"] = CHK_joystickautoenable.Checked.ToString(); + } } } \ No newline at end of file diff --git a/GCSViews/ConfigurationView/ConfigPlanner.resx b/GCSViews/ConfigurationView/ConfigPlanner.resx index 86448cb9e4..ce8165f040 100644 --- a/GCSViews/ConfigurationView/ConfigPlanner.resx +++ b/GCSViews/ConfigurationView/ConfigPlanner.resx @@ -145,7 +145,7 @@ $this - 43 + 44 -1 @@ -211,7 +211,7 @@ $this - 44 + 45 True @@ -241,7 +241,7 @@ $this - 45 + 46 107, 35 @@ -262,7 +262,7 @@ $this - 46 + 47 True @@ -292,7 +292,7 @@ $this - 48 + 49 NoControl @@ -319,7 +319,7 @@ $this - 49 + 50 True @@ -349,7 +349,7 @@ $this - 50 + 51 NoControl @@ -376,7 +376,7 @@ $this - 51 + 52 True @@ -406,7 +406,7 @@ $this - 52 + 53 107, 300 @@ -427,7 +427,7 @@ $this - 54 + 55 True @@ -460,7 +460,7 @@ $this - 55 + 56 True @@ -490,7 +490,7 @@ $this - 56 + 57 NoControl @@ -517,7 +517,7 @@ $this - 57 + 58 Bottom, Left @@ -547,7 +547,7 @@ $this - 58 + 59 NoControl @@ -574,7 +574,7 @@ $this - 59 + 60 -1 @@ -640,7 +640,7 @@ $this - 60 + 61 NoControl @@ -667,7 +667,7 @@ $this - 61 + 62 NoControl @@ -694,7 +694,7 @@ $this - 62 + 63 NoControl @@ -721,7 +721,7 @@ $this - 63 + 64 True @@ -751,7 +751,7 @@ $this - 64 + 65 -1 @@ -817,7 +817,7 @@ $this - 65 + 66 -1 @@ -883,7 +883,7 @@ $this - 66 + 67 -1 @@ -946,7 +946,7 @@ $this - 67 + 68 NoControl @@ -974,7 +974,7 @@ $this - 68 + 69 True @@ -1004,7 +1004,7 @@ $this - 69 + 70 True @@ -1034,7 +1034,7 @@ $this - 70 + 71 107, 222 @@ -1055,7 +1055,7 @@ $this - 71 + 72 107, 195 @@ -1076,7 +1076,7 @@ $this - 72 + 73 True @@ -1106,7 +1106,7 @@ $this - 73 + 74 True @@ -1136,7 +1136,7 @@ $this - 74 + 75 True @@ -1169,7 +1169,7 @@ $this - 75 + 76 True @@ -1202,7 +1202,7 @@ $this - 76 + 77 True @@ -1235,7 +1235,7 @@ $this - 77 + 78 True @@ -1268,7 +1268,7 @@ $this - 78 + 79 True @@ -1298,7 +1298,7 @@ $this - 79 + 80 107, 62 @@ -1319,7 +1319,7 @@ $this - 80 + 81 107, 111 @@ -1340,7 +1340,7 @@ $this - 81 + 82 107, 139 @@ -1361,7 +1361,7 @@ $this - 82 + 83 True @@ -1391,7 +1391,7 @@ $this - 83 + 84 True @@ -1421,7 +1421,7 @@ $this - 84 + 85 NoControl @@ -1448,7 +1448,7 @@ $this - 85 + 86 True @@ -1478,7 +1478,7 @@ $this - 86 + 87 107, 8 @@ -1499,7 +1499,7 @@ $this - 87 + 88 True @@ -1529,7 +1529,7 @@ $this - 41 + 42 NoControl @@ -1556,7 +1556,7 @@ $this - 42 + 43 NoControl @@ -1583,7 +1583,7 @@ $this - 39 + 40 NoControl @@ -1610,7 +1610,7 @@ $this - 40 + 41 NoControl @@ -1637,7 +1637,7 @@ $this - 88 + 89 NoControl @@ -1664,7 +1664,7 @@ $this - 89 + 90 NoControl @@ -1691,7 +1691,7 @@ $this - 90 + 91 True @@ -1721,7 +1721,7 @@ $this - 38 + 39 107, 395 @@ -1742,7 +1742,7 @@ $this - 37 + 38 NoControl @@ -1769,7 +1769,7 @@ $this - 36 + 37 True @@ -1799,7 +1799,7 @@ $this - 35 + 36 107, 421 @@ -1820,7 +1820,7 @@ $this - 34 + 35 NoControl @@ -1847,7 +1847,7 @@ $this - 33 + 34 True @@ -1880,7 +1880,7 @@ $this - 32 + 33 NoControl @@ -1907,7 +1907,7 @@ $this - 31 + 32 True @@ -1937,7 +1937,7 @@ $this - 30 + 31 True @@ -1967,7 +1967,7 @@ $this - 29 + 30 True @@ -1997,7 +1997,7 @@ $this - 28 + 29 True @@ -2030,7 +2030,7 @@ $this - 21 + 22 True @@ -2060,7 +2060,7 @@ $this - 20 + 21 True @@ -2090,7 +2090,7 @@ $this - 19 + 20 True @@ -2120,7 +2120,7 @@ $this - 18 + 19 Bottom, Left @@ -2150,7 +2150,7 @@ $this - 17 + 18 True @@ -2180,7 +2180,7 @@ $this - 16 + 17 107, 448 @@ -2201,7 +2201,7 @@ $this - 15 + 16 True @@ -2231,7 +2231,7 @@ $this - 14 + 15 True @@ -2258,7 +2258,7 @@ $this - 13 + 14 True @@ -2288,7 +2288,7 @@ $this - 12 + 13 True @@ -2318,7 +2318,7 @@ $this - 10 + 11 320, 195 @@ -2339,7 +2339,7 @@ $this - 11 + 12 107, 475 @@ -2360,7 +2360,7 @@ $this - 9 + 10 True @@ -2390,7 +2390,7 @@ $this - 8 + 9 True @@ -2420,7 +2420,7 @@ $this - 7 + 8 True @@ -2450,7 +2450,7 @@ $this - 6 + 7 True @@ -2483,7 +2483,7 @@ $this - 5 + 6 NoControl @@ -2510,7 +2510,7 @@ $this - 4 + 5 True @@ -2540,7 +2540,7 @@ $this - 3 + 4 107, 524 @@ -2561,7 +2561,7 @@ $this - 2 + 3 True @@ -2591,7 +2591,7 @@ $this - 27 + 28 True @@ -2621,7 +2621,7 @@ $this - 1 + 2 True @@ -2651,7 +2651,7 @@ $this - 25 + 26 True @@ -2681,7 +2681,7 @@ $this - 24 + 25 True @@ -2711,7 +2711,7 @@ $this - 23 + 24 True @@ -2741,7 +2741,7 @@ $this - 22 + 23 768, 500 @@ -2762,7 +2762,7 @@ $this - 53 + 54 True @@ -2792,7 +2792,7 @@ $this - 47 + 48 True @@ -2822,7 +2822,7 @@ $this - 26 + 27 107, 653 @@ -2843,7 +2843,7 @@ $this - 92 + 93 True @@ -2873,7 +2873,7 @@ $this - 91 + 92 NoControl @@ -2900,7 +2900,7 @@ $this - 93 + 94 NoControl @@ -2927,6 +2927,36 @@ $this + 1 + + + True + + + NoControl + + + 212, 170 + + + 130, 17 + + + 132 + + + Auto Enable Joysticks + + + CHK_joystickautoenable + + + System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + $this + + 0 diff --git a/Joystick/JoystickSetup.cs b/Joystick/JoystickSetup.cs index 4baff5bf98..971987669b 100644 --- a/Joystick/JoystickSetup.cs +++ b/Joystick/JoystickSetup.cs @@ -8,7 +8,7 @@ namespace MissionPlanner.Joystick -{ +{ public partial class JoystickSetup : MyUserControl, IDeactivate { bool startup = true; @@ -94,17 +94,17 @@ private void Joystick_Load(object sender, EventArgs e) { return (short)MainV2.comPort.MAV.cs.GetType().GetField("rcoverridech" + ax.ChannelNo) .GetValue(MainV2.comPort.MAV.cs); - }; - ax.Expo = () => - { - if (int.TryParse(ax.ExpoValue, out int expoValue)) - { - MainV2.joystick?.setExpo(ax.ChannelNo, expoValue); - } - }; - - Controls.Add(ax); - + }; + ax.Expo = () => + { + if (int.TryParse(ax.ExpoValue, out int expoValue)) + { + MainV2.joystick?.setExpo(ax.ChannelNo, expoValue); + } + }; + + Controls.Add(ax); + y += ax.Height; @@ -115,6 +115,8 @@ private void Joystick_Load(object sender, EventArgs e) this.Width = ax.Right; } + BUT_enable.Enabled = !Settings.Instance.GetBoolean("CHK_Joystick_AutoEnable"); + this.ResumeLayout(); if (MainV2.joystick != null && MainV2.joystick.enabled) @@ -178,8 +180,6 @@ private void BUT_enable_Click(object sender, EventArgs e) MainV2.joystick.clearRCOverride(); - MainV2.joystick = null; - //timer1.Stop(); @@ -299,8 +299,8 @@ private void timer1_Tick(object sender, EventArgs e) var items = this.Controls.Find("hbar" + name, false); - if (items.Length > 0) - ((HorizontalProgressBar)items[0]).Value = + if (items.Length > 0) + ((HorizontalProgressBar)items[0]).Value = MainV2.joystick.isButtonPressed(f) ? 100 : 0; } } @@ -372,20 +372,20 @@ void doButtontoUI(string name, int x, int y) butnumberlist.Location = new Point(butlabel.Right, y); butnumberlist.Size = new Size(70, 21); //butnumberlist.DataSource = getButtonNumbers(); - - butnumberlist.Items.AddRange(getButtonNumbers().Select(item => item.ToString()).ToArray()); - butnumberlist.SelectedIndex = 0; - - + + butnumberlist.Items.AddRange(getButtonNumbers().Select(item => item.ToString()).ToArray()); + butnumberlist.SelectedIndex = 0; + + butnumberlist.DropDownStyle = ComboBoxStyle.DropDownList; - butnumberlist.Name = "cmbbutton" + name; - - //butnumberlist.SelectedItem = "-1"; + butnumberlist.Name = "cmbbutton" + name; + + //butnumberlist.SelectedItem = "-1"; butnumberlist.SelectedItem = config.buttonno.ToString(); - //if (Settings.Instance["butno" + name] != null) + //if (Settings.Instance["butno" + name] != null) // butnumberlist.Text = (Settings.Instance["butno" + name].ToString()); - //if (config.buttonno != -1) + //if (config.buttonno != -1) //butnumberlist.Text = config.buttonno.ToString(); @@ -406,13 +406,13 @@ void doButtontoUI(string name, int x, int y) cmbaction.Location = new Point(hbar.Right + 5, y); cmbaction.Size = new Size(100, 21); - //cmbaction.DataSource = Enum.GetNames(typeof(buttonfunction)); - cmbaction.Items.AddRange(Enum.GetNames(typeof(buttonfunction))); - - - //Common.getModesList(MainV2.comPort.MAV.cs); - //cmbaction.ValueMember = "Key"; - //cmbaction.DisplayMember = "Value"; + //cmbaction.DataSource = Enum.GetNames(typeof(buttonfunction)); + cmbaction.Items.AddRange(Enum.GetNames(typeof(buttonfunction))); + + + //Common.getModesList(MainV2.comPort.MAV.cs); + //cmbaction.ValueMember = "Key"; + //cmbaction.DisplayMember = "Value"; cmbaction.Tag = name; cmbaction.DropDownStyle = ComboBoxStyle.DropDownList; cmbaction.Name = "cmbaction" + name; @@ -520,17 +520,17 @@ private void CHK_elevons_CheckedChanged(object sender, EventArgs e) private void chk_manualcontrol_CheckedChanged(object sender, EventArgs e) { MainV2.joystick.manual_control = chk_manualcontrol.Checked; - } - - public void Deactivate() - { + } + + public void Deactivate() + { timer1.Stop(); if (MainV2.joystick != null && MainV2.joystick.enabled == false) { MainV2.joystick.UnAcquireJoyStick(); MainV2.joystick = null; - } - } + } + } } } \ No newline at end of file diff --git a/MainV2.cs b/MainV2.cs index c940ab445d..959fb65f09 100644 --- a/MainV2.cs +++ b/MainV2.cs @@ -2236,6 +2236,7 @@ private async void joysticksend() int count = 0; DateTime lastratechange = DateTime.Now; + DateTime start = DateTime.Now; joystickthreadrun = true; @@ -2255,6 +2256,35 @@ private async void joysticksend() { //joystick stuff + bool autoEnable = Settings.Instance.GetBoolean("CHK_Joystick_AutoEnable"); + + if (autoEnable && (DateTime.Now - start).TotalSeconds > 0.5 ) + { + string name = Settings.Instance["joystick_name"]; + if (joystick == null && name != null) + { + // all config is loaded from the xmls + Joystick.JoystickBase joy = JoystickBase.Create(() => MainV2.comPort); + + if (!joy.start(name)) + { + joy.Dispose(); + } else + { + joystick = joy; + } + if (Settings.Instance.ContainsKey("joy_elevons")) + { + joystick.elevons = bool.Parse(Settings.Instance["joy_elevons"].ToString()); + } + } + } + + if (joystick != null && !joystick.enabled && autoEnable) + { + joystick.enabled = true; + } + if (joystick != null && joystick.enabled) { if (!joystick.manual_control) From e48f5170399e47dde3cf72829aed4ace4ca0a4e4 Mon Sep 17 00:00:00 2001 From: Angelo Brajuka <35403243+angebrajuka@users.noreply.github.com> Date: Mon, 30 Mar 2026 12:41:55 -0400 Subject: [PATCH 2/2] dont check joystick elevons when joystick is null Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --- MainV2.cs | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/MainV2.cs b/MainV2.cs index 959fb65f09..1c9ba04ffb 100644 --- a/MainV2.cs +++ b/MainV2.cs @@ -2269,13 +2269,15 @@ private async void joysticksend() if (!joy.start(name)) { joy.Dispose(); - } else + } + else { joystick = joy; - } - if (Settings.Instance.ContainsKey("joy_elevons")) - { - joystick.elevons = bool.Parse(Settings.Instance["joy_elevons"].ToString()); + + if (Settings.Instance.ContainsKey("joy_elevons")) + { + joystick.elevons = bool.Parse(Settings.Instance["joy_elevons"].ToString()); + } } } }