/*    
##NÁZEV: Program zařízení MASTER pro BBCE (Řízení kotle)
*/
#include "rfm.h"
#define wait_transfer 76	// doba mezi dotazem - cca (n*66ms) {76->5s, 150->10s}

char int0,teplota=255,rel0=0,rel1=0,warning=0,par_set=0,ID1[2]={111,55},ID2[2]={222,66};



//------------- hlavní funkce main -----------------------

int main(void){

char err1=0,err2=0,minute=0,tep01=0,par,press=1,txt[10];
int i;


	
	_delay_ms(1000);
	UCSRB|=(1<<RXCIE)|(1<<RXEN)|(1<<TXEN);				//nastavení UART: Rx přerušení, Rx en, Tx en,
	UCSRC|=(1<<UCSZ0)|(1<<UCSZ1)|(1<<URSEL)|(1<<UPM1);	// 8b, sudá(E) parita, jeden stopbit
	UBRRL = 12;											// nastavení rychlosti přenosu (4800->12)
	TCCR0 = 0b00000100;									// TimeCounter0 8b
	TCCR1B = 0b00000011;								//TimeCounter1 16b
	TIMSK |= (1<<TOIE0);//|(1<<TOIE1);					// povolení přerušení timerů
	
	spi_init();					// ini MCU
	rf_init();					//inicializace modulu
	rf_receiver(); 				//modul do režimu ?
	rf_fifo_reset(); 
	lcd_init();
	lcd_gotoxy(0,0);
	lcd_puts("ini ok");
	_delay_ms(500);
	sei();
	
	lcd_clrscr();
	lcd_gotoxy(0,0);
	

	


// ------ CYKLUS _------------------
while(1){ 


	if(int0>wait_transfer){
		readtime();
		if(par_set>0){
				par_set=0;
				if(parameters_out(ID1)>0)
					if(parameters_out(ID1)>0){
						err1++;	
						par_set=1;
						}
				if(parameters_out(ID2)>0)
					if(parameters_out(ID2)>0){
						err2++;
						par_set=1;
						}
			}
	//--pro Slave2 --				
		for(i=0;i<2;i++){							//pokud je na slave změna teploty... ..par=1							
			par=0;									// pokud je na slave změna parametrů...par=2
			if((par=datapaket(ID2,'p',0))<4){		//pokud není změna na slave............par=0
				err2=0;								//pokud byl nastavován slave a v důsledku toho vyznikly chyby,
				i=10;								// pak se par=3, dále se pak provedou úkony par=1,2
													//pokud naskočí nová minuta, nebo par==1, 
			  if((par>0)|(minute!=minuty())){		// pak se pošle čas a vyčte se teplota
													// pokud par==2, vyčtou se ze slave 
				if((base(ID2))>0)						// navíc i parametry
					if((base(ID2))>0)					//v ostatních případech err=1... Error
						err2++;
				if(par==2){
					par_set=1;
					if(parameters_in(ID2)>0)
					 if(parameters_in(ID2)>0)
					  err2++;
						}
					  }
					}
			else
				err2++;
		}
		if((datapaket(ID2,'K',0))==255)		//konec 'K'oznámení pro slave 2
			err2++;
	//--- pro Slave 1---
		for(i=0;i<2;i++){							
			par=0;									
			if((par=datapaket(ID1,'p',0))<4){
				err1=0;											
				i=10;																					
			  if((par>0)|(minute!=minuty())|(tep01!=teplota)){		
				minute=minuty();
				tep01=teplota;					
				if((base(ID1))>0)					
					if((base(ID1))>0)				
						err1++;
				if(par==2){
					par_set=1;
					if(parameters_in(ID1)>0)
					 if(parameters_in(ID1)>0)
					  err1++;
						}
					  }
					}
			else
				err1++;
		}
		if((datapaket(ID1,'k',0))==255)		//konec 'K'oznámení pro slave1 že zpráva končí (bude pomlka)
			err1++;

		compare();							// porovnání, provedení

		if((err2>=40)&(err2<60)){				// zjištění, zda Slave vypadl nebo ne (případný zápis)
			EEPROM_write_new(6);
			par_set=0;
			err2=70;
			}
		if((err1>=40)&(err1<60)){				// zjištění, zda Slave vypadl nebo ne (případný zápis)
			EEPROM_write_new(6);
			par_set=0;
			err1=70;
			}
		disp_view();							// vykreslení obrazovky v pohotovosti
		
		if((err2>70)|(err1>70)){				// v případě výpadku Slave se vypíše na LCD "E"
			err1=err2=70;
			lcd_gotoxy(14,0);
			lcd_puts("E!");
				}
		if(press!=0)							//zhasnutí disp po nějaké době
			press++;
		if(press>6){							// zhas disp po n cyklech 
			press=0;
			LIGHT_OFF}
		int0=0;
	}
//--------- tlačítka ----------------
//------------------------------------
if(bit_is_clear(PINTL,TLL)){
	if(press==0){
		press=1;
		LIGHT_ON 
		_delay_ms(30);
		while(bit_is_clear(PINTL,TLL))		// zákmity tl.
		_delay_ms(30);
	}
	else{
		lcd_clrscr();
		lcd_gotoxy(0,0);
		lcd_puts("Rele 0: Automat");
		rel0=1;
		lcd_gotoxy(0,1);
		lcd_puts("Rele 1: Automat");
		rel1=1;
		for(i=0;i<1000;i++){
			_delay_ms(10);
			if(bit_is_clear(PINTL,TLP))
				i=1000;
			if(bit_is_clear(PINTL,TLH)){
				i=0;
				lcd_gotoxy(8,0);			  	
			 switch (rel0){						
				case 1:{rel0=4;
						lcd_puts("Vypnuto");
							break;}
				case 4:{rel0=5;
						lcd_puts("Zapnuto");
							break;}
				case 5:{rel0=1;
						lcd_puts("Automat");
							break;}
						}
				_delay_ms(300);
			  }
			if(bit_is_clear(PINTL,TLD)){
			  lcd_gotoxy(8,1);
			 switch (rel1){						
				case 1:{rel1=5;
						lcd_puts("Zapnuto");
							break;}
				case 4:{rel1=1;
						lcd_puts("Automat");
							break;}
				case 5:{rel1=4;
						lcd_puts("Vypnuto");
							break;}
						}
					_delay_ms(300);
			  }
		}
		if(rel0==1)
			EEPROM_write_new(1);
		if(rel1==1)
			EEPROM_write_new(3);
		while(bit_is_clear(PINTL,TLP))
			_delay_ms(10);
		disp_view();
		par_set=1;
		press=1;
	 }
	if(warning==1){
	 warning=2;
	 par_set=1;}
	}	
//----horní+dolní---
if(bit_is_clear(PINTL,TLD)){
 if(press==0){
	press=1;
	LIGHT_ON 
	_delay_ms(30);
	while(bit_is_clear(PINTL,TLD))		// zákmity tl.
	_delay_ms(30); }
 else{
  if(bit_is_clear(PINTL,TLH)){
	lcd_clrscr();	
	lcd_gotoxy(0,0);
	lcd_puts("Sepnout:    Tep:");
	lcd_gotoxy(0,1);
	lcd_puts("Rele 0");
	par=EEPROM_read(0);
	lcd_gotoxy(10,1);
	sprintf(txt,"%d%cC ",par,178);
	lcd_puts(txt);
	while(bit_is_clear(PINTL,TLH))
		_delay_ms(10);
	while(bit_is_clear(PINTL,TLD))
		_delay_ms(10);
   for(i=0;i<1000;i++){
   	if(bit_is_clear(PINTL,TLP))
		i=1000;
	_delay_ms(10);
	if(bit_is_clear(PINTL,TLH)){
		i=0;
		par++;
		lcd_gotoxy(10,1);
		sprintf(txt,"%d%cC ",par,178);
		lcd_puts(txt);
		_delay_ms(100);
		}
	if(bit_is_clear(PINTL,TLD)){
		i=0;
		par--;
		lcd_gotoxy(10,1);
		sprintf(txt,"%d%cC ",par,178);
		lcd_puts(txt);
		_delay_ms(100);
		}
	  }//for
	EEPROM_write(0,par);
    while(bit_is_clear(PINTL,TLP))
		_delay_ms(10);
//-- rel1
	lcd_gotoxy(0,1);
	lcd_puts("Rele 1");
	par=EEPROM_read(1);
	lcd_gotoxy(10,1);
	sprintf(txt,"%d%cC ",par,178);
	lcd_puts(txt);
	while(bit_is_clear(PINTL,TLH))
		_delay_ms(10);
   for(i=0;i<1000;i++){
   	if(bit_is_clear(PINTL,TLP))
		i=1000;
	_delay_ms(10);
	if(bit_is_clear(PINTL,TLH)){
		i=0;
		par++;
		lcd_gotoxy(10,1);
		sprintf(txt,"%d%cC ",par,178);
		lcd_puts(txt);
		_delay_ms(100);
		}
	if(bit_is_clear(PINTL,TLD)){
		i=0;
		par--;
		lcd_gotoxy(10,1);
		sprintf(txt,"%d%cC ",par,178);
		lcd_puts(txt);
		_delay_ms(100);
		}
	  }//for
	EEPROM_write(1,par);
    while(bit_is_clear(PINTL,TLP))
		_delay_ms(10);
//-- warning
	lcd_gotoxy(0,1);
	lcd_puts("Varovat");
	par=EEPROM_read(2);
	lcd_gotoxy(10,1);
	sprintf(txt,"%d%cC ",par,178);
	lcd_puts(txt);
	while(bit_is_clear(PINTL,TLH))
		_delay_ms(10);
   for(i=0;i<1000;i++){
   	if(bit_is_clear(PINTL,TLP))
		i=1000;
	_delay_ms(10);
	if(bit_is_clear(PINTL,TLH)){
		i=0;
		par++;
		lcd_gotoxy(10,1);
		sprintf(txt,"%d%cC ",par,178);
		lcd_puts(txt);
		_delay_ms(100);
		}
	if(bit_is_clear(PINTL,TLD)){
		i=0;
		par--;
		lcd_gotoxy(10,1);
		sprintf(txt,"%d%cC ",par,178);
		lcd_puts(txt);
		_delay_ms(100);
		}
	  }//for
	EEPROM_write(2,par);
    while(bit_is_clear(PINTL,TLP))
		_delay_ms(10);
    disp_view();
	press=1;
	}
	if(warning==1){
	 warning=2;
	 par_set=1;}
  }			
//---pravé + dolní----
if(bit_is_clear(PINTL,TLD)){
 if(bit_is_clear(PINTL,TLP)){
	_delay_ms(10);
	while(bit_is_clear(PINTL,TLP))
		_delay_ms(5);
	while(bit_is_clear(PINTL,TLD))
		_delay_ms(5);
	setdate();
	disp_view();
	press=1;
	}	//stisk tlp
   }	//press - povoleno
   	if(warning==1){			//vypnutí varování z jiného zařízení
	 warning=2;
	 par_set=1;}
  }		//stisk tld
//-------- ošetření osvětlení disp----		
if(bit_is_clear(PINTL,TLH)){
	press=1;
	LIGHT_ON;  
	if(warning==1){
	 warning=2;
	 par_set=1;}
	}

if(bit_is_clear(PINTL,TLP)){
	press=1;
	LIGHT_ON; 
	if(warning==1){
	 warning=2;
	 par_set=1;}
	}
//-------- END WHILE-------				
	_delay_us(1);
	}			// While

	return(1);
}				//Main






ISR(TIMER1_OVF_vect){		//vektor TC1 přetečení
	//exe++;
		}


ISR(TIMER0_OVF_vect){
		 int0++;
			}

ISR(USART_RXC_vect){ 
unsigned char pom;
	pom=UDR;
	if(pom==14)
	EEPROM_read_send();
	if(pom==36){
		EEPROM_clear();
		UDR=37;
		while (bit_is_clear(UCSRA,TXC));
		UCSRA&=~(_BV(TXC));
		}

	}//konec ISR


