/** Author: Tomas Vankat */ #ifndef PROCESS_GALILEO_DATA_H_ #define PROCESS_GALILEO_DATA_H_ int process_GALILEO_data(uint64_t[],uint8_t); void Deinterleaving(uint8_t[]); void ViterbiDecoding(uint8_t[],uint8_t[]); int Dekodovani(uint64_t[],uint8_t[]); void sortWT0(uint8_t[],uint8_t); void sortWT1(uint8_t[],uint8_t); void sortWT2(uint8_t[],uint8_t); void sortWT3(uint8_t[],uint8_t); void sortWT4(uint8_t[],uint8_t); void sortWT5(uint8_t[],uint8_t); void sortWT6(uint8_t[],uint8_t); void sortWT7(uint8_t[],uint8_t); void sortWT8(uint8_t[],uint8_t); void sortWT9(uint8_t[],uint8_t); void sortWT10(uint8_t[],uint8_t); int CRC(uint8_t []); double Time_Correction(uint8_t,double); double SV_coordinates(uint8_t); double GST_UTC(uint8_t); int readvalue(uint8_t, uint8_t, uint8_t [], uint8_t); void system_rotation(uint8_t, double); void almanac_SV_coordinates(uint8_t,uint8_t,int16_t,uint16_t,int16_t,int16_t,int16_t,int16_t,int16_t,uint16_t,uint8_t); void store_almanac_data(uint8_t,uint8_t); double User_pos(); const double PI=3.1415926535898; const double my=398600441800000; //geocentricka gravitacni konst. const double omega_e=0.000072921151467; //str. rychl. rotace Zeme const double c=299792458; //rychlost svetla uint8_t initialization=0; double Eccentr_anomal; double receiver_time; double time0[36]; //doba sireni signalu od druzic struct { double daytime; //cas dne v sekundach uint8_t day; //0..Nedele - 6..Sobota uint8_t date; uint8_t month; uint16_t year; }UTC; struct { int week; //cislo tydne epochy GST double time; //cas druzice v sekundach int64_t precise_time; //cas druzice v pikosekundach }GST[36]; struct SVcoordin{ //souradnice druzic double X; double Y; double Z; }SV_coor[36]; struct alma{ //efemeridy z almanachu uint8_t IODa; uint8_t WNa; uint16_t t_0a; uint8_t SVID; int16_t delta_sqrtA; uint16_t e; int16_t omega; int16_t d_i; int16_t omega_0; int16_t omega_dot; int16_t M_0; int16_t a_f0; int16_t a_f1; uint8_t E5b_HS; uint8_t E1B_HS; }almanac[36] ; struct WordT1{ //Efemeridy 1/4 uint16_t IODnav; uint16_t toe; int32_t Mo; uint32_t e; uint32_t sqrtA; } WordType1[36], temporary_WordType1[36]; struct WordT2{ //Efemeridy 2/4 uint16_t IODnav; int32_t OMEGA_0; int32_t io; int32_t omega; int16_t ii; } WordType2[36], temporary_WordType2[36]; struct WordT3{ //Efemeridy 3/4 uint16_t IODnav; int32_t omega_dot; int16_t delta_n; int16_t C_uc; int16_t C_us; int16_t C_rc; int16_t C_rs; uint8_t SISA; } WordType3[36], temporary_WordType3[36]; struct WordT4{ uint16_t IODnav; uint8_t SVID; //Efemeridy 4/4 int16_t C_ic; int16_t C_is; //casove korekcni parametry uint16_t t_0c; int32_t a_f0; int32_t a_f1; int8_t a_f2; } WordType4[36], temporary_WordType4[36]; struct WordT5{ //Ionosfericke korekcni cleny: uint16_t a_i0; int16_t a_i1; int16_t a_i2; uint8_t Region1; uint8_t Region2; uint8_t Region3; uint8_t Region4; uint8_t Region5; //BGD a validata dat a signalu int16_t BGDa; int16_t BGDb; uint8_t E5b_Hs; uint8_t E1B_HS; uint8_t E5b_DVs; uint8_t E1B_DVs; uint16_t WN; //GST - Week number uint32_t TOW; //GST - Time of week } WordType5[36], temporary_WordType5[36]; struct WordT6{ //GST-UTC konverzni cleny int32_t A0; int32_t A1; int8_t deltat_LS; uint8_t t_ot; uint8_t WN_0t; uint8_t WN_LSF; uint8_t DN; int8_t deltat_LSF; uint32_t TOW; } WordType6[36], temporary_WordType6[36]; struct WordT7{ uint8_t IODa; uint8_t WNa; uint16_t t_0a; //ALMANACH //SV_SVID1 1/2 uint8_t SVID1; int16_t delta_sqrtA; uint16_t e; int16_t omega; int16_t d_i; int16_t omega_0; int16_t omega_dot; int16_t M_0; } WordType7[36], temporary_WordType7[36]; struct WordT8{ //SV_SVID1 2/2 uint8_t IODa; int16_t a_f0; int16_t a_f1; uint8_t E5b_HS; uint8_t E1B_HS; //SV_SVID2 1/2 uint8_t SVID2; int16_t delta_sqrtA; uint16_t e; int16_t omega; int16_t d_i; int16_t omega_0; int16_t omega_dot; } WordType8[36], temporary_WordType8[36]; struct WordT9{ uint8_t IODa; uint8_t WNa; uint16_t t_0a; //SV_SVID2 2/2 int16_t M_0; int16_t a_f0; int16_t a_f1; uint8_t E5b_HS; uint8_t E1B_HS; //SV_SVID3 1/2 uint8_t SVID3; int16_t delta_sqrtA; uint16_t e; int16_t omega; int16_t d_i; } WordType9[36], temporary_WordType9[36]; struct WordT10{ uint8_t IODa; //SV_SVID3 2/2 int16_t omega_0; int16_t omega_dot; int16_t M_0; int16_t a_f0; int16_t a_f1; uint8_t E5b_HS; uint8_t E1B_HS; //GST-GPS konverzni cleny int16_t A_0G; int16_t A_1G; uint8_t t_0G; uint8_t WN_0G; } WordType10[36], temporary_WordType10[36]; struct WordT0{ uint8_t Time; //validita casu uint16_t WN; //GST - week number uint32_t TOW; //GST - time of week } WordType0[36], temporary_WordType0[36]; #endif // PROCESS_GALILEO_DATA_H_