Changeset - 105a3022c22b
[Not reviewed]
default
0 2 0
mkanning@CL-ENS241-10.cedarville.edu - 13 years ago 2013-02-21 15:29:54
mkanning@CL-ENS241-10.cedarville.edu
fixed the chart cross threading issue, renamed items on form
2 files changed with 52 insertions and 14 deletions:
0 comments (0 inline, 0 general)
Demo.WindowsForms/Forms/MainForm.Designer.cs
Show inline comments
 
@@ -1461,195 +1461,195 @@
 
            this.ctnTopChartHolder.TabIndex = 0;
 
            // 
 
            // lblTopLeftChartTitle
 
            // 
 
            this.lblTopLeftChartTitle.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
 
            this.lblTopLeftChartTitle.AutoSize = true;
 
            this.lblTopLeftChartTitle.Location = new System.Drawing.Point(0, 149);
 
            this.lblTopLeftChartTitle.Name = "lblTopLeftChartTitle";
 
            this.lblTopLeftChartTitle.Size = new System.Drawing.Size(42, 13);
 
            this.lblTopLeftChartTitle.TabIndex = 2;
 
            this.lblTopLeftChartTitle.Text = "Altitude";
 
            // 
 
            // chrtTopLeft
 
            // 
 
            this.chrtTopLeft.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
 
            | System.Windows.Forms.AnchorStyles.Left) 
 
            | System.Windows.Forms.AnchorStyles.Right)));
 
            this.chrtTopLeft.Location = new System.Drawing.Point(3, 3);
 
            this.chrtTopLeft.Name = "chrtTopLeft";
 
            this.chrtTopLeft.Size = new System.Drawing.Size(399, 156);
 
            this.chrtTopLeft.TabIndex = 1;
 
            this.chrtTopLeft.Text = "chart4";
 
            this.chrtTopLeft.Click += new System.EventHandler(this.chrtTopLeft_Click);
 
            // 
 
            // lblTopRightChartTitle
 
            // 
 
            this.lblTopRightChartTitle.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
 
            this.lblTopRightChartTitle.AutoSize = true;
 
            this.lblTopRightChartTitle.Location = new System.Drawing.Point(0, 149);
 
            this.lblTopRightChartTitle.Name = "lblTopRightChartTitle";
 
            this.lblTopRightChartTitle.Size = new System.Drawing.Size(47, 13);
 
            this.lblTopRightChartTitle.TabIndex = 1;
 
            this.lblTopRightChartTitle.Text = "Humidity";
 
            // 
 
            // chrtTopRight
 
            // 
 
            this.chrtTopRight.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
 
            | System.Windows.Forms.AnchorStyles.Left) 
 
            | System.Windows.Forms.AnchorStyles.Right)));
 
            this.chrtTopRight.Location = new System.Drawing.Point(3, 3);
 
            this.chrtTopRight.Name = "chrtTopRight";
 
            this.chrtTopRight.Size = new System.Drawing.Size(426, 156);
 
            this.chrtTopRight.TabIndex = 0;
 
            this.chrtTopRight.Text = "chart4";
 
            this.chrtTopRight.Click += new System.EventHandler(this.chrtTopRight_Click);
 
            // 
 
            // ctnBottomChartHolder
 
            // 
 
            this.ctnBottomChartHolder.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
 
            | System.Windows.Forms.AnchorStyles.Left) 
 
            | System.Windows.Forms.AnchorStyles.Right)));
 
            this.ctnBottomChartHolder.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
 
            this.ctnBottomChartHolder.Location = new System.Drawing.Point(3, 3);
 
            this.ctnBottomChartHolder.Name = "ctnBottomChartHolder";
 
            // 
 
            // ctnBottomChartHolder.Panel1
 
            // 
 
            this.ctnBottomChartHolder.Panel1.Controls.Add(this.lblBottomLeftChartTitle);
 
            this.ctnBottomChartHolder.Panel1.Controls.Add(this.chrtBottomLeft);
 
            // 
 
            // ctnBottomChartHolder.Panel2
 
            // 
 
            this.ctnBottomChartHolder.Panel2.Controls.Add(this.lblBottomRightChartTitle);
 
            this.ctnBottomChartHolder.Panel2.Controls.Add(this.chrtBottomRight);
 
            this.ctnBottomChartHolder.Size = new System.Drawing.Size(845, 201);
 
            this.ctnBottomChartHolder.SplitterDistance = 407;
 
            this.ctnBottomChartHolder.TabIndex = 0;
 
            // 
 
            // lblBottomLeftChartTitle
 
            // 
 
            this.lblBottomLeftChartTitle.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
 
            this.lblBottomLeftChartTitle.AutoSize = true;
 
            this.lblBottomLeftChartTitle.Location = new System.Drawing.Point(0, 186);
 
            this.lblBottomLeftChartTitle.Name = "lblBottomLeftChartTitle";
 
            this.lblBottomLeftChartTitle.Size = new System.Drawing.Size(48, 13);
 
            this.lblBottomLeftChartTitle.TabIndex = 1;
 
            this.lblBottomLeftChartTitle.Text = "Pressure";
 
            // 
 
            // chrtBottomLeft
 
            // 
 
            this.chrtBottomLeft.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
 
            | System.Windows.Forms.AnchorStyles.Left) 
 
            | System.Windows.Forms.AnchorStyles.Right)));
 
            this.chrtBottomLeft.Location = new System.Drawing.Point(3, -1);
 
            this.chrtBottomLeft.Name = "chrtBottomLeft";
 
            this.chrtBottomLeft.Size = new System.Drawing.Size(399, 197);
 
            this.chrtBottomLeft.TabIndex = 0;
 
            this.chrtBottomLeft.Text = "chart2";
 
            this.chrtBottomLeft.Click += new System.EventHandler(this.chrtBottomLeft_Click);
 
            // 
 
            // lblBottomRightChartTitle
 
            // 
 
            this.lblBottomRightChartTitle.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
 
            this.lblBottomRightChartTitle.AutoSize = true;
 
            this.lblBottomRightChartTitle.Location = new System.Drawing.Point(0, 186);
 
            this.lblBottomRightChartTitle.Name = "lblBottomRightChartTitle";
 
            this.lblBottomRightChartTitle.Size = new System.Drawing.Size(28, 13);
 
            this.lblBottomRightChartTitle.Size = new System.Drawing.Size(44, 13);
 
            this.lblBottomRightChartTitle.TabIndex = 2;
 
            this.lblBottomRightChartTitle.Text = "Map";
 
            this.lblBottomRightChartTitle.Text = "Velocity";
 
            // 
 
            // chrtBottomRight
 
            // 
 
            this.chrtBottomRight.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
 
            | System.Windows.Forms.AnchorStyles.Left) 
 
            | System.Windows.Forms.AnchorStyles.Right)));
 
            this.chrtBottomRight.Location = new System.Drawing.Point(3, -1);
 
            this.chrtBottomRight.Name = "chrtBottomRight";
 
            this.chrtBottomRight.Size = new System.Drawing.Size(426, 197);
 
            this.chrtBottomRight.TabIndex = 1;
 
            this.chrtBottomRight.Text = "chart2";
 
            this.chrtBottomRight.Click += new System.EventHandler(this.chrtBottomRight_Click);
 
            // 
 
            // tabData
 
            // 
 
            this.tabData.Controls.Add(this.gboxSlaveData);
 
            this.tabData.Controls.Add(this.gboxMasterData);
 
            this.tabData.Location = new System.Drawing.Point(4, 22);
 
            this.tabData.Name = "tabData";
 
            this.tabData.Padding = new System.Windows.Forms.Padding(10);
 
            this.tabData.Size = new System.Drawing.Size(863, 425);
 
            this.tabData.TabIndex = 3;
 
            this.tabData.Text = "Data";
 
            this.tabData.UseVisualStyleBackColor = true;
 
            // 
 
            // gboxSlaveData
 
            // 
 
            this.gboxSlaveData.Controls.Add(this.textBox16);
 
            this.gboxSlaveData.Controls.Add(this.label26);
 
            this.gboxSlaveData.Controls.Add(this.textBox17);
 
            this.gboxSlaveData.Controls.Add(this.label27);
 
            this.gboxSlaveData.Controls.Add(this.label28);
 
            this.gboxSlaveData.Controls.Add(this.textBox15);
 
            this.gboxSlaveData.Controls.Add(this.label25);
 
            this.gboxSlaveData.Controls.Add(this.textBox14);
 
            this.gboxSlaveData.Controls.Add(this.label24);
 
            this.gboxSlaveData.Controls.Add(this.textBox13);
 
            this.gboxSlaveData.Controls.Add(this.label23);
 
            this.gboxSlaveData.Controls.Add(this.label22);
 
            this.gboxSlaveData.Controls.Add(this.textBox12);
 
            this.gboxSlaveData.Controls.Add(this.label21);
 
            this.gboxSlaveData.Controls.Add(this.textBox11);
 
            this.gboxSlaveData.Controls.Add(this.label19);
 
            this.gboxSlaveData.Controls.Add(this.textBox10);
 
            this.gboxSlaveData.Controls.Add(this.label18);
 
            this.gboxSlaveData.Controls.Add(this.textBox9);
 
            this.gboxSlaveData.Controls.Add(this.label17);
 
            this.gboxSlaveData.Controls.Add(this.textBox8);
 
            this.gboxSlaveData.Controls.Add(this.label15);
 
            this.gboxSlaveData.Controls.Add(this.textBox7);
 
            this.gboxSlaveData.Controls.Add(this.label8);
 
            this.gboxSlaveData.Controls.Add(this.label20);
 
            this.gboxSlaveData.Location = new System.Drawing.Point(259, 13);
 
            this.gboxSlaveData.Name = "gboxSlaveData";
 
            this.gboxSlaveData.Padding = new System.Windows.Forms.Padding(10);
 
            this.gboxSlaveData.Size = new System.Drawing.Size(297, 438);
 
            this.gboxSlaveData.TabIndex = 1;
 
            this.gboxSlaveData.TabStop = false;
 
            this.gboxSlaveData.Text = "Slave Modules";
 
            // 
 
            // textBox16
 
            // 
 
            this.textBox16.Location = new System.Drawing.Point(146, 378);
 
            this.textBox16.Name = "textBox16";
 
            this.textBox16.Size = new System.Drawing.Size(100, 20);
 
            this.textBox16.TabIndex = 41;
 
            // 
 
            // label26
 
            // 
 
            this.label26.AutoSize = true;
 
            this.label26.Location = new System.Drawing.Point(40, 381);
 
            this.label26.Margin = new System.Windows.Forms.Padding(30, 7, 5, 7);
 
            this.label26.Name = "label26";
 
            this.label26.Size = new System.Drawing.Size(69, 13);
 
            this.label26.TabIndex = 40;
 
            this.label26.Text = "Battery Level";
 
            // 
 
            // textBox17
 
            // 
 
            this.textBox17.Location = new System.Drawing.Point(146, 351);
 
            this.textBox17.Name = "textBox17";
 
            this.textBox17.Size = new System.Drawing.Size(100, 20);
 
            this.textBox17.TabIndex = 39;
 
            // 
 
            // label27
 
            // 
 
            this.label27.AutoSize = true;
 
            this.label27.Location = new System.Drawing.Point(40, 354);
 
            this.label27.Margin = new System.Windows.Forms.Padding(30, 7, 5, 7);
 
            this.label27.Name = "label27";
 
            this.label27.Size = new System.Drawing.Size(98, 13);
 
            this.label27.TabIndex = 38;
 
            this.label27.Text = "Board Temperature";
 
            // 
 
            // label28
 
            // 
