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

📄 drv0297.c

📁 st7710的tuner标准驱动
💻 C
📖 第 1 页 / 共 5 页
字号:
/* =============================== */

const U8 QAM16_DEFTUN[] =
    {
    R0297_DELAGC_2,        0xF4,
    R0297_DELAGC_7,        0x6F,
    R0297_DELAGC_8,        0xDC,
    R0297_WBAGC_1,         0xE5,
    R0297_WBAGC_2,         0x2F,
    R0297_WBAGC_3,         0x00,
    R0297_WBAGC_4,         0xC4,
    R0297_WBAGC_9,         0x09,
    R0297_WBAGC_10,        0x66,
    R0297_WBAGC_11,        0xE6,
    R0297_STLOOP_3,        0x06,
    R0297_STLOOP_9,        0x08,
    R0297_STLOOP_10,       0x5E,
    R0297_CRL_1,           0x49,
    R0297_CRL_2,           0x0B,
    R0297_CRL_9,           0x0F,
    R0297_CRL_10,          0x03,
    R0297_PMFAGC_4,        0x0C,
    0x00
    };

const U8 QAM32_DEFTUN[] =
    {
    R0297_DELAGC_2,        0xEB,
    R0297_DELAGC_7,        0x6C,
    R0297_DELAGC_8,        0x33,
    R0297_WBAGC_1,         0x4A,
    R0297_WBAGC_2,         0x2D,
    R0297_WBAGC_3,         0x00,
    R0297_WBAGC_4,         0xC4,
    R0297_WBAGC_9,         0x09,
    R0297_WBAGC_10,        0x0A,
    R0297_WBAGC_11,        0xF7,
    R0297_STLOOP_3,        0x08,
    R0297_STLOOP_9,        0x08,
    R0297_STLOOP_10,       0x1E,
    R0297_CRL_1,           0x49,
    R0297_CRL_2,           0x05,
    R0297_CRL_9,           0x00,
    R0297_CRL_10,          0x02,
    R0297_PMFAGC_4,        0x0C,
    0x00
    };

const U8 QAM64_DEFTUN[] =
    {
    R0297_DELAGC_2,        0xE5,
    R0297_DELAGC_7,        0x6C,
    R0297_DELAGC_8,        0x6E,
    R0297_WBAGC_1,         0x9F,
    R0297_WBAGC_2,         0x20,
    R0297_WBAGC_3,         0x18,
    R0297_WBAGC_4,         0x80,
    R0297_WBAGC_9,         0x12,
    R0297_WBAGC_10,        0x51,
    R0297_WBAGC_11,        0xF8,
    R0297_STLOOP_3,        0x06,
    R0297_STLOOP_9,        0x08,
    R0297_STLOOP_10,       0x1E,
    R0297_CRL_1,           0x49,
    R0297_CRL_2,           0x05,
    R0297_CRL_9,           0x00,
    R0297_CRL_10,          0x03,
    R0297_PMFAGC_4,        0x00,
    0x00
    };

const U8 QAM128_DEFTUN[] =
    {
    R0297_DELAGC_2,        0xE5,
    R0297_DELAGC_7,        0x60,
    R0297_DELAGC_8,        0x00,
    R0297_WBAGC_1,         0xED,
    R0297_WBAGC_2,         0x2F,
    R0297_WBAGC_3,         0x00,
    R0297_WBAGC_4,         0xC4,
    R0297_WBAGC_9,         0x09,
    R0297_WBAGC_10,        0x14,
    R0297_WBAGC_11,        0xFE,
    R0297_STLOOP_3,        0x06,
    R0297_STLOOP_9,        0x08,
    R0297_STLOOP_10,       0x5E,
    R0297_CRL_1,           0x49,
    R0297_CRL_2,           0x0B,
    R0297_CRL_9,           0x0F,
    R0297_CRL_10,          0x03,
    R0297_PMFAGC_4,        0x0C,
    0x00
    };

const U8 QAM256_DEFTUN[] =
    {
    R0297_DELAGC_2,        0xE5,
    R0297_DELAGC_7,        0x6C,
    R0297_DELAGC_8,        0x42,
    R0297_WBAGC_1,         0xFF,
    R0297_WBAGC_2,         0x2F,
    R0297_WBAGC_3,         0x00,
    R0297_WBAGC_4,         0xC4,
    R0297_WBAGC_9,         0x09,
    R0297_WBAGC_10,        0x76,
    R0297_WBAGC_11,        0xFE,
    R0297_STLOOP_3,        0x06,
    R0297_STLOOP_9,        0x08,
    R0297_STLOOP_10,       0x5E,
    R0297_CRL_1,           0x49,
    R0297_CRL_2,           0x0B,
    R0297_CRL_9,           0x0F,
    R0297_CRL_10,          0x03,
    R0297_PMFAGC_4,        0x0C,
    0x00
    };

