//---------------------------------------------------------------------------
// 
//---------------------------------------------------------------------------
	#include <util/delay.h>
	#include <avr/io.h>
	#include <stdlib.h>
	#include <inttypes.h>
	#include <avr/interrupt.h>
	#include <string.h>
		
	#define CRLF SER_OUT(13);SER_OUT(10);

//---------------------------------------------------------------------------
//
//---------------------------------------------------------------------------
	volatile unsigned char nmea[99];
	volatile uint8_t *zeiger;
	
	volatile uint8_t gps_buf_rdy = 0;
	
	
//---------------------------------------------------------------------------
// Funktionen für den UART
//---------------------------------------------------------------------------

//---------------------------------------------------------------------------
// 
//---------------------------------------------------------------------------
	int main(void)
		{
		
		uint8_t b0, b1;
	
		SER_INI();
		_delay_ms(10);
		SER_INI1();
		_delay_ms(10);
		sei();
		_delay_ms(10);
		
		SER_STR ("HALLO WELT"); CRLF;
		
		while(1)
			{
			if(gps_buf_rdy == 1)	// If Buffer Ready send String to Uart 0
				{
				
				zeiger = nmea;
				while(*zeiger != 0)
					{
					SER_OUT(*zeiger);
					zeiger++;
					}
				CRLF;
				
				gps_buf_rdy = 0;	// Set Buffer Ready to 0 to get new sentence 
				}
			}
			
		return 0;
		}

//---------------------------------------------------------------------------
// 
//---------------------------------------------------------------------------
	ISR(USART1_RX_vect)
		{
		static uint8_t gps_buf_cnt = 0;	// Buffer Character Counter
		static uint8_t gps_buf_wrf = 0;	// BUffer Write Flag
		uint8_t gps_buf_rxc;						// Received Char
		
		gps_buf_rxc = UDR1;
		
		if(gps_buf_rdy == 0)	// If Buffer is Ready, it means nmea is not in parse
			{
			
			if(gps_buf_rxc == '$') // If character is $ 
				{
				gps_buf_wrf = 1;	// Set Buffer Write Flag to 1
				gps_buf_cnt = 0;	// Set Buffer Counter to 0
				}
				
			if(gps_buf_wrf == 1) // If Buffer Write Flag is set
				{
				nmea[gps_buf_cnt] = gps_buf_rxc;	// Add character to nmea array
				if(gps_buf_rxc == '\r')		// If character ist r (return)
					{
					nmea[gps_buf_cnt] = '\0';	// replace for 0 (termination of string)
					gps_buf_wrf = 0;	// Set Buffer write Flaf to 0
					gps_buf_rdy = 1;	// Set Buffer Ready to 1
					}
				gps_buf_cnt++;
				if(gps_buf_cnt == 99) // If case of Buffer "Overflow" start again
					{
					gps_buf_wrf = 0;
					}
				}
			}

		}