#include <p18cxxx.h>
#include <p18f4520.h>
#include <delays.h>
#include <xlcd.h>
#include <myEEPROM.h>
#include <myClock.h>
#include "..\Header\Keypad.h"
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <usart.h>
#include <portb.h> 
#include <sw_uart.h>

#pragma config WDT   = OFF
#pragma config OSC   = HS		// Oscillator 20 Mhz
#pragma	config LVP   = OFF		// Low Voltage Program mód kikapcsolása
#pragma config XINST = ON		// Extended mode engedélyezése!

#pragma udata Variables
	char pontosIdo[20];
	char str[20];
	int gomb;
	char output_data;
#pragma udata 

void InterruptHandlerHigh (void);

struct
{
	unsigned TimeOut:1;
	unsigned :7;
} flags;

#pragma code
void main (void)
{
	ADCON0bits.ADON      = 0; // Analóg átalakítás kikapcsolása
	ADCON1               = 0b11111111; // Minden jelet digitálisként kezelünk!
	TRISAbits.TRISA0     = 0; // A0 Kimenet Reléhez
	LATAbits.LATA0       = 0; // Relé kikapcsolása
	INTCON2bits.NOT_RBPU = 0; // B port ellenállásainak felhúzása
	TRISBbits.TRISB0     = 1; // RB0 Kimenet RFID-Transponder
	LATBbits.LATB0       = 0;
    OpenRB0INT (PORTB_CHANGE_INT_ON & PORTB_PULLUPS_ON & FALLING_EDGE_INT);
	INTCONbits.INT0IF    = 0;

	// Timer beállítása
	T0CON                = 0b10000001;  // Timer0 előosztás beállítása
	INTCONbits.TMR0IE    = 1;       	// Timer0 megszakításának engedélyezése!
	INTCONbits.GIE       = 1;       	// Globális megszakítások engedélyezése
	RCONbits.IPEN        = 1;       	// enable shorterrupt priority levels
	PIE1                 = 0; 			// a periféria megszakítások tiltása
	TMR0L 				 = 0;			// Timer nullázása
	TMR0H 				 = 0;
	flags.TimeOut        = 0; 

	Billentyuzet_Inicializalas();
	OpenXLCD( FOUR_BIT & LINES_2X16 );
	init_I2C(); // Óra élesztéséhez I2C konfigurálás
	OpenUART(); // RFID olvasóhoz

	IPR1bits.RCIP        = 1;       // Make receive interrupt high priority
	OpenUSART (USART_TX_INT_OFF & USART_RX_INT_ON & USART_ASYNCH_MODE & USART_EIGHT_BIT & USART_CONT_RX & USART_BRGH_HIGH, 129); // 9600baud: 129, 19200baud: 64, 38400baud: 32, 57600baud: 21

	//setClock( 9, 18, 0, 8, 8, 30, 0);

	sprintf(str,"                  ");
	gomb = 0;

	// Ez a rész már működik
	while(BusyUSART());
	putcUSART ( 'a' );
	// *************************

	while (1)
	{
	/*	gomb = Billentyu();

	    if (flags.TimeOut == 1)
        {			
			flags.TimeOut = 0;
			readClock();
			sprintf(pontosIdo,"%02d:%02d %02d",getHour(), getMinute(), getSec());
			putsXLCD(pontosIdo,0x00);

			if (gomb != 20)
			{
				sprintf(str,"%02d",gomb);
				putsXLCD(str,0xC);
			}	
        }*/
	}
}

//----------------------------------------------------------------------------
// High priority interrupt vector
#pragma code InterruptVectorHigh = 0x08
void
InterruptVectorHigh (void)
{
  _asm
    goto InterruptHandlerHigh //jump to interrupt routine
  _endasm
}

//----------------------------------------------------------------------------
// High priority interrupt routine
#pragma code
#pragma interrupt InterruptHandlerHigh

void
InterruptHandlerHigh ()
{
	if (INTCONbits.TMR0IF)     // Timer0 megszakítás
	{                             
		flags.TimeOut     = 1; 
		INTCONbits.TMR0IF = 0; // megszakítás flag ürítése!
	}

	if( INTCONbits.INT0IF )    // RFID Transponder
	{
		getsUART(str,13);
		INTCONbits.INT0IF = 0; // megszakítás flag ürítése!
	}

	if ( PIR1bits.RCIF )       // Soros kommunikáció megszakítása
	{
		while(BusyUSART());
		output_data = getcUSART(); // Vezérlő karakter lekérdezése

		if ( output_data == '5' ) // Alapadatok beállítása
		{
			while(BusyUSART());
			putcUSART ( '1' );
		}
		else
		{
			while(BusyUSART());
			putcUSART ( '0' );
		}
		PIR1bits.RCIF = 0; // Megszakítás flag ürítése
	}
}
