Ahmed_PFE_Embarq_300415
Dependencies: C12832 LM75B mbed
Fork of Ahmed_Embarq_Prog by
Diff: _GPS/DecMsgGPGGA.h
- Revision:
- 1:197b9fed6092
- Parent:
- 0:05a20e3e3179
diff -r 05a20e3e3179 -r 197b9fed6092 _GPS/DecMsgGPGGA.h --- a/_GPS/DecMsgGPGGA.h Tue Apr 21 10:16:20 2015 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,149 +0,0 @@ -void DecodageGPGGA(unsigned char Ldata) //------------------------------------------------------- -{ - static unsigned short CommaNbr; - static unsigned short ii,jj; - GpsData.GGA_Valid = 0; - CommaNbr = 0; - for(ii=0;ii<Ldata;ii++) - { - if(_MsgGPSRx[ii]==',') - { - _PosV[CommaNbr] = ii; - CommaNbr++; - } - } - if(CommaNbr<11)goto LabFin; //Vérification de la longueur du message GPGGA - //par le nombre des vergules -//UTC of position - //extraction du temps UTC - jj=0;//Identification de la position de la première virgule dans le MsgGPS - _DL=Get_Length(jj); - if((_DL<9)||(_DL>10)) goto LabFin;//Vérification de la longueur du message de temps - Set_Data(jj); - Validation_StrToFloat(_DL); - if(_Npt !=1) goto LabFin; - if(_Pospt!=6) goto LabFin; - //Vérification de Time "hhmmss" - _hh=10*(_Data[0]-48)+(_Data[1]-48);//Extraction de l'heur - _mm=10*(_Data[2]-48)+(_Data[3]-48);//Extraction des minutes - _ss=10*(_Data[4]-48)+(_Data[5]-48);//Extraction des secondes - if((_hh>24)||(_mm>59)||(_ss>59))goto LabFin; -//Latitude of position - //extraction du Lattitude - jj=1;//Identification de la position de la deuxième virgule dans le MsgGPS - _DL=Get_Length(jj); - if((_DL<9)||(_DL>10)) goto LabFin;//Vérification de la longueur du message de lattitude - Set_Data(jj); - Validation_StrToFloat(_DL); - if(_Npt !=1) goto LabFin; - if(_Pospt!=4) goto LabFin; - - //Vérification du Lattitude "LatDegLatMin,LatMin1LatMin2" - _LatDeg =10*(_Data[0]-48)+(_Data[1]-48);//Extraction des degrés du lattitude - _LatMin =10*(_Data[2]-48)+(_Data[3]-48);//Extraction des minutes du lattitude - _LatMin1=10*(_Data[5]-48)+(_Data[6]-48);//Extraction des deux chiffres minutes après la virgule du lattitude - _LatMin2=10*(_Data[7]-48)+(_Data[8]-48);//Extraction des deux chiffres minutes après la virgule du lattitude - if((_LatDeg>90)||(_LatMin>59)||(_LatMin1>99)||(_LatMin2>99))goto LabFin; - //Vérification de la direction du Lattitude LatDir(N ou S) - jj=2;//Identification de la position de la troisième virgule dans le MsgGPS - _DL=Get_Length(jj); - if(_DL!=1) goto LabFin;//Vérification de la longueur du message de direction de latittude - Set_Data(jj); - _LatDir=_Data[0];//Extraction de le direction du latitude - if((_LatDir!='N')&&(_LatDir!='S'))goto LabFin; - // 01 byte - //Longitude of position - //extraction de la Longitude - jj=3;//Identification de la position de la quatrième virgule dans le MsgGPS - _DL=Get_Length(jj); - if((_DL<10)||(_DL>11)) goto LabFin;//Vérification de la longueur du message de la longitude - Set_Data(jj); - Validation_StrToFloat(_DL); - if(_Npt !=1) goto LabFin; - if(_Pospt!=5) goto LabFin; - //Vérification du La Longitude "LongDegLongMin,LongMin1LongMin2" - _LongDeg =100*(_Data[0]-48)+10*(_Data[1]-48)+(_Data[2]-48);//Extraction des degrés de la longitude - _LongMin =10*(_Data[3]-48)+(_Data[4]-48);//Extraction des minutes de la longitude - _LongMin1=10*(_Data[6]-48)+(_Data[7]-48);//Extraction des deux chiffres minutes après la virgule de la longitude - _LongMin2=10*(_Data[8]-48)+(_Data[9]-48);//Extraction des deux chiffres minutes après la virgule de la longitude - if((_LongDeg>180)||(_LongMin>59)||(_LongMin1>99)||(_LongMin2>99))goto LabFin; - //Vérification de la direction du Longitude LonDir(E ou W) - jj=4;//Identification de la position de la cinquième virgule dans le MsgGPS - _DL=Get_Length(jj); - if(_DL!=1) goto LabFin;//Vérification de la longueur du message de direction de la longitude - Set_Data(jj); - _LongDir=_Data[0];//Extraction de le direction de la longitude - if((_LongDir!='E')&&(_LongDir!='W'))goto LabFin; -//GPS Quality indicator - jj=5;//Identification de la position de la sixième virgule dans le MsgGPS - _DL=Get_Length(jj); - if(_DL!=1) goto LabFin;//Vérification de la longueur du message de l'ndicateur de qualité GPS - Set_Data(jj); - Validation_StrToFloat(_DL); - if(_Npt !=0) goto LabFin; - if(_Pospt!=0) goto LabFin; - _Qual=_Data[0]-48;//Extraction de l'information de la qualité du MsgGPs - if((_Qual<1)||(_Qual>2))goto LabFin; -//Antenna altitude above mean-sea-level "SignHMSLHMSL_HHMSL_L,HMSL_1HMSL_2" . - jj=8;//Identification de la position de la neuvième virgule dans le MsgGPS - _DL=Get_Length(jj); - if(_DL<3) goto LabFin;//Vérification de la longueur du message de l'altitude - Set_Data(jj); - _SignHMSL='+'; - if(_Data[0]=='-') - { - _DL=_DL-1; - _SignHMSL='-'; - for(ii=0;ii<_DL;ii++) _Data[ii]=_Data[ii+1]; - } - Validation_StrToFloat(_DL); - if(_Npt !=1) goto LabFin; - if(_Pospt ==0) goto LabFin; - switch (_Pospt) - { - case 1: {_HMSL_L = (_Data[0]-48) ; _HMSL_H = 0; break;} - case 2: {_HMSL_L = (_Data[1]-48)+10*(_Data[0]-48); _HMSL_H = 0; break;} - case 3: {_HMSL_L = (_Data[2]-48)+10*(_Data[1]-48); _HMSL_H = (_Data[0]-48); break;} - case 4: {_HMSL_L = (_Data[3]-48)+10*(_Data[2]-48); _HMSL_H = (_Data[1]-48)+10*(_Data[0]-48); break;} - default : break; - } - _DL=_DL-_Pospt-1; //La longure de chiffre après la virgule - switch (_DL) - { - case 1: {_HMSL_1 = (_Data[_Pospt+1]-48) ; _HMSL_2 = 0; break;} - case 2: {_HMSL_1 = (_Data[_Pospt+2]-48)+10*(_Data[_Pospt+1]-48); _HMSL_2 = 0; break;} - case 3: {_HMSL_1 = (_Data[_Pospt+2]-48)+10*(_Data[_Pospt+1]-48); _HMSL_2 = _Data[_Pospt+3]-48; break;} - 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;} - default : break; - } - //Antenna height unit - jj=9;//Identification de la position de la dixième virgule dans le MsgGPS - _DL=Get_Length(jj); - if(_DL!=1) goto LabFin;//Vérification de la longueur du message de l'unité de la hauteur - Set_Data(jj); - _HUnite=_Data[0];//Extraction de l'unité de la hauteur - if((_HMSL_H>35)||(_HUnite!='M'))goto LabFin; - - GpsData.GGA_Valid = 1; - GpsData.hh = _hh; - GpsData.mm = _mm; - GpsData.ss = _ss; - //---------------------------------------------------------------------------- - GpsData.LatDeg = _LatDeg; - GpsData.LatMin = _LatMin; - GpsData.Latmmmm = _LatMin1*100+_LatMin2; - GpsData.LatDir = _LatDir; - //----------------------------------------------------------------------------- - GpsData.LongDeg = _LongDeg; - GpsData.LongMin = _LongMin; - GpsData.Longmmmm = _LongMin1*100+_LongMin2; - GpsData.LongDir = _LongDir; - //----------------------------------------------------------------------------- - GpsData.Qual = _Qual; - //----------------------------------------------------------------------------- - GpsData.HMSL = _HMSL_H*100+_HMSL_L; - GpsData.SignHMSL = _SignHMSL; - GpsData.HUnite = _HUnite; -LabFin: -asm{NOP} -} \ No newline at end of file