

#include "avr/io.h"
#include "avr/interrupt.h"
#include "rot.h"

signed char rot_delta=0;
signed char rot_last=1;

void rot_IRQ(void)
{
	/*Nach Peter Dannegger: http://www.mikrocontroller.net/forum/read-4-37992.html#37992*/
	
	signed char i = 0;

	if(!(ROT_PIN & (1<<ROT_A)))
    		i = 1;

	if(!(ROT_PIN & (1<<ROT_B)))
		i ^= 3;	

	i -= rot_last;

	if(i & 1)
	{
		rot_last += i;
 		rot_delta += (i & 2) - 1;
	}


}


void rot_init(void)
{
	ROT_DDR &= ~((1<<ROT_A)|(1<<ROT_B)|(1<<ROT_T));
	ROT_PORT |= (1<<ROT_A)|(1<<ROT_B)|(1<<ROT_T);
}

signed char rot_getdelta(void)
{
	cli();
	signed char tmp = rot_delta;
	rot_delta = 0;
	sei();

	return tmp;
}