/* variables --------------------------------------------------------------- */

static  int    Driv0297CN[5][40];

/* functions --------------------------------------------------------------- */


/***********************************************************
**FUNCTION	::	Drv0297_GetLLARevision
**ACTION	::	Returns the 297 LLA driver revision
**RETURN	::	Revision297
***********************************************************/
ST_Revision_t Drv0297_GetLLARevision(void)
{
	return (Revision297);
}


/*----------------------------------------------------
FUNCTION      Drv0297_WaitTuner
ACTION        Wait for tuner locked
PARAMS IN     TimeOut -> Maximum waiting time (in ms)
PARAMS OUT    NONE
RETURN        NONE (Handle == THIS_INSTANCE.Tuner.DrvHandle)
------------------------------------------------------*/
void Drv0297_WaitTuner(STTUNER_tuner_instance_t *pTunerInstance, int TimeOut)
{
#ifdef STTUNER_DEBUG_MODULE_CABDRV_DRV0297
   const char *identity = "STTUNER drv0297.c Drv0297_WaitTuner()";
#endif
    int Time = 0;
    BOOL TunerLocked = FALSE;
    ST_ErrorCode_t Error;

    while(!TunerLocked && (Time < TimeOut))
    {
        STV0297_DelayInMilliSec(1);
        Error = (pTunerInstance->Driver->tuner_IsTunerLocked)(pTunerInstance->DrvHandle, &TunerLocked);
        Time++;
    }
    Time--;
#ifdef STTUNER_DEBUG_MODULE_CABDRV_DRV0297
    STTBX_Print(("%s\n", identity));
#endif
}

/*----------------------------------------------------
--FUNCTION      Drv0297_CarrierWidth
--ACTION        Compute the width of the carrier
--PARAMS IN     SymbolRate -> Symbol rate of the carrier (Kbauds or Mbauds)
--              RollOff    -> Rolloff * 100
--PARAMS OUT    NONE
--RETURN        Width of the carrier (KHz or MHz)
------------------------------------------------------*/

long Drv0297_CarrierWidth(long SymbolRate, long RollOff)
{
    return (SymbolRate  + (SymbolRate * RollOff)/100);
}

/*----------------------------------------------------
--FUNCTION      Drv0297_CheckAgc
--ACTION        Check for Agc
--PARAMS IN     Params        => Pointer to SEARCHPARAMS structure
--PARAMS OUT    Params->State => Result of the check
--RETURN        E297_NOCARRIER carrier not founded, E297_CARRIEROK otherwise
------------------------------------------------------*/
D0297_SignalType_t Drv0297_CheckAgc(STTUNER_IOREG_DeviceMap_t *DeviceMap, IOARCH_Handle_t IOHandle, D0297_SearchParams_t *Params)
{
/*
#ifdef STTUNER_DEBUG_MODULE_CABDRV_DRV0297
   const char *identity = "STTUNER drv0297.c Drv0297_CheckAgc()";
#endif
*/

    if ( STTUNER_IOREG_GetField(DeviceMap, IOHandle, F0297_WAGC_ACQ) )
    {
        Params->State = E297_AGCOK;
    }
    else
    {
        Params->State = E297_NOAGC;
    }
/*
#ifdef STTUNER_DEBUG_MODULE_CABDRV_DRV0297
    STTBX_Print(("%s\n", identity));
#endif
*/
    return(Params->State);
}

/*----------------------------------------------------
 FUNCTION      Drv0297_CheckData
 ACTION        Check for data founded
 PARAMS IN     Params        =>    Pointer to SEARCHPARAMS structure
 PARAMS OUT    Params->State    => Result of the check
 RETURN        E297_NODATA data not founded, E297_DATAOK otherwise
------------------------------------------------------*/

D0297_SignalType_t Drv0297_CheckData(STTUNER_IOREG_DeviceMap_t *DeviceMap, IOARCH_Handle_t IOHandle, D0297_SearchParams_t *Params)
{
/*
#ifdef STTUNER_DEBUG_MODULE_CABDRV_DRV0297
   const char *identity = "STTUNER drv0297.c Drv0297_CheckData()";
#endif
*/
    if ( STTUNER_IOREG_GetField(DeviceMap, IOHandle, F0297_SYNCSTATE) )
    {
        Params->State = E297_DATAOK;
    }
    else
    {
        Params->State = E297_NODATA;
    }

/*
#ifdef STTUNER_DEBUG_MODULE_CABDRV_DRV0297
    STTBX_Print(("%s\n", identity));
#endif
*/

    return(Params->State);
}


