Ignore:
Timestamp:
May 26, 2014, 5:09:28 PM (10 years ago)
Author:
stoecker
Message:

SSR update

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/clock_and_orbit/lib/clock_orbit_rtcm.h

    r4241 r5664  
    1414
    1515enum SatelliteReferenceDatum { DATUM_ITRF=0, DATUM_LOCAL=1 };
     16
     17enum COR_BASE {
     18  COBBASE_GPS = 1057,
     19  COBBASE_GLONASS = 1063,
     20  COBBASE_GALILEO = 1240,
     21  COBBASE_QZSS = 1246,
     22  COBBASE_SBAS = 1252,
     23  COBBASE_BDS = 1258,
     24};
     25
     26enum COR_OFFSET {
     27  COBOFS_ORBIT = 0,
     28  COBOFS_CLOCK,
     29  COBOFS_BIAS,
     30  COBOFS_COMBINED,
     31  COBOFS_URA,
     32  COBOFS_HR,
     33  COBOFS_NUM
     34};
     35
    1636enum ClockOrbitType {
    17      COTYPE_GPSORBIT=1057, COTYPE_GPSCLOCK=1058,
    18      COTYPE_GPSCOMBINED=1060, COTYPE_GPSURA=1061, COTYPE_GPSHR=1062,
    19 
    20      COTYPE_GLONASSORBIT=1063, COTYPE_GLONASSCLOCK=1064,
    21      COTYPE_GLONASSCOMBINED=1066, COTYPE_GLONASSURA=1067, COTYPE_GLONASSHR=1068,
    22 
    23      COTYPE_AUTO=0 };
    24 enum BiasType { BTYPE_GPS=1059, BTYPE_GLONASS=1065, BTYPE_AUTO = 0 };
    25 
     37  COTYPE_GPSORBIT = COBBASE_GPS + COBOFS_ORBIT,
     38  COTYPE_GPSCLOCK,
     39  COTYPE_GPSCOMBINED = COBBASE_GPS + COBOFS_COMBINED,
     40  COTYPE_GPSURA,
     41  COTYPE_GPSHR,
     42
     43  COTYPE_GLONASSORBIT = COBBASE_GLONASS + COBOFS_ORBIT,
     44  COTYPE_GLONASSCLOCK,
     45  COTYPE_GLONASSCOMBINED = COBBASE_GLONASS + COBOFS_COMBINED,
     46  COTYPE_GLONASSURA,
     47  COTYPE_GLONASSHR,
     48
     49  COTYPE_GALILEOORBIT = COBBASE_GALILEO + COBOFS_ORBIT,
     50  COTYPE_GALILEOCLOCK,
     51  COTYPE_GALILEOCOMBINED = COBBASE_GALILEO + COBOFS_COMBINED,
     52  COTYPE_GALILEOURA,
     53  COTYPE_GALILEOHR,
     54
     55  COTYPE_QZSSORBIT = COBBASE_QZSS + COBOFS_ORBIT,
     56  COTYPE_QZSSCLOCK,
     57  COTYPE_QZSSCOMBINED = COBBASE_QZSS + COBOFS_COMBINED,
     58  COTYPE_QZSSURA,
     59  COTYPE_QZSSHR,
     60
     61  COTYPE_SBASORBIT = COBBASE_SBAS + COBOFS_ORBIT,
     62  COTYPE_SBASCLOCK,
     63  COTYPE_SBASCOMBINED = COBBASE_QZSS + COBOFS_COMBINED,
     64  COTYPE_SBASURA,
     65  COTYPE_SBASHR,
     66
     67  COTYPE_BDSORBIT = COBBASE_BDS + COBOFS_ORBIT,
     68  COTYPE_BDSCLOCK,
     69  COTYPE_BDSCOMBINED = COBBASE_BDS + COBOFS_COMBINED,
     70  COTYPE_BDSURA,
     71  COTYPE_BDSHR,
     72
     73  COTYPE_AUTO = 0,
     74};
     75
     76enum CodeBiasType {
     77  BTYPE_GPS = COBBASE_GPS + COBOFS_BIAS,
     78  BTYPE_GLONASS = COBBASE_GLONASS + COBOFS_BIAS,
     79  BTYPE_GALILEO = COBBASE_GALILEO + COBOFS_BIAS,
     80  BTYPE_QZSS = COBBASE_QZSS + COBOFS_BIAS,
     81  BTYPE_SBAS = COBBASE_QZSS + COBOFS_BIAS,
     82  BTYPE_BDS = COBBASE_BDS + COBOFS_BIAS,
     83  BTYPE_AUTO = 0
     84};
     85
     86enum PhaseBiasType {
     87  PBTYPE_BASE = 1265,
     88  PBTYPE_GPS = PBTYPE_BASE,
     89  PBTYPE_GLONASS,
     90  PBTYPE_GALILEO,
     91  PBTYPE_QZSS,
     92  PBTYPE_SBAS,
     93  PBTYPE_BDS,
     94  PBTYPE_AUTO = 0
     95};
     96
     97enum VTECType {
     98  VTEC_BASE = 1264
     99};
     100
     101/* if some systems aren't supported at all, change the following numbers to zero
     102for these systems to save space */
    26103enum COR_CONSTANTS {
    27104  CLOCKORBIT_BUFFERSIZE=2048,
    28105  CLOCKORBIT_NUMGPS=32,
    29106  CLOCKORBIT_NUMGLONASS=24,
    30   CLOCKORBIT_NUMBIAS=10
     107  CLOCKORBIT_NUMGALILEO=36,
     108  CLOCKORBIT_NUMQZSS=10,
     109  CLOCKORBIT_NUMSBAS=38,
     110  CLOCKORBIT_NUMBDS=37,
     111  CLOCKORBIT_NUMBIAS=10,
     112  CLOCKORBIT_NUMIONOLAYERS=4,
     113  CLOCKORBIT_MAXIONOORDER=8,
     114  CLOCKORBIT_MAXIONODEGREE=8
     115};
     116
     117enum COR_SATSYSTEM {
     118  CLOCKORBIT_SATGPS=0,
     119  CLOCKORBIT_SATGLONASS,
     120  CLOCKORBIT_SATGALILEO,
     121  CLOCKORBIT_SATQZSS,
     122  CLOCKORBIT_SATSBAS,
     123  CLOCKORBIT_SATBDS,
     124  CLOCKORBIT_SATNUM
     125};
     126
     127enum COR_OFFSETS {
     128  CLOCKORBIT_OFFSETGPS=0,
     129  CLOCKORBIT_OFFSETGLONASS=CLOCKORBIT_NUMGPS,
     130  CLOCKORBIT_OFFSETGALILEO=CLOCKORBIT_NUMGPS+CLOCKORBIT_NUMGLONASS,
     131  CLOCKORBIT_OFFSETQZSS=CLOCKORBIT_NUMGPS+CLOCKORBIT_NUMGLONASS
     132  +CLOCKORBIT_NUMGALILEO,
     133  CLOCKORBIT_OFFSETSBAS=CLOCKORBIT_NUMGPS+CLOCKORBIT_NUMGLONASS
     134  +CLOCKORBIT_NUMGALILEO+CLOCKORBIT_NUMQZSS,
     135  CLOCKORBIT_OFFSETBDS=CLOCKORBIT_NUMGPS+CLOCKORBIT_NUMGLONASS
     136  +CLOCKORBIT_NUMGALILEO+CLOCKORBIT_NUMQZSS+CLOCKORBIT_NUMSBAS,
     137  CLOCKORBIT_COUNTSAT=CLOCKORBIT_NUMGPS+CLOCKORBIT_NUMGLONASS
     138  +CLOCKORBIT_NUMGALILEO+CLOCKORBIT_NUMQZSS+CLOCKORBIT_NUMSBAS
     139  +CLOCKORBIT_NUMBDS
    31140};
    32141
     
    54163  CODETYPEGLONASS_L2_CA      = 2,
    55164  CODETYPEGLONASS_L2_P       = 3,
     165
     166  CODETYPEGALILEO_E1_A       = 0,
     167  CODETYPEGALILEO_E1_B       = 1,
     168  CODETYPEGALILEO_E1_C       = 2,
     169  CODETYPEGALILEO_E5A_I      = 5,
     170  CODETYPEGALILEO_E5A_Q      = 6,
     171  CODETYPEGALILEO_E5B_I      = 8,
     172  CODETYPEGALILEO_E5B_Q      = 9,
     173  CODETYPEGALILEO_E5_I       = 11,
     174  CODETYPEGALILEO_E5_Q       = 12,
     175  CODETYPEGALILEO_E6_A       = 14,
     176  CODETYPEGALILEO_E6_B       = 15,
     177  CODETYPEGALILEO_E6_C       = 16,
     178
     179  CODETYPEQZSS_L1_CA         = 0,
     180  CODETYPEQZSS_L1C_D         = 1,
     181  CODETYPEQZSS_L1C_P         = 2,
     182  CODETYPEQZSS_L2_CM         = 3,
     183  CODETYPEQZSS_L2_CL         = 4,
     184  CODETYPEQZSS_L2_CML        = 5,
     185  CODETYPEQZSS_L5_I          = 6,
     186  CODETYPEQZSS_L5_Q          = 7,
     187  CODETYPEQZSS_L5_IQ         = 8,
     188  CODETYPEQZSS_LEX_S         = 9,
     189  CODETYPEQZSS_LEX_L         = 10,
     190  CODETYPEQZSS_LEX_SL        = 11,
     191  CODETYPEQZSS_L1C_DP        = 12,
     192
     193  CODETYPE_SBAS_L1_CA        = 0,
     194  CODETYPE_SBAS_L5_I         = 1,
     195  CODETYPE_SBAS_L5_Q         = 2,
     196  CODETYPE_SBAS_L5_IQ        = 3,
     197
     198  CODETYPE_BDS_B1_I          = 0,
     199  CODETYPE_BDS_B1_Q          = 1,
     200  CODETYPE_BDS_B1_IQ         = 2,
     201  CODETYPE_BDS_B3_I          = 3,
     202  CODETYPE_BDS_B3_Q          = 4,
     203  CODETYPE_BDS_B3_IQ         = 5,
     204  CODETYPE_BDS_B2_I          = 6,
     205  CODETYPE_BDS_B2_Q          = 7,
     206  CODETYPE_BDS_B2_IQ         = 8,
    56207};
    57208
    58209#define SSR_MAXURA 5.5 /* > 5466.5mm in meter */
    59210
    60 /* GLONASS data is stored with offset CLOCKORBIT_NUMGPS in the data structures.
    61 So first GLONASS satellite is at xxx->Sat[CLOCKORBIT_NUMGPS], first
    62 GPS satellite is xxx->Sat[0]. */
     211/* satellite system data data is stored with offset CLOCKORBIT_OFFSET...
     212in the data structures. So first GLONASS satellite is at
     213xxx->Sat[CLOCKORBIT_OFFSETGLONASS], first GPS satellite is
     214xxx->Sat[CLOCKORBIT_OFFSETGPS]. */
     215
     216#ifdef COR_LEGACY
     217/* old names */
     218#define NumberOfGPSSat     NumberOfSat[CLOCKORBIT_SATGPS]
     219#define NumberOfGLONASSSat NumberOfSat[CLOCKORBIT_SATGLONASS]
     220#define GPSEpochTime       EpochTime[CLOCKORBIT_SATGPS] /* 0 .. 604799 s */
     221#define GLONASSEpochTime   EpochTime[CLOCKORBIT_SATGLONASS] /* 0 .. 86399 s (86400 for leap second) */
     222#define ClockDataSupplied  Supplied[COBOFS_CLOCK]
     223#define HRDataSupplied     Supplied[COBOFS_HR]
     224#define OrbitDataSupplied  Supplied[COBOFS_ORBIT]
     225#define URADataSupplied    Supplied[COBOFS_URA]
     226#define GetClockOrbitBias(a,b,c,d,e) GetSSR(a,b,0,0,c,d,e)
     227#endif /* COR_LEGACY */
     228
     229/* latency check code, disabled by default */
     230#ifdef COR_LATENCY
     231#define COR_LATENCYCOUNT 100
     232#endif
    63233
    64234struct ClockOrbit
    65235{
    66236  enum ClockOrbitType messageType;
    67   int GPSEpochTime;                 /* 0 .. 604799 s */
    68   int GLONASSEpochTime;             /* 0 .. 86399 s (86400 for leap second) */
    69   int NumberOfGPSSat;               /* 0 .. 32 */
    70   int NumberOfGLONASSSat;           /* 0 .. 24 */
    71   int ClockDataSupplied;            /* boolean */
    72   int HRDataSupplied;               /* boolean */
    73   int OrbitDataSupplied;            /* boolean */
    74   int URADataSupplied;              /* boolean */
    75   int epochGPS[101];                /* Weber, for latency */
    76   int epochSize;                    /* Weber, for latency */
    77   int SSRIOD;
    78   int SSRProviderID;
    79   int SSRSolutionID;
    80   int UpdateInterval;
     237  unsigned int EpochTime[CLOCKORBIT_SATNUM];   /* 0 .. system specific maximum */
     238  unsigned int NumberOfSat[CLOCKORBIT_SATNUM]; /* 0 .. CLOCKORBIT_NUM... */
     239
     240  unsigned int Supplied[COBOFS_NUM];           /* boolean */
     241#ifdef COR_LATENCY
     242  unsigned int epochGPS[COR_LATENCYCOUNT+1];   /* Weber, for latency */
     243  unsigned int epochSize;                      /* Weber, for latency */
     244#endif
     245  unsigned int SSRIOD;
     246  unsigned int SSRProviderID;
     247  unsigned int SSRSolutionID;
     248  unsigned int UpdateInterval;
    81249  enum SatelliteReferenceDatum SatRefDatum;
    82250  struct SatData {
    83     int ID; /* GPS or GLONASS */
    84     int IOD; /* GPS or GLONASS */
     251    unsigned int ID; /* all */
     252    unsigned int IOD; /* all */
     253    unsigned int toe; /* SBAS, BDS */
    85254    double UserRangeAccuracy; /* accuracy values in [m] */
    86255    double hrclock;
     
    100269      double DeltaA2;               /* m/ss */
    101270    } Clock;
    102   } Sat[CLOCKORBIT_NUMGPS+CLOCKORBIT_NUMGLONASS];
    103 };
    104 
    105 struct Bias
     271  } Sat[CLOCKORBIT_COUNTSAT];
     272};
     273
     274struct CodeBias
    106275{
    107   enum BiasType messageType;
    108   int GPSEpochTime;                 /* 0 .. 604799 s */
    109   int GLONASSEpochTime;             /* 0 .. 86399 s (86400 for leap second) */
    110   int NumberOfGPSSat;               /* 0 .. 32 */
    111   int NumberOfGLONASSSat;           /* 0 .. 24 */
    112   int UpdateInterval;
    113   int SSRIOD;
    114   int SSRProviderID;
    115   int SSRSolutionID;
     276  enum CodeBiasType messageType;
     277  unsigned int EpochTime[CLOCKORBIT_SATNUM];   /* 0 .. system specific maximum */
     278  unsigned int NumberOfSat[CLOCKORBIT_SATNUM]; /* 0 .. CLOCKORBIT_NUM... */
     279  unsigned int UpdateInterval;
     280  unsigned int SSRIOD;
     281  unsigned int SSRProviderID;
     282  unsigned int SSRSolutionID;
    116283  struct BiasSat
    117284  {
    118     int ID; /* GPS or GLONASS */
    119     int NumberOfCodeBiases;
    120     struct CodeBias
     285    unsigned int ID; /* all */
     286    unsigned int NumberOfCodeBiases;
     287    struct CodeBiasEntry
    121288    {
    122289      enum CodeType Type;
    123290      float         Bias;           /* m */
    124291    } Biases[CLOCKORBIT_NUMBIAS];
    125   } Sat[CLOCKORBIT_NUMGPS+CLOCKORBIT_NUMGLONASS];
     292  } Sat[CLOCKORBIT_COUNTSAT];
     293};
     294
     295struct PhaseBias
     296{
     297  enum PhaseBiasType messageType;
     298  unsigned int EpochTime[CLOCKORBIT_SATNUM];   /* 0 .. system specific maximum */
     299  unsigned int NumberOfSat[CLOCKORBIT_SATNUM]; /* 0 .. CLOCKORBIT_NUM... */
     300  unsigned int UpdateInterval;
     301  unsigned int SSRIOD;
     302  unsigned int SSRProviderID;
     303  unsigned int SSRSolutionID;
     304  unsigned int DispersiveBiasConsistencyIndicator;
     305  unsigned int MWConsistencyIndicator;
     306  struct PhaseBiasSat
     307  {
     308    unsigned int ID; /* all */
     309    unsigned int NumberOfPhaseBiases;
     310    double YawAngle; /* radiant */
     311    double YawRate;  /* radiant/s */
     312    struct PhaseBiasEntry
     313    {
     314      enum CodeType Type;
     315      unsigned int  SignalIntegerIndicator;
     316      unsigned int  SignalsWideLaneIntegerIndicator;
     317      unsigned int  SignalDiscontinuityCounter;
     318      float         Bias;           /* m */
     319    } Biases[CLOCKORBIT_NUMBIAS];
     320  } Sat[CLOCKORBIT_COUNTSAT];
     321};
     322
     323struct VTEC
     324{
     325  unsigned int EpochTime; /* GPS */
     326  unsigned int UpdateInterval;
     327  unsigned int SSRIOD;
     328  unsigned int SSRProviderID;
     329  unsigned int SSRSolutionID;
     330  unsigned int NumLayers; /* 1-4 */
     331  double Quality;
     332  struct IonoLayers {
     333    double       Height; /* m */
     334    unsigned int Degree; /* 1-8 */
     335    unsigned int Order; /* 1-8 */
     336    double       Sinus[CLOCKORBIT_MAXIONODEGREE][CLOCKORBIT_MAXIONOORDER];
     337    double       Cosinus[CLOCKORBIT_MAXIONODEGREE][CLOCKORBIT_MAXIONOORDER];
     338  } Layers[CLOCKORBIT_NUMIONOLAYERS];
    126339};
    127340
     
    129342size_t MakeClockOrbit(const struct ClockOrbit *co, enum ClockOrbitType type,
    130343       int moremessagesfollow, char *buffer, size_t size);
    131 size_t MakeBias(const struct Bias *b, enum BiasType type,
     344size_t MakeCodeBias(const struct CodeBias *b, enum CodeBiasType type,
    132345       int moremessagesfollow, char *buffer, size_t size);
     346size_t MakePhaseBias(const struct PhaseBias *b, enum PhaseBiasType type,
     347       int moremessagesfollow, char *buffer, size_t size);
     348size_t MakeVTEC(const struct VTEC *b, int moremessagesfollow, char *buffer,
     349       size_t size);
    133350
    134351enum GCOB_RETURN {
     
    143360  /* failed to do the work */
    144361  GCOBR_NOCLOCKORBITPARAMETER = -10,
    145   GCOBR_NOBIASPARAMETER = -11,
     362  GCOBR_NOCODEBIASPARAMETER = -11,
     363  GCOBR_NOPHASEBIASPARAMETER = -12,
     364  GCOBR_NOVTECPARAMETER = -13,
    146365  /* data mismatch - data in storage does not match new data */
    147366  GCOBR_TIMEMISMATCH = -20,
     
    155374
    156375/* buffer should point to a RTCM3 block */
    157 enum GCOB_RETURN GetClockOrbitBias(struct ClockOrbit *co, struct Bias *b,
    158        const char *buffer, size_t size, int *bytesused);
     376enum GCOB_RETURN GetSSR(struct ClockOrbit *co, struct CodeBias *b, struct VTEC *v,
     377       struct PhaseBias *pb, const char *buffer, size_t size, int *bytesused);
    159378
    160379#endif /* RTCM3_CLOCK_ORBIT_RTCM_H */
Note: See TracChangeset for help on using the changeset viewer.