ardupilot/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigFlightModes.cs
Michael Oborne 9c836ab037 Mission Planner 1.2.26
move mavlink structure/currentstate around for future mods
update old firmware git hashs
mod some error descriptions
AP_mount camera trigger mod
modify raw param display with units/range/desc
add radio support for 868mhz
update ch7 options
updated dataflashlog format
small df log parser mod for bad gps loc
renable menu to always dock. right click for autohide
2012-12-07 17:19:46 +08:00

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.comPort.MAV.cs.UpdateCurrentSettings(currentStateBindingSource);
}
catch { }
float pwm = 0;
if (MainV2.comPort.MAV.cs.firmware == MainV2.Firmwares.ArduPlane || MainV2.comPort.MAV.cs.firmware == MainV2.Firmwares.ArduRover) // APM
{
if (MainV2.comPort.MAV.param.ContainsKey("FLTMODE_CH"))
{
switch ((int)(float)MainV2.comPort.MAV.param["FLTMODE_CH"])
{
case 5:
pwm = MainV2.comPort.MAV.cs.ch5in;
break;
case 6:
pwm = MainV2.comPort.MAV.cs.ch6in;
break;
case 7:
pwm = MainV2.comPort.MAV.cs.ch7in;
break;
case 8:
pwm = MainV2.comPort.MAV.cs.ch8in;
break;
default:
break;
}
LBL_flightmodepwm.Text = MainV2.comPort.MAV.param["FLTMODE_CH"].ToString() + ": " + pwm.ToString();
}
}
if (MainV2.comPort.MAV.cs.firmware == MainV2.Firmwares.ArduCopter2) // ac2
{
pwm = MainV2.comPort.MAV.cs.ch5in;
LBL_flightmodepwm.Text = "5: " + MainV2.comPort.MAV.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.comPort.MAV.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.MAV.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.comPort.MAV.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.MAV.param["FLTMODE1"].ToString()));
CMB_fmode2.Text = EnumTranslator.GetDisplayText(Enum.Parse(typeof(Common.apmmodes), MainV2.comPort.MAV.param["FLTMODE2"].ToString()));
CMB_fmode3.Text = EnumTranslator.GetDisplayText(Enum.Parse(typeof(Common.apmmodes), MainV2.comPort.MAV.param["FLTMODE3"].ToString()));
CMB_fmode4.Text = EnumTranslator.GetDisplayText(Enum.Parse(typeof(Common.apmmodes), MainV2.comPort.MAV.param["FLTMODE4"].ToString()));
CMB_fmode5.Text = EnumTranslator.GetDisplayText(Enum.Parse(typeof(Common.apmmodes), MainV2.comPort.MAV.param["FLTMODE5"].ToString()));
CMB_fmode6.Text = Common.apmmodes.MANUAL.ToString();
CMB_fmode6.Enabled = false;
}
catch { }
}
else if (MainV2.comPort.MAV.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.MAV.param["FLTMODE1"].ToString()));
CMB_fmode2.Text = EnumTranslator.GetDisplayText(Enum.Parse(typeof(Common.aprovermodes), MainV2.comPort.MAV.param["FLTMODE2"].ToString()));
CMB_fmode3.Text = EnumTranslator.GetDisplayText(Enum.Parse(typeof(Common.aprovermodes), MainV2.comPort.MAV.param["FLTMODE3"].ToString()));
CMB_fmode4.Text = EnumTranslator.GetDisplayText(Enum.Parse(typeof(Common.aprovermodes), MainV2.comPort.MAV.param["FLTMODE4"].ToString()));
CMB_fmode5.Text = EnumTranslator.GetDisplayText(Enum.Parse(typeof(Common.aprovermodes), MainV2.comPort.MAV.param["FLTMODE5"].ToString()));
CMB_fmode6.Text = Common.aprovermodes.MANUAL.ToString();
CMB_fmode6.Enabled = false;
}
catch { }
} else if (MainV2.comPort.MAV.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.MAV.param["FLTMODE1"].ToString()));
CMB_fmode2.Text = EnumTranslator.GetDisplayText(Enum.Parse(typeof(Common.ac2modes), MainV2.comPort.MAV.param["FLTMODE2"].ToString()));
CMB_fmode3.Text = EnumTranslator.GetDisplayText(Enum.Parse(typeof(Common.ac2modes), MainV2.comPort.MAV.param["FLTMODE3"].ToString()));
CMB_fmode4.Text = EnumTranslator.GetDisplayText(Enum.Parse(typeof(Common.ac2modes), MainV2.comPort.MAV.param["FLTMODE4"].ToString()));
CMB_fmode5.Text = EnumTranslator.GetDisplayText(Enum.Parse(typeof(Common.ac2modes), MainV2.comPort.MAV.param["FLTMODE5"].ToString()));
CMB_fmode6.Text = EnumTranslator.GetDisplayText(Enum.Parse(typeof(Common.ac2modes), MainV2.comPort.MAV.param["FLTMODE6"].ToString()));
CMB_fmode6.Enabled = true;
int simple = int.Parse(MainV2.comPort.MAV.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();
}
}
}