/*----------------------------------------------------
 FUNCTION      Drv0297_InitParams
 ACTION
 PARAMS IN     NONE
 PARAMS OUT    NONE
 RETURN        NONE
------------------------------------------------------*/
void Drv0297_InitParams(STTUNER_IOREG_DeviceMap_t *DeviceMap, IOARCH_Handle_t IOHandle)
{
#ifdef STTUNER_DEBUG_MODULE_CABDRV_DRV0297
   const char *identity = "STTUNER drv0297.c Drv0297_InitParams()";
#endif
    int idB ;
    int iQAM ;

    /*
    Driv0297CN[iQAM][idB] init

    This table is used for the C/N estimation (performed in the
    Driv0297CNEstimator routine).
    Driv0297CNB[iQAM][idB] gives the C/N estimated value for
    a given iQAM QAM size and idB C/N ratio.
    */
    for (idB = 0 ; idB < 40; idB++)
        for (iQAM = 0 ; iQAM < 5 ; iQAM++)
            Driv0297CN[iQAM][idB] = 100000;
    /* QAM = 16 */
    iQAM = 0 ;
    for (idB = 0 ; idB < 15 ; idB++)
        Driv0297CN[iQAM][idB] = 10500 + (15-idB)*1000;
    Driv0297CN[iQAM][15] = 10500 ;
    Driv0297CN[iQAM][16] =  9000 ;
    Driv0297CN[iQAM][17] =  8120 ;
    Driv0297CN[iQAM][18] =  7300 ;
    Driv0297CN[iQAM][19] =  6530 ;
    Driv0297CN[iQAM][20] =  5870 ;
    Driv0297CN[iQAM][21] =  5310 ;
    Driv0297CN[iQAM][22] =  4790 ;
    Driv0297CN[iQAM][23] =  4320 ;
    Driv0297CN[iQAM][24] =  3920 ;
    Driv0297CN[iQAM][25] =  3590 ;
    Driv0297CN[iQAM][26] =  3270 ;
    Driv0297CN[iQAM][27] =  3000 ;
    Driv0297CN[iQAM][28] =  2760 ;
    Driv0297CN[iQAM][29] =  2560 ;
    Driv0297CN[iQAM][30] =  2420 ;
    Driv0297CN[iQAM][31] =  2260 ;
    Driv0297CN[iQAM][32] =  2150 ;
    Driv0297CN[iQAM][33] =  2060 ;
    Driv0297CN[iQAM][34] =  1980 ;
    Driv0297CN[iQAM][35] =  1910 ;
    Driv0297CN[iQAM][36] =  1850 ;
    Driv0297CN[iQAM][37] =  1810 ;
    Driv0297CN[iQAM][38] =  1750 ;
    Driv0297CN[iQAM][39] =  1740 ;
    /* QAM = 32 */
    iQAM = 1 ;
    for (idB = 0 ; idB < 18 ; idB++)
        Driv0297CN[iQAM][idB] = 10500 + (18-idB)*1000;
    Driv0297CN[iQAM][18] = 10500 ;
    Driv0297CN[iQAM][19] =  9120 ;
    Driv0297CN[iQAM][20] =  8100 ;
    Driv0297CN[iQAM][21] =  7300 ;
    Driv0297CN[iQAM][22] =  6560 ;
    Driv0297CN[iQAM][23] =  5930 ;
    Driv0297CN[iQAM][24] =  5380 ;
    Driv0297CN[iQAM][25] =  4920 ;
    Driv0297CN[iQAM][26] =  4520 ;
    Driv0297CN[iQAM][27] =  4130 ;
    Driv0297CN[iQAM][28] =  3800 ;
    Driv0297CN[iQAM][29] =  3520 ;
    Driv0297CN[iQAM][30] =  3290 ;
    Driv0297CN[iQAM][31] =  3120 ;
    Driv0297CN[iQAM][32] =  2980 ;
    Driv0297CN[iQAM][33] =  2850 ;
    Driv0297CN[iQAM][34] =  2730 ;
    Driv0297CN[iQAM][35] =  2650 ;
    Driv0297CN[iQAM][36] =  2560 ;
    Driv0297CN[iQAM][37] =  2510 ;
    Driv0297CN[iQAM][38] =  2480 ;
    Driv0297CN[iQAM][39] =  2440 ;
    /* QAM = 64 */
    iQAM = 2 ;
    for (idB = 0 ; idB < 21 ; idB++)
        Driv0297CN[iQAM][idB] = 10500 + (21-idB)*1000;
    Driv0297CN[iQAM][21] = 10500 ;
    Driv0297CN[iQAM][22] =  9300 ;
    Driv0297CN[iQAM][23] =  8400 ;
    Driv0297CN[iQAM][24] =  7600 ;
    Driv0297CN[iQAM][25] =  6850 ;
    Driv0297CN[iQAM][26] =  6250 ;
    Driv0297CN[iQAM][27] =  5750 ;
    Driv0297CN[iQAM][28] =  5250 ;
    Driv0297CN[iQAM][29] =  4850 ;
    Driv0297CN[iQAM][30] =  4450 ;
    Driv0297CN[iQAM][31] =  4200 ;
    Driv0297CN[iQAM][32] =  3900 ;
    Driv0297CN[iQAM][33] =  3700 ;
    Driv0297CN[iQAM][34] =  3550 ;
    Driv0297CN[iQAM][35] =  3400 ;
    Driv0297CN[iQAM][36] =  3300 ;
    Driv0297CN[iQAM][37] =  3200 ;
    Driv0297CN[iQAM][38] =  3130 ;
    Driv0297CN[iQAM][39] =  3060 ;
    /* QAM = 128 */
    iQAM = 3 ;
    for (idB = 0 ; idB < 24 ; idB++)
        Driv0297CN[iQAM][idB] = 10500 + (24-idB)*1000;
    Driv0297CN[iQAM][24] = 10500 ;
    Driv0297CN[iQAM][25] =  9660 ;
    Driv0297CN[iQAM][26] =  8780 ;
    Driv0297CN[iQAM][27] =  7970 ;
    Driv0297CN[iQAM][28] =  7310 ;
    Driv0297CN[iQAM][29] =  6750 ;
    Driv0297CN[iQAM][30] =  6220 ;
    Driv0297CN[iQAM][31] =  5810 ;
    Driv0297CN[iQAM][32] =  5430 ;
    Driv0297CN[iQAM][33] =  5090 ;
    Driv0297CN[iQAM][34] =  4880 ;
    Driv0297CN[iQAM][35] =  4700 ;
    Driv0297CN[iQAM][36] =  4500 ;
    Driv0297CN[iQAM][37] =  4340 ;
    Driv0297CN[iQAM][38] =  4270 ;
    Driv0297CN[iQAM][39] =  4150 ;
    /* QAM = 256 */
    iQAM = 4 ;
    for (idB = 0 ; idB < 28 ; idB++)
        Driv0297CN[iQAM][idB] = 10500 + (28-idB)*1000;
    Driv0297CN[iQAM][28] = 10500 ;
    Driv0297CN[iQAM][29] =  9600 ;
    Driv0297CN[iQAM][30] =  9000 ;
    Driv0297CN[iQAM][31] =  8400 ;
    Driv0297CN[iQAM][32] =  7800 ;
    Driv0297CN[iQAM][33] =  7400 ;
    Driv0297CN[iQAM][34] =  7100 ;
    Driv0297CN[iQAM][35] =  6700 ;
    Driv0297CN[iQAM][36] =  6550 ;
    Driv0297CN[iQAM][37] =  6370 ;
    Driv0297CN[iQAM][38] =  6200 ;
    Driv0297CN[iQAM][39] =  6150 ;

#ifdef STTUNER_DEBUG_MODULE_CABDRV_DRV0297
    STTBX_Print(("%s\n", identity));
#endif
}

