Ignore:
Timestamp:
Aug 25, 2020, 11:02:49 PM (4 years ago)
Author:
stuerze
Message:

some modification to allow encoding and decoding of SSR corrections in RTCM-SSR and IGS-SSR formats

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/BNC/src/RTCM3/clock_and_orbit/clock_orbit_igs.h

    r8984 r9025  
    44/* Programheader
    55
    6         Name:           clock_orbit_igs.h
    7         Project:        RTCM3
    8         Version:        $Id: clock_orbit_igs.h 8966 2020-07-01 07:48:35Z stuerze $
    9         Authors:        Dirk Stöcker, Andrea Stürze
    10         Description:    state space approach: IGS
    11 */
    12 
     6 Name:           clock_orbit_igs.h
     7 Project:        RTCM3
     8 Version:        $Id: clock_orbit_igs.h 8966 2020-07-01 07:48:35Z stuerze $
     9 Authors:        Dirk Stöcker, Andrea Stürze
     10 Description:    state space approach: IGS
     11 */
     12#include <QDebug>
    1313#include <string.h>
    14 
    15 enum IGS_NUMBERS {
    16  RTCM_MESSAGE_NUMBER_IGS = 4076,
    17  IGS_SSR_VERSION         = 3
    18 };
    19 
    20 enum SatelliteReferenceDatum {
    21   DATUM_ITRF  = 0,
    22   DATUM_LOCAL = 1
    23 };
    24 
    25 enum COR_BASE {
    26   COBBASE_GPS     =  21,
    27   COBBASE_GLONASS =  41,
    28   COBBASE_GALILEO =  61,
    29   COBBASE_QZSS    =  81,
    30   COBBASE_BDS     = 101,
    31   COBBASE_SBAS    = 121,
    32   COBBASE_NUM
    33 };
    34 
    35 enum COR_OFFSET {   // sub-type message, for example:
    36   COBOFS_ORBIT = 0, // GPS: IM21
    37   COBOFS_CLOCK,     // GPS: IM22
    38   COBOFS_COMBINED,  // GPS: IM23
    39   COBOFS_HR,        // GPS: IM24
    40   COBOFS_CBIAS,     // GPS: IM25
    41   COBOFS_PBIAS,     // GPS: IM26
    42   COBOFS_URA,       // GPS: IM27
    43   COBOFS_NUM
    44 };
    45 
    46 enum ClockOrbitType {
    47   COTYPE_GPSORBIT        = COBBASE_GPS     + COBOFS_ORBIT,
    48   COTYPE_GPSCLOCK,
    49   COTYPE_GPSCOMBINED     = COBBASE_GPS     + COBOFS_COMBINED,
    50   COTYPE_GPSHR,
    51   COTYPE_GPSURA          = COBBASE_GPS     + COBOFS_URA,
    52 
    53   COTYPE_GLONASSORBIT    = COBBASE_GLONASS + COBOFS_ORBIT,
    54   COTYPE_GLONASSCLOCK,
    55   COTYPE_GLONASSCOMBINED = COBBASE_GLONASS + COBOFS_COMBINED,
    56   COTYPE_GLONASSHR,
    57   COTYPE_GLONASSURA      = COBBASE_GLONASS + COBOFS_URA,
    58 
    59   COTYPE_GALILEOORBIT    = COBBASE_GALILEO + COBOFS_ORBIT,
    60   COTYPE_GALILEOCLOCK,
    61   COTYPE_GALILEOCOMBINED = COBBASE_GALILEO + COBOFS_COMBINED,
    62   COTYPE_GALILEOHR,
    63   COTYPE_GALILEOURA      = COBBASE_GALILEO + COBOFS_URA,
    64 
    65   COTYPE_QZSSORBIT       = COBBASE_QZSS    + COBOFS_ORBIT,
    66   COTYPE_QZSSCLOCK,
    67   COTYPE_QZSSCOMBINED    = COBBASE_QZSS    + COBOFS_COMBINED,
    68   COTYPE_QZSSHR,
    69   COTYPE_QZSSURA         = COBBASE_QZSS    + COBOFS_URA,
    70 
    71   COTYPE_SBASORBIT       = COBBASE_SBAS    + COBOFS_ORBIT,
    72   COTYPE_SBASCLOCK,
    73   COTYPE_SBASCOMBINED    = COBBASE_SBAS    + COBOFS_COMBINED,
    74   COTYPE_SBASHR,
    75   COTYPE_SBASURA         = COBBASE_SBAS    + COBOFS_URA,
    76 
    77   COTYPE_BDSORBIT        = COBBASE_BDS     + COBOFS_ORBIT,
    78   COTYPE_BDSCLOCK,
    79   COTYPE_BDSCOMBINED     = COBBASE_BDS     + COBOFS_COMBINED,
    80   COTYPE_BDSHR,
    81   COTYPE_BDSURA          = COBBASE_BDS     + COBOFS_URA,
    82 
    83   COTYPE_AUTO = 0,
    84 };
    85 
    86 enum CodeBiasType {
    87   CBTYPE_GPS     = COBBASE_GPS     + COBOFS_CBIAS,
    88   CBTYPE_GLONASS = COBBASE_GLONASS + COBOFS_CBIAS,
    89   CBTYPE_GALILEO = COBBASE_GALILEO + COBOFS_CBIAS,
    90   CBTYPE_QZSS    = COBBASE_QZSS    + COBOFS_CBIAS,
    91   CBTYPE_SBAS    = COBBASE_SBAS    + COBOFS_CBIAS,
    92   CBTYPE_BDS     = COBBASE_BDS     + COBOFS_CBIAS,
    93   CBTYPE_AUTO    = 0
    94 };
    95 
    96 enum PhaseBiasType {
    97   PBTYPE_GPS     = COBBASE_GPS     + COBOFS_PBIAS,
    98   PBTYPE_GLONASS = COBBASE_GLONASS + COBOFS_PBIAS,
    99   PBTYPE_GALILEO = COBBASE_GALILEO + COBOFS_PBIAS,
    100   PBTYPE_QZSS    = COBBASE_QZSS    + COBOFS_PBIAS,
    101   PBTYPE_SBAS    = COBBASE_SBAS    + COBOFS_PBIAS,
    102   PBTYPE_BDS     = COBBASE_BDS     + COBOFS_PBIAS,
    103   PBTYPE_AUTO    = 0
    104 };
    105 
    106 enum VTECType {
    107   VTEC_BASE = 201
    108 };
    109 
    110 /* if some systems aren't supported at all, change the following numbers to zero
    111 for these systems to save space */
    112 enum COR_CONSTANTS {
    113   CLOCKORBIT_BUFFERSIZE    = 8192,
    114   CLOCKORBIT_NUMGPS        =   32,
    115   CLOCKORBIT_NUMGLONASS    =   26,
    116   CLOCKORBIT_NUMGALILEO    =   36,
    117   CLOCKORBIT_NUMQZSS       =   10,
    118   CLOCKORBIT_NUMSBAS       =   38,
    119   CLOCKORBIT_NUMBDS        =   65,
    120   CLOCKORBIT_NUMBIAS       =  100,
    121   CLOCKORBIT_NUMIONOLAYERS =    4,
    122   CLOCKORBIT_MAXIONOORDER  =   16,
    123   CLOCKORBIT_MAXIONODEGREE =   16
    124 };
    125 
    126 enum COR_SATSYSTEM {
    127   CLOCKORBIT_SATGPS=0,
    128   CLOCKORBIT_SATGLONASS,
    129   CLOCKORBIT_SATGALILEO,
    130   CLOCKORBIT_SATQZSS,
    131   CLOCKORBIT_SATSBAS,
    132   CLOCKORBIT_SATBDS,
    133   CLOCKORBIT_SATNUM
    134 };
    135 
    136 enum COR_OFFSETS {
    137   CLOCKORBIT_OFFSETGPS     = 0,
    138   CLOCKORBIT_OFFSETGLONASS = CLOCKORBIT_NUMGPS,
    139   CLOCKORBIT_OFFSETGALILEO = CLOCKORBIT_NUMGPS  + CLOCKORBIT_NUMGLONASS,
    140   CLOCKORBIT_OFFSETQZSS    = CLOCKORBIT_NUMGPS  + CLOCKORBIT_NUMGLONASS + CLOCKORBIT_NUMGALILEO,
    141   CLOCKORBIT_OFFSETSBAS    = CLOCKORBIT_NUMGPS  + CLOCKORBIT_NUMGLONASS + CLOCKORBIT_NUMGALILEO
    142                            + CLOCKORBIT_NUMQZSS,
    143   CLOCKORBIT_OFFSETBDS     = CLOCKORBIT_NUMGPS  + CLOCKORBIT_NUMGLONASS + CLOCKORBIT_NUMGALILEO
    144                            + CLOCKORBIT_NUMQZSS + CLOCKORBIT_NUMSBAS,
    145   CLOCKORBIT_COUNTSAT      = CLOCKORBIT_NUMGPS  + CLOCKORBIT_NUMGLONASS + CLOCKORBIT_NUMGALILEO
    146                            + CLOCKORBIT_NUMQZSS + CLOCKORBIT_NUMSBAS    + CLOCKORBIT_NUMBDS
    147 };
    148 
    149 enum CodeType {
    150   CODETYPEGPS_L1_CA          = 0,
    151   CODETYPEGPS_L1_P           = 1,
    152   CODETYPEGPS_L1_Z           = 2,
    153   CODETYPEGPS_L1C_D          = 3,
    154   CODETYPEGPS_L1C_P          = 4,
    155   CODETYPEGPS_L2_CA          = 5,
    156   CODETYPEGPS_SEMI_CODELESS  = 6,
    157   CODETYPEGPS_L2C_M          = 7,
    158   CODETYPEGPS_L2C_L          = 8,
    159   //RESERVED                 = 9,
    160   CODETYPEGPS_L2_P           = 10,
    161   CODETYPEGPS_L2_Z           = 11,
    162   //RESERVED                 = 12,
    163   //RESERVED                 = 13,
    164   CODETYPEGPS_L5_I           = 14,
    165   CODETYPEGPS_L5_Q           = 15,
    166 
    167   CODETYPEGLONASS_L1_CA      = 0,
    168   CODETYPEGLONASS_L1_P       = 1,
    169   CODETYPEGLONASS_L2_CA      = 2,
    170   CODETYPEGLONASS_L2_P       = 3,
    171   CODETYPEGLONASS_L1a_OCd    = 4,
    172   CODETYPEGLONASS_L1a_OCp    = 5,
    173   CODETYPEGLONASS_L2a_CSI    = 6,
    174   CODETYPEGLONASS_L2a_OCp    = 7,
    175   CODETYPEGLONASS_L3_I       = 8,
    176   CODETYPEGLONASS_L3_Q       = 9,
    177 
    178   CODETYPEGALILEO_E1_A       = 0,
    179   CODETYPEGALILEO_E1_B       = 1,
    180   CODETYPEGALILEO_E1_C       = 2,
    181   //RESERVED_E1_BC           = 3,
    182   //RESERVED_E1_ABC          = 4,
    183   CODETYPEGALILEO_E5A_I      = 5,
    184   CODETYPEGALILEO_E5A_Q      = 6,
    185   //RESERVED_E5A_IQ          = 7,
    186   CODETYPEGALILEO_E5B_I      = 8,
    187   CODETYPEGALILEO_E5B_Q      = 9,
    188   //RESERVED_E5B_IQ          = 10,
    189   //RESERVED_E5_I            = 11,
    190   //RESERVED_E5_Q            = 12,
    191   //RESERVED_E5_IQ           = 13,
    192   CODETYPEGALILEO_E6_A       = 14,
    193   CODETYPEGALILEO_E6_B       = 15,
    194   CODETYPEGALILEO_E6_C       = 16,
    195   //RESERVED_E6_BC           = 17,
    196   //RESERVED_E6_ABC          = 18,
    197 
    198   CODETYPEQZSS_L1_CA         = 0,
    199   CODETYPEQZSS_L1C_D         = 1,
    200   CODETYPEQZSS_L1C_P         = 2,
    201   CODETYPEQZSS_L2C_M         = 3,
    202   CODETYPEQZSS_L2C_L         = 4,
    203   //RESEVED_L2C_ML           = 5,
    204   CODETYPEQZSS_L5_I          = 6,
    205   CODETYPEQZSS_L5_Q          = 7,
    206   //RESERVED_L5_IQ           = 8,
    207   CODETYPEQZSS_L6_D          = 9,
    208   CODETYPEQZSS_L6_P          = 10,
    209   //RESERVED_L6_DP           = 11,
    210   //RESERVED_L1C_DP          = 12,
    211   //RESERVED_L1_S            = 13,
    212   //RESERVED_L5_D            = 14,
    213   //RESERVED_L5_P            = 15,
    214   //RESERVED_L5_DP           = 16,
    215   CODETYPEQZSS_L6_E          = 17,
    216   //RESERVED_L6_DE           = 18,
    217 
    218   CODETYPE_SBAS_L1_CA        = 0,
    219   CODETYPE_SBAS_L5_I         = 1,
    220   CODETYPE_SBAS_L5_Q         = 2,
    221   //RESERVED_SBAS_L5_IQ      = 3,
    222 
    223   CODETYPE_BDS_B1_I          = 0,
    224   CODETYPE_BDS_B1_Q          = 1,
    225   //RESERVED_BDS_B1_IQ       = 2,
    226   CODETYPE_BDS_B3_I          = 3,
    227   CODETYPE_BDS_B3_Q          = 4,
    228   //RESERVED_BDS_B3_IQ       = 5,
    229   CODETYPE_BDS_B2_I          = 6,
    230   CODETYPE_BDS_B2_Q          = 7,
    231   //RESERVED_BDS_B2_IQ       = 8,
    232   CODETYPE_BDS_B1a_D         = 9,
    233   CODETYPE_BDS_B1a_P         = 10,
    234   //RESERVED_BDS_B1a_DP      = 11,
    235   CODETYPE_BDS_B2a_D         = 12,
    236   CODETYPE_BDS_B2a_P         = 13,
    237   //RESEVED_BDS_B2a_DP       = 14,
    238   CODETYPE_BDS_B1_A          = 15, //NEW 1A
    239   //RESERVED                 = 16,
    240   //RESERVED                 = 17,
    241   CODETYPE_BDS_B3_A          = 18  //NEW 6A
    242 };
    243 
    244 #define SSR_MAXURA 5.5 /* > 5466.5mm in meter */
    245 
    246 /* satellite system data is stored with offset CLOCKORBIT_OFFSET...
    247 in the data structures. So first GLONASS satellite is at
    248 xxx->Sat[CLOCKORBIT_OFFSETGLONASS], first GPS satellite is
    249 xxx->Sat[CLOCKORBIT_OFFSETGPS]. */
    250 
    251 struct ClockOrbit {
    252   enum ClockOrbitType messageType;
    253   unsigned int EpochTime[CLOCKORBIT_SATNUM];   /* 0 .. system specific maximum */
    254   unsigned int NumberOfSat[CLOCKORBIT_SATNUM]; /* 0 .. CLOCKORBIT_NUM... */
    255   unsigned int Supplied[COBOFS_NUM];           /* boolean */
    256   unsigned int SSRIOD;
    257   unsigned int SSRProviderID;
    258   unsigned int SSRSolutionID;
    259   unsigned int UpdateInterval;
    260   enum SatelliteReferenceDatum SatRefDatum;
    261   struct SatData {
    262     unsigned int ID; /* all */
    263     unsigned int IOD; /* all */
    264     unsigned int toe; /* SBAS, BDS */
    265     double UserRangeAccuracy; /* accuracy values in [m] */
    266     double hrclock;
    267     struct OrbitPart {
    268       double DeltaRadial;           /* m */
    269       double DeltaAlongTrack;       /* m */
    270       double DeltaCrossTrack;       /* m */
    271       double DotDeltaRadial;        /* m/s */
    272       double DotDeltaAlongTrack;    /* m/s */
    273       double DotDeltaCrossTrack;    /* m/s */
    274     } Orbit;
    275     struct ClockPart {
    276       double DeltaA0;               /* m */
    277       double DeltaA1;               /* m/s */
    278       double DeltaA2;               /* m/ss */
    279     } Clock;
    280   } Sat[CLOCKORBIT_COUNTSAT];
    281 };
    282 
    283 struct CodeBias {
    284   enum CodeBiasType messageType;
    285   unsigned int EpochTime[CLOCKORBIT_SATNUM];   /* 0 .. system specific maximum */
    286   unsigned int NumberOfSat[CLOCKORBIT_SATNUM]; /* 0 .. CLOCKORBIT_NUM... */
    287   unsigned int UpdateInterval;
    288   unsigned int SSRIOD;
    289   unsigned int SSRProviderID;
    290   unsigned int SSRSolutionID;
    291   struct BiasSat {
    292     unsigned int ID; /* all */
    293     unsigned int NumberOfCodeBiases;
    294     struct CodeBiasEntry {
    295       enum CodeType Type;
    296       float         Bias;           /* m */
    297     } Biases[CLOCKORBIT_NUMBIAS];
    298   } Sat[CLOCKORBIT_COUNTSAT];
    299 };
    300 
    301 struct PhaseBias {
    302   enum PhaseBiasType messageType;
    303   unsigned int EpochTime[CLOCKORBIT_SATNUM];   /* 0 .. system specific maximum */
    304   unsigned int NumberOfSat[CLOCKORBIT_SATNUM]; /* 0 .. CLOCKORBIT_NUM... */
    305   unsigned int UpdateInterval;
    306   unsigned int SSRIOD;
    307   unsigned int SSRProviderID;
    308   unsigned int SSRSolutionID;
    309   unsigned int DispersiveBiasConsistencyIndicator;
    310   unsigned int MWConsistencyIndicator;
    311   struct PhaseBiasSat {
    312     unsigned int ID; /* all */
    313     unsigned int NumberOfPhaseBiases;
    314     double YawAngle; /* radiant */
    315     double YawRate;  /* radiant/s */
    316     struct PhaseBiasEntry {
    317       enum CodeType Type;
    318       unsigned int  SignalIntegerIndicator;
    319       unsigned int  SignalsWideLaneIntegerIndicator;
    320       unsigned int  SignalDiscontinuityCounter;
    321       float         Bias;           /* m */
    322     } Biases[CLOCKORBIT_NUMBIAS];
    323   } Sat[CLOCKORBIT_COUNTSAT];
    324 };
    325 
    326 struct VTEC {
    327   unsigned int EpochTime; /* GPS */
    328   unsigned int UpdateInterval;
    329   unsigned int SSRIOD;
    330   unsigned int SSRProviderID;
    331   unsigned int SSRSolutionID;
    332   unsigned int NumLayers; /* 1-4 */
    333   double Quality;
    334   struct IonoLayers {
    335     double       Height; /* m */
    336     unsigned int Degree; /* 1-16 */
    337     unsigned int Order; /* 1-16 */
    338     double       Sinus[CLOCKORBIT_MAXIONODEGREE][CLOCKORBIT_MAXIONOORDER];
    339     double       Cosinus[CLOCKORBIT_MAXIONODEGREE][CLOCKORBIT_MAXIONOORDER];
    340   } Layers[CLOCKORBIT_NUMIONOLAYERS];
    341 };
    342 
    343 /* return size of resulting data or 0 in case of an error */
    344 size_t MakeClockOrbit(const struct ClockOrbit *co, enum ClockOrbitType type,
     14#include "clock_orbit.h"
     15
     16class SsrCorrIgs: public SsrCorr {
     17  //Q_OBJECT
     18
     19public:
     20  SsrCorrIgs() {qDebug() << "SsrCorrIgs()";
     21    setCorBase();
     22    setCorOffset();
     23    setCoType();
     24    setCbType();
     25    setPbType();
     26    setVtecType();
     27    setCodeType();
     28
     29    satoffset << CLOCKORBIT_OFFSETGPS
     30        << CLOCKORBIT_OFFSETGLONASS
     31        << CLOCKORBIT_OFFSETGALILEO
     32        << CLOCKORBIT_OFFSETQZSS
     33        << CLOCKORBIT_OFFSETSBAS
     34        << CLOCKORBIT_OFFSETBDS
     35        << CLOCKORBIT_COUNTSAT;
     36  };
     37
     38  ~SsrCorrIgs() {};
     39
     40  void setCorBase() {
     41    COBBASE_GPS     =  21;
     42    COBBASE_GLONASS =  41;
     43    COBBASE_GALILEO =  61;
     44    COBBASE_QZSS    =  81;
     45    COBBASE_BDS     = 101;
     46    COBBASE_SBAS    = 121;
     47    COBBASE_NUM     =   6;
     48
     49    corbase << COBBASE_GPS
     50            << COBBASE_GLONASS
     51            << COBBASE_GALILEO
     52            << COBBASE_QZSS
     53            << COBBASE_SBAS
     54            << COBBASE_BDS;
     55  }
     56
     57  void setCorOffset() {
     58    COBOFS_ORBIT    = 0; // GPS: IM21
     59    COBOFS_CLOCK    = 1; // GPS: IM22
     60    COBOFS_COMBINED = 2; // GPS: IM23
     61    COBOFS_HR       = 3; // GPS: IM24
     62    COBOFS_CBIAS    = 4; // GPS: IM25
     63    COBOFS_PBIAS    = 5; // GPS: IM26
     64    COBOFS_URA      = 6; // GPS: IM27
     65    COBOFS_NUM      = 7;
     66  };
     67
     68  void setCoType() {
     69    COTYPE_GPSORBIT        = COBBASE_GPS + COBOFS_ORBIT;
     70    COTYPE_GPSCLOCK        = COTYPE_GPSORBIT + 1;
     71    COTYPE_GPSCOMBINED     = COBBASE_GPS + COBOFS_COMBINED;
     72    COTYPE_GPSHR           = COTYPE_GPSCOMBINED + 1;
     73    COTYPE_GPSURA          = COBBASE_GPS + COBOFS_URA;
     74
     75    COTYPE_GLONASSORBIT    = COBBASE_GLONASS + COBOFS_ORBIT;
     76    COTYPE_GLONASSCLOCK    = COTYPE_GLONASSORBIT + 1;
     77    COTYPE_GLONASSCOMBINED = COBBASE_GLONASS + COBOFS_COMBINED,
     78    COTYPE_GLONASSHR       = COTYPE_GLONASSCOMBINED + 1;
     79    COTYPE_GLONASSURA      = COBBASE_GLONASS + COBOFS_URA,
     80
     81    COTYPE_GALILEOORBIT    = COBBASE_GALILEO + COBOFS_ORBIT;
     82    COTYPE_GALILEOCLOCK    = COTYPE_GALILEOORBIT + 1;
     83    COTYPE_GALILEOCOMBINED = COBBASE_GALILEO + COBOFS_COMBINED,
     84    COTYPE_GALILEOHR       = COTYPE_GALILEOCOMBINED + 1;
     85    COTYPE_GALILEOURA      = COBBASE_GALILEO + COBOFS_URA;
     86
     87    COTYPE_QZSSORBIT       = COBBASE_QZSS + COBOFS_ORBIT;
     88    COTYPE_QZSSCLOCK       = COTYPE_QZSSORBIT + 1;
     89    COTYPE_QZSSCOMBINED    = COBBASE_QZSS + COBOFS_COMBINED;
     90    COTYPE_QZSSHR          = COTYPE_QZSSCOMBINED + 1;
     91    COTYPE_QZSSURA         = COBBASE_QZSS + COBOFS_URA;
     92
     93    COTYPE_SBASORBIT       = COBBASE_SBAS + COBOFS_ORBIT;
     94    COTYPE_SBASCLOCK       = COTYPE_SBASORBIT + 1;
     95    COTYPE_SBASCOMBINED    = COBBASE_SBAS + COBOFS_COMBINED;
     96    COTYPE_SBASHR          = COTYPE_SBASCOMBINED + 1;
     97    COTYPE_SBASURA         = COBBASE_SBAS + COBOFS_URA;
     98
     99    COTYPE_BDSORBIT        = COBBASE_BDS + COBOFS_ORBIT;
     100    COTYPE_BDSCLOCK        = COTYPE_BDSORBIT + 1;
     101    COTYPE_BDSCOMBINED     = COBBASE_BDS + COBOFS_COMBINED;
     102    COTYPE_BDSHR           = COTYPE_BDSCOMBINED + 1;
     103    COTYPE_BDSURA          = COBBASE_BDS + COBOFS_URA;
     104
     105    COTYPE_AUTO = 0;
     106  };
     107
     108  void setCbType() {
     109    CBTYPE_GPS     = COBBASE_GPS     + COBOFS_CBIAS;
     110    CBTYPE_GLONASS = COBBASE_GLONASS + COBOFS_CBIAS;
     111    CBTYPE_GALILEO = COBBASE_GALILEO + COBOFS_CBIAS;
     112    CBTYPE_QZSS    = COBBASE_QZSS    + COBOFS_CBIAS;
     113    CBTYPE_SBAS    = COBBASE_SBAS    + COBOFS_CBIAS;
     114    CBTYPE_BDS     = COBBASE_BDS     + COBOFS_CBIAS;
     115    CBTYPE_AUTO = 0;
     116  };
     117
     118  void setPbType() {
     119    PBTYPE_GPS     = COBBASE_GPS     + COBOFS_PBIAS;
     120    PBTYPE_GLONASS = COBBASE_GLONASS + COBOFS_PBIAS;
     121    PBTYPE_GALILEO = COBBASE_GALILEO + COBOFS_PBIAS;
     122    PBTYPE_QZSS    = COBBASE_QZSS    + COBOFS_PBIAS;
     123    PBTYPE_SBAS    = COBBASE_SBAS    + COBOFS_PBIAS;
     124    PBTYPE_BDS     = COBBASE_BDS     + COBOFS_PBIAS;
     125    PBTYPE_AUTO = 0;
     126  };
     127
     128  void setVtecType() {
     129      VTEC_BASE   = 201;
     130  };
     131
     132  void setCodeType() {
     133    CODETYPE_GPS_L1_CA          =  0;
     134    CODETYPE_GPS_L1_P           =  1;
     135    CODETYPE_GPS_L1_Z           =  2;
     136    CODETYPE_GPS_L1C_D          =  3;
     137    CODETYPE_GPS_L1C_P          =  4;
     138    CODETYPE_GPS_L2_CA          =  5;
     139    CODETYPE_GPS_SEMI_CODELESS  =  6;
     140    CODETYPE_GPS_L2C_M          =  7;
     141    CODETYPE_GPS_L2C_L          =  8;
     142    //RESERVED                  =  9;
     143    CODETYPE_GPS_L2_P           = 10;
     144    CODETYPE_GPS_L2_Z           = 11;
     145    //RESERVED                  = 12;
     146    //RESERVED                  = 13;
     147    CODETYPE_GPS_L5_I           = 14;
     148    CODETYPE_GPS_L5_Q           = 15;
     149
     150
     151
     152
     153
     154    CODETYPE_GLONASS_L1_CA      =  0;
     155    CODETYPE_GLONASS_L1_P       =  1;
     156    CODETYPE_GLONASS_L2_CA      =  2;
     157    CODETYPE_GLONASS_L2_P       =  3;
     158    CODETYPE_GLONASS_L1a_OCd    =  4;
     159    CODETYPE_GLONASS_L1a_OCp    =  5;
     160    CODETYPE_GLONASS_L2a_CSI    =  6;
     161    CODETYPE_GLONASS_L2a_OCp    =  7;
     162    CODETYPE_GLONASS_L3_I       =  8;
     163    CODETYPE_GLONASS_L3_Q       =  9;
     164
     165
     166
     167
     168    CODETYPE_GALILEO_E1_A       =  0;
     169    CODETYPE_GALILEO_E1_B       =  1;
     170    CODETYPE_GALILEO_E1_C       =  2;
     171    //RESERVED_E1_BC            =  3;
     172    //RESERVED_E1_ABC           =  4;
     173    CODETYPE_GALILEO_E5A_I      =  5;
     174    CODETYPE_GALILEO_E5A_Q      =  6;
     175    //RESERVED_E5A_IQ           =  7;
     176    CODETYPE_GALILEO_E5B_I      =  8;
     177    CODETYPE_GALILEO_E5B_Q      =  9;
     178    //RESERVED_E5B_IQ           = 10;
     179    //RESERVED_E5_I             = 11;
     180    //RESERVED_E5_Q             = 12;
     181    //RESERVED_E5_IQ            = 13;
     182    CODETYPE_GALILEO_E6_A       = 14;
     183    CODETYPE_GALILEO_E6_B       = 15;
     184    CODETYPE_GALILEO_E6_C       = 16;
     185    //RESERVED_E6_BC            = 17;
     186    //RESERVED_E6_ABC           = 18;
     187
     188    CODETYPE_QZSS_L1_CA         = 0;
     189    CODETYPE_QZSS_L1C_D         = 1;
     190    CODETYPE_QZSS_L1C_P         = 2;
     191    CODETYPE_QZSS_L2C_M         = 3;
     192    CODETYPE_QZSS_L2C_L         = 4;
     193    //RESEVED_L2C_ML            = 5;
     194    CODETYPE_QZSS_L5_I          = 6;
     195    CODETYPE_QZSS_L5_Q          = 7;
     196    //RESERVED_L5_IQ            = 8;
     197    CODETYPE_QZSS_L6_D          = 9;
     198    CODETYPE_QZSS_L6_P          = 10;
     199    //RESERVED_L6_DP            = 11;
     200    //RESERVED_L1C_DP           = 12;
     201    //RESERVED_L1_S             = 13;
     202    //RESERVED_L5_D             = 14;
     203    //RESERVED_L5_P             = 15;
     204    //RESERVED_L5_DP            = 16;
     205    CODETYPE_QZSS_L6_E          = 17;
     206    //RESERVED_L6_DE            = 18;
     207
     208    CODETYPE_SBAS_L1_CA        =  0;
     209    CODETYPE_SBAS_L5_I         =  1;
     210    CODETYPE_SBAS_L5_Q         =  2;
     211    //RESERVED_CODETYPE_SBAS_L5_IQ      = 3;
     212
     213    CODETYPE_BDS_B1_I          =  0;
     214    CODETYPE_BDS_B1_Q          =  1;
     215    //RESERVED_CODETYPE_BDS_B1_IQ       = 2;
     216    CODETYPE_BDS_B3_I          =  3;
     217    CODETYPE_BDS_B3_Q          =  4;
     218    //RESERVED_CODETYPE_BDS_B3_IQ       = 5;
     219    CODETYPE_BDS_B2_I          =  6;
     220    CODETYPE_BDS_B2_Q          =  7;
     221    //RESERVED_CODETYPE_BDS_B2_IQ       = 8;
     222    CODETYPE_BDS_B1a_D         =  9;
     223    CODETYPE_BDS_B1a_P         = 10;
     224    //RESERVED_CODETYPE_BDS_B1a_DP      = 11;
     225    CODETYPE_BDS_B2a_D         = 12;
     226    CODETYPE_BDS_B2a_P         = 13;
     227    //RESEVED_CODETYPE_BDS_B2a_DP       = 14;
     228    CODETYPE_BDS_B1_A          = 15; //NEW 1A
     229    //RESERVED                 = 16;
     230    //RESERVED                 = 17;
     231    CODETYPE_BDS_B3_A          = 18;  //NEW 6A
     232   };
     233
     234   std::string       codeTypeToRnxType(char system, CodeType type);
     235   SsrCorr::CodeType rnxTypeToCodeType(char system, std::string type);
     236
     237   size_t MakeClockOrbit(const struct ClockOrbit *co, ClockOrbitType type,
    345238       int moremessagesfollow, char *buffer, size_t size);
    346 size_t MakeCodeBias(const struct CodeBias *b, enum CodeBiasType type,
     239   size_t MakeCodeBias(const struct CodeBias *b, CodeBiasType type,
    347240       int moremessagesfollow, char *buffer, size_t size);
    348 size_t MakePhaseBias(const struct PhaseBias *b, enum PhaseBiasType type,
     241   size_t MakePhaseBias(const struct PhaseBias *b, PhaseBiasType type,
    349242       int moremessagesfollow, char *buffer, size_t size);
    350 size_t MakeVTEC(const struct VTEC *b, int moremessagesfollow, char *buffer,
     243   size_t MakeVTEC(const struct VTEC *v, int moremessagesfollow, char *buffer,
    351244       size_t size);
    352 
    353 enum GCOB_RETURN {
    354   /* all well */
    355   GCOBR_MESSAGEFOLLOWS        =  1,
    356   GCOBR_OK                    =  0,
    357   /* unknown data, a warning */
    358   GCOBR_UNKNOWNTYPE           = -1,
    359   GCOBR_UNKNOWNDATA           = -2,
    360   GCOBR_CRCMISMATCH           = -3,
    361   GCOBR_SHORTMESSAGE          = -4,
    362   /* failed to do the work */
    363   GCOBR_NOCLOCKORBITPARAMETER = -10,
    364   GCOBR_NOCODEBIASPARAMETER   = -11,
    365   GCOBR_NOPHASEBIASPARAMETER  = -12,
    366   GCOBR_NOVTECPARAMETER       = -13,
    367   /* data mismatch - data in storage does not match new data */
    368   GCOBR_TIMEMISMATCH          = -20,
    369   GCOBR_DATAMISMATCH          = -21,
    370   /* not enough data - can decode the block completely */
    371   GCOBR_SHORTBUFFER           = -30,
    372   GCOBR_MESSAGEEXCEEDSBUFFER  = -31};
    373 
    374 /* NOTE: When an error message has been emitted, the output structures may have been modified. Make a copy of the previous variant before calling the
    375 function to have a clean state. */
    376 
    377 /* buffer should point to a RTCM3 block */
    378 enum GCOB_RETURN GetSSR(struct ClockOrbit *co, struct CodeBias *b, struct VTEC *v,
    379        struct PhaseBias *pb, const char *buffer, size_t size, int *bytesused);
     245   enum GCOB_RETURN GetSSR(struct ClockOrbit *co, struct CodeBias *b,
     246       struct VTEC *v, struct PhaseBias *pb, const char *buffer, size_t size,
     247       int *bytesused);
     248  };
    380249
    381250#endif /* RTCM3_CLOCK_ORBIT_IGS_H */
Note: See TracChangeset for help on using the changeset viewer.