📄 display.c
字号:
#include "includes.h"
/****************************************************************************
* Function: void TDisplay(void)
*
* Every activation, updates the display. The display consists of several
* parts. A fixed part contains box outlines and text which never changes.
* The variable part consists of a common navigation status part (top), a
* selectable middle part (selected by F1-F9), and two lines (command and
* status) which are controlled by other procedures. The following global
* variables are set by other tasks to control the display:
*
* RedrawFixedPortionsOfDisplay
* EraseDisplay (erase selectable portion)
* DisplayFunc
*
* Input: None.
*
* Output: None.
*
* Return Value: None.
****************************************************************************/
void TDisplay(void)
{
int i,y,m,d,hh,mm,ss,gwk;
char latstr[14],lonstr[14];
char GDOPstr[6],PDOPstr[6],VDOPstr[6];
char modestr[3],DiffInfoString[8];
char *TimeType;
char buff[90];
unsigned long ctic;
double dtemp,gsec,gcdist,gcbrg,horizerr,verterr;
navstatestruc N;
clockmodelstruc CLK;
ClearScreen();
while(1)
{
if(EraseDisplay)
{
/* Erase the selectable portion of the display */
EraseDisplay=0;
for(i=0; i<78; ++i)
buff[i] = ' ';
buff[78] = 0;
for(i=6; i<19; ++i)
OutputString(2,i,buff);
}
if(RedrawFixedPortionsOfDisplay)
{
/* Draw box outlines and other fixed portions of the display */
RedrawFixedPortionsOfDisplay = 0;
for(i=1; i<79; ++i)
buff[i] = DH;
buff[0] = DUL;
buff[19] = buff[32] = buff[43] = buff[51] = buff[65] = UJ12;
buff[79] = DUR;
buff[80] = 0;
OutputString(1,1,buff);
for(i=1; i<79; ++i)
buff[i] = ' ';
buff[0] = buff[79] = DV;
buff[19] = buff[32] = buff[43] = buff[51] = buff[65] = SingV;
for(i=2; i<5; ++i)
OutputString(1,i,buff);
for(i=1; i<79; ++i)
buff[i] = DH;
buff[0] = DLJ;
buff[19] = buff[32] = buff[43] = buff[51] = buff[65] = LJ12;
buff[79] = DRJ;
OutputString(1,5,buff);
for(i=1; i<79; ++i)
buff[i] = ' ';
buff[0] = buff[79] = DV;
for(i=6; i<19; ++i)
OutputString(1,i,buff);
for(i=1; i<79; ++i)
buff[i] = DH;
buff[0] = DLJ;
buff[79] = DRJ;
OutputString(1,19,buff);
for(i=1; i<79; ++i)
buff[i] = ' ';
buff[0] = buff[79] = DV;
for(i=20; i<24; ++i)
OutputString(1,i,buff);
for(i=1; i<79; ++i)
buff[i] = DH;
buff[0] = DLL;
buff[79] = DLR;
OutputString(1,24,buff);
sprintf(buff," GPS Builder-2(TM), Config. %s ",CONFIG_CODE);
OutputString(45,24,buff);
OutputString(2,20,"F1-Help F2-About F3-Channel Status F4-Satellite Summary");
OutputString(2,21,"F5-Processing Status F6-DGPS Status F7-RINEX2 Data F8-Operating Parameters");
OutputString(2,22,"F9-Task Status F10-Data Log F11-Almanac Status F12-Ephemeris Status");
}
PROTECT++; /* To ensure indivisible access */
N = CurNavState; /* Get a local copy of the current navigation state */
PROTECT--;
PROTECT++; /* To ensure indivisible access */
CLK = CurClkModel; /* Get a local copy of the current clock model */
PROTECT--;
/* Update the current time, position, velocity, and status information
in the fixed-format boxes at the top of the display. */
CurrentTIC(&ctic);
TICToGpsTime(ctic,&gwk,&gsec);
GpsTimeToUTCDate(gwk,gsec,&y,&m,&d,&hh,&mm,&dtemp);
ss = dtemp;
LatLonToDegMin(N.lat,N.lon,latstr,lonstr);
GreatCircle(reflat,reflon,N.lat,N.lon,&gcdist,&gcbrg);
horizerr = gcdist*REARTH;
verterr = N.hgt-refhgt;
if((N.gdop>=0) && (N.gdop<999.0))
sprintf(GDOPstr,"%5.1lf",N.gdop);
else
sprintf(GDOPstr," %c",INFINITY);
if((N.pdop>=0) && (N.pdop<999.0))
sprintf(PDOPstr,"%5.1lf",N.pdop);
else
sprintf(PDOPstr," %c",INFINITY);
if((N.vdop>=0) && (N.vdop<999.0))
sprintf(VDOPstr,"%5.1lf",N.vdop);
else
sprintf(VDOPstr," %c",INFINITY);
if(N.navmode==FIX_3D)
sprintf(modestr,"3D");
else if(N.navmode==FIX_2D)
sprintf(modestr,"2D");
else
sprintf(modestr,"NO");
if(CLK.RCOtic==0)
TimeType = "CLK";
else if (ionoutc.vflg)
TimeType = "UTC";
else
TimeType = "GPS";
if(TrackMode==COLD_START)
sprintf(DiffInfoString,"COLD ST");
else if(N.diff)
sprintf(DiffInfoString,"DGPS ");
else
sprintf(DiffInfoString,"NO DGPS");
/* Check if the fix restriction criterion has been exceeded. */
if(N.hgt>HEIGHT_LIMIT || N.speed>SPEED_LIMIT)
{
sprintf(buff,"Lat -----%c--.----'%cSpd-----.-- %cGDOP %5s%cSVs %2u%cHE -------.-"
" %cDate %02i/%02i/%02i",DEGREE,SingV,SingV,
GDOPstr,SingV,N.nsats,SingV,SingV,d,m,y%100);
OutputString(2,2,buff);
sprintf(buff,"Lon -----%c--.----'%cHdg-----.-%c %cPDOP %5s%cNav %2s%cVE -------.-"
" %c%3s %02i:%02i:%02i",DEGREE,SingV,DEGREE,
SingV,PDOPstr,SingV,modestr,SingV,
SingV,TimeType,hh,mm,ss);
OutputString(2,3,buff);
sprintf(buff,"Hgt ----------.-- %cROC-----.-- %cVDOP %5s%c%7s%cDO%10.1lf"
" %cOscErr%7.2lf",SingV,SingV,VDOPstr,
SingV,DiffInfoString,SingV,(double)CLK.DoppFromClk,SingV,
CLK.RCOrate*1.0E6);
OutputString(2,4,buff);
}
else
{
sprintf(buff,"Lat %14s%cSpd%8.2lf %cGDOP %5s%cSVs %2u%cHE%10.1lf"
" %cDate %02i/%02i/%02i",latstr,SingV,N.speed,SingV,
GDOPstr,SingV,N.nsats,SingV,horizerr,SingV,d,m,y%100);
OutputString(2,2,buff);
sprintf(buff,"Lon %14s%cHdg%7.1lf%c %cPDOP %5s%cNav %2s%cVE%10.1lf"
" %c%3s %02i:%02i:%02i",lonstr,SingV,N.hdg,DEGREE,
SingV,PDOPstr,SingV,modestr,SingV,verterr,
SingV,TimeType,hh,mm,ss);
OutputString(2,3,buff);
sprintf(buff,"Hgt %13.2lf %cROC%8.2lf %cVDOP %5s%c%7s%cDO%10.1lf"
" %cOscErr%7.2lf",N.hgt,SingV,N.roc,SingV,VDOPstr,
SingV,DiffInfoString,SingV,(double)CLK.DoppFromClk,SingV,
CLK.RCOrate*1.0E6);
OutputString(2,4,buff);
}
if(LostObservations==TRUE)
{
WarningMessage("Lost Observation Data");
LostObservations = FALSE;
}
switch(DisplayFunc)
{
case DISPLAY_F1:
F1_Display();
break;
case DISPLAY_F2:
F2_Display();
break;
case DISPLAY_F3:
F3_Display(N);
break;
case DISPLAY_F4:
F4_Display();
break;
case DISPLAY_F5:
F5_Display();
break;
case DISPLAY_F6:
F6_Display();
break;
case DISPLAY_F7:
F7_Display();
break;
case DISPLAY_F8:
F8_Display();
break;
case DISPLAY_F9:
F9_Display();
break;
case DISPLAY_F10:
F10_Display();
break;
case DISPLAY_F11:
F11_Display();
break;
case DISPLAY_F12:
F12_Display();
break;
default:
F3_Display(N);
break;
}
Suspend(10); /* suspend for 1 second */
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -