mirror of https://github.com/ArduPilot/ardupilot
APM Planner 1.1.56
add ardutracker support add load/save setting in Tracker move getserialports to serial class hopefully fix dtr issue for good.
This commit is contained in:
parent
0b94b2e470
commit
c0a381f10b
|
@ -0,0 +1,155 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
namespace ArdupilotMega.Antenna
|
||||||
|
{
|
||||||
|
class ArduTracker : ITrackerOutput
|
||||||
|
{
|
||||||
|
public SerialPort ComPort { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 0-360
|
||||||
|
/// </summary>
|
||||||
|
public double TrimPan { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// -90 - 90
|
||||||
|
/// </summary>
|
||||||
|
public double TrimTilt { get; set; }
|
||||||
|
|
||||||
|
public int PanStartRange { get; set; }
|
||||||
|
public int TiltStartRange { get; set; }
|
||||||
|
public int PanEndRange { get; set; }
|
||||||
|
public int TiltEndRange { get; set; }
|
||||||
|
public int PanPWMRange { get; set; }
|
||||||
|
public int TiltPWMRange { get; set; }
|
||||||
|
|
||||||
|
public bool PanReverse { get { return _panreverse == 1; } set { _panreverse = value == true ? -1 : 1; } }
|
||||||
|
public bool TiltReverse { get { return _tiltreverse == 1; } set { _tiltreverse = value == true ? -1 : 1; } }
|
||||||
|
|
||||||
|
int _panreverse = 1;
|
||||||
|
int _tiltreverse = 1;
|
||||||
|
|
||||||
|
int currentpan = 1500;
|
||||||
|
int currenttilt = 1500;
|
||||||
|
|
||||||
|
public bool Init()
|
||||||
|
{
|
||||||
|
|
||||||
|
if ((PanStartRange - PanEndRange) == 0)
|
||||||
|
{
|
||||||
|
System.Windows.Forms.CustomMessageBox.Show("Invalid Pan Range", "Error");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((TiltStartRange - TiltEndRange) == 0)
|
||||||
|
{
|
||||||
|
System.Windows.Forms.CustomMessageBox.Show("Invalid Tilt Range", "Error");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
ComPort.Open();
|
||||||
|
}
|
||||||
|
catch (Exception ex) { System.Windows.Forms.CustomMessageBox.Show("Connect failed " + ex.Message, "Error"); return false; }
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
public bool Setup()
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
double wrap_180(double input)
|
||||||
|
{
|
||||||
|
if (input > 180)
|
||||||
|
return input - 360;
|
||||||
|
if (input < -180)
|
||||||
|
return input + 360;
|
||||||
|
return input;
|
||||||
|
}
|
||||||
|
|
||||||
|
double wrap_range(double input, double range)
|
||||||
|
{
|
||||||
|
if (input > range)
|
||||||
|
return input - 360;
|
||||||
|
if (input < -range)
|
||||||
|
return input + 360;
|
||||||
|
return input;
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool Pan(double Angle)
|
||||||
|
{
|
||||||
|
double range = Math.Abs(PanStartRange - PanEndRange);
|
||||||
|
|
||||||
|
// get relative center based on tracking center
|
||||||
|
double rangeleft = PanStartRange - TrimPan;
|
||||||
|
double rangeright = PanEndRange - TrimPan;
|
||||||
|
double centerpos = 1500;
|
||||||
|
|
||||||
|
// get the output angle the tracker needs to point and constrain the output to the allowed options
|
||||||
|
short PointAtAngle = Constrain(wrap_180(Angle - TrimPan), PanStartRange, PanEndRange);
|
||||||
|
|
||||||
|
// conver the angle into a 0-pwmrange value
|
||||||
|
int target = (int)((((PointAtAngle / range) * 2.0) * (PanPWMRange / 2) * _panreverse + centerpos));
|
||||||
|
|
||||||
|
// Console.WriteLine("P " + Angle + " " + target + " " + PointAtAngle);
|
||||||
|
|
||||||
|
currentpan = target;
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool Tilt(double Angle)
|
||||||
|
{
|
||||||
|
double range = Math.Abs(TiltStartRange - TiltEndRange);
|
||||||
|
|
||||||
|
short PointAtAngle = Constrain((Angle - TrimTilt), TiltStartRange, TiltEndRange);
|
||||||
|
|
||||||
|
int target = (int)((((PointAtAngle / range) * 2.0) * (TiltPWMRange / 2) * _tiltreverse + 1500));
|
||||||
|
|
||||||
|
// Console.WriteLine("T " + Angle + " " + target + " " + PointAtAngle);
|
||||||
|
|
||||||
|
currenttilt = target;
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool PanAndTilt(double pan, double tilt)
|
||||||
|
{
|
||||||
|
Tilt(tilt);
|
||||||
|
Pan(pan);
|
||||||
|
|
||||||
|
string command = string.Format("!!!PAN:{0:0000},TLT:{1:0000}\n", currentpan, currenttilt);
|
||||||
|
|
||||||
|
Console.Write(command);
|
||||||
|
|
||||||
|
ComPort.Write(command);
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool Close()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
ComPort.Close();
|
||||||
|
}
|
||||||
|
catch { }
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
short Constrain(double input, double min, double max)
|
||||||
|
{
|
||||||
|
if (input < min)
|
||||||
|
return (short)min;
|
||||||
|
if (input > max)
|
||||||
|
return (short)max;
|
||||||
|
return (short)input;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
|
@ -16,6 +16,8 @@ namespace ArdupilotMega.Antenna
|
||||||
int TiltStartRange { get; set; }
|
int TiltStartRange { get; set; }
|
||||||
int PanEndRange { get; set; }
|
int PanEndRange { get; set; }
|
||||||
int TiltEndRange { get; set; }
|
int TiltEndRange { get; set; }
|
||||||
|
int PanPWMRange { get; set; }
|
||||||
|
int TiltPWMRange { get; set; }
|
||||||
|
|
||||||
bool PanReverse { get; set; }
|
bool PanReverse { get; set; }
|
||||||
bool TiltReverse { get; set; }
|
bool TiltReverse { get; set; }
|
||||||
|
|
|
@ -21,6 +21,8 @@ namespace ArdupilotMega.Antenna
|
||||||
public int TiltStartRange { get; set; }
|
public int TiltStartRange { get; set; }
|
||||||
public int PanEndRange { get; set; }
|
public int PanEndRange { get; set; }
|
||||||
public int TiltEndRange { get; set; }
|
public int TiltEndRange { get; set; }
|
||||||
|
public int PanPWMRange { get; set; }
|
||||||
|
public int TiltPWMRange { get; set; }
|
||||||
|
|
||||||
public bool PanReverse { get { return _panreverse == -1; } set { _panreverse = value == true ? -1 : 1 ; } }
|
public bool PanReverse { get { return _panreverse == -1; } set { _panreverse = value == true ? -1 : 1 ; } }
|
||||||
public bool TiltReverse { get { return _tiltreverse == -1; } set { _tiltreverse = value == true ? -1 : 1; } }
|
public bool TiltReverse { get { return _tiltreverse == -1; } set { _tiltreverse = value == true ? -1 : 1; } }
|
||||||
|
|
|
@ -33,7 +33,6 @@
|
||||||
this.label1 = new System.Windows.Forms.Label();
|
this.label1 = new System.Windows.Forms.Label();
|
||||||
this.CMB_baudrate = new System.Windows.Forms.ComboBox();
|
this.CMB_baudrate = new System.Windows.Forms.ComboBox();
|
||||||
this.CMB_serialport = new System.Windows.Forms.ComboBox();
|
this.CMB_serialport = new System.Windows.Forms.ComboBox();
|
||||||
this.BUT_connect = new ArdupilotMega.MyButton();
|
|
||||||
this.TRK_pantrim = new System.Windows.Forms.TrackBar();
|
this.TRK_pantrim = new System.Windows.Forms.TrackBar();
|
||||||
this.TXT_panrange = new System.Windows.Forms.TextBox();
|
this.TXT_panrange = new System.Windows.Forms.TextBox();
|
||||||
this.label3 = new System.Windows.Forms.Label();
|
this.label3 = new System.Windows.Forms.Label();
|
||||||
|
@ -44,6 +43,18 @@
|
||||||
this.TRK_tilttrim = new System.Windows.Forms.TrackBar();
|
this.TRK_tilttrim = new System.Windows.Forms.TrackBar();
|
||||||
this.label2 = new System.Windows.Forms.Label();
|
this.label2 = new System.Windows.Forms.Label();
|
||||||
this.label7 = new System.Windows.Forms.Label();
|
this.label7 = new System.Windows.Forms.Label();
|
||||||
|
this.CHK_revpan = new System.Windows.Forms.CheckBox();
|
||||||
|
this.CHK_revtilt = new System.Windows.Forms.CheckBox();
|
||||||
|
this.TXT_pwmrangepan = new System.Windows.Forms.TextBox();
|
||||||
|
this.TXT_pwmrangetilt = new System.Windows.Forms.TextBox();
|
||||||
|
this.label8 = new System.Windows.Forms.Label();
|
||||||
|
this.label9 = new System.Windows.Forms.Label();
|
||||||
|
this.label10 = new System.Windows.Forms.Label();
|
||||||
|
this.label11 = new System.Windows.Forms.Label();
|
||||||
|
this.label12 = new System.Windows.Forms.Label();
|
||||||
|
this.BUT_connect = new ArdupilotMega.MyButton();
|
||||||
|
this.LBL_pantrim = new System.Windows.Forms.Label();
|
||||||
|
this.LBL_tilttrim = new System.Windows.Forms.Label();
|
||||||
((System.ComponentModel.ISupportInitialize)(this.TRK_pantrim)).BeginInit();
|
((System.ComponentModel.ISupportInitialize)(this.TRK_pantrim)).BeginInit();
|
||||||
((System.ComponentModel.ISupportInitialize)(this.TRK_tilttrim)).BeginInit();
|
((System.ComponentModel.ISupportInitialize)(this.TRK_tilttrim)).BeginInit();
|
||||||
this.SuspendLayout();
|
this.SuspendLayout();
|
||||||
|
@ -52,7 +63,8 @@
|
||||||
//
|
//
|
||||||
this.CMB_interface.FormattingEnabled = true;
|
this.CMB_interface.FormattingEnabled = true;
|
||||||
this.CMB_interface.Items.AddRange(new object[] {
|
this.CMB_interface.Items.AddRange(new object[] {
|
||||||
"Maestro"});
|
"Maestro",
|
||||||
|
"ArduTracker"});
|
||||||
this.CMB_interface.Location = new System.Drawing.Point(83, 10);
|
this.CMB_interface.Location = new System.Drawing.Point(83, 10);
|
||||||
this.CMB_interface.Name = "CMB_interface";
|
this.CMB_interface.Name = "CMB_interface";
|
||||||
this.CMB_interface.Size = new System.Drawing.Size(121, 21);
|
this.CMB_interface.Size = new System.Drawing.Size(121, 21);
|
||||||
|
@ -95,19 +107,9 @@
|
||||||
this.CMB_serialport.Size = new System.Drawing.Size(121, 21);
|
this.CMB_serialport.Size = new System.Drawing.Size(121, 21);
|
||||||
this.CMB_serialport.TabIndex = 1;
|
this.CMB_serialport.TabIndex = 1;
|
||||||
//
|
//
|
||||||
// BUT_connect
|
|
||||||
//
|
|
||||||
this.BUT_connect.Location = new System.Drawing.Point(476, 9);
|
|
||||||
this.BUT_connect.Name = "BUT_connect";
|
|
||||||
this.BUT_connect.Size = new System.Drawing.Size(75, 23);
|
|
||||||
this.BUT_connect.TabIndex = 3;
|
|
||||||
this.BUT_connect.Text = "Connect";
|
|
||||||
this.BUT_connect.UseVisualStyleBackColor = true;
|
|
||||||
this.BUT_connect.Click += new System.EventHandler(this.BUT_connect_Click);
|
|
||||||
//
|
|
||||||
// TRK_pantrim
|
// TRK_pantrim
|
||||||
//
|
//
|
||||||
this.TRK_pantrim.Location = new System.Drawing.Point(153, 65);
|
this.TRK_pantrim.Location = new System.Drawing.Point(153, 81);
|
||||||
this.TRK_pantrim.Maximum = 90;
|
this.TRK_pantrim.Maximum = 90;
|
||||||
this.TRK_pantrim.Minimum = -90;
|
this.TRK_pantrim.Minimum = -90;
|
||||||
this.TRK_pantrim.Name = "TRK_pantrim";
|
this.TRK_pantrim.Name = "TRK_pantrim";
|
||||||
|
@ -118,7 +120,7 @@
|
||||||
//
|
//
|
||||||
// TXT_panrange
|
// TXT_panrange
|
||||||
//
|
//
|
||||||
this.TXT_panrange.Location = new System.Drawing.Point(83, 65);
|
this.TXT_panrange.Location = new System.Drawing.Point(83, 81);
|
||||||
this.TXT_panrange.Name = "TXT_panrange";
|
this.TXT_panrange.Name = "TXT_panrange";
|
||||||
this.TXT_panrange.Size = new System.Drawing.Size(64, 20);
|
this.TXT_panrange.Size = new System.Drawing.Size(64, 20);
|
||||||
this.TXT_panrange.TabIndex = 4;
|
this.TXT_panrange.TabIndex = 4;
|
||||||
|
@ -128,7 +130,7 @@
|
||||||
// label3
|
// label3
|
||||||
//
|
//
|
||||||
this.label3.AutoSize = true;
|
this.label3.AutoSize = true;
|
||||||
this.label3.Location = new System.Drawing.Point(326, 49);
|
this.label3.Location = new System.Drawing.Point(326, 65);
|
||||||
this.label3.Name = "label3";
|
this.label3.Name = "label3";
|
||||||
this.label3.Size = new System.Drawing.Size(27, 13);
|
this.label3.Size = new System.Drawing.Size(27, 13);
|
||||||
this.label3.TabIndex = 10;
|
this.label3.TabIndex = 10;
|
||||||
|
@ -137,25 +139,25 @@
|
||||||
// label4
|
// label4
|
||||||
//
|
//
|
||||||
this.label4.AutoSize = true;
|
this.label4.AutoSize = true;
|
||||||
this.label4.Location = new System.Drawing.Point(83, 49);
|
this.label4.Location = new System.Drawing.Point(83, 65);
|
||||||
this.label4.Name = "label4";
|
this.label4.Name = "label4";
|
||||||
this.label4.Size = new System.Drawing.Size(56, 13);
|
this.label4.Size = new System.Drawing.Size(39, 13);
|
||||||
this.label4.TabIndex = 11;
|
this.label4.TabIndex = 11;
|
||||||
this.label4.Text = "Range -/+";
|
this.label4.Text = "Range";
|
||||||
//
|
//
|
||||||
// label5
|
// label5
|
||||||
//
|
//
|
||||||
this.label5.AutoSize = true;
|
this.label5.AutoSize = true;
|
||||||
this.label5.Location = new System.Drawing.Point(83, 125);
|
this.label5.Location = new System.Drawing.Point(83, 141);
|
||||||
this.label5.Name = "label5";
|
this.label5.Name = "label5";
|
||||||
this.label5.Size = new System.Drawing.Size(56, 13);
|
this.label5.Size = new System.Drawing.Size(39, 13);
|
||||||
this.label5.TabIndex = 17;
|
this.label5.TabIndex = 17;
|
||||||
this.label5.Text = "Range -/+";
|
this.label5.Text = "Range";
|
||||||
//
|
//
|
||||||
// label6
|
// label6
|
||||||
//
|
//
|
||||||
this.label6.AutoSize = true;
|
this.label6.AutoSize = true;
|
||||||
this.label6.Location = new System.Drawing.Point(326, 125);
|
this.label6.Location = new System.Drawing.Point(326, 141);
|
||||||
this.label6.Name = "label6";
|
this.label6.Name = "label6";
|
||||||
this.label6.Size = new System.Drawing.Size(27, 13);
|
this.label6.Size = new System.Drawing.Size(27, 13);
|
||||||
this.label6.TabIndex = 16;
|
this.label6.TabIndex = 16;
|
||||||
|
@ -163,7 +165,7 @@
|
||||||
//
|
//
|
||||||
// TXT_tiltrange
|
// TXT_tiltrange
|
||||||
//
|
//
|
||||||
this.TXT_tiltrange.Location = new System.Drawing.Point(83, 141);
|
this.TXT_tiltrange.Location = new System.Drawing.Point(83, 157);
|
||||||
this.TXT_tiltrange.Name = "TXT_tiltrange";
|
this.TXT_tiltrange.Name = "TXT_tiltrange";
|
||||||
this.TXT_tiltrange.Size = new System.Drawing.Size(64, 20);
|
this.TXT_tiltrange.Size = new System.Drawing.Size(64, 20);
|
||||||
this.TXT_tiltrange.TabIndex = 6;
|
this.TXT_tiltrange.TabIndex = 6;
|
||||||
|
@ -172,7 +174,7 @@
|
||||||
//
|
//
|
||||||
// TRK_tilttrim
|
// TRK_tilttrim
|
||||||
//
|
//
|
||||||
this.TRK_tilttrim.Location = new System.Drawing.Point(153, 141);
|
this.TRK_tilttrim.Location = new System.Drawing.Point(153, 157);
|
||||||
this.TRK_tilttrim.Maximum = 45;
|
this.TRK_tilttrim.Maximum = 45;
|
||||||
this.TRK_tilttrim.Minimum = -45;
|
this.TRK_tilttrim.Minimum = -45;
|
||||||
this.TRK_tilttrim.Name = "TRK_tilttrim";
|
this.TRK_tilttrim.Name = "TRK_tilttrim";
|
||||||
|
@ -184,7 +186,7 @@
|
||||||
// label2
|
// label2
|
||||||
//
|
//
|
||||||
this.label2.AutoSize = true;
|
this.label2.AutoSize = true;
|
||||||
this.label2.Location = new System.Drawing.Point(13, 68);
|
this.label2.Location = new System.Drawing.Point(12, 65);
|
||||||
this.label2.Name = "label2";
|
this.label2.Name = "label2";
|
||||||
this.label2.Size = new System.Drawing.Size(26, 13);
|
this.label2.Size = new System.Drawing.Size(26, 13);
|
||||||
this.label2.TabIndex = 18;
|
this.label2.TabIndex = 18;
|
||||||
|
@ -193,17 +195,140 @@
|
||||||
// label7
|
// label7
|
||||||
//
|
//
|
||||||
this.label7.AutoSize = true;
|
this.label7.AutoSize = true;
|
||||||
this.label7.Location = new System.Drawing.Point(13, 144);
|
this.label7.Location = new System.Drawing.Point(12, 141);
|
||||||
this.label7.Name = "label7";
|
this.label7.Name = "label7";
|
||||||
this.label7.Size = new System.Drawing.Size(21, 13);
|
this.label7.Size = new System.Drawing.Size(21, 13);
|
||||||
this.label7.TabIndex = 19;
|
this.label7.TabIndex = 19;
|
||||||
this.label7.Text = "Tilt";
|
this.label7.Text = "Tilt";
|
||||||
//
|
//
|
||||||
|
// CHK_revpan
|
||||||
|
//
|
||||||
|
this.CHK_revpan.AutoSize = true;
|
||||||
|
this.CHK_revpan.Location = new System.Drawing.Point(534, 83);
|
||||||
|
this.CHK_revpan.Name = "CHK_revpan";
|
||||||
|
this.CHK_revpan.Size = new System.Drawing.Size(46, 17);
|
||||||
|
this.CHK_revpan.TabIndex = 20;
|
||||||
|
this.CHK_revpan.Text = "Rev";
|
||||||
|
this.CHK_revpan.UseVisualStyleBackColor = true;
|
||||||
|
this.CHK_revpan.CheckedChanged += new System.EventHandler(this.CHK_revpan_CheckedChanged);
|
||||||
|
//
|
||||||
|
// CHK_revtilt
|
||||||
|
//
|
||||||
|
this.CHK_revtilt.AutoSize = true;
|
||||||
|
this.CHK_revtilt.Location = new System.Drawing.Point(534, 159);
|
||||||
|
this.CHK_revtilt.Name = "CHK_revtilt";
|
||||||
|
this.CHK_revtilt.Size = new System.Drawing.Size(46, 17);
|
||||||
|
this.CHK_revtilt.TabIndex = 21;
|
||||||
|
this.CHK_revtilt.Text = "Rev";
|
||||||
|
this.CHK_revtilt.UseVisualStyleBackColor = true;
|
||||||
|
this.CHK_revtilt.CheckedChanged += new System.EventHandler(this.CHK_revtilt_CheckedChanged);
|
||||||
|
//
|
||||||
|
// TXT_pwmrangepan
|
||||||
|
//
|
||||||
|
this.TXT_pwmrangepan.Location = new System.Drawing.Point(83, 107);
|
||||||
|
this.TXT_pwmrangepan.Name = "TXT_pwmrangepan";
|
||||||
|
this.TXT_pwmrangepan.Size = new System.Drawing.Size(64, 20);
|
||||||
|
this.TXT_pwmrangepan.TabIndex = 22;
|
||||||
|
this.TXT_pwmrangepan.Text = "1000";
|
||||||
|
//
|
||||||
|
// TXT_pwmrangetilt
|
||||||
|
//
|
||||||
|
this.TXT_pwmrangetilt.Location = new System.Drawing.Point(83, 183);
|
||||||
|
this.TXT_pwmrangetilt.Name = "TXT_pwmrangetilt";
|
||||||
|
this.TXT_pwmrangetilt.Size = new System.Drawing.Size(64, 20);
|
||||||
|
this.TXT_pwmrangetilt.TabIndex = 23;
|
||||||
|
this.TXT_pwmrangetilt.Text = "1000";
|
||||||
|
//
|
||||||
|
// label8
|
||||||
|
//
|
||||||
|
this.label8.AutoSize = true;
|
||||||
|
this.label8.Location = new System.Drawing.Point(43, 110);
|
||||||
|
this.label8.Name = "label8";
|
||||||
|
this.label8.Size = new System.Drawing.Size(34, 13);
|
||||||
|
this.label8.TabIndex = 24;
|
||||||
|
this.label8.Text = "PWM";
|
||||||
|
//
|
||||||
|
// label9
|
||||||
|
//
|
||||||
|
this.label9.AutoSize = true;
|
||||||
|
this.label9.Location = new System.Drawing.Point(43, 186);
|
||||||
|
this.label9.Name = "label9";
|
||||||
|
this.label9.Size = new System.Drawing.Size(34, 13);
|
||||||
|
this.label9.TabIndex = 25;
|
||||||
|
this.label9.Text = "PWM";
|
||||||
|
//
|
||||||
|
// label10
|
||||||
|
//
|
||||||
|
this.label10.AutoSize = true;
|
||||||
|
this.label10.Location = new System.Drawing.Point(45, 160);
|
||||||
|
this.label10.Name = "label10";
|
||||||
|
this.label10.Size = new System.Drawing.Size(34, 13);
|
||||||
|
this.label10.TabIndex = 27;
|
||||||
|
this.label10.Text = "Angle";
|
||||||
|
//
|
||||||
|
// label11
|
||||||
|
//
|
||||||
|
this.label11.AutoSize = true;
|
||||||
|
this.label11.Location = new System.Drawing.Point(45, 84);
|
||||||
|
this.label11.Name = "label11";
|
||||||
|
this.label11.Size = new System.Drawing.Size(34, 13);
|
||||||
|
this.label11.TabIndex = 26;
|
||||||
|
this.label11.Text = "Angle";
|
||||||
|
//
|
||||||
|
// label12
|
||||||
|
//
|
||||||
|
this.label12.AutoSize = true;
|
||||||
|
this.label12.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
||||||
|
this.label12.Location = new System.Drawing.Point(94, 40);
|
||||||
|
this.label12.Name = "label12";
|
||||||
|
this.label12.Size = new System.Drawing.Size(403, 13);
|
||||||
|
this.label12.TabIndex = 28;
|
||||||
|
this.label12.Text = "Miss using this interface can cause servo damage, use with caution!!!";
|
||||||
|
//
|
||||||
|
// BUT_connect
|
||||||
|
//
|
||||||
|
this.BUT_connect.Location = new System.Drawing.Point(476, 9);
|
||||||
|
this.BUT_connect.Name = "BUT_connect";
|
||||||
|
this.BUT_connect.Size = new System.Drawing.Size(75, 23);
|
||||||
|
this.BUT_connect.TabIndex = 3;
|
||||||
|
this.BUT_connect.Text = "Connect";
|
||||||
|
this.BUT_connect.UseVisualStyleBackColor = true;
|
||||||
|
this.BUT_connect.Click += new System.EventHandler(this.BUT_connect_Click);
|
||||||
|
//
|
||||||
|
// LBL_pantrim
|
||||||
|
//
|
||||||
|
this.LBL_pantrim.AutoSize = true;
|
||||||
|
this.LBL_pantrim.Location = new System.Drawing.Point(326, 113);
|
||||||
|
this.LBL_pantrim.Name = "LBL_pantrim";
|
||||||
|
this.LBL_pantrim.Size = new System.Drawing.Size(34, 13);
|
||||||
|
this.LBL_pantrim.TabIndex = 29;
|
||||||
|
this.LBL_pantrim.Text = "Angle";
|
||||||
|
//
|
||||||
|
// LBL_tilttrim
|
||||||
|
//
|
||||||
|
this.LBL_tilttrim.AutoSize = true;
|
||||||
|
this.LBL_tilttrim.Location = new System.Drawing.Point(326, 190);
|
||||||
|
this.LBL_tilttrim.Name = "LBL_tilttrim";
|
||||||
|
this.LBL_tilttrim.Size = new System.Drawing.Size(34, 13);
|
||||||
|
this.LBL_tilttrim.TabIndex = 30;
|
||||||
|
this.LBL_tilttrim.Text = "Angle";
|
||||||
|
//
|
||||||
// Tracker
|
// Tracker
|
||||||
//
|
//
|
||||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||||
this.ClientSize = new System.Drawing.Size(569, 195);
|
this.ClientSize = new System.Drawing.Size(587, 212);
|
||||||
|
this.Controls.Add(this.LBL_tilttrim);
|
||||||
|
this.Controls.Add(this.LBL_pantrim);
|
||||||
|
this.Controls.Add(this.label12);
|
||||||
|
this.Controls.Add(this.label10);
|
||||||
|
this.Controls.Add(this.label11);
|
||||||
|
this.Controls.Add(this.label9);
|
||||||
|
this.Controls.Add(this.label8);
|
||||||
|
this.Controls.Add(this.TXT_pwmrangetilt);
|
||||||
|
this.Controls.Add(this.TXT_pwmrangepan);
|
||||||
|
this.Controls.Add(this.CHK_revtilt);
|
||||||
|
this.Controls.Add(this.CHK_revpan);
|
||||||
this.Controls.Add(this.label7);
|
this.Controls.Add(this.label7);
|
||||||
this.Controls.Add(this.label2);
|
this.Controls.Add(this.label2);
|
||||||
this.Controls.Add(this.label5);
|
this.Controls.Add(this.label5);
|
||||||
|
@ -222,6 +347,7 @@
|
||||||
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
|
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
|
||||||
this.Name = "Tracker";
|
this.Name = "Tracker";
|
||||||
this.Text = "Tracker";
|
this.Text = "Tracker";
|
||||||
|
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.Tracker_FormClosing);
|
||||||
((System.ComponentModel.ISupportInitialize)(this.TRK_pantrim)).EndInit();
|
((System.ComponentModel.ISupportInitialize)(this.TRK_pantrim)).EndInit();
|
||||||
((System.ComponentModel.ISupportInitialize)(this.TRK_tilttrim)).EndInit();
|
((System.ComponentModel.ISupportInitialize)(this.TRK_tilttrim)).EndInit();
|
||||||
this.ResumeLayout(false);
|
this.ResumeLayout(false);
|
||||||
|
@ -246,5 +372,16 @@
|
||||||
private System.Windows.Forms.TrackBar TRK_tilttrim;
|
private System.Windows.Forms.TrackBar TRK_tilttrim;
|
||||||
private System.Windows.Forms.Label label2;
|
private System.Windows.Forms.Label label2;
|
||||||
private System.Windows.Forms.Label label7;
|
private System.Windows.Forms.Label label7;
|
||||||
|
private System.Windows.Forms.CheckBox CHK_revpan;
|
||||||
|
private System.Windows.Forms.CheckBox CHK_revtilt;
|
||||||
|
private System.Windows.Forms.TextBox TXT_pwmrangepan;
|
||||||
|
private System.Windows.Forms.TextBox TXT_pwmrangetilt;
|
||||||
|
private System.Windows.Forms.Label label8;
|
||||||
|
private System.Windows.Forms.Label label9;
|
||||||
|
private System.Windows.Forms.Label label10;
|
||||||
|
private System.Windows.Forms.Label label11;
|
||||||
|
private System.Windows.Forms.Label label12;
|
||||||
|
private System.Windows.Forms.Label LBL_pantrim;
|
||||||
|
private System.Windows.Forms.Label LBL_tilttrim;
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -15,6 +15,12 @@ namespace ArdupilotMega.Antenna
|
||||||
static bool threadrun = false;
|
static bool threadrun = false;
|
||||||
static ITrackerOutput tracker;
|
static ITrackerOutput tracker;
|
||||||
|
|
||||||
|
enum interfaces
|
||||||
|
{
|
||||||
|
Maestro,
|
||||||
|
ArduTracker
|
||||||
|
}
|
||||||
|
|
||||||
public Tracker()
|
public Tracker()
|
||||||
{
|
{
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
|
@ -27,10 +33,63 @@ namespace ArdupilotMega.Antenna
|
||||||
{
|
{
|
||||||
BUT_connect.Text = "Disconnect";
|
BUT_connect.Text = "Disconnect";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
foreach (string value in MainV2.config.Keys)
|
||||||
|
{
|
||||||
|
if (value.StartsWith("Tracker_"))
|
||||||
|
{
|
||||||
|
var ctls = Controls.Find(value.Replace("Tracker_",""),true);
|
||||||
|
|
||||||
|
foreach (Control ctl in ctls)
|
||||||
|
{
|
||||||
|
if (typeof(TextBox) == ctl.GetType() ||
|
||||||
|
typeof(ComboBox) == ctl.GetType())
|
||||||
|
{
|
||||||
|
ctl.Text = MainV2.config[value].ToString();
|
||||||
|
}
|
||||||
|
else if (typeof(TrackBar) == ctl.GetType())
|
||||||
|
{
|
||||||
|
((TrackBar)ctl).Value = int.Parse(MainV2.config[value].ToString());
|
||||||
|
}
|
||||||
|
else if (typeof(CheckBox) == ctl.GetType())
|
||||||
|
{
|
||||||
|
((CheckBox)ctl).Checked = bool.Parse(MainV2.config[value].ToString());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// update other fields from load params
|
||||||
|
TXT_panrange_TextChanged(null, null);
|
||||||
|
TXT_tiltrange_TextChanged(null, null);
|
||||||
|
TRK_pantrim_Scroll(null, null);
|
||||||
|
TRK_tilttrim_Scroll(null, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
void saveconfig()
|
||||||
|
{
|
||||||
|
foreach (Control ctl in Controls)
|
||||||
|
{
|
||||||
|
if (typeof(TextBox) == ctl.GetType() ||
|
||||||
|
typeof(ComboBox) == ctl.GetType())
|
||||||
|
{
|
||||||
|
MainV2.config["Tracker_" + ctl.Name] = ctl.Text;
|
||||||
|
}
|
||||||
|
if (typeof(TrackBar) == ctl.GetType())
|
||||||
|
{
|
||||||
|
MainV2.config["Tracker_" + ctl.Name] = ((TrackBar)ctl).Value;
|
||||||
|
}
|
||||||
|
if (typeof(CheckBox) == ctl.GetType())
|
||||||
|
{
|
||||||
|
MainV2.config["Tracker_" + ctl.Name] = ((CheckBox)ctl).Checked;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void BUT_connect_Click(object sender, EventArgs e)
|
private void BUT_connect_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
|
saveconfig();
|
||||||
|
|
||||||
if (threadrun)
|
if (threadrun)
|
||||||
{
|
{
|
||||||
threadrun = false;
|
threadrun = false;
|
||||||
|
@ -44,7 +103,10 @@ namespace ArdupilotMega.Antenna
|
||||||
tracker.ComPort.Close();
|
tracker.ComPort.Close();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (CMB_interface.Text == "Maestro")
|
||||||
tracker = new ArdupilotMega.Antenna.Maestro();
|
tracker = new ArdupilotMega.Antenna.Maestro();
|
||||||
|
if (CMB_interface.Text == "ArduTracker")
|
||||||
|
tracker = new ArdupilotMega.Antenna.ArduTracker();
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
@ -58,14 +120,20 @@ namespace ArdupilotMega.Antenna
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
tracker.PanStartRange = int.Parse(TXT_panrange.Text) / 2 * -1;
|
tracker.PanStartRange = int.Parse(TXT_panrange.Text) / 1 * -1;
|
||||||
tracker.PanEndRange = int.Parse(TXT_panrange.Text) / 2;
|
tracker.PanEndRange = int.Parse(TXT_panrange.Text) / 1;
|
||||||
tracker.TrimPan = TRK_pantrim.Value;
|
tracker.TrimPan = TRK_pantrim.Value;
|
||||||
|
|
||||||
tracker.TiltStartRange = int.Parse(TXT_tiltrange.Text) / 2 * -1;
|
tracker.TiltStartRange = int.Parse(TXT_tiltrange.Text) / 2 * -1;
|
||||||
tracker.TiltEndRange = int.Parse(TXT_tiltrange.Text) / 2;
|
tracker.TiltEndRange = int.Parse(TXT_tiltrange.Text) / 2;
|
||||||
tracker.TrimTilt = TRK_tilttrim.Value;
|
tracker.TrimTilt = TRK_tilttrim.Value;
|
||||||
|
|
||||||
|
tracker.PanReverse = CHK_revpan.Checked;
|
||||||
|
tracker.TiltReverse = CHK_revtilt.Checked;
|
||||||
|
|
||||||
|
tracker.PanPWMRange = int.Parse(TXT_pwmrangepan.Text);
|
||||||
|
tracker.TiltPWMRange = int.Parse(TXT_pwmrangetilt.Text);
|
||||||
|
|
||||||
}
|
}
|
||||||
catch (Exception ex) { CustomMessageBox.Show("Bad User input " + ex.Message); return; }
|
catch (Exception ex) { CustomMessageBox.Show("Bad User input " + ex.Message); return; }
|
||||||
|
|
||||||
|
@ -83,6 +151,8 @@ namespace ArdupilotMega.Antenna
|
||||||
t12.Start();
|
t12.Start();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
BUT_connect.Text = "Disconnect";
|
||||||
}
|
}
|
||||||
|
|
||||||
void mainloop()
|
void mainloop()
|
||||||
|
@ -104,12 +174,14 @@ namespace ArdupilotMega.Antenna
|
||||||
{
|
{
|
||||||
if (tracker != null)
|
if (tracker != null)
|
||||||
tracker.TrimPan = TRK_pantrim.Value;
|
tracker.TrimPan = TRK_pantrim.Value;
|
||||||
|
LBL_pantrim.Text = TRK_pantrim.Value.ToString();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void TRK_tilttrim_Scroll(object sender, EventArgs e)
|
private void TRK_tilttrim_Scroll(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
if (tracker != null)
|
if (tracker != null)
|
||||||
tracker.TrimTilt = TRK_tilttrim.Value;
|
tracker.TrimTilt = TRK_tilttrim.Value;
|
||||||
|
LBL_tilttrim.Text = TRK_tilttrim.Value.ToString();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void TXT_panrange_TextChanged(object sender, EventArgs e)
|
private void TXT_panrange_TextChanged(object sender, EventArgs e)
|
||||||
|
@ -118,8 +190,8 @@ namespace ArdupilotMega.Antenna
|
||||||
|
|
||||||
int.TryParse(TXT_panrange.Text, out range);
|
int.TryParse(TXT_panrange.Text, out range);
|
||||||
|
|
||||||
TRK_pantrim.Minimum = range / 2 * -1;
|
TRK_pantrim.Minimum = range / 1 * -1;
|
||||||
TRK_pantrim.Maximum = range / 2;
|
TRK_pantrim.Maximum = range / 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void TXT_tiltrange_TextChanged(object sender, EventArgs e)
|
private void TXT_tiltrange_TextChanged(object sender, EventArgs e)
|
||||||
|
@ -128,8 +200,23 @@ namespace ArdupilotMega.Antenna
|
||||||
|
|
||||||
int.TryParse(TXT_tiltrange.Text, out range);
|
int.TryParse(TXT_tiltrange.Text, out range);
|
||||||
|
|
||||||
TRK_tilttrim.Minimum = range / 2 * -1;
|
TRK_tilttrim.Minimum = range / 1 * -1;
|
||||||
TRK_tilttrim.Maximum = range / 2;
|
TRK_tilttrim.Maximum = range / 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void CHK_revpan_CheckedChanged(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private void CHK_revtilt_CheckedChanged(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Tracker_FormClosing(object sender, FormClosingEventArgs e)
|
||||||
|
{
|
||||||
|
saveconfig();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -213,6 +213,7 @@
|
||||||
</Reference>
|
</Reference>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
<Compile Include="Antenna\ArduTracker.cs" />
|
||||||
<Compile Include="Antenna\ITrackerOutput.cs" />
|
<Compile Include="Antenna\ITrackerOutput.cs" />
|
||||||
<Compile Include="Antenna\Maestro.cs" />
|
<Compile Include="Antenna\Maestro.cs" />
|
||||||
<Compile Include="Antenna\Tracker.cs">
|
<Compile Include="Antenna\Tracker.cs">
|
||||||
|
@ -230,6 +231,7 @@
|
||||||
<DependentUpon>ProgressReporterDialogue.cs</DependentUpon>
|
<DependentUpon>ProgressReporterDialogue.cs</DependentUpon>
|
||||||
</Compile>
|
</Compile>
|
||||||
<Compile Include="MagCalib.cs" />
|
<Compile Include="MagCalib.cs" />
|
||||||
|
<Compile Include="PIDTunning.cs" />
|
||||||
<Compile Include="Radio\3DRradio.cs">
|
<Compile Include="Radio\3DRradio.cs">
|
||||||
<SubType>Form</SubType>
|
<SubType>Form</SubType>
|
||||||
</Compile>
|
</Compile>
|
||||||
|
@ -446,7 +448,6 @@
|
||||||
</Compile>
|
</Compile>
|
||||||
<Compile Include="Radio\Uploader.cs" />
|
<Compile Include="Radio\Uploader.cs" />
|
||||||
<Compile Include="LangUtility.cs" />
|
<Compile Include="LangUtility.cs" />
|
||||||
<Compile Include="test.cs" />
|
|
||||||
<Compile Include="ThemeManager.cs" />
|
<Compile Include="ThemeManager.cs" />
|
||||||
<EmbeddedResource Include="Antenna\Tracker.resx">
|
<EmbeddedResource Include="Antenna\Tracker.resx">
|
||||||
<DependentUpon>Tracker.cs</DependentUpon>
|
<DependentUpon>Tracker.cs</DependentUpon>
|
||||||
|
|
|
@ -3,6 +3,7 @@ using System.Collections.Generic;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.IO.Ports;
|
using System.IO.Ports;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
|
using System.Linq;
|
||||||
|
|
||||||
namespace ArdupilotMega
|
namespace ArdupilotMega
|
||||||
{
|
{
|
||||||
|
@ -18,6 +19,11 @@ namespace ArdupilotMega
|
||||||
|
|
||||||
public void toggleDTR()
|
public void toggleDTR()
|
||||||
{
|
{
|
||||||
|
bool open = this.IsOpen;
|
||||||
|
|
||||||
|
if (!open)
|
||||||
|
this.Open();
|
||||||
|
|
||||||
base.DtrEnable = false;
|
base.DtrEnable = false;
|
||||||
base.RtsEnable = false;
|
base.RtsEnable = false;
|
||||||
|
|
||||||
|
@ -27,6 +33,56 @@ namespace ArdupilotMega
|
||||||
base.RtsEnable = true;
|
base.RtsEnable = true;
|
||||||
|
|
||||||
System.Threading.Thread.Sleep(50);
|
System.Threading.Thread.Sleep(50);
|
||||||
|
|
||||||
|
if (!open)
|
||||||
|
this.Close();
|
||||||
|
}
|
||||||
|
|
||||||
|
public new static string[] GetPortNames()
|
||||||
|
{
|
||||||
|
string[] monoDevs = new string[0];
|
||||||
|
|
||||||
|
if (Directory.Exists("/dev/"))
|
||||||
|
{
|
||||||
|
if (Directory.Exists("/dev/serial/by-id/"))
|
||||||
|
monoDevs = Directory.GetFiles("/dev/serial/by-id/", "*");
|
||||||
|
monoDevs = Directory.GetFiles("/dev/", "*ACM*");
|
||||||
|
monoDevs = Directory.GetFiles("/dev/", "ttyUSB*");
|
||||||
|
}
|
||||||
|
|
||||||
|
string[] ports = System.IO.Ports.SerialPort.GetPortNames()
|
||||||
|
.Select(p => p.TrimEnd())
|
||||||
|
.Select(FixBlueToothPortNameBug)
|
||||||
|
.ToArray();
|
||||||
|
|
||||||
|
string[] allPorts = new string[monoDevs.Length + ports.Length];
|
||||||
|
|
||||||
|
monoDevs.CopyTo(allPorts, 0);
|
||||||
|
ports.CopyTo(allPorts, monoDevs.Length);
|
||||||
|
|
||||||
|
return allPorts;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// .NET bug: sometimes bluetooth ports are enumerated with bogus characters
|
||||||
|
// eg 'COM10' becomes 'COM10c' - one workaround is to remove the non numeric
|
||||||
|
// char. Annoyingly, sometimes a numeric char is added, which means this
|
||||||
|
// does not work in all cases.
|
||||||
|
// See http://connect.microsoft.com/VisualStudio/feedback/details/236183/system-io-ports-serialport-getportnames-error-with-bluetooth
|
||||||
|
private static string FixBlueToothPortNameBug(string portName)
|
||||||
|
{
|
||||||
|
if (!portName.StartsWith("COM"))
|
||||||
|
return portName;
|
||||||
|
var newPortName = "COM"; // Start over with "COM"
|
||||||
|
foreach (var portChar in portName.Substring(3).ToCharArray()) // Remove "COM", put the rest in a character array
|
||||||
|
{
|
||||||
|
if (char.IsDigit(portChar))
|
||||||
|
newPortName += portChar.ToString(); // Good character, append to portName
|
||||||
|
// else
|
||||||
|
//log.WarnFormat("Bad (Non Numeric) character in port name '{0}' - removing", portName);
|
||||||
|
}
|
||||||
|
|
||||||
|
return newPortName;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -792,7 +792,7 @@ namespace ArdupilotMega.GCSViews
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
Directory.CreateDirectory(Path.GetDirectoryName(Application.ExecutablePath) + Path.DirectorySeparatorChar + @"logs");
|
Directory.CreateDirectory(Path.GetDirectoryName(Application.ExecutablePath) + Path.DirectorySeparatorChar + @"logs");
|
||||||
swlog = new StreamWriter(Path.GetDirectoryName(Application.ExecutablePath) + Path.DirectorySeparatorChar + @"logs" + Path.DirectorySeparatorChar + DateTime.Now.ToString("yyyy-MM-dd hh-mm") + " telem.log");
|
swlog = new StreamWriter(Path.GetDirectoryName(Application.ExecutablePath) + Path.DirectorySeparatorChar + @"logs" + Path.DirectorySeparatorChar + DateTime.Now.ToString("yyyy-MM-dd HH-mm") + " telem.log");
|
||||||
}
|
}
|
||||||
catch { CustomMessageBox.Show("Log creation error"); }
|
catch { CustomMessageBox.Show("Log creation error"); }
|
||||||
}
|
}
|
||||||
|
@ -1375,7 +1375,7 @@ namespace ArdupilotMega.GCSViews
|
||||||
|
|
||||||
aviwriter = new AviWriter();
|
aviwriter = new AviWriter();
|
||||||
Directory.CreateDirectory(Path.GetDirectoryName(Application.ExecutablePath) + Path.DirectorySeparatorChar + @"logs");
|
Directory.CreateDirectory(Path.GetDirectoryName(Application.ExecutablePath) + Path.DirectorySeparatorChar + @"logs");
|
||||||
aviwriter.avi_start(Path.GetDirectoryName(Application.ExecutablePath) + Path.DirectorySeparatorChar + @"logs" + Path.DirectorySeparatorChar + DateTime.Now.ToString("yyyy-MM-dd hh-mm-ss") + ".avi");
|
aviwriter.avi_start(Path.GetDirectoryName(Application.ExecutablePath) + Path.DirectorySeparatorChar + @"logs" + Path.DirectorySeparatorChar + DateTime.Now.ToString("yyyy-MM-dd HH-mm-ss") + ".avi");
|
||||||
|
|
||||||
recordHudToAVIToolStripMenuItem.Text = "Recording";
|
recordHudToAVIToolStripMenuItem.Text = "Recording";
|
||||||
}
|
}
|
||||||
|
|
|
@ -233,7 +233,7 @@ namespace ArdupilotMega
|
||||||
case serialstatus.Createfile:
|
case serialstatus.Createfile:
|
||||||
receivedbytes = 0;
|
receivedbytes = 0;
|
||||||
Directory.CreateDirectory(Path.GetDirectoryName(Application.ExecutablePath) + Path.DirectorySeparatorChar + @"logs");
|
Directory.CreateDirectory(Path.GetDirectoryName(Application.ExecutablePath) + Path.DirectorySeparatorChar + @"logs");
|
||||||
logfile = Path.GetDirectoryName(Application.ExecutablePath) + Path.DirectorySeparatorChar + @"logs" + Path.DirectorySeparatorChar + DateTime.Now.ToString("yyyy-MM-dd hh-mm") + " " + currentlog + ".log";
|
logfile = Path.GetDirectoryName(Application.ExecutablePath) + Path.DirectorySeparatorChar + @"logs" + Path.DirectorySeparatorChar + DateTime.Now.ToString("yyyy-MM-dd HH-mm") + " " + currentlog + ".log";
|
||||||
sw = new StreamWriter(logfile);
|
sw = new StreamWriter(logfile);
|
||||||
status = serialstatus.Waiting;
|
status = serialstatus.Waiting;
|
||||||
lock (thisLock)
|
lock (thisLock)
|
||||||
|
|
|
@ -184,9 +184,6 @@ namespace ArdupilotMega
|
||||||
|
|
||||||
BaseStream.DiscardInBuffer();
|
BaseStream.DiscardInBuffer();
|
||||||
|
|
||||||
// removed because of apc220 units
|
|
||||||
//BaseStream.toggleDTR();
|
|
||||||
|
|
||||||
Thread.Sleep(1000);
|
Thread.Sleep(1000);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -117,7 +117,7 @@ namespace ArdupilotMega
|
||||||
|
|
||||||
comPort.BaseStream.BaudRate = 115200;
|
comPort.BaseStream.BaudRate = 115200;
|
||||||
|
|
||||||
CMB_serialport.Items.AddRange(GetPortNames());
|
CMB_serialport.Items.AddRange(SerialPort.GetPortNames());
|
||||||
CMB_serialport.Items.Add("TCP");
|
CMB_serialport.Items.Add("TCP");
|
||||||
CMB_serialport.Items.Add("UDP");
|
CMB_serialport.Items.Add("UDP");
|
||||||
if (CMB_serialport.Items.Count > 0)
|
if (CMB_serialport.Items.Count > 0)
|
||||||
|
@ -253,57 +253,6 @@ namespace ArdupilotMega
|
||||||
splash.Close();
|
splash.Close();
|
||||||
}
|
}
|
||||||
|
|
||||||
private string[] GetPortNames()
|
|
||||||
{
|
|
||||||
string[] monoDevs = new string[0];
|
|
||||||
|
|
||||||
log.Debug("Getting Comports");
|
|
||||||
|
|
||||||
if (MONO)
|
|
||||||
{
|
|
||||||
if (Directory.Exists("/dev/"))
|
|
||||||
{
|
|
||||||
if (Directory.Exists("/dev/serial/by-id/"))
|
|
||||||
monoDevs = Directory.GetFiles("/dev/serial/by-id/", "*");
|
|
||||||
monoDevs = Directory.GetFiles("/dev/", "*ACM*");
|
|
||||||
monoDevs = Directory.GetFiles("/dev/", "ttyUSB*");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
string[] ports = SerialPort.GetPortNames()
|
|
||||||
.Select(p => p.TrimEnd())
|
|
||||||
.Select(FixBlueToothPortNameBug)
|
|
||||||
.ToArray();
|
|
||||||
|
|
||||||
string[] allPorts = new string[monoDevs.Length + ports.Length];
|
|
||||||
|
|
||||||
monoDevs.CopyTo(allPorts, 0);
|
|
||||||
ports.CopyTo(allPorts, monoDevs.Length);
|
|
||||||
|
|
||||||
return allPorts;
|
|
||||||
}
|
|
||||||
|
|
||||||
// .NET bug: sometimes bluetooth ports are enumerated with bogus characters
|
|
||||||
// eg 'COM10' becomes 'COM10c' - one workaround is to remove the non numeric
|
|
||||||
// char. Annoyingly, sometimes a numeric char is added, which means this
|
|
||||||
// does not work in all cases.
|
|
||||||
// See http://connect.microsoft.com/VisualStudio/feedback/details/236183/system-io-ports-serialport-getportnames-error-with-bluetooth
|
|
||||||
private string FixBlueToothPortNameBug(string portName)
|
|
||||||
{
|
|
||||||
if (!portName.StartsWith("COM"))
|
|
||||||
return portName;
|
|
||||||
var newPortName = "COM"; // Start over with "COM"
|
|
||||||
foreach (var portChar in portName.Substring(3).ToCharArray()) // Remove "COM", put the rest in a character array
|
|
||||||
{
|
|
||||||
if (char.IsDigit(portChar))
|
|
||||||
newPortName += portChar.ToString(); // Good character, append to portName
|
|
||||||
else
|
|
||||||
log.WarnFormat("Bad (Non Numeric) character in port name '{0}' - removing", portName);
|
|
||||||
}
|
|
||||||
|
|
||||||
return newPortName;
|
|
||||||
}
|
|
||||||
|
|
||||||
internal void ScreenShot()
|
internal void ScreenShot()
|
||||||
{
|
{
|
||||||
Rectangle bounds = Screen.GetBounds(Point.Empty);
|
Rectangle bounds = Screen.GetBounds(Point.Empty);
|
||||||
|
@ -313,7 +262,7 @@ namespace ArdupilotMega
|
||||||
{
|
{
|
||||||
g.CopyFromScreen(Point.Empty, Point.Empty, bounds.Size);
|
g.CopyFromScreen(Point.Empty, Point.Empty, bounds.Size);
|
||||||
}
|
}
|
||||||
string name = "ss" + DateTime.Now.ToString("hhmmss") + ".jpg";
|
string name = "ss" + DateTime.Now.ToString("HHmmss") + ".jpg";
|
||||||
bitmap.Save(Path.GetDirectoryName(Application.ExecutablePath) + Path.DirectorySeparatorChar + name, System.Drawing.Imaging.ImageFormat.Jpeg);
|
bitmap.Save(Path.GetDirectoryName(Application.ExecutablePath) + Path.DirectorySeparatorChar + name, System.Drawing.Imaging.ImageFormat.Jpeg);
|
||||||
CustomMessageBox.Show("Screenshot saved to " + name);
|
CustomMessageBox.Show("Screenshot saved to " + name);
|
||||||
}
|
}
|
||||||
|
@ -324,7 +273,7 @@ namespace ArdupilotMega
|
||||||
{
|
{
|
||||||
string oldport = CMB_serialport.Text;
|
string oldport = CMB_serialport.Text;
|
||||||
CMB_serialport.Items.Clear();
|
CMB_serialport.Items.Clear();
|
||||||
CMB_serialport.Items.AddRange(GetPortNames());
|
CMB_serialport.Items.AddRange(SerialPort.GetPortNames());
|
||||||
CMB_serialport.Items.Add("TCP");
|
CMB_serialport.Items.Add("TCP");
|
||||||
CMB_serialport.Items.Add("UDP");
|
CMB_serialport.Items.Add("UDP");
|
||||||
if (CMB_serialport.Items.Contains(oldport))
|
if (CMB_serialport.Items.Contains(oldport))
|
||||||
|
@ -538,10 +487,19 @@ namespace ArdupilotMega
|
||||||
comPort.BaseStream.StopBits = (StopBits)Enum.Parse(typeof(StopBits), "1");
|
comPort.BaseStream.StopBits = (StopBits)Enum.Parse(typeof(StopBits), "1");
|
||||||
comPort.BaseStream.Parity = (Parity)Enum.Parse(typeof(Parity), "None");
|
comPort.BaseStream.Parity = (Parity)Enum.Parse(typeof(Parity), "None");
|
||||||
|
|
||||||
comPort.BaseStream.DtrEnable = false;
|
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
comPort.BaseStream.PortName = CMB_serialport.Text;
|
||||||
|
|
||||||
|
// false here
|
||||||
|
comPort.BaseStream.DtrEnable = false;
|
||||||
|
comPort.BaseStream.RtsEnable = false;
|
||||||
|
|
||||||
|
if (config["CHK_resetapmonconnect"] == null || bool.Parse(config["CHK_resetapmonconnect"].ToString()) == true)
|
||||||
|
comPort.BaseStream.toggleDTR();
|
||||||
|
|
||||||
|
// if reset on connect is on dtr will be true here
|
||||||
|
|
||||||
if (comPort.logfile != null)
|
if (comPort.logfile != null)
|
||||||
comPort.logfile.Close();
|
comPort.logfile.Close();
|
||||||
try
|
try
|
||||||
|
@ -551,7 +509,6 @@ namespace ArdupilotMega
|
||||||
}
|
}
|
||||||
catch { CustomMessageBox.Show("Failed to create log - wont log this session"); } // soft fail
|
catch { CustomMessageBox.Show("Failed to create log - wont log this session"); } // soft fail
|
||||||
|
|
||||||
comPort.BaseStream.PortName = CMB_serialport.Text;
|
|
||||||
comPort.Open(true);
|
comPort.Open(true);
|
||||||
|
|
||||||
if (comPort.param["SYSID_SW_TYPE"] != null)
|
if (comPort.param["SYSID_SW_TYPE"] != null)
|
||||||
|
|
|
@ -0,0 +1,46 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
namespace ArdupilotMega
|
||||||
|
{
|
||||||
|
class PIDTunning
|
||||||
|
{
|
||||||
|
|
||||||
|
public static void twiddle(double[] initialgains, Func<double[],double> run, double tol = 0.001)
|
||||||
|
{
|
||||||
|
int n_params = 3;
|
||||||
|
double err= 0;
|
||||||
|
double[] dparams = initialgains; //{1.0f,1.0f,1.0f};
|
||||||
|
double[] paramss = {0.0f,0.0f,0.0f};
|
||||||
|
double best_error = run(paramss);
|
||||||
|
int n = 0;
|
||||||
|
|
||||||
|
while (dparams.Sum() > tol) {
|
||||||
|
for (int i = 0; i < n_params; i++){
|
||||||
|
paramss[i] += dparams[i];
|
||||||
|
err = run(paramss);
|
||||||
|
if (err < best_error){
|
||||||
|
best_error = err;
|
||||||
|
dparams[i] *= 1.1;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
paramss[i] -= 2.0 * dparams[i];
|
||||||
|
err = run(paramss);
|
||||||
|
if (err < best_error){
|
||||||
|
best_error = err;
|
||||||
|
dparams[i] *= 1.1;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
paramss[i] += dparams[i];
|
||||||
|
dparams[i] *= 0.9;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
n += 1;
|
||||||
|
Console.WriteLine("Twiddle #" + n + " " + paramss.ToString() + " -> " + best_error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -34,5 +34,5 @@ using System.Resources;
|
||||||
// by using the '*' as shown below:
|
// by using the '*' as shown below:
|
||||||
// [assembly: AssemblyVersion("1.0.*")]
|
// [assembly: AssemblyVersion("1.0.*")]
|
||||||
[assembly: AssemblyVersion("1.0.0.0")]
|
[assembly: AssemblyVersion("1.0.0.0")]
|
||||||
[assembly: AssemblyFileVersion("1.1.55")]
|
[assembly: AssemblyFileVersion("1.1.56")]
|
||||||
[assembly: NeutralResourcesLanguageAttribute("")]
|
[assembly: NeutralResourcesLanguageAttribute("")]
|
||||||
|
|
Binary file not shown.
Loading…
Reference in New Issue