📄 362_drv.c
字号:
CPAMPMin=40;
break;
}
CPAMPvalue=0;
for (idx=0; idx<4; idx++)
CPAMPvalue+=ChipGetField(hChip,PPM_CPAMP_DIRECT);
CPAMPvalue/=4;
if (CPAMPvalue<CPAMPMin)
CPAMPStatus=NOCPAMP;
else
CPAMPStatus=CPAMPOK;
return CPAMPStatus;
}
/*********************************************************
--FUNCTION :: CheckTPS
--ACTION :: Get TPS status
--PARAMS IN :: Handle to the Chip
--PARAMS OUT:: TPS Lock status
--********************************************************/
FE_362_SignalStatus_t CheckTPS(STCHIP_Handle_t hChip)
{
S32 mode, TPSLock, Tempo, Time=0;
mode= ChipGetField(hChip,SYR_MODE);
switch(mode)
{
case 0: /*2k mode*/
Tempo=65;
break;
case 1: /*8k mode*/
Tempo=260;
break;
case 2: /*4k mode*/
Tempo=130;
break;
default:
break;
}
do
{
WAIT_N_MS(1);
TPSLock=ChipGetField(hChip,TPS_LOCK);
Time++;
}while((TPSLock==0)&&(Time<Tempo));
if (ChipGetField(hChip,TPS_LOCK))
TPSLock = TPSOK;
else
TPSLock = NOTPS;
return TPSLock;
}
/*********************************************************
--FUNCTION :: CheckPR
--ACTION :: Check if Punture rate is found or not
--PARAMS IN :: Handle to the Chip
--PARAMS OUT:: TPS Lock status
--********************************************************/
FE_362_SignalStatus_t CheckPR(STCHIP_Handle_t hChip)
{
S32 mode, Lock, Tempo, Time=0;
mode= ChipGetField(hChip,LK);
switch(mode)
{
case 0: /*2k mode*/
Tempo=75;
break;
case 1: /*8k mode*/
Tempo=300;
break;
case 2: /*4k mode*/
Tempo=150;
break;
default:
break;
}
do
{
WAIT_N_MS(1);
Lock=ChipGetField(hChip,LK);
Time++;
}while((Lock==0)&&(Time<Tempo));
if (ChipGetField(hChip,PRF))
Lock = LOCKOK;
else
Lock = NOLOCK;
return Lock;
}
/*********************************************************
--FUNCTION :: CheckPR
--ACTION :: Check if Punture rate is found or not
--PARAMS IN :: Handle to the Chip
--PARAMS OUT:: TPS Lock status
--********************************************************/
FE_362_SignalStatus_t CheckLOCK(STCHIP_Handle_t hChip)
{
S32 mode, PRFound, Tempo, Time=0;
mode= ChipGetField(hChip,PRF);
switch(mode)
{
case 0: /*2k mode*/
Tempo=36;
break;
case 1: /*8k mode*/
Tempo=144;
break;
case 2: /*4k mode*/
Tempo=72;
break;
default:
break;
}
do
{
WAIT_N_MS(1);
PRFound=ChipGetField(hChip,PRF);
Time++;
}while((PRFound==0)&&(Time<Tempo));
if (ChipGetField(hChip,PRF))
PRFound = PRFOUNDOK;
else
PRFound = NOPRFOUND;
return PRFound;
}
/*********************************************************
--FUNCTION :: CheckEPQ
--ACTION :: calculate I2C speed (for SystemWait ...)
--PARAMS IN :: Handle to the Chip
--PARAMS OUT:: NONE
--RETURN ::
--********************************************************/
void CheckEPQ(STCHIP_Handle_t hChip,FE_OFDMEchoParams_t *Echo)
{
unsigned short int epq,mode,epq_limit;
U8 epq_auto= 0;
/********* To check the status of auto epq**********/
epq_auto=ChipGetField(hChip,AUTO_LE_EN);
if(epq_auto==1)
{
return;
}
mode=ChipGetField(hChip,SYR_MODE);
epq=Get_EPQ(hChip,0);
epq_limit=(6<<(2*mode));
if ( epq > epq_limit )
{
Ack_long_scan(hChip);
}
return;
}
/*****************************************************
--FUNCTION :: FE_362_SearchRun
--ACTION :: Search for Signal, Timing, Carrier and then data at a given Frequency,
-- in a given range:
--PARAMS IN :: NONE
--PARAMS OUT:: NONE
--RETURN :: Type of the founded signal (if any)
--REMARKS :: This function is supposed to replace FE_362_SearchRun according
-- to last findings on SYR block
--***************************************************/
FE_362_SignalStatus_t FE_362_Algo(FE_362_InternalParams_t *pParams)//,STTUNER_tuner_instance_t *TunerInstance)
{
/*int dbg_var;*//* debug var */
STCHIP_Handle_t hChip;
FE_362_SignalStatus_t ret_flag;
short int wd,/*ii,*/tempo;
unsigned short int ppm,try,u_var,mode,guard,seuil;
#ifdef HOST_PC
// FILE *fp,*fn;
/* debug variables */
// static unsigned short int dbg_failure=0;
#endif
hChip = pParams->hDemod;
try=0;
do
{
ret_flag=LOCKOK;
ChipSetField(hChip,MODE,pParams->Mode);
ChipSetField(hChip,GUARD,pParams->Guard);
ChipSetField(hChip, FORCE,pParams->Force);
ChipSetField(hChip,CORE_ACTIVE,0);
if(pParams->IF_IQ_Mode!=0)
ChipSetField(hChip,COM_N,0x07);
WAIT_N_MS(5);
ChipSetField(hChip,CORE_ACTIVE,1);
u_var=ChipGetField(hChip,AGC_LOCK);
wd=70;
while ((u_var==0) && (wd>0))
{
WAIT_N_MS(10);
wd-=10;
u_var=ChipGetField(hChip,AGC_LOCK);
}
if(!u_var)
{
ret_flag=NOAGC;
break;
}
wd=120; /* dcdc modifs gbgb */
u_var=ChipGetField(hChip,SYR_LOCK);
while ( (!u_var) && (wd>0))
{
WAIT_N_MS(5);
wd-=5;
u_var=ChipGetField(hChip,SYR_LOCK);
}
if(!u_var)
{
ret_flag=NOSYMBOL;
break;
}
mode =ChipGetField(hChip,SYR_MODE) ;
guard=ChipGetField(hChip,SYR_GUARD);
#ifndef DAV
/************************************************/
if(mode == STTUNER_MODE_2K)
{
ChipSetOneRegister(hChip,R_CHP_TAPS,0x01); /***For 2k mode the chp_taps reg. must
***always set to 0x01***/
}
else
{
ChipSetOneRegister(hChip,R_CHP_TAPS,0x03);/***For 8k mode the chp_taps reg. must
***always set to 0x03***/
}
#endif
/******* CHARANJIB ********************************/
switch(mode)
{
case 0:
case 1:
tempo=30<<(2*mode);
break;
case 2:
break;
}
WAIT_N_MS(tempo);
ppm=0;
tempo=1<<(2*mode);
/**************************/
#if 0
for (ii=0;ii<4;ii++)
{
ppm+=ChipGetField(hChip,PPM_CPC);
WAIT_N_MS(tempo);
}
if (ppm< (CPQ_LIMIT <<(2*mode + 2)) )
{
ret_flag=BAD_CPQ;
}
else
{
try=try;
}
#endif
/**************************/
if (CheckCPAMP(hChip)==NOCPAMP)
ret_flag=NOCPAMP;
try++;
} while ( (try<2) && (ret_flag!=LOCKOK) );
if ( ret_flag!=LOCKOK)
{
return ret_flag;
}
u_var=ChipGetField(hChip,TPS_LOCK);
wd=65<<(2*mode);
tempo=4<<(2*mode);
while ((!u_var) && (wd>0))
{
WAIT_N_MS(tempo);
wd-= tempo;
u_var=ChipGetField(hChip,TPS_LOCK);
}
if (!u_var)
{
return NOTPS;
}
tempo= (14<<(2*mode));
WAIT_N_MS(tempo); /* dcdc wait for EPQ to be reliable*/
guard=ChipGetField(hChip,SYR_GUARD);
if (guard== (unsigned short int )STTUNER_GUARD_1_4) CheckEPQ(hChip,&pParams->Echo);
wd=36<<(2*mode);
u_var=ChipGetField(hChip,PRF);
tempo=4<<(2*mode);
while ( (!u_var) && (wd>=0.0))
{
WAIT_N_MS(tempo);
wd-=(tempo);
u_var=ChipGetField(hChip,PRF);
}
if(!u_var)
{
return NOPRFOUND;
}
u_var=ChipGetField(hChip,LK);
wd=75<<(2*mode);/* a revoir */
tempo=4<<(2*mode) ;
while ((!u_var) && (wd>=0))
{
WAIT_N_MS( tempo);
wd-=tempo;
u_var=ChipGetField(hChip,LK);
}
if(!u_var)
{
return NOPRFOUND;
}
if(pParams->IF_IQ_Mode!=0)
{
tempo=0;
while (((ChipGetField(hChip,COM_USEGAINTRK)!=1)&&(ChipGetField(hChip,COM_AGCLOCK)!=1))&&(tempo<1000))
{
WAIT_N_MS(1);
tempo+=1;
}
ChipSetField(hChip,COM_N,0x17);
}
/* lock/secure the FEC for HP*/
u_var=ChipGetField(hChip,TPS_HPCODE);
if (u_var==4 ) u_var=5;
switch(u_var)
{
case 0:
seuil=ChipGetField(hChip,VTH0);
if (seuil <60) ChipSetField(hChip,VTH0,45);
break;
case 1:
seuil=ChipGetField(hChip,VTH1);
if (seuil < 40) ChipSetField(hChip,VTH1,30);
break;
case 2:
seuil=ChipGetField(hChip,VTH2);
if (seuil < 30) ChipSetField(hChip,VTH2,23);
break;
case 3:
seuil=ChipGetField(hChip,VTH3);
if (seuil < 18) ChipSetField(hChip,VTH3,14);
break;
case 5:
seuil=ChipGetField(hChip,VTH5);
if (seuil < 10) ChipSetField(hChip,VTH5,8);
break;
default:
break;
}
/* lock/secure the FEC for LP (if needed)*/
if (ChipGetField(hChip,TPS_HIERMODE)!=0)
{
u_var=ChipGetField(hChip,TPS_LPCODE);
if (u_var==4 ) u_var=5;
switch(u_var)
{
case 0:
seuil=ChipGetField(hChip,VTH0);
if (seuil <60) ChipSetField(hChip,VTH0,45);
break;
case 1:
seuil=ChipGetField(hChip,VTH1);
if (seuil < 40) ChipSetField(hChip,VTH1,30);
break;
case 2:
seuil=ChipGetField(hChip,VTH2);
if (seuil < 30) ChipSetField(hChip,VTH2,23);
break;
case 3:
seuil=ChipGetField(hChip,VTH3);
if (seuil < 18) ChipSetField(hChip,VTH3,14);
break;
case 5:
seuil=ChipGetField(hChip,VTH5);
if (seuil < 10) ChipSetField(hChip,VTH5,8);
break;
default:
break;
}
}
if (ChipGetField(hChip,TPS_HIERMODE)==0)
{
u_var=ChipGetField(hChip,TPS_HPCODE);
if (u_var==4 ) u_var=5;
u_var= (1<<u_var);
ChipSetOneRegister(hChip,R_PR,u_var);
ChipSetFieldImage(hChip,PR_AUTO,1);
ChipSetFieldImage(hChip,PR_FREEZE,0);
ChipSetRegisters(hChip,R_VSEARCH,1);
}
return LOCKOK;
}
/*****************************************************
--FUNCTION :: FE_362_Init
--ACTION :: Initialisation of the STV0362 chip
--PARAMS IN :: pInit ==> pointer to FE_362_InitParams_t structure
--PARAMS OUT:: NONE
--RETURN :: Handle to STV0362
--***************************************************/
FE_362_Handle_t FE_362_Init(FE_362_InitParams_t *pInit)
{
FE_362_InternalParams_t *pParams = NULL;
/* FE_OFDMEchoParams_t EchoParams; */
/* POUR STAPI passer un multiinstance */
/* Internal params structure allocation */
#ifdef HOST_PC
pParams = malloc(sizeof(FE_362_InternalParams_t));
#endif
#ifdef CHIP_STAPI
/* use chip memory partition for all dynamic memory allocation
for this instance of LLA internal data */
pParams = memory_allocate_clear(pInit->hDemod->Chip->MemoryPartition, 1, sizeof( FE_362_InternalParams_t ));
#endif
/* pParams->Echo = EchoParams;*/ /* POUR STAPI passer un multiinstance */
if(pParams != NULL)
{
/* Chip initialisation */
/* in internal struct chip is stored */
#ifdef HOST_PC
#ifndef NO_GUI
pParams->hDemod = DEMOD;
pParams->hTuner = TUNER;
#else
pParams->hDemod = STV0362_Init(pInit->hDemod);
if (pInit->Tuner362Init->Chip->Repeater)
pInit->Tuner362Init->Chip->RepeaterHost=pParams->hDemod;
pParams->hTuner = TunerInit(pInit->Tuner362Init);
#endif
#else
pParams->hDemod = STV0362_Init(pInit->Demod362Init);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -