package com.Agilent_34410A_Temp;


import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.view.Window;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TabHost;
import android.widget.TextView;
import android.widget.RadioButton;
import android.widget.RadioGroup;

import com.Agilent_34410A_Temp.R;
import com.agilent.android.io.AAIoException;
import com.agilent.android.io.IO;

public class Agilent_34410A_Temp extends Activity {
	private Button btnPripoj ;
	private Button btnZmer;
	private TextView txtInfo;
	private TextView txtVysledek;
	private IO pripojeni = null;
	private EditText etxtIP ;
	boolean not34410A = false;
	
	private String ipAddresa ="";
	private String jednotka ="";
	private String termistor ="";
	private String odpor ="";
	private String nast_cidla ="";
	
	private TabHost MyTabHost;
	private TabHost.TabSpec MyTabSpec;
	
	private RadioGroup radio_jednotkaGroup;
	private RadioButton radio_jednotkaButton;

	
    /** Called when the activity is first created. */
	
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
        setContentView(R.layout.main);
        
        /** nastaveni zalozek **/
		MyTabHost = (TabHost) findViewById(R.id.tabhost);
		MyTabHost.setup();
		
		MyTabSpec = MyTabHost.newTabSpec("tag1");
		MyTabSpec.setContent(R.id.zalozka1);
		MyTabSpec.setIndicator("Měření");
		MyTabHost.addTab(MyTabSpec);
		
		MyTabSpec = MyTabHost.newTabSpec("tag2");
		MyTabSpec.setContent(R.id.zalozka2);
		MyTabSpec.setIndicator("Nastavení");
		MyTabHost.addTab(MyTabSpec);
		/** konec nastaveni zalozek**/	
        
		/** defaultni nastaveni radio buttons **/
		RadioButton ter2v = (RadioButton) findViewById(R.id.termistor_2v);
		RadioButton Odpor_5k = (RadioButton) findViewById(R.id.odpor_5k);
		RadioButton CEL = (RadioButton) findViewById(R.id.Cel);
		
		ter2v.setChecked(true);
		Odpor_5k.setChecked(true);
		CEL.setChecked(true);
		/** konec defaultni nastaveni radio buttons **/	
		
        
        etxtIP = (EditText)findViewById(R.id.etxtIP);												/**Nacte hodnotu z textového prvku s id: etxtIP do etxtIP*/     
        txtVysledek = (TextView)findViewById(R.id.txtVysledek);
        txtInfo = (TextView)findViewById(R.id.txtInfo);												/**Nacte hodnotu z prvku s id: txtInfo*/
        txtInfo.setVisibility(0);
        btnZmer = (Button) findViewById(R.id.btnZmer);
        btnZmer.setEnabled(false);
		btnPripoj = (Button) findViewById(R.id.btnPripoj);
		btnPripoj.setOnClickListener(new View.OnClickListener()
		
		{
			@Override
			public void onClick(View v) 
			{
				ipAddresa = etxtIP.getText().toString();												/**Nacteni ip adresy z text pole */
				txtInfo.setText("");
				txtInfo.setTextColor(Color.RED);
				if(ipAddresa.equals(""))
				{
					txtInfo.setText("Prosím, zadejte IP adresu přístroje\nAgilent 34410A.");
					txtInfo.setVisibility(1);
					
				}
				else
				{
					if(Connect())
					{
						btnPripoj.setEnabled(false);													/**Znepristupni tlacitko connect pro klik */
						btnZmer.setEnabled(true);														/**Zpristupni tlacitko mereni pro klik.*/
						txtInfo.setText("Přístroj byl připojen.");					/**pokud na dane IP neni 34410A */
						txtInfo.setVisibility(1);
					}
					else
					{
						if(not34410A){
							txtInfo.setText("Zadaná adresa neodpovídá přístroji Agilent 34410A.");					/**pokud na dane IP neni 34410A */
							txtInfo.setVisibility(1);
							
						}
						else
							txtInfo.setText("Nelze se připojit k přístroji.");							/**Pokud se nelze pripojit na danou IP*/
							txtInfo.setVisibility(1);													/** Nastavi text na viditelny*/
					}
				}
			}
        });
		
		
		
