diff --git a/navparse.cc b/navparse.cc index 89bc4f8..7f2b841 100644 --- a/navparse.cc +++ b/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, int> lastT0e; + + pair 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()) diff --git a/rtcm.cc b/rtcm.cc index 3f23e89..1e92073 100644 --- a/rtcm.cc +++ b/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.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);