mirror of
https://github.com/ArduPilot/ardupilot
synced 2025-01-04 06:58:27 -04:00
944488afaf
Convert to IActivate, IDeactivate scheme, thanks andrew add support for rfcomm* interfaces on linux fix guage off screen draw mono issue. remove use of BackStageViewContentPanel andrews spacer changes - not using dues to screen space issue change configpanel constructor to load xml directly remove IMavlink Interface fix hsi off screen draw issue on mono modify hud to use sprite fonts, instead of drawing via GDI+ modify progress reporter to use a 10hz timer to update screen, using invoke/begininvoke fails on mono at 50hz (over 100ms per call). fix targetalt and target airspeed jumping issue. lots of cleanup on tab switching, ie stoping timers/other 3dr radio status led update update ardurover car icon speedup georef image screen. tested on over 1000 images.
287 lines
12 KiB
C#
287 lines
12 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.ComponentModel;
|
|
using System.Drawing;
|
|
using System.Data;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Windows.Forms;
|
|
using ArdupilotMega.Controls.BackstageView;
|
|
using ArdupilotMega.Utilities;
|
|
using ArdupilotMega.Controls;
|
|
|
|
namespace ArdupilotMega.GCSViews.ConfigurationView
|
|
{
|
|
public partial class ConfigFlightModes : UserControl, IActivate, IDeactivate
|
|
{
|
|
Timer timer = new Timer();
|
|
|
|
public ConfigFlightModes()
|
|
{
|
|
InitializeComponent();
|
|
}
|
|
|
|
void timer_Tick(object sender, EventArgs e)
|
|
{
|
|
try
|
|
{
|
|
MainV2.cs.UpdateCurrentSettings(currentStateBindingSource);
|
|
}
|
|
catch { }
|
|
|
|
float pwm = 0;
|
|
|
|
if (MainV2.cs.firmware == MainV2.Firmwares.ArduPlane || MainV2.cs.firmware == MainV2.Firmwares.ArduRover) // APM
|
|
{
|
|
if (MainV2.comPort.param.ContainsKey("FLTMODE_CH"))
|
|
{
|
|
switch ((int)(float)MainV2.comPort.param["FLTMODE_CH"])
|
|
{
|
|
case 5:
|
|
pwm = MainV2.cs.ch5in;
|
|
break;
|
|
case 6:
|
|
pwm = MainV2.cs.ch6in;
|
|
break;
|
|
case 7:
|
|
pwm = MainV2.cs.ch7in;
|
|
break;
|
|
case 8:
|
|
pwm = MainV2.cs.ch8in;
|
|
break;
|
|
default:
|
|
|
|
break;
|
|
}
|
|
|
|
LBL_flightmodepwm.Text = MainV2.comPort.param["FLTMODE_CH"].ToString() + ": " + pwm.ToString();
|
|
}
|
|
}
|
|
|
|
if (MainV2.cs.firmware == MainV2.Firmwares.ArduCopter2) // ac2
|
|
{
|
|
pwm = MainV2.cs.ch5in;
|
|
LBL_flightmodepwm.Text = "5: " + MainV2.cs.ch5in.ToString();
|
|
}
|
|
|
|
Control[] fmodelist = new Control[] { CMB_fmode1, CMB_fmode2, CMB_fmode3, CMB_fmode4, CMB_fmode5, CMB_fmode6 };
|
|
|
|
foreach (Control ctl in fmodelist)
|
|
{
|
|
ctl.BackColor = Color.FromArgb(0x43, 0x44, 0x45);
|
|
}
|
|
|
|
byte no = readSwitch(pwm);
|
|
|
|
fmodelist[no].BackColor = Color.Green;
|
|
}
|
|
|
|
// from arducopter code
|
|
byte readSwitch(float inpwm)
|
|
{
|
|
int pulsewidth = (int)inpwm; // default for Arducopter
|
|
|
|
if (pulsewidth > 1230 && pulsewidth <= 1360) return 1;
|
|
if (pulsewidth > 1360 && pulsewidth <= 1490) return 2;
|
|
if (pulsewidth > 1490 && pulsewidth <= 1620) return 3;
|
|
if (pulsewidth > 1620 && pulsewidth <= 1749) return 4; // Software Manual
|
|
if (pulsewidth >= 1750) return 5; // Hardware Manual
|
|
return 0;
|
|
}
|
|
|
|
private void BUT_SaveModes_Click(object sender, EventArgs e)
|
|
{
|
|
try
|
|
{
|
|
MainV2.comPort.setParam("FLTMODE1", (float)Int32.Parse(CMB_fmode1.SelectedValue.ToString()));
|
|
MainV2.comPort.setParam("FLTMODE2", (float)Int32.Parse(CMB_fmode2.SelectedValue.ToString()));
|
|
MainV2.comPort.setParam("FLTMODE3", (float)Int32.Parse(CMB_fmode3.SelectedValue.ToString()));
|
|
MainV2.comPort.setParam("FLTMODE4", (float)Int32.Parse(CMB_fmode4.SelectedValue.ToString()));
|
|
MainV2.comPort.setParam("FLTMODE5", (float)Int32.Parse(CMB_fmode5.SelectedValue.ToString()));
|
|
MainV2.comPort.setParam("FLTMODE6", (float)Int32.Parse(CMB_fmode6.SelectedValue.ToString()));
|
|
|
|
if (MainV2.cs.firmware == MainV2.Firmwares.ArduCopter2) // ac2
|
|
{
|
|
float value = (float)(CB_simple1.Checked ? (int)SimpleMode.Simple1 : 0) + (CB_simple2.Checked ? (int)SimpleMode.Simple2 : 0) + (CB_simple3.Checked ? (int)SimpleMode.Simple3 : 0)
|
|
+ (CB_simple4.Checked ? (int)SimpleMode.Simple4 : 0) + (CB_simple5.Checked ? (int)SimpleMode.Simple5 : 0) + (CB_simple6.Checked ? (int)SimpleMode.Simple6 : 0);
|
|
if (MainV2.comPort.param.ContainsKey("SIMPLE"))
|
|
MainV2.comPort.setParam("SIMPLE", value);
|
|
}
|
|
}
|
|
catch { CustomMessageBox.Show("Failed to set Flight modes"); }
|
|
BUT_SaveModes.Text = "Complete";
|
|
}
|
|
|
|
[Flags]
|
|
public enum SimpleMode
|
|
{
|
|
None = 0,
|
|
Simple1 = 1,
|
|
Simple2 = 2,
|
|
Simple3 = 4,
|
|
Simple4 = 8,
|
|
Simple5 = 16,
|
|
Simple6 = 32,
|
|
}
|
|
|
|
public void Deactivate()
|
|
{
|
|
timer.Stop();
|
|
}
|
|
|
|
public void Activate()
|
|
{
|
|
if (MainV2.cs.firmware == MainV2.Firmwares.ArduPlane) // APM
|
|
{
|
|
CB_simple1.Visible = false;
|
|
CB_simple2.Visible = false;
|
|
CB_simple3.Visible = false;
|
|
CB_simple4.Visible = false;
|
|
CB_simple5.Visible = false;
|
|
CB_simple6.Visible = false;
|
|
|
|
var flightModes = EnumTranslator.Translate<Common.apmmodes>();
|
|
|
|
CMB_fmode1.DataSource = flightModes.ToList();
|
|
CMB_fmode1.ValueMember = "Key";
|
|
CMB_fmode1.DisplayMember = "Value";
|
|
|
|
CMB_fmode2.DataSource = flightModes.ToList();
|
|
CMB_fmode2.ValueMember = "Key";
|
|
CMB_fmode2.DisplayMember = "Value";
|
|
|
|
CMB_fmode3.DataSource = flightModes.ToList();
|
|
CMB_fmode3.ValueMember = "Key";
|
|
CMB_fmode3.DisplayMember = "Value";
|
|
|
|
CMB_fmode4.DataSource = flightModes.ToList();
|
|
CMB_fmode4.ValueMember = "Key";
|
|
CMB_fmode4.DisplayMember = "Value";
|
|
|
|
CMB_fmode5.DataSource = flightModes.ToList();
|
|
CMB_fmode5.ValueMember = "Key";
|
|
CMB_fmode5.DisplayMember = "Value";
|
|
|
|
CMB_fmode6.DataSource = flightModes.ToList();
|
|
CMB_fmode6.ValueMember = "Key";
|
|
CMB_fmode6.DisplayMember = "Value";
|
|
|
|
try
|
|
{
|
|
CMB_fmode1.Text = EnumTranslator.GetDisplayText(Enum.Parse(typeof(Common.apmmodes), MainV2.comPort.param["FLTMODE1"].ToString()));
|
|
CMB_fmode2.Text = EnumTranslator.GetDisplayText(Enum.Parse(typeof(Common.apmmodes), MainV2.comPort.param["FLTMODE2"].ToString()));
|
|
CMB_fmode3.Text = EnumTranslator.GetDisplayText(Enum.Parse(typeof(Common.apmmodes), MainV2.comPort.param["FLTMODE3"].ToString()));
|
|
CMB_fmode4.Text = EnumTranslator.GetDisplayText(Enum.Parse(typeof(Common.apmmodes), MainV2.comPort.param["FLTMODE4"].ToString()));
|
|
CMB_fmode5.Text = EnumTranslator.GetDisplayText(Enum.Parse(typeof(Common.apmmodes), MainV2.comPort.param["FLTMODE5"].ToString()));
|
|
CMB_fmode6.Text = Common.apmmodes.MANUAL.ToString();
|
|
CMB_fmode6.Enabled = false;
|
|
}
|
|
catch { }
|
|
}
|
|
else if (MainV2.cs.firmware == MainV2.Firmwares.ArduRover) // APM
|
|
{
|
|
CB_simple1.Visible = false;
|
|
CB_simple2.Visible = false;
|
|
CB_simple3.Visible = false;
|
|
CB_simple4.Visible = false;
|
|
CB_simple5.Visible = false;
|
|
CB_simple6.Visible = false;
|
|
|
|
var flightModes = EnumTranslator.Translate<Common.aprovermodes>();
|
|
|
|
CMB_fmode1.DataSource = flightModes.ToList();
|
|
CMB_fmode1.ValueMember = "Key";
|
|
CMB_fmode1.DisplayMember = "Value";
|
|
|
|
CMB_fmode2.DataSource = flightModes.ToList();
|
|
CMB_fmode2.ValueMember = "Key";
|
|
CMB_fmode2.DisplayMember = "Value";
|
|
|
|
CMB_fmode3.DataSource = flightModes.ToList();
|
|
CMB_fmode3.ValueMember = "Key";
|
|
CMB_fmode3.DisplayMember = "Value";
|
|
|
|
CMB_fmode4.DataSource = flightModes.ToList();
|
|
CMB_fmode4.ValueMember = "Key";
|
|
CMB_fmode4.DisplayMember = "Value";
|
|
|
|
CMB_fmode5.DataSource = flightModes.ToList();
|
|
CMB_fmode5.ValueMember = "Key";
|
|
CMB_fmode5.DisplayMember = "Value";
|
|
|
|
CMB_fmode6.DataSource = flightModes.ToList();
|
|
CMB_fmode6.ValueMember = "Key";
|
|
CMB_fmode6.DisplayMember = "Value";
|
|
|
|
try
|
|
{
|
|
CMB_fmode1.Text = EnumTranslator.GetDisplayText(Enum.Parse(typeof(Common.aprovermodes), MainV2.comPort.param["FLTMODE1"].ToString()));
|
|
CMB_fmode2.Text = EnumTranslator.GetDisplayText(Enum.Parse(typeof(Common.aprovermodes), MainV2.comPort.param["FLTMODE2"].ToString()));
|
|
CMB_fmode3.Text = EnumTranslator.GetDisplayText(Enum.Parse(typeof(Common.aprovermodes), MainV2.comPort.param["FLTMODE3"].ToString()));
|
|
CMB_fmode4.Text = EnumTranslator.GetDisplayText(Enum.Parse(typeof(Common.aprovermodes), MainV2.comPort.param["FLTMODE4"].ToString()));
|
|
CMB_fmode5.Text = EnumTranslator.GetDisplayText(Enum.Parse(typeof(Common.aprovermodes), MainV2.comPort.param["FLTMODE5"].ToString()));
|
|
CMB_fmode6.Text = Common.aprovermodes.MANUAL.ToString();
|
|
CMB_fmode6.Enabled = false;
|
|
}
|
|
catch { }
|
|
} else if (MainV2.cs.firmware == MainV2.Firmwares.ArduCopter2) // ac2
|
|
{
|
|
var flightModes = EnumTranslator.Translate<Common.ac2modes>();
|
|
|
|
CMB_fmode1.DataSource = flightModes.ToList();
|
|
CMB_fmode1.ValueMember = "Key";
|
|
CMB_fmode1.DisplayMember = "Value";
|
|
|
|
CMB_fmode2.DataSource = flightModes.ToList();
|
|
CMB_fmode2.ValueMember = "Key";
|
|
CMB_fmode2.DisplayMember = "Value";
|
|
|
|
CMB_fmode3.DataSource = flightModes.ToList();
|
|
CMB_fmode3.ValueMember = "Key";
|
|
CMB_fmode3.DisplayMember = "Value";
|
|
|
|
CMB_fmode4.DataSource = flightModes.ToList();
|
|
CMB_fmode4.ValueMember = "Key";
|
|
CMB_fmode4.DisplayMember = "Value";
|
|
|
|
CMB_fmode5.DataSource = flightModes.ToList();
|
|
CMB_fmode5.ValueMember = "Key";
|
|
CMB_fmode5.DisplayMember = "Value";
|
|
|
|
CMB_fmode6.DataSource = flightModes.ToList();
|
|
CMB_fmode6.ValueMember = "Key";
|
|
CMB_fmode6.DisplayMember = "Value";
|
|
|
|
try
|
|
{
|
|
CMB_fmode1.Text = EnumTranslator.GetDisplayText(Enum.Parse(typeof(Common.ac2modes), MainV2.comPort.param["FLTMODE1"].ToString()));
|
|
CMB_fmode2.Text = EnumTranslator.GetDisplayText(Enum.Parse(typeof(Common.ac2modes), MainV2.comPort.param["FLTMODE2"].ToString()));
|
|
CMB_fmode3.Text = EnumTranslator.GetDisplayText(Enum.Parse(typeof(Common.ac2modes), MainV2.comPort.param["FLTMODE3"].ToString()));
|
|
CMB_fmode4.Text = EnumTranslator.GetDisplayText(Enum.Parse(typeof(Common.ac2modes), MainV2.comPort.param["FLTMODE4"].ToString()));
|
|
CMB_fmode5.Text = EnumTranslator.GetDisplayText(Enum.Parse(typeof(Common.ac2modes), MainV2.comPort.param["FLTMODE5"].ToString()));
|
|
CMB_fmode6.Text = EnumTranslator.GetDisplayText(Enum.Parse(typeof(Common.ac2modes), MainV2.comPort.param["FLTMODE6"].ToString()));
|
|
CMB_fmode6.Enabled = true;
|
|
|
|
int simple = int.Parse(MainV2.comPort.param["SIMPLE"].ToString());
|
|
|
|
CB_simple1.Checked = ((simple >> 0 & 1) == 1);
|
|
CB_simple2.Checked = ((simple >> 1 & 1) == 1);
|
|
CB_simple3.Checked = ((simple >> 2 & 1) == 1);
|
|
CB_simple4.Checked = ((simple >> 3 & 1) == 1);
|
|
CB_simple5.Checked = ((simple >> 4 & 1) == 1);
|
|
CB_simple6.Checked = ((simple >> 5 & 1) == 1);
|
|
}
|
|
catch { }
|
|
}
|
|
|
|
|
|
|
|
timer.Tick += new EventHandler(timer_Tick);
|
|
|
|
timer.Enabled = true;
|
|
timer.Interval = 100;
|
|
timer.Start();
|
|
}
|
|
}
|
|
}
|