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

📄 d0297.c

📁 st7710的tuner标准驱动
💻 C
📖 第 1 页 / 共 4 页
字号:
        STTBX_Print(("%s fail reset device\n", identity));
#endif
        SEM_UNLOCK(Lock_InitTermOpenClose);
        return(Error);
    }

    /* Set capabilties */
    Capability->FECAvail        = 0;
    Capability->ModulationAvail = STTUNER_MOD_QAM    |
                                  STTUNER_MOD_16QAM  |
                                  STTUNER_MOD_32QAM  |
                                  STTUNER_MOD_64QAM  |
                                  STTUNER_MOD_128QAM |
                                  STTUNER_MOD_256QAM;   /* direct mapping to STTUNER_Modulation_t */

    Capability->J83Avail        = STTUNER_J83_A |
                                  STTUNER_J83_C;

    Capability->AGCControl      = FALSE;
    Capability->SymbolMin       = STV0297_SYMBOLMIN;        /*   1 MegaSymbols/sec (e.g) */
    Capability->SymbolMax       = STV0297_SYMBOLMAX;        /*  11 MegaSymbols/sec (e.g) */

    Capability->BerMax           = 0;
    Capability->SignalQualityMax = STV0297_MAX_SIGNAL_QUALITY;
    Capability->AgcMax           = STV0297_MAX_AGC;

    /* Setup stateblock */
    Instance->StateBlock.ScanMode     = DEF0297_CHANNEL;
    Instance->StateBlock.lastAGC2Coef = 1;
    Instance->StateBlock.Ber[0] = 0;
    Instance->StateBlock.Ber[1] = 50;                       /* Default Ratio for BER */
    Instance->StateBlock.Ber[2] = 0;
    Instance->StateBlock.CNdB = 0;
    Instance->StateBlock.SignalQuality = 0;

    /* TS output mode */
    switch (Instance->TSOutputMode)
    {
         case STTUNER_TS_MODE_SERIAL:
            /*
            --- For Eval 5518 set jumpers to
            ---     JP08    off Serial
            ---     JP18    off FrontEnd
            ---     JP10    on  Inv TS/CLK
            ---     JP09    on  NotCLK
            ---     JP26    on  D0/D7
            */
         
            Error |= STTUNER_IOREG_SetRegister(&Instance->DeviceMap, Instance->IOHandle, R0297_OUTFORMAT_0, 0x47);
            Error |= STTUNER_IOREG_SetRegister(&Instance->DeviceMap, Instance->IOHandle, R0297_OUTFORMAT_1, 0x00);
            Error |= STTUNER_IOREG_SetRegister(&Instance->DeviceMap, Instance->IOHandle, R0297_OUTFORMAT_2, 0x00);
            Error |= STTUNER_IOREG_SetRegister(&Instance->DeviceMap, Instance->IOHandle, R0297_CTRL_4, 0x22);
            break;

        case STTUNER_TS_MODE_DVBCI:
            /*
            --- For Eval 5518 set jumpers to
            ---     JP08    on  Serial
            ---     JP18    off FrontEnd
            ---     JP10    off Inv TS/CLK
            ---     JP09    on  NotCLK
            ---     JP26    on  D0/D7
            */
          
            Error |= STTUNER_IOREG_SetRegister(&Instance->DeviceMap, Instance->IOHandle, R0297_OUTFORMAT_0, 0x43);
            Error |= STTUNER_IOREG_SetRegister(&Instance->DeviceMap, Instance->IOHandle, R0297_OUTFORMAT_1, 0x40);
            Error |= STTUNER_IOREG_SetRegister(&Instance->DeviceMap, Instance->IOHandle, R0297_OUTFORMAT_2, 0x12);
            Error |= STTUNER_IOREG_SetRegister(&Instance->DeviceMap, Instance->IOHandle, R0297_CTRL_4, 0x00);      /* ckx2dis = 0, ckx2sel = 0 */
            break;

        case STTUNER_TS_MODE_PARALLEL:
        case STTUNER_TS_MODE_DEFAULT:
        default:
            /*
            --- For Eval 5512 set jumpers to
            ---     JP26    off
            ---     JP27    on
            ---     JP28    on
            ---     JP29    on
            */
            /*
            --- For Eval 5518 set jumpers to
            ---     JP08    on  Serial
            ---     JP18    off FrontEnd
            ---     JP10    off Inv TS/CLK
            ---     JP09    on  NotCLK
            ---     JP26    on  D0/D7
            */
          
            Error |= STTUNER_IOREG_SetRegister(&Instance->DeviceMap, Instance->IOHandle, R0297_OUTFORMAT_0, 0x43);
            Error |= STTUNER_IOREG_SetRegister(&Instance->DeviceMap, Instance->IOHandle, R0297_OUTFORMAT_1, 0x00);
            Error |= STTUNER_IOREG_SetRegister(&Instance->DeviceMap, Instance->IOHandle, R0297_OUTFORMAT_2, 0x00);
            Error |= STTUNER_IOREG_SetRegister(&Instance->DeviceMap, Instance->IOHandle, R0297_CTRL_4, 0x04);
            break;
    }

    /* Set default error count mode, bit error rate */
    STTUNER_IOREG_SetField(&Instance->DeviceMap, Instance->IOHandle, F0297_BERT_ON, 0); /* Ber count Off */
    STTUNER_IOREG_SetField(&Instance->DeviceMap, Instance->IOHandle, F0297_ERR_MODE, 0);

    /* finally (as nor more errors to check for, allocate handle */
    Instance->TopLevelHandle = OpenParams->TopLevelHandle;
    *Handle = (U32)Instance;

