/*
 * main.c
 *
 *  Created on: 14-12-2012
 *      Author: Mirosław Kardaś
 */
#include <avr/io.h>
#include <avr/interrupt.h>
#include <string.h>
#include <stdlib.h>
#include <util/delay.h>

#include "LCD/lcd44780.h"
#include "IR_UNI/ir_config.h"
#include "MK_USART/mkuart.h"

#include "SNAKE/snake.h"


// timery programowe
volatile uint16_t Timer1;



// ------------ główna funkcja programu - main() -------------------------------
int main(void) {



	DDRA |= (1<<PA7);
	PORTA |= (1<<PA7);

	/* Timer2 – konfigurcajca silnika timerów programowych */
	TCCR2 	|= (1<<WGM21);			// tryb pracy CTC
	TCCR2 	|= (1<<CS22)|(1<<CS21)|(1<<CS20);	// preskaler = 1024
	OCR2 	= 78;			// przerwanie porównania co 10ms (100Hz)
	TIMSK 	= (1<<OCIE2);	// Odblokowanie przerwania CompareMatch


	USART_Init(__UBRR);

	ir_init();				// inicjalizacja podczerwieni
	lcd_init();				// inicjalizacja lcd


	snake_init( ram_cfg.users_cnt  );

	lcd_str("start...");

	check_and_load_defaults();


	sei();					// globalne zezwolenie na przerwania


	//*********** pętla główna programu
	while(1) {

		if( !Timer1 ) {

			if( snakes(0)->draw_snake_fun ) snakes(0)->draw_snake_fun( snakes(0) );

			lcd_cls();
			lcd_int(snakes(0)->speed);
			while(1);

			Timer1 = snakes(0)->speed;
		}

	}
}



//*** przerwanie Timer2 CompareM
ISR(TIMER2_COMP_vect) {

	uint16_t n;

	n = Timer1;		/* 100Hz Timer1 */
	if (n) Timer1 = --n;

}
