demo.cpp

来自「Express DSP compliant C55x DTMF detector」· C++ 代码 · 共 1,667 行 · 第 1/4 页

CPP
1,667
字号
    }
}
/*-------------------------------------------------------------------------*/
void                        fill_input
/*-------------------------------------------------------------------------*/
(
S16 *pIn
)
{
	if(__Control.pInFile != NULL && __Frame > 0)
	{
        read_input(pIn);
	}
    else
    {
        gen_input(pIn);
    }
    for(int k=0; k < STD_FR_SZ; k++)pIn[k] <<= 2;
}

/*-------------------------------------------------------------------------*/
int                     str_cmp
/*-------------------------------------------------------------------------*/
(
const char *pBasis, 
char **ppArg
)
{
    if (_strnicmp(pBasis, *ppArg, strlen(pBasis)) == 0)
    {
        *ppArg += strlen(pBasis);
        return 0;
    }
    else
    {
        return -1;
    }
}
/*-------------------------------------------------------------------------*/
/*-------------------------------------------------------------------------*/
/*-------------------------------------------------------------------------*/

/*                  C O N F I G U R A T I O N                              */

/*-------------------------------------------------------------------------*/
/*-------------------------------------------------------------------------*/
/*-------------------------------------------------------------------------*/

/*-------------------------------------------------------------------------*/
int                     get_cfg_line
/*-------------------------------------------------------------------------*/
(
char *pArg
)
/* returns :
        0 - no errs
        1 - file err
        2 - arg scanf err
        3 - switch err
        */
{
    int Rc = 0;
    float Tmp;
    int iTmp;
    

    if ( *pArg == '-' || *pArg == '/')
    {
        pArg++;

        if (str_cmp("DBG", &pArg) == 0)
	    {
		    __Control.pDbgFile = fopen("dbg.txt", "w");
		    if ( __Control.pDbgFile == NULL )
		    {
			    Rc = 1;
		    } /* end-of-if */
	    }
	    else if (str_cmp("OUT", &pArg) == 0)
	    {
		    __Control.pOutFile = fopen("out.txt", "w");
		    if ( __Control.pOutFile == NULL )
		    {
			    Rc = 1;
		    } /* end-of-if */
	    }
	    else if (str_cmp("TMP", &pArg) == 0)
	    {
		    __Control.pTmpFile = fopen("tmp.txt", "w");
		    if ( __Control.pTmpFile == NULL )
		    {
			    Rc = 1;
		    } /* end-of-if */
	    }
	    else if (str_cmp("BYPASS", &pArg) == 0)
	    {
		    if (sscanf(pArg, "%f", &Tmp) != 1)
		    {
                Rc = 2;
		    }
            else
            {
                __Control.fDelay = Tmp;
            }
	    }
	    else if (str_cmp("GRMODE", &pArg) == 0)
	    {
		    if (sscanf(pArg, "%d", &__Control.iGmode) != 1)
            {
                Rc = 2;
            }
	    }
	    else if (str_cmp("CATCH", &pArg) == 0)
	    {
		    if (sscanf(pArg, "%d", &__Control.iCatch) != 1)
            {
                Rc = 2;
            }
	    }
        else if (str_cmp("STEPMODE", &pArg) == 0)
	    {
		    DEMO_StepMode = TRUE;
	    }
        else if (str_cmp("INPUT", &pArg) == 0)
	    {
		    __Control.pInFile = fopen(pArg+1, "rb");
		    if ( __Control.pInFile == NULL )
		    {
			    Rc  = 1;
		    } /* end-of-if */
            else
            {
				if (__Control.fDelay > 0)
				{
					for (long i = 0; i < __Control.fDelay * 8000; i++)
					{
						S16 x;
						fread(&x, sizeof(S16), 1, __Control.pInFile);
						if (i%8000 == 0)
						{
							val_out(0,0, WHITE, "second %ld   ", (i+1)/8000);
						}
					}
				}

            }
	    }
        else if (str_cmp("INCOR", &pArg) == 0)
	    {
		    if (sscanf(pArg, "%f", &Tmp) != 1)
		    {
                Rc = 2;
		    }
            else
            {
                __Control.fRxCorr = pow(10., Tmp/20.);
            }
        }
        else if (str_cmp("HILEVEL", &pArg) == 0)
        {
			if (sscanf(pArg, "%f", &Tmp) != 1)
			{
                Rc = 2;
			}
            else
            {
				__Gen.iRxHiLevel = int(LEV0 * pow (10.0, Tmp/20.0) * 1.41);
            }
		}
        else if (str_cmp("LOLEVEL", &pArg) == 0)
		{
			if (sscanf(pArg, "%f", &Tmp) != 1)
			{
                Rc = 2;
			}
            else
            {
				__Gen.iRxLoLevel = int(LEV0 * pow (10.0, Tmp/20.0) * 1.41);
            }
		}
        else if (str_cmp("DIALLEVEL", &pArg) == 0)
		{
			if (sscanf(pArg, "%f", &Tmp) != 1)
			{
                Rc = 2;
			}
            else
            {
				__Gen.iDialLevel = int(LEV0 * pow (10.0, Tmp/20.0) * 1.41);
            }
		}
        else if (str_cmp("NOISE", &pArg) == 0)
		{
			if (sscanf(pArg, "%f", &Tmp) != 1)
			{
                Rc = 2;
			}
            else
            {
				__Gen.iRxNoise = int(LEV0 * pow (10.0, Tmp/20.0));
            }
		}
        else if (str_cmp("PRESILENCEDUR", &pArg) == 0)
		{
			if (sscanf(pArg, "%d", &iTmp) != 1)
			{
                Rc = 2;
			}
            else
            {
				__Gen.iPreSilenceDuration = iTmp;
            }
		}
        else if (str_cmp("POSTSILENCEDUR", &pArg) == 0)
		{
			if (sscanf(pArg, "%d", &iTmp) != 1)
			{
                Rc = 2;
			}
            else
            {
				__Gen.iPostSilenceDuration = iTmp;
            }
		}
        else if (str_cmp("SIGNALDUR", &pArg) == 0)
		{
			if (sscanf(pArg, "%d", &iTmp) != 1)
			{
                Rc = 2;
			}
            else
            {
				__Gen.iSignalDuration = iTmp;
            }
		}
        else if (str_cmp("SAMEMAX", &pArg) == 0)
		{
			if (sscanf(pArg, "%d", &iTmp) != 1)
			{
                Rc = 2;
			}
            else
            {
				__Gen.iSameCntrMax = iTmp;
            }
		}
        else if (str_cmp("FREQSTEPS", &pArg) == 0)
		{
			if (sscanf(pArg, "%d", &iTmp) != 1)
			{
                Rc = 2;
			}
            else
            {
				__Gen.iFreqSteps = iTmp;
            }
		}
        else if (str_cmp("TONESTART", &pArg) == 0)
		{
			if (sscanf(pArg, "%d", &iTmp) != 1)
			{
                Rc = 2;
			}
            else
            {
				__Gen.iToneCntr = iTmp;
                __Gen.iToneCntr &= 0xf;
                __Gen.iLo = __Gen.iToneCntr % 4;
                __Gen.iHi = __Gen.iToneCntr / 4;

            }
		}
        else if (str_cmp("TONEINC", &pArg) == 0)
		{
			if (sscanf(pArg, "%d", &iTmp) != 1)
			{
                Rc = 2;
			}
            else
            {
				__Gen.iToneInc = iTmp;
            }
		}
        else if (str_cmp("FREQDEV", &pArg) == 0)
		{
			if (sscanf(pArg, "%f", &Tmp) != 1)
			{
                Rc = 2;
			}
            else
            {
				__Gen.fFreqDevMax = Tmp*0.01;
            }
		}
        else
	    {
		    Rc = 3;
	    }
    } /* end of if */
    else
    {
        // that's a comment
    }
    return Rc;
}