#ifdef STTUNER_DEBUG_MODULE_CABDRV_D0297
    STTBX_Print(("%s opened ok\n", identity));
#endif

    SEM_UNLOCK(Lock_InitTermOpenClose);
    Error |= Instance->DeviceMap.Error;

    Instance->DeviceMap.Error = ST_NO_ERROR;

    return(Error);
}



/* ----------------------------------------------------------------------------
Name: demod_d0297_Close()

Description:

Parameters:

Return Value:
---------------------------------------------------------------------------- */
ST_ErrorCode_t demod_d0297_Close(DEMOD_Handle_t Handle, DEMOD_CloseParams_t *CloseParams)
{
#ifdef STTUNER_DEBUG_MODULE_CABDRV_D0297
   const char *identity = "STTUNER d0297.c demod_d0297_Close()";
#endif
    ST_ErrorCode_t Error = ST_NO_ERROR;
    D0297_InstanceData_t     *Instance;

    /* private driver instance data */
    Instance = D0297_GetInstFromHandle(Handle);

    if(Installed == FALSE)
    {
#ifdef STTUNER_DEBUG_MODULE_CABDRV_D0297
        STTBX_Print(("%s fail driver not installed\n", identity));
#endif
        return(STTUNER_ERROR_INITSTATE);
    }

    SEM_LOCK(Lock_InitTermOpenClose);

    /* ---------- check that at least one init has taken place ---------- */
    if(InstanceChainTop == NULL)
    {
#ifdef STTUNER_DEBUG_MODULE_CABDRV_D0297
        STTBX_Print(("%s fail nothing initalized\n", identity));
#endif
        SEM_UNLOCK(Lock_InitTermOpenClose);
        return(STTUNER_ERROR_INITSTATE);
    }

    if(Instance->TopLevelHandle == STTUNER_MAX_HANDLES)
    {
#ifdef STTUNER_DEBUG_MODULE_CABDRV_D0297
        STTBX_Print(("%s fail driver instance not open\n", identity));
#endif
        SEM_UNLOCK(Lock_InitTermOpenClose);
        return(ST_ERROR_OPEN_HANDLE);
    }

    Instance->TopLevelHandle = STTUNER_MAX_HANDLES;

#ifdef STTUNER_DEBUG_MODULE_CABDRV_D0297
    STTBX_Print(("%s closed\n", identity));
#endif

    SEM_UNLOCK(Lock_InitTermOpenClose);
    return(Error);
}


/* ----------------------------------------------------------------------------
Name: demod_d0297_IsAnalogCarrier()

Description:

Parameters:

Return Value:
---------------------------------------------------------------------------- */
ST_ErrorCode_t demod_d0297_IsAnalogCarrier(DEMOD_Handle_t Handle, BOOL *IsAnalog)
{
    ST_ErrorCode_t Error = ST_ERROR_FEATURE_NOT_SUPPORTED;
    return(Error);
}


