#include "includes.h"

extern tsEDK 	EDK;
extern tsAppCB  appCB;



/******************************************************************************
// CheckOpto
******************************************************************************/
void CheckOpto(void)
{ 
 #ifndef GR_EXT8
// nacteni optocoupler pinu
	EDK.optocoupler.lastState = EDK.optocoupler.state;			// zalohovat posledni stav

	if (M2_TR_PIN)
	 {
	   EDK.optocoupler.state = 1;								// nacist novy stav optozavory
	 }
	else 
	 {
	   EDK.optocoupler.state = 0;								// nacist novy stav optozavory			 
	 }

// prepinani smeru citace UP/DOWN podle stavu vstupu (nabezna/sestupna hrana)    
	if (!EDK.optocoupler.lastState && EDK.optocoupler.state)	// zmena 0 => 1 (COUNT UP)
	 {
	  EDK.io_flag |= FLAG_OPTO_UPDOWN;								// (SET=UP, CLEAR=DOWN)
	  EDK.counter.optocoupler = 0;								// inicializace counteru UP
	 }
   
	if (EDK.optocoupler.lastState && !EDK.optocoupler.state)	// zmena 1 => 0 (COUNT DOWN)
	 {
	  EDK.io_flag &= ~FLAG_OPTO_UPDOWN;							// (SET=UP, CLEAR=DOWN)
	  EDK.counter.optocoupler = EDK_PRESET_OPTOCOUPLER_TIME;	// inicializace counteru DOWN
	 }


//vzestupny/sestupny citac pro detekci stavu  	
  if (EDK.io_flag & FLAG_OPTO_UPDOWN)								// vzestupny citac = aktivni optocoupler
  { 
   if (EDK.counter.optocoupler < EDK_PRESET_OPTOCOUPLER_TIME)
    {
	  EDK.counter.optocoupler++;	 							// zajisti filtraci optozavory
	}

	 
   if (EDK.counter.optocoupler == EDK_PRESET_OPTOCOUPLER_TIME)  // detekovano uzavreni tamperu
    {															
       EDK.input.state &= ~EDK_IN_TAMPER;			// smazat flag pro generovani zpravy		   
		
	   if (EDK.input.state & EDK_IN_EHS)			// POKUD SE JEDNA O ODKLADACKU, POVOLIT CTENI KARTY
	    {											// AZ AKTIVACI TAMPERU - ZDE MA INVERZNI LOGIKU
	      EDK.sys_flag |= FLAG_READ_CARD;			// povolit cteni
		}
	}
   }
   else												// sestupny citac = neaktivni optocoupler
    {
	  if (EDK.counter.optocoupler)					// dekrementuj citac
	   {
		 EDK.counter.optocoupler--;
	   }
	   
	  if (!EDK.counter.optocoupler)					// az se citac dekrementuje do 0 
	   {											// je detekovano uvolneni tamperu
	     EDK.input.state |= EDK_IN_TAMPER;			// nastavit flag pro generovani zpravy		   
	     if (EDK.input.state & EDK_IN_EHS)
		  {
			  EDK.sys_flag &= ~FLAG_READ_CARD;		// zakazat cneni
			  EDK.io_flag |= FLAG_EHS_CARD_REMOVED;	// karta skutecne vytazena - doslo k deaktivaci optozavory
		  }
		 
	   }
	}
#endif
}

