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



namespace pokus01
{
    public partial class Form2 : Form
    {
        SerialPort sp = new SerialPort();       //vytvořena instance sériový port
        List<byte> bBuffer = new List<byte>();  //buffer typu byte pro příjem dat
        byte LowHigh=1;
        public Form2()
        {
            InitializeComponent();
            List<String> tList = new List<String>();            //seznam pro aktivní COM porty
            foreach (string s in SerialPort.GetPortNames())     //získá aktivní COM porty
            {
                tList.Add(s);                                   //a přidá je do seznamu
            }
            tList.Sort();                                       //uspořádá seznam
            comboBoxPort.Items.Clear();                         //
            comboBoxPort.Items.AddRange(tList.ToArray());       //a předá jej do vysouvací nabídky
            comboBoxPort.SelectedIndex = comboBoxPort.Items.Count - 1;//na začátku je vybrán port s nejvyšším číslem

            sp.PortName = comboBoxPort.SelectedItem.ToString();
            sp.BaudRate = 9600;                                 //následuje nastavení pro komunikaci po portu
            sp.Parity = Parity.None;
            sp.DataBits = 8;
            sp.StopBits = StopBits.One;
            sp.ReadTimeout = 500;
            sp.DtrEnable = true;
            sp.DataReceived += new SerialDataReceivedEventHandler(port_DataReceived);//metoda pro příjem dat
        }

        private void Form2_Load(object sender, EventArgs e)
        {

        }

        private void port_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            while (sp.BytesToRead > 0 & sp.IsOpen)
                bBuffer.Add((byte)sp.ReadByte());
        }

        private void comboBoxPort_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (sp.IsOpen) sp.Close();
            sp.PortName = comboBoxPort.SelectedItem.ToString();
        }

        private void radioButtonLow_CheckedChanged(object sender, EventArgs e)
        {
            if (radioButtonLow.Checked)
                LowHigh = 0;
            else
                LowHigh = 1;
        }

        private void buttonTemp_Click(object sender, EventArgs e)
        {
            if (comboBoxID.SelectedIndex > -1)
            {
                try
                {
                    if (!sp.IsOpen) sp.Open();
                    byte deg1 = (byte)numericUpDownTemp.Value;                              // cele stupne
                    byte deg2 = (byte)((numericUpDownTemp.Value - deg1) * 100);             // setiny stupnu
                    byte ID = (byte)(comboBoxID.SelectedIndex + 1);                         // ID kalibrovaneho modulu
                    sp.Write(new byte[] { 9, ID, 0xfe, 0x82, 01, LowHigh, deg1, deg2, 0 }, 0, 9);   // kalibracni zprava do modulu
                }
                catch (System.Exception ex)
                {
                    MessageBox.Show("Chyba komunikace na sériovém portu! " + ex.Message);
                }
            }
            else
                MessageBox.Show("Nutno vybrat ID modulu!");
        }

        private void buttonHum_Click(object sender, EventArgs e)
        {
            if (comboBoxID.SelectedIndex > -1)
            {
                try
                {
                    if (!sp.IsOpen) sp.Open();
                    byte hum1 = (byte) numericUpDownHum.Value;                             // jednotky
                    byte hum2 = (byte)((numericUpDownHum.Value - hum1) * 100);             // setiny
                    byte ID = (byte) (comboBoxID.SelectedIndex + 1);                       // ID kalibrovaneho modulu
                    sp.Write(new byte[] { 9, ID, 0xfe, 0x82, 02, LowHigh, hum1, hum2, 0 }, 0, 9);   // kalibracni zprava do modulu
                }
                catch (System.Exception ex)
                {
                    MessageBox.Show("Chyba komunikace na sériovém portu! " + ex.Message);
                }
            }
            else
                MessageBox.Show("Nutno vybrat ID modulu!");
        }

        private void buttonCO2_Click(object sender, EventArgs e)
        {
            if (comboBoxID.SelectedIndex > -1)
            {
                try
                {
                    if (!sp.IsOpen) sp.Open();
                    byte c1 = (byte)((ushort)numericUpDownCO2.Value >> 8);          // vyssi byte
                    byte c2 = (byte)(ushort)numericUpDownCO2.Value;                 // nizsi byte
                    byte ID = (byte)(comboBoxID.SelectedIndex + 1);                 // ID kalibrovaneho modulu
                    sp.Write(new byte[] { 9, ID, 0xfe, 0x82, 03, LowHigh, c1, c2, 0 }, 0, 9);   // kalibracni zprava do modulu
                }
                catch (System.Exception ex)
                {
                    MessageBox.Show("Chyba komunikace na sériovém portu! " + ex.Message);
                }
            }
            else
                MessageBox.Show("Nutno vybrat ID modulu!");
        }

        private void Form2_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (sp.IsOpen) sp.Close();
        }


    }
}
