ardupilot/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigBatteryMonitoring.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

461 lines
16 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.Controls;
namespace ArdupilotMega.GCSViews.ConfigurationView
{
public partial class ConfigBatteryMonitoring : UserControl, IActivate, IDeactivate
{
bool startup = false;
public ConfigBatteryMonitoring()
{
InitializeComponent();
}
private void CHK_enablebattmon_CheckedChanged(object sender, EventArgs e)
{
if (startup)
return;
try
{
if (((CheckBox)sender).Checked == false)
{
CMB_batmontype.SelectedIndex = 0;
}
else
{
if (CMB_batmontype.SelectedIndex <= 0)
CMB_batmontype.SelectedIndex = 1;
}
}
catch { CustomMessageBox.Show("Set BATT_MONITOR Failed"); }
}
private void TXT_battcapacity_Validating(object sender, CancelEventArgs e)
{
float ans = 0;
e.Cancel = !float.TryParse(TXT_battcapacity.Text, out ans);
}
private void TXT_battcapacity_Validated(object sender, EventArgs e)
{
if (startup || ((TextBox)sender).Enabled == false)
return;
try
{
if (MainV2.comPort.MAV.param["BATT_CAPACITY"] == null)
{
CustomMessageBox.Show("Not Available");
}
else
{
MainV2.comPort.setParam("BATT_CAPACITY", float.Parse(TXT_battcapacity.Text));
}
}
catch { CustomMessageBox.Show("Set BATT_CAPACITY Failed"); }
}
private void CMB_batmontype_SelectedIndexChanged(object sender, EventArgs e)
{
if (startup)
return;
try
{
if (MainV2.comPort.MAV.param["BATT_MONITOR"] == null)
{
CustomMessageBox.Show("Not Available");
}
else
{
int selection = int.Parse(CMB_batmontype.Text.Substring(0, 1));
CMB_batmonsensortype.Enabled = true;
TXT_voltage.Enabled = false;
if (selection == 0)
{
CMB_batmonsensortype.Enabled = false;
groupBox4.Enabled = false;
MainV2.comPort.setParam("BATT_VOLT_PIN", -1);
MainV2.comPort.setParam("BATT_CURR_PIN", -1);
}
else if (selection == 4)
{
CMB_batmonsensortype.Enabled = true;
groupBox4.Enabled = true;
TXT_ampspervolt.Enabled = true;
}
else if (selection == 3)
{
groupBox4.Enabled = true;
CMB_batmonsensortype.Enabled = false;
TXT_ampspervolt.Enabled = false;
TXT_inputvoltage.Enabled = true;
TXT_measuredvoltage.Enabled = true;
TXT_divider.Enabled = true;
}
MainV2.comPort.setParam("BATT_MONITOR", selection);
}
}
catch { CustomMessageBox.Show("Set BATT_MONITOR,BATT_VOLT_PIN,BATT_CURR_PIN Failed"); }
}
private void TXT_inputvoltage_Validating(object sender, CancelEventArgs e)
{
float ans = 0;
e.Cancel = !float.TryParse(TXT_inputvoltage.Text, out ans);
}
private void TXT_inputvoltage_Validated(object sender, EventArgs e)
{
if (startup || ((TextBox)sender).Enabled == false)
return;
try
{
if (MainV2.comPort.MAV.param["INPUT_VOLTS"] == null)
{
CustomMessageBox.Show("Not Available");
}
else
{
MainV2.comPort.setParam("INPUT_VOLTS", float.Parse(TXT_inputvoltage.Text));
}
}
catch { CustomMessageBox.Show("Set INPUT_VOLTS Failed"); }
}
private void TXT_measuredvoltage_Validating(object sender, CancelEventArgs e)
{
float ans = 0;
e.Cancel = !float.TryParse(TXT_measuredvoltage.Text, out ans);
}
private void TXT_measuredvoltage_Validated(object sender, EventArgs e)
{
if (startup || ((TextBox)sender).Enabled == false)
return;
try
{
float measuredvoltage = float.Parse(TXT_measuredvoltage.Text);
float voltage = float.Parse(TXT_voltage.Text);
float divider = float.Parse(TXT_divider.Text);
if (voltage == 0)
return;
float new_divider = (measuredvoltage * divider) / voltage;
TXT_divider.Text = new_divider.ToString();
}
catch { CustomMessageBox.Show("Invalid number entered"); return; }
try
{
if (MainV2.comPort.MAV.param["VOLT_DIVIDER"] == null)
{
CustomMessageBox.Show("Not Available");
}
else
{
MainV2.comPort.setParam("VOLT_DIVIDER", float.Parse(TXT_divider.Text));
}
}
catch { CustomMessageBox.Show("Set VOLT_DIVIDER Failed"); }
}
private void TXT_divider_Validating(object sender, CancelEventArgs e)
{
float ans = 0;
e.Cancel = !float.TryParse(TXT_divider.Text, out ans);
}
private void TXT_divider_Validated(object sender, EventArgs e)
{
if (startup || ((TextBox)sender).Enabled == false)
return;
try
{
if (MainV2.comPort.MAV.param["VOLT_DIVIDER"] == null)
{
CustomMessageBox.Show("Not Available");
}
else
{
MainV2.comPort.setParam("VOLT_DIVIDER", float.Parse(TXT_divider.Text));
}
}
catch { CustomMessageBox.Show("Set VOLT_DIVIDER Failed"); }
}
private void TXT_ampspervolt_Validating(object sender, CancelEventArgs e)
{
float ans = 0;
e.Cancel = !float.TryParse(TXT_ampspervolt.Text, out ans);
}
private void TXT_ampspervolt_Validated(object sender, EventArgs e)
{
if (startup || ((TextBox)sender).Enabled == false)
return;
try
{
if (MainV2.comPort.MAV.param["AMP_PER_VOLT"] == null)
{
CustomMessageBox.Show("Not Available");
}
else
{
MainV2.comPort.setParam("AMP_PER_VOLT", float.Parse(TXT_ampspervolt.Text));
}
}
catch { CustomMessageBox.Show("Set AMP_PER_VOLT Failed"); }
}
private void CMB_batmonsensortype_SelectedIndexChanged(object sender, EventArgs e)
{
int selection = int.Parse(CMB_batmonsensortype.Text.Substring(0, 1));
if (selection == 1) // atto 45
{
float maxvolt = 13.6f;
float maxamps = 44.7f;
float mvpervolt = 242.3f;
float mvperamp = 73.20f;
// ~ 3.295v
float topvolt = (maxvolt * mvpervolt) / 1000;
// ~ 3.294v
float topamps = (maxamps * mvperamp) / 1000;
TXT_divider.Text = (maxvolt / topvolt).ToString();
TXT_ampspervolt.Text = (maxamps / topamps).ToString();
}
else if (selection == 2) // atto 90
{
float maxvolt = 50f;
float maxamps = 89.4f;
float mvpervolt = 63.69f;
float mvperamp = 36.60f;
float topvolt = (maxvolt * mvpervolt) / 1000;
float topamps = (maxamps * mvperamp) / 1000;
TXT_divider.Text = (maxvolt / topvolt).ToString();
TXT_ampspervolt.Text = (maxamps / topamps).ToString();
}
else if (selection == 3) // atto 180
{
float maxvolt = 50f;
float maxamps = 178.8f;
float mvpervolt = 63.69f;
float mvperamp = 18.30f;
float topvolt = (maxvolt * mvpervolt) / 1000;
float topamps = (maxamps * mvperamp) / 1000;
TXT_divider.Text = (maxvolt / topvolt).ToString();
TXT_ampspervolt.Text = (maxamps / topamps).ToString();
}
else if (selection == 4) // 3dr iv
{
float maxvolt = 50f;
float maxamps = 90f;
float mvpervolt = 100f;
float mvperamp = 55.55f;
float topvolt = (maxvolt * mvpervolt) / 1000;
float topamps = (maxamps * mvperamp) / 1000;
TXT_divider.Text = (maxvolt / topvolt).ToString();
TXT_ampspervolt.Text = (maxamps / topamps).ToString();
}
// enable to update
TXT_divider.Enabled = true;
TXT_ampspervolt.Enabled = true;
TXT_measuredvoltage.Enabled = true;
TXT_inputvoltage.Enabled = true;
// update
TXT_ampspervolt_Validated(TXT_ampspervolt, null);
TXT_divider_Validated(TXT_divider, null);
// disable
TXT_divider.Enabled = false;
TXT_ampspervolt.Enabled = false;
TXT_measuredvoltage.Enabled = false;
//reenable if needed
if (selection == 0)
{
TXT_divider.Enabled = true;
TXT_ampspervolt.Enabled = true;
TXT_measuredvoltage.Enabled = true;
TXT_inputvoltage.Enabled = true;
}
disableinstructionbox();
}
public void Deactivate()
{
timer1.Stop();
}
public void Activate()
{
startup = true;
bool not_supported = false;
if (MainV2.comPort.MAV.param["BATT_MONITOR"] != null)
{
if (MainV2.comPort.MAV.param["BATT_MONITOR"].ToString() != "0.0")
{
CMB_batmontype.SelectedIndex = getIndex(CMB_batmontype, (int)float.Parse(MainV2.comPort.MAV.param["BATT_MONITOR"].ToString()));
}
}
if (MainV2.comPort.MAV.param["BATT_CAPACITY"] != null)
TXT_battcapacity.Text = MainV2.comPort.MAV.param["BATT_CAPACITY"].ToString();
if (MainV2.comPort.MAV.param["INPUT_VOLTS"] != null)
TXT_inputvoltage.Text = MainV2.comPort.MAV.param["INPUT_VOLTS"].ToString();
else
not_supported = true;
TXT_voltage.Text = MainV2.comPort.MAV.cs.battery_voltage.ToString();
TXT_measuredvoltage.Text = TXT_voltage.Text;
if (MainV2.comPort.MAV.param["VOLT_DIVIDER"] != null)
TXT_divider.Text = MainV2.comPort.MAV.param["VOLT_DIVIDER"].ToString();
else
not_supported = true;
if (MainV2.comPort.MAV.param["AMP_PER_VOLT"] != null)
TXT_ampspervolt.Text = MainV2.comPort.MAV.param["AMP_PER_VOLT"].ToString();
else
not_supported = true;
if (not_supported)
{
TXT_inputvoltage.Enabled = false;
TXT_measuredvoltage.Enabled = false;
TXT_divider.Enabled = false;
TXT_ampspervolt.Enabled = false;
}
// ignore language re . vs ,
if (TXT_ampspervolt.Text == (13.6612).ToString())
{
CMB_batmonsensortype.SelectedIndex = 1;
}
else if (TXT_ampspervolt.Text == (27.3224).ToString())
{
CMB_batmonsensortype.SelectedIndex = 2;
}
else if (TXT_ampspervolt.Text == (54.64481).ToString())
{
CMB_batmonsensortype.SelectedIndex = 3;
}
else if (TXT_ampspervolt.Text == (18.0018).ToString())
{
CMB_batmonsensortype.SelectedIndex = 4;
}
else
{
CMB_batmonsensortype.SelectedIndex = 0;
}
if (MainV2.comPort.MAV.param["BATT_VOLT_PIN"] != null)
{
CMB_apmversion.Enabled = true;
float value = (float)MainV2.comPort.MAV.param["BATT_VOLT_PIN"];
if (value == 0) // apm1
{
CMB_apmversion.SelectedIndex = 0;
}
else if (value == 1) // apm2
{
CMB_apmversion.SelectedIndex = 1;
}
else if (value == 2) // apm2.5
{
CMB_apmversion.SelectedIndex = 2;
}
}
else
{
CMB_apmversion.Enabled = false;
}
startup = false;
timer1.Start();
}
int getIndex(ComboBox ctl, int no)
{
foreach (var item in ctl.Items)
{
int ans = int.Parse(item.ToString().Substring(0, 1));
if (ans == no)
return ctl.Items.IndexOf(item);
}
return -1;
}
private void timer1_Tick(object sender, EventArgs e)
{
TXT_voltage.Text = MainV2.comPort.MAV.cs.battery_voltage.ToString();
}
private void CMB_apmversion_SelectedIndexChanged(object sender, EventArgs e)
{
if (startup)
return;
int selection = int.Parse(CMB_apmversion.Text.Substring(0, 1));
try
{
if (selection == 0)
{
// apm1
MainV2.comPort.setParam("BATT_VOLT_PIN", 0);
MainV2.comPort.setParam("BATT_CURR_PIN", 1);
}
else if (selection == 1)
{
// apm2
MainV2.comPort.setParam("BATT_VOLT_PIN", 1);
MainV2.comPort.setParam("BATT_CURR_PIN", 2);
}
else if (selection == 2)
{
//apm2.5
MainV2.comPort.setParam("BATT_VOLT_PIN", 13);
MainV2.comPort.setParam("BATT_CURR_PIN", 12);
}
}
catch { CustomMessageBox.Show("Set BATT_????_PIN Failed"); }
disableinstructionbox();
}
void disableinstructionbox()
{
try
{
if (int.Parse(CMB_apmversion.Text.Substring(0, 1)) == 2)
{
if (int.Parse(CMB_batmonsensortype.Text.Substring(0, 1)) == 4)
{
textBox3.Visible = false;
}
else
{
textBox3.Visible = true;
}
}
}
catch { }
}
}
}