Changeset 6599 in ntrip for trunk/rtcm3torinex


Ignore:
Timestamp:
Feb 19, 2015, 6:18:47 PM (5 years ago)
Author:
stoecker
Message:

untested BDS support

Location:
trunk/rtcm3torinex/lib
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/rtcm3torinex/lib/rtcm3torinex.c

    r6552 r6599  
    447447        ge->TOW = 0.9999E9;
    448448        ret = 1019;
     449      }
     450      break;
     451    case RTCM3ID_BDS:
     452      {
     453        struct bdsephemeris *be;
     454        int sv, i, week, tow;
     455        be = &handle->ephemerisBDS;
     456        memset(be, 0, sizeof(*be));
     457
     458        GETBITS(sv, 6)
     459        be->satellite += PRN_BDS_START-1;
     460        GETBITS(be->BDSweek, 13)
     461        GETBITS(be->URAI, 4)
     462        GETFLOATSIGN(be->IDOT, 14, 1.0/(double)(1<<30)/(double)(1<<13))
     463        GETBITS(be->AODE, 5)
     464        GETBITS(be->TOC, 17)
     465        be->TOC <<= 3;
     466        GETFLOATSIGN(be->clock_driftrate, 11, 1.0/(double)(1<<30)/(double)(1<<30)/(double)(1<<6))
     467        GETFLOATSIGN(be->clock_drift, 22, 1.0/(double)(1<<30)/(double)(1<<20))
     468        GETFLOATSIGN(be->clock_bias, 24, 1.0/(double)(1<<30)/(double)(1<<3))
     469        GETBITS(be->AODC, 5)
     470        GETFLOATSIGN(be->Crs, 18, 1.0/(double)(1<<6))
     471        GETFLOATSIGN(be->Delta_n, 16, 1.0/(double)(1<<30)/(double)(1<<13))
     472        GETFLOATSIGN(be->M0, 32, 1.0/(double)(1<<30)/(double)(1<<1))
     473        GETFLOATSIGN(be->Cuc, 18, 1.0/(double)(1<<30)/(double)(1<<1))
     474        GETFLOAT(be->e, 32, 1.0/(double)(1<<30)/(double)(1<<3))
     475        GETFLOATSIGN(be->Cus, 18, 1.0/(double)(1<<30)/(double)(1<<1))
     476        GETFLOAT(be->sqrt_A, 32, 1.0/(double)(1<<19))
     477        GETBITS(be->TOE, 17)
     478        be->TOE <<= 3;
     479        GETFLOATSIGN(be->Cic, 18, 1.0/(double)(1<<30)/(double)(1<<1))
     480        GETFLOATSIGN(be->OMEGA0, 32, 1.0/(double)(1<<30)/(double)(1<<1))
     481        GETFLOATSIGN(be->Cis, 18, 1.0/(double)(1<<30)/(double)(1<<1))
     482        GETFLOATSIGN(be->i0, 32, 1.0/(double)(1<<30)/(double)(1<<1))
     483        GETFLOATSIGN(be->Crc, 18, 1.0/(double)(1<<8))
     484        GETFLOATSIGN(be->omega, 32, 1.0/(double)(1<<30)/(double)(1<<1))
     485        GETFLOATSIGN(be->OMEGADOT, 24, 1.0/(double)(1<<30)/(double)(1<<13))
     486        GETFLOATSIGN(be->TGD_B1_B3, 10, 0.000000001)
     487        GETFLOATSIGN(be->TGD_B2_B3, 10, 0.000000001)
     488        GETBITS(sv, 1)
     489        if(sv)
     490          be->flags |= BDSEPHF_SATH1;
     491        week = 1356+be->BDSweek;
     492        tow = 14+be->TOE;
     493        if(tow > 7*24*60*60) /* overflow due to leap */
     494        {
     495          ++week;
     496          tow -=  7*24*60*60;
     497        }
     498        i = (week - (int)handle->GPSWeek)*7*24*60*60
     499        + (tow - (int)handle->GPSTOW) - 2*60*60;
     500        if(i > 5*60*60 && i < 8*60*60)
     501        {
     502          handle->GPSTOW = tow;
     503          handle->GPSWeek = week;
     504        }
     505        ret = RTCM3ID_BDS;
    449506      }
    450507      break;
     
    12931350          GNSSENTRY_S1NDATA,GNSSDF2_LOCKLOSSL1,GPS_WAVELENGTH_L1,"1X"}
    12941351        };
    1295         struct CodeData compass[RTCM3_MSM_NUMSIG] =
     1352        struct CodeData bds[RTCM3_MSM_NUMSIG] =
    12961353        {
    12971354          {0,0,0,0,0,0,0},
    12981355          {GNSSENTRY_CB1DATA,GNSSENTRY_LB1DATA,GNSSENTRY_DB1DATA,
    1299           GNSSENTRY_SB1DATA,GNSSDF2_LOCKLOSSB1,COMPASS_WAVELENGTH_B1,"1I"},
     1356          GNSSENTRY_SB1DATA,GNSSDF2_LOCKLOSSB1,BDS_WAVELENGTH_B1,"1I"},
    13001357          {0,0,0,0,0,0,0},
    13011358          {0,0,0,0,0,0,0},
     
    13041361          {0,0,0,0,0,0,0},
    13051362          {GNSSENTRY_CB3DATA,GNSSENTRY_LB3DATA,GNSSENTRY_DB3DATA,
    1306           GNSSENTRY_SB3DATA,GNSSDF2_LOCKLOSSB3,COMPASS_WAVELENGTH_B3,"6I"},
     1363          GNSSENTRY_SB3DATA,GNSSDF2_LOCKLOSSB3,BDS_WAVELENGTH_B3,"6I"},
    13071364          {0,0,0,0,0,0,0},
    13081365          {0,0,0,0,0,0,0},
     
    13111368          {0,0,0,0,0,0,0},
    13121369          {GNSSENTRY_CB2DATA,GNSSENTRY_LB2DATA,GNSSENTRY_DB2DATA,
    1313           GNSSENTRY_SB2DATA,GNSSDF2_LOCKLOSSB2,COMPASS_WAVELENGTH_B2,"7I"},
     1370          GNSSENTRY_SB2DATA,GNSSDF2_LOCKLOSSB2,BDS_WAVELENGTH_B2,"7I"},
    13141371          {0,0,0,0,0,0,0},
    13151372          {0,0,0,0,0,0,0},
     
    13481405        if(type >= 1121)
    13491406        {
    1350           sys = RTCM3_MSM_COMPASS;
    1351           start = PRN_COMPASS_START;
     1407          sys = RTCM3_MSM_BDS;
     1408          start = PRN_BDS_START;
    13521409        }
    13531410        else if(type >= 1111)
     
    13771434        switch(sys)
    13781435        {
    1379         case RTCM3_MSM_COMPASS:
     1436        case RTCM3_MSM_BDS:
    13801437          GETBITS(i,30)
    13811438          i += 14000;
     
    15871644                wl = cd.wl;
    15881645                break;
    1589               case RTCM3_MSM_COMPASS:
    1590                 cd = compass[RTCM3_MSM_NUMSIG-j-1];
     1646              case RTCM3_MSM_BDS:
     1647                cd = bds[RTCM3_MSM_NUMSIG-j-1];
    15911648                wl = cd.wl;
    15921649                break;
     
    18481905  j = week*(7*24*60*60) + tow + 5*24*60*60;
    18491906  for(i = 1980; j >= (k = (365+longyear(i,0))*24*60*60); ++i)
     1907    j -= k;
     1908  c->year = i;
     1909  doy = 1+ (j / (24*60*60));
     1910  j %= (24*60*60);
     1911  c->hour = j / (60*60);
     1912  j %= (60*60);
     1913  c->minute = j / 60;
     1914  c->second = j % 60;
     1915  j = 0;
     1916  for(i = 1; j + (k = months[i] + longyear(c->year,i)) < doy; ++i)
     1917    j += k;
     1918  c->month = i;
     1919  c->day = doy - j;
     1920}
     1921
     1922void converttimebds(struct converttimeinfo *c, int week, int tow)
     1923{
     1924  int i, k, doy, j; /* temporary variables */
     1925  j = week*(7*24*60*60) + tow;
     1926  for(i = 2006; j >= (k = (365+longyear(i,0))*24*60*60); ++i)
    18501927    j -= k;
    18511928  c->year = i;
     
    21182195    }
    21192196
    2120     INITFLAGS(COMPASS)
    2121     CHECKFLAGSNEW(COMPASS, CB1,  C2I)
    2122     CHECKFLAGSNEW(COMPASS, LB1,  L2I)
    2123     CHECKFLAGSNEW(COMPASS, DB1,  D2I)
    2124     CHECKFLAGSNEW(COMPASS, SB1,  S2I)
    2125     CHECKFLAGSNEW(COMPASS, CB2,  C7I)
    2126     CHECKFLAGSNEW(COMPASS, LB2,  L7I)
    2127     CHECKFLAGSNEW(COMPASS, DB2,  D7I)
    2128     CHECKFLAGSNEW(COMPASS, SB2,  S7I)
    2129     CHECKFLAGSNEW(COMPASS, CB3,  C6I)
    2130     CHECKFLAGSNEW(COMPASS, LB3,  L6I)
    2131     CHECKFLAGSNEW(COMPASS, DB3,  D6I)
    2132     CHECKFLAGSNEW(COMPASS, SB3,  S6I)
     2197    INITFLAGS(BDS)
     2198    CHECKFLAGSNEW(BDS, CB1,  C2I)
     2199    CHECKFLAGSNEW(BDS, LB1,  L2I)
     2200    CHECKFLAGSNEW(BDS, DB1,  D2I)
     2201    CHECKFLAGSNEW(BDS, SB1,  S2I)
     2202    CHECKFLAGSNEW(BDS, CB2,  C7I)
     2203    CHECKFLAGSNEW(BDS, LB2,  L7I)
     2204    CHECKFLAGSNEW(BDS, DB2,  D7I)
     2205    CHECKFLAGSNEW(BDS, SB2,  S7I)
     2206    CHECKFLAGSNEW(BDS, CB3,  C6I)
     2207    CHECKFLAGSNEW(BDS, LB3,  L6I)
     2208    CHECKFLAGSNEW(BDS, DB3,  D6I)
     2209    CHECKFLAGSNEW(BDS, SB3,  S6I)
    21332210
    21342211    if(modified)
     
    21382215      i = 1+snprintf(buffer, buffersize,
    21392216      "C  %3d%-52.52s  SYS / # / OBS TYPES",
    2140       Parser->info[RTCM3_MSM_COMPASS].numtypes, Parser->fieldbufferCOMPASS);
    2141       if(Parser->info[RTCM3_MSM_COMPASS].numtypes>13)
     2217      Parser->info[RTCM3_MSM_BDS].numtypes, Parser->fieldbufferBDS);
     2218      if(Parser->info[RTCM3_MSM_BDS].numtypes>13)
    21422219      {
    21432220        i += snprintf(buffer+i-1, buffersize,
    2144         "\n      %-52.52s  SYS / # / OBS TYPES", Parser->fieldbufferCOMPASS+13*4);
     2221        "\n      %-52.52s  SYS / # / OBS TYPES", Parser->fieldbufferBDS+13*4);
    21452222      }
    21462223      buffer += i; buffersize -= i;
     
    25492626    while((r = RTCM3Parser(Parser)))
    25502627    {
    2551       if(r == 1020 || r == 1019 || r == 1044 || r == 1043)
     2628      if(r == 1020 || r == RTCM3ID_BDS || r == 1019 || r == 1044 || r == 1043)
    25522629      {
    25532630        FILE *file = 0;
     
    26602737            file = Parser->qzssfile;
    26612738          }
     2739          else if(r == RTCM3ID_BDS)
     2740          {
     2741            if(Parser->bdsephemeris)
     2742            {
     2743              if(!(Parser->bdsfile = fopen(Parser->bdsephemeris, "w")))
     2744              {
     2745                RTCM3Error("Could not open BDS ephemeris output file.\n");
     2746              }
     2747              else
     2748              {
     2749                char buffer[100];
     2750                fprintf(Parser->bdsfile,
     2751                "%9.2f%11sN: BDS NAV DATA%25sRINEX VERSION / TYPE\n", 2.1, "", "");
     2752                HandleRunBy(buffer, sizeof(buffer), 0, Parser->rinex3);
     2753                fprintf(Parser->bdsfile, "%s\n%60sEND OF HEADER\n", buffer, "");
     2754              }
     2755              Parser->bdsephemeris = 0;
     2756            }
     2757            file = Parser->bdsfile;
     2758          }
    26622759        }
    26632760        if(file)
     
    27222819            ConvLine(file, "%s%19.12e%19.12e%19.12e%19.12e\n", sep, e->z_pos,
    27232820            e->z_velocity, e->z_acceleration, (double)e->IODN);
     2821          }
     2822          else if(r == RTCM3ID_BDS)
     2823          {
     2824            struct bdsephemeris *e = &Parser->ephemerisBDS;
     2825            double d;                 /* temporary variable */
     2826            struct converttimeinfo cti;
     2827            converttimebds(&cti, e->BDSweek, e->TOC);
     2828            int num = e->satellite-PRN_BDS_START+1;
     2829
     2830            if(Parser->rinex3)
     2831            {
     2832              ConvLine(file,
     2833              "C%02d %04d %02d %02d %02d %02d %02d%19.12e%19.12e%19.12e\n",
     2834              num, cti.year, cti.month, cti.day, cti.hour,
     2835              cti.minute, cti.second, e->clock_bias, e->clock_drift,
     2836              e->clock_driftrate);
     2837              sep = "    ";
     2838            }
     2839            else
     2840            {
     2841              ConvLine(file,
     2842              "%02d %02d %02d %02d %02d %02d%05.1f%19.12e%19.12e%19.12e\n",
     2843              num, cti.year%100, cti.month, cti.day, cti.hour,
     2844              cti.minute, (double) cti.second, e->clock_bias, e->clock_drift,
     2845              e->clock_driftrate);
     2846            }
     2847            ConvLine(file, "%s%19.12e%19.12e%19.12e%19.12e\n", sep,
     2848            (double)e->AODE, e->Crs, e->Delta_n, e->M0);
     2849            ConvLine(file, "%s%19.12e%19.12e%19.12e%19.12e\n", sep, e->Cuc,
     2850            e->e, e->Cus, e->sqrt_A);
     2851            ConvLine(file, "%s%19.12e%19.12e%19.12e%19.12e\n", sep,
     2852            (double) e->TOE, e->Cic, e->OMEGA0, e->Cis);
     2853            ConvLine(file, "%s%19.12e%19.12e%19.12e%19.12e\n", sep, e->i0,
     2854            e->Crc, e->omega, e->OMEGADOT);
     2855            ConvLine(file, "%s%19.12e                   %19.12e\n", sep, e->IDOT,
     2856            (double) e->BDSweek);
     2857            if(e->URAI <= 6) /* URA index */
     2858              d = ceil(10.0*pow(2.0, 1.0+((double)e->URAI)/2.0))/10.0;
     2859            else
     2860              d = ceil(10.0*pow(2.0, ((double)e->URAI)/2.0))/10.0;
     2861            /* 15 indicates not to use satellite. We can't handle this special
     2862               case, so we create a high "non"-accuracy value. */
     2863            ConvLine(file, "%s%19.12e%19.12e%19.12e%19.12e\n", sep, d,
     2864            ((double) (e->flags & BDSEPHF_SATH1)), e->TGD_B1_B3,
     2865            e->TGD_B2_B3);
     2866
     2867            ConvLine(file, "%s%19.12e%19.12e\n", sep, ((double)e->TOW),
     2868            (double) e->AODC);
     2869            /* TOW, AODC */
    27242870          }
    27252871          else /* if(r == 1019 || r == 1044) */
     
    27832929            (i & GPSEPHF_6HOURSFIT) ? (Parser->rinex3 ? 1 : qzss ? 4.0 : 6.0)
    27842930            : (Parser->rinex3 ? 0 : qzss ? 2.0 : 4.0));
    2785             /* TOW */
     2931            /* TOW,Fit */
    27862932          }
    27872933        }
     
    28723018              sys[RTCM3_MSM_QZSS] = 1;
    28733019            }
    2874             else if(Parser->Data.satellites[i] >= PRN_COMPASS_START
    2875             && Parser->Data.satellites[i] <= PRN_COMPASS_END)
    2876             {
    2877               RTCM3Text("C%02d", Parser->Data.satellites[i] - (PRN_COMPASS_START-1));
    2878               sys[RTCM3_MSM_COMPASS] = 1;
     3020            else if(Parser->Data.satellites[i] >= PRN_BDS_START
     3021            && Parser->Data.satellites[i] <= PRN_BDS_END)
     3022            {
     3023              RTCM3Text("C%02d", Parser->Data.satellites[i] - (PRN_BDS_START-1));
     3024              sys[RTCM3_MSM_BDS] = 1;
    28793025            }
    28803026            else if(Parser->Data.satellites[i] >= PRN_SBAS_START
     
    29813127              }
    29823128            }
    2983             else if(sys[RTCM3_MSM_COMPASS])
    2984             {
    2985               for(j = 0; j < Parser->info[RTCM3_MSM_COMPASS].numtypes; ++j)
     3129            else if(sys[RTCM3_MSM_BDS])
     3130            {
     3131              for(j = 0; j < Parser->info[RTCM3_MSM_BDS].numtypes; ++j)
    29863132              {
    2987                 long long df = Parser->info[RTCM3_MSM_COMPASS].flags[j];
    2988                 int pos = Parser->info[RTCM3_MSM_COMPASS].pos[j];
     3133                long long df = Parser->info[RTCM3_MSM_BDS].flags[j];
     3134                int pos = Parser->info[RTCM3_MSM_BDS].pos[j];
    29893135                if((Parser->Data.dataflags[i] & df)
    29903136                && !isnan(Parser->Data.measdata[i][pos])
    29913137                && !isinf(Parser->Data.measdata[i][pos])
    29923138                && (Parser->Data.codetype[i][pos]
    2993                   && Parser->info[RTCM3_MSM_COMPASS].type[pos]
    2994                   && Parser->info[RTCM3_MSM_COMPASS].type[pos]
     3139                  && Parser->info[RTCM3_MSM_BDS].type[pos]
     3140                  && Parser->info[RTCM3_MSM_BDS].type[pos]
    29953141                  == Parser->Data.codetype[i][pos][1]))
    29963142                {
     
    31773323              RTCM3Text("J%02d", Parser->Data.satellites[i]
    31783324              - (PRN_QZSS_START-1));
    3179             else if(Parser->Data.satellites[i] >= PRN_COMPASS_START
    3180             && Parser->Data.satellites[i] <= PRN_COMPASS_END)
     3325            else if(Parser->Data.satellites[i] >= PRN_BDS_START
     3326            && Parser->Data.satellites[i] <= PRN_BDS_END)
    31813327              RTCM3Text("C%02d", Parser->Data.satellites[i]
    3182               - (PRN_COMPASS_START-1));
     3328              - (PRN_BDS_START-1));
    31833329            else
    31843330              RTCM3Text("%3d", Parser->Data.satellites[i]);
     
    32143360                RTCM3Text("J%02d", Parser->Data.satellites[i]
    32153361                - (PRN_QZSS_START-1));
    3216               else if(Parser->Data.satellites[i] >= PRN_COMPASS_START
    3217               && Parser->Data.satellites[i] <= PRN_COMPASS_END)
     3362              else if(Parser->Data.satellites[i] >= PRN_BDS_START
     3363              && Parser->Data.satellites[i] <= PRN_BDS_END)
    32183364                RTCM3Text("C%02d", Parser->Data.satellites[i]
    3219                 - (PRN_COMPASS_START-1));
     3365                - (PRN_BDS_START-1));
    32203366              else
    32213367                RTCM3Text("%3d", Parser->Data.satellites[i]);
     
    33773523  const char *qzssephemeris;
    33783524  const char *glonassephemeris;
     3525  const char *bdsephemeris;
    33793526};
    33803527
     
    33923539{ "header",           required_argument, 0, 'f'},
    33933540{ "user",             required_argument, 0, 'u'},
     3541{ "bdsephemeris",     required_argument, 0, 'C'},
    33943542{ "gpsephemeris",     required_argument, 0, 'E'},
    33953543{ "qzssephemeris",    required_argument, 0, 'Q'},
     
    34053553{0,0,0,0}};
    34063554#endif
    3407 #define ARGOPT "-d:s:p:r:t:f:u:E:G:B:Q:M:S:R:n:h3O"
     3555#define ARGOPT "-d:s:p:r:t:f:u:E:C:G:B:Q:M:S:R:n:h3O"
    34083556
    34093557enum MODE { HTTP = 1, RTSP = 2, NTRIP1 = 3, AUTO = 4, END };
     
    35383686  args->sbasephemeris = 0;
    35393687  args->glonassephemeris = 0;
     3688  args->bdsephemeris = 0;
    35403689  args->rinex3 = 0;
    35413690  args->nmea = 0;
     
    35603709    case 'd': args->data = optarg; break;
    35613710    case 'f': args->headerfile = optarg; break;
     3711    case 'C': args->bdsephemeris = optarg; break;
    35623712    case 'E': args->gpsephemeris = optarg; break;
    35633713    case 'B': args->sbasephemeris = optarg; break;
     
    36363786    " -t " LONG_OPT("--timeout          ") "timeout in seconds (default 60)\n"
    36373787    " -u " LONG_OPT("--user             ") "the user name\n"
     3788    " -C " LONG_OPT("--bdsephemeris     ") "output file for BDS ephemeris data\n"
    36383789    " -E " LONG_OPT("--gpsephemeris     ") "output file for GPS ephemeris data\n"
    36393790    " -G " LONG_OPT("--glonassephemeris ") "output file for GLONASS ephemeris data\n"
     
    37443895    Parser.glonassephemeris = args.glonassephemeris;
    37453896    Parser.gpsephemeris = args.gpsephemeris;
     3897    Parser.bdsephemeris = args.bdsephemeris;
    37463898    Parser.qzssephemeris = args.qzssephemeris;
    37473899    Parser.sbasephemeris = args.sbasephemeris;
  • trunk/rtcm3torinex/lib/rtcm3torinex.h

    r6329 r6599  
    4040#define PRN_SBAS_START            120
    4141#define PRN_SBAS_END              141
    42 #define PRN_COMPASS_START         161
    43 #define PRN_COMPASS_END           190
     42#define PRN_BDS_START             161
     43#define PRN_BDS_END               190
    4444#define PRN_QZSS_START            193
    4545#define PRN_QZSS_END              202
     
    6060#define RTCM3_MSM_SBAS    3
    6161#define RTCM3_MSM_QZSS    4
    62 #define RTCM3_MSM_COMPASS 5
     62#define RTCM3_MSM_BDS    5
    6363
    6464#define RTCM3_MSM_NUMSYS  6
     
    277277#define QZSS_WAVELENGTH_LEX (LIGHTSPEED / QZSS_FREQU_LEX) /* m */
    278278
    279 #define COMPASS_FREQU_B1       1561098000.0  /* Hz */
    280 #define COMPASS_FREQU_B2       1207140000.0  /* Hz */
    281 #define COMPASS_FREQU_B3       1268520000.0  /* Hz */
    282 #define COMPASS_WAVELENGTH_B1  (LIGHTSPEED / COMPASS_FREQU_B1) /* m */
    283 #define COMPASS_WAVELENGTH_B2  (LIGHTSPEED / COMPASS_FREQU_B2) /* m */
    284 #define COMPASS_WAVELENGTH_B3  (LIGHTSPEED / COMPASS_FREQU_B3) /* m */
     279#define BDS_FREQU_B1       1561098000.0  /* Hz */
     280#define BDS_FREQU_B2       1207140000.0  /* Hz */
     281#define BDS_FREQU_B3       1268520000.0  /* Hz */
     282#define BDS_WAVELENGTH_B1  (LIGHTSPEED / BDS_FREQU_B1) /* m */
     283#define BDS_WAVELENGTH_B2  (LIGHTSPEED / BDS_FREQU_B2) /* m */
     284#define BDS_WAVELENGTH_B3  (LIGHTSPEED / BDS_FREQU_B3) /* m */
    285285
    286286#define PRN_GIOVE_OFFSET 51
     
    365365};
    366366
    367 #define GALEPHF_E5ADINVALID     (1<<0) /* E5aDVS set invalid */
    368 #define GALEPHF_E5BDINVALID     (1<<1) /* E5bDVS set invalid */
    369 #define GALEPHF_INAV            (1<<2) /* INAV data */
    370 #define GALEPHF_FNAV            (1<<3) /* FNAV data */
    371 
    372367#define GLOEPHF_UNHEALTHY       (1<<0) /* set if unhealty satellite, f2b78 */
    373368#define GLOEPHF_ALMANACHEALTHOK (1<<1) /* set if ALM health is available */
     
    420415  int    URA;              /*          [bits  35- 38] */
    421416};
     417
     418#define GALEPHF_E5ADINVALID     (1<<0) /* E5aDVS set invalid */
     419#define GALEPHF_E5BDINVALID     (1<<1) /* E5bDVS set invalid */
     420#define GALEPHF_INAV            (1<<2) /* INAV data */
     421#define GALEPHF_FNAV            (1<<3) /* FNAV data */
    422422
    423423struct galileoephemeris {
     
    453453};
    454454
     455#define RTCM3ID_BDS 63
     456#define BDSEPHF_SATH1      (1<<0) /* SatH1 is 1 */
     457
     458struct bdsephemeris {
     459  int    flags;            /* BDSEPHF_xxx */
     460  int    satellite;        /*  SV ID   */
     461  int    AODE;             /*          */
     462  int    URAI;             /*  [1..15] */
     463  int    BDSweek;          /*          */
     464  int    AODC;             /*          */
     465  int    TOW;              /*  [s]     */
     466  int    TOC;              /*  [s]     */
     467  int    TOE;              /*  [s]     */
     468  double clock_bias;       /*  [s]     */
     469  double clock_drift;      /*  [s/s]   */
     470  double clock_driftrate;  /*  [s/s^2] */
     471  double Crs;              /*  [m]     */
     472  double Delta_n;          /*  [rad/s] */
     473  double M0;               /*  [rad]   */
     474  double Cuc;              /*  [rad]   */
     475  double e;                /*          */
     476  double Cus;              /*  [rad]   */
     477  double sqrt_A;           /*  [m^0.5] */
     478  double Cic;              /*  [rad]   */
     479  double OMEGA0;           /*  [rad]   */
     480  double Cis;              /*  [rad]   */
     481  double i0;               /*  [rad]   */
     482  double Crc;              /*  [m]     */
     483  double omega;            /*  [rad]   */
     484  double OMEGADOT;         /*  [rad/s] */
     485  double IDOT;             /*  [rad/s] */
     486  double TGD_B1_B3;        /*  [s]     */
     487  double TGD_B2_B3;        /*  [s]     */
     488};
     489
    455490struct DataInfo {
    456491  long long flags[RINEXENTRY_NUMBER];
     
    472507  struct glonassephemeris ephemerisGLONASS;
    473508  struct sbasephemeris ephemerisSBAS;
     509  struct bdsephemeris ephemerisBDS;
    474510  struct gnssdata DataNew;
    475511  int    GLOFreq[PRN_GLONASS_NUM]; /* frequency numbers of GLONASS + 100 */
     
    502538  char         fieldbufferGLONASS[4*RINEXENTRY_NUMBER+1];
    503539  char         fieldbufferGALILEO[4*RINEXENTRY_NUMBER+1];
    504   char         fieldbufferCOMPASS[4*RINEXENTRY_NUMBER+1];
     540  char         fieldbufferBDS[4*RINEXENTRY_NUMBER+1];
    505541  char         fieldbufferQZSS[4*RINEXENTRY_NUMBER+1];
    506542  int          numdatafields; /* for RTCM2 */
     
    515551  const char * qzssephemeris;
    516552  const char * sbasephemeris;
     553  const char * bdsephemeris;
    517554  FILE *       glonassfile;
    518555  FILE *       gpsfile;
    519556  FILE *       qzssfile;
    520557  FILE *       sbasfile;
     558  FILE *       bdsfile;
    521559};
    522560
Note: See TracChangeset for help on using the changeset viewer.