pull/135/head
bert hubert 2020-07-29 11:38:32 +02:00
parent b500182649
commit f96df29038
5 changed files with 97 additions and 28 deletions

View File

@ -25,7 +25,7 @@ endif
CHEAT_ARG := $(shell ./update-git-hash-if-necessary)
PROGRAMS = navparse ubxtool navnexus navcat navrecv navdump testrunner navdisplay tlecatch reporter sp3feed \
galmonmon rinreport rinjoin rtcmtool gndate
galmonmon rinreport rinjoin rtcmtool gndate septool
all: navmon.pb.cc $(PROGRAMS)
@ -94,7 +94,7 @@ galmonmon: galmonmon.o ext/fmt-6.1.2/src/format.o $(SIMPLESOCKETS) minicurl.o ub
$(CXX) -std=gnu++17 $^ -o $@ -pthread -L/usr/local/lib -lprotobuf -lcurl
navdump: navdump.o ext/fmt-6.1.2/src/format.o bits.o navmon.pb.o gps.o ephemeris.o beidou.o glonass.o navmon.o $(patsubst %.cc,%.o,$(wildcard ext/sgp4/libsgp4/*.cc)) tle.o sp3.o osen.o trkmeas.o githash.o rinex.o sbas.o rtcm.o ${EXTRADEP}
navdump: navdump.o ext/fmt-6.1.2/src/format.o bits.o navmon.pb.o gps.o ephemeris.o beidou.o glonass.o navmon.o $(patsubst %.cc,%.o,$(wildcard ext/sgp4/libsgp4/*.cc)) tle.o sp3.o osen.o trkmeas.o githash.o rinex.o sbas.o rtcm.o galileo.o ${EXTRADEP}
$(CXX) -std=gnu++17 $^ -o $@ -L/usr/local/lib -pthread -lprotobuf -lz
navdisplay: navdisplay.o ext/fmt-6.1.2/src/format.o bits.o navmon.pb.o gps.o ephemeris.o beidou.o glonass.o ephemeris.o navmon.o osen.o githash.o
@ -128,6 +128,10 @@ rtcmtool: rtcmtool.o navmon.pb.o githash.o ext/fmt-6.1.2/src/format.o bits.o nm
ubxtool: navmon.pb.o ubxtool.o ubx.o bits.o ext/fmt-6.1.2/src/format.o galileo.o gps.o beidou.o navmon.o ephemeris.o $(SIMPLESOCKETS) osen.o githash.o nmmsender.o zstdwrap.o
$(CXX) -std=gnu++17 $^ -o $@ -L/usr/local/lib -lprotobuf -pthread -lzstd
septool: navmon.pb.o septool.o bits.o ext/fmt-6.1.2/src/format.o galileo.o gps.o beidou.o navmon.o ephemeris.o $(SIMPLESOCKETS) osen.o githash.o nmmsender.o zstdwrap.o
$(CXX) -std=gnu++17 $^ -o $@ -L/usr/local/lib -lprotobuf -pthread -lzstd
testrunner: navmon.pb.o testrunner.o ubx.o bits.o ext/fmt-6.1.2/src/format.o galileo.o gps.o beidou.o ephemeris.o sp3.o osen.o navmon.o rinex.o githash.o
$(CXX) -std=gnu++17 $^ -o $@ -L/usr/local/lib -lprotobuf -lz

View File

@ -131,9 +131,37 @@ Observer and SV measurements:
* ele: calculated elevation for SV from this receiver
* prres: pseudorange residual according to receiver
* qi: 0-7, quality indicator according to receiver
* used: did the receiver use this SV?
* ubx\_jamming
* noise\_per\_ms: the Ublox noisePerMS field
* agccnt: the Ublox automatic gain correction "count"
* jamind: The Ublox jamming indicator
* flag: The Ublox jamming flag field
Fed by separate tool:
SP3 design, tagged by GNSSID, SV:
* sp3\_data:
* x
* y
* z
* clk
* provider
ephemeris, tagged by GNSSID, SV, SIGID:
* active-ephemeris
* all the raw parameters
GDOP/PDOP stats?
* covdop
* lat
* lon
* cov5
* cov10
* cov20
* hdop5
* hdop10
* hdop20
etc

View File

@ -700,19 +700,27 @@ try
}
}
else if(rm.type == 1045 || rm.type == 1046) {
static ofstream af0inavstr("af0inav.csv"), af0fnavstr("af0fnav.csv"), bgdstr("bgdstr.csv");
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;
if(rm.type == 1045) {
af0fnavstr << nmm.localutcseconds()<<" " << rm.d_sv <<" " << rm.d_gm.t0c << " " << rm.d_gm.af0 << "\n";
cout<<"F/NAV";
}
else {
af0inavstr << nmm.localutcseconds() <<" " << rm.d_sv <<" " <<rm.d_gm.t0c<<" "<< rm.d_gm.af0 << "\n";
bgdstr << nmm.localutcseconds() <<" " << rm.d_sv<<" " <<rm.d_gm.BGDE1E5a <<" " << rm.d_gm.BGDE1E5b << "\n";
cout <<"I/NAV";
}
cout <<" iode " << rm.d_gm.iodnav << " sisa " << (unsigned int) rm.d_gm.sisa << " t0c " << rm.d_gm.t0c << " af0 "<<rm.d_gm.af0 <<" af1 " << rm.d_gm.af1 <<" af2 " << (int) rm.d_gm.af2 << " BGDE1E5a " << rm.d_gm.BGDE1E5a;
if(rm.type == 1046) // I/NAV
cout <<" BGDE1E5b "<< rm.d_gm.BGDE1E5b;
cout<<endl;
}
else {
cout<<" len " << nmm.rm().contents().size() << endl;

View File

@ -295,10 +295,6 @@ void SVStat::reportNewEphemeris(const SatID& id, InfluxPusher& idb)
if(gnss==2) {
const auto& eg = ephgalmsg;
idb.addValue(id, "ephemeris-actual", {
{"iod", eg.getIOD()}}, satUTCTime(id));
idb.addValue(id, "ephemeris-actual", {
{"iod", eg.getIOD()},
@ -629,10 +625,11 @@ try
string localAddress("127.0.0.1:29599");
string htmlDir("./html");
string influxDBName("null");
bool doGalileoReportSpeedup{false};
bool doLogRFData{false};
app.add_flag("--version", doVERSION, "show program version and copyright");
app.add_flag("--log-rf-data", doLogRFData, "store per station RF/correlator data");
app.add_flag("--gal-report-speedup", doGalileoReportSpeedup, "skip debugging data, glonass, beidou, SBAS");
app.add_option("--bind,-b", localAddress, "Address to bind to");
app.add_option("--html", htmlDir, "Where to source the HTML & JavaScript");
app.add_option("--influxdb", influxDBName, "Name of influxdb database");
@ -651,7 +648,7 @@ try
// feenableexcept(FE_DIVBYZERO | FE_INVALID | FE_OVERFLOW );
// g_tles.parseFile("active.txt");
// g_tles.parseFile("active.txt");
g_tles.parseFile("galileo.txt");
g_tles.parseFile("glo-ops.txt");
@ -1994,7 +1991,19 @@ try
auto newOffset = svstat.galmsg.getAtomicOffset(svstat.tow());
svstat.timeDisco = oldOffset.first - newOffset.first;
if(fabs(svstat.timeDisco) < 10000)
idb.addValue(id, "clock_jump_ns", {{"value", svstat.timeDisco}}, satUTCTime(id));
idb.addValue(id, "clock_jump_ns", {
{"jump", svstat.timeDisco},
{"duration", ephAge(svstat.galmsg.t0c * 60, oldgm.t0c * 60)},
{"old-af0", oldgm.af0},
{"old-af1", oldgm.af1},
{"old-af2", oldgm.af2},
{"old-t0c", oldgm.t0c * 60},
{"new-af0", svstat.galmsg.af0},
{"new-af1", svstat.galmsg.af1},
{"new-af2", svstat.galmsg.af2},
{"new-t0c", svstat.galmsg.t0c * 60}
}, satUTCTime(id));
}
}
}
@ -2288,7 +2297,8 @@ try
}
else if(nmm.type()== NavMonMessage::DebuggingType) {
// continue; // speedup
if(doGalileoReportSpeedup)
continue; // speedup
auto ret = parseTrkMeas(basic_string<uint8_t>((const uint8_t*)nmm.dm().payload().c_str(), nmm.dm().payload().size()));
for(const auto& tss : ret) {
@ -2382,8 +2392,22 @@ try
auto oldOffset = getGPSAtomicOffset(gm.tow, oldgm);
auto newOffset = getGPSAtomicOffset(gm.tow, gm);
svstat.timeDisco = oldOffset.first - newOffset.first;
if(fabs(svstat.timeDisco) < 10000)
idb.addValue(id, "clock_jump_ns", {{"value", svstat.timeDisco}}, satUTCTime(id));
if(fabs(svstat.timeDisco) < 10000) {
idb.addValue(id, "clock_jump_ns", {
{"jump", svstat.timeDisco},
{"duration", ephAge(gm.t0c * 16, oldgm.t0c * 16)},
{"old-af0", oldgm.af0},
{"old-af1", oldgm.af1},
{"old-af2", oldgm.af2},
{"old-t0c", oldgm.t0c * 16},
{"new-af0", gm.af0},
{"new-af1", gm.af1},
{"new-af2", gm.af2},
{"new-t0c", gm.t0c * 16}
}, satUTCTime(id));
}
}
}
else if(frame==2) {
@ -2435,7 +2459,8 @@ try
if(rm.type == 1057 || rm.type == 1240) {
for(const auto& ed : rm.d_ephs) {
auto iter = g_svstats.find(ed.id);
if(iter != g_svstats.end() && iter->second.completeIOD() && iter->second.liveIOD().getIOD() == ed.iod)
// XXX NAVCAST ONLY
if(iter != g_svstats.end() && iter->second.completeIOD() && iter->second.liveIOD().getIOD() == ed.iod && nmm.sourceid()==300)
iter->second.rtcmEphDelta = ed;
idb.addValue(ed.id, "rtcm-eph-correction", {
@ -2461,7 +2486,7 @@ try
for(const auto& cd : rm.d_clocks) {
auto iter = g_svstats.find(cd.id);
if(iter != g_svstats.end())
if(iter != g_svstats.end() && nmm.sourceid()==300) /// XXX wrong
iter->second.rtcmClockDelta = cd;
idb.addValue(cd.id, "rtcm-clock-correction", {
@ -2481,7 +2506,7 @@ try
else if(rm.type == 1060 || rm.type == 1243) {
for(const auto& ed : rm.d_ephs) {
auto iter = g_svstats.find(ed.id);
if(iter != g_svstats.end() && iter->second.completeIOD() && iter->second.liveIOD().getIOD() == ed.iod)
if(iter != g_svstats.end() && iter->second.completeIOD() && iter->second.liveIOD().getIOD() == ed.iod && nmm.sourceid()==300)
iter->second.rtcmEphDelta = ed;
idb.addValue(ed.id, "rtcm-eph-correction", {
@ -2549,7 +2574,7 @@ try
for(const auto& cd : rm.d_clocks) {
auto iter = g_svstats.find(cd.id);
if(iter != g_svstats.end())
if(iter != g_svstats.end() && nmm.sourceid()==300)
iter->second.rtcmClockDelta = cd;
idb.addValue(cd.id, "rtcm-clock-correction", {
@ -2588,7 +2613,9 @@ try
}
else if(nmm.type()== NavMonMessage::BeidouInavTypeD1) {
// continue; // XXX speedup
// if(doGalileoReportSpeedup)
// continue; // speedup
try {
SatID id{nmm.bid1().gnssid(), nmm.bid1().gnsssv(), nmm.bid1().sigid()};
@ -2687,7 +2714,9 @@ try
*/
}
else if(nmm.type()== NavMonMessage::GlonassInavType) {
// continue; // XXX speedup
// if(doGalileoReportSpeedup)
// continue; // speedup
SatID id{nmm.gloi().gnssid(), nmm.gloi().gnsssv(), nmm.gloi().sigid()};
auto& svstat = g_svstats[id];
svstat.gnss = id.gnss;
@ -2754,7 +2783,9 @@ try
// cout<<"GLONASS R"<<id.second<<" str "<<strno<<endl;
}
else if(nmm.type() == NavMonMessage::SBASMessageType) {
// continue; // XXX speedup
if(doGalileoReportSpeedup)
continue; // speedup
auto& sb = g_sbas[nmm.sbm().gnsssv()];
sb.perrecv[nmm.sourceid()].last_seen = nmm.localutcseconds();

View File

@ -85,8 +85,6 @@ auto worker(HanderOuter<string>* ho)
int main(int argc, char** argv)
{
ifstream filefile(argv[1]);
string fname;
deque<string> files;