dd
Dependencies: C12832 LM75B mbed
_GPS/DecMsgGPGGA.h
- Committer:
- pfe
- Date:
- 2015-04-21
- Revision:
- 0:05a20e3e3179
File content as of revision 0:05a20e3e3179:
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} }