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

📄 d0361.c

📁 st7710的tuner标准驱动
💻 C
📖 第 1 页 / 共 5 页
字号:
/*R_AUX_CLK*/        0x1C,
/*R_RESERVED_1*/     0x00,
/*R_RESERVED_2*/     0x00,
/*R_RESERVED_3*/     0x00,
/*R_AGC2MAX*/        0x8C,


/*R_AGC2MIN*/        0x14,
/*R_AGC1MAX*/        0xFF,
/*R_AGC1MIN*/        0x6B,
/*R_AGCR*/           0xBC,
/*R_AGC2TH*/         0x50,


/*R_AGC12C*/         0x40,
/*R_AGCCTRL1*/       0x85,
/*R_AGCCTRL2*/       0x18,
/*R_AGC1VAL1*/       0xFF,
/*R_AGC1VAL2*/       0x0F,



/*R_AGC2VAL1*/       0xFA,
/*R_AGC2VAL2*/       0x01,
/*R_AGC2PGA*/        0x00,
/*R_OVF_RATE1*/      0x00,
/*R_OVF_RATE2*/      0x00,


/*R_GAIN_SRC1*/      0xFD,
/*R_GAIN_SRC2*/      0xAC,
/*R_INC_DEROT1*/     0x55,
/*R_INC_DEROT2*/     0x4B,
/*R_PPM_CPAMP_DIR*/  0x2C, /*0x5D*/



/*R_PPM_CPAMP_INV*/  0x00,
/*R_FREESTFE_1*/     0x03,
/*R_FREESTFE_2*/     0x1C,
/*R_DCOFFSET*/       0x06,
/*R_EN_PROCESS*/     0x01,
/*R_RESERVED_4*/     0xFF,


/*R_RESERVED_5*/     0x00,
/*R_RESERVED_6*/     0x80,
/*R_RESERVED_7*/     0x1D,
/*R_RESERVED_8*/     0x29,
/*R_RESERVED_9*/     0x14,


/*R_RESERVED_10*/    0xFE,
/*R_EPQ*/            0x02,
/*R_EPQAUTO*/        0x01,
/*R_CHP_TAPS*/       0x03,/* 0x01 for 2k mode and 0x03 for 8K mode*/
/*R_CHP_DYN_COEFF*/  0x00,


/*R_PPM_STATE_MAC*/  0x23,
/*R_INR_THRESHOLD*/  0x09,
/*R_COR_CTL*/        0x20,
/*R_COR_STAT*/       0xF6,
/*R_COR_INTEN*/      0x00,


/*R_COR_INTSTAT*/    0x3D,
/*R_COR_MODEGUARD*/  0x00,
/*R_AGC_CTL*/        0x18,
/*R_RESERVED_11*/    0x00,
/*R_RESERVED_12*/    0x00,


/*R_AGC_TARGET*/     0x1E,
/*R_AGC_GAIN1*/      0xFB,
/*R_AGC_GAIN2*/      0x1A,
/*R_RESERVED_13*/    0x00,
/*R_RESERVED_14*/    0x00,


/*R_RESERVED_15*/    0x00,
/*R_CAS_CTL*/        0x40,
/*R_CAS_FREQ*/       0xB3,
/*R_CAS_DAGCGAIN*/   0x10,
/*R_SYR_CTL*/        0x04,/*** to switch on the automic epq****/


/*R_SYR_STAT*/       0x13,
/*R_RESERVED_16*/    0x00,
/*R_RESERVED_17*/    0x00,
/*R_SYR_OFFSET1*/    0x00,
/*R_SYR_OFFSET2*/    0x00,


/*R_RESERVED_18*/    0x00,
/*R_SCR_CTL*/        0x00,
/*R_PPM_CTL1*/       0x38,
/*R_TRL_CTL*/        0x94,/* 0x14 */
/*R_TRL_NOMRATE1*/   0xAB, /*0xAC*/



