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

📄 dispfun.c

📁 GPS导航定位程序
💻 C
📖 第 1 页 / 共 4 页
字号:
#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 + -