⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rinex2.c

📁 GPS导航定位程序
💻 C
📖 第 1 页 / 共 2 页
字号:
*
* Return Value: None.
****************************************************************************/
void Rx2Comment(char *ch)
{
    int character;                                   /* Character counter. */

    Checkpoint("Rx2Comment",1);

    memset(prbuff,' ',80);
    prbuff[80]=0;
    for(character=0;character<60;character++)
    {
        if(*ch==0)
            break;
        prbuff[character]=*ch++;
    }
    strcpy(&prbuff[60],"COMMENT");
    if(Rx2N!=NULL)
    {
        PROTECT++;
        fprintf(Rx2N,"%s\n",prbuff);
        Rx2NRecs++;
        PROTECT--;
    }
    if(Rx2O!=NULL)
    {
        PROTECT++;
        fprintf(Rx2O,"%s\n",prbuff);
        Rx2ORecs++;
        PROTECT--;
    }
}

/****************************************************************************    
* Function: void Rx2Start(int interval)
*
* Start (or restart) RINEX-2 navigation and observation files. Set up the
* specified observation interval. The observations will be taken
* approximately at that interval. (Can't do this exactly because the GP2021
* correlator takes its measurements on the TIC, not at an arbitrary time.)
*
* Input: interval - RINEX-2 observation interval in seconds.
*
* Output: None.
*
* Return Value: None.
****************************************************************************/

#pragma warn -par                   /* Suppress variable not used warning. */