Demo.WindowsForms/Forms/MainForm.cs
Show inline comments
 
using System;
 
using System.Collections.Generic;
 
using System.ComponentModel;
 
using System.Diagnostics;
 
using System.Drawing;
 
using System.Drawing.Drawing2D;
 
using System.Globalization;
 
using System.IO;
 
using System.Net;
 
using System.Net.NetworkInformation;
 
using System.Threading;
 
using System.Windows.Forms;
 
using System.Xml;
 
using Demo.WindowsForms.CustomMarkers;
 
using GMap.NET;
 
using GMap.NET.MapProviders;
 
using GMap.NET.WindowsForms;
 
using GMap.NET.WindowsForms.Markers;
 
using GMap.NET.WindowsForms.ToolTips;
 
using System.IO.Ports;
 
using System.Data;
 
using System.Text;
 
//using System.Linq;
 
 
namespace Demo.WindowsForms
 
{
 
    public partial class MainForm : Form
 
    {
 
        // layers
 
        readonly GMapOverlay top = new GMapOverlay();
 
        internal readonly GMapOverlay objects = new GMapOverlay("objects");
 
        internal readonly GMapOverlay routes = new GMapOverlay("routes");
 
        //internal readonly GMapOverlay polygons = new GMapOverlay("polygons");
 
 
        // marker
 