/* ----------------------------------------------------------------------------
Name: demod_d0297_GetSignalQuality()

Description:

Parameters:

Return Value:
---------------------------------------------------------------------------- */
ST_ErrorCode_t demod_d0297_GetSignalQuality(DEMOD_Handle_t Handle, U32  *SignalQuality_p, U32 *Ber_p)
{
#ifdef STTUNER_DEBUG_MODULE_CABDRV_D0297
    const char *identity = "STTUNER d0297.c demod_d0297_GetSignalQuality()";
    clock_t                     time_start, time_end;
#endif
    ST_ErrorCode_t              Error = ST_NO_ERROR;
    STTUNER_tuner_instance_t    *TunerInstance;
    STTUNER_InstanceDbase_t     *Inst;
    D0297_InstanceData_t        *Instance;
    int                         Mean, CNdB100;
    int                         ApplicationBERCount;
    BOOL                        IsLocked;

    /*
    --- Set parameters
    */
#ifdef STTUNER_DEBUG_MODULE_CABDRV_D0297
    time_start = time_now();
#endif
    *SignalQuality_p = 0;
    *Ber_p = 0;
    Mean = 0;
    CNdB100 = 0;
    ApplicationBERCount = 0;    /* Bit Error counter */


    /* private driver instance data */
    Instance = D0297_GetInstFromHandle(Handle);
    /* top level public instance data */
    Inst = STTUNER_GetDrvInst();
    /* get the tuner instance for this driver from the top level handle */
    TunerInstance = &Inst[Instance->TopLevelHandle].Cable.Tuner;

    /*
    --- Get Carrier And Data (TS) status
    */
    Error = demod_d0297_IsLocked(Handle, &IsLocked);
    if ( Error == ST_NO_ERROR && IsLocked )
    {
        /*
        --- Read Blk Counter
        */
        Reg0297_StopBlkCounter(&Instance->DeviceMap, Instance->IOHandle);

        /*
        --- Read noise estimations and BER
        */
        Driv0297BertCount(&Instance->DeviceMap, Instance->IOHandle, &Instance->StateBlock,
                            TunerInstance, &ApplicationBERCount, Instance->StateBlock.Ber);
        Driv0297CNEstimator(&Instance->DeviceMap, Instance->IOHandle, &Instance->StateBlock,
                            TunerInstance, &Mean, &CNdB100, &Instance->StateBlock.SignalQuality);

        /*
        --- Restart Blk Counter
        */
        Reg0297_StartBlkCounter(&Instance->DeviceMap, Instance->IOHandle);

        /*
        --- Set results
        */
        *SignalQuality_p = Instance->StateBlock.SignalQuality;
        if ( Instance->StateBlock.Ber[2] == 0 && ApplicationBERCount != 0 )
        {
            *Ber_p = ApplicationBERCount;           /* Set BER to counter (no time to count) */
        }
        else
        {
            *Ber_p = Instance->StateBlock.Ber[2];
        }
    }

#ifdef STTUNER_DEBUG_MODULE_CABDRV_D0297
    time_end = time_now();
    STTBX_Print(("%s Mean=%d CN=%d dBx100 (%d %%) (%u ms)\n", identity,
                Mean, CNdB100, Instance->StateBlock.SignalQuality,
                ((time_minus(time_end, time_start))*1000)/ST_GetClocksPerSecond()
                ));
/*
    STTBX_Print(("%s BERCount=%d BER[0..2] (cnt %d sat %d rate %d 10E-6)\n", identity,
                ApplicationBERCount,
                Instance->StateBlock.Ber[0],
                Instance->StateBlock.Ber[1],
                Instance->StateBlock.Ber[2]));
*/
    STTBX_Print(("%s SignalQuality %u %% Ber %u 10E-6\n", identity, *SignalQuality_p, *Ber_p));
    STTBX_Print(("%s BlkCounter %9d CorrBlk %9d UncorrBlk %9d\n", identity,
                Instance->StateBlock.BlkCounter,
                Instance->StateBlock.CorrBlk,
                Instance->StateBlock.UncorrBlk
                ));
#endif

    Error |= Instance->DeviceMap.Error;
    Instance->DeviceMap.Error = ST_NO_ERROR;

    return(Error);
}



