mirror of
https://github.com/ArduPilot/ardupilot
synced 2025-01-03 22:48:29 -04:00
6d24f5efb2
add popouts in config/setup add more text to hud heading nw,ne,sw,se add 5 m filter to antenna tracker add refresh param buttons remove the word old, as people still want it. modify telem playback interface with slider bars add posible fix to bad grid spacing move mavlink code.
220 lines
6.7 KiB
C#
220 lines
6.7 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.ComponentModel;
|
|
using System.Drawing;
|
|
using System.Data;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Windows.Forms;
|
|
using System.IO.Ports;
|
|
using ArdupilotMega;
|
|
using ArdupilotMega.Comms;
|
|
using System.IO;
|
|
|
|
namespace _3DRRadio
|
|
{
|
|
public partial class Terminal : UserControl
|
|
{
|
|
ICommsSerial comPort = MainV2.comPort.BaseStream;
|
|
Object thisLock = new Object();
|
|
public static bool threadrun = false;
|
|
StringBuilder cmd = new StringBuilder();
|
|
internal static StreamWriter sw;
|
|
|
|
public Terminal()
|
|
{
|
|
InitializeComponent();
|
|
|
|
if (sw == null)
|
|
sw = new StreamWriter("Terminal-" + DateTime.Now.ToString("yyyy-MM-dd HH-mm-ss") + ".txt");
|
|
}
|
|
|
|
void comPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
|
|
{
|
|
if (!comPort.IsOpen)
|
|
return;
|
|
try
|
|
{
|
|
lock (thisLock)
|
|
{
|
|
string data = comPort.ReadExisting();
|
|
//Console.Write(data);
|
|
|
|
if (sw != null)
|
|
{
|
|
sw.Write(data);
|
|
sw.Flush();
|
|
}
|
|
|
|
addText(data);
|
|
}
|
|
}
|
|
catch (Exception) { if (!threadrun) return; TXT_terminal.AppendText("Error reading com port\r\n"); }
|
|
}
|
|
|
|
void addText(string data)
|
|
{
|
|
this.Invoke((System.Windows.Forms.MethodInvoker)delegate()
|
|
{
|
|
TXT_terminal.SelectionStart = TXT_terminal.Text.Length;
|
|
|
|
data = data.TrimEnd('\r'); // else added \n all by itself
|
|
data = data.Replace("\0", " ");
|
|
TXT_terminal.AppendText(data);
|
|
if (data.Contains("\b"))
|
|
{
|
|
TXT_terminal.Text = TXT_terminal.Text.Remove(TXT_terminal.Text.IndexOf('\b'));
|
|
TXT_terminal.SelectionStart = TXT_terminal.Text.Length;
|
|
}
|
|
});
|
|
}
|
|
|
|
private void Terminal_Load(object sender, EventArgs e)
|
|
{
|
|
try
|
|
{
|
|
|
|
if (comPort.IsOpen)
|
|
comPort.Close();
|
|
|
|
comPort.ReadBufferSize = 1024 * 1024;
|
|
|
|
comPort.PortName = MainV2.comPort.BaseStream.PortName;
|
|
|
|
comPort.Open();
|
|
|
|
comPort.toggleDTR();
|
|
|
|
System.Threading.Thread t11 = new System.Threading.Thread(delegate()
|
|
{
|
|
threadrun = true;
|
|
|
|
DateTime start = DateTime.Now;
|
|
|
|
while ((DateTime.Now - start).TotalMilliseconds < 2000)
|
|
{
|
|
try
|
|
{
|
|
if (comPort.BytesToRead > 0)
|
|
{
|
|
comPort_DataReceived((object)null, (SerialDataReceivedEventArgs)null);
|
|
}
|
|
}
|
|
catch { return; }
|
|
}
|
|
try
|
|
{
|
|
comPort.Write("\n\n\n");
|
|
}
|
|
catch { return; }
|
|
while (threadrun)
|
|
{
|
|
try
|
|
{
|
|
System.Threading.Thread.Sleep(10);
|
|
if (!comPort.IsOpen)
|
|
break;
|
|
if (comPort.BytesToRead > 0)
|
|
{
|
|
comPort_DataReceived((object)null, (SerialDataReceivedEventArgs)null);
|
|
}
|
|
}
|
|
catch { }
|
|
}
|
|
|
|
comPort.DtrEnable = false;
|
|
|
|
try
|
|
{
|
|
//if (sw != null)
|
|
// sw.Close();
|
|
}
|
|
catch { }
|
|
|
|
if (threadrun == false)
|
|
{
|
|
comPort.Close();
|
|
}
|
|
Console.WriteLine("Comport thread close");
|
|
});
|
|
t11.IsBackground = true;
|
|
t11.Name = "Terminal serial thread";
|
|
t11.Start();
|
|
|
|
// doesnt seem to work on mac
|
|
//comPort.DataReceived += new SerialDataReceivedEventHandler(comPort_DataReceived);
|
|
|
|
TXT_terminal.AppendText("Opened com port\r\n");
|
|
}
|
|
catch (Exception) { TXT_terminal.AppendText("Cant open serial port\r\n"); return; }
|
|
|
|
TXT_terminal.Focus();
|
|
}
|
|
|
|
private void TXT_terminal_Click(object sender, EventArgs e)
|
|
{
|
|
// auto scroll
|
|
TXT_terminal.SelectionStart = TXT_terminal.Text.Length;
|
|
|
|
TXT_terminal.ScrollToCaret();
|
|
|
|
TXT_terminal.Refresh();
|
|
}
|
|
|
|
private void TXT_terminal_KeyDown(object sender, KeyEventArgs e)
|
|
{
|
|
if (e.KeyData == Keys.Up || e.KeyData == Keys.Down || e.KeyData == Keys.Left || e.KeyData == Keys.Right)
|
|
{
|
|
e.Handled = true; // ignore it
|
|
}
|
|
}
|
|
|
|
private void Terminal_FormClosing(object sender, FormClosingEventArgs e)
|
|
{
|
|
threadrun = false;
|
|
|
|
if (comPort.IsOpen)
|
|
{
|
|
comPort.Close();
|
|
}
|
|
System.Threading.Thread.Sleep(400);
|
|
}
|
|
|
|
private void TXT_terminal_KeyPress(object sender, KeyPressEventArgs e)
|
|
{
|
|
if (e.KeyChar == '\r')
|
|
{
|
|
if (comPort.IsOpen)
|
|
{
|
|
try
|
|
{
|
|
// do not change this \r is correct - no \n
|
|
string temp = cmd.ToString();
|
|
|
|
if (cmd.ToString() == "+++")
|
|
{
|
|
comPort.Write(Encoding.ASCII.GetBytes(cmd.ToString()), 0, cmd.Length);
|
|
}
|
|
else
|
|
{
|
|
comPort.Write(Encoding.ASCII.GetBytes(cmd.ToString() + "\r"), 0, cmd.Length + 1);
|
|
}
|
|
|
|
if (sw != null)
|
|
{
|
|
sw.WriteLine(cmd.ToString());
|
|
sw.Flush();
|
|
}
|
|
}
|
|
catch { CustomMessageBox.Show("Error writing to com port"); }
|
|
}
|
|
cmd = new StringBuilder();
|
|
}
|
|
else
|
|
{
|
|
cmd.Append(e.KeyChar);
|
|
}
|
|
}
|
|
}
|
|
}
|