📄 rinex2.c
字号:
*
* 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 + -