/* ----------------------------------------------------------------------------
Name: demod_d0297_GetModulation()

Description:

Parameters:

Return Value:
---------------------------------------------------------------------------- */
ST_ErrorCode_t demod_d0297_GetModulation(DEMOD_Handle_t Handle, STTUNER_Modulation_t *Modulation)
{
/*
#ifdef STTUNER_DEBUG_MODULE_CABDRV_D0297
   const char *identity = "STTUNER d0297.c demod_d0297_GetModulation()";
#endif
*/
    ST_ErrorCode_t Error = ST_NO_ERROR;
    D0297_InstanceData_t *Instance;

    /* private driver instance data */
    Instance = D0297_GetInstFromHandle(Handle);

    /* This implementation of the DEMOD device only supports one type of modulation */
    *Modulation = Reg0297_GetQAMSize(&Instance->DeviceMap, Instance->IOHandle);

/*
#ifdef STTUNER_DEBUG_MODULE_CABDRV_D0297
    STTBX_Print(("%s Modulation=%u\n", identity, *Modulation));
#endif
*/
    Error |= Instance->DeviceMap.Error;
    Instance->DeviceMap.Error = ST_NO_ERROR;

    return(Error);
}



/* ----------------------------------------------------------------------------
Name: demod_d0297_GetAGC()

Description:

Parameters:

Return Value:
---------------------------------------------------------------------------- */
ST_ErrorCode_t demod_d0297_GetAGC(DEMOD_Handle_t Handle, S16  *Agc)
{
#ifdef STTUNER_DEBUG_MODULE_CABDRV_D0297
   const char *identity = "STTUNER d0297.c demod_d0297_GetAGC()";
#endif
    ST_ErrorCode_t Error = ST_NO_ERROR;
    D0297_InstanceData_t *Instance;

    /* private driver instance data */
    Instance = D0297_GetInstFromHandle(Handle);

    *Agc   = (S16)(0xFFFF & Reg0297_GetAGC(&Instance->DeviceMap, Instance->IOHandle));

#ifdef STTUNER_DEBUG_MODULE_CABDRV_D0297
    STTBX_Print(("%s Agc=%u\n", identity, *Agc));
#endif

    Error |= Instance->DeviceMap.Error;
    Instance->DeviceMap.Error = ST_NO_ERROR;

    return(Error);
}



/* ----------------------------------------------------------------------------
Name: demod_d0297_GetFECRates()

Description:

Parameters:

Return Value:
---------------------------------------------------------------------------- */
ST_ErrorCode_t demod_d0297_GetFECRates(DEMOD_Handle_t Handle, STTUNER_FECRate_t *FECRates)
{
    ST_ErrorCode_t Error = ST_ERROR_FEATURE_NOT_SUPPORTED;
    return(Error);
}



/* ----------------------------------------------------------------------------
Name: demod_d0297_IsLocked()

Description:

Parameters:

Return Value:
---------------------------------------------------------------------------- */
ST_ErrorCode_t demod_d0297_IsLocked(DEMOD_Handle_t Handle, BOOL *IsLocked)
{
#ifdef STTUNER_DEBUG_MODULE_CABDRV_D0297
   const char *identity = "STTUNER d0297.c demod_d0297_IsLocked()";
#endif
    ST_ErrorCode_t          Error = ST_NO_ERROR;
    U8                      Version;
    D0297_InstanceData_t    *Instance;
    D0297_SignalType_t      SignalType;

    /* private driver instance data */
    Instance = D0297_GetInstFromHandle(Handle);

    *IsLocked = FALSE;

    /*
    --- Get Version Id (In fact to test I2C Access
    */
    Version = Reg0297_GetSTV0297Id(&Instance->DeviceMap, Instance->IOHandle);
    if ( Version !=  STV0297_DEVICE_VERSION)
    {
        return(ST_ERROR_UNKNOWN_DEVICE);
    }

    /*
    --- Get Information from demod
    */
    SignalType = Drv0297_CheckAgc(&Instance->DeviceMap, Instance->IOHandle, &Instance->StateBlock.Params);
    if (SignalType == E297_AGCOK)
    {
        SignalType = Drv0297_CheckData(&Instance->DeviceMap, Instance->IOHandle, &Instance->StateBlock.Params);
        if (SignalType == E297_DATAOK)
        {
            Instance->StateBlock.Result.SignalType = E297_LOCKOK;
            *IsLocked = TRUE;
        }
        else
        {
#ifdef STTUNER_DEBUG_MODULE_CABDRV_D0297
            STTBX_Print(("%s FRONT END IS UNLOCKED !!!! NO DATA\n", identity));
#endif
            /*
            --- Update Satus
            */
            Instance->StateBlock.Result.SignalType = SignalType;
        }
    }
    else
    {

⌨️ 快捷键说明

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