Changeset 6432 in ntrip for trunk/BNC/src/bnccore.cpp


Ignore:
Timestamp:
Dec 25, 2014, 6:11:49 PM (9 years ago)
Author:
mervart
Message:
 
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/BNC/src/bnccore.cpp

    r6384 r6432  
    7979#endif
    8080
    81   // Lists of Ephemeris
    82   // ------------------
    83   for (int ii = PRN_GPS_START; ii <= PRN_GPS_END; ii++) {
    84     _gpsEph[ii-PRN_GPS_START] = 0;
    85   }
    86   for (int ii = PRN_QZSS_START; ii <= PRN_QZSS_END; ii++) {
    87     _qzssEph[ii-PRN_QZSS_START] = 0;
    88   }
    89   for (int ii = PRN_GLONASS_START; ii <= PRN_GLONASS_END; ii++) {
    90     _glonassEph[ii-PRN_GLONASS_START] = 0;
    91   }
    92   for (int ii = PRN_GALILEO_START; ii <= PRN_GALILEO_END; ii++) {
    93     _galileoEph[ii-PRN_GALILEO_START] = 0;
    94   }
    95   for (int ii = PRN_SBAS_START; ii <= PRN_SBAS_END; ii++) {
    96     _sbasEph[ii-PRN_SBAS_START] = 0;
    97   }
    98 
    9981  // Eph file(s)
    10082  // -----------
     
    132114  qRegisterMetaType< QVector<double> >("QVector<double>");
    133115  qRegisterMetaType<bncTime>("bncTime");
     116  qRegisterMetaType<t_ephGPS>("t_ephGPS");
     117  qRegisterMetaType<t_ephGlo>("t_ephGlo");
     118  qRegisterMetaType<t_ephGal>("t_ephGal");
     119  qRegisterMetaType<t_ephSBAS>("t_ephSBAS");
     120  qRegisterMetaType<t_ephCompass>("t_ephCompass");
    134121}
    135122
     
    148135    delete _ephStreamGlonass;
    149136    delete _ephFileGlonass;
    150   }
    151   for (int ii = PRN_GPS_START; ii <= PRN_GPS_END; ii++) {
    152     delete _gpsEph[ii-PRN_GPS_START];
    153   }
    154   for (int ii = PRN_QZSS_START; ii <= PRN_QZSS_END; ii++) {
    155     delete _qzssEph[ii-PRN_QZSS_START];
    156   }
    157   for (int ii = PRN_GLONASS_START; ii <= PRN_GLONASS_END; ii++) {
    158     delete _glonassEph[ii-PRN_GLONASS_START];
    159   }
    160   for (int ii = PRN_GALILEO_START; ii <= PRN_GALILEO_END; ii++) {
    161     delete _galileoEph[ii-PRN_GALILEO_START];
    162   }
    163   for (int ii = PRN_SBAS_START; ii <= PRN_SBAS_END; ii++) {
    164     delete _sbasEph[ii-PRN_SBAS_START];
    165137  }
    166138
     
    227199// New GPS Ephemeris
    228200////////////////////////////////////////////////////////////////////////////
    229 void t_bncCore::slotNewGPSEph(gpsephemeris* gpseph) {
     201void t_bncCore::slotNewGPSEph(t_ephGPS eph) {
    230202
    231203  QMutexLocker locker(&_mutex);
    232204
    233   gpsephemeris copy_gpseph = *gpseph;
    234   emit newEphGPS(copy_gpseph);
     205  emit newGPSEph(eph);
    235206
    236207  printEphHeader();
    237208
    238   gpsephemeris** ee = &_gpsEph[gpseph->satellite-1];
    239   if      (PRN_GPS_START <= gpseph->satellite && gpseph->satellite <= PRN_GPS_END) {
    240     ee = &_gpsEph[gpseph->satellite  - PRN_GPS_START];
    241   }
    242   else if (PRN_QZSS_START <= gpseph->satellite && gpseph->satellite <= PRN_QZSS_END) {
    243     ee = &_qzssEph[gpseph->satellite - PRN_QZSS_START];
    244   }
    245 
    246   if ( *ee != 0 && gpseph->GPSweek == (*ee)->GPSweek && gpseph->TOC == (*ee)->TOC ) {
    247     checkEphemeris(*ee, gpseph);
    248   }
    249 
    250   if ( *ee == 0                         ||
    251        gpseph->GPSweek > (*ee)->GPSweek ||
    252        (gpseph->GPSweek == (*ee)->GPSweek && gpseph->TOC > (*ee)->TOC) ) {
    253     delete *ee;
    254     *ee = gpseph;
    255     printGPSEph(gpseph, true);
     209  if (_ephUser.putNewEph(&eph) == success) {
     210    printEph(eph, true);
    256211  }
    257212  else {
    258     printGPSEph(gpseph, false);
    259     delete gpseph;
     213    printEph(eph, false);
    260214  }
    261215}
     
    263217// New Glonass Ephemeris
    264218////////////////////////////////////////////////////////////////////////////
    265 void t_bncCore::slotNewGlonassEph(glonassephemeris* glonasseph, const QString& staID) {
     219void t_bncCore::slotNewGlonassEph(t_ephGlo eph) {
    266220
    267221  QMutexLocker locker(&_mutex);
    268222
    269   // Check wrong Ephemerides
    270   // -----------------------
    271   if (glonasseph->x_pos == 0.0 &&
    272       glonasseph->y_pos == 0.0 &&
    273       glonasseph->z_pos == 0.0) {
    274     delete glonasseph;
    275     return;
    276   }
    277 
    278   glonassephemeris copy_glonasseph = *glonasseph;
    279   emit newEphGlonass(copy_glonasseph);
     223  emit newGlonassEph(eph);
    280224
    281225  printEphHeader();
    282226
    283   glonassephemeris** ee = &_glonassEph[glonasseph->almanac_number-1];
    284 
    285   int wwOld, towOld, wwNew, towNew;
    286   if (*ee != 0) {
    287     wwOld  = (*ee)->GPSWeek;
    288     towOld = (*ee)->GPSTOW;
    289     updatetime(&wwOld, &towOld, (*ee)->tb*1000, 0);  // Moscow -> GPS
    290 
    291     wwNew  = glonasseph->GPSWeek;
    292     towNew = glonasseph->GPSTOW;
    293     updatetime(&wwNew, &towNew, glonasseph->tb*1000, 0); // Moscow -> GPS
    294   }
    295 
    296   if ( *ee == 0      ||
    297        wwNew > wwOld ||
    298        (wwNew == wwOld && towNew > towOld) ) {
    299     delete *ee;
    300     *ee = glonasseph;
    301     printGlonassEph(glonasseph, true, staID);
     227  if (_ephUser.putNewEph(&eph) == success) {
     228    printEph(eph, true);
    302229  }
    303230  else {
    304     printGlonassEph(glonasseph, false, staID);
    305     delete glonasseph;
     231    printEph(eph, false);
    306232  }
    307233}
     
    309235// New Galileo Ephemeris
    310236////////////////////////////////////////////////////////////////////////////
    311 void t_bncCore::slotNewGalileoEph(galileoephemeris* galileoeph) {
     237void t_bncCore::slotNewGalileoEph(t_ephGal eph) {
    312238
    313239  QMutexLocker locker(&_mutex);
    314240
    315   galileoephemeris copy_galileoeph = *galileoeph;
    316   emit newEphGalileo(copy_galileoeph);
     241  emit newGalileoEph(eph);
    317242
    318243  printEphHeader();
    319244
    320   int galIndex = galileoeph->satellite;
    321   /* GIOVE */
    322   if(galIndex == 51) galIndex = 1;
    323   else if(galIndex == 52) galIndex = 16;
    324   if (galIndex < 0 || galIndex > PRN_GALILEO_END - PRN_GALILEO_START) {
    325     emit( newMessage("Wrong Galileo Satellite Number", true) );
    326     exit(1);
    327   }
    328 
    329   galileoephemeris** ee = &_galileoEph[galIndex];
    330 
    331   if ( *ee == 0                       ||
    332        galileoeph->Week > (*ee)->Week ||
    333        (galileoeph->Week == (*ee)->Week && galileoeph->TOC > (*ee)->TOC) ) {
    334     delete *ee;
    335     *ee = galileoeph;
    336     printGalileoEph(galileoeph, true);
     245  if (_ephUser.putNewEph(&eph) == success) {
     246    printEph(eph, true);
    337247  }
    338248  else {
    339     printGalileoEph(galileoeph, false);
    340     delete galileoeph;
    341   }
    342 }
     249    printEph(eph, false);
     250  }
     251}
     252
     253// New SBAS Ephemeris
     254////////////////////////////////////////////////////////////////////////////
     255void t_bncCore::slotNewSBASEph(t_ephSBAS eph) {
     256
     257  QMutexLocker locker(&_mutex);
     258
     259  emit newSBASEph(eph);
     260
     261  printEphHeader();
     262
     263  if (_ephUser.putNewEph(&eph) == success) {
     264    printEph(eph, true);
     265  }
     266  else {
     267    printEph(eph, false);
     268  }
     269}
     270
    343271
    344272// Print Header of the output File(s)
     
    393321    else {
    394322      _ephFileNameGPS = ephFileNameGPS;
    395     }
    396 
    397     for (int ii = PRN_GPS_START; ii <= PRN_GPS_END; ii++) {
    398       delete _gpsEph[ii-PRN_GPS_START];
    399       _gpsEph[ii-PRN_GPS_START] = 0;
    400     }
    401     for (int ii = PRN_QZSS_START; ii <= PRN_QZSS_END; ii++) {
    402       delete _qzssEph[ii-PRN_QZSS_START];
    403       _qzssEph[ii-PRN_QZSS_START] = 0;
    404     }
    405     for (int ii = PRN_GLONASS_START; ii <= PRN_GLONASS_END; ii++) {
    406       delete _glonassEph[ii-PRN_GLONASS_START];
    407       _glonassEph[ii-PRN_GLONASS_START] = 0;
    408     }
    409     for (int ii = PRN_GALILEO_START; ii <= PRN_GALILEO_END; ii++) {
    410       delete _galileoEph[ii-PRN_GALILEO_START];
    411       _galileoEph[ii-PRN_GALILEO_START] = 0;
    412     }
    413     for (int ii = PRN_SBAS_START; ii <= PRN_SBAS_END; ii++) {
    414       delete _sbasEph[ii-PRN_SBAS_START];
    415       _sbasEph[ii-PRN_SBAS_START] = 0;
    416323    }
    417324
     
    523430}
    524431
    525 // Print One GPS Ephemeris
    526 ////////////////////////////////////////////////////////////////////////////
    527 void t_bncCore::printGPSEph(gpsephemeris* ep, bool printFile) {
    528 
    529   t_ephGPS eph;
    530   eph.set(ep);
     432// Print One Ephemeris
     433////////////////////////////////////////////////////////////////////////////
     434void t_bncCore::printEph(const t_eph& eph, bool printFile) {
    531435
    532436  QString strV2 = eph.toString(t_rnxNavFile::defaultRnxNavVersion2);
    533437  QString strV3 = eph.toString(t_rnxObsHeader::defaultRnxObsVersion3);
    534438
    535   printOutput(printFile, _ephStreamGPS, strV2, strV3);
    536 }
    537 
    538 // Print One Glonass Ephemeris
    539 ////////////////////////////////////////////////////////////////////////////
    540 void t_bncCore::printGlonassEph(glonassephemeris* ep, bool printFile, const QString& /* staID */) {
    541 
    542   t_ephGlo eph;
    543   eph.set(ep);
    544 
    545   QString strV2 = eph.toString(t_rnxNavFile::defaultRnxNavVersion2);
    546   QString strV3 = eph.toString(t_rnxObsHeader::defaultRnxObsVersion3);
    547 
    548   //// beg test Dirk
    549   // QString hlp = strV2;
    550   // cout << hlp.replace('\n', ' ').toAscii().data() << ' ' << staID.toAscii().data() << endl;
    551   //// end test Dirk
    552 
    553439  printOutput(printFile, _ephStreamGlonass, strV2, strV3);
    554 }
    555 
    556 // Print One Galileo Ephemeris
    557 ////////////////////////////////////////////////////////////////////////////
    558 void t_bncCore::printGalileoEph(galileoephemeris* ep, bool printFile) {
    559 
    560   t_ephGal eph;
    561   eph.set(ep);
    562 
    563   QString strV2 = eph.toString(t_rnxNavFile::defaultRnxNavVersion2);
    564   QString strV3 = eph.toString(t_rnxObsHeader::defaultRnxObsVersion3);
    565 
    566   printOutput(printFile, _ephStreamGalileo, strV2, strV3);
    567440}
    568441
     
    764637}
    765638
    766 // Check Ephemeris Consistency
    767 ////////////////////////////////////////////////////////////////////////////
    768 void t_bncCore::checkEphemeris(gpsephemeris* oldEph, gpsephemeris* newEph) {
    769   if (oldEph->clock_bias      != newEph->clock_bias      ||
    770       oldEph->clock_drift     != newEph->clock_drift     ||
    771       oldEph->clock_driftrate != newEph->clock_driftrate) {
    772     QString msg = currentDateAndTimeGPS().toString(Qt::ISODate) +
    773                   QString(" %1 EPH DIFFERS\n").arg(oldEph->satellite);
    774     messagePrivate(msg.toAscii());
    775   }
    776 }
    777 
    778 
    779639//
    780640////////////////////////////////////////////////////////////////////////////
     
    822682}
    823683
    824 // New SBAS Ephemeris
    825 ////////////////////////////////////////////////////////////////////////////
    826 void t_bncCore::slotNewSBASEph(sbasephemeris* sbaseph) {
    827   QMutexLocker locker(&_mutex);
    828 
    829   // Check wrong Ephemerides
    830   // -----------------------
    831   if (sbaseph->x_pos == 0.0 &&
    832       sbaseph->y_pos == 0.0 &&
    833       sbaseph->z_pos == 0.0) {
    834     delete sbaseph;
    835     return;
    836   }
    837 
    838   sbasephemeris copy_sbaseph = *sbaseph;
    839   emit newEphSBAS(copy_sbaseph);
    840 
    841   printEphHeader();
    842 
    843   sbasephemeris** ee = &_sbasEph[sbaseph->satellite - PRN_SBAS_START];
    844 
    845   bool replace = false;
    846   if (*ee != 0) {
    847     bncTime oldTime((*ee)->GPSweek_TOE,   double((*ee)->TOE));
    848     bncTime newTime(sbaseph->GPSweek_TOE, double(sbaseph->TOE));
    849     if (newTime > oldTime) {
    850       replace = true;
    851     }
    852   }
    853 
    854   if ( *ee == 0 || replace) {
    855     delete *ee;
    856     *ee = sbaseph;
    857     printSBASEph(sbaseph, true);
    858   }
    859   else {
    860     printSBASEph(sbaseph, false);
    861     delete sbaseph;
    862   }
    863 }
    864 
    865 // Print One SBAS Ephemeris
    866 ////////////////////////////////////////////////////////////////////////////
    867 void t_bncCore::printSBASEph(sbasephemeris* ep, bool printFile) {
    868 
    869   t_ephSBAS eph;
    870   eph.set(ep);
    871 
    872   QString strV2 = eph.toString(t_rnxNavFile::defaultRnxNavVersion2);
    873   QString strV3 = eph.toString(t_rnxObsHeader::defaultRnxObsVersion3);
    874 
    875   printOutput(printFile, _ephStreamSBAS, strV2, strV3);
    876 }
Note: See TracChangeset for help on using the changeset viewer.