📄 dispfun.c
字号:
#include "includes.h"
extern volatile int SuspTask;
extern volatile int MainTask;
/****************************************************************************
* Function: void F1_Display(void)
*
* The display obtained by pressing key F1.
*
* Input: None.
*
* Output: None.
*
* Return Value: None.
****************************************************************************/
void F1_Display(void)
{
#define MaxHelpPage 3
if(HelpPage<0)
HelpPage=MaxHelpPage;
else if(HelpPage>MaxHelpPage)
HelpPage=0;
if(HelpPage==0)
{
OutputString(3,6,"GPS BUILDER-2(TM) HELP AND COMMAND MENU "
" PageUp/PageDown to Scroll");
OutputString(3,8,"The function keys (F1, F2, etc.) control the display.");
OutputString(3,10,"The following commands may be given in one of three "
"ways:");
OutputString(3,11," 1) Keyboard: Press ESC to obtain a prompt, type the "
"command, press ENTER");
OutputString(3,12," 2) Automatically, from the file CMD.INI at startup");
OutputString(3,13," 3) In batch mode, from file <fname>, after the "
"command CF <fname>");
OutputString(27,15,"----- Command Menu -----");
OutputString(3,16,"AA Toggle the use of altitude aiding ");
OutputString(3,17,"AC x Set all channels to track SV x "
"(track mode 2 only)");
OutputString(3,18,"BR 304.0,100 Tune beacon receiver to 304.0 kHz/100 "
"bps");
}
else if(HelpPage==1)
{
OutputString(3,6,"GPS BUILDER-2(TM) HELP AND COMMAND MENU "
" PageUp/PageDown to Scroll");
OutputString(3,8,"CF filename Execute commands from the specified "
"file");
OutputString(3,9,"CH x Limit satellite tracking to x "
"channels");
OutputString(3,10,"CI x Set the coasting interval, seconds");
OutputString(3,11,"CS posn strng Cold start from initial lat/lon/hgt");
OutputString(3,12,"DC x RTCM-104 serial input on COM port x");
OutputString(3,13,"DM Toggle fixed position mode");
OutputString(3,14,"DS x Deselect SV x");
OutputString(3,15,"EM x.x Set elevation mask to x.x degrees");
OutputString(3,16,"FK x Mimic pressing Function Key Fx");
OutputString(3,17,"GM x.x Set GDOP mask to x.x");
OutputString(3,18,"IC Toggle use of integrated carrier "
"measurements");
}
else if(HelpPage==2)
{
OutputString(3,6,"GPS BUILDER-2(TM) HELP AND COMMAND MENU "
" PageUp/PageDown to Scroll");
OutputString(3,8,"ID x Set receiver ID number in data log "
"file");
OutputString(3,9,"IP posn strng Set initial position lat/lon/hgt");
OutputString(3,10,"LC comment Change log file comment");
OutputString(3,11,"LF filename Log position and status data to file");
OutputString(3,12,"LI x Log rate (seconds) for positon and "
"status data log");
OutputString(3,13,"LS Toggle log data to COM1");
OutputString(3,14,"OE x.x Set oscillator error to x.x ppm");
OutputString(3,15,"SC filename Save screen to text file");
OutputString(3,16,"QA Save almanacs to ALM.INI and quit");
OutputString(3,17,"QU Quit");
OutputString(3,18,"RA filename Read almanacs from file");
}
else if(HelpPage==3)
{
OutputString(3,6,"GPS BUILDER-2(TM) HELP AND COMMAND MENU "
" PageUp/PageDown to Scroll");
OutputString(3,8,"RC comment Insert comment record into RINEX2 "
"files");
OutputString(3,9,"RH Set reference position to current "
"position");
OutputString(3,10,"RN x Record RINEX2 data at x sec intervals");
OutputString(3,11,"RP posn strng Set refernce position lat/lon/hgt");
OutputString(3,12,"RS x Reselect SV x (RS 0 for all)");
OutputString(3,13,"SA filename Save almanacs to file");
OutputString(3,14,"SC filename Save current screen to text file");
OutputString(3,15,"SS x y Track SV x on channel y (track mode 2 "
"only)");
OutputString(3,16,"TZ x Set time zone to x hours");
OutputString(3,17,"TM x Change to track mode x");
OutputString(3,18,"WN x Issue warning beeps of x & 1000 Hz");
}
}
/****************************************************************************
* Function: void F2_Display(void)
*
* The display obtained by pressing key F2.
*
* Input: None.
*
* Output: None.
*
* Return Value: None.
****************************************************************************/
void F2_Display(void)
{
char buff[90];
sprintf(buff,"ABOUT GPS BUILDER-2(TM): CONFIG. %s (%s)",
CONFIG_CODE,CONFIG_XPLAIN);
OutputString(3,6,buff);
OutputString(3,8,"GPS Builder-2(TM) is an evaluation and software "
"development kit for the GEC");
OutputString(3,9,"Plessey GP2010/2021 GPS chip set. It is supplied "
"as an ISA board set with");
OutputString(3,10,"an executable program that can be run on a PC "
"(33 MHz 486-DX or above).");
OutputString(3,12,"The PC environment can be used to develop "
"application-specific GPS receiver");
OutputString(3,13,"software in the C programming language. The "
"GPS Builder-2(TM) RF/correlator");
OutputString(3,14,"daughterboard can be removed and interfaced to "
"the designer's own embedded");
OutputString(3,15,"computer using either Intel or Motorola bus "
"conventions. The C language GPS");
OutputString(3,16,"software can then be retargeted for the embedded "
"processor.");
}
/****************************************************************************
* Function: void F3_Display(navstatestruc N)
*
* The display obtained by pressing key F3.
*
* Input: N - the current navigation state.
*
* Output: None.
*
* Return Value: None.
****************************************************************************/
void F3_Display(navstatestruc N)
{
char statflag,snrbuff[6],urastr[6],lastsfstr[4],Ererrstr[12],DCstr[12],
Eicpstr[12],Errerrstr[12],buff[90];
unsigned coasting;
int corlk,carfrlk,bitlk,framelk,chan,ncohz,row,dispsv;
long carrdco;
unsigned long ultemp;
double dtemp;
/* Translation table URA code -> predicted accuracy in meters */
double uratbl[] = {2.0,2.8,4.0,5.7,8.0,11.3,16.0,32.0,64.0,128.0,
256.0,512.0,1024.0,2048.0,4096.0,9999.0};
sprintf(buff," CH SV ELV AZI DOPP NCO UERE SF PRerr "
"PRRerr ICPerr DiffC LOCKS SNR");
OutputString(2,6,buff);
row = 0;
for(chan=0; chan<MAXCHANNELS; ++chan)
{
row = row + 1;
statflag = ' ';
dispsv = CH[chan].SV;
if(dispsv)
{
/* Check for unhealthy according to either the almanac
or subframe 1 health codes. */
if(ielvd[dispsv-1] < ElvMask)
statflag = 'E';
PROTECT++; /* Indivisibly access almanac & ephemeris entries */
if( ((ephs[dispsv-1].vflg==1) && (ephs[dispsv-1].s1hlth))
|| ((alms[dispsv-1].vflg==1) && (alms[dispsv-1].almhlth)) )
statflag = 'U';
PROTECT--;
if(Deselect[dispsv-1])
statflag = 'D';
}
disable(); /* Must protect against the correlator ISR */
ultemp = CH[chan].CdLI;
corlk = CH[chan].corlk;
carfrlk = CH[chan].carfrlk;
bitlk = CH[chan].bitlk;
framelk = CH[chan].FrameSync;
coasting = CH[chan].coasting;
carrdco = CH[chan].CARRDCO;
enable();
dtemp = ultemp;
/* The post-detection SNR of a satellite's signal is the ratio of
its average I**2 + Q**2, given by CH[].CdLI, to the expectation
value of I**2+ Q**2 for noise only. */
if((dtemp>(NOISE_FLOOR_FLOAT)/10.0) && (dtemp<(NOISE_FLOOR_FLOAT)*10000.0))
{
/* Display the power ratio in dB for SNR values between
-10 and +40 dB */
sprintf(snrbuff,"%4.1lf",10.0*log10(dtemp/(NOISE_FLOOR_FLOAT)));
}
else if(dtemp<(NOISE_FLOOR_FLOAT)/10.0)
{
/* Display -- for SNR values below -10 dB */
sprintf(snrbuff," --");
}
else
{
/* Display >40 for SNR values in excess of +40 dB */
sprintf(snrbuff," >40");
}
ncohz = - (long)(carrdco-0x1F7B1B89L) * 0.04257475 / 16.0;
if(dispsv && (chan<ActiveChannels))
{
PROTECT++; /* Indivisibly access almanac & ephemeris entries */
if(ephs[dispsv-1].vflg==1)
sprintf(urastr,"%4.0lf",uratbl[ephs[dispsv-1].ura]);
else
sprintf(urastr," --");
PROTECT--;
if(lastsf[dispsv-1])
sprintf(lastsfstr,"%2d",lastsf[dispsv-1]);
else
sprintf(lastsfstr," -");
if(N.Erngerr[chan]==0.0)
sprintf(Ererrstr," --");
else if(fabs(N.Erngerr[chan])<100000.0)
sprintf(Ererrstr,"%8.1f",N.Erngerr[chan]);
else
sprintf(Ererrstr,"%8.1E",N.Erngerr[chan]);
if(N.Eicperr[chan]==0.0)
sprintf(Eicpstr," --");
else if(fabs(N.Eicperr[chan])<100000.0)
sprintf(Eicpstr,"%8.1f",N.Eicperr[chan]);
else
sprintf(Eicpstr,"%8.1E",N.Eicperr[chan]);
if(N.Erraterr[chan]==0.0)
sprintf(Errerrstr," --");
else if(fabs(N.Erraterr[chan])<100000.0)
sprintf(Errerrstr,"%8.1f",N.Erraterr[chan]);
else
sprintf(Errerrstr,"%8.1E",N.Erraterr[chan]);
if(fabs(N.EPRcorr[chan])<1000.0)
sprintf(DCstr,"%7.1f",N.EPRcorr[chan]);
else
sprintf(DCstr," --");
sprintf(buff,"%c%2d %2d %3d %3d%6d%7d%4s %2s %8s%8s %8s%7s "
"%c%c%c%c%c %4s",statflag,chan+1,dispsv,
ielvd[dispsv-1],iazid[dispsv-1],idopp[dispsv-1],
ncohz,urastr,lastsfstr,Ererrstr,Errerrstr,Eicpstr,
DCstr,corlk?'C':' ',carfrlk?'C':' ',bitlk?'B':' ',
(framelk==TRUE)?'F':' ',coasting?TILDE:' ',snrbuff);
}
else
{
sprintf(buff," %2d -- -- -- -- -- -- - -- "
" -- -- -- --",chan+1);
}
OutputString(2,6+row,buff);
}
}
/****************************************************************************
* Function: void F4_Display(void)
*
* The display obtained by pressing key F4.
*
* Input: None.
*
* Output: None.
*
* Return Value: None.
****************************************************************************/
void F4_Display(void)
{
int i,dispsv,irow,icol;
char hlthflag,deselflag,buff[90];
sprintf(buff," SV STATUS ELV AZI DOPP %c SV STATUS ELV AZI "
"DOPP %c SV STATUS ELV AZI DOPP",SingV,SingV);
OutputString(2,6,buff);
for(i=7; i<19; ++i)
{
OutputCharacter(27,i,SingV);
OutputCharacter(53,i,SingV);
}
for(dispsv=1; dispsv<33; ++dispsv)
{
if(alms[dispsv-1].vflg==1)
{
/* We have an almanac for this SV */
PROTECT++; /* Indivisibly access almanac & ephemeris entries */
if( ((ephs[dispsv-1].vflg==1) && (ephs[dispsv-1].s1hlth))
|| ((alms[dispsv-1].vflg==1) && (alms[dispsv-1].almhlth)) )
hlthflag = 'U';
else
hlthflag=' ';
PROTECT--;
if(Deselect[dispsv-1])
deselflag = 'D';
else
deselflag=' ';
sprintf(buff,"%c%2d %c%c%c%c%c%c %3d %3d%6d",
LastAlm==dispsv? RTARROW:' ',
dispsv,hlthflag,deselflag,' ',' ',' ',' ',
ielvd[dispsv-1],iazid[dispsv-1],idopp[dispsv-1]);
}
else if(alms[dispsv-1].vflg==2)
{
/* The SV probably does not exist (no almanac subframe for
this SV has been found where it was expected in the subframe
stream). */
sprintf(buff,"%c%2d NoSuch --- --- ----",
LastAlm==dispsv? RTARROW:' ',dispsv);
}
else
{
/* We have no information about this SV */
sprintf(buff,"%c%2d NoInfo --- --- ----",
LastAlm==dispsv? RTARROW:' ',dispsv);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -