#include "rtcm.hh" #include "bits.hh" #include #include using namespace std; void RTCMMessage::parse(const std::string& str) { d_gm={}; // memset(&d_gm, 0, sizeof(d_gm)); auto gbu=[&str](int offset, int bits) { return getbitu((const unsigned char*)str.c_str(), offset, bits); }; auto gbum=[&str](int& offset, int bits) { unsigned int ret = getbitu((const unsigned char*)str.c_str(), offset, bits); offset += bits; return ret; }; auto gbs=[&str](int offset, int bits) { return getbits((const unsigned char*)str.c_str(), offset, bits); }; auto gbsm=[&str](int& offset, int bits) { int ret = getbits((const unsigned char*)str.c_str(), offset, bits); offset += bits; return ret; }; type = gbu(0, 12); // cout<<"Message number: "< ("; // cout<< ed.dradial<<", "<buff,i,12,1045 ); i+=12; setbitu(rtcm->buff,i, 6,prn ); i+= 6; setbitu(rtcm->buff,i,12,week ); i+=12; setbitu(rtcm->buff,i,10,eph->iode); i+=10; setbitu(rtcm->buff,i, 8,eph->sva ); i+= 8; setbits(rtcm->buff,i,14,idot ); i+=14; setbitu(rtcm->buff,i,14,toc ); i+=14; setbits(rtcm->buff,i, 6,af2 ); i+= 6; setbits(rtcm->buff,i,21,af1 ); i+=21; setbits(rtcm->buff,i,31,af0 ); i+=31; setbits(rtcm->buff,i,16,crs ); i+=16; setbits(rtcm->buff,i,16,deln ); i+=16; setbits(rtcm->buff,i,32,M0 ); i+=32; setbits(rtcm->buff,i,16,cuc ); i+=16; setbitu(rtcm->buff,i,32,e ); i+=32; setbits(rtcm->buff,i,16,cus ); i+=16; setbitu(rtcm->buff,i,32,sqrtA ); i+=32; setbitu(rtcm->buff,i,14,toe ); i+=14; setbits(rtcm->buff,i,16,cic ); i+=16; setbits(rtcm->buff,i,32,OMG0 ); i+=32; setbits(rtcm->buff,i,16,cis ); i+=16; setbits(rtcm->buff,i,32,i0 ); i+=32; setbits(rtcm->buff,i,16,crc ); i+=16; setbits(rtcm->buff,i,32,omg ); i+=32; setbits(rtcm->buff,i,24,OMGd ); i+=24; setbits(rtcm->buff,i,10,bgd1 ); i+=10; 1045: F/NAV setbitu(rtcm->buff,i, 2,oshs ); i+= 2; /* E5a SVH */ setbitu(rtcm->buff,i, 1,osdvs ); i+= 1; /* E5a DVS */ setbitu(rtcm->buff,i, 7,0 ); i+= 7; /* reserved */ 1046: I/NAV setbits(rtcm->buff,i,10,bgd2 ); i+=10; setbitu(rtcm->buff,i, 2,oshs1 ); i+= 2; /* E5b SVH */ setbitu(rtcm->buff,i, 1,osdvs1 ); i+= 1; /* E5b DVS */ setbitu(rtcm->buff,i, 2,oshs2 ); i+= 2; /* E1 SVH */ setbitu(rtcm->buff,i, 1,osdvs2 ); i+= 1; /* E1 DVS */ #endif } else if(type == 1059 || type == 1242) { // GPS/Galileo bias int off = 0; int msgnum = gbum(off, 12); int gpstime = gbum(off, 20); int uinterval = gbum(off, 4); int mmi = gbum(off, 1); int iodssr = gbum(off, 4); int ssrprov = gbum(off, 16); int ssrsol = gbum(off, 4); int numsats = gbum(off, 6); // cout <<"msgnum "<15 - Reserved. */ } } } }