/*-------------------------------------------------------------------------*/
/*-------------------------------------------------------------------------*/
/*-------------------------------------------------------------------------*/

/*                  O U T P U T                                            */

/*-------------------------------------------------------------------------*/
/*-------------------------------------------------------------------------*/
/*-------------------------------------------------------------------------*/


/*-------------------------------------------------------------------------*/
void                        dump_results
/*-------------------------------------------------------------------------*/
(
)
{
    if (__Control.pOutFile != NULL)
    {
#if 0
        fprintf(__Control.pOutFile, 
            "F1=%4d[%4.1f]; F2=%4d[%4.1f]: end=%3d; start=%3d; earlyOn=%3d; earlyOff=%3d; abort=%3d\n", 
            __asFlo[__Gen.iLo],
            __Gen.fLoDev*100.,
            __asFhi[__Gen.iHi],
            __Gen.fHiDev*100.,
            __Stat.sEnd,
            __Stat.sStart,
            __Stat.sEarlyOn,
            __Stat.sEarlyOff,
            __Stat.sAbort
            );
#else
        fprintf(__Control.pOutFile, 
            "%5d %5d %5d %5d %5d\n", 
            __Stat.sEnd,
            __Stat.sStart,
            __Stat.sAbort,
            __Stat.sEarlyOn,
            __Stat.sEarlyOff
            );

#endif
    }
    __Stat.sEnd = 0;
    __Stat.sStart = 0;
    __Stat.sEarlyOn = 0;
    __Stat.sEarlyOff = 0;
    __Stat.sAbort = 0;
}


