Subversion Repositories NaviCtrl

Rev

Rev 568 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 568 Rev 576
Line 724... Line 724...
724
 
724
 
725
//$GPGGA,HHMMSS.ss,BBBB.BBBB,b,LLLLL.LLLL,l,Q,NN,D.D,H.H,h,G.G,g,A.A,RRRR*PP
725
//$GPGGA,HHMMSS.ss,BBBB.BBBB,b,LLLLL.LLLL,l,Q,NN,D.D,H.H,h,G.G,g,A.A,RRRR*PP
726
//$GPGGA,191410,4735.5634,N,00739.3538,E,1,04,4.4,351.5,M,48.0,M,,*45
726
//$GPGGA,191410,4735.5634,N,00739.3538,E,1,04,4.4,351.5,M,48.0,M,,*45
727
//$GPGGA,092120.20,,,,,0,00,99.99,,,,,,*6C
727
//$GPGGA,092120.20,,,,,0,00,99.99,,,,,,*6C
-
 
728
//http://www.kowoma.de/gps/zusatzerklaerungen/NMEA.htm
728
//http://www.kowoma.de/gps/zusatzerklaerungen/NMEA.htm
729
 
729
void CreateNmeaGGA(void)
730
void CreateNmeaGGA(void)
730
{
731
{
731
        u8 array[200], i = 0, crc = 0, x;
732
        u8 array[200], i = 0, crc = 0, x;
Line 748... Line 749...
748
                i += sprintf(&array[i],"%02d",(s16)tmp1);
749
                i += sprintf(&array[i],"%02d",(s16)tmp1);
Line 749... Line 750...
749
 
750
 
750
                tmp1 = abs(GPSData.Position.Latitude)%10000000L;
751
                tmp1 = abs(GPSData.Position.Latitude)%10000000L;
751
                tmp1 *= 6; // in Minuten
752
                tmp1 *= 6; // in Minuten
752
                tmp2 = tmp1 / 1000000L;
753
                tmp2 = tmp1 / 1000000L;
753
                i += sprintf(&array[i],"%02d", (s16)tmp2);
754
                i += sprintf(&array[i],"%02d", (u16)tmp2);
754
                tmp2 = tmp1 % 1000000L;
755
                tmp2 = tmp1 % 1000000L;
755
                tmp2 /= 10; // eine Stelle zu viel
756
                tmp2 /= 100; // zwei Stellen zu viel
Line 756... Line 757...
756
                i += sprintf(&array[i],".%05d,", (s16)tmp2);
757
                i += sprintf(&array[i],".%04d,", (u16)tmp2);
757
 
758
 
758
                if(GPSData.Position.Latitude >= 0) i += sprintf(&array[i],"N,");
759
                if(GPSData.Position.Latitude >= 0) i += sprintf(&array[i],"N,");
Line 759... Line 760...
759
                else i += sprintf(&array[i],"S,");
760
                else i += sprintf(&array[i],"S,");
760
                // +++++++++++++++++++++++++++++++++++++++++++
761
                // +++++++++++++++++++++++++++++++++++++++++++
Line 761... Line 762...
761
 
762
 
762
                tmp1 = abs(GPSData.Position.Longitude)/10000000L;
763
                tmp1 = abs(GPSData.Position.Longitude)/10000000L;
763
                i += sprintf(&array[i],"%03d", (s16)tmp1);
764
                i += sprintf(&array[i],"%03d", (u16)tmp1);
764
 
765
 
765
                tmp1 = abs(GPSData.Position.Longitude)%10000000L;
766
                tmp1 = abs(GPSData.Position.Longitude)%10000000L;
766
                tmp1 *= 6; // in Minuten
767
                tmp1 *= 6; // in Minuten
767
                tmp2 = tmp1 / 1000000L;
768
                tmp2 = tmp1 / 1000000L;
Line 768... Line 769...
768
                i += sprintf(&array[i],"%02d", (s16)tmp2);
769
                i += sprintf(&array[i],"%02d", (u16)tmp2);
769
                tmp2 = tmp1 % 1000000L;
770
                tmp2 = tmp1 % 1000000L;
770
                tmp2 /= 10; // eine Stelle zu viel
771
                tmp2 /= 100; // zwei Stellen zu viel
Line 823... Line 824...
823
                tmp1 = abs(GPSData.Position.Latitude)%10000000L;
824
                tmp1 = abs(GPSData.Position.Latitude)%10000000L;
824
                tmp1 *= 6; // in Minuten
825
                tmp1 *= 6; // in Minuten
825
                tmp2 = tmp1 / 1000000L;
826
                tmp2 = tmp1 / 1000000L;
826
                i += sprintf(&array[i],"%02d", (s16)tmp2);
827
                i += sprintf(&array[i],"%02d", (s16)tmp2);
827
                tmp2 = tmp1 % 1000000L;
828
                tmp2 = tmp1 % 1000000L;
828
                tmp2 /= 10; // eine Stelle zu viel
829
                tmp2 /= 100; // zwei Stellen zu viel
829
                i += sprintf(&array[i],".%05d,", (s16)tmp2);
830
                i += sprintf(&array[i],".%04d,", (s16)tmp2);
830
                if(GPSData.Position.Latitude >= 0) i += sprintf(&array[i],"N,");
831
                if(GPSData.Position.Latitude >= 0) i += sprintf(&array[i],"N,");
831
                else i += sprintf(&array[i],"S,");
832
                else i += sprintf(&array[i],"S,");
832
                // +++++++++++++++++++++++++++++++++++++++++++
833
                // +++++++++++++++++++++++++++++++++++++++++++
833
                tmp1 = abs(GPSData.Position.Longitude)/10000000L;
834
                tmp1 = abs(GPSData.Position.Longitude)/10000000L;
834
                i += sprintf(&array[i],"%03d", (s16)tmp1);
835
                i += sprintf(&array[i],"%03d", (s16)tmp1);
Line 836... Line 837...
836
                tmp1 = abs(GPSData.Position.Longitude)%10000000L;
837
                tmp1 = abs(GPSData.Position.Longitude)%10000000L;
837
                tmp1 *= 6; // in Minuten
838
                tmp1 *= 6; // in Minuten
838
                tmp2 = tmp1 / 1000000L;
839
                tmp2 = tmp1 / 1000000L;
839
                i += sprintf(&array[i],"%02d", (s16)tmp2);
840
                i += sprintf(&array[i],"%02d", (s16)tmp2);
840
                tmp2 = tmp1 % 1000000L;
841
                tmp2 = tmp1 % 1000000L;
841
                tmp2 /= 10; // eine Stelle zu viel
842
                tmp2 /= 100; // zwei Stellen zu viel
842
                i += sprintf(&array[i],".%05d,", (s16)tmp2);
843
                i += sprintf(&array[i],".%04d,", (s16)tmp2);
843
                if(GPSData.Position.Longitude >= 0) i += sprintf(&array[i],"E,");
844
                if(GPSData.Position.Longitude >= 0) i += sprintf(&array[i],"E,");
844
                else i += sprintf(&array[i],"W,");
845
                else i += sprintf(&array[i],"W,");
845
                // +++++++++++++++++++++++++++++++++++++++++++
846
                // +++++++++++++++++++++++++++++++++++++++++++
846
                tmp_int = GPSData.Speed_Ground; // in cm/sek
847
                tmp_int = GPSData.Speed_Ground; // in cm/sek
847
                tmp_int *= 90;
848
                tmp_int *= 90;
Line 860... Line 861...
860
                }
861
                }