        GMarkerGoogle currentMarker;
 
 
        // polygons
 
        //GMapPolygon polygon;
 
 
        // etc
 
        readonly Random rnd = new Random();
 
        readonly DescendingComparer ComparerIpStatus = new DescendingComparer();
 
        GMapMarkerRect CurentRectMarker = null;
 
        string mobileGpsLog = string.Empty;
 
        bool isMouseDown = false;
 
        PointLatLng start;
 
        PointLatLng end;
 
        TimeSpan unixTime;
 
 
        public MainForm()
 
        {
 
            InitializeComponent();
 
            unixTime = (DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0));
 
 
            if (!DesignMode)
 
            {
 
                // add your custom map db provider
 
                //GMap.NET.CacheProviders.MySQLPureImageCache ch = new GMap.NET.CacheProviders.MySQLPureImageCache();
 
                //ch.ConnectionString = @"server=sql2008;User Id=trolis;Persist Security Info=True;database=gmapnetcache;password=trolis;";
 
                //MainMap.Manager.SecondaryCache = ch;
 
 
                // set your proxy here if need
 
                //GMapProvider.WebProxy = new WebProxy("10.2.0.100", 8080);
 
                //GMapProvider.WebProxy.Credentials = new NetworkCredential("ogrenci@bilgeadam.com", "bilgeada");
 
 
                // set cache mode only if no internet avaible
 
                if (!Stuff.PingNetwork("pingtest.net"))
 
                {
 
                    MainMap.Manager.Mode = AccessMode.CacheOnly;
 
                    MessageBox.Show("No internet connection available, going to CacheOnly mode.", "GMap.NET - Demo.WindowsForms", MessageBoxButtons.OK, MessageBoxIcon.Warning);
 
                }
 
 
                // config map - MDKEdit - init values ??
 
                MainMap.MapProvider = GMapProviders.OpenStreetMap;
 
                MainMap.Position = new PointLatLng(39.751248, -83.809848);
 
                MainMap.MinZoom = 0;
 
                MainMap.MaxZoom = 24;
 
                MainMap.Zoom = 15;
 
 
                //MainMap.ScaleMode = ScaleModes.Fractional;
 
 
                // map events
 
                {
 
                    MainMap.OnPositionChanged += new PositionChanged(MainMap_OnPositionChanged);
 
 
                    MainMap.OnTileLoadStart += new TileLoadStart(MainMap_OnTileLoadStart);
 
                    MainMap.OnTileLoadComplete += new TileLoadComplete(MainMap_OnTileLoadComplete);
 
 
                    MainMap.OnMapZoomChanged += new MapZoomChanged(MainMap_OnMapZoomChanged);
 
                    MainMap.OnMapTypeChanged += new MapTypeChanged(MainMap_OnMapTypeChanged);
 
 
                    MainMap.OnMarkerClick += new MarkerClick(MainMap_OnMarkerClick);
 
                    MainMap.OnMarkerEnter += new MarkerEnter(MainMap_OnMarkerEnter);
 
                    MainMap.OnMarkerLeave += new MarkerLeave(MainMap_OnMarkerLeave);
 
 
                    MainMap.OnPolygonEnter += new PolygonEnter(MainMap_OnPolygonEnter);
 
                    MainMap.OnPolygonLeave += new PolygonLeave(MainMap_OnPolygonLeave);
 
 
                    MainMap.OnRouteEnter += new RouteEnter(MainMap_OnRouteEnter);
 
                    MainMap.OnRouteLeave += new RouteLeave(MainMap_OnRouteLeave);
 
 
                    MainMap.Manager.OnTileCacheComplete += new TileCacheComplete(OnTileCacheComplete);
 
                    MainMap.Manager.OnTileCacheStart += new TileCacheStart(OnTileCacheStart);
 
                    MainMap.Manager.OnTileCacheProgress += new TileCacheProgress(OnTileCacheProgress);
 
                }
 
 
                MainMap.MouseMove += new MouseEventHandler(MainMap_MouseMove);
 
                MainMap.MouseDown += new MouseEventHandler(MainMap_MouseDown);
 
                MainMap.MouseUp += new MouseEventHandler(MainMap_MouseUp);
 
                MainMap.MouseDoubleClick += new MouseEventHandler(MainMap_MouseDoubleClick);
 
 
                // get map types
 
#if !MONO   // mono doesn't handle it, so we 'lost' provider list ;]
 
                comboBoxMapType.ValueMember = "Name";
 
                comboBoxMapType.DataSource = GMapProviders.List;
 
                comboBoxMapType.SelectedItem = MainMap.MapProvider;
 
#endif
 
                // acccess mode
 
                comboBoxMode.DataSource = Enum.GetValues(typeof(AccessMode));
 
                comboBoxMode.SelectedItem = MainMap.Manager.Mode;
 
 
                // get position
 
                textBoxLat.Text = MainMap.Position.Lat.ToString(CultureInfo.InvariantCulture);
 
                textBoxLng.Text = MainMap.Position.Lng.ToString(CultureInfo.InvariantCulture);
 
 
                // get cache modes
 
                checkBoxUseRouteCache.Checked = MainMap.Manager.UseRouteCache;
 
 
                MobileLogFrom.Value = DateTime.Today;
 
                MobileLogTo.Value = DateTime.Now;
 
 
                // get zoom  
 
                trackBarZoomLevel.Minimum = MainMap.MinZoom * 100;
 
                trackBarZoomLevel.Maximum = MainMap.MaxZoom * 100;
 
                trackBarZoomLevel.TickFrequency = 100;
 
 
#if DEBUG
 
                xboxGrid.Checked = true;
 
#endif
 
 
                ToolStripManager.Renderer = new BSE.Windows.Forms.Office2007Renderer();
 
 
                #region -- demo workers --
 
                //// flight demo
 
                //{
 
@@ -2472,413 +2473,450 @@ namespace Demo.WindowsForms
 
            tboxMax.Text = "";
 
            tboxMin.Text = "";
 
        }
 
 
        //highlight Bottom Right chart on click
 