/*R_TRL_NOMRATE2*/   0x56,
/*R_TRL_TIME1*/      0x3C,
/*R_TRL_TIME2*/      0x01,
/*R_CRL_CTL*/        0x4F,
/*R_CRL_FREQ1*/      0x30,


/*R_CRL_FREQ2*/      0xBE,
/*R_CRL_FREQ3*/      0xFE,
/*R_CHC_CTL1*/       0x11,
/*R_CHC_SNR*/        0xC3,
/*R_BDI_CTL*/        0x00,


/*R_DMP_CTL*/        0x00,
/*R_TPS_RCVD1*/      0x31,
/*R_TPS_RCVD2*/      0x02,
/*R_TPS_RCVD3*/      0x01,
/*R_TPS_RCVD4*/      0x30,


/*R_TPS_ID_CELL1*/   0x00,
/*R_TPS_ID_CELL2*/   0x00,
/*R_RESERVED_19*/    0x01,
/*R_RESERVED_20*/    0x02,
/*R_RESERVED_21*/    0x02,


/*R_TPS_CTL*/        0x00,
/*R_CTL_FFTOSNUM*/   0x10,
/*R_TESTSELECT*/     0x0C,
/*R_MSC_REV*/        0x0A,
/*R_PIR_CTL*/        0x00,


/*R_SNR_CARRIER1*/   0xA9,
/*R_SNR_CARRIER2*/   0x86,
/*R_RESERVED_22*/    0x30,
/*R_RESERVED_23*/    0x00,
/*R_RESERVED_24*/    0x00,


/*R_RESERVED_25*/    0x00,
/*R_RESERVED_26*/    0x00,
/*R_RESERVED_27*/    0x00,
/*R_RESERVED_28*/    0x00,
/*R_RESERVED_29*/    0x00,


/*R_RESERVED_30*/    0x00,
/*R_RESERVED_31*/    0x00,
/*R_VTH0*/           0x1E,
/*R_VTH1*/           0x14,
/*R_VTH2*/           0x0F,


/*R_VTH3*/           0x09,
/*R_RESERVED_32*/    0x00,
/*R_VTH5*/           0x05,
/*R_RESERVED_33*/    0x00,
/*R_VITPROG*/        0x92,


/*R_PR*/             0xAF,
/*R_VSEARCH*/        0x30,
/*R_RS*/             0xBC,
/*R_RSOUT*/          0x05,
/*R_ERRCTRL1*/       0x13,/**** To make byte event at a rate of 2*10e+18***/


/*R_ERRCNTM1*/       0x00,
/*R_ERRCNTL1*/       0x00,
/*R_ERRCTRL2*/       0xB3,
/*R_ERRCNTM2*/       0x00,
/*R_ERRCNTL2*/       0x00,


/*R_RESERVED_34*/    0x00,
/*R_VERROR*/         0x00,
/*R_ERRCTRL3*/       0x12,
/*R_ERRCNTM3*/       0x00,
/*R_ERRCNTL3*/       0x00,


/*R_RESERVED_35*/    0x00,
/*R_RESERVED_36*/    0x03,
/*R_RESERVED_37*/    0x00,
/*R_RESERVED_38*/    0x03,
/*R_LNBRX*/          0x80, /*0xC0*/


/*R_RESERVED_39*/    0xB0,
/*R_RESERVED_40*/    0x07,
/*R_RESERVED_41*/    0x00,
/*R_ANACTRL*/        0x00,
/*R_RESERVED_42*/    0x00,
 

/*R_RESERVED_43*/    0x00,
/*R_RESERVED_44*/    0x00,
/*R_RESERVED_45*/    0x00,
/*R_RESERVED_46*/    0x00,
/*R_RESERVED_47*/    0x00,


/*R_RESERVED_48*/    0x00,
/*R_RESERVED_49*/    0x00,
/*R_RESERVED_50*/    0x00,
/*R_CONSTMODE*/      0x02,
/*R_CONSTCARR1*/     0xD2,


/*R_CONSTCARR2*/     0x04,
/*R_ICONSTEL*/       0xDB,
/*R_QCONSTEL*/       0x8,
/*R_RESERVED_51*/    0x00,
/*R_RESERVED_52*/    0x00,



/*R_RESERVED_53*/    0x00,
/*R_RESERVED_54*/    0x00,
/*R_RF_AGC1*/        0x81,
/*R_RF_AGC2*/        0x80,
/*R_RESERVED_55*/    0x08,         


/*R_ANACTRL2*/       0x00,
/*R_PLLMDIV*/        0x00,
/*R_PLLNDIV*/        0x03,
/*R_PLLSETUP*/       0x17,
/*R_ANADIGCTRL*/     0x00,
/*R_TSTBIST*/        0x00

	        };/** end of array**/
#endif	        
/* Private types/constants ------------------------------------------------ */

#define ANALOG_CARRIER_DETECT_SYMBOL_RATE   5000000
#define ANALOG_CARRIER_DETECT_AGC2_VALUE    25

/* Device capabilities */
#define MAX_AGC                         255
#define MAX_SIGNAL_QUALITY              100
#define MAX_BER                         200000







/* private variables ------------------------------------------------------- */
#if defined (ST_OS21) || defined(ST_OSLINUX)
static semaphore_t *Lock_InitTermOpenClose; /* guard calls to the functions */
#else
static semaphore_t Lock_InitTermOpenClose; /* guard calls to the functions */
#endif
static BOOL        Installed = FALSE;



/* instance chain, the default boot value is invalid, to catch errors */
static D0361_InstanceData_t *InstanceChainTop = (D0361_InstanceData_t *)0x7fffffff;

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

int FE_361_PowOf2(int number);

/* API */
ST_ErrorCode_t demod_d0361_Init(ST_DeviceName_t *DeviceName, DEMOD_InitParams_t *InitParams);
ST_ErrorCode_t demod_d0361_Term(ST_DeviceName_t *DeviceName, DEMOD_TermParams_t *TermParams);

ST_ErrorCode_t demod_d0361_Open (ST_DeviceName_t *DeviceName, DEMOD_OpenParams_t  *OpenParams, DEMOD_Capability_t *Capability, DEMOD_Handle_t *Handle);
ST_ErrorCode_t demod_d0361_Close(DEMOD_Handle_t  Handle, DEMOD_CloseParams_t *CloseParams);

ST_ErrorCode_t demod_d0361_GetTunerInfo    (DEMOD_Handle_t Handle, STTUNER_TunerInfo_t *TunerInfo_p);
ST_ErrorCode_t demod_d0361_GetSignalQuality(DEMOD_Handle_t Handle, U32  *SignalQuality_p, U32 *Ber);
ST_ErrorCode_t demod_d0361_GetModulation   (DEMOD_Handle_t Handle, STTUNER_Modulation_t *Modulation);
ST_ErrorCode_t demod_d0361_GetAGC          (DEMOD_Handle_t Handle, S16                  *Agc);
ST_ErrorCode_t demod_d0361_GetMode         (DEMOD_Handle_t Handle, STTUNER_Mode_t       *Mode);
ST_ErrorCode_t demod_d0361_GetGuard        (DEMOD_Handle_t Handle, STTUNER_Guard_t      *Guard);
ST_ErrorCode_t demod_d0361_GetFECRates     (DEMOD_Handle_t Handle, STTUNER_FECRate_t    *FECRates);
ST_ErrorCode_t demod_d0361_IsLocked        (DEMOD_Handle_t Handle, BOOL                 *IsLocked);
ST_ErrorCode_t demod_d0361_Tracking        (DEMOD_Handle_t Handle, BOOL ForceTracking,   U32 *NewFrequency, BOOL *SignalFound);
ST_ErrorCode_t demod_d0361_ScanFrequency   (DEMOD_Handle_t  Handle,
                                            U32  InitialFrequency,
                                            U32  SymbolRate,
                                            U32  MaxOffset,
                                            U32  TunerStep,
                                            U8   DerotatorStep,
                                            BOOL *ScanSuccess,
                                            U32  *NewFrequency,
                                            U32  Mode,
                                            U32  Guard,
                                            U32  Force,
                                            U32  Hierarchy,
                                            U32  Spectrum,
                                            U32  FreqOff,
                                            U32  ChannelBW,
                                            S32  EchoPos);
