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"
|
2020-02-25 04:12:35 -07:00
|
|
|
#include "sbas.hh"
|
|
|
|
#include "ephemeris.hh"
|
2020-04-25 03:43:25 -06:00
|
|
|
#include "rtcm.hh"
|
2020-02-25 04:12:35 -07:00
|
|
|
|
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
|
|
|
|
};
|
|
|
|
|
2020-02-25 04:12:35 -07:00
|
|
|
class InfluxPusher;
|
2019-10-12 06:57:44 -06:00
|
|
|
struct SVStat
|
|
|
|
{
|
2020-02-25 04:12:35 -07:00
|
|
|
int gnss;
|
2019-10-12 06:57:44 -06:00
|
|
|
|
2020-02-25 04:12:35 -07: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;
|
2020-02-25 04:12:35 -07:00
|
|
|
|
|
|
|
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};
|
|
|
|
|
2020-02-25 04:12:35 -07:00
|
|
|
// live, ephemeris
|
|
|
|
BeidouMessage beidoumsg, ephBeidoumsg, oldephBeidoumsg;
|
|
|
|
// internal
|
|
|
|
BeidouMessage lastBeidouMessage1, lastBeidouMessage2;
|
|
|
|
|
2019-10-12 06:57:44 -06:00
|
|
|
// new galileo
|
2020-02-25 04:12:35 -07:00
|
|
|
// consistent, live
|
|
|
|
GalileoMessage ephgalmsg, galmsg, oldephgalmsg;
|
|
|
|
// internal
|
2019-10-12 06:57:44 -06:00
|
|
|
map<int, GalileoMessage> galmsgTyped;
|
|
|
|
|
|
|
|
// Glonass
|
2020-02-25 04:12:35 -07:00
|
|
|
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};
|
|
|
|
|
2020-02-25 04:12:35 -07:00
|
|
|
map<int, SBASCombo> sbas;
|
|
|
|
|
2020-04-25 03:43:25 -06:00
|
|
|
RTCMMessage::EphemerisDelta rtcmEphDelta;
|
2020-07-03 15:07:43 -06:00
|
|
|
RTCMMessage::ClockDelta rtcmClockDelta;
|
2020-04-25 03:43:25 -06:00
|
|
|
|
2020-02-25 04:12:35 -07:00
|
|
|
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;
|
|
|
|
|
2019-10-15 10:01:22 -06:00
|
|
|
// 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);
|