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

📄 display.c

📁 GPS导航定位程序
💻 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 + -