ST_ErrorCode_t demod_d0361_ioctl           (DEMOD_Handle_t Handle, U32 Function, void *InParams, void *OutParams,
                                             STTUNER_Da_Status_t *Status);

/* I/O API */
ST_ErrorCode_t demod_d0361_ioaccess(DEMOD_Handle_t Handle, IOARCH_Handle_t IOHandle,
                  STTUNER_IOARCH_Operation_t Operation, U16 SubAddr, U8 *Data, U32 TransferSize, U32 Timeout);
/* For TPS CellID extraction */
ST_ErrorCode_t demod_d0361_GetTPSCellId(DEMOD_Handle_t Handle, U16  *TPSCellId);

/* For STANDBY API mode */ 
ST_ErrorCode_t demod_d0361_StandByMode(DEMOD_Handle_t Handle, STTUNER_StandByMode_t PowerMode);

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

D0361_InstanceData_t *D0361_GetInstFromHandle(DEMOD_Handle_t Handle);

/* ----------------------------------------------------------------------------
Name: STTUNER_DRV_DEMOD_STV0361_Install()

Description:
    install a terrestrial device driver into the demod database.

Parameters:

Return Value:
---------------------------------------------------------------------------- */
ST_ErrorCode_t STTUNER_DRV_DEMOD_STV0361_Install(STTUNER_demod_dbase_t *Demod)
{
#ifdef STTUNER_DEBUG_MODULE_TERDRV_D0361
   const char *identity = "STTUNER d0361.c STTUNER_DRV_DEMOD_STV0361_Install()";
#endif
    ST_ErrorCode_t Error = ST_NO_ERROR;

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

#ifdef STTUNER_DEBUG_MODULE_TERDRV_D0361
    STTBX_Print(("%s installing ter:demod:STV0361...", identity));
#endif

    /* mark ID in database */
    Demod->ID = STTUNER_DEMOD_STV0361;

    /* map API */
    Demod->demod_Init = demod_d0361_Init;
    Demod->demod_Term = demod_d0361_Term;

    Demod->demod_Open  = demod_d0361_Open;
    Demod->demod_Close = demod_d0361_Close;

    Demod->demod_IsAnalogCarrier  = NULL;
    Demod->demod_GetTunerInfo     = demod_d0361_GetTunerInfo;
    Demod->demod_GetSignalQuality = demod_d0361_GetSignalQuality;
    Demod->demod_GetModulation    = demod_d0361_GetModulation;
    Demod->demod_GetAGC           = demod_d0361_GetAGC;
    Demod->demod_GetMode          = demod_d0361_GetMode;
    Demod->demod_GetGuard         = demod_d0361_GetGuard;
    Demod->demod_GetFECRates      = demod_d0361_GetFECRates;
    Demod->demod_IsLocked         = demod_d0361_IsLocked ;
    Demod->demod_SetFECRates      = NULL;
    Demod->demod_Tracking         = demod_d0361_Tracking;
    Demod->demod_ScanFrequency    = demod_d0361_ScanFrequency;

    Demod->demod_ioaccess = demod_d0361_ioaccess;
    Demod->demod_ioctl    = demod_d0361_ioctl;
    Demod->demod_GetTPSCellId = demod_d0361_GetTPSCellId;
    Demod->demod_StandByMode = demod_d0361_StandByMode;

    InstanceChainTop = NULL;
#if defined (ST_OS21)  || defined(ST_OSLINUX)
    Lock_InitTermOpenClose = semaphore_create_fifo(1);
#else
    semaphore_init_fifo(&Lock_InitTermOpenClose, 1);
#endif 

    Installed = TRUE;

#ifdef STTUNER_DEBUG_MODULE_TERDRV_D0361
    STTBX_Print(("ok\n"));
#endif

    return(Error);
}



