galmon/navparse.hh

95 lines
2.4 KiB
C++
Raw Normal View History

2020-01-11 12:29:10 -07:00
#pragma once
2019-10-12 06:57:44 -06:00
#include "navmon.hh"
#include "galileo.hh"
#include "gps.hh"
#include "beidou.hh"
#include "glonass.hh"
#include <map>
#include "tle.hh"
#include "sbas.hh"
#include "ephemeris.hh"
#include "rtcm.hh"
2019-10-12 06:57:44 -06:00
using namespace std; // XXX
struct SVPerRecv
{
int el{-1}, azi{-1}, db{-1};
time_t deltaHzTime{-1};
double deltaHz{-1};
double prres{-1};
2019-12-28 05:48:51 -07:00
int used{-1}; // -1 = unknown
int qi{-1}; // quality indicator, -1 = unknown
2019-10-12 06:57:44 -06:00
time_t t; // last seen
};
class InfluxPusher;
2019-10-12 06:57:44 -06:00
struct SVStat
{
int gnss;
2019-10-12 06:57:44 -06:00
GPSState gpsmsg; // continuously being updated
GPSState gpsmsg2, gpsmsg3; // new ephemeris being assembled here
GPSState ephgpsmsg, oldephgpsmsg; // always has a consistent ephemeris
2019-10-12 06:57:44 -06:00
GPSAlmanac gpsalma;
int wn() const; // gets from the 'live' message
int tow() const; // same
2019-10-12 06:57:44 -06:00
TLERepo::Match tleMatch;
double lastTLELookupX{0};
// live, ephemeris
BeidouMessage beidoumsg, ephBeidoumsg, oldephBeidoumsg;
// internal
BeidouMessage lastBeidouMessage1, lastBeidouMessage2;
2019-10-12 06:57:44 -06:00
// new galileo
// consistent, live
GalileoMessage ephgalmsg, galmsg, oldephgalmsg;
// internal
2019-10-12 06:57:44 -06:00
map<int, GalileoMessage> galmsgTyped;
bool osnma{false};
time_t osnmaTime{0};
2019-10-12 06:57:44 -06:00
// Glonass
GlonassMessage ephglomsg, glonassMessage, oldephglomsg;
2019-10-12 06:57:44 -06:00
pair<uint32_t, GlonassMessage> glonassAlmaEven;
map<uint64_t, SVPerRecv> perrecv;
double latestDisco{-1}, latestDiscoAge{-1}, timeDisco{-1000};
map<int, SBASCombo> sbas;
RTCMMessage::EphemerisDelta rtcmEphDelta;
RTCMMessage::ClockDelta rtcmClockDelta;
const GPSLikeEphemeris& liveIOD() const;
const GPSLikeEphemeris& prevIOD() const;
bool completeIOD() const;
double getCoordinates(double tow, Point* p, bool quiet=true) const;
double getOldEphCoordinates(double tow, Point* p, bool quiet=true) const;
void getSpeed(double tow, Vector* v) const;
DopplerData doDoppler(double tow, const Point& us, double freq) const;
void reportNewEphemeris(const SatID& id, InfluxPusher& idb);
2019-10-12 06:57:44 -06:00
};
typedef std::map<SatID, SVStat> svstats_t;
// a vector of pairs of latidude,vector<longitude,numsats>
2019-10-23 02:33:13 -06:00
typedef vector<pair<double,vector<tuple<double, int, int, int, double, double, double, double, double, double, double, double, double> > > > covmap_t;
covmap_t emitCoverage(const vector<Point>& sats);
2019-10-19 16:53:33 -06:00
struct xDOP
{
double gdop{-1};
double pdop{-1};
double tdop{-1};
2019-10-23 02:33:13 -06:00
double hdop{-1};
double vdop{-1};
2019-10-19 16:53:33 -06:00
};
2019-10-12 06:57:44 -06:00
2019-10-19 16:53:33 -06:00
xDOP getDOP(Point& us, vector<Point> sats);