/*
 * 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"

//------------------- definicje preprocesora
#define CUR_UP 32
#define CUR_DOWN 33
#define CUR_LEFT 17
#define CUR_RIGHT 16

#define CUR1_UP 2
#define CUR1_DOWN 5
#define CUR1_LEFT 4
#define CUR1_RIGHT 6

#define MENU 36
#define KEY_OK 59

enum {left, right, down, up};


typedef struct {
	uint8_t speed;
	int8_t punkty;
	char face;
	uint8_t keys[4];
	uint8_t direction;
	uint8_t body_len;
	uint8_t head;
	uint16_t byx[64];
	void (*draw_snake_ptr)( void * tsn );
} TSNAKE;

TSNAKE snake[2];

void draw_snake( TSNAKE * tsn ) {

	tsn->body_len = 5;

}

void draw_snake1( TSNAKE * tsn ) {

	tsn->body_len = 5;

}

void init_snake1( void ) {

	snake[0].byx[0] = (3<<8) + 15;

	snake[0].draw_snake_ptr = (void*)draw_snake;

}


// timery programowe
volatile uint16_t Timer1;

inline int8_t get_y( uint16_t yx ) {
	return (int8_t)(yx>>8);
}

inline int8_t get_x( uint16_t yx ) {
	return (int8_t)(yx);
}


// ------------ 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

	lcd_str("start...");


	sei();					// globalne zezwolenie na przerwania


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

		if( !Timer1 ) {



			Timer1 = 50;
		}

	}
}



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

	uint16_t n;

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

}
