using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.IO.Ports;
using System.Threading;
using System.Windows.Threading;
using System.Net;
using System.Net.Sockets;
using System.Runtime.InteropServices;

namespace Temperature_chamber02
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    /// 

    public struct protokol_read_data
    {
        public float teplota;
        public UInt16 doba;
    };

    [Flags]
    public enum protokol_prikaz
    {
        rekni_data = 0x01,
        nastav_teplotu = 0x02,
        nastav_teplotu_cyklu = 0x03,
        spust_mereni = 0x04,
        spust_cyklus = 0x05,
        zastav_mereni = 0x06,
        reset_dat = 0xff
    };

    public struct protokol_send_data
    {
        public float set_temp;
        public float actual_temp;
        public UInt16 posledni_cyklus;
        public UInt16 aktualni_cyklus;
        public byte informace;              //0,0,0,0,0,Spusteno_cyklus,spusteno,dokonceno
    };

    [Flags]
    public enum protokol_prikaz_answer
    {
        nic = 0x00,
        posli_data = 0x10,
        prikaz_prijat = 0x20,
        prikaz_chyba = 0xf0
    };

    [Serializable]
    public struct Prijate_data_protokol
    {
        public protokol_prikaz typ;
        public protokol_read_data temp;
    };

    [Serializable]
    public struct Odesilane_data_protokol
    {
        public protokol_prikaz_answer typ;
        public protokol_send_data temp;
    };





    public partial class MainWindow : Window
    {
        Setup_okno Okno_S = new Setup_okno();
        string recieved_data;
        string prijate_radek;
        string data_to_send;
        string radek;
        string operace2;
        public static SerialPort Sp;
        FlowDocument mcFlowDoc = new FlowDocument();
        Paragraph para = new Paragraph();
        public static Prijate_data_protokol kposlani = new Prijate_data_protokol();
        bool aktualizace = false;
        bool data_aktual = false;





        public MainWindow()
        {
            InitializeComponent();
            



            DispatcherTimer timer_aktualizace = new DispatcherTimer();
            timer_aktualizace.Interval = TimeSpan.FromSeconds(1);
            timer_aktualizace.Tick += timer_aktualizace_tick;
            timer_aktualizace.Start();

            DispatcherTimer timer2_aktualizace = new DispatcherTimer();
            timer2_aktualizace.Interval = TimeSpan.FromMilliseconds(1);
            timer2_aktualizace.Tick += timer2_aktualizace_tick;
            timer2_aktualizace.Start();

            data.tep_pozice_historie = 0;
            data.cyk_pozice_cyklus = 0;

            Okno_S.ShowDialog();

            if (data.globalni.Komunikace == "USB")
            {
                textBlock_com_conection.Visibility = Visibility.Visible;
                btn_open.Visibility = Visibility.Visible;
                btn_close.Visibility = Visibility.Visible;
                //block_test.Visibility = Visibility.Visible;
            }
            else
            {
                textBlock_com_conection.Visibility = Visibility.Hidden;
                btn_open.Visibility = Visibility.Hidden;
                btn_close.Visibility = Visibility.Hidden;
                block_test.Visibility = Visibility.Hidden;
            }

        }
        private void timer2_aktualizace_tick(object sender, EventArgs e)
        {
            if(aktualizace)
            {
                aktualizace = false;
                

                if (operace2 == "Získání dat" && data_aktual)
                {
                    data_aktual = false;

                    string[] rozdelane = radek.Split('\n', '\r','*');
                    foreach (string s in rozdelane)
                    {
                        if (s.Contains(" "))
                        {

                            string[] data_pomocne = s.Split(' ');

                            float data1 = float.Parse(data_pomocne[0].Replace(".", ","));
                            float data2 = float.Parse(data_pomocne[1].Replace(".", ","));
                            UInt16 data3 = (UInt16)double.Parse(data_pomocne[2]);
                            UInt16 data4 = (UInt16)double.Parse(data_pomocne[3]);
                            UInt16 data5 = (UInt16)double.Parse(data_pomocne[4]);



                            Teplota_read_set.Text = data2.ToString("F1");
                            Teplota_read_measure.Text = data1.ToString("F1");

                            Array.Resize(ref data.tep_nastavena, data.tep_nastavena.Length + 1);
                            data.tep_nastavena[data.tep_pozice_historie] = data2;
                            Array.Resize(ref data.tep_zmerena, data.tep_zmerena.Length + 1);
                            data.tep_zmerena[data.tep_pozice_historie] = data1;
                            data.tep_pozice_historie++;


                            posledni_cyklus.Text = data4.ToString();
                            spusteny_cyklus.Text = data3.ToString();
                            if (data5 == 1)
                                Stav_mereni.Text = "Dokončeno";
                            else if (data5 == 2)
                                Stav_mereni.Text = "Spuštěno";
                            else if (data5 == 3)
                                Stav_mereni.Text = "Spuštěno-cyklus";
                            else if (data5 == 0)
                                Stav_mereni.Text = "-";
                            else
                                Stav_mereni.Text = "NEDEFINOVANY";

                        }
                    }
                }
                else if (operace2 == "Nastavení teploty")
                {
                    string[] rozdelane2 = radek.Split('\n', '\r');
                    foreach (string s in rozdelane2)
                    {
                        if (s.Contains("Napsal si teplotu "))
                        {
                            Stav.Text = "Prikaz Prijat";
                        }
                    }


                }
                else if (operace2 == "Přidání teploty do cyklu")
                {
                    string[] rozdelane3 = radek.Split('\n', '\r');
                    foreach (string s in rozdelane3)
                    {
                        if (s.Contains("Napsal si teplotu "))
                        {
                            Stav.Text = "Prikaz Prijat";
                        }
                        else if(s.Contains("Pocet cyklu: "))
                        {
                            posledni_cyklus.Text = s.Remove(0, 13);
                        }
                    }
                }
                else if (operace2 == "Spustit měření")
                {
                    string[] rozdelane4 = radek.Split('\n', '\r');
                    foreach (string s in rozdelane4)
                    {
                        if (s.Contains("Spusteno"))
                        {
                            Stav.Text = "Spusteno";
                        }
                    }
                }
                else if (operace2 == "Spustit měřící cyklus")
                {
                    string[] rozdelane5 = radek.Split('\n', '\r');
                    foreach (string s in rozdelane5)
                    {
                        if (s.Contains("Spusteno"))
                        {
                            Stav.Text = "Spusteno";
                        }
                    }
                }
                else if (operace2 == "Zastav měření")
                {
                    string[] rozdelane6 = radek.Split('\n', '\r');
                    foreach (string s in rozdelane6)
                    {
                        if (s.Contains("zastaveno"))
                        {
                            Stav.Text = "Zastaveno";
                        }
                    }
                }
                else if (operace2 == "Reset")
                {
                    string[] rozdelane7 = radek.Split('\n', '\r');
                    foreach (string s in rozdelane7)
                    {
                        if (s.Contains("resetovano"))
                        {
                            Stav.Text = "Resetovano";
                        }
                    }
                }
            }

            switch (comboBox.Text)
            {
                case "Získání dat":
                    {
                        Teplota_slider.Visibility = Visibility.Hidden;
                        Teplota_set.Visibility = Visibility.Hidden;
                        slider_cas.Visibility = Visibility.Hidden;
                        Cas.Visibility = Visibility.Hidden;
                        Minuty.Visibility = Visibility.Hidden;
                        stupne.Visibility = Visibility.Hidden;
                        break;
                    }
                case "Nastavení teploty":
                    {
                        Teplota_slider.Visibility = Visibility.Visible;
                        Teplota_set.Visibility = Visibility.Visible;
                        slider_cas.Visibility = Visibility.Hidden;
                        Cas.Visibility = Visibility.Hidden;
                        Minuty.Visibility = Visibility.Hidden;
                        stupne.Visibility = Visibility.Visible;
                        break;
                    }
                case "Přidání teploty do cyklu":
                    {
                        Teplota_slider.Visibility = Visibility.Visible;
                        Teplota_set.Visibility = Visibility.Visible;
                        slider_cas.Visibility = Visibility.Visible;
                        Cas.Visibility = Visibility.Visible;
                        Minuty.Visibility = Visibility.Visible;
                        stupne.Visibility = Visibility.Visible;
                        break;
                    }
                case "Spustit měření":
                    {
                        Teplota_slider.Visibility = Visibility.Hidden;
                        Teplota_set.Visibility = Visibility.Hidden;
                        slider_cas.Visibility = Visibility.Hidden;
                        Cas.Visibility = Visibility.Hidden;
                        Minuty.Visibility = Visibility.Hidden;
                        stupne.Visibility = Visibility.Hidden;
                        break;
                    }
                case "Spustit měřící cyklus":
                    {
                        Teplota_slider.Visibility = Visibility.Hidden;
                        Teplota_set.Visibility = Visibility.Hidden;
                        slider_cas.Visibility = Visibility.Hidden;
                        Cas.Visibility = Visibility.Hidden;
                        Minuty.Visibility = Visibility.Hidden;
                        stupne.Visibility = Visibility.Hidden;
                        break;
                    }
                case "Zastav měření":
                    {
                        Teplota_slider.Visibility = Visibility.Hidden;
                        Teplota_set.Visibility = Visibility.Hidden;
                        slider_cas.Visibility = Visibility.Hidden;
                        Cas.Visibility = Visibility.Hidden;
                        Minuty.Visibility = Visibility.Hidden;
                        stupne.Visibility = Visibility.Hidden;
                        break;
                    }
                case "Reset":
                    {
                        Teplota_slider.Visibility = Visibility.Hidden;
                        Teplota_set.Visibility = Visibility.Hidden;
                        slider_cas.Visibility = Visibility.Hidden;
                        Cas.Visibility = Visibility.Hidden;
                        Minuty.Visibility = Visibility.Hidden;
                        stupne.Visibility = Visibility.Hidden;
                        break;
                    }
            }
        }


        private void timer_aktualizace_tick(object sender, EventArgs e)
        {
            if (checkBox.IsChecked.Value)
            {
                if (data.globalni.Komunikace== "Ethernet")
                {
                    UdpClient udpClient = new UdpClient(Int32.Parse(data.globalni.UDP_Port));

                        udpClient.Connect(data.globalni.IP_adresa, Int32.Parse(data.globalni.UDP_Port));
                        kposlani.typ = protokol_prikaz.rekni_data;
                        byte[] sendBytes = Serialize(kposlani);
                        udpClient.Send(sendBytes, sendBytes.Length);


                        IPEndPoint RemoteIpEndPoint = new IPEndPoint(IPAddress.Any, 0);
                        byte[] datax = udpClient.Receive(ref RemoteIpEndPoint);
                        Odesilane_data_protokol odpoved = Deserialize<Odesilane_data_protokol>(datax);

                        udpClient.Close();

                        if (odpoved.typ == protokol_prikaz_answer.posli_data)
                        {
                            Teplota_read_set.Text = odpoved.temp.set_temp.ToString("F1");
                            Teplota_read_measure.Text = odpoved.temp.actual_temp.ToString("F1");
                            Array.Resize(ref data.tep_nastavena, data.tep_nastavena.Length + 1);
                            data.tep_nastavena[data.tep_pozice_historie] = odpoved.temp.set_temp;
                            Array.Resize(ref data.tep_zmerena, data.tep_zmerena.Length + 1);
                            data.tep_zmerena[data.tep_pozice_historie] = odpoved.temp.actual_temp;
                            data.tep_pozice_historie++;
                            posledni_cyklus.Text = odpoved.temp.posledni_cyklus.ToString();
                            spusteny_cyklus.Text = odpoved.temp.aktualni_cyklus.ToString();
                            if ((odpoved.temp.informace & 0x01) != 0)
                                Stav_mereni.Text = "Dokončeno";
                            else if ((odpoved.temp.informace & 0x02) != 0)
                                Stav_mereni.Text = "Spuštěno";
                            else if ((odpoved.temp.informace & 0x04) != 0)
                                Stav_mereni.Text = "Spuštěno-cyklus";
                            else if (odpoved.temp.informace == 0)
                                Stav_mereni.Text = "-";
                            else
                                Stav_mereni.Text = "NEDEFINOVANY";
                            Stav.Text = "Data prijaty";
                        }                  
                        else
                        {
                            Stav.Text = "chyba";
                        }
 
                }
                else if (data.globalni.Komunikace == "USB")
                {
                    data_to_send = "data_out";
                    operace2 = "Získání dat";

                    try
                    {
                        if (Sp.IsOpen)
                        {

                            // Send the binary data out the port
                            byte[] hexstring = Encoding.ASCII.GetBytes(data_to_send + "\n");
                            foreach (byte hexval in hexstring)
                            {
                                byte[] _hexval = new byte[] { hexval };     // need to convert byte 
                                                                            // to byte[] to write
                                Sp.Write(_hexval, 0, 1);
                                Thread.Sleep(1);
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show("Neposlánon");
                    }
                }
                else
                {
                    Stav.Text = "!!! Nevybrána komunikace !!!";
                }
            }
        }


        public static byte[] Serialize<T>(T s) where T : struct
        {
            var size = Marshal.SizeOf(typeof(T));
            var array = new byte[size];
            var ptr = Marshal.AllocHGlobal(size);
            Marshal.StructureToPtr(s, ptr, true);
            Marshal.Copy(ptr, array, 0, size);
            Marshal.FreeHGlobal(ptr);
            return array;
        }

        public static T Deserialize<T>(byte[] bytes) where T : struct
        {
            GCHandle handle = GCHandle.Alloc(bytes, GCHandleType.Pinned);
            T stuff = (T)Marshal.PtrToStructure(handle.AddrOfPinnedObject(), typeof(T));
            handle.Free();
            return stuff;
        }


        private void btn_setup_Click(object sender, RoutedEventArgs e)
        {
            Setup_okno Okno_S2 = new Setup_okno();
            Okno_S2.ShowDialog();
            if (data.globalni.Komunikace == "USB")
            {
                textBlock_com_conection.Visibility = Visibility.Visible;
                btn_open.Visibility = Visibility.Visible;
                btn_close.Visibility = Visibility.Visible;
                //block_test.Visibility = Visibility.Visible;
            }
            else
            {
                textBlock_com_conection.Visibility = Visibility.Hidden;
                btn_open.Visibility = Visibility.Hidden;
                btn_close.Visibility = Visibility.Hidden;
                block_test.Visibility = Visibility.Hidden;
            }
        }

        

        private void Send_button_Click(object sender, RoutedEventArgs e)
        {
            if (data.globalni.Komunikace == "Ethernet")
            {
                

                if (comboBox.Text == "Získání dat")
                {
                    kposlani.typ = protokol_prikaz.rekni_data;
                }
                else if (comboBox.Text == "Nastavení teploty")
                {
                    kposlani.typ = protokol_prikaz.nastav_teplotu;
                    kposlani.temp.teplota = (float)Teplota_slider.Value;
                }
                else if (comboBox.Text == "Přidání teploty do cyklu")
                {
                    kposlani.typ = protokol_prikaz.nastav_teplotu_cyklu;
                    kposlani.temp.teplota = (float)Teplota_slider.Value;
                    kposlani.temp.doba = (UInt16)slider_cas.Value;
                    Array.Resize(ref data.cyk_teplota, data.cyk_teplota.Length + 1);
                    data.cyk_teplota[data.cyk_pozice_cyklus] = (float)Teplota_slider.Value;
                    Array.Resize(ref data.cyk_doba, data.cyk_doba.Length + 1);
                    data.cyk_doba[data.cyk_pozice_cyklus] = (UInt16)slider_cas.Value;
                    data.cyk_pozice_cyklus++;
                }
                else if (comboBox.Text == "Spustit měření")
                {
                    kposlani.typ = protokol_prikaz.spust_mereni;
                }
                else if (comboBox.Text == "Spustit měřící cyklus")
                {
                    kposlani.typ = protokol_prikaz.spust_cyklus;
                }
                else if (comboBox.Text == "Zastav měření")
                {
                    kposlani.typ = protokol_prikaz.zastav_mereni;
                }
                else if (comboBox.Text == "Reset")
                {
                    kposlani.typ = protokol_prikaz.reset_dat;
                    data.tep_pozice_historie = 0;
                    data.cyk_pozice_cyklus = 0;
                }


                UdpClient udpClient = new UdpClient(Int32.Parse(data.globalni.UDP_Port));

                    udpClient.Connect(data.globalni.IP_adresa, Int32.Parse(data.globalni.UDP_Port));


                    byte[] sendBytes = Serialize(kposlani);
                    udpClient.Send(sendBytes, sendBytes.Length);

                    IPEndPoint RemoteIpEndPoint = new IPEndPoint(IPAddress.Any, 0);



                    byte[] datax = udpClient.Receive(ref RemoteIpEndPoint);

                    Odesilane_data_protokol odpoved = Deserialize<Odesilane_data_protokol>(datax);

                    udpClient.Close();



                    if (odpoved.typ == protokol_prikaz_answer.posli_data)
                    {
                        Teplota_read_set.Text = odpoved.temp.set_temp.ToString("F1");
                        Teplota_read_measure.Text = odpoved.temp.actual_temp.ToString("F1");
                        posledni_cyklus.Text = odpoved.temp.posledni_cyklus.ToString();
                        spusteny_cyklus.Text = odpoved.temp.aktualni_cyklus.ToString();
                        if ((odpoved.temp.informace & 0x01) != 0)
                            Stav_mereni.Text = "Dokončeno";
                        else if ((odpoved.temp.informace & 0x02) != 0)
                            Stav_mereni.Text = "Spuštěno";
                        else if ((odpoved.temp.informace & 0x04) != 0)
                            Stav_mereni.Text = "Spuštěno-cyklus";
                        else if (odpoved.temp.informace == 0)
                            Stav_mereni.Text = "-";
                        else
                            Stav_mereni.Text = "NEDEFINOVaNY";
                        Stav.Text = "Data prijaty";

                    }
                    else if (odpoved.typ == protokol_prikaz_answer.prikaz_prijat)
                    {
                        Stav.Text = "Prikaz prijat";
                        if (odpoved.temp.posledni_cyklus != 0)
                            posledni_cyklus.Text = odpoved.temp.posledni_cyklus.ToString();

                    }
                    else if (odpoved.typ == protokol_prikaz_answer.prikaz_chyba)
                    {
                        Stav.Text = "Prikaz neprijat";
                    }
                    else
                    {
                        Stav.Text = "chyba";
                    }
            
            }
            else if (data.globalni.Komunikace == "USB")
            {
                
                operace2 = comboBox.Text;

                if (operace2 == "Získání dat")
                {
                    data_to_send = "data_out";
                }
                else if (operace2 == "Nastavení teploty")
                {
                    data_to_send = "set_temp ";
                    string teplota_nastavit = Teplota_slider.Value.ToString("F1");
                    data_to_send += teplota_nastavit.Replace(",", ".");
                    
                }
                else if (operace2 == "Přidání teploty do cyklu")
                {
                    data_to_send = "set_temp_cyklus ";
                    string teplota_nastavit = Teplota_slider.Value.ToString("F1");
                    data_to_send += teplota_nastavit.Replace(",", ".");
                    data_to_send += " ";
                    string cas_nastavit = slider_cas.Value.ToString("F0");
                    data_to_send += cas_nastavit;
                    Array.Resize(ref data.cyk_teplota, data.cyk_teplota.Length + 1);
                    data.cyk_teplota[data.cyk_pozice_cyklus] = (float)Teplota_slider.Value;
                    Array.Resize(ref data.cyk_doba, data.cyk_doba.Length + 1);
                    data.cyk_doba[data.cyk_pozice_cyklus] = (UInt16)slider_cas.Value;
                    data.cyk_pozice_cyklus++;

                }
                else if (operace2 == "Spustit měření")
                {
                    data_to_send = "start";
                }
                else if (operace2 == "Spustit měřící cyklus")
                {
                    data_to_send = "start_cyklus";
                }
                else if (operace2 == "Zastav měření")
                {
                    data_to_send = "stop";
                }
                else if (operace2 == "Reset")
                {
                    data_to_send = "reset_karta";
                }


                try
                {
                    if (Sp.IsOpen)
                    {
                        
                        // Send the binary data out the port
                        byte[] hexstring = Encoding.ASCII.GetBytes(data_to_send + "\n");
                        foreach (byte hexval in hexstring)
                        {
                            byte[] _hexval = new byte[] { hexval };     // need to convert byte 
                                                                        // to byte[] to write
                            Sp.Write(_hexval, 0, 1);
                            Thread.Sleep(1);
                        }
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Neposlánon");
                }

               

                //string[] rozdelane = prijate_radek.Split('\n','\r');
                //foreach(string s in rozdelane)
                //{
                //    if (s.Contains(" "))
                //    {
                       
                        
                //        //double[] floatData = Array.ConvertAll(s.Split(' '), double.Parse);
                //        string[] data_pomocne = s.Split(' ');
                       
                //        double data1 = double.Parse(data_pomocne[0].Replace(".", ","));
                //        double data2 = double.Parse(data_pomocne[1].Replace(".", ","));
                //        double data3 = double.Parse(data_pomocne[2]);
                //        double data4 = double.Parse(data_pomocne[3]);
                //        double data5 = double.Parse(data_pomocne[4]);




                //        //float float1 = (float)floatData[0];
                //        //float float2 = (float)floatData[1];
                //        //UInt16 float3 = (UInt16)floatData[2];
                //        //UInt16 float4 = (UInt16)floatData[3];
                //        //UInt16 float5 = (UInt16)floatData[4];

                //        Teplota_read_set.Text = data2.ToString("F1");
                //        Teplota_read_measure.Text = data1.ToString("F1");
                //        //posledni_cyklus.Text = float4.ToString();
                //        //spusteny_cyklus.Text = float3.ToString();
                //        //if (float5 == 1)
                //        //    Stav_mereni.Text = "Dokončeno";
                //        //else if (float5 == 2)
                //        //    Stav_mereni.Text = "Spuštěno";
                //        //else if (float5 == 3)
                //        //    Stav_mereni.Text = "Spuštěno-cyklus";
                //        //else if (float5 == 0)
                //        //    Stav_mereni.Text = "-";
                //        //else
                //        //    Stav_mereni.Text = "NEDEFINOVANY";

                //    }
                //}
                //prijate_radek = null;

            }
            else
            {
                Stav.Text = "!!! Nevybrána komunikace !!!";
            }

        }

        private void checkBox_Checked(object sender, RoutedEventArgs e)
        {
            data.tep_pozice_historie = 0;
        }

        private void checkBox_unchecked(object sender, RoutedEventArgs e)
        {
            Export Okno_export = new Export();
            Okno_export.Show();
        }

        

        private void btn_open_Click(object sender, RoutedEventArgs e)
        {
            btn_open.IsEnabled = false;
            btn_close.IsEnabled = true;
            try
            {
                Sp = new SerialPort();
                Sp.PortName = data.globalni.Serial_port;
                Sp.BaudRate = Int32.Parse(data.globalni.Baudrate);
                Sp.Handshake = Handshake.None;
                Sp.Parity = Parity.None;
                Sp.DataBits = 8;
                Sp.StopBits = StopBits.One;
                Sp.ReadTimeout = 200;
                Sp.WriteTimeout = 50;
                Sp.Open();
                Sp.DataReceived += new SerialDataReceivedEventHandler(Recieve);
                if (Sp.IsOpen)
                {
                    // Send the binary data out the port
                    byte[] hexstring = Encoding.ASCII.GetBytes("\n");
                    foreach (byte hexval in hexstring)
                    {
                        byte[] _hexval = new byte[] { hexval };     // need to convert byte 
                                                                    // to byte[] to write
                        Sp.Write(_hexval, 0, 1);
                        Thread.Sleep(1);
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Port neotevřen");
                btn_open.IsEnabled = true;
                btn_close.IsEnabled = false;
            }
        }

        private void btn_close_Click(object sender, RoutedEventArgs e)
        {
            btn_open.IsEnabled = true;
            btn_close.IsEnabled = false;
            try
            {
                Sp.Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show("Port neuzavřen");
                btn_open.IsEnabled = false;
                btn_close.IsEnabled = true;
            }
        }




        private delegate void UpdateUiTextDelegate(string text);
        private void Recieve(object sender, SerialDataReceivedEventArgs e)
        {
            // Collecting the characters received to our 'buffer' (string).



            recieved_data = Sp.ReadExisting();
            prijate_radek += recieved_data;
            if (prijate_radek.Contains("success"))
            {
                prijate_radek = "x";
            }
            if (prijate_radek.Contains("@"))
            {
                aktualizace = true;
                data_aktual = true;
                radek = prijate_radek;
                prijate_radek = null;
            }
            else if (prijate_radek.Contains("*"))
            {
                aktualizace = true;
                radek = prijate_radek;
                prijate_radek = null;
            }
            Dispatcher.Invoke(DispatcherPriority.Send, new UpdateUiTextDelegate(WriteData), recieved_data);

        }

        private void WriteData(string text)
        {
            // Assign the value of the plot to the RichTextBox.
            para.Inlines.Add(text);
            mcFlowDoc.Blocks.Add(para);
            block_test.Document = mcFlowDoc;


        }

        private void btn_graf_Click(object sender, RoutedEventArgs e)
        {
            Graf okno_graf = new Graf();
            okno_graf.Show();
        }
    }
}