861
                // +++++++++++++++++++++++++++++++++++++++++++
862
                // +++++++++++++++++++++++++++++++++++++++++++
862
                i += sprintf(&array[i],"%d.%1d,", abs(GeoMagDec)/10,abs(GeoMagDec)%10);
863
                i += sprintf(&array[i],"%d.%1d,", abs(GeoMagDec)/10,abs(GeoMagDec)%10);
863
                if(GeoMagDec < 0) i += sprintf(&array[i], "W,"); else i += sprintf(&array[i], "E,");
864
                if(GeoMagDec < 0) i += sprintf(&array[i], "W,"); else i += sprintf(&array[i], "E,");
864
                // +++++++++++++++++++++++++++++++++++++++++++
865
                // +++++++++++++++++++++++++++++++++++++++++++
865
                if(GPSData.Flags & FLAG_DIFFSOLN) i += sprintf(&array[i], "D,");
866
                if(GPSData.Flags & FLAG_DIFFSOLN) i += sprintf(&array[i], "D*");
866
                else i += sprintf(&array[i], "A,");
867
                else i += sprintf(&array[i], "A*");
867
        }
868
        }
868
        else // kein Satfix
869
        else // kein Satfix
869
        {
870
        {
870
                i += sprintf(&array[i], "V,,,,,,,,,,N*");
871
                i += sprintf(&array[i], "V,,,,,,,,,,N*");
871
        }
872
        }