various rtcm improvements, some documentation, navdump emitted 0x0 values for af2. rtcm can now parse ephemerides for Galileo.
parent
38899e9379
commit
bcc42cd789
|
@ -84,8 +84,8 @@ These measurements are tagged by gnssid, sv
|
|||
* tow
|
||||
* udi
|
||||
* rtcm-clock-correction
|
||||
* dclock0
|
||||
* dclock1
|
||||
* dclock0: in meters
|
||||
* dclock1: meters/s
|
||||
* dclock2
|
||||
* ssr-iod
|
||||
* ssr-provider
|
||||
|
|
33
navdump.cc
33
navdump.cc
|
@ -535,7 +535,13 @@ try
|
|||
if(gm.alma3.e1bhs != 0) {
|
||||
cout <<" gm.tow "<<gm.tow<<" gmwtypes.tow "<< gmwtypes[{sv,9}].tow <<" ";
|
||||
}
|
||||
cout<<" "<<gmwtypes[{sv,9}].alma3.svid <<" af0 "<<gm.alma3.af0<<" af1 "<< gm.alma3.af1 <<" e5bhs "<< gm.alma3.e5bhs<<" e1bhs "<< gm.alma3.e1bhs <<" a0g " << gm.a0g <<" a1g "<< gm.a1g <<" t0g "<<gm.t0g <<" wn0g "<<gm.wn0g;
|
||||
cout<<" "<<gmwtypes[{sv,9}].alma3.svid <<" af0 "<<gm.alma3.af0<<" af1 "<< gm.alma3.af1 <<" e5bhs "<< gm.alma3.e5bhs<<" e1bhs "<< gm.alma3.e1bhs <<" a0g " << gm.a0g <<" a1g "<< gm.a1g <<" t0g "<<gm.t0g <<" wn0g "<<gm.wn0g <<" delta-gps "<< gm.getGPSOffset(gm.tow, gm.wn).first<<"ns";
|
||||
|
||||
int dw = (int)(gm.wn%64) - (int)(gm.wn0g);
|
||||
if(dw > 31)
|
||||
dw = 31- dw;
|
||||
int delta = dw*7*86400 + gm.tow - gm.getT0g(); // NOT ephemeris age tricks
|
||||
cout<<" wn%64 "<< (gm.wn%64) << " dw " << dw <<" delta " << delta;
|
||||
}
|
||||
|
||||
cout<<endl;
|
||||
|
@ -561,7 +567,7 @@ try
|
|||
if(frame == 1) {
|
||||
|
||||
gpswn = gs.wn;
|
||||
cout << "gpshealth = "<<(int)gs.gpshealth<<", wn "<<gs.wn << " t0c "<<gs.t0c << " af0 " << gs.af0 << " af1 " << gs.af1 <<" af2 " << gs.af2;
|
||||
cout << "gpshealth = "<<(int)gs.gpshealth<<", wn "<<gs.wn << " t0c "<<gs.t0c << " af0 " << gs.af0 << " af1 " << gs.af1 <<" af2 " << (int)gs.af2;
|
||||
if(auto iter = oldgs1s.find(sv); iter != oldgs1s.end() && iter->second.t0c != gs.t0c) {
|
||||
auto oldOffset = getGPSAtomicOffset(gs.tow, iter->second);
|
||||
auto newOffset = getGPSAtomicOffset(gs.tow, gs);
|
||||
|
@ -693,8 +699,25 @@ try
|
|||
cout<<makeSatIDName(cd.id)<<": dclock0 "<< cd.dclock0 <<" dclock1 " << cd.dclock1 <<" dclock2 "<< cd.dclock2 << endl;
|
||||
}
|
||||
}
|
||||
else
|
||||
cout<<endl;
|
||||
else if(rm.type == 1045 || rm.type == 1046) {
|
||||
|
||||
SatID sid;
|
||||
sid.gnss = 2;
|
||||
sid.sv = rm.d_sv;
|
||||
sid.sigid = (rm.type == 1045) ? 5 : 1;
|
||||
|
||||
cout<< makeSatIDName(sid)<<" ";
|
||||
if(rm.type == 1045)
|
||||
cout<<"F/NAV ";
|
||||
else
|
||||
cout <<"I/NAV ";
|
||||
|
||||
cout <<" iode " << rm.d_gm.iodnav << " sisa " << (unsigned int) rm.d_gm.sisa << " af0 "<<rm.d_gm.af0 <<" af1 " << rm.d_gm.af1 <<" af2 " << (int) rm.d_gm.af2 << endl;
|
||||
}
|
||||
else {
|
||||
cout<<" len " << nmm.rm().contents().size() << endl;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
else if(nmm.type() == NavMonMessage::GPSCnavType) {
|
||||
|
@ -746,7 +769,7 @@ try
|
|||
cout<<" Timejump: "<<oldOffset.first - newOffset.first<<" after "<<(bm.getT0c() - msgs[sv].getT0c() )<<" seconds";
|
||||
}
|
||||
msgs[sv]=bm;
|
||||
cout<<" wn "<<bm.wn<<" t0c "<<(int)bm.t0c<<" aodc "<< (int)bm.aodc <<" aode "<< (int)bm.aode <<" sath1 "<< (int)bm.sath1 << " urai "<<(int)bm.urai << " af0 "<<bm.a0 <<" af1 " <<bm.a1 <<" af2 "<<bm.a2;
|
||||
cout<<" wn "<<bm.wn<<" t0c "<<(int)bm.t0c<<" aodc "<< (int)bm.aodc <<" aode "<< (int)bm.aode <<" sath1 "<< (int)bm.sath1 << " urai "<<(int)bm.urai << " af0 "<<bm.a0 <<" af1 " <<bm.a1 <<" af2 "<< (int)bm.a2;
|
||||
auto offset = bm.getAtomicOffset();
|
||||
cout<< ", "<<offset.first<<"ns " << (offset.second * 3600) <<" ns/hour "<< ephAge(bm.sow, bm.t0c*8);
|
||||
}
|
||||
|
|
39
rtcm.cc
39
rtcm.cc
|
@ -9,10 +9,23 @@ void RTCMMessage::parse(const std::string& str)
|
|||
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: "<<type << " of size "<<str.size()<<"\n";
|
||||
if(type == 1057 || type == 1240) {
|
||||
|
@ -165,5 +178,31 @@ DF 385: Full seconds since the beginning of the GPS week
|
|||
d_clocks.push_back(cd);
|
||||
}
|
||||
}
|
||||
else if(type == 1045 || type == 1046) { // F/NAV or I/NAV respectively ephemeris
|
||||
int off=12;
|
||||
d_sv = gbum(off, 6);
|
||||
d_gm.wn = gbum(off, 12);
|
||||
d_gm.iodnav = gbum(off, 10);
|
||||
d_gm.sisa = gbum(off, 8);
|
||||
off += 14;
|
||||
d_gm.t0c = gbum(off, 14);
|
||||
d_gm.af2 = gbsm(off, 6);
|
||||
d_gm.af1 = gbsm(off, 21);
|
||||
d_gm.af0 = gbsm(off, 31);
|
||||
|
||||
/*
|
||||
setbitu(rtcm->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;
|
||||
*/
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
|
5
rtcm.hh
5
rtcm.hh
|
@ -3,6 +3,8 @@
|
|||
#include <stdio.h>
|
||||
#include "navmon.hh"
|
||||
#include <vector>
|
||||
#include "galileo.hh"
|
||||
|
||||
struct RTCMFrame
|
||||
{
|
||||
std::string payload;
|
||||
|
@ -50,5 +52,6 @@ struct RTCMMessage
|
|||
|
||||
std::vector<EphemerisDelta> d_ephs;
|
||||
std::vector<ClockDelta> d_clocks;
|
||||
|
||||
GalileoMessage d_gm;
|
||||
int d_sv;
|
||||
};
|
||||
|
|
|
@ -13,10 +13,14 @@ using namespace std;
|
|||
bool RTCMReader::get(RTCMFrame& rf)
|
||||
{
|
||||
int c;
|
||||
bool skipped=false;
|
||||
while( ((c=fgetc(d_fp)) != -1) && c != 211) {
|
||||
cerr<<"Skipped, not yet 211 character "<<endl;
|
||||
skipped=true;
|
||||
cerr<<".";
|
||||
continue;
|
||||
}
|
||||
if(skipped)
|
||||
cerr<<endl;
|
||||
|
||||
if(c != 211) {
|
||||
cerr<<"EOF"<<endl;
|
||||
|
@ -148,6 +152,7 @@ int main(int argc, char** argv)
|
|||
|
||||
RTCMReader rr(0);
|
||||
RTCMFrame rf;
|
||||
cerr<<"Station "<<g_srcid<<endl;
|
||||
while(rr.get(rf)) {
|
||||
// cerr<<"Got a "<<rf.payload.size()<<" byte frame"<<endl;
|
||||
RTCMMessage rm;
|
||||
|
|
Loading…
Reference in New Issue