logic to store whole f/nav ephemerides from rtcm to the database

eph-store
bert hubert 2020-07-21 18:14:06 +02:00
parent 85377da7c7
commit 2aa1c37019
2 changed files with 67 additions and 3 deletions

View File

@ -2503,6 +2503,50 @@ try
}
}
else if(rm.type == 1045 || rm.type == 1046) { // Galileo Ephemeris
// rm.d_gm will now contain an at least partially filled out Galileo ephemeris
// 1045 is F/NAV, 1046 is I/NAV
// we have no real need for the I/NAV since we have that in spades
if(rm.type == 1045) {
const auto& eg = rm.d_gm;
SatID id;
id.gnss = 2;
id.sv = rm.d_sv;
id.sigid = 6; // seems reasonable for E5a
static map<pair<int, int>, int> lastT0e;
pair<int, int> key(nmm.sourceid(), rm.d_sv);
if(!lastT0e.count(key) || lastT0e[key] != eg.t0e) {
idb.addValue(id, "ephemeris-actual", {
{"iod", eg.getIOD()},
{"t0e", eg.t0e},
{"sqrta", eg.sqrtA},
{"e", eg.e},
{"cuc", eg.cuc},
{"cus", eg.cus},
{"crc", eg.crc},
{"crs", eg.crs},
{"m0", eg.m0},
{"deltan", eg.deltan},
{"i0", eg.i0},
{"cic", eg.cic},
{"cis", eg.cis},
{"omegadot", eg.omegadot},
{"omega0", eg.omega0},
{"idot", eg.idot},
{"af0", eg.af0},
{"af1", eg.af1},
{"af2", eg.af2},
{"t0c", eg.t0c},
{"omega", eg.omega}}, nmm.localutcseconds(), nmm.sourceid());
}
lastT0e[key] = eg.t0e;
}
}
for(const auto& cd : rm.d_clocks) {
auto iter = g_svstats.find(cd.id);
if(iter != g_svstats.end())

26
rtcm.cc
View File

@ -185,13 +185,33 @@ DF 385: Full seconds since the beginning of the GPS week
d_gm.wn = gbum(off, 12);
d_gm.iodnav = gbum(off, 10);
d_gm.sisa = gbum(off, 8);
// skip idot
off += 14;
d_gm.idot = gbsm(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);
off += 16 + 16 + 32 + 16 + 32 + 16 + 32 + 14 +16+ 32 +16 + 32 + 16 + 32 +24;
//
d_gm.crs = gbsm(off, 16);
d_gm.deltan = gbsm(off, 16);
d_gm.m0 = gbsm(off, 32);
d_gm.cuc = gbsm(off, 16);
d_gm.e = gbum(off, 32);
d_gm.cus = gbsm(off, 16);
d_gm.sqrtA = gbum(off, 32);
d_gm.t0e = gbum(off, 14);
//
d_gm.cic = gbsm(off, 16);
d_gm.omega0 = gbsm(off, 32);
d_gm.cis = gbsm(off, 16);
d_gm.i0 = gbsm(off, 32);
d_gm.crc = gbsm(off, 16);
d_gm.omega = gbsm(off, 32);
d_gm.omegadot = gbsm(off, 24);
// 16 + 16 + 32 + 16 + 32 + 16 + 32 + 14 +
// crs deln M0 cuc e cus sqrA toe cic OM0 cis i0 crc omeg omegdot
// off += 16+ 32 +16 + 32 + 16 + 32 +24;
d_gm.BGDE1E5a = gbsm(off, 10);
if(type == 1046) { // I/NAV
d_gm.BGDE1E5b = gbsm(off, 10);