mirror of https://github.com/ArduPilot/ardupilot
365 lines
12 KiB
C#
365 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.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();
|
|
}
|
|
|
|
// 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
|
|
{
|
|
CMB_batmonsensortype.SelectedIndex = 0;
|
|
}
|
|
|
|
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();
|
|
}
|
|
}
|
|
}
|