using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
using System.IO.Ports;
namespace CPFTrack
{
public partial class Form1 : Form
{
public delegate void IUSBLUpdateHandler(object sender, IUSBLData e);
public event IUSBLUpdateHandler OnIUSBLUpdate;
public Form1()
{
InitializeComponent();
}
private SerialPort iusblSerialPort = new SerialPort();
private static byte[] iusblMsgBuffer;
private void Form1_Load(object sender, EventArgs e)
{
formStripChart = new FormStripChart(this);
formStripChart.FormClosed += formStripChart_FormClosed;
formStripChart.Show();
iusblSerialPort.BaudRate = 9600;
iusblSerialPort.DataBits = 8;
iusblSerialPort.Handshake = Handshake.None;
iusblSerialPort.Parity = Parity.None;
iusblSerialPort.PortName = "COM8";
iusblSerialPort.StopBits = StopBits.One;
iusblMsgBuffer = new byte[iusblSerialPort.ReadBufferSize];
iusblSerialPort.DataReceived += new SerialDataReceivedEventHandler(iusblSerialPort_DataReceived);
iusblSerialPort.Open();
timerIUSBL.Enabled = true;
}
private static double depthValue = 0.0;
private static Random randomValue = new Random();
private void UpdateStatus(IUSBLData args)
{
// Make sure someone is listening to event
if (OnIUSBLUpdate == null)
return;
//ProgressEventArgs args = new ProgressEventArgs(status);
OnIUSBLUpdate(this, args);
}
public class IUSBLData : EventArgs
{
public double rangeValue = double.NaN;
public double xValue = double.NaN;
public double yValue = double.NaN;
public double zValue = double.NaN;
public DateTime timeStamp = new DateTime();
}
private static IUSBLData iusblData = new IUSBLData();
FormStripChart formStripChart;
private void newStripChartToolStripMenuItem_Click(object sender, EventArgs e)
{
if (formStripChart == null)
{
formStripChart = new FormStripChart(this);
formStripChart.FormClosed += formStripChart_FormClosed;
formStripChart.Show();
}
else
formStripChart.Activate();
}
void formStripChart_FormClosed(object sender, FormClosedEventArgs e)
{
formStripChart = null;
}
private void exitToolStripMenuItem_Click(object sender, EventArgs e)
{
Application.Exit();
}
private string inString = string.Empty;
private StringBuilder inSB = new StringBuilder(256);
delegate void SetTextCallback(String msgString);
private void iusblSerialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
//There is no accurate method for checking how many bytes are read
//unless you check the return from the Read method
labelIUSBLRange.ForeColor = Color.Black;
int bytesRead = iusblSerialPort.Read(iusblMsgBuffer, 0, iusblMsgBuffer.Length);
//For the example assume the data we are received is ASCII data.
inString += Encoding.ASCII.GetString(iusblMsgBuffer, 0, bytesRead);
if (inString.Contains("\n"))
{
this.BeginInvoke(new SetTextCallback(parseIUSBL), new object[] { inString });
inString = String.Empty;
}
}
private static string[] inFields;
private void parseIUSBL(String inString)
{
iusblData.timeStamp = DateTime.Now;
Console.WriteLine("Received: " + inString);
inFields = inString.Split(',', 'R', 'X', 'Y', 'Z');
iusblData.rangeValue = double.Parse(inFields[2]);
tbIUSBLRange.Text = inFields[2];
if(inFields.Length > 5)
{
iusblData.xValue = double.Parse(inFields[4]);
tbIUSBLEasting.Text = inFields[4];
iusblData.yValue = double.Parse(inFields[6]);
tbIUSBLNorthing.Text = inFields[6];
iusblData.zValue = double.Parse(inFields[8]);
tbIUSBLDepth.Text = inFields[8];
}
else
{
iusblData.xValue = double.NaN;
tbIUSBLEasting.Text = "-";
iusblData.yValue = double.NaN;
tbIUSBLNorthing.Text = "-";
iusblData.zValue = double.NaN;
tbIUSBLDepth.Text = "-";
}
UpdateStatus(iusblData);
}
private void simIUSBL(StringBuilder inSB)
{
Console.WriteLine(inSB.ToString());
depthValue = depthValue - randomValue.NextDouble();
iusblData.xValue = 0.0;
iusblData.yValue = 0.0;
iusblData.zValue = depthValue;
iusblData.timeStamp = DateTime.Now;
//ProgressEventArgs args = new ProgressEventArgs("test status");
tbIUSBLDepth.Text = iusblData.zValue.ToString("f1");
tbIUSBLNorthing.Text = iusblData.yValue.ToString("f1");
tbIUSBLEasting.Text = iusblData.xValue.ToString("f1");
UpdateStatus(iusblData);
// writeKML(iusblData);
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
if (iusblSerialPort.IsOpen)
iusblSerialPort.Close();
}
private static String outString = "POS V6,4\r\n";
private static double depth = 0.0;
private void timerIUSBL_Tick(object sender, EventArgs e)
{
depth = depth - 1.0;
Console.WriteLine("Sending: " + outString);
iusblSerialPort.Write(outString);
labelIUSBLRange.ForeColor = Color.Red;
}
private static StreamWriter kmlFile = new StreamWriter("usblTrack.kml");
private static StringBuilder sbTemp = new StringBuilder(128);
private void writeKML(IUSBLData iusblData)
{
kmlFile.WriteLine(@"");
kmlFile.WriteLine(@"");
kmlFile.WriteLine("");
kmlFile.WriteLine(" ");
kmlFile.WriteLine(" ");
kmlFile.WriteLine(" absolute");
for (int i = 1; i > -100; i--)
{
sbTemp.Clear();
sbTemp.Append(" -121.80 36.805 ");
sbTemp.Append(i.ToString());
sbTemp.Append("");
kmlFile.WriteLine(sbTemp.ToString());
}
kmlFile.WriteLine(" ");
kmlFile.WriteLine(" ");
kmlFile.WriteLine("");
kmlFile.WriteLine("");
kmlFile.Close();
}
// kmlFile.WriteLine(@" \n');
// kmlFile.WriteLine(@" Paragon\n');
// kmlFile.WriteLine(@" \n');
// kmlFile.WriteLine(@" \n');
// kmlFile.WriteLine(@" %3.9f\n', lon(end));
// kmlFile.WriteLine(@" %3.9f\n', lat(end));
// kmlFile.WriteLine(@" 0\n');
// kmlFile.WriteLine(@" \n');
// kmlFile.WriteLine(@" \n');
// kmlFile.WriteLine(@" %f\n', mod(heading + 180, 360));
// kmlFile.WriteLine(@" 0\n');
// kmlFile.WriteLine(@" 0\n');
// kmlFile.WriteLine(@" \n');
// kmlFile.WriteLine(@" \n');
// kmlFile.WriteLine(@" 1\n');
// kmlFile.WriteLine(@" 1\n');
// kmlFile.WriteLine(@" 1\n');
// kmlFile.WriteLine(@" \n');
// kmlFile.WriteLine(@" \n');
// kmlFile.WriteLine(@" Paragon.dae\n');
// kmlFile.WriteLine(@" \n');
// kmlFile.WriteLine(@" \n');
// kmlFile.WriteLine(@" \n\n');
//
// kmlFile.WriteLine(@" \n');
// kmlFile.WriteLine(@" %3.9f\n', lon(end));
// kmlFile.WriteLine(@" %3.9f\n', lat(end));
// kmlFile.WriteLine(@" %f\n', GEZoom);
// % kmlFile.WriteLine(@" 0\n');
// % kmlFile.WriteLine(@" 0\n');
// kmlFile.WriteLine(@" relativeToGround\n');
// kmlFile.WriteLine(@" \n\n');
//
// kmlFile.WriteLine(@"\n');
// kmlFile.WriteLine(@"\n');
//
// fclose(fid);
//end
}
}