/*------------------------------------------------------------------------------ * rtklib.h : RTKLIB constants, type definitions and function prototypes * * Copyright (C) 2006-2009 by T.TAKASU, All rights reserved. * * version : $Revision: 1.1 $ $Date: 2008/07/17 21:48:06 $ * history : 2007/01/13 1.0 new * 2008/07/15 1.1 refactored for RTKLIB ver.2.1 * 2009/01/02 1.2 modify rtk positioning api * add stream, stream server, rtk server functions *-----------------------------------------------------------------------------*/ #ifndef RTKLIB_H #define RTKLIB_H #include #include #include #include #include #ifdef WIN32 #include #else #include #endif #ifdef __cplusplus extern "C" { #endif /* constants -----------------------------------------------------------------*/ #define VER_RTKLIB "2.2.0" /* library version */ #define PI 3.1415926535897932 /* pi */ #define D2R (PI/180.0) /* deg to rad */ #define R2D (180.0/PI) /* rad to deg */ #define CLIGHT 299792458.0 /* speed of light (m/s) */ #define SC2RAD 3.1415926535898 /* semi-circle to radian (IS-GPS) */ #define MU 3.986005E14 /* earth gravitational constant (IS-GPS) */ #define OMGE 7.2921151467E-5 /* earth angular velocity (IS-GPS) (rad/s) */ #define RE 6378137.0 /* earth semimajor axis (WGS84) (m) */ #define FE (1.0/298.257223563) /* earth flattening (WGS84) */ #define FREQ1 1.57542E9 /* GPS L1 frequency (Hz) */ #define FREQ2 1.22760E9 /* GPS L2 frequency (Hz) */ #define FREQ5 1.17645E9 /* GPS L5 frequency (Hz) */ #define HION 350000.0 /* ionosphere height (m) */ #define OFFWEEK 1024 /* GPS week offset for nav message */ #define NFREQ 2 /* number of frequencies */ #define MAXSAT (32+19) /* max satellite number (1 to MAXSAT) */ #define MAXOBS 64 /* max number of obs in an epoch */ #define MAXCOR 3 /* max number of correction files */ #define DTTOL 0.05 /* tolerance of time difference (s) */ #define MAXPRNGPS 32 /* max satellite PRN number of GPS */ #define MINPRNSBS 120 /* min satellite PRN number of SBAS */ #define MAXPRNSBS 138 /* max satellite PRN number of SBAS */ #define MAXBAND 10 /* max SBAS band of igp */ #define MAXNIGP 201 /* max number of IGP in SBAS band */ #define MAXNGEO 4 /* max number of GEO satellites */ #define MAXCOMMENT 10 /* max number of RINEX comments */ #define MAXSTRPATH 1024 /* max length of stream path */ #define MAXSTRMSG 1024 /* max length of stream message */ #define MAXSTRRTK 6 /* max number of stream for rtk server */ #define SBSOPT_LCORR 1 /* SBAS option: long term correction */ #define SBSOPT_FCORR 2 /* SBAS option: fast correction */ #define SBSOPT_ICORR 4 /* SBAS option: ionosphere correction */ #define SBSOPT_RANGE 8 /* SBAS option: ranging */ #define RCVLOG_RINEX 0 /* receiver log format: RINEX */ #define RCVLOG_NOV 1 /* receiver log format: NovAtel OEMV/4 Raw */ #define RCVLOG_UBX 2 /* receiver log format: u-blox Raw */ #define RCVLOG_SS2 3 /* receiver log format: Superstar II Raw */ #define RCVLOG_CRES 4 /* receiver log format: Crescent Raw */ #define RCVLOG_RTCM2 5 /* receiver log format: RTCM 2.x */ #define RCVLOG_RTCM3 6 /* receiver log format: RTCM 3.x */ #define RCVLOG_GARM 7 /* receiver log format: Garmin Raw */ #define RCVLOG_SIRF 8 /* receiver log format: SiRF II Raw */ #define RCVLOG_SBAS 9 /* receiver log format: SBAS messages */ #define RCVLOG_NMEA 10 /* receiver log format: NMEA */ #define STR_NONE 0 /* stream type: none */ #define STR_SERIAL 1 /* stream type: serial */ #define STR_FILE 2 /* stream type: file */ #define STR_TCPSVR 3 /* stream type: tcp server */ #define STR_TCPCLI 4 /* stream type: tcp client */ #define STR_UDP 5 /* stream type: udp stream */ #define STR_NTRIPSVR 6 /* stream type: ntrip server */ #define STR_NTRIPCLI 7 /* stream type: ntrip client */ #define MODE_R 0x1 /* read/write mode: read */ #define MODE_W 0x2 /* read/write mode: write */ #define MODE_A 0x4 /* read/write mode: append */ #define MODE_T 0x8 /* read/write mode: time-taged */ #ifdef WIN32 #define thread_t HANDLE #define lock_t CRITICAL_SECTION #define initlock(f) InitializeCriticalSection(f) #define lock(f) EnterCriticalSection(f) #define unlock(f) LeaveCriticalSection(f) #else #define thread_t pthread_t #define lock_t pthread_mutex_t #define initlock(f) pthread_mutex_init(f,NULL) #define lock(f) pthread_mutex_lock(f) #define unlock(f) pthread_mutex_unlock(f) #endif /* macros --------------------------------------------------------------------*/ #define SAT(prn) ((prn)<=MAXPRNGPS?(prn):MAXPRNGPS+1+(prn)-MINPRNSBS) /* prn no to sat no */ #define PRN(sat) ((sat)<=MAXPRNGPS?(sat):MINPRNSBS+1+(sat)-MAXPRNGPS) /* sat no to prn no */ /* type definitions ----------------------------------------------------------*/ typedef struct { /* time struct */ time_t time; /* time (s) expressed by standard time_t */ double sec; /* fraction of sec under 1 s */ } gtime_t; typedef struct { /* observation data record */ gtime_t time; /* receiver sampling time */ unsigned char sat,rcv; /* satellite/receiver number */ unsigned char SNR[NFREQ]; /* signal strength (dbHz) */ unsigned char LLI[NFREQ]; /* loss of lock indicator */ double L[NFREQ]; /* observation data carrier-phase (cycle) */ double P[NFREQ]; /* observation data pseudorange (m) */ float D[NFREQ]; /* observation data doppler frequency (Hz) */ } obsd_t; typedef struct { /* observation data */ int n; /* number of obervation data records */ obsd_t *data; /* observation data records */ } obs_t; typedef struct { /* satellite broadcast ephemeris */ int sat; /* satellite number */ int iode,iodc; /* IODE,IODC */ int sva,svh; /* sv accuracy, sv health */ gtime_t toe,toc,ttr; /* Toe,Toc,T_trans */ double A,e,i0,OMG0,omg,M0,deln,OMGd,idot; double crc,crs,cuc,cus,cic,cis,toes,fit; /* sv ephemeris parameters */ double f0,f1,f2,tgd; /* sv clock parameters */ } eph_t; typedef struct { /* satellite precise ephemeris */ gtime_t time; /* time */ double pos[MAXSAT][3]; /* satellite positions (ecef) (m) */ } peph_t; typedef struct { /* satellite precise clock parameters */ gtime_t time; /* time */ double clk[MAXSAT]; /* satellite clock-biases (sec) */ } pclk_t; typedef struct { /* navigation messages */ int n; /* number of broadcast ephemeris */ int np; /* number of precise ephemeris */ eph_t *eph; /* satellite broadcast ephemeris */ peph_t *peph; /* satellite precise ephemeris */ pclk_t *pclk; /* satellite precise clock parameters */ double ion[8]; /* iono model parameters {a0,a1,a2,a3,b0,b1,b2,b3} */ double utc[4]; /* delta-utc parameters */ int leaps; /* leap seconds (s) */ } nav_t; typedef struct { /* network correction type */ gtime_t time; /* correction time */ int sat,iode; /* satellite number/ephemeris iode */ double cc[NFREQ]; /* carrier-phase correction (m) */ } obsc_t; typedef struct { /* SBAS message */ int week,tow; /* receiption time */ int sat; /* SBAS satellite PRN number */ unsigned char msg[29]; /* SBAS message (226bit) padded by 0 */ } sbsmsg_t; typedef struct { /* SBAS messages */ int n; /* number of SBAS messages */ sbsmsg_t *msgs; /* SBAS messages */ } sbs_t; typedef struct { /* SBAS fast correction type */ gtime_t t0; /* time of applicability (tof) */ double prc; /* pseudorange correction (PRC) (m) */ double rrc; /* range-rate correction (RRC) (m/s) */ double dt; /* range-rate correction delta-time (s) */ int iodf; /* IODF (issue of date fast corr) */ short udre; /* UDREI+1 */ short ai; /* degradation factor indicator */ } sbsfcorr_t; typedef struct { /* SBAS long term satellite error correction type */ gtime_t t0; /* correction time */ int iode; /* IODE (issue of date ephemeris) */ double dpos[3]; /* delta position (m) (ecef) */ double dvel[3]; /* delta velocity (m/s) (ecef) */ double daf0,daf1; /* delta clock-offset/drift (s,s/s) */ } sbslcorr_t; typedef struct { /* SBAS satellite correction type */ int prn; /* satellite PRN number */ sbsfcorr_t fcorr; /* fast correction */ sbslcorr_t lcorr; /* long term correction */ } sbssatp_t; typedef struct { /* SBAS satellite corrections type */ int iodp; /* IODP (issue of date mask) */ int nprn; /* number of satellites */ int tlat; /* system latecy (s) */ sbssatp_t sat[MAXSAT]; /* satellite correction */ } sbssat_t; typedef struct { /* SBAS ionospheric correction type */ gtime_t t0; /* correction time */ short lat,lon; /* latitude/longitude (deg) */ short give; /* GIVE+1 */ float delay; /* vertical delay estimate (m) */ } sbsigp_t; typedef struct { /* igp band type */ short x; /* longitude/latitude (deg) */ const short *y; /* latitudes/longitudes (deg) */ unsigned char bits; /* igp mask start bit */ unsigned char bite; /* igp mask end bit */ } sbsigpband_t; typedef struct { /* SBAS ionospheric corrections type */ int iodi; /* IODI (issue of date ionos corr) */ int nigp; /* number of igps */ sbsigp_t igp[MAXNIGP]; /* ionospheric correction */ } sbsion_t; typedef struct { /* SBAS navigation message type */ int sat; /* satellite PRN number */ gtime_t t0; /* reference epoch time */ int ura; /* URA+1 (user range accuracy) */ double pos[3]; /* satellite position (m) (ecef) */ double vel[3]; /* satellite velocity (m/s) (ecef) */ double acc[3]; /* satellite acceleration (m/s^2) (ecef) */ double af0,af1; /* satellite clock-offset/drift (s,s/s) */ } sbsnav_t; typedef struct { /* SBAS status type */ sbssat_t sbssat; /* satellite corrections */ sbsion_t sbsion[MAXBAND+1]; /* ionos corrections */ sbsnav_t sbsnav[MAXNGEO]; /* SBAS navigation messages */ } sbsstat_t; typedef struct { /* antenna phase center parameters */ double ecc[3]; /* antenna delta-position e/n/u (m) */ double off[NFREQ][3]; /* phase center offset e/n/u (m) */ double var[NFREQ][19]; /* phase center variation (m) (el=0,5,...,90deg) */ char ant[128]; /* antenna name */ } pcv_t; typedef struct { /* RINEX options */ char prog[32]; /* program */ char runby[32]; /* run-by */ char marker[64]; /* marker name */ char name[2][32]; /* observer/agency */ char rec[3][32]; /* receiver #/type/vers */ char ant[3][32]; /* antenna #/type */ double apppos[3]; /* approx position x/y/z */ double antdel[3]; /* antenna delta h/e/n */ char comment[MAXCOMMENT][64]; /* comments */ } rnxopt_t; typedef struct { /* position solution data type */ gtime_t time; /* solution time */ double pos[3]; /* receiver position lat/lon/height (deg/m) */ float poss[6]; /* receiver position covariance {ee,nn,uu,en,nu,ue} */ short posq,ns; /* quality flag/number of satellites */ } solpd_t; typedef struct { /* position solution type */ int n; /* number of solution data */ solpd_t *data; /* position solution data */ } solp_t; typedef struct { /* processing options type */ int mode; /* positioning mode */ /* (0:single,1:dgps,2:kinematic,3:static, */ /* 4:moving-baseline,5:fixed) */ int nf; /* number of frequencies (1:L1,2:L1+L2,3:L1+L2+L5) */ double elmin; /* elevation mask angle (rad) */ double snrmin; /* snr mask (dBHz) */ int modear; /* AR mode (0:continuous,1:instantaneous) */ int maxout; /* obs outage count to reset bias */ int minlock; /* min lock count to fix ambiguity */ int estiono; /* ionosphere estimation */ int esttrop; /* troposphere estimation */ int niter; /* number of filter iteration */ int codesmooth; /* code smoothing window size (0:none) */ int intpref; /* interpolate reference obs */ int sbascorr; /* SBAS correction options */ double err[4]; /* measurement error factor */ /* [0]:code/phase, [1-3]:error factor a/b/c of phase */ double std[3]; /* initial-state std [0]bias,[1]ionos [2]tropos */ double prn[3]; /* process-noise std [0]bias,[1]ionos [2]tropos */ double sclkstab; /* satellite clock stability (sec/sec) */ double thresar; /* AR validation threshold */ double elmaskar; /* elevation mask of AR for rising satellite (deg) */ double thresslip; /* slip threshold of geometry-free phase (m) */ double maxtdiff; /* max difference of time (sec) */ double maxinno; /* reject threshold of innovation (m) */ double ru[3]; /* rover position for fixed mode(5) (ecef) (m) */ double rb[3]; /* base station position for rel mode(1-3) (ecef) (m) */ pcv_t *pcvu; /* antenna phase center parameters of rover */ pcv_t *pcvr; /* antenna phase center parameters of reference */ } prcopt_t; typedef struct { /* solution options type */ int posf; /* solution format (0:lat/lon/height,1:x/y/z-ecef, */ /* 2:e/n/u-baseline,3:nmea) */ int times; /* time system (0:gpst,1:utc,2:jst) */ int timef; /* time format (0:sssss.s,1:yyyy/mm/dd hh:mm:ss.s) */ int timeu; /* time digits under decimal point */ int degf; /* latitude/longitude format (0:ddd.ddd,1:ddd mm ss) */ int outhead; /* output header (0:no,1:yes) */ int outopt; /* output processing options (0:no,1:yes) */ int datum; /* datum (0:WGS84,1:Tokyo) */ int height; /* height (0:ellipsoidal,1:geodetic) */ int geoid; /* geoid model (0:EGM96,1:JGD2000) */ char sep[64]; /* field separator */ } solopt_t; typedef struct { /* rtk control/result struct */ gtime_t time; /* current time */ int nx,na; /* number of float states/fixed states */ int ns; /* number of valid satellites */ double tt; /* time difference between current and previous */ double age; /* age of differential */ double ambratio; /* raitio for ambiguity validation */ double *x,*P; /* float states and their covariance */ double *xa,*Pa; /* fixed states and their covariance */ double rr[6]; /* rover position/velocity (single) (ecef) (m) */ double rb[6]; /* base station position/velocity (ecef) (m) */ double res[MAXSAT][NFREQ]; /* residuals */ double az[MAXSAT]; /* azimuth angle (rad) */ double el[MAXSAT]; /* elevation angle (rad) */ unsigned char vsat[MAXSAT][NFREQ]; /* valid satellite flag */ unsigned char slip[MAXSAT][NFREQ]; /* cycle-slip flag */ int lock[MAXSAT][NFREQ]; /* lock counter of phase */ int outc[MAXSAT][NFREQ]; /* observation outage counter for phase */ double gf[MAXSAT]; /* previous geometry-free phase (m) */ prcopt_t opt; /* processing options */ } rtk_t; typedef struct { /* raw data control type */ gtime_t time; /* time */ eph_t eph[MAXSAT]; /* ephemeris buffer */ int iode1[MAXSAT]; /* iodc in frame 1 */ int iode2[MAXSAT]; /* iode in frame 2 */ unsigned int lockc[MAXSAT][NFREQ]; /* carrier lock count */ unsigned char halfc[MAXSAT][NFREQ]; /* half-cycle add flag */ } raw_t; typedef struct { /* stream type */ int type; /* type */ int mode; /* mode */ int state; /* state */ unsigned int inb,inr; /* input bytes/rate */ unsigned int outb,outr; /* output bytes/rate */ unsigned int tick,tact; /* tick/active tick */ unsigned int inbt,outbt; /* input/output bytes at tick */ lock_t lock; /* lock flag */ void *port; /* port control struct */ char path[MAXSTRPATH]; /* stream path */ char msg[MAXSTRMSG]; /* stream message */ } stream_t; typedef struct { /* stream server type */ int state; /* server state */ int cycle; /* server cycle (ms) */ int buffsize; /* input buffer size (bytes) */ int nstr; /* number of streams */ unsigned char *buff; /* input buffers */ stream_t stream[16]; /* input/output streams */ thread_t thread; /* server thread */ } strsvr_t; typedef struct { /* rtk server type */ int state; /* server state */ int cycle; /* processing cycle (ms) */ int buffsize; /* input buffer size (bytes) */ int format[4]; /* input/output format */ int rtkstat; /* rtk status */ rtk_t rtk; /* rtk control struct */ int nb[2]; /* bytes in input buffers */ unsigned char *buff[2]; /* input buffers */ unsigned int nmsg[2][5]; /* input message counts (obs,eph,ion,sbas,err) */ raw_t raw[2]; /* raw data control */ obs_t obs[2]; /* observation data */ nav_t nav[2]; /* navigation messages */ stream_t stream[MAXSTRRTK]; /* input/output/log streams */ thread_t thread; /* server thread */ lock_t lock; /* lock flag */ } rtksvr_t; /* global variables ----------------------------------------------------------*/ extern const double chisqr[]; /* chi-sqr(n) table (alpha=0.001) */ extern const double lam[]; /* carrier wave length (m) {L1,L2,...} */ extern const prcopt_t prcopt_default; /* default positioning options */ extern const solopt_t solopt_default; /* default solution output options */ extern const sbsigpband_t igpband1[][8]; /* sbas igp band 0-8 */ extern const sbsigpband_t igpband2[][5]; /* sbas igp band 9-10 */ extern FILE *sbstracefp; /* sbas trace file */ /* matrix and vector functions -----------------------------------------------*/ extern double *mat(int n, int m); extern int *imat(int n, int m); extern double *zeros(int n, int m); extern double *eye(int n); extern double dot(const double *a, const double *b, int n); extern double norm(const double *a, int n); extern void matcpy(double *A, const double *B, int n, int m); extern void matmul(const char *tr, int n, int k, int m, double alpha, const double *A, const double *B, double beta, double *C); extern int matinv(double *A, int n); extern int solve(const char *tr, const double *A, const double *Y, int n, int m, double *X); extern int lsq(const double *A, const double *y, int n, int m, double *x, double *Q); extern int filter(double *x, double *P, const double *H, const double *v, const double *R, int n, int m); extern int smoother(const double *xf, const double *Qf, const double *xb, const double *Qb, int n, double *xs, double *Qs); extern void matprint(const double *A, int n, int m, int p, int q); extern void matfprint(const double *A, int n, int m, int p, int q, FILE *fp); /* time and string functions -------------------------------------------------*/ extern double str2num(const char *s, int i, int n); extern int str2time(const char *s, int i, int n, gtime_t *t); extern void time2str(gtime_t t, char *str, int n); extern gtime_t epoch2time(const double *ep); extern void time2epoch(gtime_t t, double *ep); extern gtime_t gpst2time(int week, double sec); extern double time2gpst(gtime_t t, int *week); extern gtime_t timeadd(gtime_t t, double sec); extern double timediff(gtime_t t1, gtime_t t2); extern gtime_t gpst2utc(gtime_t t); extern gtime_t utc2gpst(gtime_t t); extern gtime_t timeget(void); extern double time2doy(gtime_t t); extern unsigned int tickget(void); extern void sleepms(int ms); /* coordinates functions -----------------------------------------------------*/ extern void ecef2pos(const double *r, double *pos); extern void pos2ecef(const double *pos, double *r); extern void ecef2enu(const double *pos, const double *r, double *e); extern void enu2ecef(const double *pos, const double *e, double *r); extern void covenu(const double *pos, const double *P, double *Q); extern void covecef(const double *pos, const double *Q, double *P); extern void xyz2enu(const double *pos, double *E); /* input/output functions ----------------------------------------------------*/ extern int readpcv(const char *file, const char *ant, pcv_t *pcv); extern void readpos(const char *file, const char *rcv, double *pos); extern int sortobs(obs_t *obs); extern void uniqeph(nav_t *nav); extern int screent(gtime_t time, gtime_t ts, gtime_t te, double tint); /* debug trace functions -----------------------------------------------------*/ extern void traceopen(const char *file); extern void traceclose(void); extern void tracelevel(int level); extern void trace(int level, const char *format, ...); extern void tracet(int level, const char *format, ...); extern void tracemat(int level, const double *A, int n, int m, int p, int q); extern void traceobs(int level, const obsd_t *obs, int n); extern void tracenav(int level, const nav_t *nav); /* platform dependent functions ----------------------------------------------*/ extern int execcmd(const char *cmd); extern int expath(const char *path, char *paths[], int nmax); /* positioning models --------------------------------------------------------*/ extern void eph2pos(gtime_t time, const eph_t *eph, double *rs, double *dts); extern void satpos(gtime_t time, const obsd_t *obs, int n, const nav_t *nav, double *rs, double *dts); extern void satposv(gtime_t time, const obsd_t *obs, int n, const nav_t *nav, double *rs, double *dts); extern void satposiode(gtime_t time, const obsd_t *obs, const int *iode, int n, const nav_t *nav, double *rs, double *dts); extern double satazel(const double *pos, const double *e, double *azel); extern double geodist(const double *rs, const double *rr, double *e); extern void dops(int ns, const double *azel, double elmin, double *dop); extern double ionmodel(gtime_t t, const double *ion, const double *pos, const double *azel); extern double ionmapf(const double *pos, const double *azel); extern double tropmodel(const double *pos, const double *azel, double humi); extern double tropmapf(gtime_t time, const double *pos, const double *azel, double *mapfw); extern void antmodel(const pcv_t *pcv, const double *azel, double *dr); extern void csmooth(obs_t *obs, int ns); /* single-point positioning --------------------------------------------------*/ extern int pntpos(const obsd_t *obs, int n, const nav_t *nav, double elmin, double snrmin, double *rr, double *Qr, double *dtr, double *azel); extern int pntposv(const obsd_t *obs, int n, const nav_t *nav, double elmin, double snrmin, double *rr, double *Qr, double *dtr, double *azel); /* geiod model ---------------------------------------------------------------*/ extern double geoidh(const double *pos); /* datum transformation ------------------------------------------------------*/ extern int loaddatump(const char *file); extern int tokyo2jgd(double *pos); extern int jgd2tokyo(double *pos); /* rinex functions -----------------------------------------------------------*/ extern char readrnxf(const char *file, gtime_t ts, gtime_t te, double tint, int rcv, obs_t *obs, nav_t *nav, int *osiz, int *nsiz); extern int readrnx(char *files[], int n, obs_t *obs, nav_t *nav); extern int readrnxt(char *files[], int n, gtime_t ts, gtime_t te, double tint, obs_t *obs, nav_t *nav); extern void outrnxobsh(FILE *fp, const rnxopt_t *opt, char tobs[][3], int ntobs, gtime_t time); extern void outrnxobsb(FILE *fp, const obsd_t *obs, int n, int epflag, char tobs[][3], int ntobs); extern void outrnxnavh(FILE *fp, const rnxopt_t *opt, const double *ion, const double *dutc, int leaps); extern void outrnxnavb(FILE *fp, const eph_t *eph); extern int uncompress(const char *file, char *uncfile); /* receiver log functions ----------------------------------------------------*/ extern int decodefrm(const unsigned int *words, eph_t *eph, double *ion, double *utc, int *leaps); extern int decodenav(raw_t *raw, int sat, const unsigned int *words, nav_t *nav); extern void addobs(obs_t *obs, obs_t *obsp, int *nmax); extern void addnav(nav_t *nav, nav_t *navp, int sat, int *nmax); extern void addsbs(sbs_t *sbs, sbsmsg_t sbsp, int *nmax); extern void addionutc(nav_t *nav, nav_t *navp); extern int convlog(const char *file, int type, const char *ofile, const char *nfile, const char *sfile, gtime_t ts, gtime_t te, double tint, const rnxopt_t *rnxopt, int opt); extern int readlog(const char *file, int type, gtime_t ts, gtime_t te, double tint, int opt, obs_t *obs, nav_t *nav, sbs_t *sbs); extern int readlogs(char **files, int *types, int n, gtime_t ts, gtime_t te, double tint, int opt, obs_t *obs, nav_t *nav, sbs_t *sbs); extern unsigned char *decodelog(raw_t *raw, unsigned char *buff, int len, int type, int opt, obs_t *obs, nav_t *nav, sbsmsg_t *sbsmsg, int *stat); /* solution functions --------------------------------------------------------*/ extern int readsol(char *files[], int nfile, solp_t *solp, double rpos[][3], int *nrpos, char **inputs, int *ninp); extern int readsolt(char *files[], int nfile, gtime_t ts, gtime_t te, double tint, int qflag, solp_t *solp, double rpos[][3], int *nrpos, char **inputs, int *ninp); extern int outsolheads(unsigned char *buff); extern int outsols(unsigned char *buff, gtime_t time, const double *rr, const double *Qr, const double *rb, int stat, int ns); extern int outsolexs(unsigned char *buff, int stat, int ns, int *sat, double *az, double *el, int *snr, int *vsat); extern void outsolhead(FILE *fp); extern void outsol(FILE *fp, gtime_t time, const double *rr, const double *Qr, const double *rb, int stat, int ns); extern void outsolex(FILE*fp, int stat, int ns, int *sat, double *az, double *el, int *snr, int *vsat); extern void setsolopt(const solopt_t *solopt); extern void setsolformat(int format); /* convert solutions to google earth kml file --------------------------------*/ extern int convkml(const char *infile, const char *outfile, gtime_t ts, gtime_t te, double tint, int qflg, double *offset, int tcolor, int pcolor, int outalt, int outtime); /* SBAS functions ------------------------------------------------------------*/ extern int sbsreadmsg(const char *file, int sat, sbsmsg_t **sbsmsg); extern int sbsreadmsgt(const char *file, int sat, gtime_t ts, gtime_t te, sbsmsg_t **sbsmsg); extern void sbsoutmsg(FILE *fp, sbsmsg_t *sbsmsg); extern void sbsupdatestat(const sbsmsg_t *msg, sbsstat_t *stat); extern int sbsdecodemsg(gtime_t time, int sat, const unsigned int *words, sbsmsg_t *sbsmsg); extern int sbssatpos(gtime_t time, const sbsnav_t *nav, double pr, double *rs, double *dts); extern int sbspntpos(const obsd_t *obs, int n, const nav_t *nav, sbsstat_t *stat, double elmin, double snrmin, int opt, double *rr, double *Qr, double *dtr, double *azel); /* integer least-square estimation -------------------------------------------*/ extern int lambda(int n, int m, const double *a, const double *Q, double *F, double *s); /* realtime kinematic positioning --------------------------------------------*/ extern void rtkinit(rtk_t *rtk, const prcopt_t *opt); extern void rtkfree(rtk_t *rtk); extern int rtkpos(rtk_t *rtk, const obsd_t *obs, int nobs, const nav_t *nav); /* post-processing positioning -----------------------------------------------*/ extern int postpos(gtime_t ts, gtime_t te, double tint, int dirs, const prcopt_t *prcopt, const solopt_t *solopt, char **infile, int nfile, char *outfile, int *informat); extern int readopts(const char *file, prcopt_t *prcopt, solopt_t *solopt); extern int writeopts(const char *file, const prcopt_t *prcopt, const solopt_t *solopt); /* stream data input/output --------------------------------------------------*/ extern void strinitcom(void); extern void strinit(stream_t *stream); extern void strlock(stream_t *stream); extern void strunlock(stream_t *stream); extern int stropen(stream_t *stream, int type, int mode, const char *path); extern void strclose(stream_t *stream); extern int strread(stream_t *stream, unsigned char *buff, int n); extern int strwrite(stream_t *stream, unsigned char *buff, int n); extern int strstat(stream_t *stream, char *msg); extern void strsum(stream_t *stream, int *inb, int *inr, int *outb, int *outr); extern void strsetopt(const int *opt); /* stream server functions ---------------------------------------------------*/ extern void strsvrinit(strsvr_t *svr, int nout); extern int strsvrstart(strsvr_t *svr, int *opts, int *strs, char **paths, char *cmd); extern void strsvrstop(strsvr_t *svr, char *cmd); extern void strsvrstat(strsvr_t *svr, int *stat, int *byte, int *bps, char *msg); /* rtk server functions ------------------------------------------------------*/ extern int rtksvrinit(rtksvr_t *svr); extern int rtksvrstart(rtksvr_t *svr, int cycle, int buffsize, int *strs, char **paths, int *formats, char **cmds, prcopt_t *prcopt, solopt_t *solopt); extern void rtksvrstop(rtksvr_t *svr, char **cmds); extern void rtksvrlock(rtksvr_t *svr); extern void rtksvrunlock(rtksvr_t *svr); extern int rtksvrgetsol(rtksvr_t *svr, gtime_t *time, double *rr, double *Qr, double *rb, int *ns, double *age, double *ratio); extern int rtksvrostat(rtksvr_t *svr, int type, gtime_t *time, int *sat, double *az, double *el, int *snr1, int *snr2, int *vsat); extern void rtksvrsstat(rtksvr_t *svr, int *sstat, char *msg); #ifdef __cplusplus } #endif #endif /* RTKLIB_H */