void Rx2Start(int interval)
{
    char datestr[21];                           /* String containing date. */

    int sv;                                          /* The SV PRN number. */
    int y;                                                        /* Year. */
    int m;                                                       /* Month. */
    int d;                                                         /* Day. */
    int hh;                                                       /* Hour. */
    int mm;                                                     /* Minute. */
    int gwk;                                           /* GPS week number. */

    unsigned long ctic;                             /* Current TIC number. */

    double second;                                              /* Second. */

    time_t t;
    struct tm *tblock;

    Checkpoint("Rx2Start",1);

    /* Open Rinex2 Navigation and Observation files. If they are already
       open, close them first and then restart. */

    PROTECT++;
    if(Rx2N!=NULL)
        fclose(Rx2N);
    if(Rx2O!=NULL)
        fclose(Rx2O);

    Rx2NRecs = Rx2ORecs = 0ul;

    t = time(NULL);
    tblock = localtime(&t);
    strftime(datestr,20,"%d-%b-%y %H:%M",tblock);
    {
        int i;

        for(i=3;i<6;i++)
            datestr[i] = toupper(datestr[i]);
    }

    Rx2N = fopen("RINEX2.N","wt");

    memset(prbuff,' ',80);
    prbuff[80]=0;
    prbuff[5]='2';
    prbuff[20]='N';
    strcpy(&prbuff[60],"RINEX VERSION / TYPE");
    fprintf(Rx2N,"%s\n",prbuff);
    Rx2NRecs++;

    memset(prbuff,' ',80);
    prbuff[80]=0;
    sprintf(buff,"GPS BUILDER %s",CONFIG_CODE);
    InsertIntoString(prbuff,buff);
    InsertIntoString(&prbuff[40],datestr);
    strcpy(&prbuff[60],"PGM / RUN BY / DATE");
    fprintf(Rx2N,"%s\n",prbuff);
    Rx2NRecs++;

    memset(prbuff,' ',80);
    prbuff[80]=0;
    strcpy(&prbuff[60],"COMMENT");
    fprintf(Rx2N,"%s\n",prbuff);
    Rx2NRecs++;

    Rx2IU();

    memset(prbuff,' ',80);
    prbuff[80]=0;
    strcpy(&prbuff[60],"END OF HEADER");
    fprintf(Rx2N,"%s\n",prbuff);
    Rx2NRecs++;

    /* Output the initial ephemeris set. */

    for(sv=1;sv<33;sv++)
        if(ephs[sv-1].vflg==1)
            Rx2EPH(sv);

    Rx2O = fopen("RINEX2.O","wt");

    memset(prbuff,' ',80);
    prbuff[80]=0;
    prbuff[5]='2';
    prbuff[20]='O';
    prbuff[40]='G';
    strcpy(&prbuff[60],"RINEX VERSION / TYPE");
    fprintf(Rx2O,"%s\n",prbuff);
    Rx2ORecs++;

    memset(prbuff,' ',80);
    prbuff[80]=0;
    sprintf(buff,"GPS BUILDER %s",CONFIG_CODE);
    InsertIntoString(prbuff,buff);
    InsertIntoString(&prbuff[40],datestr);
    strcpy(&prbuff[60],"PGM / RUN BY / DATE");
    fprintf(Rx2O,"%s\n",prbuff);
    Rx2ORecs++;

    memset(prbuff,' ',80);
    prbuff[80]=0;
    strcpy(&prbuff[60],"COMMENT");
    fprintf(Rx2O,"%s\n",prbuff);
    Rx2ORecs++;

    memset(prbuff,' ',80);
    prbuff[80]=0;
    InsertIntoString(prbuff,"NONE SPECIFIED");
    strcpy(&prbuff[60],"MARKER NAME");
    fprintf(Rx2O,"%s\n",prbuff);
    Rx2ORecs++;

    memset(prbuff,' ',80);
    prbuff[80]=0;
    InsertIntoString(prbuff,"NONE SPECIFIED");
    strcpy(&prbuff[60],"MARKER NUMBER");
    fprintf(Rx2O,"%s\n",prbuff);
    Rx2ORecs++;

    memset(prbuff,' ',80);
    prbuff[80]=0;
    InsertIntoString(prbuff,"NONE SPECIFIED");
    strcpy(&prbuff[60],"OBSERVER / AGENCY");
    fprintf(Rx2O,"%s\n",prbuff);
    Rx2ORecs++;

    memset(prbuff,' ',80);
    prbuff[80]=0;
    InsertIntoString(prbuff,"PLESSEY GP2010/2021");
    InsertIntoString(&prbuff[20],"GPS BUILDER");
    InsertIntoString(&prbuff[40],CONFIG_CODE);
    strcpy(&prbuff[60],"REC # / TYPE / VERS");
    fprintf(Rx2O,"%s\n",prbuff);
    Rx2ORecs++;

    memset(prbuff,' ',80);
    prbuff[80]=0;
    InsertIntoString(prbuff,"NONE SPECIFIED");
    InsertIntoString(&prbuff[20],"NONE SPECIFIED");
    strcpy(&prbuff[60],"ANT # / TYPE");
    fprintf(Rx2O,"%s\n",prbuff);
    Rx2ORecs++;

    memset(prbuff,' ',80);
    prbuff[80]=0;
    sprintf(buff,"%14.4lf%14.4lf%14.4lf",
            CurNavState.x,CurNavState.y,CurNavState.z);
    InsertIntoString(prbuff,buff);
    strcpy(&prbuff[60],"APPROX POSITION XYZ");
    fprintf(Rx2O,"%s\n",prbuff);
    Rx2ORecs++;

    memset(prbuff,' ',80);
    prbuff[80]=0;
    sprintf(buff,"%14.4lf%14.4lf%14.4lf",0.0,0.0,0.0);
    InsertIntoString(prbuff,buff);
    strcpy(&prbuff[60],"ANTENNA: DELTA H/E/N");
    fprintf(Rx2O,"%s\n",prbuff);
    Rx2ORecs++;

    memset(prbuff,' ',80);
    prbuff[80]=0;

    /* Specify single frequency L1 instrument, default wavelength factors. */

    sprintf(buff,"%6d%6d%6d",1,0,0);
    InsertIntoString(prbuff,buff);
    strcpy(&prbuff[60],"WAVELENGTH FACT L1/2");
    fprintf(Rx2O,"%s\n",prbuff);
    Rx2ORecs++;

    memset(prbuff,' ',80);
    prbuff[80]=0;
    
    /* Observations: L1 phase, C/A L1 pseudorange, L1 Doppler. */

    sprintf(buff,"%6d    %2s    %2s    %2s",3,"L1","C1","D1");
    InsertIntoString(prbuff,buff);
    strcpy(&prbuff[60],"# / TYPES OF OBSERV");
    fprintf(Rx2O,"%s\n",prbuff);
    Rx2ORecs++;

    memset(prbuff,' ',80);
    prbuff[80]=0;

    /* Observation interval is Rx2Interval seconds. */

    sprintf(buff,"%6d",Rx2Interval);
    InsertIntoString(prbuff,buff);
    strcpy(&prbuff[60],"INTERVAL");
    fprintf(Rx2O,"%s\n",prbuff);
    Rx2ORecs++;

    /* Compute and output the time of the first observation, which will be
       approximately one second into the future. */

    memset(prbuff,' ',80);
    prbuff[80]=0;
    CurrentTIC(&ctic);
    Rx2TIC = ctic + 10ul;
    TICToGpsTime(Rx2TIC,&gwk,&second);
    GpsTimeToGregorianDate(gwk,second,&y,&m,&d,&hh,&mm,&second);
    sprintf(buff,"%6d%6d%6d%6d%6d%12.6lf",y,m,d,hh,mm,second);
    InsertIntoString(prbuff,buff);
    strcpy(&prbuff[60],"TIME OF FIRST OBS");
    fprintf(Rx2O,"%s\n",prbuff);
    Rx2ORecs++;

    memset(prbuff,' ',80);
    prbuff[80]=0;
    strcpy(&prbuff[60],"END OF HEADER");
    fprintf(Rx2O,"%s\n",prbuff);
    Rx2ORecs++;

    PROTECT--;

    Checkpoint("Rx2Start",2);
}
#pragma warn .par                     /* Enable variable not used warning. */

/****************************************************************************    
* Function: void Rx2Stop(void)
*
* Terminate Rinex2 navigation and observation files.
*
* Input: None.
*
* Output: None.
*
* Return Value: None.
****************************************************************************/
void Rx2Stop(void)
{
    Checkpoint("Rx2Stop",1);

    PROTECT++;
    if(Rx2N!=NULL)
        fclose(Rx2N);
    if(Rx2O!=NULL)
        fclose(Rx2O);
    Rx2N = Rx2O = NULL;
    Rx2TIC = 0ul;
    PROTECT--;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -