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


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

#include "SNAKE/snake.h"
#include "menu.h"

uint8_t menu_break;

uint8_t licznikm, sw, last_sw;

int8_t usr_cnt, speed;

uint8_t ir_key;



void main_menu(void) {

	lcd_cls();
	lcd_str("      MENU");
	lcd_locate(2,0);
	lcd_str("users - 1*");
	lcd_locate(3,0);
	lcd_str("speed - slow*");

	menu_break=0;
	licznikm=2;
	usr_cnt = ram_cfg.users_cnt;
	speed = ram_cfg.speed;
	ir_key=255;
	speed=2;

	while(1) {

		IR_EVENT();			// zdarzenie do obsługi podczerwieni

		if( menu_break ) break;		// powrót z MENU

		if( ir_key == KEY_OK ) {

			ram_cfg.users_cnt = usr_cnt;
			switch( speed ) {
				case 0:  ram_cfg.speed=20; break;
				case 1:  ram_cfg.speed=30; break;
				case 2:  ram_cfg.speed=40; break;
			}
			copy_ram_to_eem();
			snakes(0)->speed = ram_cfg.speed;
			ir_key=255;
			break;
		}

		if( !Timer1) {

			lcd_locate(licznikm, 8);
			if( 2==licznikm && !sw ) {
				if( ir_key == CUR_RIGHT ) usr_cnt++;
				if( ir_key == CUR_LEFT ) usr_cnt--;
				if( usr_cnt>2 ) usr_cnt=1;
				if( !usr_cnt ) usr_cnt=2;
				lcd_int(usr_cnt);
				if( ram_cfg.users_cnt == usr_cnt ) lcd_char('*');
				ir_key=255;
			}

			if( 3==licznikm && !sw ) {
				if( ir_key == CUR_RIGHT ) {
					speed++;
					if( speed>2 ) speed=0;
				}
				if( ir_key == CUR_LEFT ) {
					speed--;
					if( speed<0 ) speed=2;
				}

				switch( speed ) {
					case 0:  lcd_str("max "); break;
					case 1:  lcd_str("medium "); break;
					case 2:  lcd_str("slow "); break;
				}

				if( speed == 0 && ram_cfg.speed == 20 ) lcd_char('*');
				if( speed == 1 && ram_cfg.speed == 30 ) lcd_char('*');
				if( speed == 2 && ram_cfg.speed == 40 ) lcd_char('*');
				ir_key=255;
			}

			if( ir_key == CUR_DOWN ) {
				licznikm++;
				if( licznikm > 3 ) licznikm = 2;
				ir_key=255;
			}

			if( ir_key == CUR_UP ) {
				licznikm--;
				if( licznikm < 2 ) licznikm = 3;
				ir_key=255;
			}


			if( sw && last_sw == licznikm ) lcd_str("      ");
			last_sw=licznikm;


			// podgląd kodów pilota
//			lcd_locate(1,0);
//			lcd_int(ir_key);
//			lcd_str("  ");
			sw^=1;
			Timer1=15;
		}

	}

	lcd_cls();
}