/*----------------------------------------------------
 FUNCTION      Drv0297_InitSearch
 ACTION        Set Params fields that are used by the search algorithm
 PARAMS IN
 PARAMS OUT
 RETURN        NONE
------------------------------------------------------*/
void Drv0297_InitSearch(STTUNER_tuner_instance_t *TunerInstance, D0297_StateBlock_t *StateBlock,
                        STTUNER_Modulation_t Modulation, int Frequency, int SymbolRate, STTUNER_Spectrum_t Spectrum,
                        BOOL ScanExact)
{
#ifdef STTUNER_DEBUG_MODULE_CABDRV_DRV0297
   const char *identity = "STTUNER drv0297.c Drv0297_InitSearch()";
#endif
    U32 BandWidth;
    ST_ErrorCode_t Error;
    TUNER_Status_t TunerStatus;

    /* Obtain current tuner status */
    Error = (TunerInstance->Driver->tuner_GetStatus)(TunerInstance->DrvHandle, &TunerStatus);

    /* Select closest bandwidth for tuner */ /* cast to U32 type to match function argument & eliminate compiler warning --SFS */
    Error = (TunerInstance->Driver->tuner_SetBandWidth)( TunerInstance->DrvHandle,
                                                        (U32)( Drv0297_CarrierWidth(SymbolRate, StateBlock->Params.RollOff) /1000 + 3000),
                                                        &BandWidth);

    /*
    --- Set Parameters
    */
    StateBlock->Params.Frequency    = Frequency;
    StateBlock->Params.SymbolRate   = SymbolRate;
    StateBlock->Params.TunerBW  

⌨️ 快捷键说明

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