dd

Dependencies:   C12832 LM75B mbed

Committer:
pfe
Date:
Tue Apr 21 10:16:20 2015 +0000
Revision:
0:05a20e3e3179
dd

Who changed what in which revision?

UserRevisionLine numberNew contents of line
pfe 0:05a20e3e3179 1 void DecodageGPGGA(unsigned char Ldata) //-------------------------------------------------------
pfe 0:05a20e3e3179 2 {
pfe 0:05a20e3e3179 3 static unsigned short CommaNbr;
pfe 0:05a20e3e3179 4 static unsigned short ii,jj;
pfe 0:05a20e3e3179 5 GpsData.GGA_Valid = 0;
pfe 0:05a20e3e3179 6 CommaNbr = 0;
pfe 0:05a20e3e3179 7 for(ii=0;ii<Ldata;ii++)
pfe 0:05a20e3e3179 8 {
pfe 0:05a20e3e3179 9 if(_MsgGPSRx[ii]==',')
pfe 0:05a20e3e3179 10 {
pfe 0:05a20e3e3179 11 _PosV[CommaNbr] = ii;
pfe 0:05a20e3e3179 12 CommaNbr++;
pfe 0:05a20e3e3179 13 }
pfe 0:05a20e3e3179 14 }
pfe 0:05a20e3e3179 15 if(CommaNbr<11)goto LabFin; //Vérification de la longueur du message GPGGA
pfe 0:05a20e3e3179 16 //par le nombre des vergules
pfe 0:05a20e3e3179 17 //UTC of position
pfe 0:05a20e3e3179 18 //extraction du temps UTC
pfe 0:05a20e3e3179 19 jj=0;//Identification de la position de la première virgule dans le MsgGPS
pfe 0:05a20e3e3179 20 _DL=Get_Length(jj);
pfe 0:05a20e3e3179 21 if((_DL<9)||(_DL>10)) goto LabFin;//Vérification de la longueur du message de temps
pfe 0:05a20e3e3179 22 Set_Data(jj);
pfe 0:05a20e3e3179 23 Validation_StrToFloat(_DL);
pfe 0:05a20e3e3179 24 if(_Npt !=1) goto LabFin;
pfe 0:05a20e3e3179 25 if(_Pospt!=6) goto LabFin;
pfe 0:05a20e3e3179 26 //Vérification de Time "hhmmss"
pfe 0:05a20e3e3179 27 _hh=10*(_Data[0]-48)+(_Data[1]-48);//Extraction de l'heur
pfe 0:05a20e3e3179 28 _mm=10*(_Data[2]-48)+(_Data[3]-48);//Extraction des minutes
pfe 0:05a20e3e3179 29 _ss=10*(_Data[4]-48)+(_Data[5]-48);//Extraction des secondes
pfe 0:05a20e3e3179 30 if((_hh>24)||(_mm>59)||(_ss>59))goto LabFin;
pfe 0:05a20e3e3179 31 //Latitude of position
pfe 0:05a20e3e3179 32 //extraction du Lattitude
pfe 0:05a20e3e3179 33 jj=1;//Identification de la position de la deuxième virgule dans le MsgGPS
pfe 0:05a20e3e3179 34 _DL=Get_Length(jj);
pfe 0:05a20e3e3179 35 if((_DL<9)||(_DL>10)) goto LabFin;//Vérification de la longueur du message de lattitude
pfe 0:05a20e3e3179 36 Set_Data(jj);
pfe 0:05a20e3e3179 37 Validation_StrToFloat(_DL);
pfe 0:05a20e3e3179 38 if(_Npt !=1) goto LabFin;
pfe 0:05a20e3e3179 39 if(_Pospt!=4) goto LabFin;
pfe 0:05a20e3e3179 40
pfe 0:05a20e3e3179 41 //Vérification du Lattitude "LatDegLatMin,LatMin1LatMin2"
pfe 0:05a20e3e3179 42 _LatDeg =10*(_Data[0]-48)+(_Data[1]-48);//Extraction des degrés du lattitude
pfe 0:05a20e3e3179 43 _LatMin =10*(_Data[2]-48)+(_Data[3]-48);//Extraction des minutes du lattitude
pfe 0:05a20e3e3179 44 _LatMin1=10*(_Data[5]-48)+(_Data[6]-48);//Extraction des deux chiffres minutes après la virgule du lattitude
pfe 0:05a20e3e3179 45 _LatMin2=10*(_Data[7]-48)+(_Data[8]-48);//Extraction des deux chiffres minutes après la virgule du lattitude
pfe 0:05a20e3e3179 46 if((_LatDeg>90)||(_LatMin>59)||(_LatMin1>99)||(_LatMin2>99))goto LabFin;
pfe 0:05a20e3e3179 47 //Vérification de la direction du Lattitude LatDir(N ou S)
pfe 0:05a20e3e3179 48 jj=2;//Identification de la position de la troisième virgule dans le MsgGPS
pfe 0:05a20e3e3179 49 _DL=Get_Length(jj);
pfe 0:05a20e3e3179 50 if(_DL!=1) goto LabFin;//Vérification de la longueur du message de direction de latittude
pfe 0:05a20e3e3179 51 Set_Data(jj);
pfe 0:05a20e3e3179 52 _LatDir=_Data[0];//Extraction de le direction du latitude
pfe 0:05a20e3e3179 53 if((_LatDir!='N')&&(_LatDir!='S'))goto LabFin;
pfe 0:05a20e3e3179 54 // 01 byte
pfe 0:05a20e3e3179 55 //Longitude of position
pfe 0:05a20e3e3179 56 //extraction de la Longitude
pfe 0:05a20e3e3179 57 jj=3;//Identification de la position de la quatrième virgule dans le MsgGPS
pfe 0:05a20e3e3179 58 _DL=Get_Length(jj);
pfe 0:05a20e3e3179 59 if((_DL<10)||(_DL>11)) goto LabFin;//Vérification de la longueur du message de la longitude
pfe 0:05a20e3e3179 60 Set_Data(jj);
pfe 0:05a20e3e3179 61 Validation_StrToFloat(_DL);
pfe 0:05a20e3e3179 62 if(_Npt !=1) goto LabFin;
pfe 0:05a20e3e3179 63 if(_Pospt!=5) goto LabFin;
pfe 0:05a20e3e3179 64 //Vérification du La Longitude "LongDegLongMin,LongMin1LongMin2"
pfe 0:05a20e3e3179 65 _LongDeg =100*(_Data[0]-48)+10*(_Data[1]-48)+(_Data[2]-48);//Extraction des degrés de la longitude
pfe 0:05a20e3e3179 66 _LongMin =10*(_Data[3]-48)+(_Data[4]-48);//Extraction des minutes de la longitude
pfe 0:05a20e3e3179 67 _LongMin1=10*(_Data[6]-48)+(_Data[7]-48);//Extraction des deux chiffres minutes après la virgule de la longitude
pfe 0:05a20e3e3179 68 _LongMin2=10*(_Data[8]-48)+(_Data[9]-48);//Extraction des deux chiffres minutes après la virgule de la longitude
pfe 0:05a20e3e3179 69 if((_LongDeg>180)||(_LongMin>59)||(_LongMin1>99)||(_LongMin2>99))goto LabFin;
pfe 0:05a20e3e3179 70 //Vérification de la direction du Longitude LonDir(E ou W)
pfe 0:05a20e3e3179 71 jj=4;//Identification de la position de la cinquième virgule dans le MsgGPS
pfe 0:05a20e3e3179 72 _DL=Get_Length(jj);
pfe 0:05a20e3e3179 73 if(_DL!=1) goto LabFin;//Vérification de la longueur du message de direction de la longitude
pfe 0:05a20e3e3179 74 Set_Data(jj);
pfe 0:05a20e3e3179 75 _LongDir=_Data[0];//Extraction de le direction de la longitude
pfe 0:05a20e3e3179 76 if((_LongDir!='E')&&(_LongDir!='W'))goto LabFin;
pfe 0:05a20e3e3179 77 //GPS Quality indicator
pfe 0:05a20e3e3179 78 jj=5;//Identification de la position de la sixième virgule dans le MsgGPS
pfe 0:05a20e3e3179 79 _DL=Get_Length(jj);
pfe 0:05a20e3e3179 80 if(_DL!=1) goto LabFin;//Vérification de la longueur du message de l'ndicateur de qualité GPS
pfe 0:05a20e3e3179 81 Set_Data(jj);
pfe 0:05a20e3e3179 82 Validation_StrToFloat(_DL);
pfe 0:05a20e3e3179 83 if(_Npt !=0) goto LabFin;
pfe 0:05a20e3e3179 84 if(_Pospt!=0) goto LabFin;
pfe 0:05a20e3e3179 85 _Qual=_Data[0]-48;//Extraction de l'information de la qualité du MsgGPs
pfe 0:05a20e3e3179 86 if((_Qual<1)||(_Qual>2))goto LabFin;
pfe 0:05a20e3e3179 87 //Antenna altitude above mean-sea-level "SignHMSLHMSL_HHMSL_L,HMSL_1HMSL_2" .
pfe 0:05a20e3e3179 88 jj=8;//Identification de la position de la neuvième virgule dans le MsgGPS
pfe 0:05a20e3e3179 89 _DL=Get_Length(jj);
pfe 0:05a20e3e3179 90 if(_DL<3) goto LabFin;//Vérification de la longueur du message de l'altitude
pfe 0:05a20e3e3179 91 Set_Data(jj);
pfe 0:05a20e3e3179 92 _SignHMSL='+';
pfe 0:05a20e3e3179 93 if(_Data[0]=='-')
pfe 0:05a20e3e3179 94 {
pfe 0:05a20e3e3179 95 _DL=_DL-1;
pfe 0:05a20e3e3179 96 _SignHMSL='-';
pfe 0:05a20e3e3179 97 for(ii=0;ii<_DL;ii++) _Data[ii]=_Data[ii+1];
pfe 0:05a20e3e3179 98 }
pfe 0:05a20e3e3179 99 Validation_StrToFloat(_DL);
pfe 0:05a20e3e3179 100 if(_Npt !=1) goto LabFin;
pfe 0:05a20e3e3179 101 if(_Pospt ==0) goto LabFin;
pfe 0:05a20e3e3179 102 switch (_Pospt)
pfe 0:05a20e3e3179 103 {
pfe 0:05a20e3e3179 104 case 1: {_HMSL_L = (_Data[0]-48) ; _HMSL_H = 0; break;}
pfe 0:05a20e3e3179 105 case 2: {_HMSL_L = (_Data[1]-48)+10*(_Data[0]-48); _HMSL_H = 0; break;}
pfe 0:05a20e3e3179 106 case 3: {_HMSL_L = (_Data[2]-48)+10*(_Data[1]-48); _HMSL_H = (_Data[0]-48); break;}
pfe 0:05a20e3e3179 107 case 4: {_HMSL_L = (_Data[3]-48)+10*(_Data[2]-48); _HMSL_H = (_Data[1]-48)+10*(_Data[0]-48); break;}
pfe 0:05a20e3e3179 108 default : break;
pfe 0:05a20e3e3179 109 }
pfe 0:05a20e3e3179 110 _DL=_DL-_Pospt-1; //La longure de chiffre après la virgule
pfe 0:05a20e3e3179 111 switch (_DL)
pfe 0:05a20e3e3179 112 {
pfe 0:05a20e3e3179 113 case 1: {_HMSL_1 = (_Data[_Pospt+1]-48) ; _HMSL_2 = 0; break;}
pfe 0:05a20e3e3179 114 case 2: {_HMSL_1 = (_Data[_Pospt+2]-48)+10*(_Data[_Pospt+1]-48); _HMSL_2 = 0; break;}
pfe 0:05a20e3e3179 115 case 3: {_HMSL_1 = (_Data[_Pospt+2]-48)+10*(_Data[_Pospt+1]-48); _HMSL_2 = _Data[_Pospt+3]-48; break;}
pfe 0:05a20e3e3179 116 case 4: {_HMSL_1 = (_Data[_Pospt+2]-48)+10*(_Data[_Pospt+1]-48); _HMSL_2 = 10*(_Data[_Pospt+3]-48)+_Data[_Pospt+4]-48; break;}
pfe 0:05a20e3e3179 117 default : break;
pfe 0:05a20e3e3179 118 }
pfe 0:05a20e3e3179 119 //Antenna height unit
pfe 0:05a20e3e3179 120 jj=9;//Identification de la position de la dixième virgule dans le MsgGPS
pfe 0:05a20e3e3179 121 _DL=Get_Length(jj);
pfe 0:05a20e3e3179 122 if(_DL!=1) goto LabFin;//Vérification de la longueur du message de l'unité de la hauteur
pfe 0:05a20e3e3179 123 Set_Data(jj);
pfe 0:05a20e3e3179 124 _HUnite=_Data[0];//Extraction de l'unité de la hauteur
pfe 0:05a20e3e3179 125 if((_HMSL_H>35)||(_HUnite!='M'))goto LabFin;
pfe 0:05a20e3e3179 126
pfe 0:05a20e3e3179 127 GpsData.GGA_Valid = 1;
pfe 0:05a20e3e3179 128 GpsData.hh = _hh;
pfe 0:05a20e3e3179 129 GpsData.mm = _mm;
pfe 0:05a20e3e3179 130 GpsData.ss = _ss;
pfe 0:05a20e3e3179 131 //----------------------------------------------------------------------------
pfe 0:05a20e3e3179 132 GpsData.LatDeg = _LatDeg;
pfe 0:05a20e3e3179 133 GpsData.LatMin = _LatMin;
pfe 0:05a20e3e3179 134 GpsData.Latmmmm = _LatMin1*100+_LatMin2;
pfe 0:05a20e3e3179 135 GpsData.LatDir = _LatDir;
pfe 0:05a20e3e3179 136 //-----------------------------------------------------------------------------
pfe 0:05a20e3e3179 137 GpsData.LongDeg = _LongDeg;
pfe 0:05a20e3e3179 138 GpsData.LongMin = _LongMin;
pfe 0:05a20e3e3179 139 GpsData.Longmmmm = _LongMin1*100+_LongMin2;
pfe 0:05a20e3e3179 140 GpsData.LongDir = _LongDir;
pfe 0:05a20e3e3179 141 //-----------------------------------------------------------------------------
pfe 0:05a20e3e3179 142 GpsData.Qual = _Qual;
pfe 0:05a20e3e3179 143 //-----------------------------------------------------------------------------
pfe 0:05a20e3e3179 144 GpsData.HMSL = _HMSL_H*100+_HMSL_L;
pfe 0:05a20e3e3179 145 GpsData.SignHMSL = _SignHMSL;
pfe 0:05a20e3e3179 146 GpsData.HUnite = _HUnite;
pfe 0:05a20e3e3179 147 LabFin:
pfe 0:05a20e3e3179 148 asm{NOP}
pfe 0:05a20e3e3179 149 }