        //set text box values based on this chart
 
        private void chrtBottomRight_Click(object sender, EventArgs e)
 
        {
 
            ResetChartColors();
 
            chrtBottomRight.BackColor = Color.Gray;
 
            tboxChartData.Text = "Map";
 
            tboxCurrent.Text = "";
 
            tboxAverage.Text = "";
 
            tboxMax.Text = "";
 
            tboxMin.Text = "";
 
        }
 
 
        #endregion
 
 
        //runs on init 
 
        public void PrepareGraphs(){
 
 
            //set up for graphs MDKEdit
 
            // http://www.youtube.com/watch?v=zTod4-Fg6Ew - split containers
 
            // http://www.youtube.com/watch?v=bMXtgPk875I - chart controls
 
 
            chrtTopLeft.ChartAreas.Add("altitudeArea");
 
            chrtTopLeft.Series.Add("altitudeTrend");
 
 
            chrtTopRight.ChartAreas.Add("humidityArea");
 
            chrtTopRight.Series.Add("humidityTrend");
 
 
            chrtBottomLeft.Series.Add("pressureTrend");
 
            chrtBottomLeft.ChartAreas.Add("pressureArea");
 
 
            chrtBottomRight.ChartAreas.Add("velocityArea");
 
            chrtBottomRight.Series.Add("velocityTrend");
 
 
            // declare all series, data points to be modified dynamically at run
 
 
            //---------prep altitude area BEGIN 
 
            chrtTopLeft.Series["altitudeTrend"].ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Line;
 
            chrtTopLeft.Series["altitudeTrend"].Color = Color.Green;
 
            System.Windows.Forms.DataVisualization.Charting.AxisName.X.Equals("Time");
 
            System.Windows.Forms.DataVisualization.Charting.AxisName.Y.Equals("Altitude");
 
            
 
            ///required initial value
 
            chrtTopLeft.Series["altitudeTrend"].Points.AddXY(0, 0);
 
            //---------prep altitude area END 
 
 
 
            //-----------prep humidity area BEGIN
 
            chrtTopRight.Series["humidityTrend"].ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Line;
 
            chrtTopRight.Series["humidityTrend"].Color = Color.Red;
 
            System.Windows.Forms.DataVisualization.Charting.AxisName.X.Equals("Time");
 
            System.Windows.Forms.DataVisualization.Charting.AxisName.Y.Equals("Humidity");
 
 
            ///required initial value
 
            chrtTopRight.Series["humidityTrend"].Points.AddXY(0, 0);
 
            //-----------prep humidity area END
 
 
 
            //-----------prep pressure area BEGIN
 
            chrtBottomLeft.Series["pressureTrend"].ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Line;
 
            chrtBottomLeft.Series["pressureTrend"].Color = Color.Blue;
 
            System.Windows.Forms.DataVisualization.Charting.AxisName.X.Equals("Time");
 
            System.Windows.Forms.DataVisualization.Charting.AxisName.Y.Equals("Pressure");
 
 
            ///required initial value
 
            chrtBottomLeft.Series["pressureTrend"].Points.AddXY(0, 0);
 
            //-----------prep pressure area END
 
 
 
            //----------prep velocity area BEGIN
 
            chrtBottomRight.Series["velocityTrend"].ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Line;
 
            chrtBottomRight.Series["velocityTrend"].Color = Color.Green;
 
            System.Windows.Forms.DataVisualization.Charting.AxisName.X.Equals("Time");
 
            System.Windows.Forms.DataVisualization.Charting.AxisName.Y.Equals("Altitude");
 
 
            ///required initial value
 
            chrtBottomRight.Series["velocityTrend"].Points.AddXY(0, 0);
 
            //----------prep velocity area END
 
 
            //put chart displays in a ready state
 
            ResetChartColors();
 
        }
 
        
 
