/*------------------------------------------------------------------------------ * rtklib.h : RTKLIB constants, types and function prototypes * * Copyright (C) 2007-2020 by T.TAKASU, All rights reserved. * * options : -DENAGLO enable GLONASS * -DENAGAL enable Galileo * -DENAQZS enable QZSS * -DENACMP enable BeiDou * -DENAIRN enable IRNSS * -DNFREQ=n set number of obs codes/frequencies * -DNEXOBS=n set number of extended obs codes * -DMAXOBS=n set max number of obs data in an epoch * -DWIN32 use WIN32 API * -DWIN_DLL generate library as Windows DLL * * version : $Revision:$ $Date:$ * history : 2007/01/13 1.0 rtklib ver.1.0.0 * 2007/03/20 1.1 rtklib ver.1.1.0 * 2008/07/15 1.2 rtklib ver.2.1.0 * 2008/10/19 1.3 rtklib ver.2.1.1 * 2009/01/31 1.4 rtklib ver.2.2.0 * 2009/04/30 1.5 rtklib ver.2.2.1 * 2009/07/30 1.6 rtklib ver.2.2.2 * 2009/12/25 1.7 rtklib ver.2.3.0 * 2010/07/29 1.8 rtklib ver.2.4.0 * 2011/05/27 1.9 rtklib ver.2.4.1 * 2013/03/28 1.10 rtklib ver.2.4.2 * 2020/11/30 1.11 rtklib ver.2.4.3 b34 *-----------------------------------------------------------------------------*/ #ifndef RTKLIB_H #define RTKLIB_H #include #include #include #include #include #include #include #include #ifdef WIN32 #include #include #else #include #include #endif #ifdef __cplusplus extern "C" { #endif #ifdef WIN_DLL #define EXPORT __declspec(dllexport) /* for Windows DLL */ #else #define EXPORT #endif #define WIN_DLL #define ENAQZS #define ENACMP #define ENAGAL #define NFREQ 3 #define ENAGLO #define ENAIRN #define TRACE #define $(inherited) /* constants -----------------------------------------------------------------*/ #define VER_RTKLIB "demo5" /* library version */ #define PATCH_LEVEL "b34f" /* patch level */ #define COPYRIGHT_RTKLIB \ "Copyright (C) 2007-2020 T.Takasu\nAll rights reserved." #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 AU 149597870691.0 /* 1 AU (m) */ #define AS2R (D2R/3600.0) /* arc sec to radian */ #define Mg2M 9.80665E-6 /* micro-g to meters per second squared */ #define OMGE 7.2921151467E-5 /* earth angular velocity (IS-GPS) (rad/s) */ #define RE_WGS84 6378137.0 /* earth semimajor axis (WGS84) (m) */ #define FE_WGS84 (1.0/298.257223563) /* earth flattening (WGS84) */ #define E_WGS84 0.0818191908425 /* WGS84 eccentricity */ #define HION 350000.0 /* ionosphere height (m) */ #define MAXFREQ 6 /* max NFREQ */ #define FREQL1 1.57542E9 /* L1/E1 frequency (Hz) */ #define FREQL2 1.22760E9 /* L2 frequency (Hz) */ #define FREQE5b 1.20714E9 /* E5b frequency (Hz) */ #define FREQL5 1.17645E9 /* L5/E5a/B2a frequency (Hz) */ #define FREQL6 1.27875E9 /* E6/L6 frequency (Hz) */ #define FREQE5ab 1.191795E9 /* E5a+b frequency (Hz) */ #define FREQs 2.492028E9 /* S frequency (Hz) */ #define FREQ1_GLO 1.60200E9 /* GLONASS G1 base frequency (Hz) */ #define DFRQ1_GLO 0.56250E6 /* GLONASS G1 bias frequency (Hz/n) */ #define FREQ2_GLO 1.24600E9 /* GLONASS G2 base frequency (Hz) */ #define DFRQ2_GLO 0.43750E6 /* GLONASS G2 bias frequency (Hz/n) */ #define FREQ3_GLO 1.202025E9 /* GLONASS G3 frequency (Hz) */ #define FREQ1a_GLO 1.600995E9 /* GLONASS G1a frequency (Hz) */ #define FREQ2a_GLO 1.248060E9 /* GLONASS G2a frequency (Hz) */ #define FREQ1_CMP 1.561098E9 /* BDS B1I frequency (Hz) */ #define FREQ2_CMP 1.20714E9 /* BDS B2I/B2b frequency (Hz) */ #define FREQ3_CMP 1.26852E9 /* BDS B3 frequency (Hz) */ #define EFACT_GPS 1.0 /* error factor: GPS */ #define EFACT_GLO 1.5 /* error factor: GLONASS */ #define EFACT_GAL 1.0 /* error factor: Galileo */ #define EFACT_QZS 1.0 /* error factor: QZSS */ #define EFACT_CMP 1.0 /* error factor: BeiDou */ #define EFACT_IRN 1.5 /* error factor: IRNSS */ #define EFACT_SBS 3.0 /* error factor: SBAS */ #define SYS_NONE 0x00 /* navigation system: none */ #define SYS_GPS 0x01 /* navigation system: GPS */ #define SYS_SBS 0x02 /* navigation system: SBAS */ #define SYS_GLO 0x04 /* navigation system: GLONASS */ #define SYS_GAL 0x08 /* navigation system: Galileo */ #define SYS_QZS 0x10 /* navigation system: QZSS */ #define SYS_CMP 0x20 /* navigation system: BeiDou */ #define SYS_IRN 0x40 /* navigation system: IRNS */ #define SYS_LEO 0x80 /* navigation system: LEO */ #define SYS_ALL 0xFF /* navigation system: all */ #define TSYS_GPS 0 /* time system: GPS time */ #define TSYS_UTC 1 /* time system: UTC */ #define TSYS_GLO 2 /* time system: GLONASS time */ #define TSYS_GAL 3 /* time system: Galileo time */ #define TSYS_QZS 4 /* time system: QZSS time */ #define TSYS_CMP 5 /* time system: BeiDou time */ #define TSYS_IRN 6 /* time system: IRNSS time */ #ifndef NFREQ #define NFREQ 3 /* number of carrier frequencies */ #endif #define NFREQGLO 2 /* number of carrier frequencies of GLONASS */ #ifndef NEXOBS #define NEXOBS 0 /* number of extended obs codes */ #endif #define SNR_UNIT 0.001 /* SNR unit (dBHz) */ #define MINPRNGPS 1 /* min satellite PRN number of GPS */ #define MAXPRNGPS 32 /* max satellite PRN number of GPS */ #define NSATGPS (MAXPRNGPS-MINPRNGPS+1) /* number of GPS satellites */ #define NSYSGPS 1 #ifdef ENAGLO #define MINPRNGLO 1 /* min satellite slot number of GLONASS */ #define MAXPRNGLO 27 /* max satellite slot number of GLONASS */ #define NSATGLO (MAXPRNGLO-MINPRNGLO+1) /* number of GLONASS satellites */ #define NSYSGLO 1 #else #define MINPRNGLO 0 #define MAXPRNGLO 0 #define NSATGLO 0 #define NSYSGLO 0 #endif #ifdef ENAGAL #define MINPRNGAL 1 /* min satellite PRN number of Galileo */ #define MAXPRNGAL 36 /* max satellite PRN number of Galileo */ #define NSATGAL (MAXPRNGAL-MINPRNGAL+1) /* number of Galileo satellites */ #define NSYSGAL 1 #else #define MINPRNGAL 0 #define MAXPRNGAL 0 #define NSATGAL 0 #define NSYSGAL 0 #endif #ifdef ENAQZS #define MINPRNQZS 193 /* min satellite PRN number of QZSS */ #define MAXPRNQZS 202 /* max satellite PRN number of QZSS */ #define MINPRNQZS_S 183 /* min satellite PRN number of QZSS L1S */ #define MAXPRNQZS_S 191 /* max satellite PRN number of QZSS L1S */ #define NSATQZS (MAXPRNQZS-MINPRNQZS+1) /* number of QZSS satellites */ #define NSYSQZS 1 #else #define MINPRNQZS 0 #define MAXPRNQZS 0 #define MINPRNQZS_S 0 #define MAXPRNQZS_S 0 #define NSATQZS 0 #define NSYSQZS 0 #endif #ifdef ENACMP #define MINPRNCMP 1 /* min satellite sat number of BeiDou */ #define MAXPRNCMP 46 /* max satellite sat number of BeiDou */ #define NSATCMP (MAXPRNCMP-MINPRNCMP+1) /* number of BeiDou satellites */ #define NSYSCMP 1 #else #define MINPRNCMP 0 #define MAXPRNCMP 0 #define NSATCMP 0 #define NSYSCMP 0 #endif #ifdef ENAIRN #define MINPRNIRN 1 /* min satellite sat number of IRNSS */ #define MAXPRNIRN 14 /* max satellite sat number of IRNSS */ #define NSATIRN (MAXPRNIRN-MINPRNIRN+1) /* number of IRNSS satellites */ #define NSYSIRN 1 #else #define MINPRNIRN 0 #define MAXPRNIRN 0 #define NSATIRN 0 #define NSYSIRN 0 #endif #ifdef ENALEO #define MINPRNLEO 1 /* min satellite sat number of LEO */ #define MAXPRNLEO 10 /* max satellite sat number of LEO */ #define NSATLEO (MAXPRNLEO-MINPRNLEO+1) /* number of LEO satellites */ #define NSYSLEO 1 #else #define MINPRNLEO 0 #define MAXPRNLEO 0 #define NSATLEO 0 #define NSYSLEO 0 #endif #define NSYS (NSYSGPS+NSYSGLO+NSYSGAL+NSYSQZS+NSYSCMP+NSYSIRN+NSYSLEO) /* number of systems */ #define MINPRNSBS 120 /* min satellite PRN number of SBAS */ #define MAXPRNSBS 158 /* max satellite PRN number of SBAS */ #define NSATSBS (MAXPRNSBS-MINPRNSBS+1) /* number of SBAS satellites */ #define MAXSAT (NSATGPS+NSATGLO+NSATGAL+NSATQZS+NSATCMP+NSATIRN+NSATSBS+NSATLEO) /* max satellite number (1 to MAXSAT) */ #define MAXSTA 255 #ifndef MAXOBS #define MAXOBS 96 /* max number of obs in an epoch */ #endif #define MAXRCV 64 /* max receiver number (1 to MAXRCV) */ #define MAXOBSTYPE 64 /* max number of obs type in RINEX */ #ifdef OBS_100HZ #define DTTOL 0.005 /* tolerance of time difference (s) */ #else #define DTTOL 0.025 /* tolerance of time difference (s) */ #endif #define MAXDTOE 7200.0 /* max time difference to GPS Toe (s) */ #define MAXDTOE_QZS 7200.0 /* max time difference to QZSS Toe (s) */ #define MAXDTOE_GAL 14400.0 /* max time difference to Galileo Toe (s) */ #define MAXDTOE_CMP 21600.0 /* max time difference to BeiDou Toe (s) */ #define MAXDTOE_GLO 1800.0 /* max time difference to GLONASS Toe (s) */ #define MAXDTOE_IRN 7200.0 /* max time difference to IRNSS Toe (s) */ #define MAXDTOE_SBS 360.0 /* max time difference to SBAS Toe (s) */ #define MAXDTOE_S 86400.0 /* max time difference to ephem toe (s) for other */ #define MAXGDOP 300.0 /* max GDOP */ #define INT_SWAP_TRAC 86400.0 /* swap interval of trace file (s) */ #define INT_SWAP_STAT 86400.0 /* swap interval of solution status file (s) */ #define MAXEXFILE 1024 /* max number of expanded files */ #define MAXSBSAGEF 30.0 /* max age of SBAS fast correction (s) */ #define MAXSBSAGEL 1800.0 /* max age of SBAS long term corr (s) */ #define MAXSBSURA 8 /* max URA of SBAS satellite */ #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 100 /* max number of RINEX comments */ #define MAXSTRPATH 1024 /* max length of stream path */ #define MAXSTRMSG 1024 /* max length of stream message */ #define MAXSTRRTK 8 /* max number of stream in RTK server */ #define MAXSBSMSG 32 /* max number of SBAS msg in RTK server */ #define MAXSOLMSG 8191 /* max length of solution message */ #define MAXRAWLEN 16384 /* max length of receiver raw message */ #define MAXERRMSG 4096 /* max length of error/warning message */ #define MAXANT 64 /* max length of station name/antenna type */ #define MAXSOLBUF 256 /* max number of solution buffer */ #define MAXOBSBUF 128 /* max number of observation data buffer */ #define MAXNRPOS 16 /* max number of reference positions */ #define MAXLEAPS 64 /* max number of leap seconds table */ #define MAXGISLAYER 32 /* max number of GIS data layers */ #define MAXRCVCMD 4096 /* max length of receiver commands */ #define RNX2VER 2.10 /* RINEX ver.2 default output version */ #define RNX3VER 3.00 /* RINEX ver.3 default output version */ #define OBSTYPE_PR 0x01 /* observation type: pseudorange */ #define OBSTYPE_CP 0x02 /* observation type: carrier-phase */ #define OBSTYPE_DOP 0x04 /* observation type: doppler-freq */ #define OBSTYPE_SNR 0x08 /* observation type: SNR */ #define OBSTYPE_ALL 0xFF /* observation type: all */ #define FREQTYPE_L1 0x01 /* frequency type: L1/E1/B1 */ #define FREQTYPE_L2 0x02 /* frequency type: L2/E5b/B2 */ #define FREQTYPE_L3 0x04 /* frequency type: L5/E5a/L3 */ #define FREQTYPE_L4 0x08 /* frequency type: L6/E6/B3 */ #define FREQTYPE_L5 0x10 /* frequency type: E5ab */ #define FREQTYPE_ALL 0xFF /* frequency type: all */ #define CODE_NONE 0 /* obs code: none or unknown */ #define CODE_L1C 1 /* obs code: L1C/A,G1C/A,E1C (GPS,GLO,GAL,QZS,SBS) */ #define CODE_L1P 2 /* obs code: L1P,G1P,B1P (GPS,GLO,BDS) */ #define CODE_L1W 3 /* obs code: L1 Z-track (GPS) */ #define CODE_L1Y 4 /* obs code: L1Y (GPS) */ #define CODE_L1M 5 /* obs code: L1M (GPS) */ #define CODE_L1N 6 /* obs code: L1codeless,B1codeless (GPS,BDS) */ #define CODE_L1S 7 /* obs code: L1C(D) (GPS,QZS) */ #define CODE_L1L 8 /* obs code: L1C(P) (GPS,QZS) */ #define CODE_L1E 9 /* (not used) */ #define CODE_L1A 10 /* obs code: E1A,B1A (GAL,BDS) */ #define CODE_L1B 11 /* obs code: E1B (GAL) */ #define CODE_L1X 12 /* obs code: E1B+C,L1C(D+P),B1D+P (GAL,QZS,BDS) */ #define CODE_L1Z 13 /* obs code: E1A+B+C,L1S (GAL,QZS) */ #define CODE_L2C 14 /* obs code: L2C/A,G1C/A (GPS,GLO) */ #define CODE_L2D 15 /* obs code: L2 L1C/A-(P2-P1) (GPS) */ #define CODE_L2S 16 /* obs code: L2C(M) (GPS,QZS) */ #define CODE_L2L 17 /* obs code: L2C(L) (GPS,QZS) */ #define CODE_L2X 18 /* obs code: L2C(M+L),B1_2I+Q (GPS,QZS,BDS) */ #define CODE_L2P 19 /* obs code: L2P,G2P (GPS,GLO) */ #define CODE_L2W 20 /* obs code: L2 Z-track (GPS) */ #define CODE_L2Y 21 /* obs code: L2Y (GPS) */ #define CODE_L2M 22 /* obs code: L2M (GPS) */ #define CODE_L2N 23 /* obs code: L2codeless (GPS) */ #define CODE_L5I 24 /* obs code: L5I,E5aI (GPS,GAL,QZS,SBS) */ #define CODE_L5Q 25 /* obs code: L5Q,E5aQ (GPS,GAL,QZS,SBS) */ #define CODE_L5X 26 /* obs code: L5I+Q,E5aI+Q,L5B+C,B2aD+P (GPS,GAL,QZS,IRN,SBS,BDS) */ #define CODE_L7I 27 /* obs code: E5bI,B2bI (GAL,BDS) */ #define CODE_L7Q 28 /* obs code: E5bQ,B2bQ (GAL,BDS) */ #define CODE_L7X 29 /* obs code: E5bI+Q,B2bI+Q (GAL,BDS) */ #define CODE_L6A 30 /* obs code: E6A,B3A (GAL,BDS) */ #define CODE_L6B 31 /* obs code: E6B (GAL) */ #define CODE_L6C 32 /* obs code: E6C (GAL) */ #define CODE_L6X 33 /* obs code: E6B+C,LEXS+L,B3I+Q (GAL,QZS,BDS) */ #define CODE_L6Z 34 /* obs code: E6A+B+C,L6D+E (GAL,QZS) */ #define CODE_L6S 35 /* obs code: L6S (QZS) */ #define CODE_L6L 36 /* obs code: L6L (QZS) */ #define CODE_L8I 37 /* obs code: E5abI (GAL) */ #define CODE_L8Q 38 /* obs code: E5abQ (GAL) */ #define CODE_L8X 39 /* obs code: E5abI+Q,B2abD+P (GAL,BDS) */ #define CODE_L2I 40 /* obs code: B1_2I (BDS) */ #define CODE_L2Q 41 /* obs code: B1_2Q (BDS) */ #define CODE_L6I 42 /* obs code: B3I (BDS) */ #define CODE_L6Q 43 /* obs code: B3Q (BDS) */ #define CODE_L3I 44 /* obs code: G3I (GLO) */ #define CODE_L3Q 45 /* obs code: G3Q (GLO) */ #define CODE_L3X 46 /* obs code: G3I+Q (GLO) */ #define CODE_L1I 47 /* obs code: B1I (BDS) (obsolute) */ #define CODE_L1Q 48 /* obs code: B1Q (BDS) (obsolute) */ #define CODE_L5A 49 /* obs code: L5A SPS (IRN) */ #define CODE_L5B 50 /* obs code: L5B RS(D) (IRN) */ #define CODE_L5C 51 /* obs code: L5C RS(P) (IRN) */ #define CODE_L9A 52 /* obs code: SA SPS (IRN) */ #define CODE_L9B 53 /* obs code: SB RS(D) (IRN) */ #define CODE_L9C 54 /* obs code: SC RS(P) (IRN) */ #define CODE_L9X 55 /* obs code: SB+C (IRN) */ #define CODE_L1D 56 /* obs code: B1D (BDS) */ #define CODE_L5D 57 /* obs code: L5D(L5S),B2aD (QZS,BDS) */ #define CODE_L5P 58 /* obs code: L5P(L5S),B2aP (QZS,BDS) */ #define CODE_L5Z 59 /* obs code: L5D+P(L5S) (QZS) */ #define CODE_L6E 60 /* obs code: L6E (QZS) */ #define CODE_L7D 61 /* obs code: B2bD (BDS) */ #define CODE_L7P 62 /* obs code: B2bP (BDS) */ #define CODE_L7Z 63 /* obs code: B2bD+P (BDS) */ #define CODE_L8D 64 /* obs code: B2abD (BDS) */ #define CODE_L8P 65 /* obs code: B2abP (BDS) */ #define CODE_L4A 66 /* obs code: G1aL1OCd (GLO) */ #define CODE_L4B 67 /* obs code: G1aL1OCd (GLO) */ #define CODE_L4X 68 /* obs code: G1al1OCd+p (GLO) */ #define MAXCODE 68 /* max number of obs code */ #define PMODE_SINGLE 0 /* positioning mode: single */ #define PMODE_DGPS 1 /* positioning mode: DGPS/DGNSS */ #define PMODE_KINEMA 2 /* positioning mode: kinematic */ #define PMODE_STATIC 3 /* positioning mode: static */ #define PMODE_STATIC_START 4 /* positioning mode: static */ #define PMODE_MOVEB 5 /* positioning mode: moving-base */ #define PMODE_FIXED 6 /* positioning mode: fixed */ #define PMODE_PPP_KINEMA 7 /* positioning mode: PPP-kinemaric */ #define PMODE_PPP_STATIC 8 /* positioning mode: PPP-static */ #define PMODE_PPP_FIXED 9 /* positioning mode: PPP-fixed */ #define PMODE_INS_UPDATE 10 /* positioning mode: ins mechanization */ #define PMODE_INS_TGNSS 11 /* positioning mode: ins/gnss tightly coupled */ #define INSTC_SINGLE 1 /* ins and gnss tightly coupled mode: single */ #define INSTC_RTK 2 /* ins and gnss tightly coupled mode: kinematic */ #define SOLF_LLH 0 /* solution format: lat/lon/height */ #define SOLF_XYZ 1 /* solution format: x/y/z-ecef */ #define SOLF_ENU 2 /* solution format: e/n/u-baseline */ #define SOLF_NMEA 3 /* solution format: NMEA-183 */ #define SOLF_STAT 4 /* solution format: solution status */ #define SOLF_GSIF 5 /* solution format: GSI F1/F2 */ #define SOLQ_NONE 0 /* solution status: no solution */ #define SOLQ_FIX 1 /* solution status: fix */ #define SOLQ_FLOAT 2 /* solution status: float */ #define SOLQ_SBAS 3 /* solution status: SBAS */ #define SOLQ_DGPS 4 /* solution status: DGPS/DGNSS */ #define SOLQ_SINGLE 5 /* solution status: single */ #define SOLQ_PPP 6 /* solution status: PPP */ #define SOLQ_DR 7 /* solution status: dead reconing */ #define SOLQ_DOP 8 /* solution status: doppler measurement aid */ #define MAXSOLQ 7 /* max number of solution status */ #define TIMES_GPST 0 /* time system: gps time */ #define TIMES_UTC 1 /* time system: utc */ #define TIMES_JST 2 /* time system: jst */ #define IONOOPT_OFF 0 /* ionosphere option: correction off */ #define IONOOPT_BRDC 1 /* ionosphere option: broadcast model */ #define IONOOPT_SBAS 2 /* ionosphere option: SBAS model */ #define IONOOPT_IFLC 3 /* ionosphere option: L1/L2 or L1/L5 iono-free LC */ #define IONOOPT_EST 4 /* ionosphere option: estimation */ #define IONOOPT_TEC 5 /* ionosphere option: IONEX TEC model */ #define IONOOPT_QZS 6 /* ionosphere option: QZSS broadcast model */ #define IONOOPT_STEC 8 /* ionosphere option: SLANT TEC model */ #define TROPOPT_OFF 0 /* troposphere option: correction off */ #define TROPOPT_SAAS 1 /* troposphere option: Saastamoinen model */ #define TROPOPT_SBAS 2 /* troposphere option: SBAS model */ #define TROPOPT_EST 3 /* troposphere option: ZTD estimation */ #define TROPOPT_ESTG 4 /* troposphere option: ZTD+grad estimation */ #define TROPOPT_ZTD 5 /* troposphere option: ZTD correction */ #define EPHOPT_BRDC 0 /* ephemeris option: broadcast ephemeris */ #define EPHOPT_PREC 1 /* ephemeris option: precise ephemeris */ #define EPHOPT_SBAS 2 /* ephemeris option: broadcast + SBAS */ #define EPHOPT_SSRAPC 3 /* ephemeris option: broadcast + SSR_APC */ #define EPHOPT_SSRCOM 4 /* ephemeris option: broadcast + SSR_COM */ #define ARMODE_OFF 0 /* AR mode: off */ #define ARMODE_CONT 1 /* AR mode: continuous */ #define ARMODE_INST 2 /* AR mode: instantaneous */ #define ARMODE_FIXHOLD 3 /* AR mode: fix and hold */ #define ARMODE_WLNL 4 /* AR mode: wide lane/narrow lane */ #define ARMODE_TCAR 5 /* AR mode: triple carrier ar */ #define GLO_ARMODE_OFF 0 /* GLO AR mode: off */ #define GLO_ARMODE_ON 1 /* GLO AR mode: on */ #define GLO_ARMODE_AUTOCAL 2 /* GLO AR mode: autocal */ #define GLO_ARMODE_FIXHOLD 3 /* GLO AR mode: fix and hold */ #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 POSOPT_POS 0 /* pos option: LLH/XYZ */ #define POSOPT_SINGLE 1 /* pos option: average of single pos */ #define POSOPT_FILE 2 /* pos option: read from pos file */ #define POSOPT_RINEX 3 /* pos option: rinex header pos */ #define POSOPT_RTCM 4 /* pos option: rtcm/raw station pos */ #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_NTRIPSVR 5 /* stream type: NTRIP server */ #define STR_NTRIPCLI 6 /* stream type: NTRIP client */ #define STR_FTP 7 /* stream type: ftp */ #define STR_HTTP 8 /* stream type: http */ #define STR_NTRIPCAS 9 /* stream type: NTRIP caster */ #define STR_UDPSVR 10 /* stream type: UDP server */ #define STR_UDPCLI 11 /* stream type: UDP server */ #define STR_MEMBUF 12 /* stream type: memory buffer */ #define STRFMT_RTCM2 0 /* stream format: RTCM 2 */ #define STRFMT_RTCM3 1 /* stream format: RTCM 3 */ #define STRFMT_OEM4 2 /* stream format: NovAtel OEMV/4 */ #define STRFMT_CNAV 3 /* stream format: ComNav */ #define STRFMT_UBX 4 /* stream format: u-blox LEA-*T */ #define STRFMT_SBP 5 /* stream format: Swift Navigation SBP */ #define STRFMT_CRES 6 /* stream format: Hemisphere */ #define STRFMT_STQ 7 /* stream format: SkyTraq S1315F */ #define STRFMT_JAVAD 8 /* stream format: JAVAD GRIL/GREIS */ #define STRFMT_NVS 9 /* stream format: NVS NVC08C */ #define STRFMT_BINEX 10 /* stream format: BINEX */ #define STRFMT_RT17 11 /* stream format: Trimble RT17 */ #define STRFMT_SEPT 12 /* stream format: Septentrio */ #define STRFMT_TERSUS 13 /* stream format: TERSUS */ #define STRFMT_RINEX 14 /* stream format: RINEX */ #define STRFMT_SP3 15 /* stream format: SP3 */ #define STRFMT_RNXCLK 16 /* stream format: RINEX CLK */ #define STRFMT_SBAS 17 /* stream format: SBAS messages */ #define STRFMT_NMEA 18 /* stream format: NMEA 0183 */ #define STRFMT_IMU 19 /* stream format: IMU */ #define MAXRCVFMT 13 /* max number of receiver format */ #define STR_MODE_R 0x1 /* stream mode: read */ #define STR_MODE_W 0x2 /* stream mode: write */ #define STR_MODE_RW 0x3 /* stream mode: read/write */ #define GEOID_EMBEDDED 0 /* geoid model: embedded geoid */ #define GEOID_EGM96_M150 1 /* geoid model: EGM96 15x15" */ #define GEOID_EGM2008_M25 2 /* geoid model: EGM2008 2.5x2.5" */ #define GEOID_EGM2008_M10 3 /* geoid model: EGM2008 1.0x1.0" */ #define GEOID_GSI2000_M15 4 /* geoid model: GSI geoid 2000 1.0x1.5" */ #define GEOID_RAF09 5 /* geoid model: IGN RAF09 for France 1.5"x2" */ #define COMMENTH "%" /* comment line indicator for solution */ #define MSG_DISCONN "$_DISCONNECT\r\n" /* disconnect message */ #define DLOPT_FORCE 0x01 /* download option: force download existing */ #define DLOPT_KEEPCMP 0x02 /* download option: keep compressed file */ #define DLOPT_HOLDERR 0x04 /* download option: hold on error file */ #define DLOPT_HOLDLST 0x08 /* download option: hold on listing file */ #define LLI_SLIP 0x01 /* LLI: cycle-slip */ #define LLI_HALFC 0x02 /* LLI: half-cycle not resovled */ #define LLI_BOCTRK 0x04 /* LLI: boc tracking of mboc signal */ #define LLI_HALFA 0x40 /* LLI: half-cycle added */ #define LLI_HALFS 0x80 /* LLI: half-cycle subtracted */ #define P2_5 0.03125 /* 2^-5 */ #define P2_6 0.015625 /* 2^-6 */ #define P2_11 4.882812500000000E-04 /* 2^-11 */ #define P2_15 3.051757812500000E-05 /* 2^-15 */ #define P2_17 7.629394531250000E-06 /* 2^-17 */ #define P2_19 1.907348632812500E-06 /* 2^-19 */ #define P2_20 9.536743164062500E-07 /* 2^-20 */ #define P2_21 4.768371582031250E-07 /* 2^-21 */ #define P2_23 1.192092895507810E-07 /* 2^-23 */ #define P2_24 5.960464477539063E-08 /* 2^-24 */ #define P2_27 7.450580596923828E-09 /* 2^-27 */ #define P2_29 1.862645149230957E-09 /* 2^-29 */ #define P2_30 9.313225746154785E-10 /* 2^-30 */ #define P2_31 4.656612873077393E-10 /* 2^-31 */ #define P2_32 2.328306436538696E-10 /* 2^-32 */ #define P2_33 1.164153218269348E-10 /* 2^-33 */ #define P2_35 2.910383045673370E-11 /* 2^-35 */ #define P2_38 3.637978807091710E-12 /* 2^-38 */ #define P2_39 1.818989403545856E-12 /* 2^-39 */ #define P2_40 9.094947017729280E-13 /* 2^-40 */ #define P2_43 1.136868377216160E-13 /* 2^-43 */ #define P2_48 3.552713678800501E-15 /* 2^-48 */ #define P2_50 8.881784197001252E-16 /* 2^-50 */ #define P2_55 2.775557561562891E-17 /* 2^-55 */ #define RT_MODE 1 /* real-time mode */ #define PT_MODE 2 /* post time mode */ #define INNOVATION_THRESHOLD_INIT 300 /* initial innovation threshold */ #define ELEVATION_MASK 15 /* elevation angle */ #define SNR_MASK 30 /* SNR mask */ #define INNOVATION_THRESHOLD 30 /* innovation threshold */ #define INSS_NONE 0 /* ins updates status: no update */ #define INSS_MECH 1 /* ins updates status: ins mechanization */ #define INSS_TIME 2 /* ins updates status: ins mechanization and propagate states and covariance */ #define INSS_ZVU 4 /* ins updates status: ins zero velocity update */ #define INSS_ZARU 5 /* ins updates status: ins zero angular rate update */ #define INSS_NHC 6 /* ins updates status: ins non-holonomic constraint updates */ #define INSS_DOPP 10 /* ins updates status: doppler measurement aid */ #define INSUPD_TIME 0 /* only ins mechanization to updates ins states and updates states and covariance*/ #define INSUPD_MEAS 1 /* use gnss measurements to updates ins states */ #define INSUPD_INSS 2 /* only ins mechanization to updates ins states */ #define MAXIMUBUF 1000 /* max number of imu measurement data buffer */ #define IMUBUFF_SIZE 300 /* imu buffer size */ #define SQR(x) ((x)*(x)) #define SQRT(x) ((x)<=0.0||(x)!=(x)?0.0:sqrt(x)) #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) #define FILEPATHSEP '\\' #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) #define FILEPATHSEP '/' #endif //#define CLIENT 0 /* type definitions ----------------------------------------------------------*/ typedef struct { /* time struct */ time_t time; /* time (s) expressed by standard time_t */ double sec; /* fraction of second under 1 s */ } gtime_t; typedef struct { int PRN; /* satellite PRN number */ double tow; /* time of week(GPST) */ double psr; /* psr range */ double dual_cor; /* IF_model correction */ double tgd_cor; /* tgd correction */ double d_psr; /* range rate(m/s) */ double ecef_pos[3]; /* satellite position in ecef {x,y,z} (m) */ double ecef_v[3]; /* satellite velocity in ecef {x,y,z} (m/s) */ double clk_err; /* clk correction */ double L1_snr; /* L1 SNR (dbHz) */ double carrier_phase; /* carrrier phase */ double satpos_var; /* satellite position variance */ double clk_drift; /* satellite clock drift */ double delta_r[2]; /* delta_r[0]: psr innovation * delta_r[1]: range rate innovation */ double azel[2]; /* azimuth/elevation angle {az,el} (rad) */ double var; /* psr variance */ double u_as_e_T[3]; /* direction vector from user to satellite */ } satd_t; typedef struct { int n, nmax; satd_t *data; }sat_t; typedef struct { double tow; double ecef_pos[3]; double ecef_v[3]; } pvtd_t; typedef struct { pvtd_t *data; int n, nmax; }pvt_t; typedef struct { /* imu data record type */ double time; /* time */ double gyro[3]; /* angular rate measurements in b-frame (rad/s) */ double accl[3]; /* force measurements in b-frame (m/s^2) */ double tow; gtime_t syn_time; /* align with obs time */ } imud_t; typedef struct { /* imu data type */ imud_t *data; /* imu data records */ int n,nmax; /* number/max number of imu data record */ } imu_t; typedef struct { gtime_t gtime; /* ins state time */ gtime_t pgtime; /* previous ins time */ gtime_t gimu_time; /* imu timestamp */ gtime_t pg_imu_time; /* previous imu timestamp */ gtime_t ptct; /* previous time of ins-gnss tightly coupled (0: no coupled)*/ double time,ptime; /* time for the post process */ double imu_time; /* imu timestamp */ double dt; /* time difference of precious ins updates and current time */ double dt_tc; /* time difference of precious ins-gnss tightly coupled and current time */ double attitude[3]; /* attitude enlur angle */ double velocity[3]; /* velocity in ecef-frame */ double position[3]; /* position in ecef-frame */ double acc_bias[3]; /* acc bias(forward, right, down) */ double gyro_bias[3]; /* gyro bias */ double clk[3]; /* receiver clock bias to time systems (s) * clk[0]:GPS receiver clock * clk[1]:GAL receiver clock * clk[2]:BDS receiver clock */ double dtrr[3]; /* clock-drift (m/s) */ double p_attitude[3]; /* previous attitude enlur angle */ double p_velocity[3]; /* previous velocity in ecef-frame */ double p_position[3]; /* previous position in ecef-frame */ double p_acc_bias[3]; /* previous acc bias */ double p_gyrp_bias[3]; /* previous gyro bias */ double p_clk[8]; /* previous clk err */ double Cbn[9]; /* transform matrix of b-frame to n-frame */ double Cbe[9]; /* b-frame to e-frame trans matrix */ double pCbe[9]; /* previous b-frame to e-frame trans matrix */ double fb[3],omgb[3]; /* corrected specific-force (b-frame)/angular rate (b-frame) */ double fbp[3],omgbp[3]; /* precious epoch corrected specific-force (b-frame)/angular rate (b-frame) */ int stat,gstat; /* ins updates stat,gnss updates status */ double *P; /* error covariance matrix */ double *P0,*F; /* predict error states correction and its covariance matrix/transmit matrix */ double *pP; int nx; /* numbers of estimated states */ int ns; /* numbers valid satellite for coupled */ double *x; /* ekf estimated states */ int init_flag; /* ins state init flag */ double L_ba_b[3]; /* lever arm from antenna to imu */ double llh[3]; /* {latitude, longitude, height} */ void *rtkp; /* pointer rtk struct data */ } ins_t; typedef struct { double init_att_unc; /* Initial attitude uncertainty per axis (rad) */ double init_vel_unc; /* Initial velocity uncertainty per axis (m/s) */ double init_pos_unc; /* Initial position uncertainty per axis (m) */ double init_b_a_unc; /* Initial accel. bias uncertainty (m/s^2) */ double init_b_g_unc; /* Initial gyro. bias uncertainty (rad/s) */ double init_clk_offset_unc; /* Initial clock offset uncertainty per axis (m) */ double init_cllk_drift_unc; /* Initial clock drift uncertainty per axis (s/s) */ double gyro_noise_PSD; /* Gyro noise PSD (rad^2/s) */ double accel_noise_PSD; /* Accelerometer noise PSD (m^2 s^-3) */ double accel_bias_PSD; /* Accelerometer bias random walk PSD (m^2 s^-5) */ double gyro_bias_PSD; /* Gyro bias random walk PSD (rad^2/s^3) */ double clock_freq_PSD; /* Receiver clock frequency-drift PSD (m^2/s^3) */ double clock_phase_PSD; /* Receiver clock phase-drift PSD (m^2/s) */ double pseudo_range_SD; /* Pseudo-range measurement noise SD (m) */ double range_rate_SD; /* Pseudo-range rate measurement noise SD (m/s) */ double bg[3]; /* gyro constant bias (rad/sec) */ double ba[3]; /* accl constant bias (m/s^2) */ int tc; /* ins-gnss tightly coupled mode (INSTC_???) */ double L_ba_b[3]; /* lever arm from antenna to imu */ void *gopt; /* pointer to option */ int noise_type; /* INS_RANDOM_WALK or INS_GAUSS_MARKOV */ }insopt_t; ///////////////////////////////////////////////////////////////////////////////////////////////// typedef struct { /* observation data record */ gtime_t time; /* receiver sampling time (GPST) */ uint8_t sat,rcv; /* satellite/receiver number */ uint16_t SNR[NFREQ+NEXOBS]; /* signal strength (0.001 dBHz) */ uint8_t LLI[NFREQ+NEXOBS]; /* loss of lock indicator */ uint8_t code[NFREQ+NEXOBS]; /* code indicator (CODE_???) */ double L[NFREQ+NEXOBS]; /* observation data carrier-phase (cycle) */ double P[NFREQ+NEXOBS]; /* observation data pseudorange (m) */ float D[NFREQ+NEXOBS]; /* observation data doppler frequency (Hz) */ int timevalid; /* time is valid (Valid GNSS fix) for time mark */ gtime_t eventime; /* time of event (GPST) */ uint8_t Lstd[NFREQ+NEXOBS]; /* stdev of carrier phase (0.004 cycles) */ uint8_t Pstd[NFREQ+NEXOBS]; /* stdev of pseudorange (0.01*2^(n+5) meters) */ uint8_t freq; /* GLONASS frequency channel (0-13) */ } obsd_t; typedef struct { /* observation data */ int n,nmax; /* number of obervation data/allocated */ int flag; /* epoch flag (0:ok,1:power failure,>1:event flag) */ int rcvcount; /* count of rcv event */ int tmcount; /* time mark count */ obsd_t *data; /* observation data records */ } obs_t; typedef struct { /* earth rotation parameter data type */ double mjd; /* mjd (days) */ double xp,yp; /* pole offset (rad) */ double xpr,ypr; /* pole offset rate (rad/day) */ double ut1_utc; /* ut1-utc (s) */ double lod; /* length of day (s/day) */ } erpd_t; typedef struct { /* earth rotation parameter type */ int n,nmax; /* number and max number of data */ erpd_t *data; /* earth rotation parameter data */ } erp_t; typedef struct { /* antenna parameter type */ int sat; /* satellite number (0:receiver) */ char type[MAXANT]; /* antenna type */ char code[MAXANT]; /* serial number or satellite code */ gtime_t ts,te; /* valid time start and end */ double off[NFREQ][ 3]; /* phase center offset e/n/u or x/y/z (m) */ double var[NFREQ][19]; /* phase center variation (m) */ /* el=90,85,...,0 or nadir=0,1,2,3,... (deg) */ } pcv_t; typedef struct { /* antenna parameters type */ int n,nmax; /* number of data/allocated */ pcv_t *pcv; /* antenna parameters data */ } pcvs_t; typedef struct { /* almanac type */ int sat; /* satellite number */ int svh; /* sv health (0:ok) */ int svconf; /* as and sv config */ int week; /* GPS/QZS: gps week, GAL: galileo week */ gtime_t toa; /* Toa */ /* SV orbit parameters */ double A,e,i0,OMG0,omg,M0,OMGd; double toas; /* Toa (s) in week */ double f0,f1; /* SV clock parameters (af0,af1) */ } alm_t; typedef struct { /* GPS/QZS/GAL broadcast ephemeris type */ int sat; /* satellite number */ int iode,iodc; /* IODE,IODC */ int sva; /* SV accuracy (URA index) */ int svh; /* SV health (0:ok) */ int week; /* GPS/QZS: gps week, GAL: galileo week */ int code; /* GPS/QZS: code on L2 */ /* GAL: data source defined as rinex 3.03 */ /* BDS: data source (0:unknown,1:B1I,2:B1Q,3:B2I,4:B2Q,5:B3I,6:B3Q) */ int flag; /* GPS/QZS: L2 P data flag */ /* BDS: nav type (0:unknown,1:IGSO/MEO,2:GEO) */ gtime_t toe,toc,ttr; /* Toe,Toc,T_trans */ /* SV orbit parameters */ double A,e,i0,OMG0,omg,M0,deln,OMGd,idot; double crc,crs,cuc,cus,cic,cis; double toes; /* Toe (s) in week */ double fit; /* fit interval (h) */ double f0,f1,f2; /* SV clock parameters (af0,af1,af2) */ double tgd[6]; /* group delay parameters */ /* GPS/QZS:tgd[0]=TGD */ /* GAL:tgd[0]=BGD_E1E5a,tgd[1]=BGD_E1E5b */ /* CMP:tgd[0]=TGD_B1I ,tgd[1]=TGD_B2I/B2b,tgd[2]=TGD_B1Cp */ /* tgd[3]=TGD_B2ap,tgd[4]=ISC_B1Cd ,tgd[5]=ISC_B2ad */ double Adot,ndot; /* Adot,ndot for CNAV */ } eph_t; typedef struct { /* GLONASS broadcast ephemeris type */ int sat; /* satellite number */ int iode; /* IODE (0-6 bit of tb field) */ int frq; /* satellite frequency number */ int svh,sva,age; /* satellite health, accuracy, age of operation */ gtime_t toe; /* epoch of epherides (gpst) */ gtime_t tof; /* message frame time (gpst) */ double pos[3]; /* satellite position (ecef) (m) */ double vel[3]; /* satellite velocity (ecef) (m/s) */ double acc[3]; /* satellite acceleration (ecef) (m/s^2) */ double taun,gamn; /* SV clock bias (s)/relative freq bias */ double dtaun; /* delay between L1 and L2 (s) */ } geph_t; typedef struct { /* precise ephemeris type */ gtime_t time; /* time (GPST) */ int index; /* ephemeris index for multiple files */ double pos[MAXSAT][4]; /* satellite position/clock (ecef) (m|s) */ float std[MAXSAT][4]; /* satellite position/clock std (m|s) */ double vel[MAXSAT][4]; /* satellite velocity/clk-rate (m/s|s/s) */ float vst[MAXSAT][4]; /* satellite velocity/clk-rate std (m/s|s/s) */ float cov[MAXSAT][3]; /* satellite position covariance (m^2) */ float vco[MAXSAT][3]; /* satellite velocity covariance (m^2) */ } peph_t; typedef struct { /* precise clock type */ gtime_t time; /* time (GPST) */ int index; /* clock index for multiple files */ double clk[MAXSAT][1]; /* satellite clock (s) */ float std[MAXSAT][1]; /* satellite clock std (s) */ } pclk_t; typedef struct { /* SBAS ephemeris type */ int sat; /* satellite number */ gtime_t t0; /* reference epoch time (GPST) */ gtime_t tof; /* time of message frame (GPST) */ int sva; /* SV accuracy (URA index) */ int svh; /* SV health (0:ok) */ 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) */ } seph_t; typedef struct { /* NORAL TLE data type */ char name [32]; /* common name */ char alias[32]; /* alias name */ char satno[16]; /* satellilte catalog number */ char satclass; /* classification */ char desig[16]; /* international designator */ gtime_t epoch; /* element set epoch (UTC) */ double ndot; /* 1st derivative of mean motion */ double nddot; /* 2st derivative of mean motion */ double bstar; /* B* drag term */ int etype; /* element set type */ int eleno; /* element number */ double inc; /* orbit inclination (deg) */ double OMG; /* right ascension of ascending node (deg) */ double ecc; /* eccentricity */ double omg; /* argument of perigee (deg) */ double M; /* mean anomaly (deg) */ double n; /* mean motion (rev/day) */ int rev; /* revolution number at epoch */ } tled_t; typedef struct { /* NORAD TLE (two line element) type */ int n,nmax; /* number/max number of two line element data */ tled_t *data; /* NORAD TLE data */ } tle_t; typedef struct { /* TEC grid type */ gtime_t time; /* epoch time (GPST) */ int ndata[3]; /* TEC grid data size {nlat,nlon,nhgt} */ double rb; /* earth radius (km) */ double lats[3]; /* latitude start/interval (deg) */ double lons[3]; /* longitude start/interval (deg) */ double hgts[3]; /* heights start/interval (km) */ double *data; /* TEC grid data (tecu) */ float *rms; /* RMS values (tecu) */ } tec_t; typedef struct { /* SBAS message type */ int week,tow; /* receiption time */ uint8_t prn,rcv; /* SBAS satellite PRN,receiver number */ uint8_t msg[29]; /* SBAS message (226bit) padded by 0 */ } sbsmsg_t; typedef struct { /* SBAS messages type */ int n,nmax; /* number of SBAS messages/allocated */ 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) */ int16_t udre; /* UDRE+1 */ int16_t 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 sat; /* satellite 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 nsat; /* number of satellites */ int tlat; /* system latency (s) */ sbssatp_t sat[MAXSAT]; /* satellite correction */ } sbssat_t; typedef struct { /* SBAS ionospheric correction type */ gtime_t t0; /* correction time */ int16_t lat,lon; /* latitude/longitude (deg) */ int16_t give; /* GIVI+1 */ float delay; /* vertical delay estimate (m) */ } sbsigp_t; typedef struct { /* IGP band type */ int16_t x; /* longitude/latitude (deg) */ const int16_t *y; /* latitudes/longitudes (deg) */ uint8_t bits; /* IGP mask start bit */ uint8_t 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 { /* DGPS/GNSS correction type */ gtime_t t0; /* correction time */ double prc; /* pseudorange correction (PRC) (m) */ double rrc; /* range rate correction (RRC) (m/s) */ int iod; /* issue of data (IOD) */ double udre; /* UDRE */ } dgps_t; typedef struct { /* SSR correction type */ gtime_t t0[6]; /* epoch time (GPST) {eph,clk,hrclk,ura,bias,pbias} */ double udi[6]; /* SSR update interval (s) */ int iod[6]; /* iod ssr {eph,clk,hrclk,ura,bias,pbias} */ int iode; /* issue of data */ int iodcrc; /* issue of data crc for beidou/sbas */ int ura; /* URA indicator */ int refd; /* sat ref datum (0:ITRF,1:regional) */ double deph [3]; /* delta orbit {radial,along,cross} (m) */ double ddeph[3]; /* dot delta orbit {radial,along,cross} (m/s) */ double dclk [3]; /* delta clock {c0,c1,c2} (m,m/s,m/s^2) */ double hrclk; /* high-rate clock corection (m) */ float cbias[MAXCODE]; /* code biases (m) */ double pbias[MAXCODE]; /* phase biases (m) */ float stdpb[MAXCODE]; /* std-dev of phase biases (m) */ double yaw_ang,yaw_rate; /* yaw angle and yaw rate (deg,deg/s) */ uint8_t update; /* update flag (0:no update,1:update) */ } ssr_t; typedef struct { /* navigation data type */ int n,nmax; /* number of broadcast ephemeris */ int ng,ngmax; /* number of glonass ephemeris */ int ns,nsmax; /* number of sbas ephemeris */ int ne,nemax; /* number of precise ephemeris */ int nc,ncmax; /* number of precise clock */ int na,namax; /* number of almanac data */ int nt,ntmax; /* number of tec grid data */ eph_t *eph; /* GPS/QZS/GAL/BDS/IRN ephemeris */ geph_t *geph; /* GLONASS ephemeris */ seph_t *seph; /* SBAS ephemeris */ peph_t *peph; /* precise ephemeris */ pclk_t *pclk; /* precise clock */ alm_t *alm; /* almanac data */ tec_t *tec; /* tec grid data */ erp_t erp; /* earth rotation parameters */ double utc_gps[8]; /* GPS delta-UTC parameters {A0,A1,Tot,WNt,dt_LS,WN_LSF,DN,dt_LSF} */ double utc_glo[8]; /* GLONASS UTC time parameters {tau_C,tau_GPS} */ double utc_gal[8]; /* Galileo UTC parameters */ double utc_qzs[8]; /* QZS UTC parameters */ double utc_cmp[8]; /* BeiDou UTC parameters */ double utc_irn[9]; /* IRNSS UTC parameters {A0,A1,Tot,...,dt_LSF,A2} */ double utc_sbs[4]; /* SBAS UTC parameters */ double ion_gps[8]; /* GPS iono model parameters {a0,a1,a2,a3,b0,b1,b2,b3} */ double ion_gal[4]; /* Galileo iono model parameters {ai0,ai1,ai2,0} */ double ion_qzs[8]; /* QZSS iono model parameters {a0,a1,a2,a3,b0,b1,b2,b3} */ double ion_cmp[8]; /* BeiDou iono model parameters {a0,a1,a2,a3,b0,b1,b2,b3} */ double ion_irn[8]; /* IRNSS iono model parameters {a0,a1,a2,a3,b0,b1,b2,b3} */ int glo_fcn[32]; /* GLONASS FCN + 8 */ double cbias[MAXSAT][3]; /* satellite DCB (0:P1-P2,1:P1-C1,2:P2-C2) (m) */ double rbias[MAXRCV][2][3]; /* receiver DCB (0:P1-P2,1:P1-C1,2:P2-C2) (m) */ pcv_t pcvs[MAXSAT]; /* satellite antenna pcv */ sbssat_t sbssat; /* SBAS satellite corrections */ sbsion_t sbsion[MAXBAND+1]; /* SBAS ionosphere corrections */ dgps_t dgps[MAXSAT]; /* DGPS corrections */ ssr_t ssr[MAXSAT]; /* SSR corrections */ } nav_t; typedef struct { /* station parameter type */ char name [MAXANT]; /* marker name */ char marker [MAXANT]; /* marker number */ char antdes [MAXANT]; /* antenna descriptor */ char antsno [MAXANT]; /* antenna serial number */ char rectype[MAXANT]; /* receiver type descriptor */ char recver [MAXANT]; /* receiver firmware version */ char recsno [MAXANT]; /* receiver serial number */ int antsetup; /* antenna setup id */ int itrf; /* ITRF realization year */ int deltype; /* antenna delta type (0:enu,1:xyz) */ double pos[3]; /* station position (ecef) (m) */ double del[3]; /* antenna position delta (e/n/u or x/y/z) (m) */ double hgt; /* antenna height (m) */ int glo_cp_align; /* GLONASS code-phase alignment (0:no,1:yes) */ double glo_cp_bias[4]; /* GLONASS code-phase biases {1C,1P,2C,2P} (m) */ } sta_t; typedef struct { /* solution type */ gtime_t time; /* time (GPST) */ gtime_t eventime; /* time of event (GPST) */ double rr[6]; /* position/velocity (m|m/s) */ /* {x,y,z,vx,vy,vz} or {e,n,u,ve,vn,vu} */ float qr[6],pqr[6]; /* position variance/covariance (m^2) */ /* {c_xx,c_yy,c_zz,c_xy,c_yz,c_zx} or */ /* {c_ee,c_nn,c_uu,c_en,c_nu,c_ue} */ float qv[6]; /* velocity variance/covariance (m^2/s^2) */ double dtr[6]; /* receiver clock bias to time systems (s) */ uint8_t type; /* type (0:xyz-ecef,1:enu-baseline) */ uint8_t stat,pstat; /* solution status (SOLQ_???) */ uint8_t ns; /* number of valid satellites */ float age; /* age of differential (s) */ float ratio; /* AR ratio factor for valiation */ float prev_ratio1; /* previous initial AR ratio factor for validation */ float prev_ratio2; /* previous final AR ratio factor for validation */ float thres; /* AR ratio threshold for valiation */ double att[3]; /* vehicle attitude (roll,pitch,yaw/deg) */ float qa[6]; /* vehicle attitude variance/covariance (rad^2)              * {c_xx,c_yy,c_zz,c_xy,c_yz,c_zx} */ double ba[3],bg[3]; /* acceleration bias and gyro bias */ imud_t imu; /* correctioned imu measurement data */ double vb[3]; /* vehicle velocity expressed in frd-frame */ double dtrr[3]; /* receiver clock drift (m/s) about GPST */ double tow; /* time of week */ } sol_t; typedef struct { /* solution buffer type */ int n,nmax; /* number of solution/max number of buffer */ int cyclic; /* cyclic buffer flag */ int start,end; /* start/end index */ gtime_t time; /* current solution time */ sol_t *data; /* solution data */ double rb[3]; /* reference position {x,y,z} (ecef) (m) */ uint8_t buff[MAXSOLMSG+1]; /* message buffer */ int nb; /* number of byte in message buffer */ } solbuf_t; typedef struct { /* solution status type */ gtime_t time; /* time (GPST) */ uint8_t sat; /* satellite number */ uint8_t frq; /* frequency (1:L1,2:L2,...) */ float az,el; /* azimuth/elevation angle (rad) */ float resp; /* pseudorange residual (m) */ float resc; /* carrier-phase residual (m) */ uint8_t flag; /* flags: (vsat<<5)+(slip<<3)+fix */ uint16_t snr; /* signal strength (*SNR_UNIT dBHz) */ uint16_t lock; /* lock counter */ uint16_t outc; /* outage counter */ uint16_t slipc; /* slip counter */ uint16_t rejc; /* reject counter */ } solstat_t; typedef struct { /* solution status buffer type */ int n,nmax; /* number of solution/max number of buffer */ solstat_t *data; /* solution status data */ } solstatbuf_t; typedef struct { /* RTCM control struct type */ int staid; /* station id */ int stah; /* station health */ int seqno; /* sequence number for rtcm 2 or iods msm */ int outtype; /* output message type */ gtime_t time; /* message time */ gtime_t time_s; /* message start time */ obs_t obs; /* observation data (uncorrected) */ nav_t nav; /* satellite ephemerides */ sta_t sta; /* station parameters */ dgps_t *dgps; /* output of dgps corrections */ ssr_t ssr[MAXSAT]; /* output of ssr corrections */ char msg[128]; /* special message */ char msgtype[256]; /* last message type */ char msmtype[7][128]; /* msm signal types */ int obsflag; /* obs data complete flag (1:ok,0:not complete) */ int ephsat; /* input ephemeris satellite number */ int ephset; /* input ephemeris set (0-1) */ double cp[MAXSAT][NFREQ+NEXOBS]; /* carrier-phase measurement */ uint16_t lock[MAXSAT][NFREQ+NEXOBS]; /* lock time */ uint16_t loss[MAXSAT][NFREQ+NEXOBS]; /* loss of lock count */ gtime_t lltime[MAXSAT][NFREQ+NEXOBS]; /* last lock time */ int nbyte; /* number of bytes in message buffer */ int nbit; /* number of bits in word buffer */ int len; /* message length (bytes) */ uint8_t buff[4096]; /* message buffer */ uint32_t word; /* word buffer for rtcm 2 */ uint32_t nmsg2[100]; /* message count of RTCM 2 (1-99:1-99,0:other) */ uint32_t nmsg3[400]; /* message count of RTCM 3 (1-299:1001-1299,300-329:4070-4099,0:ohter) */ char opt[256]; /* RTCM dependent options */ imud_t imud; } rtcm_t; typedef struct { /* RINEX control struct type */ gtime_t time; /* message time */ double ver; /* RINEX version */ char type; /* RINEX file type ('O','N',...) */ int sys; /* navigation system */ int tsys; /* time system */ char tobs[8][MAXOBSTYPE][4]; /* rinex obs types */ obs_t obs; /* observation data */ nav_t nav; /* navigation data */ sta_t sta; /* station info */ int ephsat; /* input ephemeris satellite number */ int ephset; /* input ephemeris set (0-1) */ char opt[256]; /* rinex dependent options */ } rnxctr_t; typedef struct { /* download URL type */ char type[32]; /* data type */ char path[1024]; /* URL path */ char dir [1024]; /* local directory */ double tint; /* time interval (s) */ } url_t; typedef struct { /* option type */ const char *name; /* option name */ int format; /* option format (0:int,1:double,2:string,3:enum) */ void *var; /* pointer to option variable */ const char *comment; /* option comment/enum labels/unit */ } opt_t; typedef struct { /* SNR mask type */ int ena[2]; /* enable flag {rover,base} */ double mask[NFREQ][9]; /* mask (dBHz) at 5,10,...85 deg */ } snrmask_t; typedef struct { /* processing options type */ int mode; /* positioning mode (PMODE_???) */ int soltype; /* solution type (0:forward,1:backward,2:combined) */ int nf; /* number of frequencies (1:L1,2:L1+L2,3:L1+L2+L5) */ int navsys; /* navigation system */ double elmin; /* elevation mask angle (rad) */ snrmask_t snrmask; /* SNR mask */ int sateph; /* satellite ephemeris/clock (EPHOPT_???) */ int modear; /* AR mode (0:off,1:continuous,2:instantaneous,3:fix and hold,4:ppp-ar) */ int glomodear; /* GLONASS AR mode (0:off,1:on,2:auto cal,3:ext cal) */ int gpsmodear; /* GPS AR mode, debug/learning only (0:off,1:on) */ int bdsmodear; /* BeiDou AR mode (0:off,1:on) */ int arfilter; /* AR filtering to reject bad sats (0:off,1:on) */ int maxout; /* obs outage count to reset bias */ int minlock; /* min lock count to fix ambiguity */ int minfixsats; /* min sats to fix integer ambiguities */ int minholdsats; /* min sats to hold integer ambiguities */ int mindropsats; /* min sats to drop sats in AR */ int minfix; /* min fix count to hold ambiguity */ int armaxiter; /* max iteration to resolve ambiguity */ int ionoopt; /* ionosphere option (IONOOPT_???) */ int tropopt; /* troposphere option (TROPOPT_???) */ int dynamics; /* dynamics model (0:none,1:velociy,2:accel) */ int tidecorr; /* earth tide correction (0:off,1:solid,2:solid+otl+pole) */ int niter; /* number of filter iteration */ int codesmooth; /* code smoothing window size (0:none) */ int intpref; /* interpolate reference obs (for post mission) */ int sbascorr; /* SBAS correction options */ int sbassatsel; /* SBAS satellite selection (0:all) */ int rovpos; /* rover position for fixed mode */ int refpos; /* base position for relative mode */ /* (0:pos in prcopt, 1:average of single pos, */ /* 2:read from file, 3:rinex header, 4:rtcm pos) */ double eratio[NFREQ]; /* code/phase error ratio */ double err[8]; /* observation error terms */ /* [reserved,constant,elevation,baseline,doppler,snr-max,snr, rcv_std] */ double std[3]; /* initial-state std [0]bias,[1]iono [2]trop */ double prn[6]; /* process-noise std [0]bias,[1]iono [2]trop [3]acch [4]accv [5] pos */ double sclkstab; /* satellite clock stability (sec/sec) */ double thresar[8]; /* AR validation threshold */ double elmaskar; /* elevation mask of AR for rising satellite (deg) */ double elmaskhold; /* elevation mask to hold ambiguity (deg) */ double thresslip; /* slip threshold of geometry-free phase (m) */ double thresdop; /* slip threshold of doppler (m) */ double varholdamb; /* variance for fix-and-hold psuedo measurements (cycle^2) */ double gainholdamb; /* gain used for GLO and SBAS sats to adjust ambiguity */ double maxtdiff; /* max difference of time (sec) */ double maxinno; /* reject threshold of innovation (m) */ double maxgdop; /* reject threshold of gdop */ double baseline[2]; /* baseline length constraint {const,sigma} (m) */ double ru[3]; /* rover position for fixed mode {x,y,z} (ecef) (m) */ double rb[3]; /* base position for relative mode {x,y,z} (ecef) (m) */ char anttype[2][MAXANT]; /* antenna types {rover,base} */ double antdel[2][3]; /* antenna delta {{rov_e,rov_n,rov_u},{ref_e,ref_n,ref_u}} */ pcv_t pcvr[2]; /* receiver antenna parameters {rov,base} */ uint8_t exsats[MAXSAT]; /* excluded satellites (1:excluded,2:included) */ int maxaveep; /* max averaging epoches */ int initrst; /* initialize by restart */ int outsingle; /* output single by dgps/float/fix/ppp outage */ char rnxopt[2][256]; /* rinex options {rover,base} */ int posopt[6]; /* positioning options */ int syncsol; /* solution sync mode (0:off,1:on) */ double odisp[2][6*11]; /* ocean tide loading parameters {rov,base} */ int freqopt; /* disable L2-AR */ char pppopt[256]; /* ppp option */ insopt_t insopt; /* ins option */ } prcopt_t; typedef struct { /* solution options type */ int posf; /* solution format (SOLF_???) */ int times; /* time system (TIMES_???) */ 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 outvel; /* output velocity 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) */ int solstatic; /* solution of static mode (0:all,1:single) */ int sstat; /* solution statistics level (0:off,1:states,2:residuals) */ int trace; /* debug trace level (0:off,1-5:debug) */ double nmeaintv[2]; /* nmea output interval (s) (<0:no,0:all) */ /* nmeaintv[0]:gprmc,gpgga,nmeaintv[1]:gpgsv */ char sep[64]; /* field separator */ char prog[64]; /* program name */ double maxsolstd; /* max std-dev for solution output (m) (0:all) */ } solopt_t; typedef struct { /* file options type */ char satantp[MAXSTRPATH]; /* satellite antenna parameters file */ char rcvantp[MAXSTRPATH]; /* receiver antenna parameters file */ char stapos [MAXSTRPATH]; /* station positions file */ char geoid [MAXSTRPATH]; /* external geoid data file */ char iono [MAXSTRPATH]; /* ionosphere data file */ char dcb [MAXSTRPATH]; /* dcb data file */ char eop [MAXSTRPATH]; /* eop data file */ char blq [MAXSTRPATH]; /* ocean tide loading blq file */ char tempdir[MAXSTRPATH]; /* ftp/http temporaly directory */ char geexe [MAXSTRPATH]; /* google earth exec file */ char solstat[MAXSTRPATH]; /* solution statistics file */ char trace [MAXSTRPATH]; /* debug trace file */ } filopt_t; typedef struct { /* RINEX options type */ gtime_t ts,te; /* time start/end */ double tint; /* time interval (s) */ double ttol; /* time tolerance (s) */ double tunit; /* time unit for multiple-session (s) */ int rnxver; /* RINEX version (x100) */ int navsys; /* navigation system */ int obstype; /* observation type */ int freqtype; /* frequency type */ char mask[7][64]; /* code mask {GPS,GLO,GAL,QZS,SBS,CMP,IRN} */ char staid [32]; /* station id for rinex file name */ char prog [32]; /* program */ char runby [32]; /* run-by */ char marker[64]; /* marker name */ char markerno[32]; /* marker number */ char markertype[32]; /* marker type (ver.3) */ 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 */ double glo_cp_bias[4]; /* GLONASS code-phase biases (m) */ char comment[MAXCOMMENT][64]; /* comments */ char rcvopt[256]; /* receiver dependent options */ uint8_t exsats[MAXSAT]; /* excluded satellites */ int glofcn[32]; /* glonass fcn+8 */ int outiono; /* output iono correction */ int outtime; /* output time system correction */ int outleaps; /* output leap seconds */ int autopos; /* auto approx position */ int phshift; /* phase shift correction */ int halfcyc; /* half cycle correction */ int sep_nav; /* separated nav files */ gtime_t tstart; /* first obs time */ gtime_t tend; /* last obs time */ gtime_t trtcm; /* approx log start time for rtcm */ char tobs[7][MAXOBSTYPE][4]; /* obs types {GPS,GLO,GAL,QZS,SBS,CMP,IRN} */ double shift[7][MAXOBSTYPE]; /* phase shift (cyc) {GPS,GLO,GAL,QZS,SBS,CMP,IRN} */ int nobs[7]; /* number of obs types {GPS,GLO,GAL,QZS,SBS,CMP,IRN} */ } rnxopt_t; typedef struct { /* satellite status type */ uint8_t sys; /* navigation system */ uint8_t vs; /* valid satellite flag single */ double azel[2]; /* azimuth/elevation angles {az,el} (rad) */ double resp[NFREQ]; /* residuals of pseudorange (m) */ double resc[NFREQ]; /* residuals of carrier-phase (m) */ double icbias[NFREQ]; /* glonass IC bias (cycles) */ uint8_t vsat[NFREQ]; /* valid satellite flag */ uint16_t snr_rover [NFREQ]; /* rover signal strength (0.25 dBHz) */ uint16_t snr_base [NFREQ]; /* base signal strength (0.25 dBHz) */ uint8_t fix [NFREQ]; /* ambiguity fix flag (1:fix,2:float,3:hold) */ uint8_t slip[NFREQ]; /* cycle-slip flag */ uint8_t half[NFREQ]; /* half-cycle valid flag */ int lock [NFREQ]; /* lock counter of phase */ uint32_t outc [NFREQ]; /* obs outage counter of phase */ uint32_t slipc[NFREQ]; /* cycle-slip counter */ uint32_t rejc [NFREQ]; /* reject counter */ double gf[NFREQ-1]; /* geometry-free phase (m) */ double mw[NFREQ-1]; /* MW-LC (m) */ double phw; /* phase windup (cycle) */ gtime_t pt[2][NFREQ]; /* previous carrier-phase time */ double ph[2][NFREQ]; /* previous carrier-phase observable (cycle) */ } ssat_t; typedef struct { /* ambiguity control type */ gtime_t epoch[4]; /* last epoch */ int n[4]; /* number of epochs */ double LC [4]; /* linear combination average */ double LCv[4]; /* linear combination variance */ int fixcnt; /* fix count */ char flags[MAXSAT]; /* fix flags */ } ambc_t; typedef struct { /* RTK control/result type */ sol_t sol; /* RTK solution */ double rb[6]; /* base position/velocity (ecef) (m|m/s) */ int nx,na; /* number of float states/fixed states */ double tt; /* time difference between current and previous (s) */ double *x, *P; /* float states and their covariance */ double *xa,*Pa; /* fixed states and their covariance */ int nfix; /* number of continuous fixes of ambiguity */ int excsat; /* index of next satellite to be excluded for partial ambiguity resolution */ int nb_ar; /* number of ambiguities used for AR last epoch */ char holdamb; /* set if fix-and-hold has occurred at least once */ ambc_t ambc[MAXSAT]; /* ambiguity control */ ssat_t ssat[MAXSAT]; /* satellite status */ int neb; /* bytes in error message buffer */ char errbuf[MAXERRMSG]; /* error message buffer */ prcopt_t opt; /* processing options */ int initial_mode; /* initial positioning mode */ ins_t ins; /* ins state */ } rtk_t; typedef struct { /* receiver raw data control type */ gtime_t time; /* message time */ gtime_t tobs[MAXSAT][NFREQ+NEXOBS]; /* observation data time */ obs_t obs; /* observation data */ obs_t obuf; /* observation data buffer */ nav_t nav; /* satellite ephemerides */ sta_t sta; /* station parameters */ int ephsat; /* update satelle of ephemeris (0:no satellite) */ int ephset; /* update set of ephemeris (0-1) */ sbsmsg_t sbsmsg; /* SBAS message */ char msgtype[256]; /* last message type */ uint8_t subfrm[MAXSAT][380]; /* subframe buffer */ double lockt[MAXSAT][NFREQ+NEXOBS]; /* lock time (s) */ unsigned char lockflag[MAXSAT][NFREQ+NEXOBS]; /* used for carrying forward cycle slip */ double icpp[MAXSAT],off[MAXSAT],icpc; /* carrier params for ss2 */ double prCA[MAXSAT],dpCA[MAXSAT]; /* L1/CA pseudrange/doppler for javad */ uint8_t halfc[MAXSAT][NFREQ+NEXOBS]; /* half-cycle add flag */ char freqn[MAXOBS]; /* frequency number for javad */ int nbyte; /* number of bytes in message buffer */ int len; /* message length (bytes) */ int iod; /* issue of data */ int tod; /* time of day (ms) */ int tbase; /* time base (0:gpst,1:utc(usno),2:glonass,3:utc(su) */ int flag; /* general purpose flag */ int outtype; /* output message type */ uint8_t buff[MAXRAWLEN]; /* message buffer */ char opt[256]; /* receiver dependent options */ int format; /* receiver stream format */ int rcvtype; /* receiver type within format */ void *rcv_data; /* receiver dependent data */ } raw_t; typedef struct { /* stream type */ int type; /* type (STR_???) */ int mode; /* mode (STR_MODE_?) */ int state; /* state (-1:error,0:close,1:open) */ uint32_t inb,inr; /* input bytes/rate */ uint32_t outb,outr; /* output bytes/rate */ uint32_t tick_i; /* input tick tick */ uint32_t tick_o; /* output tick */ uint32_t tact; /* active tick */ uint32_t inbt,outbt; /* input/output bytes at tick */ lock_t lock; /* lock flag */ void *port; /* type dependent port control struct */ char path[MAXSTRPATH]; /* stream path */ char msg [MAXSTRMSG]; /* stream message */ } stream_t; typedef struct { /* stream converter type */ int itype,otype; /* input and output stream type */ int nmsg; /* number of output messages */ int msgs[32]; /* output message types */ double tint[32]; /* output message intervals (s) */ uint32_t tick[32]; /* cycle tick of output message */ int ephsat[32]; /* satellites of output ephemeris */ int stasel; /* station info selection (0:remote,1:local) */ rtcm_t rtcm; /* rtcm input data buffer */ raw_t raw; /* raw input data buffer */ rtcm_t out; /* rtcm output data buffer */ } strconv_t; typedef struct { /* stream server type */ int state; /* server state (0:stop,1:running) */ int cycle; /* server cycle (ms) */ int buffsize; /* input/monitor buffer size (bytes) */ int nmeacycle; /* NMEA request cycle (ms) (0:no) */ int relayback; /* relay back of output streams (0:no) */ int nstr; /* number of streams (1 input + (nstr-1) outputs */ int npb; /* data length in peek buffer (bytes) */ char cmds_periodic[16][MAXRCVCMD]; /* periodic commands */ double nmeapos[3]; /* NMEA request position (ecef) (m) */ uint8_t *buff; /* input buffers */ uint8_t *pbuf; /* peek buffer */ uint32_t tick; /* start tick */ stream_t stream[16]; /* input/output streams */ stream_t strlog[16]; /* return log streams */ strconv_t *conv[16]; /* stream converter */ thread_t thread; /* server thread */ lock_t lock; /* lock flag */ } strsvr_t; typedef struct { /* RTK server type */ int state; /* server state (0:stop,1:running) */ int cycle; /* processing cycle (ms) */ int nmeacycle; /* NMEA request cycle (ms) (0:no req) */ int nmeareq; /* NMEA request (0:no,1:nmeapos,2:single sol) */ double nmeapos[3]; /* NMEA request position (ecef) (m) */ int buffsize; /* input buffer size (bytes) */ int format[3]; /* input format {rov,base,corr} */ solopt_t solopt[2]; /* output solution options {sol1,sol2} */ int navsel; /* ephemeris select (0:all,1:rover,2:base,3:corr) */ int nsbs; /* number of sbas message */ int nsol; /* number of solution buffer */ rtk_t rtk; /* RTK control/result struct */ int nb [3]; /* bytes in input buffers {rov,base} */ int nsb[2]; /* bytes in soulution buffers */ int npb[3]; /* bytes in input peek buffers */ uint8_t *buff[3]; /* input buffers {rov,base,corr} */ uint8_t *sbuf[2]; /* output buffers {sol1,sol2} */ uint8_t *pbuf[3]; /* peek buffers {rov,base,corr} */ sol_t solbuf[MAXSOLBUF]; /* solution buffer */ uint32_t nmsg[3][10]; /* input message counts */ raw_t raw [3]; /* receiver raw control {rov,base,corr} */ rtcm_t rtcm[3]; /* RTCM control {rov,base,corr} */ gtime_t ftime[3]; /* download time {rov,base,corr} */ char files[3][MAXSTRPATH]; /* download paths {rov,base,corr} */ obs_t obs[3][MAXOBSBUF]; /* observation data {rov,base,corr} */ nav_t nav; /* navigation data */ sbsmsg_t sbsmsg[MAXSBSMSG]; /* SBAS message buffer */ stream_t stream[8]; /* streams {rov,base,corr,sol1,sol2,logr,logb,logc} */ stream_t *moni; /* monitor stream */ uint32_t tick; /* start tick */ thread_t thread; /* server thread */ int cputime; /* CPU time (ms) for a processing cycle */ int prcout; /* missing observation data count */ int nave; /* number of averaging base pos */ double rb_ave[3]; /* averaging base pos */ char cmds_periodic[3][MAXRCVCMD]; /* periodic commands */ char cmd_reset[MAXRCVCMD]; /* reset command */ double bl_reset; /* baseline length to reset (km) */ lock_t lock; /* lock flag */ imud_t imud[MAXIMUBUF]; /* imu measurement data of rover station */ int n_imu; /* number of imu data in an epoch */ } rtksvr_t; typedef struct { /* GIS data point type */ double pos[3]; /* point data {lat,lon,height} (rad,m) */ } gis_pnt_t; typedef struct { /* GIS data polyline type */ int npnt; /* number of points */ double bound[4]; /* boundary {lat0,lat1,lon0,lon1} */ double *pos; /* position data (3 x npnt) */ } gis_poly_t; typedef struct { /* GIS data polygon type */ int npnt; /* number of points */ double bound[4]; /* boundary {lat0,lat1,lon0,lon1} */ double *pos; /* position data (3 x npnt) */ } gis_polygon_t; typedef struct gisd_tag { /* GIS data list type */ int type; /* data type (1:point,2:polyline,3:polygon) */ void *data; /* data body */ struct gisd_tag *next; /* pointer to next */ } gisd_t; typedef struct { /* GIS type */ char name[MAXGISLAYER][256]; /* name */ int flag[MAXGISLAYER]; /* flag */ gisd_t *data[MAXGISLAYER]; /* gis data list */ double bound[4]; /* boundary {lat0,lat1,lon0,lon1} */ } gis_t; //////////////////////////////////////////////////////////////////////////////////// /* global variables ----------------------------------------------------------*/ extern const double Omge[9]; /* earth rotation matrix in i/e-frame */ EXPORT int tcpos(); EXPORT int ps_tcpos(const char*imu_path, const char* pvt_path, const char* sat_path,const char* obs_file,const char* nav_file); /* ins init--------------------------------------------------------------------*/ EXPORT int ins_init_pvt(ins_t *ins, pvt_t *pvt, imu_t *imu); EXPORT void normdcm(double *C); EXPORT void insopt_init(insopt_t *insopt); /* ins functions--------------------------------------------------------------*/ EXPORT double vel2head(const double *vel); EXPORT void mat_value(const double *A, double B, int n, int m, double *C); EXPORT void matmul3(const char *tr, const double *A, const double *B, double *C); EXPORT void matmul3v(const char *tr, const double *A, const double *b, double *c); EXPORT void matmul33(const char *tr,const double *A,const double *B,const double *C, int n,int p,int q,int m,double *D); EXPORT void seteye(double* A,int n); EXPORT void setzero(double *A,int n,int m); EXPORT void skewsym3(const double *ang, double *C); EXPORT void ned2xyz(const double *pos,double *Cne); EXPORT void gravity_ned(const double *pos,double *gn); EXPORT double gravity0(const double *pos); EXPORT void gravity(const double *re, double *ge); EXPORT int updateins(ins_t *ins,const imud_t *data); EXPORT void dcm2rpy(const double *Cnb,double *rpy); EXPORT void rpy2dcm(const double *rpy,double *Cnb); EXPORT void getatt(const ins_t *ins,double *rpy); EXPORT void matt(const double *A,int n,int m,double *At); EXPORT void gapv2ipv(const double *pos,const double *vel,const double *Cbe, const double *lever,const imud_t *imu,double *posi, double *veli); EXPORT void rmlever(const double *pos, const double *re, const double *ve, const double *lever, const double *Cbe, const double *omgb, double *rec, double *vec); /* ins_gnss------------------------------------------------------------------*/ EXPORT void rt_init_P_matirx(const insopt_t *insopt, double *P, int nx); /* decode_typeIMU --------------------------------------------------------------*/ EXPORT int decode_typeIMU(rtcm_t *rtcm); /* rt_tcsvr-----------------------------------------------------------------------*/ EXPORT int tcsvrstart (rtksvr_t *svr, int cycle, int buffsize, int *strs, char **paths, int *formats, int navsel, char **cmds, char **cmds_periodic, char **rcvopts, int nmeacycle, int nmeareq, const double *nmeapos, prcopt_t *prcopt, solopt_t *solopt, stream_t *moni, char *errmsg); /* rt_tcfilt -----------------------------------------------------------------------*/ EXPORT void rt_tcfilter(rtksvr_t *svr, int fobs, uint32_t tick); EXPORT int rt_init_ins(obsd_t *obs, rtksvr_t *svr, int n, imud_t *imud, int i_imu, int flag, const prcopt_t *prcopt); /* rt_ins-gnss ----------------------------------------------------------------------*/ EXPORT int xnX(const insopt_t *insopt); extern int xnB(const insopt_t *insopt); EXPORT int xnP(const insopt_t *insopt); EXPORT int xnV(const insopt_t *insopt); EXPORT int xnA(const insopt_t *insopt); EXPORT int xnBa(const insopt_t *insopt); EXPORT int xnBg(const insopt_t *insopt); EXPORT int xnRb(const insopt_t *insopt); EXPORT int xnRd(const insopt_t *insopt); EXPORT int xnI(const insopt_t *insopt); EXPORT int xnT(const insopt_t *insopt); EXPORT int xnCl(const insopt_t *insopt); EXPORT int xiP(const insopt_t *insopt); EXPORT int xnIF(const insopt_t *opt); EXPORT int xiV(const insopt_t *insopt); EXPORT int xiA(const insopt_t *insopt); EXPORT int xiBa(const insopt_t *insopt); EXPORT int xiBg(const insopt_t *insopt); EXPORT int xiBs(const insopt_t *insopt,int s,int f); EXPORT int xiIo(const insopt_t *insopt,int s); EXPORT int xiTr(const insopt_t *insopt,int r); EXPORT void rt_insopt_init(insopt_t *insopt); EXPORT void initP(int is,int ni,int nx,double unc,double unc0,double *P0); EXPORT int ant2ins(gtime_t time, const double *rr, const double *vr, const insopt_t *opt, const imud_t *imu, ins_t *ins, int i_imu,int flag); EXPORT void ins_2_ant(const ins_t *ins,double *rr); EXPORT void clp(ins_t *ins,const insopt_t *opt,const double *x); EXPORT void clp_doppler(ins_t *ins,const insopt_t *opt,const double *x); EXPORT void init_tc(insopt_t *insopt, ins_t *ins,const prcopt_t *opt); EXPORT int tcigpos(const prcopt_t *opt,const obsd_t *obs,int n,const nav_t *nav, const imud_t *imu,const int n_imu,rtk_t *rtk,ins_t *ins,int upd); EXPORT void ins2sol(ins_t *ins,const insopt_t *opt,sol_t *sol); EXPORT void propinss(ins_t *ins,const insopt_t *insopt,double dt, double *x,double *P,const int upd); /* rt_doppler ------------------------------------------------------------------------*/ EXPORT int doppfilt(ins_t *ins,const prcopt_t *opt,const obsd_t *obs,int n, const nav_t *nav,const double *rs,const double *dts, const int *svh,const double *vare); EXPORT int doppler(const obsd_t *obs,int n,const nav_t *nav,const prcopt_t *opt,ins_t *ins); /* client ----------------------------------------------------------------------------*/ EXPORT int client_open(const rtksvr_t *svr); /* nhc -------------------------------------------------------------------------------*/ EXPORT int nhc(ins_t *ins,const insopt_t *opt,const imud_t *imu); /* rt_zvu ----------------------------------------------------------------------------*/ EXPORT int detstatic_GLRT(const imud_t *imu,int n,const insopt_t *opt, const double *pos); EXPORT int zvu(ins_t *ins,const insopt_t *opt,const imud_t *imu,int flag); EXPORT int zaru(ins_t *ins,const insopt_t *opt,const imud_t *imu,int flag); //////////////////////////////////////////////////////////////////////////////////////////////////////////// typedef void fatalfunc_t(const char *); /* fatal callback function type */ /* global variables ----------------------------------------------------------*/ extern const double chisqr[]; /* chi-sqr(n) table (alpha=0.001) */ extern const prcopt_t prcopt_default; /* default positioning options */ extern const solopt_t solopt_default; /* default solution output options */ extern const sbsigpband_t igpband1[9][8]; /* SBAS IGP band 0-8 */ extern const sbsigpband_t igpband2[2][5]; /* SBAS IGP band 9-10 */ extern const char *formatstrs[]; /* stream format strings */ extern opt_t sysopts[]; /* system options table */ /* satellites, systems, codes functions --------------------------------------*/ EXPORT int satno (int sys, int prn); EXPORT int satsys (int sat, int *prn); EXPORT int satid2no(const char *id); EXPORT void satno2id(int sat, char *id); EXPORT uint8_t obs2code(const char *obs); EXPORT char *code2obs(uint8_t code); EXPORT double code2freq(int sys, uint8_t code, int fcn); EXPORT double sat2freq(int sat, uint8_t code, const nav_t *nav); EXPORT int code2idx(int sys, uint8_t code); EXPORT int satexclude(int sat, double var, int svh, const prcopt_t *opt); EXPORT int testsnr(int base, int freq, double el, double snr, const snrmask_t *mask); EXPORT void setcodepri(int sys, int idx, const char *pri); EXPORT int getcodepri(int sys, uint8_t code, const char *opt); /* matrix and vector functions -----------------------------------------------*/ EXPORT double *mat (int n, int m); EXPORT int *imat (int n, int m); EXPORT double *zeros(int n, int m); EXPORT double *eye (int n); EXPORT double dot (const double *a, const double *b, int n); EXPORT double norm(const double *a, int n); EXPORT void cross3(const double *a, const double *b, double *c); EXPORT int normv3(const double *a, double *b); EXPORT void matcpy(double *A, const double *B, int n, int m); EXPORT void matmul(const char *tr, int n, int k, int m, double alpha, const double *A, const double *B, double beta, double *C); EXPORT int matinv(double *A, int n); EXPORT int solve (const char *tr, const double *A, const double *Y, int n, int m, double *X); EXPORT int lsq (const double *A, const double *y, int n, int m, double *x, double *Q); EXPORT int filter(double *x, double *P, const double *H, const double *v, const double *R, int n, int m); EXPORT int robust_filter(double *x, double *P, const double *H, const double *v, const double *R, int n, int m); EXPORT int smoother(const double *xf, const double *Qf, const double *xb, const double *Qb, int n, double *xs, double *Qs); EXPORT void matprint (const double *A, int n, int m, int p, int q); EXPORT void matfprint(const double *A, int n, int m, int p, int q, FILE *fp); EXPORT void add_fatal(fatalfunc_t *func); /* time and string functions -------------------------------------------------*/ EXPORT double str2num(const char *s, int i, int n); EXPORT int str2time(const char *s, int i, int n, gtime_t *t); EXPORT void time2str(gtime_t t, char *str, int n); EXPORT gtime_t epoch2time(const double *ep); EXPORT void time2epoch(gtime_t t, double *ep); EXPORT void time2epoch_n(gtime_t t, double *ep, int n); EXPORT gtime_t gpst2time(int week, double sec); EXPORT double time2gpst(gtime_t t, int *week); EXPORT gtime_t gst2time(int week, double sec); EXPORT double time2gst(gtime_t t, int *week); EXPORT gtime_t bdt2time(int week, double sec); EXPORT double time2bdt(gtime_t t, int *week); EXPORT char *time_str(gtime_t t, int n); EXPORT gtime_t timeadd (gtime_t t, double sec); EXPORT double timediff (gtime_t t1, gtime_t t2); EXPORT gtime_t gpst2utc (gtime_t t); EXPORT gtime_t utc2gpst (gtime_t t); EXPORT gtime_t gpst2bdt (gtime_t t); EXPORT gtime_t bdt2gpst (gtime_t t); EXPORT gtime_t timeget (void); EXPORT void timeset (gtime_t t); EXPORT void timereset(void); EXPORT double time2doy (gtime_t t); EXPORT double utc2gmst (gtime_t t, double ut1_utc); EXPORT int read_leaps(const char *file); EXPORT int adjgpsweek(int week); EXPORT uint32_t tickget(void); EXPORT void sleepms(int ms); EXPORT int reppath(const char *path, char *rpath, gtime_t time, const char *rov, const char *base); EXPORT int reppaths(const char *path, char *rpaths[], int nmax, gtime_t ts, gtime_t te, const char *rov, const char *base); /* coordinates transformation ------------------------------------------------*/ EXPORT void ecef2pos(const double *r, double *pos); EXPORT void pos2ecef(const double *pos, double *r); EXPORT void ecef2enu(const double *pos, const double *r, double *e); EXPORT void enu2ecef(const double *pos, const double *e, double *r); EXPORT void covenu (const double *pos, const double *P, double *Q); EXPORT void covecef (const double *pos, const double *Q, double *P); EXPORT void xyz2enu (const double *pos, double *E); EXPORT void eci2ecef(gtime_t tutc, const double *erpv, double *U, double *gmst); EXPORT void deg2dms (double deg, double *dms, int ndec); EXPORT double dms2deg(const double *dms); /* input and output functions ------------------------------------------------*/ EXPORT void readpos(const char *file, const char *rcv, double *pos); EXPORT int sortobs(obs_t *obs); EXPORT void uniqnav(nav_t *nav); EXPORT int screent(gtime_t time, gtime_t ts, gtime_t te, double tint); EXPORT int readnav(const char *file, nav_t *nav); EXPORT int savenav(const char *file, const nav_t *nav); EXPORT void freeobs(obs_t *obs); EXPORT void freenav(nav_t *nav, int opt); EXPORT int readblq(const char *file, const char *sta, double *odisp); EXPORT int readerp(const char *file, erp_t *erp); EXPORT int geterp (const erp_t *erp, gtime_t time, double *val); /* debug trace functions -----------------------------------------------------*/ EXPORT void traceopen(const char *file); EXPORT void traceclose(void); EXPORT void tracelevel(int level); EXPORT void trace (int level, const char *format, ...); EXPORT void tracet (int level, const char *format, ...); EXPORT void tracemat (int level, const double *A, int n, int m, int p, int q); EXPORT void traceobs (int level, const obsd_t *obs, int n); EXPORT void tracenav (int level, const nav_t *nav); EXPORT void tracegnav(int level, const nav_t *nav); EXPORT void tracehnav(int level, const nav_t *nav); EXPORT void tracepeph(int level, const nav_t *nav); EXPORT void tracepclk(int level, const nav_t *nav); EXPORT void traceb (int level, const uint8_t *p, int n); EXPORT int gettracelevel(void); /* platform dependent functions ----------------------------------------------*/ EXPORT int execcmd(const char *cmd); EXPORT int expath (const char *path, char *paths[], int nmax); EXPORT void createdir(const char *path); /* positioning models --------------------------------------------------------*/ EXPORT double satazel(const double *pos, const double *e, double *azel); EXPORT double geodist(const double *rs, const double *rr, double *e); EXPORT void dops(int ns, const double *azel, double elmin, double *dop); /* atmosphere models ---------------------------------------------------------*/ EXPORT double ionmodel(gtime_t t, const double *ion, const double *pos, const double *azel); EXPORT double ionmapf(const double *pos, const double *azel); EXPORT double ionppp(const double *pos, const double *azel, double re, double hion, double *pppos); EXPORT double tropmodel(gtime_t time, const double *pos, const double *azel, double humi); EXPORT double tropmapf(gtime_t time, const double *pos, const double *azel, double *mapfw); EXPORT int iontec(gtime_t time, const nav_t *nav, const double *pos, const double *azel, int opt, double *delay, double *var); EXPORT void readtec(const char *file, nav_t *nav, int opt); EXPORT int ionocorr(gtime_t time, const nav_t *nav, int sat, const double *pos, const double *azel, int ionoopt, double *ion, double *var); EXPORT int tropcorr(gtime_t time, const nav_t *nav, const double *pos, const double *azel, int tropopt, double *trp, double *var); EXPORT int seliflc(int optnf, int sys); /* antenna models ------------------------------------------------------------*/ EXPORT int readpcv(const char *file, pcvs_t *pcvs); EXPORT pcv_t *searchpcv(int sat, const char *type, gtime_t time, const pcvs_t *pcvs); EXPORT void antmodel(const pcv_t *pcv, const double *del, const double *azel, int opt, double *dant); EXPORT void antmodel_s(const pcv_t *pcv, double nadir, double *dant); /* earth tide models ---------------------------------------------------------*/ EXPORT void sunmoonpos(gtime_t tutc, const double *erpv, double *rsun, double *rmoon, double *gmst); EXPORT void tidedisp(gtime_t tutc, const double *rr, int opt, const erp_t *erp, const double *odisp, double *dr); /* geiod models --------------------------------------------------------------*/ EXPORT int opengeoid(int model, const char *file); EXPORT void closegeoid(void); EXPORT double geoidh(const double *pos); /* datum transformation ------------------------------------------------------*/ EXPORT int loaddatump(const char *file); EXPORT int tokyo2jgd(double *pos); EXPORT int jgd2tokyo(double *pos); /* rinex functions -----------------------------------------------------------*/ EXPORT int readrnx (const char *file, int rcv, const char *opt, obs_t *obs, nav_t *nav, sta_t *sta); EXPORT int readrnxt(const char *file, int rcv, gtime_t ts, gtime_t te, double tint, const char *opt, obs_t *obs, nav_t *nav, sta_t *sta); EXPORT int readrnxc(const char *file, nav_t *nav); EXPORT int outrnxobsh(FILE *fp, const rnxopt_t *opt, const nav_t *nav); EXPORT int outrnxobsb(FILE *fp, const rnxopt_t *opt, const obsd_t *obs, int n, int epflag); EXPORT int outrnxnavh (FILE *fp, const rnxopt_t *opt, const nav_t *nav); EXPORT int outrnxgnavh(FILE *fp, const rnxopt_t *opt, const nav_t *nav); EXPORT int outrnxhnavh(FILE *fp, const rnxopt_t *opt, const nav_t *nav); EXPORT int outrnxlnavh(FILE *fp, const rnxopt_t *opt, const nav_t *nav); EXPORT int outrnxqnavh(FILE *fp, const rnxopt_t *opt, const nav_t *nav); EXPORT int outrnxcnavh(FILE *fp, const rnxopt_t *opt, const nav_t *nav); EXPORT int outrnxinavh(FILE *fp, const rnxopt_t *opt, const nav_t *nav); EXPORT int outrnxnavb (FILE *fp, const rnxopt_t *opt, const eph_t *eph); EXPORT int outrnxgnavb(FILE *fp, const rnxopt_t *opt, const geph_t *geph); EXPORT int outrnxhnavb(FILE *fp, const rnxopt_t *opt, const seph_t *seph); EXPORT int rtk_uncompress(const char *file, char *uncfile); EXPORT int convrnx(int format, rnxopt_t *opt, const char *file, char **ofile); EXPORT int init_rnxctr (rnxctr_t *rnx); EXPORT void free_rnxctr (rnxctr_t *rnx); EXPORT int open_rnxctr (rnxctr_t *rnx, FILE *fp); EXPORT int input_rnxctr(rnxctr_t *rnx, FILE *fp); /* ephemeris and clock functions ---------------------------------------------*/ EXPORT double eph2clk (gtime_t time, const eph_t *eph); EXPORT double geph2clk(gtime_t time, const geph_t *geph); EXPORT double seph2clk(gtime_t time, const seph_t *seph); EXPORT void eph2pos (gtime_t time, const eph_t *eph, double *rs, double *dts, double *var); EXPORT void geph2pos(gtime_t time, const geph_t *geph, double *rs, double *dts, double *var); EXPORT void seph2pos(gtime_t time, const seph_t *seph, double *rs, double *dts, double *var); EXPORT int peph2pos(gtime_t time, int sat, const nav_t *nav, int opt, double *rs, double *dts, double *var); EXPORT void satantoff(gtime_t time, const double *rs, int sat, const nav_t *nav, double *dant); EXPORT int satpos(gtime_t time, gtime_t teph, int sat, int ephopt, const nav_t *nav, double *rs, double *dts, double *var, int *svh); EXPORT void satposs(gtime_t time, const obsd_t *obs, int n, const nav_t *nav, int sateph, double *rs, double *dts, double *var, int *svh); EXPORT void setseleph(int sys, int sel); EXPORT int getseleph(int sys); EXPORT void readsp3(const char *file, nav_t *nav, int opt); EXPORT int readsap(const char *file, gtime_t time, nav_t *nav); EXPORT int readdcb(const char *file, nav_t *nav, const sta_t *sta); EXPORT int readfcb(const char *file, nav_t *nav); EXPORT void alm2pos(gtime_t time, const alm_t *alm, double *rs, double *dts); EXPORT int tle_read(const char *file, tle_t *tle); EXPORT int tle_name_read(const char *file, tle_t *tle); EXPORT int tle_pos(gtime_t time, const char *name, const char *satno, const char *desig, const tle_t *tle, const erp_t *erp, double *rs); /* receiver raw data functions -----------------------------------------------*/ EXPORT uint32_t getbitu(const uint8_t *buff, int pos, int len); EXPORT int32_t getbits(const uint8_t *buff, int pos, int len); EXPORT void setbitu(uint8_t *buff, int pos, int len, uint32_t data); EXPORT void setbits(uint8_t *buff, int pos, int len, int32_t data); EXPORT uint32_t rtk_crc32 (const uint8_t *buff, int len); EXPORT uint32_t rtk_crc24q(const uint8_t *buff, int len); EXPORT uint16_t rtk_crc16 (const uint8_t *buff, int len); EXPORT int decode_word (uint32_t word, uint8_t *data); EXPORT int decode_frame(const uint8_t *buff, eph_t *eph, alm_t *alm, double *ion, double *utc); EXPORT int test_glostr(const uint8_t *buff); EXPORT int decode_glostr(const uint8_t *buff, geph_t *geph, double *utc); EXPORT int decode_bds_d1(const uint8_t *buff, eph_t *eph, double *ion, double *utc); EXPORT int decode_bds_d2(const uint8_t *buff, eph_t *eph, double *utc); EXPORT int decode_gal_inav(const uint8_t *buff, eph_t *eph, double *ion, double *utc); EXPORT int decode_gal_fnav(const uint8_t *buff, eph_t *eph, double *ion, double *utc); EXPORT int decode_irn_nav(const uint8_t *buff, eph_t *eph, double *ion, double *utc); /* decode imu data in imu.c */ EXPORT int input_imu (raw_t *raw, imud_t *imud ,uint8_t data); EXPORT int decode_imu (uint8_t *buff,imud_t *imud); EXPORT int init_raw (raw_t *raw, int format); EXPORT void free_raw (raw_t *raw); EXPORT int input_raw (raw_t *raw, int format, uint8_t data); EXPORT int input_rawf (raw_t *raw, int format, FILE *fp); EXPORT int init_rt17 (raw_t *raw); EXPORT int init_cmr (raw_t *raw); EXPORT void free_rt17 (raw_t *raw); EXPORT void free_cmr (raw_t *raw); EXPORT int update_cmr (raw_t *raw, rtksvr_t *svr, obs_t *obs); EXPORT int input_oem4 (raw_t *raw, uint8_t data); EXPORT int input_cnav (raw_t *raw, uint8_t data); EXPORT int input_ubx (raw_t *raw, uint8_t data); EXPORT int input_sbp (raw_t *raw, uint8_t data); EXPORT int input_cres (raw_t *raw, uint8_t data); EXPORT int input_stq (raw_t *raw, uint8_t data); EXPORT int input_javad (raw_t *raw, uint8_t data); EXPORT int input_nvs (raw_t *raw, uint8_t data); EXPORT int input_bnx (raw_t *raw, uint8_t data); EXPORT int input_rt17 (raw_t *raw, uint8_t data); EXPORT int input_sbf (raw_t *raw, uint8_t data); EXPORT int input_tersus(raw_t *raw, uint8_t data); EXPORT int input_oem4f (raw_t *raw, FILE *fp); EXPORT int input_cnavf (raw_t *raw, FILE *fp); EXPORT int input_ubxf (raw_t *raw, FILE *fp); EXPORT int input_sbpf (raw_t *raw, FILE *fp); EXPORT int input_cresf (raw_t *raw, FILE *fp); EXPORT int input_stqf (raw_t *raw, FILE *fp); EXPORT int input_javadf(raw_t *raw, FILE *fp); EXPORT int input_nvsf (raw_t *raw, FILE *fp); EXPORT int input_bnxf (raw_t *raw, FILE *fp); EXPORT int input_rt17f (raw_t *raw, FILE *fp); EXPORT int input_sbff (raw_t *raw, FILE *fp); EXPORT int input_tersusf(raw_t *raw, FILE *fp); EXPORT int gen_ubx (const char *msg, uint8_t *buff); EXPORT int gen_stq (const char *msg, uint8_t *buff); EXPORT int gen_nvs (const char *msg, uint8_t *buff); /* rtcm functions ------------------------------------------------------------*/ EXPORT int init_rtcm (rtcm_t *rtcm); EXPORT void free_rtcm (rtcm_t *rtcm); EXPORT int input_rtcm2 (rtcm_t *rtcm, uint8_t data); EXPORT int input_rtcm3 (rtcm_t *rtcm, uint8_t data); EXPORT int input_rtcm2f(rtcm_t *rtcm, FILE *fp); EXPORT int input_rtcm3f(rtcm_t *rtcm, FILE *fp); EXPORT int gen_rtcm2 (rtcm_t *rtcm, int type, int sync); EXPORT int gen_rtcm3 (rtcm_t *rtcm, int type, int subtype, int sync); /* solution functions --------------------------------------------------------*/ EXPORT void initsolbuf(solbuf_t *solbuf, int cyclic, int nmax); EXPORT void freesolbuf(solbuf_t *solbuf); EXPORT void freesolstatbuf(solstatbuf_t *solstatbuf); EXPORT sol_t *getsol(solbuf_t *solbuf, int index); EXPORT int addsol(solbuf_t *solbuf, const sol_t *sol); EXPORT int readsol (char *files[], int nfile, solbuf_t *sol); EXPORT int readsolt(char *files[], int nfile, gtime_t ts, gtime_t te, double tint, int qflag, solbuf_t *sol); EXPORT int readsolstat(char *files[], int nfile, solstatbuf_t *statbuf); EXPORT int readsolstatt(char *files[], int nfile, gtime_t ts, gtime_t te, double tint, solstatbuf_t *statbuf); EXPORT int inputsol(uint8_t data, gtime_t ts, gtime_t te, double tint, int qflag, const solopt_t *opt, solbuf_t *solbuf); EXPORT int outprcopts(uint8_t *buff, const prcopt_t *opt); EXPORT int outsolheads(uint8_t *buff, const solopt_t *opt); EXPORT int outsols (uint8_t *buff, const sol_t *sol, const double *rb, const solopt_t *opt); EXPORT int outsolexs(uint8_t *buff, const sol_t *sol, const ssat_t *ssat, const solopt_t *opt); EXPORT void outprcopt(FILE *fp, const prcopt_t *opt); EXPORT void outsolhead(FILE *fp, const solopt_t *opt); EXPORT void outsol (FILE *fp, const sol_t *sol, const double *rb, const solopt_t *opt); EXPORT void outsolex(FILE *fp, const sol_t *sol, const ssat_t *ssat, const solopt_t *opt); EXPORT int outnmea_rmc(uint8_t *buff, const sol_t *sol); EXPORT int outnmea_gga(uint8_t *buff, const sol_t *sol); EXPORT int outnmea_gsa(uint8_t *buff, const sol_t *sol, const ssat_t *ssat); EXPORT int outnmea_gsv(uint8_t *buff, const sol_t *sol, const ssat_t *ssat); /* google earth kml converter ------------------------------------------------*/ EXPORT 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); /* gpx converter -------------------------------------------------------------*/ EXPORT int convgpx(const char *infile, const char *outfile, gtime_t ts, gtime_t te, double tint, int qflg, double *offset, int outtrk, int outpnt, int outalt, int outtime); /* sbas functions ------------------------------------------------------------*/ EXPORT int sbsreadmsg (const char *file, int sel, sbs_t *sbs); EXPORT int sbsreadmsgt(const char *file, int sel, gtime_t ts, gtime_t te, sbs_t *sbs); EXPORT void sbsoutmsg(FILE *fp, sbsmsg_t *sbsmsg); EXPORT int sbsdecodemsg(gtime_t time, int prn, const uint32_t *words, sbsmsg_t *sbsmsg); EXPORT int sbsupdatecorr(const sbsmsg_t *msg, nav_t *nav); EXPORT int sbssatcorr(gtime_t time, int sat, const nav_t *nav, double *rs, double *dts, double *var); EXPORT int sbsioncorr(gtime_t time, const nav_t *nav, const double *pos, const double *azel, double *delay, double *var); EXPORT double sbstropcorr(gtime_t time, const double *pos, const double *azel, double *var); /* options functions ---------------------------------------------------------*/ EXPORT opt_t *searchopt(const char *name, const opt_t *opts); EXPORT int str2opt(opt_t *opt, const char *str); EXPORT int opt2str(const opt_t *opt, char *str); EXPORT int opt2buf(const opt_t *opt, char *buff); EXPORT int loadopts(const char *file, opt_t *opts); EXPORT int saveopts(const char *file, const char *mode, const char *comment, const opt_t *opts); EXPORT void resetsysopts(void); EXPORT void getsysopts(prcopt_t *popt, solopt_t *sopt, filopt_t *fopt); EXPORT void setsysopts(const prcopt_t *popt, const solopt_t *sopt, const filopt_t *fopt); /* stream data input and output functions ------------------------------------*/ EXPORT void strinitcom(void); EXPORT void strinit (stream_t *stream); EXPORT void strlock (stream_t *stream); EXPORT void strunlock(stream_t *stream); EXPORT int stropen (stream_t *stream, int type, int mode, const char *path); EXPORT void strclose (stream_t *stream); EXPORT int strread (stream_t *stream, uint8_t *buff, int n); EXPORT int strwrite (stream_t *stream, uint8_t *buff, int n); EXPORT void strsync (stream_t *stream1, stream_t *stream2); EXPORT int strstat (stream_t *stream, char *msg); EXPORT int strstatx (stream_t *stream, char *msg); EXPORT void strsum (stream_t *stream, int *inb, int *inr, int *outb, int *outr); EXPORT void strsetopt(const int *opt); EXPORT gtime_t strgettime(stream_t *stream); EXPORT void strsendnmea(stream_t *stream, const sol_t *sol); EXPORT void strsendcmd(stream_t *stream, const char *cmd); EXPORT void strsettimeout(stream_t *stream, int toinact, int tirecon); EXPORT void strsetdir(const char *dir); EXPORT void strsetproxy(const char *addr); /* integer ambiguity resolution ----------------------------------------------*/ EXPORT int lambda(int n, int m, const double *a, const double *Q, double *F, double *s); EXPORT int lambda_reduction(int n, const double *Q, double *Z); EXPORT int lambda_search(int n, int m, const double *a, const double *Q, double *F, double *s); /* standard positioning ------------------------------------------------------*/ EXPORT int pntpos(const obsd_t *obs, int n, const nav_t *nav, const prcopt_t *opt, sol_t *sol, double *azel, ssat_t *ssat, char *msg); EXPORT int tc_pntpos(const obsd_t *obs, int n, const nav_t *nav, const prcopt_t *opt, sol_t *sol, ins_t *ins,double *azel, ssat_t *ssat, char *msg); /* precise positioning -------------------------------------------------------*/ EXPORT void rtkinit(rtk_t *rtk, const prcopt_t *opt); EXPORT void rtkfree(rtk_t *rtk); EXPORT int rtkpos (rtk_t *rtk, const obsd_t *obs, int nobs, const nav_t *nav); EXPORT int rtkopenstat(const char *file, int level); EXPORT void rtkclosestat(void); EXPORT int rtkoutstat(rtk_t *rtk, char *buff); EXPORT void outsolstat(rtk_t *rtk,const nav_t *nav); /* precise point positioning -------------------------------------------------*/ EXPORT void pppos(rtk_t *rtk, const obsd_t *obs, int n, const nav_t *nav); EXPORT int pppnx(const prcopt_t *opt); EXPORT int pppoutstat(rtk_t *rtk, char *buff); EXPORT int ppp_ar(rtk_t *rtk, const obsd_t *obs, int n, int *exc, const nav_t *nav, const double *azel, double *x, double *P); /* post-processing positioning -----------------------------------------------*/ EXPORT int postpos(gtime_t ts, gtime_t te, double ti, double tu, const prcopt_t *popt, const solopt_t *sopt, const filopt_t *fopt, char **infile, int n, char *outfile, const char *rov, const char *base); /* stream server functions ---------------------------------------------------*/ EXPORT void strsvrinit (strsvr_t *svr, int nout); EXPORT int strsvrstart(strsvr_t *svr, int *opts, int *strs, char **paths, char **logs, strconv_t **conv, char **cmds, char **cmds_priodic, const double *nmeapos); EXPORT void strsvrstop (strsvr_t *svr, char **cmds); EXPORT void strsvrstat (strsvr_t *svr, int *stat, int *log_stat, int *byte, int *bps, char *msg); EXPORT strconv_t *strconvnew(int itype, int otype, const char *msgs, int staid, int stasel, const char *opt); EXPORT void strconvfree(strconv_t *conv); /* rtk server functions ------------------------------------------------------*/ EXPORT int rtksvrinit (rtksvr_t *svr); EXPORT void rtksvrfree (rtksvr_t *svr); EXPORT int rtksvrstart (rtksvr_t *svr, int cycle, int buffsize, int *strs, char **paths, int *formats, int navsel, char **cmds, char **cmds_periodic, char **rcvopts, int nmeacycle, int nmeareq, const double *nmeapos, prcopt_t *prcopt, solopt_t *solopt, stream_t *moni, char *errmsg); EXPORT void rtksvrstop (rtksvr_t *svr, char **cmds); EXPORT int rtksvropenstr(rtksvr_t *svr, int index, int str, const char *path, const solopt_t *solopt); EXPORT void rtksvrclosestr(rtksvr_t *svr, int index); EXPORT void rtksvrlock (rtksvr_t *svr); EXPORT void rtksvrunlock(rtksvr_t *svr); EXPORT int rtksvrostat (rtksvr_t *svr, int type, gtime_t *time, int *sat, double *az, double *el, int **snr, int *vsat); EXPORT void rtksvrsstat (rtksvr_t *svr, int *sstat, char *msg); EXPORT int rtksvrmark(rtksvr_t *svr, const char *name, const char *comment); /* downloader functions ------------------------------------------------------*/ EXPORT int dl_readurls(const char *file, char **types, int ntype, url_t *urls, int nmax); EXPORT int dl_readstas(const char *file, char **stas, int nmax); EXPORT int dl_exec(gtime_t ts, gtime_t te, double ti, int seqnos, int seqnoe, const url_t *urls, int nurl, char **stas, int nsta, const char *dir, const char *usr, const char *pwd, const char *proxy, int opts, char *msg, FILE *fp); EXPORT void dl_test(gtime_t ts, gtime_t te, double ti, const url_t *urls, int nurl, char **stas, int nsta, const char *dir, int ncol, int datefmt, FILE *fp); /* GIS data functions --------------------------------------------------------*/ EXPORT int gis_read(const char *file, gis_t *gis, int layer); EXPORT void gis_free(gis_t *gis); /* application defined functions ---------------------------------------------*/ extern int showmsg(const char *format,...); extern void settspan(gtime_t ts, gtime_t te); extern void settime(gtime_t time); #ifdef __cplusplus } #endif #endif /* RTKLIB_H */