/* ------------------------------------------------------------------- */
void                    graphic_init
/* ------------------------------------------------------------------- */
(
int Err
)
{
    val_out(XT6, YT0, WHITE, "ERR %d", Err);
    val_out(XT7, YT0, WHITE, "delay %6.2f", __Control.fDelay);

    val_out(XT0, YT1, LIGHTRED, "PreSilenceDur  %d", __Gen.iPreSilenceDuration);
    val_out(XT0, YT2, LIGHTRED, "SignalDur      %d", __Gen.iSignalDuration);
    val_out(XT0, YT3, LIGHTRED, "PostSilenceDur %d", __Gen.iPostSilenceDuration);

    val_out(XT2, YT1, LIGHTCYAN, "MaxDev %6.2f", __Gen.fFreqDevMax);
    val_out(XT2, YT2, LIGHTCYAN, "freqSteps %d", __Gen.iFreqSteps);
    val_out(XT2, YT3, LIGHTCYAN, "SameMax %d", __Gen.iSameCntrMax);
    val_out(XT2, YT4, LIGHTCYAN, "ToneCntr %d", __Gen.iToneCntr);
    val_out(XT2, YT5, LIGHTCYAN, "ToneInc %d", __Gen.iToneInc);

    val_out(XT4, YT1, WHITE, "dbg file: %p", __Control.pDbgFile);
    val_out(XT4, YT2, WHITE, "in file : %p", __Control.pInFile);
    val_out(XT4, YT3, WHITE, "out file: %p", __Control.pOutFile);


    val_out(XT6, YT1, LIGHTGREEN, "RxHi %d", __Gen.iRxHiLevel);
    val_out(XT6, YT2, LIGHTGREEN, "RxLo %d", __Gen.iRxLoLevel);
    val_out(XT6, YT3, LIGHTGREEN, "RxNo %d", __Gen.iRxNoise);
    val_out(XT6, YT4, LIGHTGREEN, "Dial %d", __Gen.iDialLevel);


}

/*-------------------------------------------------------------------------*/
void                    plt_x
/*-------------------------------------------------------------------------*/
(
int x, 
int dx, 
int y, 
S16 *pData, 
int Sz, 
double Norm, 
int color
)
{
    set_color(color);
    for (int k = 0; k < Sz; k++)
    {
        int d1 = int(pData[k-1]*Norm);
        int d0 = int(pData[k-0]*Norm);
        line(x, y-d1, x+dx, y-d0);
        x+= dx;
    }
}



double dbl(S16 in)

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?