#include <stdlib.h>
#include <stdio.h>
#include <avr/io.h>
#include <avr/pgmspace.h>
#include <inttypes.h>
#include "console.h"

#define BAUD 9600

void console_init(void)
{
	UBRRL = (CLK / (BAUD * 16l) - 1) & 0xFF;
	UBRRH = (CLK / (BAUD * 16l) - 1) >> 8 & 0xFF;
	UCSRB = _BV(RXEN) | _BV(TXEN);
	fdevopen(console_putchar, console_getchar, 0);
}

void console_home(void)
{
	printf_P(PSTR("\33[H"));
}

void console_clear(void)
{
	printf_P(PSTR("\33[H\33[J"));
}

int console_putchar(char c)
{
	if (c == '\n')
		console_putchar('\r');
	loop_until_bit_is_set(UCSRA, UDRE);
	UDR = c;
	return 0;
}

int console_getchar(void) 
{
	loop_until_bit_is_set(UCSRA, RXC);
	return UDR;
}

