ardupilot/Tools/ArdupilotMegaPlanner/3DRRadio/Rssi.cs

121 lines
3.9 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 ZedGraph;
using ArdupilotMega;
using System.Text.RegularExpressions;
namespace _3DRRadio
{
public partial class Rssi : UserControl
{
_3DRradio inter = new _3DRradio();
int tickStart = 0;
RollingPointPairList plotdatarssil = new RollingPointPairList(1200);
RollingPointPairList plotdatarssir = new RollingPointPairList(1200);
RollingPointPairList plotdatanoicel = new RollingPointPairList(1200);
RollingPointPairList plotdatanoicer = new RollingPointPairList(1200);
public Rssi()
{
InitializeComponent();
zedGraphControl1.GraphPane.AddCurve("Rssi Local",plotdatarssil,Color.Red,SymbolType.None);
zedGraphControl1.GraphPane.AddCurve("Rssi Remote", plotdatarssir, Color.Green, SymbolType.None);
zedGraphControl1.GraphPane.AddCurve("Noice Local", plotdatanoicel, Color.Blue, SymbolType.None);
zedGraphControl1.GraphPane.AddCurve("Noice Remote", plotdatanoicer, Color.Orange, SymbolType.None);
}
private void BUT_connect_Click(object sender, EventArgs e)
{
CustomMessageBox.Show("Ensure you disconnect properly, to leave the radio in a good state");
try
{
MainV2.comPort.BaseStream.Open();
inter.doConnect(MainV2.comPort.BaseStream);
inter.doCommand(MainV2.comPort.BaseStream, "AT&T=RSSI");
inter.doCommand(MainV2.comPort.BaseStream, "ATO");
tickStart = Environment.TickCount;
timer1.Start();
BUT_disconnect.Enabled = true;
BUT_connect.Enabled = false;
}
catch { CustomMessageBox.Show("Bad Port Setting"); }
}
private void BUT_disconnect_Click(object sender, EventArgs e)
{
try
{
timer1.Stop();
inter.doConnect(MainV2.comPort.BaseStream);
inter.doCommand(MainV2.comPort.BaseStream, "AT&T");
inter.doCommand(MainV2.comPort.BaseStream, "ATO");
MainV2.comPort.BaseStream.Close();
BUT_disconnect.Enabled = false;
BUT_connect.Enabled = true;
}
catch { }
}
private void timer1_Tick(object sender, EventArgs e)
{
if (MainV2.comPort.BaseStream != null && MainV2.comPort.BaseStream.IsOpen)
{
MainV2.comPort.BaseStream.WriteLine("ABCDEFGHIJKLMNOPQRSTUVWXYZ");
if (MainV2.comPort.BaseStream.BytesToRead < 50)
return;
string line = MainV2.comPort.BaseStream.ReadLine();
/*
L/R RSSI: 12/0 L/R noise: 17/0 pkts: 0 txe=0 rxe=0 stx=0 srx=0 ecc=0/0 temp=61 dco=0
L/R RSSI: 12/0 L/R noise: 16/0 pkts: 0 txe=0 rxe=0 stx=0 srx=0 ecc=0/0 temp=61 dco=0
*/
Regex rssi = new Regex(@"RSSI: ([0-9]+)/([0-9]+)\s+L/R noise: ([0-9]+)/([0-9]+)");
Match match = rssi.Match(line);
if (match.Success) {
double time = (Environment.TickCount - tickStart) / 1000.0;
plotdatarssil.Add(time, double.Parse(match.Groups[1].Value));
plotdatarssir.Add(time, double.Parse(match.Groups[2].Value));
plotdatanoicel.Add(time, double.Parse(match.Groups[3].Value));
plotdatanoicer.Add(time, double.Parse(match.Groups[4].Value));
// Make sure the Y axis is rescaled to accommodate actual data
zedGraphControl1.AxisChange();
// Force a redraw
zedGraphControl1.Invalidate();
}
}
}
}
}