﻿using System;
using System.Linq;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO.Ports;

namespace gps_v_01
{
    public partial class GPS_V_01 : Form
    {
      

        static SerialPort  serialPort = null;
    


        public void SerialPortAdapter()
        {
            try
            {
                serialPort = new SerialPort();
                textBox1.Text = "Ganz Oben ";
               
                serialPort.BaudRate = 9600;
                textBox1.Text = "eins tiefer";

                serialPort.PortName = "COM4";
                serialPort.DataBits = 8;
                textBox1.Text = "Vor DataReceived";
                serialPort.ReadBufferSize = 2000;

                serialPort.DataReceived += new SerialDataReceivedEventHandler(sp_DataReceived);
          //      serialPort.ErrorReceived += new SerialErrorReceivedEventHandler(serialPort_ErrorReceived);
                textBox1.Text = "Vor Open";

                serialPort.Open();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);

            }   

        }
        public GPS_V_01()
        {
            InitializeComponent();

            
        }

        private void menuItem1_Click(object sender, EventArgs e)
        {
            serialPort.Close();
            Close();
        }
        private delegate void SetTextDeleg(string text);

        void sp_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
             int i = 0;
             string data1   = "";
             string Time    = "";
             string Nord    = "";
             string Ost     = "";

            char[] delimiterChars = { ' ', ',', ':', '\r','$' };

            string data = serialPort.ReadExisting();

            string[] words = data.Split(delimiterChars);

            foreach (string s in words)
            {
                if (i == 5)
                {
                    i++;
                     Ost = s;

                    data1 = Time + ", " + Nord + "N, " + Ost + "O";
                    this.BeginInvoke(new SetTextDeleg(si_DataReceived), new object[] { data1 }); 
                    return;
                }

                if (i == 4)
                    i++;
                if (i == 3)
                {
                    i++;
                     Nord = s;
                }
                if (i == 2)
                    i++;

                if (i == 1)
                {
                    i++;
                    Time = s;
                }         

                if (String.Compare(s, "GPRMC") == 0)
                {
                    i = 1;
                    data = "gefunden " + Convert.ToString(i);
                }
            }


            // Invokes the delegate on the UI thread, and sends the data that was received to the invoked method.

            // ---- The "si_DataReceived" method will be executed on the UI thread which allows populating of the textbox.

            
        
        }
        private void si_DataReceived(string data) { textBox1.Text = data; }

        private void button1_Click(object sender, EventArgs e)
        {
            SerialPortAdapter();   
        }
    }
}
