diff --git a/Tools/ArdupilotMegaPlanner/Controls/HUD.cs b/Tools/ArdupilotMegaPlanner/Controls/HUD.cs index 66b8600655..33f1ae38ec 100644 --- a/Tools/ArdupilotMegaPlanner/Controls/HUD.cs +++ b/Tools/ArdupilotMegaPlanner/Controls/HUD.cs @@ -7,7 +7,7 @@ using System.Text; using System.Windows.Forms; using System.IO; using System.Drawing.Imaging; - +using System.Collections; using System.Threading; using System.Drawing.Drawing2D; @@ -88,6 +88,7 @@ namespace ArdupilotMega.Controls float _airspeed = 0; float _targetspeed = 0; float _batterylevel = 0; + float _current = 0; float _batteryremaining = 0; float _gpsfix = 0; float _gpshdop = 0; @@ -128,6 +129,8 @@ namespace ArdupilotMega.Controls [System.ComponentModel.Browsable(true), System.ComponentModel.Category("Values")] public float batteryremaining { get { return _batteryremaining; } set { if (_batteryremaining != value) { _batteryremaining = value; this.Invalidate(); } } } [System.ComponentModel.Browsable(true), System.ComponentModel.Category("Values")] + public float current { get { return _current; } set { if (_current != value) { _current = value; this.Invalidate(); } } } + [System.ComponentModel.Browsable(true), System.ComponentModel.Category("Values")] public float gpsfix { get { return _gpsfix; } set { if (_gpsfix != value) { _gpsfix = value; this.Invalidate(); } } } [System.ComponentModel.Browsable(true), System.ComponentModel.Category("Values")] public float gpshdop { get { return _gpshdop; } set { if (_gpshdop != value) { _gpshdop = value; this.Invalidate(); } } } @@ -155,6 +158,17 @@ namespace ArdupilotMega.Controls [System.ComponentModel.Browsable(true), System.ComponentModel.Category("Values")] public int status { get; set; } + + public struct Custom + { + //public Point Position; + //public float FontSize; + public string Header; + public System.Reflection.PropertyInfo Item; + public float GetValue { get { return (float)Item.GetValue((object)MainV2.cs, null); } } + } + + public Hashtable CustomItems = new Hashtable(); int statuslast = 0; DateTime armedtimer = DateTime.MinValue; @@ -353,8 +367,8 @@ namespace ArdupilotMega.Controls { countdate = DateTime.Now; Console.WriteLine("HUD " + count + " hz drawtime " + (huddrawtime / count) + " gl " + opengl); - if ((huddrawtime / count) > 1000) - opengl = false; + // if ((huddrawtime / count) > 1000) + // opengl = false; count = 0; huddrawtime = 0; @@ -1373,7 +1387,7 @@ namespace ArdupilotMega.Controls drawstring(graphicsObject, "Bat", font, fontsize + 2, whiteBrush, fontsize, this.Height - 30 - fontoffset); drawstring(graphicsObject, _batterylevel.ToString("0.00v"), font, fontsize + 2, whiteBrush, fontsize * 4, this.Height - 30 - fontoffset); - drawstring(graphicsObject, _batteryremaining.ToString("0%"), font, fontsize + 2, whiteBrush, fontsize * 9, this.Height - 30 - fontoffset); + drawstring(graphicsObject, _current.ToString("0 A"), font, fontsize + 2, whiteBrush, fontsize * 9, this.Height - 30 - fontoffset); } // gps @@ -1402,6 +1416,21 @@ namespace ArdupilotMega.Controls if (isNaN) drawstring(graphicsObject, "NaN Error " + DateTime.Now, font, this.Height / 30 + 10, Brushes.Red, 50, 50); + // custom user items + graphicsObject.ResetTransform(); + int height = this.Height - 30 - fontoffset - fontsize - 8; + foreach (string key in CustomItems.Keys) + { + try + { + Custom item = (Custom)CustomItems[key]; + drawstring(graphicsObject, item.Header + item.GetValue.ToString("0.##"), font, fontsize + 2, whiteBrush, this.Width / 8, height); + height -= fontsize+5; + } + catch { } + + } + if (!opengl) { diff --git a/Tools/ArdupilotMegaPlanner/Controls/QuickView.Designer.cs b/Tools/ArdupilotMegaPlanner/Controls/QuickView.Designer.cs index 63a734a0c6..38991fb957 100644 --- a/Tools/ArdupilotMegaPlanner/Controls/QuickView.Designer.cs +++ b/Tools/ArdupilotMegaPlanner/Controls/QuickView.Designer.cs @@ -36,22 +36,24 @@ // // labelWithPseudoOpacity1 // + this.labelWithPseudoOpacity1.AutoSize = true; this.labelWithPseudoOpacity1.Dock = System.Windows.Forms.DockStyle.Fill; this.labelWithPseudoOpacity1.Font = new System.Drawing.Font("Microsoft Sans Serif", 18F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.labelWithPseudoOpacity1.Location = new System.Drawing.Point(3, 0); this.labelWithPseudoOpacity1.Name = "labelWithPseudoOpacity1"; - this.labelWithPseudoOpacity1.Size = new System.Drawing.Size(161, 55); + this.labelWithPseudoOpacity1.Size = new System.Drawing.Size(161, 50); this.labelWithPseudoOpacity1.TabIndex = 0; this.labelWithPseudoOpacity1.Text = "Altitude:"; this.labelWithPseudoOpacity1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; // // labelWithPseudoOpacity2 // + this.labelWithPseudoOpacity2.AutoSize = true; this.labelWithPseudoOpacity2.Dock = System.Windows.Forms.DockStyle.Fill; this.labelWithPseudoOpacity2.Font = new System.Drawing.Font("Microsoft Sans Serif", 36F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.labelWithPseudoOpacity2.Location = new System.Drawing.Point(170, 0); this.labelWithPseudoOpacity2.Name = "labelWithPseudoOpacity2"; - this.labelWithPseudoOpacity2.Size = new System.Drawing.Size(162, 55); + this.labelWithPseudoOpacity2.Size = new System.Drawing.Size(162, 50); this.labelWithPseudoOpacity2.TabIndex = 1; this.labelWithPseudoOpacity2.Text = "0.0"; this.labelWithPseudoOpacity2.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; @@ -68,7 +70,7 @@ this.tableLayoutPanel1.Name = "tableLayoutPanel1"; this.tableLayoutPanel1.RowCount = 1; this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); - this.tableLayoutPanel1.Size = new System.Drawing.Size(335, 55); + this.tableLayoutPanel1.Size = new System.Drawing.Size(335, 50); this.tableLayoutPanel1.TabIndex = 2; // // QuickView @@ -76,9 +78,11 @@ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.Controls.Add(this.tableLayoutPanel1); + this.MinimumSize = new System.Drawing.Size(100, 27); this.Name = "QuickView"; - this.Size = new System.Drawing.Size(335, 55); + this.Size = new System.Drawing.Size(335, 50); this.tableLayoutPanel1.ResumeLayout(false); + this.tableLayoutPanel1.PerformLayout(); this.ResumeLayout(false); } diff --git a/Tools/ArdupilotMegaPlanner/Controls/QuickView.cs b/Tools/ArdupilotMegaPlanner/Controls/QuickView.cs index 4d7d89fd0e..78295aae74 100644 --- a/Tools/ArdupilotMegaPlanner/Controls/QuickView.cs +++ b/Tools/ArdupilotMegaPlanner/Controls/QuickView.cs @@ -12,11 +12,11 @@ namespace ArdupilotMega.Controls public partial class QuickView : UserControl { [System.ComponentModel.Browsable(true)] - public string desc { get { return labelWithPseudoOpacity1.Text; } set { labelWithPseudoOpacity1.Text = value; } } + public string desc { get { return labelWithPseudoOpacity1.Text; } set { if (labelWithPseudoOpacity1.Text == value) return; labelWithPseudoOpacity1.Text = value; } } [System.ComponentModel.Browsable(true)] - public string number { get { return labelWithPseudoOpacity2.Text; } set { labelWithPseudoOpacity2.Text = value; } } + public string number { get { return labelWithPseudoOpacity2.Text; } set { if (labelWithPseudoOpacity2.Text == value) return; labelWithPseudoOpacity2.Text = value; } } [System.ComponentModel.Browsable(true)] - public Color numberColor { get { return labelWithPseudoOpacity2.ForeColor; } set { labelWithPseudoOpacity2.ForeColor = value; } } + public Color numberColor { get { return labelWithPseudoOpacity2.ForeColor; } set { if (labelWithPseudoOpacity2.ForeColor == value) return; labelWithPseudoOpacity2.ForeColor = value; } } public QuickView() { @@ -54,5 +54,12 @@ namespace ArdupilotMega.Controls base.OnPaint(e); } + protected override void OnResize(EventArgs e) + { + if (this.Height > 20) + labelWithPseudoOpacity2.Font = new Font(labelWithPseudoOpacity2.Font.FontFamily, this.Height * 0.7f); + + base.OnResize(e); + } } } diff --git a/Tools/ArdupilotMegaPlanner/CurrentState.cs b/Tools/ArdupilotMegaPlanner/CurrentState.cs index b2a964f9b5..8d921b06aa 100644 --- a/Tools/ArdupilotMegaPlanner/CurrentState.cs +++ b/Tools/ArdupilotMegaPlanner/CurrentState.cs @@ -780,7 +780,7 @@ namespace ArdupilotMega gpsstatus = gps.fix_type; // Console.WriteLine("gpsfix {0}",gpsstatus); - gpshdop = (float)Math.Round((double)gps.eph / 10.0,2); + gpshdop = (float)Math.Round((double)gps.eph / 100.0,2); satcount = gps.satellites_visible; diff --git a/Tools/ArdupilotMegaPlanner/FollowMe.cs b/Tools/ArdupilotMegaPlanner/FollowMe.cs index 63e7525890..f8f257ae8d 100644 --- a/Tools/ArdupilotMegaPlanner/FollowMe.cs +++ b/Tools/ArdupilotMegaPlanner/FollowMe.cs @@ -7,6 +7,7 @@ using System.Linq; using System.Text; using System.Windows.Forms; using System.IO.Ports; +using System.Globalization; namespace ArdupilotMega { @@ -113,14 +114,14 @@ namespace ArdupilotMega continue; } - gotolocation.Lat = double.Parse(items[2]) / 100.0; + gotolocation.Lat = double.Parse(items[2], CultureInfo.InvariantCulture) / 100.0; gotolocation.Lat = (int)gotolocation.Lat + ((gotolocation.Lat - (int)gotolocation.Lat) / 0.60); if (items[3] == "S") gotolocation.Lat *= -1; - gotolocation.Lng = double.Parse(items[4]) / 100.0; + gotolocation.Lng = double.Parse(items[4], CultureInfo.InvariantCulture) / 100.0; gotolocation.Lng = (int)gotolocation.Lng + ((gotolocation.Lng - (int)gotolocation.Lng) / 0.60); diff --git a/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigFriendlyParams.cs b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigFriendlyParams.cs index cf470e7920..3e867c616d 100644 --- a/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigFriendlyParams.cs +++ b/Tools/ArdupilotMegaPlanner/GCSViews/ConfigurationView/ConfigFriendlyParams.cs @@ -208,7 +208,7 @@ namespace ArdupilotMega.GCSViews.ConfigurationView { bool controlAdded = false; - string value = ((float)MainV2.comPort.param[x.Key]).ToString("0.###"); + string value = ((float)MainV2.comPort.param[x.Key]).ToString("0.###", CultureInfo.InvariantCulture); string description = _parameterMetaDataRepository.GetParameterMetaData(x.Key, ParameterMetaDataConstants.Description); string displayName = x.Value + " (" + x.Key + ")"; string units = _parameterMetaDataRepository.GetParameterMetaData(x.Key, ParameterMetaDataConstants.Units); diff --git a/Tools/ArdupilotMegaPlanner/GCSViews/FlightData.Designer.cs b/Tools/ArdupilotMegaPlanner/GCSViews/FlightData.Designer.cs index d47d041064..244ce4bcae 100644 --- a/Tools/ArdupilotMegaPlanner/GCSViews/FlightData.Designer.cs +++ b/Tools/ArdupilotMegaPlanner/GCSViews/FlightData.Designer.cs @@ -24,6 +24,7 @@ this.setMJPEGSourceToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.setAspectRatioToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.displayBatteryInfoToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.userItemsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.bindingSource1 = new System.Windows.Forms.BindingSource(this.components); this.tabControl1 = new System.Windows.Forms.TabControl(); this.tabQuick = new System.Windows.Forms.TabPage(); @@ -181,10 +182,12 @@ this.hud1.batterylevel = 0F; this.hud1.batteryremaining = 0F; this.hud1.ContextMenuStrip = this.contextMenuStrip2; + this.hud1.current = 0F; this.hud1.DataBindings.Add(new System.Windows.Forms.Binding("airspeed", this.bindingSource1, "airspeed", true)); this.hud1.DataBindings.Add(new System.Windows.Forms.Binding("alt", this.bindingSource1, "alt", true)); this.hud1.DataBindings.Add(new System.Windows.Forms.Binding("batterylevel", this.bindingSource1, "battery_voltage", true)); this.hud1.DataBindings.Add(new System.Windows.Forms.Binding("batteryremaining", this.bindingSource1, "battery_remaining", true)); + this.hud1.DataBindings.Add(new System.Windows.Forms.Binding("current", this.bindingSource1, "current", true)); this.hud1.DataBindings.Add(new System.Windows.Forms.Binding("datetime", this.bindingSource1, "datetime", true)); this.hud1.DataBindings.Add(new System.Windows.Forms.Binding("disttowp", this.bindingSource1, "wp_dist", true)); this.hud1.DataBindings.Add(new System.Windows.Forms.Binding("gpsfix", this.bindingSource1, "gpsstatus", true)); @@ -244,7 +247,8 @@ this.stopRecordToolStripMenuItem, this.setMJPEGSourceToolStripMenuItem, this.setAspectRatioToolStripMenuItem, - this.displayBatteryInfoToolStripMenuItem}); + this.displayBatteryInfoToolStripMenuItem, + this.userItemsToolStripMenuItem}); this.contextMenuStrip2.Name = "contextMenuStrip2"; resources.ApplyResources(this.contextMenuStrip2, "contextMenuStrip2"); // @@ -278,6 +282,12 @@ resources.ApplyResources(this.displayBatteryInfoToolStripMenuItem, "displayBatteryInfoToolStripMenuItem"); this.displayBatteryInfoToolStripMenuItem.Click += new System.EventHandler(this.displayBatteryInfoToolStripMenuItem_Click); // + // userItemsToolStripMenuItem + // + this.userItemsToolStripMenuItem.Name = "userItemsToolStripMenuItem"; + resources.ApplyResources(this.userItemsToolStripMenuItem, "userItemsToolStripMenuItem"); + this.userItemsToolStripMenuItem.Click += new System.EventHandler(this.hud_UserItem); + // // bindingSource1 // this.bindingSource1.DataSource = typeof(ArdupilotMega.CurrentState); @@ -306,12 +316,14 @@ this.tabQuick.Controls.Add(this.quickView1); this.tabQuick.Name = "tabQuick"; this.tabQuick.UseVisualStyleBackColor = true; + this.tabQuick.Resize += new System.EventHandler(this.tabQuick_Resize); // // quickView6 // this.quickView6.DataBindings.Add(new System.Windows.Forms.Binding("number", this.bindingSource1, "DistToMAV", true)); this.quickView6.desc = "DistToMAV"; resources.ApplyResources(this.quickView6, "quickView6"); + this.quickView6.MinimumSize = new System.Drawing.Size(100, 27); this.quickView6.Name = "quickView6"; this.quickView6.number = "0.0"; this.quickView6.numberColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(255)))), ((int)(((byte)(252))))); @@ -322,6 +334,7 @@ this.quickView5.DataBindings.Add(new System.Windows.Forms.Binding("number", this.bindingSource1, "verticalspeed", true)); this.quickView5.desc = "verticalspeed"; resources.ApplyResources(this.quickView5, "quickView5"); + this.quickView5.MinimumSize = new System.Drawing.Size(100, 27); this.quickView5.Name = "quickView5"; this.quickView5.number = "0.0"; this.quickView5.numberColor = System.Drawing.Color.FromArgb(((int)(((byte)(254)))), ((int)(((byte)(254)))), ((int)(((byte)(86))))); @@ -332,6 +345,7 @@ this.quickView4.DataBindings.Add(new System.Windows.Forms.Binding("number", this.bindingSource1, "yaw", true)); this.quickView4.desc = "yaw"; resources.ApplyResources(this.quickView4, "quickView4"); + this.quickView4.MinimumSize = new System.Drawing.Size(100, 27); this.quickView4.Name = "quickView4"; this.quickView4.number = "0.0"; this.quickView4.numberColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(255)))), ((int)(((byte)(83))))); @@ -342,6 +356,7 @@ this.quickView3.DataBindings.Add(new System.Windows.Forms.Binding("number", this.bindingSource1, "wp_dist", true)); this.quickView3.desc = "wp_dist"; resources.ApplyResources(this.quickView3, "quickView3"); + this.quickView3.MinimumSize = new System.Drawing.Size(100, 27); this.quickView3.Name = "quickView3"; this.quickView3.number = "0.0"; this.quickView3.numberColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(96)))), ((int)(((byte)(91))))); @@ -352,6 +367,7 @@ this.quickView2.DataBindings.Add(new System.Windows.Forms.Binding("number", this.bindingSource1, "groundspeed", true)); this.quickView2.desc = "groundspeed"; resources.ApplyResources(this.quickView2, "quickView2"); + this.quickView2.MinimumSize = new System.Drawing.Size(100, 27); this.quickView2.Name = "quickView2"; this.quickView2.number = "0.0"; this.quickView2.numberColor = System.Drawing.Color.FromArgb(((int)(((byte)(254)))), ((int)(((byte)(132)))), ((int)(((byte)(46))))); @@ -362,6 +378,7 @@ this.quickView1.DataBindings.Add(new System.Windows.Forms.Binding("number", this.bindingSource1, "alt", true)); this.quickView1.desc = "alt"; resources.ApplyResources(this.quickView1, "quickView1"); + this.quickView1.MinimumSize = new System.Drawing.Size(100, 27); this.quickView1.Name = "quickView1"; this.quickView1.number = "0.0"; this.quickView1.numberColor = System.Drawing.Color.FromArgb(((int)(((byte)(209)))), ((int)(((byte)(151)))), ((int)(((byte)(248))))); @@ -1367,5 +1384,6 @@ private Controls.QuickView quickView5; private System.Windows.Forms.ToolStripMenuItem flyToHereAltToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem flightPlannerToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem userItemsToolStripMenuItem; } } \ No newline at end of file diff --git a/Tools/ArdupilotMegaPlanner/GCSViews/FlightData.cs b/Tools/ArdupilotMegaPlanner/GCSViews/FlightData.cs index 95a5d309aa..300bea53d2 100644 --- a/Tools/ArdupilotMegaPlanner/GCSViews/FlightData.cs +++ b/Tools/ArdupilotMegaPlanner/GCSViews/FlightData.cs @@ -312,6 +312,12 @@ namespace ArdupilotMega.GCSViews DateTime waypoints = DateTime.Now.AddSeconds(0); + DateTime updatescreen = DateTime.Now; + + DateTime tsreal = DateTime.Now; + double taketime = 0; + double timeerror = 0; + //comPort.stopall(true); while (threadrun == 1) @@ -370,8 +376,6 @@ namespace ArdupilotMega.GCSViews { if (threadrun == 0) { return; } - updatePlayPauseButton(true); - if (comPort.BaseStream.IsOpen) { MainV2.comPort.logreadmode = false; @@ -379,6 +383,18 @@ namespace ArdupilotMega.GCSViews MainV2.comPort.logplaybackfile = null; } + + //Console.WriteLine(DateTime.Now.Millisecond); + + if (updatescreen.AddMilliseconds(300) < DateTime.Now) + { + updatePlayPauseButton(true); + updateLogPlayPosition(); + updatescreen = DateTime.Now; + } + + //Console.WriteLine(DateTime.Now.Millisecond + " done "); + DateTime logplayback = MainV2.comPort.lastlogread; try { @@ -386,23 +402,45 @@ namespace ArdupilotMega.GCSViews } catch { } - updateLogPlayPosition(); - - int act = (int)(MainV2.comPort.lastlogread - logplayback).TotalMilliseconds; + double act = (MainV2.comPort.lastlogread - logplayback).TotalMilliseconds; if (act > 9999 || act < 0) act = 0; - int ts = 0; + double ts = 0; if (LogPlayBackSpeed == 0) LogPlayBackSpeed = 0.01; try { - ts = (int) Math.Min((act / LogPlayBackSpeed),1000); + ts = Math.Min((act / LogPlayBackSpeed),1000); } catch { } - if (ts > 0) - System.Threading.Thread.Sleep(ts); + + double timetook = (DateTime.Now - tsreal).TotalMilliseconds; + if (timetook != 0) + { + //Console.WriteLine("took: " + timetook + "=" + taketime + " " + (taketime - timetook) + " " + ts); + //Console.WriteLine(MainV2.comPort.lastlogread.Second + " " + DateTime.Now.Second + " " + (MainV2.comPort.lastlogread.Second - DateTime.Now.Second)); + //if ((taketime - timetook) < 0) + { + timeerror += (taketime - timetook); + if (ts != 0) + { + ts += timeerror; + timeerror = 0; + } + } + if (ts > 1000) + ts = 1000; + } + + taketime = ts; + tsreal = DateTime.Now; + + if (ts > 0 && ts < 1000) + System.Threading.Thread.Sleep((int)ts); + + if (threadrun == 0) { return; } @@ -415,6 +453,8 @@ namespace ArdupilotMega.GCSViews tunning = DateTime.Now; } + + if (MainV2.comPort.logplaybackfile != null && MainV2.comPort.logplaybackfile.BaseStream.Position == MainV2.comPort.logplaybackfile.BaseStream.Length) { MainV2.comPort.logreadmode = false; @@ -437,9 +477,9 @@ namespace ArdupilotMega.GCSViews try { - //Console.WriteLine(DateTime.Now.Millisecond); + // Console.WriteLine(DateTime.Now.Millisecond); updateBindingSource(); - //Console.WriteLine(DateTime.Now.Millisecond + " done "); + // Console.WriteLine(DateTime.Now.Millisecond + " done "); if (ArdupilotMega.Controls.OpenGLtest.instance != null) { @@ -700,7 +740,7 @@ namespace ArdupilotMega.GCSViews try { gMapControl1.Position = currentloc; - hud1.Refresh(); + //hud1.Refresh(); } catch { } }); @@ -1548,6 +1588,17 @@ namespace ArdupilotMega.GCSViews // temp.Dispose(); // tabStatus.Controls.Remove(temp); } + + if (tabControl1.SelectedTab == tabQuick) + { + int height = tabQuick.Height / 6; + quickView1.Size = new System.Drawing.Size(tabQuick.Width, height); + quickView2.Size = new System.Drawing.Size(tabQuick.Width, height); + quickView3.Size = new System.Drawing.Size(tabQuick.Width, height); + quickView4.Size = new System.Drawing.Size(tabQuick.Width, height); + quickView5.Size = new System.Drawing.Size(tabQuick.Width, height); + quickView6.Size = new System.Drawing.Size(tabQuick.Width, height); + } } } @@ -1693,6 +1744,103 @@ namespace ArdupilotMega.GCSViews selectform.Show(); } + private void hud_UserItem(object sender, EventArgs e) + { + + Form selectform = new Form() + { + Name = "select", + Width = 50, + Height = 250, + Text = "Display This" + }; + + int x = 10; + int y = 10; + + object thisBoxed = MainV2.cs; + Type test = thisBoxed.GetType(); + + foreach (var field in test.GetProperties()) + { + // field.Name has the field's name. + object fieldValue; + try + { + fieldValue = field.GetValue(thisBoxed, null); // Get value + } + catch { continue; } + + // Get the TypeCode enumeration. Multiple types get mapped to a common typecode. + TypeCode typeCode = Type.GetTypeCode(fieldValue.GetType()); + + if (!(typeCode == TypeCode.Single)) + continue; + + CheckBox chk_box = new CheckBox(); + + chk_box.Text = field.Name; + chk_box.Name = field.Name; + chk_box.Tag = (sender); + chk_box.Location = new Point(x, y); + chk_box.Size = new System.Drawing.Size(100, 20); + if (hud1.CustomItems.ContainsKey(field.Name)) + { + chk_box.Checked = true; + } + + chk_box.CheckedChanged += chk_box_hud_UserItem_CheckedChanged; + + selectform.Controls.Add(chk_box); + + Application.DoEvents(); + + x += 0; + y += 20; + + if (y > selectform.Height - 50) + { + x += 100; + y = 10; + + selectform.Width = x + 100; + } + } + ThemeManager.ApplyThemeTo(selectform); + selectform.Show(); + } + + void chk_box_hud_UserItem_CheckedChanged(object sender, EventArgs e) + { + if (((CheckBox)sender).Checked) + { + HUD.Custom cust = new HUD.Custom(); + + string prefix = ((CheckBox)sender).Name +": "; + if (MainV2.config["hud1_useritem_" + ((CheckBox)sender).Name] != null) + prefix = (string)MainV2.config["hud1_useritem_" + ((CheckBox)sender).Name]; + + Common.InputBox("Header", "Please enter your item prefix", ref prefix); + + MainV2.config["hud1_useritem_" + ((CheckBox)sender).Name] = prefix; + + cust.Header = prefix; + setupPropertyInfo(ref cust.Item, ((CheckBox)sender).Name, MainV2.cs); + + hud1.CustomItems.Add(((CheckBox)sender).Name, cust); + + hud1.Invalidate(); + } + else + { + if (hud1.CustomItems.ContainsKey(((CheckBox)sender).Name)) + { + hud1.CustomItems.Remove(((CheckBox)sender).Name); + } + hud1.Invalidate(); + } + } + void chk_log_CheckedChanged(object sender, EventArgs e) { if (((CheckBox)sender).Checked) @@ -1974,7 +2122,7 @@ print 'Roll complete' "; - CustomMessageBox.Show("This is Very ALPHA"); + // CustomMessageBox.Show("This is Very ALPHA"); Form scriptedit = new Form(); @@ -2231,5 +2379,10 @@ print 'Roll complete' ctl.Visible = true; } } + + private void tabQuick_Resize(object sender, EventArgs e) + { + tabControl1_SelectedIndexChanged(null, null); + } } } \ No newline at end of file diff --git a/Tools/ArdupilotMegaPlanner/GCSViews/FlightData.resx b/Tools/ArdupilotMegaPlanner/GCSViews/FlightData.resx index 43060ba5b9..a47e7e7ae7 100644 --- a/Tools/ArdupilotMegaPlanner/GCSViews/FlightData.resx +++ b/Tools/ArdupilotMegaPlanner/GCSViews/FlightData.resx @@ -209,8 +209,14 @@ Display Battery Info + + 176, 22 + + + User Items + - 177, 114 + 177, 158 contextMenuStrip2 @@ -238,7 +244,7 @@ hud1 - ArdupilotMega.Controls.HUD, ArdupilotMegaPlanner10, Version=1.1.4621.15928, Culture=neutral, PublicKeyToken=null + ArdupilotMega.Controls.HUD, ArdupilotMegaPlanner10, Version=1.1.4623.36046, Culture=neutral, PublicKeyToken=null SubMainLeft.Panel1 @@ -261,11 +267,14 @@ True + + Top + - 33, 272 + 3, 278 - 335, 55 + 384, 55 5 @@ -274,7 +283,7 @@ quickView6 - ArdupilotMega.Controls.QuickView, ArdupilotMegaPlanner10, Version=1.1.4621.15928, Culture=neutral, PublicKeyToken=null + ArdupilotMega.Controls.QuickView, ArdupilotMegaPlanner10, Version=1.1.4623.36046, Culture=neutral, PublicKeyToken=null tabQuick @@ -282,11 +291,14 @@ 0 + + Top + - 33, 224 + 3, 223 - 335, 55 + 384, 55 4 @@ -295,7 +307,7 @@ quickView5 - ArdupilotMega.Controls.QuickView, ArdupilotMegaPlanner10, Version=1.1.4621.15928, Culture=neutral, PublicKeyToken=null + ArdupilotMega.Controls.QuickView, ArdupilotMegaPlanner10, Version=1.1.4623.36046, Culture=neutral, PublicKeyToken=null tabQuick @@ -303,11 +315,14 @@ 1 + + Top + - 33, 168 + 3, 168 - 335, 55 + 384, 55 3 @@ -316,7 +331,7 @@ quickView4 - ArdupilotMega.Controls.QuickView, ArdupilotMegaPlanner10, Version=1.1.4621.15928, Culture=neutral, PublicKeyToken=null + ArdupilotMega.Controls.QuickView, ArdupilotMegaPlanner10, Version=1.1.4623.36046, Culture=neutral, PublicKeyToken=null tabQuick @@ -324,11 +339,14 @@ 2 + + Top + - 33, 112 + 3, 113 - 335, 55 + 384, 55 2 @@ -337,7 +355,7 @@ quickView3 - ArdupilotMega.Controls.QuickView, ArdupilotMegaPlanner10, Version=1.1.4621.15928, Culture=neutral, PublicKeyToken=null + ArdupilotMega.Controls.QuickView, ArdupilotMegaPlanner10, Version=1.1.4623.36046, Culture=neutral, PublicKeyToken=null tabQuick @@ -345,11 +363,14 @@ 3 + + Top + - 33, 55 + 3, 58 - 335, 55 + 384, 55 1 @@ -358,7 +379,7 @@ quickView2 - ArdupilotMega.Controls.QuickView, ArdupilotMegaPlanner10, Version=1.1.4621.15928, Culture=neutral, PublicKeyToken=null + ArdupilotMega.Controls.QuickView, ArdupilotMegaPlanner10, Version=1.1.4623.36046, Culture=neutral, PublicKeyToken=null tabQuick @@ -366,11 +387,14 @@ 4 + + Top + - 33, 6 + 3, 3 - 335, 55 + 384, 55 0 @@ -379,7 +403,7 @@ quickView1 - ArdupilotMega.Controls.QuickView, ArdupilotMegaPlanner10, Version=1.1.4621.15928, Culture=neutral, PublicKeyToken=null + ArdupilotMega.Controls.QuickView, ArdupilotMegaPlanner10, Version=1.1.4623.36046, Culture=neutral, PublicKeyToken=null tabQuick @@ -433,7 +457,7 @@ BUT_script - ArdupilotMega.Controls.MyButton, ArdupilotMegaPlanner10, Version=1.1.4621.15928, Culture=neutral, PublicKeyToken=null + ArdupilotMega.Controls.MyButton, ArdupilotMegaPlanner10, Version=1.1.4623.36046, Culture=neutral, PublicKeyToken=null tabActions @@ -466,7 +490,7 @@ BUT_joystick - ArdupilotMega.Controls.MyButton, ArdupilotMegaPlanner10, Version=1.1.4621.15928, Culture=neutral, PublicKeyToken=null + ArdupilotMega.Controls.MyButton, ArdupilotMegaPlanner10, Version=1.1.4623.36046, Culture=neutral, PublicKeyToken=null tabActions @@ -496,7 +520,7 @@ BUT_quickmanual - ArdupilotMega.Controls.MyButton, ArdupilotMegaPlanner10, Version=1.1.4621.15928, Culture=neutral, PublicKeyToken=null + ArdupilotMega.Controls.MyButton, ArdupilotMegaPlanner10, Version=1.1.4623.36046, Culture=neutral, PublicKeyToken=null tabActions @@ -526,7 +550,7 @@ BUT_quickrtl - ArdupilotMega.Controls.MyButton, ArdupilotMegaPlanner10, Version=1.1.4621.15928, Culture=neutral, PublicKeyToken=null + ArdupilotMega.Controls.MyButton, ArdupilotMegaPlanner10, Version=1.1.4623.36046, Culture=neutral, PublicKeyToken=null tabActions @@ -556,7 +580,7 @@ BUT_quickauto - ArdupilotMega.Controls.MyButton, ArdupilotMegaPlanner10, Version=1.1.4621.15928, Culture=neutral, PublicKeyToken=null + ArdupilotMega.Controls.MyButton, ArdupilotMegaPlanner10, Version=1.1.4623.36046, Culture=neutral, PublicKeyToken=null tabActions @@ -610,7 +634,7 @@ BUT_setwp - ArdupilotMega.Controls.MyButton, ArdupilotMegaPlanner10, Version=1.1.4621.15928, Culture=neutral, PublicKeyToken=null + ArdupilotMega.Controls.MyButton, ArdupilotMegaPlanner10, Version=1.1.4623.36046, Culture=neutral, PublicKeyToken=null tabActions @@ -661,7 +685,7 @@ BUT_setmode - ArdupilotMega.Controls.MyButton, ArdupilotMegaPlanner10, Version=1.1.4621.15928, Culture=neutral, PublicKeyToken=null + ArdupilotMega.Controls.MyButton, ArdupilotMegaPlanner10, Version=1.1.4623.36046, Culture=neutral, PublicKeyToken=null tabActions @@ -691,7 +715,7 @@ BUT_clear_track - ArdupilotMega.Controls.MyButton, ArdupilotMegaPlanner10, Version=1.1.4621.15928, Culture=neutral, PublicKeyToken=null + ArdupilotMega.Controls.MyButton, ArdupilotMegaPlanner10, Version=1.1.4623.36046, Culture=neutral, PublicKeyToken=null tabActions @@ -742,7 +766,7 @@ BUT_Homealt - ArdupilotMega.Controls.MyButton, ArdupilotMegaPlanner10, Version=1.1.4621.15928, Culture=neutral, PublicKeyToken=null + ArdupilotMega.Controls.MyButton, ArdupilotMegaPlanner10, Version=1.1.4623.36046, Culture=neutral, PublicKeyToken=null tabActions @@ -772,7 +796,7 @@ BUT_RAWSensor - ArdupilotMega.Controls.MyButton, ArdupilotMegaPlanner10, Version=1.1.4621.15928, Culture=neutral, PublicKeyToken=null + ArdupilotMega.Controls.MyButton, ArdupilotMegaPlanner10, Version=1.1.4623.36046, Culture=neutral, PublicKeyToken=null tabActions @@ -802,7 +826,7 @@ BUTrestartmission - ArdupilotMega.Controls.MyButton, ArdupilotMegaPlanner10, Version=1.1.4621.15928, Culture=neutral, PublicKeyToken=null + ArdupilotMega.Controls.MyButton, ArdupilotMegaPlanner10, Version=1.1.4623.36046, Culture=neutral, PublicKeyToken=null tabActions @@ -832,7 +856,7 @@ BUTactiondo - ArdupilotMega.Controls.MyButton, ArdupilotMegaPlanner10, Version=1.1.4621.15928, Culture=neutral, PublicKeyToken=null + ArdupilotMega.Controls.MyButton, ArdupilotMegaPlanner10, Version=1.1.4623.36046, Culture=neutral, PublicKeyToken=null tabActions @@ -886,7 +910,7 @@ Gvspeed - AGaugeApp.AGauge, ArdupilotMegaPlanner10, Version=1.1.4621.15928, Culture=neutral, PublicKeyToken=null + AGaugeApp.AGauge, ArdupilotMegaPlanner10, Version=1.1.4623.36046, Culture=neutral, PublicKeyToken=null tabGauges @@ -916,7 +940,7 @@ Gheading - ArdupilotMega.Controls.HSI, ArdupilotMegaPlanner10, Version=1.1.4621.15928, Culture=neutral, PublicKeyToken=null + ArdupilotMega.Controls.HSI, ArdupilotMegaPlanner10, Version=1.1.4623.36046, Culture=neutral, PublicKeyToken=null tabGauges @@ -946,7 +970,7 @@ Galt - AGaugeApp.AGauge, ArdupilotMegaPlanner10, Version=1.1.4621.15928, Culture=neutral, PublicKeyToken=null + AGaugeApp.AGauge, ArdupilotMegaPlanner10, Version=1.1.4623.36046, Culture=neutral, PublicKeyToken=null tabGauges @@ -979,7 +1003,7 @@ Gspeed - AGaugeApp.AGauge, ArdupilotMegaPlanner10, Version=1.1.4621.15928, Culture=neutral, PublicKeyToken=null + AGaugeApp.AGauge, ArdupilotMegaPlanner10, Version=1.1.4623.36046, Culture=neutral, PublicKeyToken=null tabGauges @@ -1063,7 +1087,7 @@ lbl_playbackspeed - ArdupilotMega.Controls.MyLabel, ArdupilotMegaPlanner10, Version=1.1.4621.15928, Culture=neutral, PublicKeyToken=null + ArdupilotMega.Controls.MyLabel, ArdupilotMegaPlanner10, Version=1.1.4623.36046, Culture=neutral, PublicKeyToken=null tabTLogs @@ -1090,7 +1114,7 @@ lbl_logpercent - ArdupilotMega.Controls.MyLabel, ArdupilotMegaPlanner10, Version=1.1.4621.15928, Culture=neutral, PublicKeyToken=null + ArdupilotMega.Controls.MyLabel, ArdupilotMegaPlanner10, Version=1.1.4623.36046, Culture=neutral, PublicKeyToken=null tabTLogs @@ -1117,7 +1141,7 @@ NUM_playbackspeed - ArdupilotMega.Controls.MyTrackBar, ArdupilotMegaPlanner10, Version=1.1.4621.15928, Culture=neutral, PublicKeyToken=null + ArdupilotMega.Controls.MyTrackBar, ArdupilotMegaPlanner10, Version=1.1.4623.36046, Culture=neutral, PublicKeyToken=null tabTLogs @@ -1144,7 +1168,7 @@ BUT_log2kml - ArdupilotMega.Controls.MyButton, ArdupilotMegaPlanner10, Version=1.1.4621.15928, Culture=neutral, PublicKeyToken=null + ArdupilotMega.Controls.MyButton, ArdupilotMegaPlanner10, Version=1.1.4623.36046, Culture=neutral, PublicKeyToken=null tabTLogs @@ -1198,7 +1222,7 @@ BUT_playlog - ArdupilotMega.Controls.MyButton, ArdupilotMegaPlanner10, Version=1.1.4621.15928, Culture=neutral, PublicKeyToken=null + ArdupilotMega.Controls.MyButton, ArdupilotMegaPlanner10, Version=1.1.4623.36046, Culture=neutral, PublicKeyToken=null tabTLogs @@ -1225,7 +1249,7 @@ BUT_loadtelem - ArdupilotMega.Controls.MyButton, ArdupilotMegaPlanner10, Version=1.1.4621.15928, Culture=neutral, PublicKeyToken=null + ArdupilotMega.Controls.MyButton, ArdupilotMegaPlanner10, Version=1.1.4623.36046, Culture=neutral, PublicKeyToken=null tabTLogs @@ -1411,7 +1435,7 @@ lbl_winddir - ArdupilotMega.Controls.MyLabel, ArdupilotMegaPlanner10, Version=1.1.4621.15928, Culture=neutral, PublicKeyToken=null + ArdupilotMega.Controls.MyLabel, ArdupilotMegaPlanner10, Version=1.1.4623.36046, Culture=neutral, PublicKeyToken=null splitContainer1.Panel2 @@ -1441,7 +1465,7 @@ lbl_windvel - ArdupilotMega.Controls.MyLabel, ArdupilotMegaPlanner10, Version=1.1.4621.15928, Culture=neutral, PublicKeyToken=null + ArdupilotMega.Controls.MyLabel, ArdupilotMegaPlanner10, Version=1.1.4623.36046, Culture=neutral, PublicKeyToken=null splitContainer1.Panel2 @@ -1474,7 +1498,7 @@ lbl_hdop - ArdupilotMega.Controls.MyLabel, ArdupilotMegaPlanner10, Version=1.1.4621.15928, Culture=neutral, PublicKeyToken=null + ArdupilotMega.Controls.MyLabel, ArdupilotMegaPlanner10, Version=1.1.4623.36046, Culture=neutral, PublicKeyToken=null splitContainer1.Panel2 @@ -1507,7 +1531,7 @@ lbl_sats - ArdupilotMega.Controls.MyLabel, ArdupilotMegaPlanner10, Version=1.1.4621.15928, Culture=neutral, PublicKeyToken=null + ArdupilotMega.Controls.MyLabel, ArdupilotMegaPlanner10, Version=1.1.4623.36046, Culture=neutral, PublicKeyToken=null splitContainer1.Panel2 @@ -1679,7 +1703,7 @@ gMapControl1 - ArdupilotMega.Controls.myGMAP, ArdupilotMegaPlanner10, Version=1.1.4621.15928, Culture=neutral, PublicKeyToken=null + ArdupilotMega.Controls.myGMAP, ArdupilotMegaPlanner10, Version=1.1.4623.36046, Culture=neutral, PublicKeyToken=null splitContainer1.Panel2 @@ -1742,7 +1766,7 @@ TXT_lat - ArdupilotMega.Controls.MyLabel, ArdupilotMegaPlanner10, Version=1.1.4621.15928, Culture=neutral, PublicKeyToken=null + ArdupilotMega.Controls.MyLabel, ArdupilotMegaPlanner10, Version=1.1.4623.36046, Culture=neutral, PublicKeyToken=null panel1 @@ -1799,7 +1823,7 @@ label1 - ArdupilotMega.Controls.MyLabel, ArdupilotMegaPlanner10, Version=1.1.4621.15928, Culture=neutral, PublicKeyToken=null + ArdupilotMega.Controls.MyLabel, ArdupilotMegaPlanner10, Version=1.1.4623.36046, Culture=neutral, PublicKeyToken=null panel1 @@ -1829,7 +1853,7 @@ TXT_long - ArdupilotMega.Controls.MyLabel, ArdupilotMegaPlanner10, Version=1.1.4621.15928, Culture=neutral, PublicKeyToken=null + ArdupilotMega.Controls.MyLabel, ArdupilotMegaPlanner10, Version=1.1.4623.36046, Culture=neutral, PublicKeyToken=null panel1 @@ -1859,7 +1883,7 @@ TXT_alt - ArdupilotMega.Controls.MyLabel, ArdupilotMegaPlanner10, Version=1.1.4621.15928, Culture=neutral, PublicKeyToken=null + ArdupilotMega.Controls.MyLabel, ArdupilotMegaPlanner10, Version=1.1.4623.36046, Culture=neutral, PublicKeyToken=null panel1 @@ -2060,7 +2084,7 @@ label6 - ArdupilotMega.Controls.MyLabel, ArdupilotMegaPlanner10, Version=1.1.4621.15928, Culture=neutral, PublicKeyToken=null + ArdupilotMega.Controls.MyLabel, ArdupilotMegaPlanner10, Version=1.1.4623.36046, Culture=neutral, PublicKeyToken=null $this @@ -2134,6 +2158,12 @@ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + userItemsToolStripMenuItem + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + bindingSource1 @@ -2168,6 +2198,6 @@ FlightData - System.Windows.Forms.MyUserControl, ArdupilotMegaPlanner10, Version=1.1.4621.15928, Culture=neutral, PublicKeyToken=null + System.Windows.Forms.MyUserControl, ArdupilotMegaPlanner10, Version=1.1.4623.36046, Culture=neutral, PublicKeyToken=null \ No newline at end of file diff --git a/Tools/ArdupilotMegaPlanner/GCSViews/FlightPlanner.cs b/Tools/ArdupilotMegaPlanner/GCSViews/FlightPlanner.cs index 9037c4ef1c..fc73679c75 100644 --- a/Tools/ArdupilotMegaPlanner/GCSViews/FlightPlanner.cs +++ b/Tools/ArdupilotMegaPlanner/GCSViews/FlightPlanner.cs @@ -348,6 +348,8 @@ namespace ArdupilotMega.GCSViews selectedrow = Commands.Rows.Add(); // Commands.CurrentCell = Commands.Rows[selectedrow].Cells[Param1.Index]; + ChangeColumnHeader(MAVLink.MAV_CMD.WAYPOINT.ToString()); + setfromGE(lat, lng, alt); } @@ -1362,7 +1364,9 @@ namespace ArdupilotMega.GCSViews temp.p4 = (float)(double.Parse(Commands.Rows[a].Cells[Param4.Index].Value.ToString())); MAVLink.MAV_MISSION_RESULT ans = port.setWP(temp, (ushort)(a + 1), frame, 0); - if (ans != MAVLink.MAV_MISSION_RESULT.MAV_MISSION_ACCEPTED) + // invalid sequence can only occur if we failed to see a responce from the apm when we sent the request. + // therefore it did see the request and has moved on that step, and so do we. + if (ans != MAVLink.MAV_MISSION_RESULT.MAV_MISSION_ACCEPTED && ans != MAVLink.MAV_MISSION_RESULT.MAV_MISSION_INVALID_SEQUENCE) { throw new Exception("Upload WPs Failed " + Commands.Rows[a].Cells[Command.Index].Value.ToString() + " " + Enum.Parse(typeof(MAVLink.MAV_MISSION_RESULT), ans.ToString())); } @@ -1509,7 +1513,10 @@ namespace ArdupilotMega.GCSViews CHK_holdalt.Checked = Convert.ToBoolean((float)param["ALT_HOLD_RTL"] > 0); log.Info("param ALT_HOLD_RTL " + CHK_holdalt.Checked.ToString()); + } + catch (Exception ex) { log.Error(ex); } + try { DataGridViewTextBoxCell cellhome; cellhome = Commands.Rows[0].Cells[Lat.Index] as DataGridViewTextBoxCell; @@ -1530,7 +1537,7 @@ namespace ArdupilotMega.GCSViews } } } - catch (Exception ex) { log.Info(ex.ToString()); } // if there is no valid home + catch (Exception ex) { log.Error(ex.ToString()); } // if there is no valid home if (Commands.RowCount > 0) { diff --git a/Tools/ArdupilotMegaPlanner/MainV2.cs b/Tools/ArdupilotMegaPlanner/MainV2.cs index 5353948cf4..73d9b54298 100644 --- a/Tools/ArdupilotMegaPlanner/MainV2.cs +++ b/Tools/ArdupilotMegaPlanner/MainV2.cs @@ -149,6 +149,8 @@ namespace ArdupilotMega public MainV2() { + log.Info("Mainv2 ctor"); + Form splash = new Splash(); splash.Show(); @@ -1010,7 +1012,7 @@ namespace ArdupilotMega /// speech voltage - custom - alt warning - data lost /// heartbeat packet sending /// - /// and cant fall out + /// and can't fall out /// private void SerialReader() { @@ -1018,10 +1020,7 @@ namespace ArdupilotMega return; serialThread = true; - int minbytes = 10; - - // if (MONO) - // minbytes = 0; + int minbytes = 0; DateTime speechcustomtime = DateTime.Now; @@ -1033,8 +1032,10 @@ namespace ArdupilotMega { Thread.Sleep(5); + // update connect/disconnect button and info stats UpdateConnectIcon(); + // 30 seconds interval speech options if (speechEnable && speechEngine != null && (DateTime.Now - speechcustomtime).TotalSeconds > 30 && MainV2.cs.lat != 0 && (MainV2.comPort.logreadmode || comPort.BaseStream.IsOpen)) { //speechbatteryvolt @@ -1054,6 +1055,7 @@ namespace ArdupilotMega speechcustomtime = DateTime.Now; } + // speech altitude warning. if (speechEnable && speechEngine != null && (MainV2.comPort.logreadmode || comPort.BaseStream.IsOpen)) { float warnalt = float.MaxValue; @@ -1069,17 +1071,20 @@ namespace ArdupilotMega catch { } // silent fail } + // if not connected or busy, sleep and loop if (!comPort.BaseStream.IsOpen || giveComport == true) { System.Threading.Thread.Sleep(100); continue; } + // make sure we attenuate the link quality if we dont see any valid packets if ((DateTime.Now - comPort.lastvalidpacket).TotalSeconds > 10) { MainV2.cs.linkqualitygcs = 0; } + // attenuate the link qualty over time if ((DateTime.Now - comPort.lastvalidpacket).TotalSeconds >= 1) { if (linkqualitytime.Second != DateTime.Now.Second) @@ -1087,25 +1092,20 @@ namespace ArdupilotMega MainV2.cs.linkqualitygcs = (ushort)(MainV2.cs.linkqualitygcs * 0.8f); linkqualitytime = DateTime.Now; + int checkthis; GCSViews.FlightData.myhud.Invalidate(); } } + // send a hb every seconds from gcs to ap if (heatbeatSend.Second != DateTime.Now.Second) { - // Console.WriteLine("remote lost {0}", cs.packetdropremote); - - MAVLink.mavlink_heartbeat_t htb = new MAVLink.mavlink_heartbeat_t(); - -#if MAVLINK10 - htb.type = (byte)MAVLink.MAV_TYPE.GCS; - htb.autopilot = (byte)MAVLink.MAV_AUTOPILOT.ARDUPILOTMEGA; - htb.mavlink_version = 3; -#else - htb.type = (byte)MAVLink.MAV_TYPE.MAV_GENERIC; - htb.autopilot = (byte)MAVLink.MAV_AUTOPILOT_TYPE.MAV_AUTOPILOT_ARDUPILOTMEGA; - htb.mavlink_version = 2; -#endif + MAVLink.mavlink_heartbeat_t htb = new MAVLink.mavlink_heartbeat_t() + { + type = (byte)MAVLink.MAV_TYPE.GCS, + autopilot = (byte)MAVLink.MAV_AUTOPILOT.ARDUPILOTMEGA, + mavlink_version = 3 + }; comPort.sendPacket(htb); heatbeatSend = DateTime.Now; @@ -1121,15 +1121,11 @@ namespace ArdupilotMega } } - // Console.WriteLine(DateTime.Now.Millisecond + " " + comPort.BaseStream.BytesToRead); - + // actauly read the packets while (comPort.BaseStream.BytesToRead > minbytes && giveComport == false) { - //Console.WriteLine(DateTime.Now.Millisecond + " SR1 " + comPort.BaseStream.BytesToRead ); comPort.readPacket(); - //Console.WriteLine(DateTime.Now.Millisecond + " SR2 " + comPort.BaseStream.BytesToRead); } - // Console.WriteLine("SR left"); } catch (Exception e) { @@ -1245,7 +1241,12 @@ namespace ArdupilotMega { if (!System.Diagnostics.Debugger.IsAttached) { - CheckForUpdate(); + // single update check per day + if (getConfig("update_check") != DateTime.Now.ToShortDateString()) + { + CheckForUpdate(); + config["update_check"] = DateTime.Now.ToShortDateString(); + } } } catch (Exception ex) diff --git a/Tools/ArdupilotMegaPlanner/Mavlink/MAVLink.cs b/Tools/ArdupilotMegaPlanner/Mavlink/MAVLink.cs index b1bd912668..c93f913a5c 100644 --- a/Tools/ArdupilotMegaPlanner/Mavlink/MAVLink.cs +++ b/Tools/ArdupilotMegaPlanner/Mavlink/MAVLink.cs @@ -1345,7 +1345,7 @@ namespace ArdupilotMega } else { - log.Info(DateTime.Now + " PC wpcount " + buffer[5] + " need " + MAVLINK_MSG_ID_MISSION_COUNT + " " + this.BaseStream.BytesToRead); + log.Info(DateTime.Now + " PC wpcount " + buffer[5] + " need " + MAVLINK_MSG_ID_MISSION_COUNT); } } } @@ -1919,21 +1919,13 @@ namespace ArdupilotMega #if MAVLINK10 if (buffer[5] == MAVLINK_MSG_ID_MISSION_ACK) { - - var ans = buffer.ByteArrayToStructure(6); - - log.Info("set wp " + index + " ACK 47 : " + buffer[5] + " ans " + Enum.Parse(typeof(MAV_MISSION_RESULT), ans.type.ToString())); return (MAV_MISSION_RESULT)ans.type; } else if (buffer[5] == MAVLINK_MSG_ID_MISSION_REQUEST) { var ans = buffer.ByteArrayToStructure(6); - - - - if (ans.seq == (index + 1)) { log.Info("set wp doing " + index + " req " + ans.seq + " REQ 40 : " + buffer[5]); diff --git a/Tools/ArdupilotMegaPlanner/MavlinkLog.Designer.cs b/Tools/ArdupilotMegaPlanner/MavlinkLog.Designer.cs index 256cde8672..52243d5cad 100644 --- a/Tools/ArdupilotMegaPlanner/MavlinkLog.Designer.cs +++ b/Tools/ArdupilotMegaPlanner/MavlinkLog.Designer.cs @@ -35,6 +35,8 @@ this.BUT_graphmavlog = new ArdupilotMega.Controls.MyButton(); this.zg1 = new ZedGraph.ZedGraphControl(); this.BUT_convertcsv = new ArdupilotMega.Controls.MyButton(); + this.BUT_paramsfromlog = new ArdupilotMega.Controls.MyButton(); + this.BUT_getwpsfromlog = new ArdupilotMega.Controls.MyButton(); this.SuspendLayout(); // // BUT_redokml @@ -82,10 +84,26 @@ this.BUT_convertcsv.UseVisualStyleBackColor = true; this.BUT_convertcsv.Click += new System.EventHandler(this.BUT_convertcsv_Click); // + // BUT_paramsfromlog + // + resources.ApplyResources(this.BUT_paramsfromlog, "BUT_paramsfromlog"); + this.BUT_paramsfromlog.Name = "BUT_paramsfromlog"; + this.BUT_paramsfromlog.UseVisualStyleBackColor = true; + this.BUT_paramsfromlog.Click += new System.EventHandler(this.BUT_paramsfromlog_Click); + // + // BUT_getwpsfromlog + // + resources.ApplyResources(this.BUT_getwpsfromlog, "BUT_getwpsfromlog"); + this.BUT_getwpsfromlog.Name = "BUT_getwpsfromlog"; + this.BUT_getwpsfromlog.UseVisualStyleBackColor = true; + this.BUT_getwpsfromlog.Click += new System.EventHandler(this.BUT_getwpsfromlog_Click); + // // MavlinkLog // resources.ApplyResources(this, "$this"); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.BUT_getwpsfromlog); + this.Controls.Add(this.BUT_paramsfromlog); this.Controls.Add(this.BUT_convertcsv); this.Controls.Add(this.zg1); this.Controls.Add(this.BUT_graphmavlog); @@ -106,5 +124,7 @@ private ArdupilotMega.Controls.MyButton BUT_graphmavlog; private ZedGraph.ZedGraphControl zg1; private Controls.MyButton BUT_convertcsv; + private Controls.MyButton BUT_paramsfromlog; + private Controls.MyButton BUT_getwpsfromlog; } } \ No newline at end of file diff --git a/Tools/ArdupilotMegaPlanner/MavlinkLog.cs b/Tools/ArdupilotMegaPlanner/MavlinkLog.cs index 1df89ba445..d9e9478490 100644 --- a/Tools/ArdupilotMegaPlanner/MavlinkLog.cs +++ b/Tools/ArdupilotMegaPlanner/MavlinkLog.cs @@ -1245,5 +1245,149 @@ namespace ArdupilotMega } } } + + private void BUT_paramsfromlog_Click(object sender, EventArgs e) + { + OpenFileDialog openFileDialog1 = new OpenFileDialog(); + openFileDialog1.Filter = "*.tlog|*.tlog"; + openFileDialog1.FilterIndex = 2; + openFileDialog1.RestoreDirectory = true; + openFileDialog1.Multiselect = true; + try + { + openFileDialog1.InitialDirectory = Path.GetDirectoryName(Application.ExecutablePath) + Path.DirectorySeparatorChar + @"logs" + Path.DirectorySeparatorChar; + } + catch { } // incase dir doesnt exist + + if (openFileDialog1.ShowDialog() == DialogResult.OK) + { + if (MainV2.comPort.logplaybackfile != null) + { + MainV2.comPort.logreadmode = false; + MainV2.comPort.logplaybackfile.Close(); + } + + foreach (string logfile in openFileDialog1.FileNames) + { + + MAVLink mine = new MAVLink(); + try + { + mine.logplaybackfile = new BinaryReader(File.Open(logfile, FileMode.Open, FileAccess.Read, FileShare.Read)); + } + catch (Exception ex) { log.Debug(ex.ToString()); CustomMessageBox.Show("Log Can not be opened. Are you still connected?"); return; } + + mine.logreadmode = true; + + mine.packets.Initialize(); // clear + + StreamWriter sw = new StreamWriter(Path.GetDirectoryName(logfile) + Path.DirectorySeparatorChar + Path.GetFileNameWithoutExtension(logfile) + ".param"); + + // bar moves to 100 % in this step + progressBar1.Value = (int)((float)mine.logplaybackfile.BaseStream.Position / (float)mine.logplaybackfile.BaseStream.Length * 100.0f / 1.0f); + + progressBar1.Refresh(); + //Application.DoEvents(); + + mine.getParamList(); + + foreach (string item in mine.param.Keys) + { + sw.WriteLine(item + "\t" + mine.param[item]); + } + + sw.Close(); + + progressBar1.Value = 100; + + mine.logreadmode = false; + mine.logplaybackfile.Close(); + mine.logplaybackfile = null; + + CustomMessageBox.Show("File Saved with log file"); + } + } + } + + private void BUT_getwpsfromlog_Click(object sender, EventArgs e) + { + OpenFileDialog openFileDialog1 = new OpenFileDialog(); + openFileDialog1.Filter = "*.tlog|*.tlog"; + openFileDialog1.FilterIndex = 2; + openFileDialog1.RestoreDirectory = true; + openFileDialog1.Multiselect = true; + try + { + openFileDialog1.InitialDirectory = Path.GetDirectoryName(Application.ExecutablePath) + Path.DirectorySeparatorChar + @"logs" + Path.DirectorySeparatorChar; + } + catch { } // incase dir doesnt exist + + if (openFileDialog1.ShowDialog() == DialogResult.OK) + { + if (MainV2.comPort.logplaybackfile != null) + { + MainV2.comPort.logreadmode = false; + MainV2.comPort.logplaybackfile.Close(); + } + + foreach (string logfile in openFileDialog1.FileNames) + { + + MAVLink mine = new MAVLink(); + try + { + mine.logplaybackfile = new BinaryReader(File.Open(logfile, FileMode.Open, FileAccess.Read, FileShare.Read)); + } + catch (Exception ex) { log.Debug(ex.ToString()); CustomMessageBox.Show("Log Can not be opened. Are you still connected?"); return; } + + mine.logreadmode = true; + + mine.packets.Initialize(); // clear + + StreamWriter sw = new StreamWriter(Path.GetDirectoryName(logfile) + Path.DirectorySeparatorChar + Path.GetFileNameWithoutExtension(logfile) + ".txt"); + + // bar moves to 100 % in this step + progressBar1.Value = (int)((float)mine.logplaybackfile.BaseStream.Position / (float)mine.logplaybackfile.BaseStream.Length * 100.0f / 1.0f); + + progressBar1.Refresh(); + //Application.DoEvents(); + + sw.WriteLine("QGC WPL 110"); + + byte count = mine.getWPCount(); + for (ushort a = 0; a < count; a++) + { + Locationwp wp = mine.getWP(a); + //sw.WriteLine(item + "\t" + mine.param[item]); + byte mode = (byte)wp.id; + + sw.Write((a + 1)); // seq + sw.Write("\t" + 0); // current + sw.Write("\t" + (byte)MAVLink.MAV_FRAME.GLOBAL_RELATIVE_ALT); //frame + sw.Write("\t" + mode); + sw.Write("\t" + wp.p1.ToString("0.000000", new System.Globalization.CultureInfo("en-US"))); + sw.Write("\t" + wp.p2.ToString("0.000000", new System.Globalization.CultureInfo("en-US"))); + sw.Write("\t" + wp.p3.ToString("0.000000", new System.Globalization.CultureInfo("en-US"))); + sw.Write("\t" + wp.p4.ToString("0.000000", new System.Globalization.CultureInfo("en-US"))); + sw.Write("\t" + wp.lat.ToString("0.000000", new System.Globalization.CultureInfo("en-US"))); + sw.Write("\t" + wp.lng.ToString("0.000000", new System.Globalization.CultureInfo("en-US"))); + sw.Write("\t" + (wp.alt / MainV2.cs.multiplierdist).ToString("0.000000", new System.Globalization.CultureInfo("en-US"))); + sw.Write("\t" + 1); + sw.WriteLine(""); + } + + sw.Close(); + + progressBar1.Value = 100; + + mine.logreadmode = false; + mine.logplaybackfile.Close(); + mine.logplaybackfile = null; + + CustomMessageBox.Show("File Saved with log file"); + + } + } + } } } \ No newline at end of file diff --git a/Tools/ArdupilotMegaPlanner/MavlinkLog.resx b/Tools/ArdupilotMegaPlanner/MavlinkLog.resx index 11b80999a6..b72c69d081 100644 --- a/Tools/ArdupilotMegaPlanner/MavlinkLog.resx +++ b/Tools/ArdupilotMegaPlanner/MavlinkLog.resx @@ -123,10 +123,10 @@ - 93, 12 + 10, 6 - 116, 23 + 68, 30 @@ -139,13 +139,13 @@ BUT_redokml - ArdupilotMega.Controls.MyButton, ArdupilotMegaPlanner, Version=1.1.4515.21878, Culture=neutral, PublicKeyToken=null + ArdupilotMega.Controls.MyButton, ArdupilotMegaPlanner10, Version=1.1.4622.30215, Culture=neutral, PublicKeyToken=null $this - 5 + 7 Top, Left, Right @@ -169,7 +169,7 @@ $this - 4 + 6 Top @@ -178,10 +178,10 @@ NoControl - 215, 12 + 84, 6 - 116, 23 + 68, 30 10 @@ -193,13 +193,13 @@ BUT_humanreadable - ArdupilotMega.Controls.MyButton, ArdupilotMegaPlanner, Version=1.1.4515.21878, Culture=neutral, PublicKeyToken=null + ArdupilotMega.Controls.MyButton, ArdupilotMegaPlanner10, Version=1.1.4622.30215, Culture=neutral, PublicKeyToken=null $this - 3 + 5 Top @@ -208,10 +208,10 @@ NoControl - 459, 12 + 232, 6 - 116, 23 + 68, 30 11 @@ -223,13 +223,13 @@ BUT_graphmavlog - ArdupilotMega.Controls.MyButton, ArdupilotMegaPlanner, Version=1.1.4515.21878, Culture=neutral, PublicKeyToken=null + ArdupilotMega.Controls.MyButton, ArdupilotMegaPlanner10, Version=1.1.4622.30215, Culture=neutral, PublicKeyToken=null $this - 2 + 4 Top, Bottom, Left, Right @@ -253,7 +253,7 @@ $this - 1 + 3 Top @@ -262,10 +262,10 @@ NoControl - 337, 12 + 158, 6 - 116, 23 + 68, 30 13 @@ -277,12 +277,72 @@ BUT_convertcsv - ArdupilotMega.Controls.MyButton, ArdupilotMegaPlanner, Version=1.1.4515.21878, Culture=neutral, PublicKeyToken=null + ArdupilotMega.Controls.MyButton, ArdupilotMegaPlanner10, Version=1.1.4622.30215, Culture=neutral, PublicKeyToken=null $this + 2 + + + Top + + + NoControl + + + 306, 6 + + + 68, 30 + + + 14 + + + Extract Params + + + BUT_paramsfromlog + + + ArdupilotMega.Controls.MyButton, ArdupilotMegaPlanner10, Version=1.1.4622.30215, Culture=neutral, PublicKeyToken=null + + + $this + + + 1 + + + Top + + + NoControl + + + 380, 6 + + + 68, 30 + + + 15 + + + Extract WPs + + + BUT_getwpsfromlog + + + ArdupilotMega.Controls.MyButton, ArdupilotMegaPlanner10, Version=1.1.4622.30215, Culture=neutral, PublicKeyToken=null + + + $this + + 0 diff --git a/Tools/ArdupilotMegaPlanner/Msi/installer.wxs b/Tools/ArdupilotMegaPlanner/Msi/installer.wxs index 45acc75dcc..1de47d2ad8 100644 --- a/Tools/ArdupilotMegaPlanner/Msi/installer.wxs +++ b/Tools/ArdupilotMegaPlanner/Msi/installer.wxs @@ -2,14 +2,14 @@ - + - - + + @@ -31,7 +31,7 @@ - + @@ -54,203 +54,205 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - + + + - - - - - - - - - - + + + + + + + + + + - - - - - + + + + + - - - - + + + + - - - - - - - - - - - + + + + + + + + + + + - - - - - - - - - - - + + + + + + + + + + + - - - - + + + + - - - - - - - - - + + + + + + + + + - - - - - - - + + + + + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - - + + + + - - - - - - - + + + + + + + - - - + + + - - - - + + + + - - - + + + - - - + + + - - - + + + @@ -294,26 +296,26 @@ - - - - - - - - - + + + + + + + + - - + + - + + diff --git a/Tools/ArdupilotMegaPlanner/Properties/AssemblyInfo.cs b/Tools/ArdupilotMegaPlanner/Properties/AssemblyInfo.cs index 49216dd913..73d7f09fbd 100644 --- a/Tools/ArdupilotMegaPlanner/Properties/AssemblyInfo.cs +++ b/Tools/ArdupilotMegaPlanner/Properties/AssemblyInfo.cs @@ -34,5 +34,5 @@ using System.Resources; // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] [assembly: AssemblyVersion("1.1.*")] -[assembly: AssemblyFileVersion("1.2.9")] +[assembly: AssemblyFileVersion("1.2.10")] [assembly: NeutralResourcesLanguageAttribute("")] diff --git a/Tools/ArdupilotMegaPlanner/Utilities/Capture.cs b/Tools/ArdupilotMegaPlanner/Utilities/Capture.cs index 6d721dea65..e977a150a8 100644 --- a/Tools/ArdupilotMegaPlanner/Utilities/Capture.cs +++ b/Tools/ArdupilotMegaPlanner/Utilities/Capture.cs @@ -50,7 +50,7 @@ namespace WebCamService IntPtr ip = IntPtr.Zero; public event CamImage camimage; - System.Windows.Forms.Timer timer1 = new System.Windows.Forms.Timer(); + Thread timer1; #endregion @@ -88,8 +88,12 @@ namespace WebCamService m_bGotOne = true; m_bRunning = false; - timer1.Interval = 1000 / 15; // 15 fps - timer1.Tick += new EventHandler(timer1_Tick); + //timer1.Interval = 1000 / 15; // 15 fps + //timer1.Tick += new EventHandler(timer1_Tick); + //timer1.Start(); + + timer1 = new Thread(timer); + timer1.IsBackground = true; timer1.Start(); } @@ -99,10 +103,37 @@ namespace WebCamService throw; } } + + void timer() + { + DateTime last = DateTime.Now; + + while (true) + { + try + { + System.Threading.Thread.Sleep(1000/25); // 25 fps + + timer1_Tick(this, null); + + } + catch (ThreadAbortException) + { + break; + } + catch + { + + } + } + } + /// release everything. public void Dispose() { - timer1.Stop(); + if (timer1 != null) + timer1.Abort(); + if (camimage != null) { camimage(null); // clear last pic @@ -159,7 +190,7 @@ namespace WebCamService // Start waiting if ( ! m_PictureReady.WaitOne(5000, false) ) { - throw new Exception("Timeout waiting to get picture"); + //throw new Exception("Timeout waiting to get picture"); } //Pause(); //- we are effectivly pulling at 15 fps, so no need to pause } @@ -224,8 +255,8 @@ namespace WebCamService { camimage(image); } - } - catch { Console.WriteLine("Grab bmp failed"); timer1.Enabled = false; this.CloseInterfaces(); System.Windows.Forms.CustomMessageBox.Show("Problem with capture device, grabbing frame took longer than 5 sec"); } + }//System.Windows.Forms.CustomMessageBox.Show("Problem with capture device, grabbing frame took longer than 5 sec"); + catch { Console.WriteLine("Grab bmp failed"); } } /// build the capture graph for grabber. @@ -404,8 +435,14 @@ namespace WebCamService } // Set the new format - hr = videoStreamConfig.SetFormat( media ); - DsError.ThrowExceptionForHR( hr ); + try + { + hr = videoStreamConfig.SetFormat(media); + } + catch { } + + DsError.ThrowExceptionForHR(hr); + DsUtils.FreeAMMediaType(media); media = null; diff --git a/Tools/ArdupilotMegaPlanner/Utilities/CaptureMJPEG.cs b/Tools/ArdupilotMegaPlanner/Utilities/CaptureMJPEG.cs index 915a4c9502..477867c592 100644 --- a/Tools/ArdupilotMegaPlanner/Utilities/CaptureMJPEG.cs +++ b/Tools/ArdupilotMegaPlanner/Utilities/CaptureMJPEG.cs @@ -110,6 +110,9 @@ namespace ArdupilotMega.Utilities mpheader = mpheader.Substring(startboundary, endboundary - startboundary); } + dataStream.ReadTimeout = 30000; // 30 seconds + br.BaseStream.ReadTimeout = 30000; + while (running) { try diff --git a/Tools/ArdupilotMegaPlanner/temp.cs b/Tools/ArdupilotMegaPlanner/temp.cs index 8df60453fb..1686e14479 100644 --- a/Tools/ArdupilotMegaPlanner/temp.cs +++ b/Tools/ArdupilotMegaPlanner/temp.cs @@ -903,8 +903,6 @@ namespace ArdupilotMega private void myButton1_Click(object sender, EventArgs e) { new SerialOutput2().Show(); - } - - + } } }