Changeset 11141 in ntrip


Ignore:
Timestamp:
Oct 29, 2026, 11:07:21 PM (4 hours ago)
Author:
stuerze
Message:

roll-over handling for Galileo and BDS in RTCM3Decoder added

Location:
trunk/BNC
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/BNC/CHANGELOG.md

    r11140 r11141  
    2828- CHANGED: SSR QC: the IOD of the corrections is looked up among the last 30 data sets of a satellite instead of the last two (false 'IOD of no received broadcast ephemeris' for Galileo and GLONASS); new report lines for IODs received from the ephemeris stream(s) only later (with the largest delay) and for corrections referring to a broadcast ephemeris outside its validity
    2929- ADDED: General option 'Ephemeris streams' (key ephMount): combination, upload of corrections and SSR QC use the Broadcast Ephemeris of the given stream(s) only, e.g. BCEP00BKG0, not those contained in other streams (e.g. RTCM-SSR streams of ACs with ephemeris messages); PPP, RINEX navigation files and ephemeris upload not affected; empty: all streams as before
     30- FIXED: Galileo (RTCM 1045/1046) and BDS (1042) ephemerides: the week number (12 bit GST week, 13 bit BDT week) is completed with the current week, so the decoding continues after their roll-over (GST week 4095 in 2078, BDT week 8191 in 2163)
    3031- ADDED: Regression test suite ('tests'): example configurations and short raw captures replayed through BNC and compared with reference outputs
    3132- ADDED: macOS packaging script
  • trunk/BNC/src/RTCM3/RTCM3Decoder.cpp

    r11130 r11141  
    17421742    checkPrnRange(eph._prn);
    17431743
    1744     GETBITS(week, 12) //FIXME: roll-over after week 4095!!
     1744    GETBITS(week, 12) // GST week modulo 4096
    17451745    if (week < 0 || week > 4095) {
    17461746#ifdef BNC_DEBUG_BCE
    … …  
    17531753      return false;
    17541754    }
     1755    // full GST week (roll-over after GST week 4095, in 2078): the one closest
     1756    // to the current week; GST week 0 = GPS week 1024
     1757    int currentWeek;
     1758    double currentSec;
     1759    currentGPSWeeks(currentWeek, currentSec);
     1760    week += 4096 * int(floor((currentWeek - 1024 - week) / 4096.0 + 0.5));
    17551761    eph._TOEweek = week;
    17561762    GETBITS(eph._IODnav, 10)
    … …  
    17691775      return false;
    17701776    }
    1771     eph._TOC.set(1024 + eph._TOEweek, i);// Period #2 = + 1 x 1024 (has to be determined)
     1777    eph._TOC.set(1024 + eph._TOEweek, i); // GPS week = GST week + 1024
    17721778    GETFLOATSIGN(eph._clock_driftrate, 6, 1.0 / (double )(1 << 30) / (double )(1 << 29))
    17731779    GETFLOATSIGN(eph._clock_drift,    21, 1.0 / (double )(1 << 30) / (double )(1 << 16))
    … …  
    19011907      return false;
    19021908    }
     1909    // full BDT week (roll-over after BDT week 8191, in 2163): the one closest
     1910    // to the current week; BDT week 0 = GPS week 1356
     1911    int currentWeek;
     1912    double currentSec;
     1913    currentGPSWeeks(currentWeek, currentSec);
     1914    week += 8192 * int(floor((currentWeek - 1356 - week) / 8192.0 + 0.5));
    19031915    eph._BDTweek = week;
    19041916    GETBITS(i, 4)
Note: See TracChangeset for help on using the changeset viewer.