#include <avr/interrupt.h>
#include <avr/pgmspace.h>
#include <stdlib.h>
#include <stdarg.h>
#include <ctype.h>
#include <string.h>
#include <avr/io.h>

#include "usart.h"
//----------------------------------------------------------------------------
//----------------------------------------------------------------------------
//----------------------------------------------------------------------------
/*Usart Initialisieren*/
 
void USART_Init(unsigned int ubrr)
{
/*Set Baud rate*/
UBRR0H = (unsigned char) (ubrr>>8);
UBRR0L = (unsigned char) ubrr;
/*Enable receiver and transmitter*/
UCSR0B = (1<<RXEN0)|(1<<TXEN0);
/*Set frame format: 8date, 2stop bit*/
UCSR0C = /*(1<<USBS0)|*/(3<<UCSZ00);
}



//----------------------------------------------------------------------------
//----------------------------------------------------------------------------
//----------------------------------------------------------------------------
/* Zeichen empfangen */

uint8_t uart_getc(void)
{
    while (!(UCSR0A & (1<<RXC0)))   // warten bis Zeichen verfuegbar
        ;
    return UDR0;                   // Zeichen aus UDR an Aufrufer zurueckgeben
}



/*String empfangen*/
void uart_gets( char* Buffer, uint8_t MaxLen )
{
  uint8_t NextChar;
  uint8_t StringLen = 0;
 
  NextChar = uart_getc();         // Warte auf und empfange das nächste Zeichen
 
                                  // Sammle solange Zeichen, bis:
                                  // * entweder das String Ende  Zeichen '\0'kam
                                  // * oder das aufnehmende Array voll ist
  while( NextChar != '\r'  && StringLen < MaxLen - 1 ) 
  {
    *Buffer++ = NextChar;
    StringLen++;
    NextChar = uart_getc();
  } 
                                  // Noch ein '\0' anhängen um einen Standard
                                  // C-String daraus zu machen
  *Buffer = '\0';
}


//----------------------------------------------------------------------------
//----------------------------------------------------------------------------
//----------------------------------------------------------------------------
/*Zeichen Senden*/
void USART_Transmit( unsigned char data )
{
/* Wait for empty transmit buffer */
while ( !( UCSR0A & (1<<UDRE0)) )
;
/* Put data into buffer, sends the data */
UDR0 = data;
}

//Ausgabe eines Strings
void usart_write_str(char *str)
{
	while (*str)
	{
		USART_Transmit(*str++);
	}
}

/* Wert eines Integers senden*/

void usart_write_int(int data)
{
	char Bufferchar[20];
	
			itoa(data, Bufferchar, 10);		
            usart_write_str( Bufferchar);
			usart_write_str("\r\n");
			
}
