Changeset 11031 in ntrip


Ignore:
Timestamp:
Sep 18, 2026, 9:54:17 AM (14 hours ago)
Author:
stuerze
Message:

minor changes

Location:
trunk/BNC/src/RTCM3
Files:
10 edited

Legend:

Unmodified
Added
Removed
  • trunk/BNC/src/RTCM3/RTCM3Decoder.cpp

    r11029 r11031  
    22632263      if ((id >= 1057 && id <= 1068) ||
    22642264          (id >= 1240 && id <= 1270) ||
    2265          // (id > 0     && id <= 100) ||
     2265          (id > 0     && id <= 100) ||
    22662266          (id == 4076)) {
    22672267        if (!_coDecoders.contains(_staID.toLatin1())) {
     
    22712271          }
    22722272          else {
    2273            // _coDecoders[_staID.toLatin1()]->initSsrFormatType(RTCM3coDecoder::RTCMnewssr);
    2274             _coDecoders[_staID.toLatin1()]->initSsrFormatType(RTCM3coDecoder::RTCMssr);
     2273            _coDecoders[_staID.toLatin1()]->initSsrFormatType(RTCM3coDecoder::RTCMnewssr);
     2274           // _coDecoders[_staID.toLatin1()]->initSsrFormatType(RTCM3coDecoder::RTCMssr);
    22752275          }
    22762276        }
  • trunk/BNC/src/RTCM3/RTCM3coDecoder.cpp

    r11024 r11031  
    190190    struct SsrCorr::VTEC       vTECSav;
    191191    struct SsrCorr::MetaData   metaDataSav;
     192    struct SsrCorr::Antenna    antennaSav;
    192193    // save state
    193194    memcpy(&clkOrbSav,     &_clkOrb,    sizeof(clkOrbSav));
     
    196197    memcpy(&vTECSav,       &_vTEC,      sizeof(vTECSav));
    197198    memcpy(&metaDataSav,   &_metaData,  sizeof(metaDataSav));
     199    memcpy(&antennaSav,    &_antenna,   sizeof(antennaSav));
    198200
    199201    int bytesused = 0;
    200202
    201     GCOB_RETURN irc = _ssrCorr->GetSSR(&_clkOrb, &_codeBias, &_vTEC, &_phaseBias, &_metaData,
     203    GCOB_RETURN irc = _ssrCorr->GetSSR(&_clkOrb, &_codeBias, &_vTEC, &_phaseBias, &_metaData, &_antenna,
    202204                                       _buffer.data(), _buffer.size(), &bytesused);
    203205
  • trunk/BNC/src/RTCM3/RTCM3coDecoder.h

    r11024 r11031  
    8585  SsrCorr::VTEC                         _vTEC;
    8686  SsrCorr::MetaData                     _metaData;
     87  SsrCorr::Antenna                      _antenna;
    8788  int                                   _providerID[3];
    8889  e_type                                _type;
  • trunk/BNC/src/RTCM3/clock_and_orbit/clock_orbit.h

    r11008 r11031  
    3232  CLOCKORBIT_NUMGLONASS = t_prn::MAXPRN_GLONASS,
    3333  CLOCKORBIT_NUMGALILEO = t_prn::MAXPRN_GALILEO,
    34   CLOCKORBIT_NUMQZSS = t_prn::MAXPRN_QZSS,
    35   CLOCKORBIT_NUMSBAS = t_prn::MAXPRN_SBAS,
    36   CLOCKORBIT_NUMBDS = t_prn::MAXPRN_BDS,
    37   CLOCKORBIT_NUMBIAS = 150,
    38   VTEC_NUMIONOLAYERS = 4,
    39   VTEC_MAXIONOORDER = 16,
    40   VTEC_MAXIONODEGREE = 16,
    41   META_MAXNUMENTRIES = 7
     34  CLOCKORBIT_NUMQZSS    = t_prn::MAXPRN_QZSS,
     35  CLOCKORBIT_NUMSBAS    = t_prn::MAXPRN_SBAS,
     36  CLOCKORBIT_NUMBDS     = t_prn::MAXPRN_BDS,
     37  CLOCKORBIT_NUMBIAS    = 150,
     38  VTEC_NUMIONOLAYERS    =   4,
     39  VTEC_MAXIONOORDER     =  16,
     40  VTEC_MAXIONODEGREE    =  16,
     41  META_MAXNUMENTRIES    =   7,
     42  ANT_MAXFREQUENCIES    =   6,
     43  ANT_MAXNADIRDEGREES   =  40
    4244};
    4345
     
    475477  };
    476478
     479  struct Antenna {
     480    unsigned int SSRProviderID;
     481    unsigned int SatelliteAntennaIOD;
     482    unsigned int PhaseCenterInformationIndicator;
     483    unsigned int GroupDelayInformationIndicator;
     484    unsigned int NadirAngleDependentCorrectionIndicator;
     485    unsigned int maximumOffNadirAngle;
     486    unsigned int NadirAngleDependentCorrectionRangeExtension;
     487    unsigned int SatelliteSetIndicator;
     488    unsigned int SatelliteMask;
     489    struct SatellitePart {
     490      unsigned int FrequencySetIndicator;
     491      unsigned int GnssFrequencyMask;
     492      struct FrequencyPart {
     493        unsigned int NadirCorrectionIndicator;
     494        int NadirCorrection;
     495        int NadirAngleCorrection[ANT_MAXNADIRDEGREES];
     496      } Freq[ANT_MAXFREQUENCIES];
     497    } Sat[CLOCKORBIT_COUNTSAT];
     498  } GNSS[CLOCKORBIT_SATNUM];
     499
    477500  /* return size of resulting data or 0 in case of an error */
    478501  virtual size_t MakeClockOrbit(const struct ClockOrbit* co, CodeType type, int moremessagesfollow, char* buffer, size_t size) = 0;
     
    482505  /* buffer should point to a RTCM3 block */
    483506  virtual enum GCOB_RETURN GetSSR(struct ClockOrbit* co,
    484     struct CodeBias* b, struct VTEC* v,
     507    struct CodeBias* cb, struct VTEC* v,
    485508    struct PhaseBias* pb,
    486509    struct MetaData* md,
     510    struct Antenna* a,
    487511    const char* buffer, size_t size, int* bytesused) = 0;
    488512
  • trunk/BNC/src/RTCM3/clock_and_orbit/clock_orbit_igs.cpp

    r11029 r11031  
    205205}
    206206
    207 size_t SsrCorrIgs::MakeCodeBias(const struct CodeBias *b, CodeBiasType type,
     207size_t SsrCorrIgs::MakeCodeBias(const struct CodeBias *cb, CodeBiasType type,
    208208    int moremessagesfollow, char *buffer, size_t size) {
    209209  unsigned int s, i, j;
     
    212212
    213213  for (s = 0; s < CLOCKORBIT_SATNUM; ++s) {
    214     if (b->NumberOfSat[s] && (type == CBTYPE_AUTO || type == corbase[s] + COBOFS_CBIAS)) {
     214    if (cb->NumberOfSat[s] && (type == CBTYPE_AUTO || type == corbase[s] + COBOFS_CBIAS)) {
    215215      INITBLOCK
    216216            E_RTCM_MESSAGE_NUMBER(RTCM_MESSAGE_NUMBER_IGS)
    217217      E_IGS_SSR_VERSION(IGS_SSR_VERSION)
    218218            E_IGS_MESSAGE_NUMBER(corbase[s] + COBOFS_CBIAS)
    219             E_GPS_EPOCH_TIME(b->EpochTime[s])
    220       E_SSR_UPDATE_INTERVAL(b->UpdateInterval)
     219            E_GPS_EPOCH_TIME(cb->EpochTime[s])
     220      E_SSR_UPDATE_INTERVAL(cb->UpdateInterval)
    221221            E_MULTIPLE_MESSAGE_INDICATOR(moremessagesfollow ? 1 : 0)
    222       E_SSR_IOD(b->SSRIOD)
    223       E_SSR_PROVIDER_ID(b->SSRProviderID)
    224       E_SSR_SOLUTION_ID(b->SSRSolutionID)
    225       E_NO_OF_SATELLITES(b->NumberOfSat[s])
    226       for (i = satoffset[s]; i < satoffset[s] + b->NumberOfSat[s]; ++i) {
    227         E_GPS_SATELLITE_ID(b->Sat[i].ID)
    228         E_NO_OF_BIASES(b->Sat[i].NumberOfCodeBiases)
    229         for (j = 0; j < b->Sat[i].NumberOfCodeBiases; ++j) {
    230           E_GNSS_SIGNAL_IDENTIFIER(b->Sat[i].Biases[j].Type)
    231           E_CODE_BIAS(b->Sat[i].Biases[j].Bias)
     222      E_SSR_IOD(cb->SSRIOD)
     223      E_SSR_PROVIDER_ID(cb->SSRProviderID)
     224      E_SSR_SOLUTION_ID(cb->SSRSolutionID)
     225      E_NO_OF_SATELLITES(cb->NumberOfSat[s])
     226      for (i = satoffset[s]; i < satoffset[s] + cb->NumberOfSat[s]; ++i) {
     227        E_GPS_SATELLITE_ID(cb->Sat[i].ID)
     228        E_NO_OF_BIASES(cb->Sat[i].NumberOfCodeBiases)
     229        for (j = 0; j < cb->Sat[i].NumberOfCodeBiases; ++j) {
     230          E_GNSS_SIGNAL_IDENTIFIER(cb->Sat[i].Biases[j].Type)
     231          E_CODE_BIAS(cb->Sat[i].Biases[j].Bias)
    232232        }
    233233      }
     
    238238}
    239239
    240 size_t SsrCorrIgs::MakePhaseBias(const struct PhaseBias *b, PhaseBiasType type,
     240size_t SsrCorrIgs::MakePhaseBias(const struct PhaseBias *pb, PhaseBiasType type,
    241241    int moremessagesfollow, char *buffer, size_t size) {
    242242  unsigned int s, i, j;
     
    245245
    246246  for (s = 0; s < CLOCKORBIT_SATNUM; ++s)       {
    247     if (b->NumberOfSat[s] && (type == PBTYPE_AUTO || type == corbase[s] + COBOFS_PBIAS)) {
     247    if (pb->NumberOfSat[s] && (type == PBTYPE_AUTO || type == corbase[s] + COBOFS_PBIAS)) {
    248248      INITBLOCK
    249249            E_RTCM_MESSAGE_NUMBER(RTCM_MESSAGE_NUMBER_IGS)
    250250      E_IGS_SSR_VERSION(IGS_SSR_VERSION)
    251251            E_IGS_MESSAGE_NUMBER(corbase[s] + COBOFS_PBIAS)
    252             E_GPS_EPOCH_TIME(b->EpochTime[s])
    253       E_SSR_UPDATE_INTERVAL(b->UpdateInterval)
     252            E_GPS_EPOCH_TIME(pb->EpochTime[s])
     253      E_SSR_UPDATE_INTERVAL(pb->UpdateInterval)
    254254            E_MULTIPLE_MESSAGE_INDICATOR(moremessagesfollow ? 1 : 0)
    255       E_SSR_IOD(b->SSRIOD)
    256       E_SSR_PROVIDER_ID(b->SSRProviderID)
    257       E_SSR_SOLUTION_ID(b->SSRSolutionID)
    258       E_DISPERSIVE_BIAS_INDICATOR(b->DispersiveBiasConsistencyIndicator ? 1 : 0)
    259       E_MW_CONSISTENCY_INDICATOR(b->MWConsistencyIndicator ? 1 : 0)
    260       E_NO_OF_SATELLITES(b->NumberOfSat[s])
    261       for (i = satoffset[s]; i < satoffset[s] + b->NumberOfSat[s]; ++i) {
    262         E_GPS_SATELLITE_ID(b->Sat[i].ID)
    263         E_NO_OF_BIASES(b->Sat[i].NumberOfPhaseBiases)
    264         E_YAW_ANGLE(b->Sat[i].YawAngle)
    265         E_YAW_RATE(b->Sat[i].YawRate)
    266         for (j = 0; j < b->Sat[i].NumberOfPhaseBiases; ++j) {
    267           E_GNSS_SIGNAL_IDENTIFIER(b->Sat[i].Biases[j].Type)
    268           E_INTEGER_INDICATOR(b->Sat[i].Biases[j].IntegerIndicator ? 1 : 0)
    269           E_WIDE_LANE_INDICATOR(b->Sat[i].Biases[j].WidelaneGroupIndicator)
    270           E_DISCONTINUITY_COUNTER(b->Sat[i].Biases[j].DiscontinuityCounter)
    271           E_PHASE_BIAS_CORRECTION(b->Sat[i].Biases[j].Bias)
     255      E_SSR_IOD(pb->SSRIOD)
     256      E_SSR_PROVIDER_ID(pb->SSRProviderID)
     257      E_SSR_SOLUTION_ID(pb->SSRSolutionID)
     258      E_DISPERSIVE_BIAS_INDICATOR(pb->DispersiveBiasConsistencyIndicator ? 1 : 0)
     259      E_MW_CONSISTENCY_INDICATOR(pb->MWConsistencyIndicator ? 1 : 0)
     260      E_NO_OF_SATELLITES(pb->NumberOfSat[s])
     261      for (i = satoffset[s]; i < satoffset[s] + pb->NumberOfSat[s]; ++i) {
     262        E_GPS_SATELLITE_ID(pb->Sat[i].ID)
     263        E_NO_OF_BIASES(pb->Sat[i].NumberOfPhaseBiases)
     264        E_YAW_ANGLE(pb->Sat[i].YawAngle)
     265        E_YAW_RATE(pb->Sat[i].YawRate)
     266        for (j = 0; j < pb->Sat[i].NumberOfPhaseBiases; ++j) {
     267          E_GNSS_SIGNAL_IDENTIFIER(pb->Sat[i].Biases[j].Type)
     268          E_INTEGER_INDICATOR(pb->Sat[i].Biases[j].IntegerIndicator ? 1 : 0)
     269          E_WIDE_LANE_INDICATOR(pb->Sat[i].Biases[j].WidelaneGroupIndicator)
     270          E_DISCONTINUITY_COUNTER(pb->Sat[i].Biases[j].DiscontinuityCounter)
     271          E_PHASE_BIAS_CORRECTION(pb->Sat[i].Biases[j].Bias)
    272272        }
    273273      }
     
    314314}
    315315
    316 enum GCOB_RETURN SsrCorrIgs::GetSSR(struct ClockOrbit *co, struct CodeBias *b,struct VTEC *v,
    317     struct PhaseBias *pb, struct MetaData *md, const char *buffer, size_t size, int *bytesused) {
     316enum GCOB_RETURN SsrCorrIgs::GetSSR(struct ClockOrbit *co, struct CodeBias *cb,struct VTEC *v,
     317    struct PhaseBias *pb, struct MetaData *md, struct Antenna* a, const char *buffer, size_t size, int *bytesused) {
    318318  int mmi = 0, h, rs;
    319319  unsigned int igstype, pos, i, j, s, nums, id;
     
    617617      }
    618618      else if (corrOffset == COBOFS_CBIAS) {
    619           if (!b)
     619          if (!cb)
    620620            return GCOBR_NOCODEBIASPARAMETER;
    621           b->messageType = igstype;
    622           D_GPS_EPOCH_TIME_CHECK(b->EpochTime[s], b->NumberOfSat[s])
    623           D_SSR_UPDATE_INTERVAL(b->UpdateInterval)
     621          cb->messageType = igstype;
     622          D_GPS_EPOCH_TIME_CHECK(cb->EpochTime[s], cb->NumberOfSat[s])
     623          D_SSR_UPDATE_INTERVAL(cb->UpdateInterval)
    624624          D_MULTIPLE_MESSAGE_INDICATOR(mmi)
    625           D_SSR_IOD(b->SSRIOD)
    626           D_SSR_PROVIDER_ID(b->SSRProviderID)
    627           D_SSR_SOLUTION_ID(b->SSRSolutionID)
     625          D_SSR_IOD(cb->SSRIOD)
     626          D_SSR_PROVIDER_ID(cb->SSRProviderID)
     627          D_SSR_SOLUTION_ID(cb->SSRSolutionID)
    628628          D_NO_OF_SATELLITES(nums)
    629629#ifdef BNC_DEBUG_SSR
    630630          fprintf(stderr, "epochTime %d ui %d mmi %d sats %d/%d ssrIod %d providerId %d solId %d\n",
    631                           b->EpochTime[s], b->UpdateInterval,mmi,b->NumberOfSat[s],nums,
    632                                   b->SSRIOD, b->SSRProviderID, b->SSRSolutionID);
     631                          cb->EpochTime[s], cb->UpdateInterval,mmi,cb->NumberOfSat[s],nums,
     632                                  cb->SSRIOD, cb->SSRProviderID, cb->SSRSolutionID);
    633633#endif
    634634          for (i = 0; i < nums; ++i) {
    635635            D_GPS_SATELLITE_ID(id)
    636636            for (pos = satoffset[s];
    637                 pos < satoffset[s] + b->NumberOfSat[s] && b->Sat[pos].ID != id;
     637                pos < satoffset[s] + cb->NumberOfSat[s] && cb->Sat[pos].ID != id;
    638638                ++pos)
    639639              ;
    640640            if (pos >= satoffset[s + 1])
    641641              return GCOBR_DATAMISMATCH;
    642             else if (pos == b->NumberOfSat[s] + satoffset[s])
    643               ++b->NumberOfSat[s];
    644             b->Sat[pos].ID = id;
    645             D_NO_OF_BIASES(b->Sat[pos].NumberOfCodeBiases)
     642            else if (pos == cb->NumberOfSat[s] + satoffset[s])
     643              ++cb->NumberOfSat[s];
     644            cb->Sat[pos].ID = id;
     645            D_NO_OF_BIASES(cb->Sat[pos].NumberOfCodeBiases)
    646646#ifdef BNC_DEBUG_SSR
    647647            fprintf(stderr, "id %2d #%d ",
    648                     b->Sat[pos].ID, b->Sat[pos].NumberOfCodeBiases);
    649 #endif
    650             for (j = 0; j < b->Sat[pos].NumberOfCodeBiases; ++j) {
    651               D_GNSS_SIGNAL_IDENTIFIER(b->Sat[pos].Biases[j].Type)
    652               D_CODE_BIAS(b->Sat[pos].Biases[j].Bias)
     648                    cb->Sat[pos].ID, cb->Sat[pos].NumberOfCodeBiases);
     649#endif
     650            for (j = 0; j < cb->Sat[pos].NumberOfCodeBiases; ++j) {
     651              D_GNSS_SIGNAL_IDENTIFIER(cb->Sat[pos].Biases[j].Type)
     652              D_CODE_BIAS(cb->Sat[pos].Biases[j].Bias)
    653653#ifdef BNC_DEBUG_SSR
    654654            fprintf(stderr, "t%02d b %8.2f ",
    655                     b->Sat[pos].Biases[j].Type, b->Sat[pos].Biases[j].Bias);
     655                    cb->Sat[pos].Biases[j].Type, cb->Sat[pos].Biases[j].Bias);
    656656#endif
    657657            }
  • trunk/BNC/src/RTCM3/clock_and_orbit/clock_orbit_igs.h

    r11004 r11031  
    221221   SsrCorr::CodeType rnxTypeToCodeType(char system, std::string type);
    222222
    223    size_t MakeClockOrbit(const struct ClockOrbit *co, ClockOrbitType type,
    224        int moremessagesfollow, char *buffer, size_t size);
    225    size_t MakeCodeBias(const struct CodeBias *b, CodeBiasType type,
    226        int moremessagesfollow, char *buffer, size_t size);
    227    size_t MakePhaseBias(const struct PhaseBias *b, PhaseBiasType type,
    228        int moremessagesfollow, char *buffer, size_t size);
    229    size_t MakeVTEC(const struct VTEC *v, int moremessagesfollow, char *buffer,
    230        size_t size);
    231    enum GCOB_RETURN GetSSR(struct ClockOrbit *co, struct CodeBias *b,
    232        struct VTEC *v, struct PhaseBias *pb, struct MetaData *md,
    233        const char *buffer, size_t size, int *bytesused);
    234 };
     223  size_t MakeClockOrbit(const struct ClockOrbit *co, ClockOrbitType type, int moremessagesfollow, char *buffer, size_t size);
     224  size_t MakeCodeBias(const struct CodeBias *b, CodeBiasType type, int moremessagesfollow, char *buffer, size_t size);
     225  size_t MakePhaseBias(const struct PhaseBias *b, PhaseBiasType type, int moremessagesfollow, char *buffer, size_t size);
     226  size_t MakeVTEC(const struct VTEC *v, int moremessagesfollow, char *buffer, size_t size);
     227  size_t MakeMetaData(const struct MetaData *md, char *buffer, size_t size);
     228  enum GCOB_RETURN GetSSR(struct ClockOrbit *co, struct CodeBias *cb, struct VTEC *v,
     229                          struct PhaseBias *pb, struct MetaData *md, struct Antenna* a,
     230                          const char *buffer, size_t size, int *bytesused);
     231 };
    235232
    236233#endif /* RTCM3_CLOCK_ORBIT_IGS_H */
  • trunk/BNC/src/RTCM3/clock_and_orbit/clock_orbit_rtcm.cpp

    r11029 r11031  
    345345}
    346346
    347 size_t SsrCorrRtcm::MakeCodeBias(const struct CodeBias *b, CodeBiasType type,
     347size_t SsrCorrRtcm::MakeCodeBias(const struct CodeBias *cb, CodeBiasType type,
    348348    int moremessagesfollow, char *buffer, size_t size) {
    349349  unsigned int s, i, j;
     
    352352
    353353  for (s = 0; s < CLOCKORBIT_SATNUM; ++s) {
    354     if (b->NumberOfSat[s] && (type == CBTYPE_AUTO || type == corbase[s] + COBOFS_CBIAS)) {
     354    if (cb->NumberOfSat[s] && (type == CBTYPE_AUTO || type == corbase[s] + COBOFS_CBIAS)) {
    355355      INITBLOCK
    356356      E_RTCM_MESSAGE_NUMBER(corbase[s] + COBOFS_CBIAS)
     
    361361        case CLOCKORBIT_SATSBAS:
    362362        case CLOCKORBIT_SATBDS:
    363           E_GPS_EPOCH_TIME(b->EpochTime[s])
     363          E_GPS_EPOCH_TIME(cb->EpochTime[s])
    364364          break;
    365365        case CLOCKORBIT_SATGLONASS:
    366           E_GLONASS_EPOCH_TIME(b->EpochTime[s])
    367           break;
    368       }
    369       E_SSR_UPDATE_INTERVAL(b->UpdateInterval)
     366          E_GLONASS_EPOCH_TIME(cb->EpochTime[s])
     367          break;
     368      }
     369      E_SSR_UPDATE_INTERVAL(cb->UpdateInterval)
    370370      E_MULTIPLE_MESSAGE_INDICATOR(moremessagesfollow ? 1 : 0)
    371       E_SSR_IOD(b->SSRIOD)
    372       E_SSR_PROVIDER_ID(b->SSRProviderID)
    373       E_SSR_SOLUTION_ID(b->SSRSolutionID)
    374       E_NO_OF_SATELLITES(b->NumberOfSat[s])
    375       for (i = satoffset[s]; i < satoffset[s] + b->NumberOfSat[s]; ++i) {
     371      E_SSR_IOD(cb->SSRIOD)
     372      E_SSR_PROVIDER_ID(cb->SSRProviderID)
     373      E_SSR_SOLUTION_ID(cb->SSRSolutionID)
     374      E_NO_OF_SATELLITES(cb->NumberOfSat[s])
     375      for (i = satoffset[s]; i < satoffset[s] + cb->NumberOfSat[s]; ++i) {
    376376        switch (s) {
    377377          case CLOCKORBIT_SATGPS:
     
    379379          case CLOCKORBIT_SATSBAS:
    380380          case CLOCKORBIT_SATBDS:
    381             E_GPS_SATELLITE_ID(b->Sat[i].ID)
     381            E_GPS_SATELLITE_ID(cb->Sat[i].ID)
    382382            break;
    383383          case CLOCKORBIT_SATQZSS:
    384             E_QZSS_SATELLITE_ID_OLD(b->Sat[i].ID)
     384            E_QZSS_SATELLITE_ID_OLD(cb->Sat[i].ID)
    385385            break;
    386386          case CLOCKORBIT_SATGLONASS:
    387             E_GLONASS_SATELLITE_ID(b->Sat[i].ID)
     387            E_GLONASS_SATELLITE_ID(cb->Sat[i].ID)
    388388            break;
    389389        }
    390         E_NO_OF_BIASES(b->Sat[i].NumberOfCodeBiases)
    391         for (j = 0; j < b->Sat[i].NumberOfCodeBiases; ++j) {
    392           E_GNSS_SIGNAL_IDENTIFIER(b->Sat[i].Biases[j].Type)
    393           E_CODE_BIAS(b->Sat[i].Biases[j].Bias)
     390        E_NO_OF_BIASES(cb->Sat[i].NumberOfCodeBiases)
     391        for (j = 0; j < cb->Sat[i].NumberOfCodeBiases; ++j) {
     392          E_GNSS_SIGNAL_IDENTIFIER(cb->Sat[i].Biases[j].Type)
     393          E_CODE_BIAS(cb->Sat[i].Biases[j].Bias)
    394394        }
    395395      }
     
    400400}
    401401
    402 size_t SsrCorrRtcm::MakePhaseBias(const struct PhaseBias *b, PhaseBiasType type,
     402size_t SsrCorrRtcm::MakePhaseBias(const struct PhaseBias *pb, PhaseBiasType type,
    403403    int moremessagesfollow, char *buffer, size_t size) {
    404404  unsigned int s, i, j;
     
    407407
    408408  for (s = 0; s < CLOCKORBIT_SATNUM; ++s)       {
    409     if (b->NumberOfSat[s] && (type == PBTYPE_AUTO || type == s + PBTYPE_BASE)) {
     409    if (pb->NumberOfSat[s] && (type == PBTYPE_AUTO || type == s + PBTYPE_BASE)) {
    410410      INITBLOCK
    411411      E_RTCM_MESSAGE_NUMBER(s + PBTYPE_BASE)
     
    416416        case CLOCKORBIT_SATSBAS:
    417417        case CLOCKORBIT_SATBDS:
    418           E_GPS_EPOCH_TIME(b->EpochTime[s])
     418          E_GPS_EPOCH_TIME(pb->EpochTime[s])
    419419          break;
    420420        case CLOCKORBIT_SATGLONASS:
    421           E_GLONASS_EPOCH_TIME(b->EpochTime[s])
    422           break;
    423       }
    424       E_SSR_UPDATE_INTERVAL(b->UpdateInterval)
     421          E_GLONASS_EPOCH_TIME(pb->EpochTime[s])
     422          break;
     423      }
     424      E_SSR_UPDATE_INTERVAL(pb->UpdateInterval)
    425425      E_MULTIPLE_MESSAGE_INDICATOR(moremessagesfollow ? 1 : 0)
    426       E_SSR_IOD(b->SSRIOD)
    427       E_SSR_PROVIDER_ID(b->SSRProviderID)
    428       E_SSR_SOLUTION_ID(b->SSRSolutionID)
    429       E_DISPERSIVE_BIAS_INDICATOR(b->DispersiveBiasConsistencyIndicator ? 1 : 0)
    430       E_MW_CONSISTENCY_INDICATOR(b->MWConsistencyIndicator ? 1 : 0)
    431       E_NO_OF_SATELLITES(b->NumberOfSat[s])
    432       for (i = satoffset[s]; i < satoffset[s] + b->NumberOfSat[s]; ++i) {
     426      E_SSR_IOD(pb->SSRIOD)
     427      E_SSR_PROVIDER_ID(pb->SSRProviderID)
     428      E_SSR_SOLUTION_ID(pb->SSRSolutionID)
     429      E_DISPERSIVE_BIAS_INDICATOR(pb->DispersiveBiasConsistencyIndicator ? 1 : 0)
     430      E_MW_CONSISTENCY_INDICATOR(pb->MWConsistencyIndicator ? 1 : 0)
     431      E_NO_OF_SATELLITES(pb->NumberOfSat[s])
     432      for (i = satoffset[s]; i < satoffset[s] + pb->NumberOfSat[s]; ++i) {
    433433        switch (s) {
    434434          case CLOCKORBIT_SATGPS:
     
    436436            case CLOCKORBIT_SATSBAS:
    437437            case CLOCKORBIT_SATBDS:
    438             E_GPS_SATELLITE_ID(b->Sat[i].ID)
     438            E_GPS_SATELLITE_ID(pb->Sat[i].ID)
    439439            break;
    440440          case CLOCKORBIT_SATQZSS:
    441             E_QZSS_SATELLITE_ID_OLD(b->Sat[i].ID)
     441            E_QZSS_SATELLITE_ID_OLD(pb->Sat[i].ID)
    442442            break;
    443443          case CLOCKORBIT_SATGLONASS:
    444             E_GLONASS_SATELLITE_ID(b->Sat[i].ID)
     444            E_GLONASS_SATELLITE_ID(pb->Sat[i].ID)
    445445            break;
    446446        }
    447         E_NO_OF_BIASES(b->Sat[i].NumberOfPhaseBiases)
    448         E_YAW_ANGLE(b->Sat[i].YawAngle)
    449         E_YAW_RATE(b->Sat[i].YawRate)
    450         for (j = 0; j < b->Sat[i].NumberOfPhaseBiases; ++j) {
    451           E_GNSS_SIGNAL_IDENTIFIER(b->Sat[i].Biases[j].Type)
    452           E_INTEGER_INDICATOR(b->Sat[i].Biases[j].IntegerIndicator ? 1 : 0)
    453           E_WIDE_LANE_INDICATOR(b->Sat[i].Biases[j].WidelaneGroupIndicator)
    454           E_DISCONTINUITY_COUNTER(b->Sat[i].Biases[j].DiscontinuityCounter)
    455           E_PHASE_BIAS_CORRECTION(b->Sat[i].Biases[j].Bias)
     447        E_NO_OF_BIASES(pb->Sat[i].NumberOfPhaseBiases)
     448        E_YAW_ANGLE(pb->Sat[i].YawAngle)
     449        E_YAW_RATE(pb->Sat[i].YawRate)
     450        for (j = 0; j < pb->Sat[i].NumberOfPhaseBiases; ++j) {
     451          E_GNSS_SIGNAL_IDENTIFIER(pb->Sat[i].Biases[j].Type)
     452          E_INTEGER_INDICATOR(pb->Sat[i].Biases[j].IntegerIndicator ? 1 : 0)
     453          E_WIDE_LANE_INDICATOR(pb->Sat[i].Biases[j].WidelaneGroupIndicator)
     454          E_DISCONTINUITY_COUNTER(pb->Sat[i].Biases[j].DiscontinuityCounter)
     455          E_PHASE_BIAS_CORRECTION(pb->Sat[i].Biases[j].Bias)
    456456        }
    457457      }
     
    495495}
    496496
    497 enum GCOB_RETURN SsrCorrRtcm::GetSSR(struct ClockOrbit *co, struct CodeBias *b,struct VTEC *v,
    498     struct PhaseBias *pb, struct MetaData *md, const char *buffer, size_t size, int *bytesused) {
     497enum GCOB_RETURN SsrCorrRtcm::GetSSR(struct ClockOrbit *co, struct CodeBias *cb,struct VTEC *v,
     498    struct PhaseBias *pb, struct MetaData *md, struct Antenna* a, const char *buffer, size_t size, int *bytesused) {
    499499  int mmi = 0, h, rs;
    500500  unsigned int type, pos, i, j, s, nums, id;
     
    10491049      }
    10501050      else if (corrOffset ==  COBOFS_CBIAS) {
    1051           if (!b)
     1051          if (!cb)
    10521052            return GCOBR_NOCODEBIASPARAMETER;
    1053           b->messageType = type;
     1053          cb->messageType = type;
    10541054          switch (s) {
    10551055            case CLOCKORBIT_SATGPS:
     
    10581058            case CLOCKORBIT_SATSBAS:
    10591059            case CLOCKORBIT_SATBDS:
    1060               D_GPS_EPOCH_TIME_CHECK(b->EpochTime[s], b->NumberOfSat[s])
     1060              D_GPS_EPOCH_TIME_CHECK(cb->EpochTime[s], cb->NumberOfSat[s])
    10611061              break;
    10621062            case CLOCKORBIT_SATGLONASS:
    1063               D_GLONASS_EPOCH_TIME_CHECK(b->EpochTime[s], b->NumberOfSat[s])
     1063              D_GLONASS_EPOCH_TIME_CHECK(cb->EpochTime[s], cb->NumberOfSat[s])
    10641064              break;
    10651065          }
    1066           D_SSR_UPDATE_INTERVAL(b->UpdateInterval)
     1066          D_SSR_UPDATE_INTERVAL(cb->UpdateInterval)
    10671067          D_MULTIPLE_MESSAGE_INDICATOR(mmi)
    1068           D_SSR_IOD(b->SSRIOD)
    1069           D_SSR_PROVIDER_ID(b->SSRProviderID)
    1070           D_SSR_SOLUTION_ID(b->SSRSolutionID)
     1068          D_SSR_IOD(cb->SSRIOD)
     1069          D_SSR_PROVIDER_ID(cb->SSRProviderID)
     1070          D_SSR_SOLUTION_ID(cb->SSRSolutionID)
    10711071          D_NO_OF_SATELLITES(nums)
    10721072#ifdef BNC_DEBUG_SSR
    10731073          fprintf(stderr, "epochTime %d ui %d mmi %d sats %d/%d ssrIod %d providerId %d solId %d\n",
    1074                           b->EpochTime[s], b->UpdateInterval,mmi,b->NumberOfSat[s],nums,
    1075                                   b->SSRIOD, b->SSRProviderID, b->SSRSolutionID);
     1074                          cb->EpochTime[s], cb->UpdateInterval,mmi,cb->NumberOfSat[s],nums,
     1075                                  cb->SSRIOD, cb->SSRProviderID, cb->SSRSolutionID);
    10761076#endif
    10771077          for (i = 0; i < nums; ++i) {
     
    10911091            }
    10921092            for (pos = satoffset[s];
    1093                 pos < satoffset[s] + b->NumberOfSat[s] && b->Sat[pos].ID != id;
     1093                 pos < satoffset[s] + cb->NumberOfSat[s] && cb->Sat[pos].ID != id;
    10941094                ++pos)
    10951095              ;
    10961096            if (pos >= satoffset[s + 1])
    10971097              return GCOBR_DATAMISMATCH;
    1098             else if (pos == b->NumberOfSat[s] + satoffset[s])
    1099               ++b->NumberOfSat[s];
    1100             b->Sat[pos].ID = id;
    1101             D_NO_OF_BIASES(b->Sat[pos].NumberOfCodeBiases)
     1098            else if (pos == cb->NumberOfSat[s] + satoffset[s])
     1099              ++cb->NumberOfSat[s];
     1100            cb->Sat[pos].ID = id;
     1101            D_NO_OF_BIASES(cb->Sat[pos].NumberOfCodeBiases)
    11021102#ifdef BNC_DEBUG_SSR
    11031103            fprintf(stderr, "id %2d #%d ",
    1104                     b->Sat[pos].ID, b->Sat[pos].NumberOfCodeBiases);
    1105 #endif
    1106             for (j = 0; j < b->Sat[pos].NumberOfCodeBiases; ++j) {
    1107               D_GNSS_SIGNAL_IDENTIFIER(b->Sat[pos].Biases[j].Type)
    1108               D_CODE_BIAS(b->Sat[pos].Biases[j].Bias)
     1104                    cb->Sat[pos].ID, cb->Sat[pos].NumberOfCodeBiases);
     1105#endif
     1106            for (j = 0; j < cb->Sat[pos].NumberOfCodeBiases; ++j) {
     1107              D_GNSS_SIGNAL_IDENTIFIER(cb->Sat[pos].Biases[j].Type)
     1108              D_CODE_BIAS(cb->Sat[pos].Biases[j].Bias)
    11091109#ifdef BNC_DEBUG_SSR
    11101110            fprintf(stderr, "t%02d b %8.2f ",
    1111                     b->Sat[pos].Biases[j].Type, b->Sat[pos].Biases[j].Bias);
     1111                    cb->Sat[pos].Biases[j].Type, cb->Sat[pos].Biases[j].Bias);
    11121112#endif
    11131113            }
  • trunk/BNC/src/RTCM3/clock_and_orbit/clock_orbit_rtcm.h

    r11004 r11031  
    220220  SsrCorr::CodeType rnxTypeToCodeType(char system, std::string type);
    221221
    222   size_t MakeClockOrbit(const struct ClockOrbit *co, ClockOrbitType type,
    223       int moremessagesfollow, char *buffer, size_t size);
    224   size_t MakeCodeBias(const struct CodeBias *b, CodeBiasType type,
    225       int moremessagesfollow, char *buffer, size_t size);
    226   size_t MakePhaseBias(const struct PhaseBias *b, PhaseBiasType type,
    227       int moremessagesfollow, char *buffer, size_t size);
    228   size_t MakeVTEC(const struct VTEC *v, int moremessagesfollow, char *buffer,
    229       size_t size);
    230   enum GCOB_RETURN GetSSR(struct ClockOrbit *co, struct CodeBias *b,
    231       struct VTEC *v, struct PhaseBias *pb, struct MetaData *md,
    232       const char *buffer, size_t size,
    233       int *bytesused);
     222  size_t MakeClockOrbit(const struct ClockOrbit *co, ClockOrbitType type, int moremessagesfollow, char *buffer, size_t size);
     223  size_t MakeCodeBias(const struct CodeBias *b, CodeBiasType type, int moremessagesfollow, char *buffer, size_t size);
     224  size_t MakePhaseBias(const struct PhaseBias *b, PhaseBiasType type, int moremessagesfollow, char *buffer, size_t size);
     225  size_t MakeVTEC(const struct VTEC *v, int moremessagesfollow, char *buffer, size_t size);
     226  size_t MakeMetaData(const struct MetaData *md, char *buffer, size_t size);
     227  enum GCOB_RETURN GetSSR(struct ClockOrbit *co, struct CodeBias *cb, struct VTEC *v,
     228                          struct PhaseBias *pb, struct MetaData *md, struct Antenna* a,
     229                          const char *buffer, size_t size, int *bytesused);
    234230 };
    235231
     232
    236233#endif /* RTCM3_CLOCK_ORBIT_RTCM_H */
  • trunk/BNC/src/RTCM3/clock_and_orbit/clock_orbit_rtcm_new.cpp

    r11008 r11031  
    7070        E_RTCM_MESSAGE_NUMBER(corType[s][COBOFS_ORBIT])
    7171        switch (s) {
    72         case CLOCKORBIT_SATGPS:
    73         case CLOCKORBIT_SATGALILEO:
    74         case CLOCKORBIT_SATQZSS:
    75         case CLOCKORBIT_SATSBAS:
    76         case CLOCKORBIT_SATBDS:
    77           E_GPS_EPOCH_TIME(co->EpochTime[s])
    78             break;
    79         case CLOCKORBIT_SATGLONASS:
     72          case CLOCKORBIT_SATGPS:
     73          case CLOCKORBIT_SATGALILEO:
     74          case CLOCKORBIT_SATQZSS:
     75          case CLOCKORBIT_SATSBAS:
     76          case CLOCKORBIT_SATBDS:
     77            E_GPS_EPOCH_TIME(co->EpochTime[s])
     78            break;
     79          case CLOCKORBIT_SATGLONASS:
    8080          E_GLONASS_EPOCH_TIME(co->EpochTime[s])
    8181            break;
    8282        }
    83       E_SSR_UPDATE_INTERVAL(co->UpdateInterval)
     83        E_SSR_UPDATE_INTERVAL(co->UpdateInterval)
    8484        E_MULTIPLE_MESSAGE_INDICATOR(moremessagesfollow ? 1 : 0)
    8585        E_SATELLITE_REFERENCE_DATUM(co->SatRefDatum)
     
    9090        for (i = satoffset[s]; i < satoffset[s] + co->NumberOfSat[s]; ++i) {
    9191          switch (s) {
    92           case CLOCKORBIT_SATGPS:
    93             E_GPS_SATELLITE_ID(co->Sat[i].ID)
     92            case CLOCKORBIT_SATGPS:
     93              E_GPS_SATELLITE_ID(co->Sat[i].ID)
    9494              E_GPS_IODE(co->Sat[i].IOD)
    9595              break;
    96           case CLOCKORBIT_SATGLONASS:
    97             E_GLONASS_SATELLITE_ID(co->Sat[i].ID)
     96            case CLOCKORBIT_SATGLONASS:
     97              E_GLONASS_SATELLITE_ID(co->Sat[i].ID)
    9898              E_GLONASS_IOD(co->Sat[i].IOD)
    9999              break;
    100           case CLOCKORBIT_SATGALILEO:
    101             E_GPS_SATELLITE_ID(co->Sat[i].ID)
     100            case CLOCKORBIT_SATGALILEO:
     101              E_GPS_SATELLITE_ID(co->Sat[i].ID)
    102102              E_GALILEO_IOD(co->Sat[i].IOD)
    103103              break;
    104           case CLOCKORBIT_SATQZSS:
    105             E_QZSS_SATELLITE_ID(co->Sat[i].ID)
     104            case CLOCKORBIT_SATQZSS:
     105              E_QZSS_SATELLITE_ID(co->Sat[i].ID)
    106106              E_GPS_IODE(co->Sat[i].IOD)
    107107              break;
    108           case CLOCKORBIT_SATSBAS:
    109             E_GPS_SATELLITE_ID(co->Sat[i].ID)
     108            case CLOCKORBIT_SATSBAS:
     109              E_GPS_SATELLITE_ID(co->Sat[i].ID)
    110110              E_SBAS_T0MOD(co->Sat[i].toe)
    111111              E_SBAS_IODCRC(co->Sat[i].IOD)
    112112              break;
    113           case CLOCKORBIT_SATBDS:
    114             E_GPS_SATELLITE_ID(co->Sat[i].ID)
     113            case CLOCKORBIT_SATBDS:
     114              E_GPS_SATELLITE_ID(co->Sat[i].ID)
    115115              E_BDS_IOD(co->Sat[i].IOD)
    116116              break;
    117117          }
    118118          E_DELTA_RADIAL(co->Sat[i].Orbit.DeltaRadial)
    119             E_DELTA_ALONG_TRACK(co->Sat[i].Orbit.DeltaAlongTrack)
    120             E_DELTA_CROSS_TRACK(co->Sat[i].Orbit.DeltaCrossTrack)
    121             E_DOT_DELTA_RADIAL(co->Sat[i].Orbit.DotDeltaRadial)
    122             E_DOT_DELTA_ALONG_TRACK(co->Sat[i].Orbit.DotDeltaAlongTrack)
    123             E_DOT_DELTA_CROSS_TRACK(co->Sat[i].Orbit.DotDeltaCrossTrack)
     119          E_DELTA_ALONG_TRACK(co->Sat[i].Orbit.DeltaAlongTrack)
     120          E_DELTA_CROSS_TRACK(co->Sat[i].Orbit.DeltaCrossTrack)
     121          E_DOT_DELTA_RADIAL(co->Sat[i].Orbit.DotDeltaRadial)
     122          E_DOT_DELTA_ALONG_TRACK(co->Sat[i].Orbit.DotDeltaAlongTrack)
     123          E_DOT_DELTA_CROSS_TRACK(co->Sat[i].Orbit.DotDeltaCrossTrack)
    124124        }
    125125      ENDBLOCK
     
    129129        E_RTCM_MESSAGE_NUMBER(corType[s][COBOFS_CLOCK])
    130130        switch (s) {
    131         case CLOCKORBIT_SATGPS:
    132         case CLOCKORBIT_SATGALILEO:
    133         case CLOCKORBIT_SATQZSS:
    134         case CLOCKORBIT_SATSBAS:
    135         case CLOCKORBIT_SATBDS:
    136           E_GPS_EPOCH_TIME(co->EpochTime[s])
    137             break;
    138         case CLOCKORBIT_SATGLONASS:
    139           E_GLONASS_EPOCH_TIME(co->EpochTime[s])
    140             break;
    141         }
    142       E_SSR_UPDATE_INTERVAL(co->UpdateInterval)
     131          case CLOCKORBIT_SATGPS:
     132          case CLOCKORBIT_SATGALILEO:
     133          case CLOCKORBIT_SATQZSS:
     134          case CLOCKORBIT_SATSBAS:
     135          case CLOCKORBIT_SATBDS:
     136            E_GPS_EPOCH_TIME(co->EpochTime[s])
     137            break;
     138          case CLOCKORBIT_SATGLONASS:
     139            E_GLONASS_EPOCH_TIME(co->EpochTime[s])
     140            break;
     141        }
     142        E_SSR_UPDATE_INTERVAL(co->UpdateInterval)
    143143        E_MULTIPLE_MESSAGE_INDICATOR(moremessagesfollow ? 1 : 0)
    144144        E_SSR_IOD(co->SSRIOD)
     
    148148        for (i = satoffset[s]; i < satoffset[s] + co->NumberOfSat[s]; ++i) {
    149149          E_GPS_SATELLITE_ID(co->Sat[i].ID)
    150             E_DELTA_CLOCK_C0(co->Sat[i].Clock.DeltaA0)
    151             E_DELTA_CLOCK_C1(co->Sat[i].Clock.DeltaA1)
    152             E_DELTA_CLOCK_C2(co->Sat[i].Clock.DeltaA2)
     150          E_DELTA_CLOCK_C0(co->Sat[i].Clock.DeltaA0)
     151          E_DELTA_CLOCK_C1(co->Sat[i].Clock.DeltaA1)
     152          E_DELTA_CLOCK_C2(co->Sat[i].Clock.DeltaA2)
    153153        }
    154154      ENDBLOCK
     
    170170          E_RTCM_MESSAGE_NUMBER(corType[s][COBOFS_COMBINED])
    171171          switch (s) {
    172           case CLOCKORBIT_SATGPS:
    173           case CLOCKORBIT_SATGALILEO:
    174           case CLOCKORBIT_SATQZSS:
    175           case CLOCKORBIT_SATSBAS:
    176           case CLOCKORBIT_SATBDS:
    177             E_GPS_EPOCH_TIME(co->EpochTime[s])
    178               break;
    179           case CLOCKORBIT_SATGLONASS:
    180             E_GLONASS_EPOCH_TIME(co->EpochTime[s])
     172            case CLOCKORBIT_SATGPS:
     173            case CLOCKORBIT_SATGALILEO:
     174            case CLOCKORBIT_SATQZSS:
     175            case CLOCKORBIT_SATSBAS:
     176            case CLOCKORBIT_SATBDS:
     177              E_GPS_EPOCH_TIME(co->EpochTime[s])
     178             break;
     179            case CLOCKORBIT_SATGLONASS:
     180              E_GLONASS_EPOCH_TIME(co->EpochTime[s])
    181181              break;
    182182          }
    183         E_SSR_UPDATE_INTERVAL(co->UpdateInterval)
     183          E_SSR_UPDATE_INTERVAL(co->UpdateInterval)
    184184#ifdef SPLITBLOCK
    185185          E_MULTIPLE_MESSAGE_INDICATOR((moremessagesfollow || left) ? 1 : 0)
     
    200200          {
    201201            switch (s) {
    202             case CLOCKORBIT_SATGPS:
    203               E_GPS_SATELLITE_ID(co->Sat[i].ID)
     202              case CLOCKORBIT_SATGPS:
     203                E_GPS_SATELLITE_ID(co->Sat[i].ID)
    204204                E_GPS_IODE(co->Sat[i].IOD)
    205205                break;
    206             case CLOCKORBIT_SATGLONASS:
    207               E_GLONASS_SATELLITE_ID(co->Sat[i].ID)
     206              case CLOCKORBIT_SATGLONASS:
     207                E_GLONASS_SATELLITE_ID(co->Sat[i].ID)
    208208                E_GLONASS_IOD(co->Sat[i].IOD)
    209209                break;
    210             case CLOCKORBIT_SATGALILEO:
    211               E_GPS_SATELLITE_ID(co->Sat[i].ID)
     210              case CLOCKORBIT_SATGALILEO:
     211                E_GPS_SATELLITE_ID(co->Sat[i].ID)
    212212                E_GALILEO_IOD(co->Sat[i].IOD)
    213213                break;
    214             case CLOCKORBIT_SATQZSS:
    215               E_QZSS_SATELLITE_ID(co->Sat[i].ID)
     214              case CLOCKORBIT_SATQZSS:
     215                E_QZSS_SATELLITE_ID(co->Sat[i].ID)
    216216                E_GPS_IODE(co->Sat[i].IOD)
    217217                break;
    218             case CLOCKORBIT_SATSBAS:
    219               E_GPS_SATELLITE_ID(co->Sat[i].ID)
     218              case CLOCKORBIT_SATSBAS:
     219                E_GPS_SATELLITE_ID(co->Sat[i].ID)
    220220                E_SBAS_T0MOD(co->Sat[i].toe)
    221221                E_SBAS_IODCRC(co->Sat[i].IOD)
    222222                break;
    223             case CLOCKORBIT_SATBDS:
    224               E_GPS_SATELLITE_ID(co->Sat[i].ID)
     223              case CLOCKORBIT_SATBDS:
     224                E_GPS_SATELLITE_ID(co->Sat[i].ID)
    225225                E_BDS_IOD(co->Sat[i].IOD)
    226226                break;
    227227            }
    228228            E_DELTA_RADIAL(co->Sat[i].Orbit.DeltaRadial)
    229               E_DELTA_ALONG_TRACK(co->Sat[i].Orbit.DeltaAlongTrack)
    230               E_DELTA_CROSS_TRACK(co->Sat[i].Orbit.DeltaCrossTrack)
    231               E_DOT_DELTA_RADIAL(co->Sat[i].Orbit.DotDeltaRadial)
    232               E_DOT_DELTA_ALONG_TRACK(co->Sat[i].Orbit.DotDeltaAlongTrack)
    233               E_DOT_DELTA_CROSS_TRACK(co->Sat[i].Orbit.DotDeltaCrossTrack)
    234               E_DELTA_CLOCK_C0(co->Sat[i].Clock.DeltaA0)
    235               E_DELTA_CLOCK_C1(co->Sat[i].Clock.DeltaA1)
    236               E_DELTA_CLOCK_C2(co->Sat[i].Clock.DeltaA2)
     229            E_DELTA_ALONG_TRACK(co->Sat[i].Orbit.DeltaAlongTrack)
     230            E_DELTA_CROSS_TRACK(co->Sat[i].Orbit.DeltaCrossTrack)
     231            E_DOT_DELTA_RADIAL(co->Sat[i].Orbit.DotDeltaRadial)
     232            E_DOT_DELTA_ALONG_TRACK(co->Sat[i].Orbit.DotDeltaAlongTrack)
     233            E_DOT_DELTA_CROSS_TRACK(co->Sat[i].Orbit.DotDeltaCrossTrack)
     234            E_DELTA_CLOCK_C0(co->Sat[i].Clock.DeltaA0)
     235            E_DELTA_CLOCK_C1(co->Sat[i].Clock.DeltaA1)
     236            E_DELTA_CLOCK_C2(co->Sat[i].Clock.DeltaA2)
    237237          }
    238238        ENDBLOCK
     
    247247      INITBLOCK
    248248        E_RTCM_MESSAGE_NUMBER(corType[s][COBOFS_HR])
    249         switch (s) {
    250         case CLOCKORBIT_SATGPS:
    251         case CLOCKORBIT_SATGALILEO:
    252         case CLOCKORBIT_SATQZSS:
    253         case CLOCKORBIT_SATSBAS:
    254         case CLOCKORBIT_SATBDS:
    255           E_GPS_EPOCH_TIME(co->EpochTime[s])
    256             break;
    257         case CLOCKORBIT_SATGLONASS:
    258           E_GLONASS_EPOCH_TIME(co->EpochTime[s])
    259             break;
    260         }
    261       E_SSR_UPDATE_INTERVAL(co->UpdateInterval)
     249       switch (s) {
     250          case CLOCKORBIT_SATGPS:
     251          case CLOCKORBIT_SATGALILEO:
     252          case CLOCKORBIT_SATQZSS:
     253          case CLOCKORBIT_SATSBAS:
     254          case CLOCKORBIT_SATBDS:
     255            E_GPS_EPOCH_TIME(co->EpochTime[s])
     256            break;
     257          case CLOCKORBIT_SATGLONASS:
     258            E_GLONASS_EPOCH_TIME(co->EpochTime[s])
     259            break;
     260        }
     261        E_SSR_UPDATE_INTERVAL(co->UpdateInterval)
    262262        E_MULTIPLE_MESSAGE_INDICATOR(moremessagesfollow ? 1 : 0)
    263263        E_SSR_IOD(co->SSRIOD)
     
    275275        E_RTCM_MESSAGE_NUMBER(corType[s][COBOFS_URA])
    276276        switch (s) {
    277         case CLOCKORBIT_SATGPS:
    278         case CLOCKORBIT_SATGALILEO:
    279         case CLOCKORBIT_SATQZSS:
    280         case CLOCKORBIT_SATSBAS:
    281         case CLOCKORBIT_SATBDS:
    282           E_GPS_EPOCH_TIME(co->EpochTime[s])
    283             break;
    284         case CLOCKORBIT_SATGLONASS:
    285           E_GLONASS_EPOCH_TIME(co->EpochTime[s])
    286             break;
    287         }
    288       E_SSR_UPDATE_INTERVAL(co->UpdateInterval)
     277          case CLOCKORBIT_SATGPS:
     278          case CLOCKORBIT_SATGALILEO:
     279          case CLOCKORBIT_SATQZSS:
     280          case CLOCKORBIT_SATSBAS:
     281          case CLOCKORBIT_SATBDS:
     282            E_GPS_EPOCH_TIME(co->EpochTime[s])
     283            break;
     284          case CLOCKORBIT_SATGLONASS:
     285            E_GLONASS_EPOCH_TIME(co->EpochTime[s])
     286            break;
     287        }
     288        E_SSR_UPDATE_INTERVAL(co->UpdateInterval)
    289289        E_MULTIPLE_MESSAGE_INDICATOR(moremessagesfollow ? 1 : 0)
    290290        E_SSR_IOD(co->SSRIOD)
     
    302302}
    303303
    304 size_t SsrCorrRtcmNew::MakeCodeBias(const struct CodeBias* b, CodeBiasType type,
     304size_t SsrCorrRtcmNew::MakeCodeBias(const struct CodeBias* cb, CodeBiasType type,
    305305  int moremessagesfollow, char* buffer, size_t size) {
    306306  unsigned int s, i, j;
     
    309309
    310310    for (s = 0; s < CLOCKORBIT_SATNUM; ++s) {
    311       if (b->NumberOfSat[s] && (type == CBTYPE_AUTO || type == corType[s][COBOFS_CBIAS])) {
     311      if (cb->NumberOfSat[s] && (type == CBTYPE_AUTO || type == corType[s][COBOFS_CBIAS])) {
    312312        INITBLOCK
    313313          E_RTCM_MESSAGE_NUMBER(corType[s][COBOFS_CBIAS])
    314314          switch (s) {
    315           case CLOCKORBIT_SATGPS:
    316           case CLOCKORBIT_SATGALILEO:
    317           case CLOCKORBIT_SATQZSS:
    318           case CLOCKORBIT_SATSBAS:
    319           case CLOCKORBIT_SATBDS:
    320             E_GPS_EPOCH_TIME(b->EpochTime[s])
     315            case CLOCKORBIT_SATGPS:
     316            case CLOCKORBIT_SATGALILEO:
     317            case CLOCKORBIT_SATQZSS:
     318            case CLOCKORBIT_SATSBAS:
     319            case CLOCKORBIT_SATBDS:
     320              E_GPS_EPOCH_TIME(cb->EpochTime[s])
    321321              break;
    322           case CLOCKORBIT_SATGLONASS:
    323             E_GLONASS_EPOCH_TIME(b->EpochTime[s])
     322            case CLOCKORBIT_SATGLONASS:
     323              E_GLONASS_EPOCH_TIME(cb->EpochTime[s])
    324324              break;
    325325          }
    326         E_SSR_UPDATE_INTERVAL(b->UpdateInterval)
     326          E_SSR_UPDATE_INTERVAL(cb->UpdateInterval)
    327327          E_MULTIPLE_MESSAGE_INDICATOR(moremessagesfollow ? 1 : 0)
    328           E_SSR_IOD(b->SSRIOD)
    329           E_SSR_PROVIDER_ID(b->SSRProviderID)
    330           E_SSR_SOLUTION_ID(b->SSRSolutionID)
    331           E_NO_OF_SATELLITES(b->NumberOfSat[s])
    332           for (i = satoffset[s]; i < satoffset[s] + b->NumberOfSat[s]; ++i) {
    333             E_GPS_SATELLITE_ID(b->Sat[i].ID)
    334               E_NO_OF_BIASES(b->Sat[i].NumberOfCodeBiases)
    335               for (j = 0; j < b->Sat[i].NumberOfCodeBiases; ++j) {
    336                 E_GNSS_SIGNAL_IDENTIFIER(b->Sat[i].Biases[j].Type)
    337                   E_CODE_BIAS(b->Sat[i].Biases[j].Bias)
    338               }
     328          E_SSR_IOD(cb->SSRIOD)
     329          E_SSR_PROVIDER_ID(cb->SSRProviderID)
     330          E_SSR_SOLUTION_ID(cb->SSRSolutionID)
     331          E_NO_OF_SATELLITES(cb->NumberOfSat[s])
     332          for (i = satoffset[s]; i < satoffset[s] + cb->NumberOfSat[s]; ++i) {
     333            E_GPS_SATELLITE_ID(cb->Sat[i].ID)
     334            E_NO_OF_BIASES(cb->Sat[i].NumberOfCodeBiases)
     335            for (j = 0; j < cb->Sat[i].NumberOfCodeBiases; ++j) {
     336              E_GNSS_SIGNAL_IDENTIFIER(cb->Sat[i].Biases[j].Type)
     337              E_CODE_BIAS(cb->Sat[i].Biases[j].Bias)
     338            }
    339339          }
    340340        ENDBLOCK
     
    344344}
    345345
    346 size_t SsrCorrRtcmNew::MakePhaseBias(const struct PhaseBias* b, PhaseBiasType type,
     346size_t SsrCorrRtcmNew::MakePhaseBias(const struct PhaseBias* pb, PhaseBiasType type,
    347347  int moremessagesfollow, char* buffer, size_t size) {
    348348  unsigned int s, i, j;
     
    352352    for (s = 0; s < CLOCKORBIT_SATNUM; ++s) {
    353353      /* Satellite Phase Bias Message */
    354       if (b->NumberOfSat[s] && (type == PBTYPE_AUTO || type == corType[s][COBOFS_PBIAS])) {
     354      if (pb->NumberOfSat[s] && (type == PBTYPE_AUTO || type == corType[s][COBOFS_PBIAS])) {
    355355        INITBLOCK
    356356          E_RTCM_MESSAGE_NUMBER(corType[s][COBOFS_PBIAS])
    357357          switch (s) {
    358           case CLOCKORBIT_SATGPS:
    359           case CLOCKORBIT_SATGALILEO:
    360           case CLOCKORBIT_SATQZSS:
    361           case CLOCKORBIT_SATSBAS:
    362           case CLOCKORBIT_SATBDS:
    363             E_GPS_EPOCH_TIME(b->EpochTime[s])
     358            case CLOCKORBIT_SATGPS:
     359            case CLOCKORBIT_SATGALILEO:
     360            case CLOCKORBIT_SATQZSS:
     361            case CLOCKORBIT_SATSBAS:
     362            case CLOCKORBIT_SATBDS:
     363              E_GPS_EPOCH_TIME(pb->EpochTime[s])
    364364              break;
    365           case CLOCKORBIT_SATGLONASS:
    366             E_GLONASS_EPOCH_TIME(b->EpochTime[s])
     365            case CLOCKORBIT_SATGLONASS:
     366              E_GLONASS_EPOCH_TIME(pb->EpochTime[s])
    367367              break;
    368368          }
    369         E_SSR_UPDATE_INTERVAL(b->UpdateInterval)
     369          E_SSR_UPDATE_INTERVAL(pb->UpdateInterval)
    370370          E_MULTIPLE_MESSAGE_INDICATOR(moremessagesfollow ? 1 : 0)
    371           E_SSR_IOD(b->SSRIOD)
    372           E_SSR_PROVIDER_ID(b->SSRProviderID)
    373           E_SSR_SOLUTION_ID(b->SSRSolutionID)
    374           E_YAW_INFO_INDICATOR(b->SatelliteYawInformationIndicator)
    375           E_EXTENDED_PHASE_BIAS_ID(b->ExtendedPhaseBiasPropertyID)
    376           E_NO_OF_SATELLITES(b->NumberOfSat[s])
    377           for (i = satoffset[s]; i < satoffset[s] + b->NumberOfSat[s]; ++i) {
    378             E_GPS_SATELLITE_ID(b->Sat[i].ID)
    379               E_NO_OF_BIASES(b->Sat[i].NumberOfPhaseBiases)
    380               if (b->SatelliteYawInformationIndicator) {
    381                 E_YAW_ANGLE(b->Sat[i].YawAngle)
    382                   E_YAW_RATE(b->Sat[i].YawRate)
    383               }
    384             for (j = 0; j < b->Sat[i].NumberOfPhaseBiases; ++j) {
    385               E_GNSS_SIGNAL_IDENTIFIER(b->Sat[i].Biases[j].Type)
    386                 E_INTEGER_INDICATOR(b->Sat[i].Biases[j].IntegerIndicator ? 1 : 0)
    387                 E_DISCONTINUITY_COUNTER(b->Sat[i].Biases[j].DiscontinuityCounter)
    388                 E_PHASE_BIAS_CORRECTION(b->Sat[i].Biases[j].Bias)
     371          E_SSR_IOD(pb->SSRIOD)
     372          E_SSR_PROVIDER_ID(pb->SSRProviderID)
     373          E_SSR_SOLUTION_ID(pb->SSRSolutionID)
     374          E_YAW_INFO_INDICATOR(pb->SatelliteYawInformationIndicator)
     375          E_EXTENDED_PHASE_BIAS_ID(pb->ExtendedPhaseBiasPropertyID)
     376          E_NO_OF_SATELLITES(pb->NumberOfSat[s])
     377          for (i = satoffset[s]; i < satoffset[s] + pb->NumberOfSat[s]; ++i) {
     378            E_GPS_SATELLITE_ID(pb->Sat[i].ID)
     379            E_NO_OF_BIASES(pb->Sat[i].NumberOfPhaseBiases)
     380            if (pb->SatelliteYawInformationIndicator) {
     381              E_YAW_ANGLE(pb->Sat[i].YawAngle)
     382              E_YAW_RATE(pb->Sat[i].YawRate)
     383            }
     384            for (j = 0; j < pb->Sat[i].NumberOfPhaseBiases; ++j) {
     385              E_GNSS_SIGNAL_IDENTIFIER(pb->Sat[i].Biases[j].Type)
     386              E_INTEGER_INDICATOR(pb->Sat[i].Biases[j].IntegerIndicator ? 1 : 0)
     387              E_DISCONTINUITY_COUNTER(pb->Sat[i].Biases[j].DiscontinuityCounter)
     388              E_PHASE_BIAS_CORRECTION(pb->Sat[i].Biases[j].Bias)
    389389            }
    390390          }
     
    396396         Extended Satellite Phase Bias Message shall be sent BEFORE the corresponding
    397397         Satellite Phase Bias Message VICE VERSA??*/
    398       if (b->NumberOfSat[s] && (type == PBEXTTYPE_AUTO || type == corType[s][COBOFS_PBEXT])) {
     398      if (pb->NumberOfSat[s] && (type == PBEXTTYPE_AUTO || type == corType[s][COBOFS_PBEXT])) {
    399399        INITBLOCK
    400400          E_RTCM_MESSAGE_NUMBER(corType[s][COBOFS_PBEXT])
    401401          switch (s) {
    402           case CLOCKORBIT_SATGPS:
    403           case CLOCKORBIT_SATGALILEO:
    404           case CLOCKORBIT_SATQZSS:
    405           case CLOCKORBIT_SATSBAS:
    406           case CLOCKORBIT_SATBDS:
    407             E_GPS_EPOCH_TIME(b->EpochTime[s])
     402            case CLOCKORBIT_SATGPS:
     403            case CLOCKORBIT_SATGALILEO:
     404            case CLOCKORBIT_SATQZSS:
     405            case CLOCKORBIT_SATSBAS:
     406            case CLOCKORBIT_SATBDS:
     407              E_GPS_EPOCH_TIME(pb->EpochTime[s])
    408408              break;
    409           case CLOCKORBIT_SATGLONASS:
    410             E_GLONASS_EPOCH_TIME(b->EpochTime[s])
     409            case CLOCKORBIT_SATGLONASS:
     410              E_GLONASS_EPOCH_TIME(pb->EpochTime[s])
    411411              break;
    412412          }
    413         E_SSR_IOD(b->SSRIOD)
    414           E_SSR_PROVIDER_ID(b->SSRProviderID)
    415           E_SSR_SOLUTION_ID(b->SSRSolutionID)
    416           E_EXTENDED_PHASE_BIAS_ID(b->ExtendedPhaseBiasPropertyID)
    417           for (i = satoffset[s]; i < satoffset[s] + b->NumberOfSat[s]; ++i) {
    418             for (j = 0; j < b->Sat[i].NumberOfPhaseBiases; ++j) {
    419               E_WIDE_LANE_INDICATOR(b->Sat[i].Biases[j].WidelaneGroupIndicator)
     413          E_SSR_IOD(pb->SSRIOD)
     414          E_SSR_PROVIDER_ID(pb->SSRProviderID)
     415          E_SSR_SOLUTION_ID(pb->SSRSolutionID)
     416          E_EXTENDED_PHASE_BIAS_ID(pb->ExtendedPhaseBiasPropertyID)
     417          for (i = satoffset[s]; i < satoffset[s] + pb->NumberOfSat[s]; ++i) {
     418            for (j = 0; j < pb->Sat[i].NumberOfPhaseBiases; ++j) {
     419              E_WIDE_LANE_INDICATOR(pb->Sat[i].Biases[j].WidelaneGroupIndicator)
    420420            }
    421421          }
     
    431431  STARTDATA
    432432    INITBLOCK
    433     E_RTCM_MESSAGE_NUMBER(VTEC_BASE)
    434     E_GPS_EPOCH_TIME(v->EpochTime)
    435     E_SSR_UPDATE_INTERVAL(v->UpdateInterval)
    436     E_MULTIPLE_MESSAGE_INDICATOR(moremessagesfollow ? 1 : 0)
    437     E_SSR_IOD(v->SSRIOD)
    438     E_SSR_PROVIDER_ID(v->SSRProviderID)
    439     E_SSR_SOLUTION_ID(v->SSRSolutionID)
    440     E_VTEC_QUALITY_INDICATOR(v->Quality)
    441     E_NO_IONO_LAYERS(v->NumLayers)
    442     for (l = 0; l < v->NumLayers; ++l) {
    443       E_IONO_HEIGHT(v->Layers[l].Height)
     433      E_RTCM_MESSAGE_NUMBER(VTEC_BASE)
     434      E_GPS_EPOCH_TIME(v->EpochTime)
     435      E_SSR_UPDATE_INTERVAL(v->UpdateInterval)
     436      E_MULTIPLE_MESSAGE_INDICATOR(moremessagesfollow ? 1 : 0)
     437      E_SSR_IOD(v->SSRIOD)
     438      E_SSR_PROVIDER_ID(v->SSRProviderID)
     439      E_SSR_SOLUTION_ID(v->SSRSolutionID)
     440      E_VTEC_QUALITY_INDICATOR(v->Quality)
     441      E_NO_IONO_LAYERS(v->NumLayers)
     442      for (l = 0; l < v->NumLayers; ++l) {
     443        E_IONO_HEIGHT(v->Layers[l].Height)
    444444        E_IONO_DEGREE(v->Layers[l].Degree)
    445445        E_IONO_ORDER(v->Layers[l].Order)
     
    459459}
    460460
    461 enum GCOB_RETURN SsrCorrRtcmNew::GetSSR(struct ClockOrbit* co, struct CodeBias* b, struct VTEC* v,
    462   struct PhaseBias* pb, struct MetaData* md, const char* buffer, size_t size, int* bytesused) {
     461size_t SsrCorrRtcmNew::MakeMetaData(const struct MetaData* md, char* buffer, size_t size) {
     462  unsigned int i;
     463
     464  STARTDATA
     465    INITBLOCK
     466      E_RTCM_MESSAGE_NUMBER(METADATATYPE_BASE)
     467      E_SSR_IOD(md->SSRIOD)
     468      E_SSR_PROVIDER_ID(md->SSRProviderID)
     469      E_SSR_SOLUTION_ID(md->SSRSolutionID)
     470      E_NUMBER_OF_SSR_MODEL_CORRECTION_ENTRIES(md->NumEntries)
     471      for (i = 0; i < md->NumEntries; i++) {
     472        E_MODEL_CORRECTION_TYPE_INDICATOR(md->Entries[i].TypeIndicator)
     473        E_ADDITIONAL_MODEL_PARAMETER_INDICATOR(md->Entries[i].ApplicationIndicator)
     474        E_NON_DEFAULT_MODEL_CORRECTION_INDICATOR(md->Entries[i].nonDefaultIndicator)
     475        if (md->Entries[i].nonDefaultIndicator) {
     476          E_NON_DEFAULT_MODEL_CORRECTION_IDENTIFIER(md->Entries[i].nonDefaultIdentifier)
     477        }
     478        E_MODEL_CORRECTION_DATA_IOD_INDICATOR(md->Entries[i].DataIODIndicator)     
     479        if (md->Entries[i].DataIODIndicator) {
     480          E_MODEL_CORRECTION_DATA_IOD(md->Entries[i].DataIOD)     
     481        }
     482        if (md->Entries[i].nonDefaultIndicator) {
     483          E_ADDITIONAL_MODEL_PARAMETER_INDICATOR(md->Entries[i].additionalParameterIndicator)
     484        }
     485        if (md->Entries[i].additionalParameterIndicator) {
     486          E_NUMBER_OF_ADDITIONAL_MODEL_PARAMETER_BITS(md->Entries[i].additionalParameterNumBits)   
     487        }
     488        if (md->Entries[i].nonDefaultIndicator &&
     489            md->Entries[i].additionalParameterIndicator) {
     490          E_ADDITIONAL_MODEL_PARAMETER_DATA(md->Entries[i].additionalParameterData, md->Entries[i].additionalParameterNumBits)       
     491      }
     492    }
     493  ENDBLOCK
     494    return ressize;
     495}
     496
     497enum GCOB_RETURN SsrCorrRtcmNew::GetSSR(struct ClockOrbit* co, struct CodeBias* cb, struct VTEC* v,
     498  struct PhaseBias* pb, struct MetaData* md, struct Antenna* a, const char* buffer, size_t size, int* bytesused) {
    463499  int mmi = 0, h, rs;
    464500  unsigned int type, pos, i, j, s, nums, id;
     
    597633      pb->NumberOfSat[s] = 0;
    598634      switch (s) {
    599       case CLOCKORBIT_SATGPS:
    600       case CLOCKORBIT_SATGALILEO:
    601       case CLOCKORBIT_SATQZSS:
    602       case CLOCKORBIT_SATSBAS:
    603       case CLOCKORBIT_SATBDS:
    604         D_GPS_EPOCH_TIME(pb->EpochTime[s])
    605           break;
    606       case CLOCKORBIT_SATGLONASS:
    607         D_GLONASS_EPOCH_TIME(pb->EpochTime[s])
     635        case CLOCKORBIT_SATGPS:
     636        case CLOCKORBIT_SATGALILEO:
     637        case CLOCKORBIT_SATQZSS:
     638        case CLOCKORBIT_SATSBAS:
     639        case CLOCKORBIT_SATBDS:
     640          D_GPS_EPOCH_TIME(pb->EpochTime[s])
     641          break;
     642        case CLOCKORBIT_SATGLONASS:
     643          D_GLONASS_EPOCH_TIME(pb->EpochTime[s])
    608644          break;
    609645      }
    610646      D_SSR_UPDATE_INTERVAL(pb->UpdateInterval)
    611         D_MULTIPLE_MESSAGE_INDICATOR(mmi)
    612         D_SSR_IOD(pb->SSRIOD)
    613         D_SSR_PROVIDER_ID(pb->SSRProviderID)
    614         D_SSR_SOLUTION_ID(pb->SSRSolutionID)
    615         D_YAW_INFO_INDICATOR(pb->SatelliteYawInformationIndicator)
    616         D_EXTENDED_PHASE_BIAS_ID(pb->ExtendedPhaseBiasPropertyID)
    617         D_NO_OF_SATELLITES(nums)
    618 #ifdef BNC_DEBUG_SSR
    619         fprintf(stderr, "epochTime %d ui %d mmi %d sats %d/%d ssrIod %d providerId %d solId %d yawInd %d extpbInd %d\n",
     647      D_MULTIPLE_MESSAGE_INDICATOR(mmi)
     648      D_SSR_IOD(pb->SSRIOD)
     649      D_SSR_PROVIDER_ID(pb->SSRProviderID)
     650      D_SSR_SOLUTION_ID(pb->SSRSolutionID)
     651      D_YAW_INFO_INDICATOR(pb->SatelliteYawInformationIndicator)
     652      D_EXTENDED_PHASE_BIAS_ID(pb->ExtendedPhaseBiasPropertyID)
     653      D_NO_OF_SATELLITES(nums)
     654#ifdef BNC_DEBUG_SSR
     655      fprintf(stderr, "epochTime %d ui %d mmi %d sats %d/%d ssrIod %d providerId %d solId %d yawInd %d extpbInd %d\n",
    620656        pb->EpochTime[s], pb->UpdateInterval, mmi, pb->NumberOfSat[s], nums,
    621657        pb->SSRIOD, pb->SSRProviderID, pb->SSRSolutionID,
     
    625661      for (i = 0; i < nums; ++i) {
    626662        D_GPS_SATELLITE_ID(id)
    627           for (pos = satoffset[s];
     663        for (pos = satoffset[s];
    628664          pos < satoffset[s] + pb->NumberOfSat[s] && pb->Sat[pos].ID != id;
    629665          ++pos)
     
    635671        pb->Sat[pos].ID = id;
    636672        D_NO_OF_BIASES(pb->Sat[pos].NumberOfPhaseBiases)
    637           if (pb->SatelliteYawInformationIndicator) {
    638             D_YAW_ANGLE(pb->Sat[pos].YawAngle)
    639               D_YAW_RATE(pb->Sat[pos].YawRate)
    640           }
     673        if (pb->SatelliteYawInformationIndicator) {
     674          D_YAW_ANGLE(pb->Sat[pos].YawAngle)
     675          D_YAW_RATE(pb->Sat[pos].YawRate)
     676        }
    641677#ifdef BNC_DEBUG_SSR
    642678        fprintf(stderr, "id %2d #%d y %10.6f yr %10.6f ",
     
    647683        for (j = 0; j < pb->Sat[pos].NumberOfPhaseBiases; ++j) {
    648684          D_GNSS_SIGNAL_IDENTIFIER(pb->Sat[pos].Biases[j].Type)
    649             D_INTEGER_INDICATOR(pb->Sat[pos].Biases[j].IntegerIndicator)
    650             D_DISCONTINUITY_COUNTER(pb->Sat[pos].Biases[j].DiscontinuityCounter)
    651             D_PHASE_BIAS_CORRECTION(pb->Sat[pos].Biases[j].Bias)
    652 #ifdef BNC_DEBUG_SSR
    653             fprintf(stderr, "t %02d int %02d disc %d b %8.4f ",
     685          D_INTEGER_INDICATOR(pb->Sat[pos].Biases[j].IntegerIndicator)
     686          D_DISCONTINUITY_COUNTER(pb->Sat[pos].Biases[j].DiscontinuityCounter)
     687          D_PHASE_BIAS_CORRECTION(pb->Sat[pos].Biases[j].Bias)
     688#ifdef BNC_DEBUG_SSR
     689          fprintf(stderr, "t %02d int %02d disc %d b %8.4f ",
    654690            pb->Sat[pos].Biases[j].Type,
    655691            pb->Sat[pos].Biases[j].IntegerIndicator,
     
    669705      pb->messageExtType = type;
    670706      switch (s) {
    671       case CLOCKORBIT_SATGPS:
    672       case CLOCKORBIT_SATGALILEO:
    673       case CLOCKORBIT_SATQZSS:
    674       case CLOCKORBIT_SATSBAS:
    675       case CLOCKORBIT_SATBDS:
    676         D_GPS_EPOCH_TIME(EpochTime)
    677           break;
    678       case CLOCKORBIT_SATGLONASS:
    679         D_GLONASS_EPOCH_TIME(EpochTime)
     707        case CLOCKORBIT_SATGPS:
     708        case CLOCKORBIT_SATGALILEO:
     709        case CLOCKORBIT_SATQZSS:
     710        case CLOCKORBIT_SATSBAS:
     711        case CLOCKORBIT_SATBDS:
     712          D_GPS_EPOCH_TIME(EpochTime)
     713          break;
     714        case CLOCKORBIT_SATGLONASS:
     715          D_GLONASS_EPOCH_TIME(EpochTime)
    680716          break;
    681717      }
    682718      D_SSR_IOD(SSRIOD)
    683         D_SSR_PROVIDER_ID(SSRProviderID)
    684         D_SSR_SOLUTION_ID(SSRSolutionID)
    685         D_EXTENDED_PHASE_BIAS_ID(ExtendedPhaseBiasPropertyID)
    686 #ifdef BNC_DEBUG_SSR
    687         fprintf(stderr, "epochTime %d/%d ssrIod %d/%d  providerId %d/%d  solId %d/%d  extpbInd %d/%d \n",
     719      D_SSR_PROVIDER_ID(SSRProviderID)
     720      D_SSR_SOLUTION_ID(SSRSolutionID)
     721      D_EXTENDED_PHASE_BIAS_ID(ExtendedPhaseBiasPropertyID)
     722#ifdef BNC_DEBUG_SSR
     723      fprintf(stderr, "epochTime %d/%d ssrIod %d/%d  providerId %d/%d  solId %d/%d  extpbInd %d/%d \n",
    688724        EpochTime, pb->EpochTime[s],
    689725        SSRIOD, pb->SSRIOD,
     
    708744            D_WIDE_LANE_INDICATOR(pb->Sat[pos].Biases[j].WidelaneGroupIndicator)
    709745#ifdef BNC_DEBUG_SSR
    710               fprintf(stderr, "t %02d wl %d ",
     746          fprintf(stderr, "t %02d wl %d ",
    711747              pb->Sat[pos].Biases[j].Type,
    712748              pb->Sat[pos].Biases[j].WidelaneGroupIndicator);
     
    724760      co->messageType = type;
    725761      switch (s) {
    726       case CLOCKORBIT_SATGPS:
    727       case CLOCKORBIT_SATGALILEO:
    728       case CLOCKORBIT_SATQZSS:
    729       case CLOCKORBIT_SATSBAS:
    730       case CLOCKORBIT_SATBDS:
    731         D_GPS_EPOCH_TIME_CHECK(co->EpochTime[s], co->NumberOfSat[s])
    732           break;
    733       case CLOCKORBIT_SATGLONASS:
    734         D_GLONASS_EPOCH_TIME_CHECK(co->EpochTime[s], co->NumberOfSat[s])
     762        case CLOCKORBIT_SATGPS:
     763        case CLOCKORBIT_SATGALILEO:
     764        case CLOCKORBIT_SATQZSS:
     765        case CLOCKORBIT_SATSBAS:
     766        case CLOCKORBIT_SATBDS:
     767          D_GPS_EPOCH_TIME_CHECK(co->EpochTime[s], co->NumberOfSat[s])
     768          break;
     769        case CLOCKORBIT_SATGLONASS:
     770          D_GLONASS_EPOCH_TIME_CHECK(co->EpochTime[s], co->NumberOfSat[s])
    735771          break;
    736772      }
    737773      D_SSR_UPDATE_INTERVAL(co->UpdateInterval)
    738         D_MULTIPLE_MESSAGE_INDICATOR(mmi)
    739         D_SATELLITE_REFERENCE_DATUM(co->SatRefDatum)
    740         D_SSR_IOD(co->SSRIOD)
    741         D_SSR_PROVIDER_ID(co->SSRProviderID)
    742         D_SSR_SOLUTION_ID(co->SSRSolutionID)
    743         D_NO_OF_SATELLITES(nums)
    744         co->Supplied[COBOFS_ORBIT] |= 1;
     774      D_MULTIPLE_MESSAGE_INDICATOR(mmi)
     775      D_SATELLITE_REFERENCE_DATUM(co->SatRefDatum)
     776      D_SSR_IOD(co->SSRIOD)
     777      D_SSR_PROVIDER_ID(co->SSRProviderID)
     778      D_SSR_SOLUTION_ID(co->SSRSolutionID)
     779      D_NO_OF_SATELLITES(nums)
     780      co->Supplied[COBOFS_ORBIT] |= 1;
    745781#ifdef BNC_DEBUG_SSR
    746782      fprintf(stderr, "epochTime %d ui %d mmi %d sats %d/%d rd %d ssrIod %d providerId %d solId %d\n",
     
    761797
    762798        switch (s) {
    763         case CLOCKORBIT_SATGPS:
    764         case CLOCKORBIT_SATQZSS:
    765           D_GPS_IODE(co->Sat[pos].IOD)
    766             break;
    767         case CLOCKORBIT_SATGLONASS:
    768           D_GLONASS_IOD(co->Sat[pos].IOD)
    769             break;
    770         case CLOCKORBIT_SATGALILEO:
    771           D_GALILEO_IOD(co->Sat[pos].IOD)
    772             break;
    773         case CLOCKORBIT_SATSBAS:
    774           D_SBAS_T0MOD(co->Sat[pos].toe)
     799          case CLOCKORBIT_SATGPS:
     800          case CLOCKORBIT_SATQZSS:
     801            D_GPS_IODE(co->Sat[pos].IOD)
     802          break;
     803          case CLOCKORBIT_SATGLONASS:
     804            D_GLONASS_IOD(co->Sat[pos].IOD)
     805            break;
     806          case CLOCKORBIT_SATGALILEO:
     807            D_GALILEO_IOD(co->Sat[pos].IOD)
     808            break;
     809          case CLOCKORBIT_SATSBAS:
     810            D_SBAS_T0MOD(co->Sat[pos].toe)
    775811            D_SBAS_IODCRC(co->Sat[pos].IOD)
    776812            break;
    777         case CLOCKORBIT_SATBDS:
    778           D_GPS_IODE(co->Sat[pos].IOD)
     813          case CLOCKORBIT_SATBDS:
     814            D_GPS_IODE(co->Sat[pos].IOD)
    779815            break;
    780816        }
    781817        D_DELTA_RADIAL(co->Sat[pos].Orbit.DeltaRadial)
    782           D_DELTA_ALONG_TRACK(co->Sat[pos].Orbit.DeltaAlongTrack)
    783           D_DELTA_CROSS_TRACK(co->Sat[pos].Orbit.DeltaCrossTrack)
    784           D_DOT_DELTA_RADIAL(co->Sat[pos].Orbit.DotDeltaRadial)
    785           D_DOT_DELTA_ALONG_TRACK(co->Sat[pos].Orbit.DotDeltaAlongTrack)
    786           D_DOT_DELTA_CROSS_TRACK(co->Sat[pos].Orbit.DotDeltaCrossTrack)
    787 #ifdef BNC_DEBUG_SSR
    788           fprintf(stderr, "id %2d iod %3d dr %8.4f da %8.4f dc %8.4f dr %8.3f da %8.3f dc %8.3f\n",
     818        D_DELTA_ALONG_TRACK(co->Sat[pos].Orbit.DeltaAlongTrack)
     819        D_DELTA_CROSS_TRACK(co->Sat[pos].Orbit.DeltaCrossTrack)
     820        D_DOT_DELTA_RADIAL(co->Sat[pos].Orbit.DotDeltaRadial)
     821        D_DOT_DELTA_ALONG_TRACK(co->Sat[pos].Orbit.DotDeltaAlongTrack)
     822        D_DOT_DELTA_CROSS_TRACK(co->Sat[pos].Orbit.DotDeltaCrossTrack)
     823#ifdef BNC_DEBUG_SSR
     824        fprintf(stderr, "id %2d iod %3d dr %8.4f da %8.4f dc %8.4f dr %8.3f da %8.3f dc %8.3f\n",
    789825          co->Sat[pos].ID, co->Sat[pos].IOD, co->Sat[pos].Orbit.DeltaRadial,
    790826          co->Sat[pos].Orbit.DeltaAlongTrack, co->Sat[pos].Orbit.DeltaCrossTrack,
     
    800836      co->messageType = type;
    801837      switch (s) {
    802       case CLOCKORBIT_SATGPS:
    803       case CLOCKORBIT_SATGALILEO:
    804       case CLOCKORBIT_SATQZSS:
    805       case CLOCKORBIT_SATSBAS:
    806       case CLOCKORBIT_SATBDS:
    807         D_GPS_EPOCH_TIME_CHECK(co->EpochTime[s], co->NumberOfSat[s])
    808           break;
    809       case CLOCKORBIT_SATGLONASS:
    810         D_GLONASS_EPOCH_TIME_CHECK(co->EpochTime[s], co->NumberOfSat[s])
     838        case CLOCKORBIT_SATGPS:
     839        case CLOCKORBIT_SATGALILEO:
     840        case CLOCKORBIT_SATQZSS:
     841        case CLOCKORBIT_SATSBAS:
     842        case CLOCKORBIT_SATBDS:
     843          D_GPS_EPOCH_TIME_CHECK(co->EpochTime[s], co->NumberOfSat[s])
     844          break;
     845        case CLOCKORBIT_SATGLONASS:
     846          D_GLONASS_EPOCH_TIME_CHECK(co->EpochTime[s], co->NumberOfSat[s])
    811847          break;
    812848      }
    813849      D_SSR_UPDATE_INTERVAL(co->UpdateInterval)
    814         D_MULTIPLE_MESSAGE_INDICATOR(mmi)
    815         D_SSR_IOD(co->SSRIOD)
    816         D_SSR_PROVIDER_ID(co->SSRProviderID)
    817         D_SSR_SOLUTION_ID(co->SSRSolutionID)
    818         D_NO_OF_SATELLITES(nums)
    819         co->Supplied[COBOFS_CLOCK] |= 1;
     850      D_MULTIPLE_MESSAGE_INDICATOR(mmi)
     851      D_SSR_IOD(co->SSRIOD)
     852      D_SSR_PROVIDER_ID(co->SSRProviderID)
     853      D_SSR_SOLUTION_ID(co->SSRSolutionID)
     854      D_NO_OF_SATELLITES(nums)
     855      co->Supplied[COBOFS_CLOCK] |= 1;
    820856#ifdef BNC_DEBUG_SSR
    821857      fprintf(stderr, "epochTime %d ui %d mmi %d sats %d/%d ssrIod %d providerId %d solId %d\n",
    822858        co->EpochTime[s], co->UpdateInterval, mmi, co->NumberOfSat[s], nums,
    823859        co->SSRIOD, co->SSRProviderID, co->SSRSolutionID);
     860#endif
     861      for (i = 0; i < nums; ++i) {
     862        D_GPS_SATELLITE_ID(id)
     863        for (pos = satoffset[s];
     864          pos < satoffset[s] + co->NumberOfSat[s] && co->Sat[pos].ID != id;
     865          ++pos)
     866            ;
     867        if (pos >= satoffset[s + 1])
     868          return GCOBR_DATAMISMATCH;
     869        else if (pos == co->NumberOfSat[s] + satoffset[s])
     870          ++co->NumberOfSat[s];
     871        co->Sat[pos].ID = id;
     872
     873        D_DELTA_CLOCK_C0(co->Sat[pos].Clock.DeltaA0)
     874        D_DELTA_CLOCK_C1(co->Sat[pos].Clock.DeltaA1)
     875        D_DELTA_CLOCK_C2(co->Sat[pos].Clock.DeltaA2)
     876#ifdef BNC_DEBUG_SSR
     877        fprintf(stderr, "id %2d c0 %8.3f c1 %8.3f c2 %8.3f\n",
     878          co->Sat[pos].ID, co->Sat[pos].Clock.DeltaA0, co->Sat[pos].Clock.DeltaA1,
     879          co->Sat[pos].Clock.DeltaA2);
     880#endif
     881      }
     882    }
     883    else if (kind == COBOFS_COMBINED) {
     884      if (!co)
     885        return GCOBR_NOCLOCKORBITPARAMETER;
     886      co->messageType = type;
     887      switch (s) {
     888        case CLOCKORBIT_SATGPS:
     889        case CLOCKORBIT_SATGALILEO:
     890        case CLOCKORBIT_SATQZSS:
     891        case CLOCKORBIT_SATSBAS:
     892        case CLOCKORBIT_SATBDS:
     893          D_GPS_EPOCH_TIME_CHECK(co->EpochTime[s], co->NumberOfSat[s])
     894          break;
     895        case CLOCKORBIT_SATGLONASS:
     896          D_GLONASS_EPOCH_TIME_CHECK(co->EpochTime[s], co->NumberOfSat[s])
     897          break;
     898      }
     899      D_SSR_UPDATE_INTERVAL(co->UpdateInterval)
     900      D_MULTIPLE_MESSAGE_INDICATOR(mmi)
     901      D_SATELLITE_REFERENCE_DATUM(co->SatRefDatum)
     902      D_SSR_IOD(co->SSRIOD)
     903      D_SSR_PROVIDER_ID(co->SSRProviderID)
     904      D_SSR_SOLUTION_ID(co->SSRSolutionID)
     905      D_NO_OF_SATELLITES(nums)
     906      co->Supplied[COBOFS_ORBIT] |= 1;
     907      co->Supplied[COBOFS_CLOCK] |= 1;
     908#ifdef BNC_DEBUG_SSR
     909      fprintf(stderr, "epochTime %d ui %d mmi %d sats %d/%d rd %d ssrIod %d providerId %d solId %d\n",
     910        co->EpochTime[s], co->UpdateInterval, mmi, co->NumberOfSat[s], nums,
     911        co->SatRefDatum, co->SSRIOD, co->SSRProviderID, co->SSRSolutionID);
    824912#endif
    825913      for (i = 0; i < nums; ++i) {
     
    835923        co->Sat[pos].ID = id;
    836924
     925        switch (s) {
     926          case CLOCKORBIT_SATGPS:
     927          case CLOCKORBIT_SATQZSS:
     928            D_GPS_IODE(co->Sat[pos].IOD)
     929            break;
     930          case CLOCKORBIT_SATGLONASS:
     931            D_GLONASS_IOD(co->Sat[pos].IOD)
     932            break;
     933          case CLOCKORBIT_SATGALILEO:
     934            D_GALILEO_IOD(co->Sat[pos].IOD)
     935            break;
     936          case CLOCKORBIT_SATSBAS:
     937            D_SBAS_T0MOD(co->Sat[pos].toe)
     938            D_SBAS_IODCRC(co->Sat[pos].IOD)
     939            break;
     940          case CLOCKORBIT_SATBDS:
     941            D_GPS_IODE(co->Sat[pos].IOD)
     942            break;
     943        }
     944        D_DELTA_RADIAL(co->Sat[pos].Orbit.DeltaRadial)
     945        D_DELTA_ALONG_TRACK(co->Sat[pos].Orbit.DeltaAlongTrack)
     946        D_DELTA_CROSS_TRACK(co->Sat[pos].Orbit.DeltaCrossTrack)
     947        D_DOT_DELTA_RADIAL(co->Sat[pos].Orbit.DotDeltaRadial)
     948        D_DOT_DELTA_ALONG_TRACK(co->Sat[pos].Orbit.DotDeltaAlongTrack)
     949        D_DOT_DELTA_CROSS_TRACK(co->Sat[pos].Orbit.DotDeltaCrossTrack)
    837950        D_DELTA_CLOCK_C0(co->Sat[pos].Clock.DeltaA0)
    838           D_DELTA_CLOCK_C1(co->Sat[pos].Clock.DeltaA1)
    839           D_DELTA_CLOCK_C2(co->Sat[pos].Clock.DeltaA2)
    840 #ifdef BNC_DEBUG_SSR
    841           fprintf(stderr, "id %2d c0 %8.3f c1 %8.3f c2 %8.3f\n",
    842           co->Sat[pos].ID, co->Sat[pos].Clock.DeltaA0, co->Sat[pos].Clock.DeltaA1,
    843           co->Sat[pos].Clock.DeltaA2);
    844 #endif
    845       }
    846     }
    847     else if (kind == COBOFS_COMBINED) {
    848       if (!co)
    849         return GCOBR_NOCLOCKORBITPARAMETER;
    850       co->messageType = type;
    851       switch (s) {
    852       case CLOCKORBIT_SATGPS:
    853       case CLOCKORBIT_SATGALILEO:
    854       case CLOCKORBIT_SATQZSS:
    855       case CLOCKORBIT_SATSBAS:
    856       case CLOCKORBIT_SATBDS:
    857         D_GPS_EPOCH_TIME_CHECK(co->EpochTime[s], co->NumberOfSat[s])
    858           break;
    859       case CLOCKORBIT_SATGLONASS:
    860         D_GLONASS_EPOCH_TIME_CHECK(co->EpochTime[s], co->NumberOfSat[s])
    861           break;
    862       }
    863       D_SSR_UPDATE_INTERVAL(co->UpdateInterval)
    864         D_MULTIPLE_MESSAGE_INDICATOR(mmi)
    865         D_SATELLITE_REFERENCE_DATUM(co->SatRefDatum)
    866         D_SSR_IOD(co->SSRIOD)
    867         D_SSR_PROVIDER_ID(co->SSRProviderID)
    868         D_SSR_SOLUTION_ID(co->SSRSolutionID)
    869         D_NO_OF_SATELLITES(nums)
    870         co->Supplied[COBOFS_ORBIT] |= 1;
    871       co->Supplied[COBOFS_CLOCK] |= 1;
    872 #ifdef BNC_DEBUG_SSR
    873       fprintf(stderr, "epochTime %d ui %d mmi %d sats %d/%d rd %d ssrIod %d providerId %d solId %d\n",
    874         co->EpochTime[s], co->UpdateInterval, mmi, co->NumberOfSat[s], nums,
    875         co->SatRefDatum, co->SSRIOD, co->SSRProviderID, co->SSRSolutionID);
    876 #endif
    877       for (i = 0; i < nums; ++i) {
    878         D_GPS_SATELLITE_ID(id)
    879           for (pos = satoffset[s];
    880           pos < satoffset[s] + co->NumberOfSat[s] && co->Sat[pos].ID != id;
    881           ++pos)
    882             ;
    883         if (pos >= satoffset[s + 1])
    884           return GCOBR_DATAMISMATCH;
    885         else if (pos == co->NumberOfSat[s] + satoffset[s])
    886           ++co->NumberOfSat[s];
    887         co->Sat[pos].ID = id;
    888 
    889         switch (s) {
    890         case CLOCKORBIT_SATGPS:
    891         case CLOCKORBIT_SATQZSS:
    892           D_GPS_IODE(co->Sat[pos].IOD)
    893             break;
    894         case CLOCKORBIT_SATGLONASS:
    895           D_GLONASS_IOD(co->Sat[pos].IOD)
    896             break;
    897         case CLOCKORBIT_SATGALILEO:
    898           D_GALILEO_IOD(co->Sat[pos].IOD)
    899             break;
    900         case CLOCKORBIT_SATSBAS:
    901           D_SBAS_T0MOD(co->Sat[pos].toe)
    902             D_SBAS_IODCRC(co->Sat[pos].IOD)
    903             break;
    904         case CLOCKORBIT_SATBDS:
    905           D_GPS_IODE(co->Sat[pos].IOD)
    906             break;
    907         }
    908         D_DELTA_RADIAL(co->Sat[pos].Orbit.DeltaRadial)
    909           D_DELTA_ALONG_TRACK(co->Sat[pos].Orbit.DeltaAlongTrack)
    910           D_DELTA_CROSS_TRACK(co->Sat[pos].Orbit.DeltaCrossTrack)
    911           D_DOT_DELTA_RADIAL(co->Sat[pos].Orbit.DotDeltaRadial)
    912           D_DOT_DELTA_ALONG_TRACK(co->Sat[pos].Orbit.DotDeltaAlongTrack)
    913           D_DOT_DELTA_CROSS_TRACK(co->Sat[pos].Orbit.DotDeltaCrossTrack)
    914           D_DELTA_CLOCK_C0(co->Sat[pos].Clock.DeltaA0)
    915           D_DELTA_CLOCK_C1(co->Sat[pos].Clock.DeltaA1)
    916           D_DELTA_CLOCK_C2(co->Sat[pos].Clock.DeltaA2)
    917 #ifdef BNC_DEBUG_SSR
    918           fprintf(stderr, "id %2d iod %3d dr %10.6f da %10.6f dc %10.6f dr %10.6f da %10.6f dc %10.6f  c0 %10.6f c1 %10.6f c2 %10.6f\n",
     951        D_DELTA_CLOCK_C1(co->Sat[pos].Clock.DeltaA1)
     952        D_DELTA_CLOCK_C2(co->Sat[pos].Clock.DeltaA2)
     953#ifdef BNC_DEBUG_SSR
     954        fprintf(stderr, "id %2d iod %3d dr %10.6f da %10.6f dc %10.6f dr %10.6f da %10.6f dc %10.6f  c0 %10.6f c1 %10.6f c2 %10.6f\n",
    919955          co->Sat[pos].ID, co->Sat[pos].IOD, co->Sat[pos].Orbit.DeltaRadial,
    920956          co->Sat[pos].Orbit.DeltaAlongTrack, co->Sat[pos].Orbit.DeltaCrossTrack,
     
    930966      co->messageType = type;
    931967      switch (s) {
    932       case CLOCKORBIT_SATGPS:
    933       case CLOCKORBIT_SATGALILEO:
    934       case CLOCKORBIT_SATQZSS:
    935       case CLOCKORBIT_SATSBAS:
    936       case CLOCKORBIT_SATBDS:
    937         D_GPS_EPOCH_TIME_CHECK(co->EpochTime[s], co->NumberOfSat[s])
    938           break;
    939       case CLOCKORBIT_SATGLONASS:
    940         D_GLONASS_EPOCH_TIME_CHECK(co->EpochTime[s], co->NumberOfSat[s])
     968        case CLOCKORBIT_SATGPS:
     969        case CLOCKORBIT_SATGALILEO:
     970        case CLOCKORBIT_SATQZSS:
     971        case CLOCKORBIT_SATSBAS:
     972        case CLOCKORBIT_SATBDS:
     973          D_GPS_EPOCH_TIME_CHECK(co->EpochTime[s], co->NumberOfSat[s])
     974          break;
     975        case CLOCKORBIT_SATGLONASS:
     976          D_GLONASS_EPOCH_TIME_CHECK(co->EpochTime[s], co->NumberOfSat[s])
    941977          break;
    942978      }
    943979      D_SSR_UPDATE_INTERVAL(co->UpdateInterval)
    944         D_MULTIPLE_MESSAGE_INDICATOR(mmi)
    945         D_SSR_IOD(co->SSRIOD)
    946         D_SSR_PROVIDER_ID(co->SSRProviderID)
    947         D_SSR_SOLUTION_ID(co->SSRSolutionID)
    948         D_NO_OF_SATELLITES(nums)
    949         co->Supplied[COBOFS_URA] |= 1;
     980      D_MULTIPLE_MESSAGE_INDICATOR(mmi)
     981      D_SSR_IOD(co->SSRIOD)
     982      D_SSR_PROVIDER_ID(co->SSRProviderID)
     983      D_SSR_SOLUTION_ID(co->SSRSolutionID)
     984      D_NO_OF_SATELLITES(nums)
     985      co->Supplied[COBOFS_URA] |= 1;
    950986#ifdef BNC_DEBUG_SSR
    951987      fprintf(stderr, "epochTime %d ui %d mmi %d sats %d/%d ssrIod %d providerId %d solId %d\n",
     
    955991      for (i = 0; i < nums; ++i) {
    956992        D_GPS_SATELLITE_ID(id)
    957           for (pos = satoffset[s];
     993        for (pos = satoffset[s];
    958994          pos < satoffset[s] + co->NumberOfSat[s] && co->Sat[pos].ID != id;
    959995          ++pos)
     
    9661002        D_SSR_URA(co->Sat[pos].UserRangeAccuracy)
    9671003#ifdef BNC_DEBUG_SSR
    968           fprintf(stderr, "id %2d ura %8.3f \n",
     1004        fprintf(stderr, "id %2d ura %8.3f \n",
    9691005          co->Sat[pos].ID, co->Sat[pos].UserRangeAccuracy);
    9701006#endif
     
    9761012      co->messageType = type;
    9771013      switch (s) {
    978       case CLOCKORBIT_SATGPS:/* Phase specific part of GNSS phase bias message */
    979       case CLOCKORBIT_SATGALILEO:
    980       case CLOCKORBIT_SATQZSS:
    981       case CLOCKORBIT_SATSBAS:
    982       case CLOCKORBIT_SATBDS:
    983         D_GPS_EPOCH_TIME_CHECK(co->EpochTime[s], co->NumberOfSat[s])
    984           break;
    985       case CLOCKORBIT_SATGLONASS:
    986         D_GLONASS_EPOCH_TIME_CHECK(co->EpochTime[s], co->NumberOfSat[s])
     1014        case CLOCKORBIT_SATGPS:/* Phase specific part of GNSS phase bias message */
     1015        case CLOCKORBIT_SATGALILEO:
     1016        case CLOCKORBIT_SATQZSS:
     1017        case CLOCKORBIT_SATSBAS:
     1018        case CLOCKORBIT_SATBDS:
     1019          D_GPS_EPOCH_TIME_CHECK(co->EpochTime[s], co->NumberOfSat[s])
     1020          break;
     1021        case CLOCKORBIT_SATGLONASS:
     1022          D_GLONASS_EPOCH_TIME_CHECK(co->EpochTime[s], co->NumberOfSat[s])
    9871023          break;
    9881024      }
    9891025      D_SSR_UPDATE_INTERVAL(co->UpdateInterval)
    990         D_MULTIPLE_MESSAGE_INDICATOR(mmi)
    991         D_SSR_IOD(co->SSRIOD)
    992         D_SSR_PROVIDER_ID(co->SSRProviderID)
    993         D_SSR_SOLUTION_ID(co->SSRSolutionID)
    994         D_NO_OF_SATELLITES(nums)
    995         co->Supplied[COBOFS_HR] |= 1;
     1026      D_MULTIPLE_MESSAGE_INDICATOR(mmi)
     1027      D_SSR_IOD(co->SSRIOD)
     1028      D_SSR_PROVIDER_ID(co->SSRProviderID)
     1029      D_SSR_SOLUTION_ID(co->SSRSolutionID)
     1030      D_NO_OF_SATELLITES(nums)
     1031      co->Supplied[COBOFS_HR] |= 1;
    9961032#ifdef BNC_DEBUG_SSR
    9971033      fprintf(stderr, "epochTime %d ui %d mmi %d sats %d/%d ssrIod %d providerId %d solId %d\n",
     
    10011037      for (i = 0; i < nums; ++i) {
    10021038        D_GPS_SATELLITE_ID(id)
    1003           for (pos = satoffset[s];
     1039        for (pos = satoffset[s];
    10041040          pos < satoffset[s] + co->NumberOfSat[s] && co->Sat[pos].ID != id;
    10051041          ++pos)
     
    10121048        D_HR_CLOCK_CORRECTION(co->Sat[pos].hrclock)
    10131049#ifdef BNC_DEBUG_SSR
    1014           fprintf(stderr, "id %2d hrClock %8.3f \n",
     1050        fprintf(stderr, "id %2d hrClock %8.3f \n",
    10151051          co->Sat[pos].ID, co->Sat[pos].hrclock);
    10161052#endif
     
    10181054    }
    10191055    else if (kind == COBOFS_CBIAS) {
    1020       if (!b)
     1056      if (!cb)
    10211057        return GCOBR_NOCODEBIASPARAMETER;
    1022       b->messageType = type;
     1058      cb->messageType = type;
    10231059      switch (s) {
    1024       case CLOCKORBIT_SATGPS:
    1025       case CLOCKORBIT_SATGALILEO:
    1026       case CLOCKORBIT_SATQZSS:
    1027       case CLOCKORBIT_SATSBAS:
    1028       case CLOCKORBIT_SATBDS:
    1029         D_GPS_EPOCH_TIME_CHECK(b->EpochTime[s], b->NumberOfSat[s])
    1030           break;
    1031       case CLOCKORBIT_SATGLONASS:
    1032         D_GLONASS_EPOCH_TIME_CHECK(b->EpochTime[s], b->NumberOfSat[s])
    1033           break;
    1034       }
    1035       D_SSR_UPDATE_INTERVAL(b->UpdateInterval)
    1036         D_MULTIPLE_MESSAGE_INDICATOR(mmi)
    1037         D_SSR_IOD(b->SSRIOD)
    1038         D_SSR_PROVIDER_ID(b->SSRProviderID)
    1039         D_SSR_SOLUTION_ID(b->SSRSolutionID)
    1040         D_NO_OF_SATELLITES(nums)
    1041 #ifdef BNC_DEBUG_SSR
    1042         fprintf(stderr, "epochTime %d ui %d mmi %d sats %d/%d ssrIod %d providerId %d solId %d\n",
    1043         b->EpochTime[s], b->UpdateInterval, mmi, b->NumberOfSat[s], nums,
    1044         b->SSRIOD, b->SSRProviderID, b->SSRSolutionID);
     1060        case CLOCKORBIT_SATGPS:
     1061        case CLOCKORBIT_SATGALILEO:
     1062        case CLOCKORBIT_SATQZSS:
     1063        case CLOCKORBIT_SATSBAS:
     1064        case CLOCKORBIT_SATBDS:
     1065          D_GPS_EPOCH_TIME_CHECK(cb->EpochTime[s], cb->NumberOfSat[s])
     1066          break;
     1067        case CLOCKORBIT_SATGLONASS:
     1068          D_GLONASS_EPOCH_TIME_CHECK(cb->EpochTime[s], cb->NumberOfSat[s])
     1069          break;
     1070      }
     1071      D_SSR_UPDATE_INTERVAL(cb->UpdateInterval)
     1072      D_MULTIPLE_MESSAGE_INDICATOR(mmi)
     1073      D_SSR_IOD(cb->SSRIOD)
     1074      D_SSR_PROVIDER_ID(cb->SSRProviderID)
     1075      D_SSR_SOLUTION_ID(cb->SSRSolutionID)
     1076      D_NO_OF_SATELLITES(nums)
     1077#ifdef BNC_DEBUG_SSR
     1078      fprintf(stderr, "epochTime %d ui %d mmi %d sats %d/%d ssrIod %d providerId %d solId %d\n",
     1079        cb->EpochTime[s], cb->UpdateInterval, mmi, cb->NumberOfSat[s], nums,
     1080        cb->SSRIOD, cb->SSRProviderID, cb->SSRSolutionID);
    10451081#endif
    10461082      for (i = 0; i < nums; ++i) {
    10471083        D_GPS_SATELLITE_ID(id)
    1048           for (pos = satoffset[s];
    1049           pos < satoffset[s] + b->NumberOfSat[s] && b->Sat[pos].ID != id;
     1084        for (pos = satoffset[s];
     1085          pos < satoffset[s] + cb->NumberOfSat[s] && cb->Sat[pos].ID != id;
    10501086          ++pos)
    10511087            ;
    10521088        if (pos >= satoffset[s + 1])
    10531089          return GCOBR_DATAMISMATCH;
    1054         else if (pos == b->NumberOfSat[s] + satoffset[s])
    1055           ++b->NumberOfSat[s];
    1056         b->Sat[pos].ID = id;
    1057         D_NO_OF_BIASES(b->Sat[pos].NumberOfCodeBiases)
     1090        else if (pos == cb->NumberOfSat[s] + satoffset[s])
     1091          ++cb->NumberOfSat[s];
     1092        cb->Sat[pos].ID = id;
     1093        D_NO_OF_BIASES(cb->Sat[pos].NumberOfCodeBiases)
    10581094#ifdef BNC_DEBUG_SSR
    10591095          fprintf(stderr, "id %2d #%d ",
    1060           b->Sat[pos].ID, b->Sat[pos].NumberOfCodeBiases);
    1061 #endif
    1062         for (j = 0; j < b->Sat[pos].NumberOfCodeBiases; ++j) {
    1063           D_GNSS_SIGNAL_IDENTIFIER(b->Sat[pos].Biases[j].Type)
    1064             D_CODE_BIAS(b->Sat[pos].Biases[j].Bias)
    1065 #ifdef BNC_DEBUG_SSR
    1066             fprintf(stderr, "t %02d b %8.2f ",
    1067             b->Sat[pos].Biases[j].Type, b->Sat[pos].Biases[j].Bias);
     1096          cb->Sat[pos].ID, cb->Sat[pos].NumberOfCodeBiases);
     1097#endif
     1098        for (j = 0; j < cb->Sat[pos].NumberOfCodeBiases; ++j) {
     1099          D_GNSS_SIGNAL_IDENTIFIER(cb->Sat[pos].Biases[j].Type)
     1100          D_CODE_BIAS(cb->Sat[pos].Biases[j].Bias)
     1101#ifdef BNC_DEBUG_SSR
     1102          fprintf(stderr, "t %02d b %8.2f ",
     1103            cb->Sat[pos].Biases[j].Type, cb->Sat[pos].Biases[j].Bias);
    10681104#endif
    10691105        }
  • trunk/BNC/src/RTCM3/clock_and_orbit/clock_orbit_rtcm_new.h

    r11004 r11031  
    278278  size_t MakePhaseBias(const struct PhaseBias *b, PhaseBiasType type, int moremessagesfollow, char *buffer, size_t size);
    279279  size_t MakeVTEC(const struct VTEC *v, int moremessagesfollow, char *buffer, size_t size);
    280   enum GCOB_RETURN GetSSR(struct ClockOrbit *co, struct CodeBias *b, struct VTEC *v,
    281                           struct PhaseBias *pb, struct MetaData *md,
     280  size_t MakeMetaData(const struct MetaData *md, char *buffer, size_t size);
     281  enum GCOB_RETURN GetSSR(struct ClockOrbit *co, struct CodeBias *cb, struct VTEC *v,
     282                          struct PhaseBias *pb, struct MetaData *md, struct Antenna* a,
    282283                          const char *buffer, size_t size, int *bytesused);
    283284 };
Note: See TracChangeset for help on using the changeset viewer.