		btnZmer.setOnClickListener(new View.OnClickListener() 
		{
			@Override
			public void onClick(View v) 
			{
				
				/** nacteni nastaveni **/
				
				/** nastaveni termistoru **/
				RadioButton ter2v = (RadioButton) findViewById(R.id.termistor_2v);
				RadioButton ter4v = (RadioButton) findViewById(R.id.termistor_4v);
				
				if(ter2v.isChecked()) termistor = "THER";
				else if(ter4v.isChecked()) termistor = "FTH";
				
				/** nastaveni odporu **/
				RadioButton Odpor_2k2 = (RadioButton) findViewById(R.id.odpor_2k2);
				RadioButton Odpor_5k = (RadioButton) findViewById(R.id.odpor_5k);
				RadioButton Odpor_10k = (RadioButton) findViewById(R.id.odpor_10k);
				
				if(Odpor_2k2.isChecked()) odpor = "2252";
				else if(Odpor_5k.isChecked()) odpor = "5000";
				else if(Odpor_10k.isChecked()) odpor = "10000";
				
				/** spojeni nastaveni retezce, termistoru a odporu do jednoho retezce **/
				nast_cidla = "CONF:TEMP " + termistor + "," + odpor + "\n";
				
				/** nastaveni teploty **/
				RadioButton CEL = (RadioButton) findViewById(R.id.Cel);
				RadioButton FAR = (RadioButton) findViewById(R.id.Far);
				RadioButton KEL = (RadioButton) findViewById(R.id.Kel);
				
				if(CEL.isChecked()) jednotka = "UNIT:TEMP C\n";
				else if(FAR.isChecked()) jednotka = "UNIT:TEMP F\n";
				else if(KEL.isChecked()) jednotka = "UNIT:TEMP K\n";
				
				/** vyhledani oznaceneho tlacitka a vlozeni jeho hodnoty do retezce s vysledkem mereni**/
				radio_jednotkaGroup = (RadioGroup) findViewById(R.id.radio_jednotka);
				int selectedId = radio_jednotkaGroup.getCheckedRadioButtonId();
				radio_jednotkaButton = (RadioButton) findViewById(selectedId);
				
				/** konec nacteni nastaveni **/
		      
				String hodnota = ConfigureAndFetch34972A().toString();									/**Nacteni hodnoty z ConfAndFetch**/
				float a = Float.valueOf(hodnota);														/**Prevedeni retezce na hodnotu **/
				txtInfo.setText("");
				txtVysledek.setText("Výsledek: " + String.valueOf(a) + " " + radio_jednotkaButton.getText());							/**Odeslani hodnoty do textoveho pole**/
				txtVysledek.setTextColor(Color.GREEN);													/**Nastavení textoveho pole vysledku na zelenou**/
				
		    
			}
        });
		
    }
    
	private boolean Connect()
	{
		StringBuffer response;	
		try 
		{
			pripojeni = new IO();
			pripojeni.openWithAddress(ipAddresa, 5025);
			pripojeni.queryDeviceClearPort("");
			pripojeni.deviceClear();
			pripojeni.print("*IDN?");																/**  *IDN zjistuje informace o pristroji - vyrobce, typ,SN, firmware atd..*/
			response = new StringBuffer();															/** nastaveni promenne pro *IDN */
			pripojeni.scan(response);																/** nacteni odpovedi pro *IDN */
			if(response.toString().lastIndexOf("34410A") == -1)
			{
				not34410A = true;
				return false;
			}
		}
		catch (AAIoException ex)
		{
			return false;
		}
		catch (Exception ex)
		{
			return false;
		}
		finally 
		{ 
			if (pripojeni != null)
				pripojeni.close();
		}
		
		return true;
	}
	private String ConfigureAndFetch34972A()
	{
		StringBuffer data = new StringBuffer();
		try
		{
			pripojeni.scanTimeout = 2500000;
			pripojeni.openWithAddress(ipAddresa, 5025);
			pripojeni.queryDeviceClearPort("");
			pripojeni.deviceClear();	
			pripojeni.print(nast_cidla);
			pripojeni.print(jednotka);		
			pripojeni.print("INIT\n");
			pripojeni.query("FETCH?\n",data);
			
		}
		catch(AAIoException ex)
		{
			return data.toString();
		}
		catch (Exception ex)
		{
			return data.toString();
		}
		finally 
		{ 
			if (pripojeni != null)
				pripojeni.close();
		}
		
		return data.toString();
	}
		
}