/*Z dane NMEA zpravy vypreparuje potrebne informace*/
/*Autor: Zbynek*/
#include "GPS_dekoduj.h"
#include <string.h>
NMEA_GPRMC GPRMC_informace;

/************************************************************************
* Funkce: dekoduj_zpravu_GPS
* Ucel:  Z RX0_buffer vytahne informace o soucasne poloze, je tam ulozena cela veta RMC
* Vstup: Zadny
* Vystup:  Zadny                                                                      
************************************************************************/
void dekoduj_zpravu_GPS (uint8_t* NMEA_retezec, uint8_t NMEA_delka)
{

	uint8_t i = 0, j = 0, k = 0, l = 0, m = 0;
	uint8_t pocet_carek = 0;
	uint8_t po_tecce = 0;
	for ( i = 0; i < NMEA_delka; i++)
	{
		if (pocet_carek == 1)
		{
			
			if(NMEA_retezec[i] == '.')
				po_tecce = 1;
			if (po_tecce == 0)
			{
				if (j == 2 || j == 5)
				{
					GPRMC_informace.UTC_time[j] = ':';
					j++;
				}
				GPRMC_informace.UTC_time[j] = NMEA_retezec[i];
				j++;
			}
		}
		else if (pocet_carek == 2)
		{
			GPRMC_informace.Status_GPS[0] = NMEA_retezec[i-1];
		}
		else if (pocet_carek == 3 || pocet_carek == 4)
		{
			GPRMC_informace.Latitude[k] = NMEA_retezec[i];
			k++;
		}
		else if (pocet_carek == 5 || pocet_carek == 6)
		{
			GPRMC_informace.Longitude[l] = NMEA_retezec[i];
			l++;
		}		
		else if (pocet_carek == 9)
		{
			if (m == 2 || m == 5)
			{
				GPRMC_informace.Datum[m] = '.';
				m++;
			}
			GPRMC_informace.Datum[m] = NMEA_retezec[i];
			m++;
		}
		if (NMEA_retezec[i] == ',')
		{
			pocet_carek++;
		}
		if (pocet_carek >9)
		{
			GPRMC_informace.UTC_time[j] = 0;
			GPRMC_informace.Latitude[k-1] = 0;
			GPRMC_informace.Longitude[l-1] = 0;
			GPRMC_informace.Datum[m-1] = 0;
			GPRMC_informace.Status_GPS[1] = 0;
			i = 0, j = 0, k = 0, l = 0, m = 0;
			po_tecce = 0;
			break;	// nema vyznam dal zapisovat, potrebne je ulozeno.
		}
	}
}
