logic to store whole f/nav ephemerides from rtcm to the database
parent
85377da7c7
commit
2aa1c37019
44
navparse.cc
44
navparse.cc
|
@ -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) {
|
for(const auto& cd : rm.d_clocks) {
|
||||||
auto iter = g_svstats.find(cd.id);
|
auto iter = g_svstats.find(cd.id);
|
||||||
if(iter != g_svstats.end())
|
if(iter != g_svstats.end())
|
||||||
|
|
26
rtcm.cc
26
rtcm.cc
|
@ -185,13 +185,33 @@ DF 385: Full seconds since the beginning of the GPS week
|
||||||
d_gm.wn = gbum(off, 12);
|
d_gm.wn = gbum(off, 12);
|
||||||
d_gm.iodnav = gbum(off, 10);
|
d_gm.iodnav = gbum(off, 10);
|
||||||
d_gm.sisa = gbum(off, 8);
|
d_gm.sisa = gbum(off, 8);
|
||||||
// skip idot
|
d_gm.idot = gbsm(off, 14);
|
||||||
off += 14;
|
|
||||||
d_gm.t0c = gbum(off, 14);
|
d_gm.t0c = gbum(off, 14);
|
||||||
d_gm.af2 = gbsm(off, 6);
|
d_gm.af2 = gbsm(off, 6);
|
||||||
d_gm.af1 = gbsm(off, 21);
|
d_gm.af1 = gbsm(off, 21);
|
||||||
d_gm.af0 = gbsm(off, 31);
|
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);
|
d_gm.BGDE1E5a = gbsm(off, 10);
|
||||||
if(type == 1046) { // I/NAV
|
if(type == 1046) { // I/NAV
|
||||||
d_gm.BGDE1E5b = gbsm(off, 10);
|
d_gm.BGDE1E5b = gbsm(off, 10);
|
||||||
|
|
Loading…
Reference in New Issue