        string latitude;
 
        string longitude;
 
 
        //parses transmissions and saves data to CSV file
 
        public void ParseIncomingData(string rawDataReceived)
 
        {
 
            //check to see if data should be processed
 
            if (!cboxCollectData.Checked && rawDataReceived.StartsWith("KD8TDF"))
 
            {
 
                AddTextDelegate("Bad transmission: " + rawDataReceived);
 
                return;
 
            }
 
 
            /* sample stansmissions
 
             * KD8TDF-9>APRS,WIDE2-1:/191950zN/WO/ T79 S00 V H99.99 _ |
 
             * KD8TDF-9>APRS,WIDE2-1:/151916z3944.87N/08348.75WO005/0.013 SV:09 A-30.5 B45.64 C99542
 
             */
 
 
            //find and store latitude string
 
            int indexStart = rawDataReceived.IndexOf("z");
 
            int indexEnd = rawDataReceived.IndexOf("N/");
 
            latitude = rawDataReceived.Substring(indexStart + 1, indexEnd - indexStart - 1);
 
 
            //find and store longitude string
 
            indexStart = rawDataReceived.IndexOf("N/");
 
            indexEnd = rawDataReceived.IndexOf("WO");
 
            longitude = rawDataReceived.Substring(indexStart + 2, indexEnd - indexStart - 2);
 
            
 
            //remove APRS overhead from string
 
            string transmissionCommentField= rawDataReceived.Substring(rawDataReceived.IndexOf(" ")); 
 
 
            //place each datum in its own variable
 
            string[] dataTransmission;
 
            dataTransmission = transmissionCommentField.Split(' ');
 
 
            //variables for processing datums
 
            string typeCode;
 
            double data;
 
            string csvData = "";
 
 
            //loop through all datums in the transmission and send them to the chart builder
 
            for (int i = 1; i < dataTransmission.Length; i++)
 
            {
 
                //remove unwanted characters
 
                dataTransmission[i] = dataTransmission[i].Trim('\r');
 
 
                //zero not always trasmitted properly so add '0.0' to any transmission with no data
 
                if (dataTransmission[i].Length == 1) 
 
                {
 
                    dataTransmission[i] += "0";
 
                }
 
                
 
                //pull out data and data type and send to processing function
 
                typeCode = dataTransmission[i].Substring(0, 1);
 
                data = double.Parse(dataTransmission[i].Substring(1));
 
                processTransmissionDatum(typeCode, data);
 
 
                //append data to string for CSV write
 
                csvData += typeCode + data + ",";
 
            }
 
 
            //handle case of no GPS fix
 
            if (latitude == "" || longitude == "")
 
            {
 
                AddText("No GPS fix: ");
 
                AddTextDelegate("No GPS fix: ");
 
            }
 
            else
 
            {
 
                //marker added here so extra accuracy can be added
 
                addMarkerFromTransmit(latitude, longitude);
 
            }
 
 
            //display transmission in message box
 
            AddText(rawDataReceived + "\r\n");
 
            AddTextDelegate(rawDataReceived + "\r\n");
 
 
            //write the data to CSV file
 
            WriteToCSV(csvData);
 
        }
 
 
        //write the data to CSV file
 
        private void WriteToCSV(string data)
 
        {
 
            string path = Directory.GetCurrentDirectory();
 
            string filename = path+"\\debug" + unixTime.Milliseconds + ".csv";
 
            using (StreamWriter writer = new StreamWriter(filename, true))
 
            {
 
                writer.WriteLine(data);
 
            }
 
        }
 
        
 
        //method to process data from transmissions (usually chart inserts)
 
        private void processTransmissionDatum(string dataType, double data)
 
        {
 
            //TODO: add inserts for all charts. altitude is finished and is a template
 
            ///data types organized by listing in google doc
 
            //MASTER MODULE DATA VALUES
 
            if (dataType.Equals("t"))  //board temperature
 
            {
 
 
            }
 
            else if (dataType.Equals("L"))  //battery level
 
            {
 
 
            }
 
            else if (dataType.Equals("X"))  //Latitude accuracy
 
            {
 
 
            }
 
            else if (dataType.Equals("Y"))  //Longitude accuracy
 
            {
 
 
            }
 
            else if (dataType.Equals("V"))  //Velocity
 
            {
 
                chrtBottomRight.Series.FindByName("velocityTrend").Points.AddY(data);
 
                bottomRightChartDelegate(dataType, data);
 
            }
 
            else if (dataType.Equals("I"))  //Info/error Message
 
            {
 
                AddText("Info: " + data + "\r\n");
 
                AddTextDelegate("Info: " + data + "\r\n");
 
            }
 
            else if (dataType.Equals("_"))  //extra latitude decimals
 
            {
 
                longitude += data / 1000; //TODO: check math and decimal placement
 
            }
 
            else if (dataType.Equals("|"))  //extra longitude decimals
 
            {
 
                latitude += data / 1000; //TODO: check math and decimal placement
 
            }
 
 
            //ATMOSPHERIC MODULE DATA VALUES
 
            else if (dataType.Equals("l"))  //battery level
 
            {
 
 
            }
 
            else if (dataType.Equals("C"))  //
 
            {
 
 
            }
 
            else if (dataType.Equals("H"))  //Humidity
 
            {
 
                chrtTopRight.Series.FindByName("humidityTrend").Points.AddY(data);
 
                topRightChartDelegate(dataType, data);
 
            }
 
            else if (dataType.Equals("P"))  //Pressure
 
            {
 
                chrtBottomLeft.Series.FindByName("pressureTrend").Points.AddY(data);
 
                bottomLeftChartDelegate(dataType, data);
 
            }
 
            else if (dataType.Equals("A"))  //Altitude
 
            {
 
                chrtTopLeft.Series.FindByName("altitudeTrend").Points.AddY(data);
 
                topLeftChartDelegate(dataType, data);
 
            }
 
 
            //GEIGER MODULE DATA VALUES
 
            else if (dataType.Equals("l"))  //battery level
 
            {
 
 
            }
 
            else if (dataType.Equals("R"))  //radiation (CPM)
 
            {
 
 
            }
 
 
            // CAMERA MODULE DATA VALUES
 
            else if (dataType.Equals("l"))  //battery level
 
            {
 
 
            }
 
 
            //INVALID DATA TYPE
 
            else
 
            {
 
 
            }
 
        }
 
 
        //must change lat/long coords to properly place map marker
 
        float conv_coords(float in_coords)
 
        {
 
            //Initialize the location.
 
            float f = in_coords;
 
            // Get the first two digits by turning f into an integer, then doing an integer divide by 100;
 
            // firsttowdigits should be 77 at this point.
 
            int firsttwodigits = ((int)f) / 100;                               //This assumes that f < 10000.
 
            float nexttwodigits = f - (float)(firsttwodigits * 100);
 
            float theFinalAnswer = (float)(firsttwodigits + nexttwodigits / 60.0);
 
            return theFinalAnswer;
 
        }
 
 
        //must change lat/long coords to properly place map marker
 
        public decimal DmsToDD(double d, double m = 0, double s = 0)
 
        {
 
            return Convert.ToDecimal((d + (m / 60) + (s / 3600)) * (d < 0 ? -1 : 1));
 
        }
 
 
        // add marker from an APRS transmission - MDKEdit
 
        private void addMarkerFromTransmit(string lat, string lng)
 
        {
 
 
            double latitude = double.Parse(lat), longitude = double.Parse(lng);
 
            PointLatLng APRSloc = new PointLatLng();
 
            APRSloc.Lat = conv_coords((float)latitude);
 
            APRSloc.Lng = conv_coords((float)longitude)*-1;
 
 
            GMarkerGoogle m = new GMarkerGoogle(APRSloc, GMarkerGoogleType.blue_small);
 
 
            Placemark? p = null;
 
            if (xboxPlacemarkInfo.Checked)
 
            {
 
                GeoCoderStatusCode status;
 
                var ret = GMapProviders.GoogleMap.GetPlacemark(currentMarker.Position, out status);
 
                if (status == GeoCoderStatusCode.G_GEO_SUCCESS && ret != null)
 
                {
 
                    p = ret;
 
                }
 
            }
 
 
            objects.Markers.Add(m);
 
        }
 
        
 
        #endregion
 
 
        #region cross theading
 
 
        //these are for function calls across threads
 
        delegate void SetTextDelegate(string value);
 
        public void AddText(string value)
 
        public void AddTextDelegate(string value)
 
        {
 
            if (InvokeRequired)
 
            {
 
                Invoke(new SetTextDelegate(AddText), value);
 
                Invoke(new SetTextDelegate(AddTextDelegate), value);
 
            }
 
            else
 
            {
 
                tboxMessageBox.AppendText(value);// += value;
 
                textBoxMarkerCount.Text = objects.Markers.Count.ToString();
 
            }
 
        }
 
 
        delegate void ChartDataDelegate(string dataType, double data);
 
        public void AddDataToChart(string dataType, double data)
 
        public void topLeftChartDelegate(string dataType, double data)
 
        {
 
            if (InvokeRequired)
 
            {
 
                Invoke(new ChartDataDelegate(topLeftChartDelegate), dataType, data);
 
            }
 
            else
 
            {
 
                chrtTopLeft.Series.FindByName("altitudeTrend").Points.AddY(data);
 
            }
 
        }
 
 
        public void topRightChartDelegate(string dataType, double data)
 
        {
 
            if (InvokeRequired)
 
            {
 
                Invoke(new ChartDataDelegate(AddDataToChart), dataType, data);
 
                Invoke(new ChartDataDelegate(topRightChartDelegate), dataType, data);
 
            }
 
            else
 
            {
 
                processTransmissionDatum(dataType, data);
 
                chrtTopRight.Series.FindByName("humidityTrend").Points.AddY(data); 
 
            }
 
        }
 
 
        public void bottomLeftChartDelegate(string dataType, double data)
 
        {
 
            if (InvokeRequired)
 
            {
 
                Invoke(new ChartDataDelegate(bottomLeftChartDelegate), dataType, data);
 
            }
 
            else
 
            {
 
                chrtBottomLeft.Series.FindByName("pressureTrend").Points.AddY(data);
 
            }
 
        }
 
 
        public void bottomRightChartDelegate(string dataType, double data)
 
