mirror of
https://github.com/ArduPilot/ardupilot
synced 2025-01-21 08:08:29 -04:00
1e51713e31
fix hud battery text overlaying tweak hud resize tweak main switcher fix quickview text scaleing fix dist to mav. added french translation thanks oliver change tooltip time add 3dr iv add distance to home dataflashlog update
432 lines
15 KiB
C#
432 lines
15 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.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.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;
|
|
}
|
|
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 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.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.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.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.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;
|
|
}
|
|
}
|
|
|
|
public void Deactivate()
|
|
{
|
|
timer1.Stop();
|
|
}
|
|
|
|
public void Activate()
|
|
{
|
|
startup = true;
|
|
bool not_supported = false;
|
|
if (MainV2.comPort.param["BATT_MONITOR"] != null)
|
|
{
|
|
if (MainV2.comPort.param["BATT_MONITOR"].ToString() != "0.0")
|
|
{
|
|
CMB_batmontype.SelectedIndex = getIndex(CMB_batmontype, (int)float.Parse(MainV2.comPort.param["BATT_MONITOR"].ToString()));
|
|
}
|
|
}
|
|
|
|
if (MainV2.comPort.param["BATT_CAPACITY"] != null)
|
|
TXT_battcapacity.Text = MainV2.comPort.param["BATT_CAPACITY"].ToString();
|
|
if (MainV2.comPort.param["INPUT_VOLTS"] != null)
|
|
TXT_inputvoltage.Text = MainV2.comPort.param["INPUT_VOLTS"].ToString();
|
|
else
|
|
not_supported = true;
|
|
TXT_voltage.Text = MainV2.cs.battery_voltage.ToString();
|
|
TXT_measuredvoltage.Text = TXT_voltage.Text;
|
|
if (MainV2.comPort.param["VOLT_DIVIDER"] != null)
|
|
TXT_divider.Text = MainV2.comPort.param["VOLT_DIVIDER"].ToString();
|
|
else
|
|
not_supported = true;
|
|
if (MainV2.comPort.param["AMP_PER_VOLT"] != null)
|
|
TXT_ampspervolt.Text = MainV2.comPort.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.param["BATT_VOLT_PIN"] != null)
|
|
{
|
|
CMB_apmversion.Enabled = true;
|
|
|
|
float value = (float)MainV2.comPort.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.cs.battery_voltage.ToString();
|
|
}
|
|
|
|
private void CMB_apmversion_SelectedIndexChanged(object sender, EventArgs e)
|
|
{
|
|
if (startup)
|
|
return;
|
|
|
|
int selection = int.Parse(CMB_batmonsensortype.Text.Substring(0, 1));
|
|
|
|
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);
|
|
}
|
|
}
|
|
}
|
|
}
|