/*		mija 2009	key	

		source file for process keyboard

	!!!	must be set PINs,PORTs,DDR in lcd.h 
						
						
		ver.: 0.0	TESTED				
			
*/

#include <avr/io.h>
#include "key.h"

void KeyInit()
{
	KEY1Init();
	KEY1Pullup();
	KEY2Init();
	KEY2Pullup();
}

void ProcesKey(uint8_t *key)
{
	//stav
	enum{STABLE_NO_KEY,NO_STABLE,REPEAT};
	static uint8_t stav = STABLE_NO_KEY;
	static uint8_t KeyPrev = NOKEY;
	static uint16_t KeyTimer;
	uint8_t Key;
	
	Key = NOKEY;
	if (KEY1Input()) Key = TL1;
	if (KEY2Input()) Key = TL2;
	if (KEY1Input() && KEY2Input()) Key = TL1TL2;

	switch (stav)
	{
	case STABLE_NO_KEY:	if (Key){
							KeyPrev = Key;
							KeyTimer = KEYSTABLETIME;
							stav = NO_STABLE;
						}
						*key = NOKEY;
						break;
	case NO_STABLE:		if (--KeyTimer){
							*key = NOKEY;
							break;
						}
						if (Key == KeyPrev){
							*key = Key;
							KeyTimer = KEYFIRSTREPEATTIME;
							stav = REPEAT;
							break;
						}
						stav = STABLE_NO_KEY;
						*key = NOKEY;
						break;
/*	case FIRST_REPEAT:	if (--KeyTimer){
							if (Key == NOKEY) stav = STABLE_NO_KEY;
							*key = NOKEY;
							break;
						}
						if (Key == KeyPrev){
							*key = Key;
							KeyTimer = KEYREPEATTIME;
							stav = REPEAT;
							break;
						}
						stav = STABLE_NO_KEY;
						*key = NOKEY;
						break;*/
	case REPEAT:		if (--KeyTimer){
							if (Key != KeyPrev) stav = STABLE_NO_KEY;
							*key = NOKEY;
							break;
						}
						if (Key == KeyPrev){
							*key = Key;
							KeyTimer = KEYREPEATTIME;
							//stav = REPEAT;
							break;
						}
	default:			stav = STABLE_NO_KEY;
						*key = NOKEY;
	}
}