        {
 
            if (InvokeRequired)
 
            {
 
                Invoke(new ChartDataDelegate(bottomRightChartDelegate), dataType, data);
 
            }
 
            else
 
            {
 
                chrtBottomRight.Series.FindByName("velocityTrend").Points.AddY(data);
 
            }
 
        }
 
 
        #endregion
 
 
        #region testing
 
        
 
        //click event on the test button
 
        //currently simulates serial inputs
 
        string testData;
 
        int testIteration = 0;
 
        double testLat = 39.751248, testLng = -83.809848, testVelocity = 5.8, testAltitude = 100, testPressure = 700, testHumidity = 38;
 
        private void btnTest_Click(object sender, EventArgs e)
 
        {
 
            testLat += GetRandomNumber(-.005, .015);
 
            testLng += GetRandomNumber(-.005, .015);
 
            testVelocity += GetRandomNumber(1, 15);
 
            testAltitude += GetRandomNumber(50, 150);
 
            testPressure -= GetRandomNumber(10, 50);
 
            testHumidity -= GetRandomNumber(1, 3);
 
 
            switch (testIteration)
 
            {
 
                case 0:
 
                    testData = "KD8TDF-9>APRS,WIDE2-1:/151916z" + testLat + "N/" + testLng + "WO005/0.013 V" + testVelocity + " A" + testAltitude+" H"+testHumidity+" P"+testPressure;
 
                    ParseIncomingData(testData);
 
                    break;
 
                case 1:
 
                    testData = "KD8TDF-9>APRS,WIDE2-1:/151916z" + testLat + "N/" + testLng + "WO005/0.013 V" + testVelocity + " A" + testAltitude + " H" + testHumidity + " P" + testPressure;
 
                    ParseIncomingData(testData);
 
                    break;
 
                case 2:
 
                    testData = "KD8TDF-9>APRS,WIDE2-1:/151916z" + testLat + "N/" + testLng + "WO005/0.013 V" + testVelocity + " A" + testAltitude + " H" + testHumidity + " P" + testPressure;
 
                    ParseIncomingData(testData);
 
                    break;
 
                case 3:
 
                    testData = "KD8TDF-9>APRS,WIDE2-1:/151916z" + testLat + "N/" + testLng + "WO005/0.013 V" + testVelocity + " A" + testAltitude + " H" + testHumidity + " P" + testPressure;
 
                    ParseIncomingData(testData);
 
                    break;
 
                case 4:
 
                    testData = "KD8TDF-9>APRS,WIDE2-1:/151916z" + testLat + "N/" + testLng + "WO005/0.013 V" + testVelocity + " A" + testAltitude + " H" + testHumidity + " P" + testPressure;
 
                    ParseIncomingData(testData);
 
                    break;
 
                case 5:
 
                    testData = "KD8TDF-9>APRS,WIDE2-1:/151916z" + testLat + "N/" + testLng + "WO005/0.013 V" + testVelocity + " A" + testAltitude + " H" + testHumidity + " P" + testPressure;
 
                    ParseIncomingData(testData);
 
                    break;
 
                case 6:
 
                    testData = "KD8TDF-9>APRS,WIDE2-1:/151916z" + testLat + "N/" + testLng + "WO005/0.013 V" + testVelocity + " A" + testAltitude + " H" + testHumidity + " P" + testPressure;
 
                    ParseIncomingData(testData);
 
                    break;
 
                case 7:
 
                    testData = "KD8TDF-9>APRS,WIDE2-1:/151916z" + testLat + "N/" + testLng + "WO005/0.013 V" + testVelocity + " A" + testAltitude + " H" + testHumidity + " P" + testPressure;
 
                    ParseIncomingData(testData);
 
                    break;
 
                case 8:
 
                    testData = "KD8TDF-9>APRS,WIDE2-1:/151916z" + testLat + "N/" + testLng + "WO005/0.013 V" + testVelocity + " A" + testAltitude + " H" + testHumidity + " P" + testPressure;
 
                    ParseIncomingData(testData);
 
                    break;
 
                case 9:
 
                    testData = "KD8TDF-9>APRS,WIDE2-1:/151916z" + testLat + "N/" + testLng + "WO005/0.013 V" + testVelocity + " A" + testAltitude + " H" + testHumidity + " P" + testPressure;
 
                    ParseIncomingData(testData);
 
                    break;
 
                default:
 
                    break;
 
            }
 
            testIteration++;
 
        }
 
 
        public double GetRandomNumber(double minimum, double maximum)
 
        {
 
            Random random = new Random();
 
            return random.NextDouble() * (maximum - minimum) + minimum;
 
        }
 
 
        #endregion
 
 
    }
 
}
 
//TODO: CSV logging, offline caching
0 comments (0 inline, 0 general)