/* ----------------------------------------------------------------------------
Name: STTUNER_DRV_DEMOD_STV0361_UnInstall()

Description:
    install a terrestrial device driver into the demod database.

Parameters:

Return Value:
---------------------------------------------------------------------------- */
ST_ErrorCode_t STTUNER_DRV_DEMOD_STV0361_UnInstall(STTUNER_demod_dbase_t *Demod)
{
#ifdef STTUNER_DEBUG_MODULE_TERDRV_D0361
   const char *identity = "STTUNER d0361.c STTUNER_DRV_DEMOD_STV0361_UnInstall()";
#endif
    ST_ErrorCode_t Error = ST_NO_ERROR;

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

    if(Demod->ID != STTUNER_DEMOD_STV0361)
    {
#ifdef STTUNER_DEBUG_MODULE_TERDRV_D0361
        STTBX_Print(("%s fail incorrect driver type\n", identity));
#endif
        return(STTUNER_ERROR_ID);
    }

    /* has all memory been freed, by Term() */
    if(InstanceChainTop != NULL)
    {
#ifdef STTUNER_DEBUG_MODULE_TERDRV_D0361
        STTBX_Print(("%s fail at least one instance not terminated\n", identity));
#endif
        return(ST_ERROR_OPEN_HANDLE);
    }


#ifdef STTUNER_DEBUG_MODULE_TERDRV_D0361
    STTBX_Print(("%s uninstalling ter:demod:STV0361...", identity));
#endif

    /* mark ID in database */
    Demod->ID = STTUNER_NO_DRIVER;

    /* unmap API */
    Demod->demod_Init = NULL;
    Demod->demod_Term = NULL;

    Demod->demod_Open  = NULL;
    Demod->demod_Close = NULL;

    Demod->demod_IsAnalogCarrier  = NULL;
    Demod->demod_GetTunerInfo     = NULL;
    Demod->demod_GetSignalQuality = NULL;
    Demod->demod_GetModulation    = NULL;
    Demod->demod_GetAGC           = NULL;
    Demod->demod_GetMode          = NULL;
    Demod->demod_GetFECRates      = NULL;
    Demod->demod_GetGuard         = NULL;
    Demod->demod_IsLocked         = NULL;
    Demod->demod_SetFECRates      = NULL;
    Demod->demod_Tracking         = NULL;
    Demod->demod_ScanFrequency    = NULL;

    Demod->demod_ioaccess = NULL;
    Demod->demod_ioctl    = NULL;
    Demod->demod_GetTPSCellId = NULL;
    Demod->demod_StandByMode = NULL ;

#ifdef STTUNER_DEBUG_MODULE_TERDRV_D0361
        STTBX_Print(("<"));
#endif
#if defined (ST_OS21) || defined (ST_OSLINUX)
  semaphore_delete(Lock_InitTermOpenClose);
#else
        semaphore_delete(&Lock_InitTermOpenClose);
#endif 
#ifdef STTUNER_DEBUG_MODULE_TERDRV_D0361
        STTBX_Print((">"));
#endif

    InstanceChainTop = (D0361_InstanceData_t *)0x7ffffffe;
    Installed        = FALSE;

#ifdef STTUNER_DEBUG_MODULE_TERDRV_D0361
        STTBX_Print(("ok\n"));
#endif

    return(Error);
}



/* ------------------------------------------------------------------------- */
/* /\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\ API /\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\ */
/* ------------------------------------------------------------------------- */



/* ----------------------------------------------------------------------------
Name: demod_d0361_Init()

Description:

Parameters:

Return Value:
---------------------------------------------------------------------------- */
ST_ErrorCode_t demod_d0361_Init(ST_DeviceName_t *DeviceName, DEMOD_InitParams_t *InitParams)
{
#ifdef STTUNER_DEBUG_MODULE_TERDRV_D0361
    const char *identity = "STTUNER d0361.c demod_d0361_Init()";

⌨️ 快捷键说明

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