📄 d0361_drv.c
字号:
frequency = pSearch->Frequency;
pParams.I2Cspeed = SpeedInit_361(DeviceMap,IOHandle);
pParams.prev_lock_status = NO_LOCK;
pParams.first_lock=0;
/****Initialize TRLNORMRATE TUNNING FLAG*****/
pParams.TrlNormRateFineTunning = FALSE ;
/***Initialize channel bandwidth value with a common value as the particular channel
bandwidth still not known*****/
pParams.ChannelBWStatus = STTUNER_CHAN_BW_NONE ;
/************************/
pParams.Frequency=pSearch->Frequency;
/* debug code */
/* end debug code */
pParams.Mode = pSearch->Mode;
pParams.Guard = pSearch->Guard;
pParams.Inv= pSearch->Inv;
pParams.Hierarchy=pSearch->Hierarchy;
pParams.Force=pSearch->Force + STTUNER_IOREG_GetField(DeviceMap,IOHandle,FORCE)*2;
pParams.ChannelBW = pSearch->ChannelBW;
pParams.Tuner=TunerInstance->Driver->ID;
pParams.Quartz=0;
if(pParams.ChannelBW != pParams.ChannelBWStatus)
{
pParams.ChannelBWStatus=pParams.ChannelBW;
pParams.TrlNormRateFineTunning=FALSE;
}
/****Initialize the trl done parameter with false *****/
pParams.Channel_6M_Trl_Done = FALSE;
pParams.Channel_7M_Trl_Done = FALSE;
pParams.Channel_8M_Trl_Done = FALSE;
/****Initial normrate setting for 6 Mhz bandwidth***/
pParams.Channel_6M_Trl[0]=M6_F_TRL_NOMRATE0;
pParams.Channel_6M_Trl[1]=M6_F_TRL_NOMRATE8_1;
pParams.Channel_6M_Trl[2]=M6_F_TRL_NOMRATE16_9;
/****Initial normrate setting for 7 Mhz bandwidth***/
pParams.Channel_7M_Trl[0]=M7_F_TRL_NOMRATE0;
pParams.Channel_7M_Trl[1]=M7_F_TRL_NOMRATE8_1;
pParams.Channel_7M_Trl[2]=M7_F_TRL_NOMRATE16_9;
/****Initial normrate setting for 8 Mhz bandwidth***/
pParams.Channel_8M_Trl[0]=M8_F_TRL_NOMRATE0;
pParams.Channel_8M_Trl[1]=M8_F_TRL_NOMRATE8_1;
pParams.Channel_8M_Trl[2]=M8_F_TRL_NOMRATE16_9;
pParams.State =NODATA_361;
pParams.EchoPos = pSearch->EchoPos;
/**************************/
pParams.Offset = pSearch->Offset;
pParams.Inv = pSearch->Inv;
pParams.Delta = 0;
flag_spec_inv = 0;
flag_freq_off = 0;
flag = pSearch->Offset*2 + ((pSearch->Inv>>1)&1);
switch (flag)
{
case 0:
trials[0]=NINV_NOFF;
trials[1]= INV_NOFF;
if ( (pParams.Inv == STTUNER_INVERSION_NONE) || (pParams.Inv == STTUNER_INVERSION))
{
num_trials=1;
}
else
num_trials=2;
if ( (pParams.first_lock) && (pParams.Inv == STTUNER_INVERSION_UNK))
{
num_trials=1;
}
break;
case 1:
trials[0]= NINV_NOFF;
trials[1]= INV_NOFF;
num_trials=2;
break;
case 2:
if ((pParams.prev_lock_status)==(LOCK_NO_OFF))
{
trials[0] = NINV_NOFF;
trials[1] = NINV_ROFF;
trials[2] = INV_NOFF;
trials[3] = INV_ROFF;
if ( (pParams.Inv == STTUNER_INVERSION_NONE) || (pParams.Inv == STTUNER_INVERSION))
{
num_trials=2;
}
else num_trials= 4;
if ( (pParams.first_lock) && (pParams.Inv == STTUNER_INVERSION_UNK))
{
num_trials=2;
}
}
else if ((pParams.prev_lock_status)==(LOCK_RI_OFF))
{
trials[0] = NINV_ROFF;
trials[1] = INV_ROFF;
if ( (pParams.Inv == STTUNER_INVERSION_NONE) || (pParams.Inv == STTUNER_INVERSION))
{
num_trials=1;
}
else num_trials= 2;
if ( (pParams.first_lock) && (pParams.Inv == STTUNER_INVERSION_UNK))
{
num_trials=1;
}
}
else
{
trials[0] = NINV_NOFF;
trials[1] = NINV_LOFF;
trials[2] = NINV_ROFF;
trials[3] = INV_NOFF;
trials[4] = INV_LOFF;
trials[5] = INV_ROFF;
if ( (pParams.Inv == STTUNER_INVERSION_NONE) || (pParams.Inv == STTUNER_INVERSION))
{
num_trials=3;
}
else num_trials= 6;
if ( (pParams.first_lock) && (pParams.Inv == STTUNER_INVERSION_UNK))
{
num_trials=3;
}
}
break;
case 3:
default:
if ((pParams.prev_lock_status)==(LOCK_NO_OFF))
{
trials[0] = NINV_NOFF;
trials[1] = NINV_ROFF;
trials[2] = INV_NOFF;
trials[3] = INV_ROFF;
/*
if (pParams->first_lock) num_trials=2;
else num_trials= 4;
*/
num_trials= 4;
}
else if ((pParams.prev_lock_status)==(LOCK_RI_OFF))
{
trials[0] = NINV_ROFF;
trials[1] = INV_ROFF;
/*
if (pParams->first_lock) num_trials=1;
else num_trials= 2;
*/
num_trials= 2;
}
else
{
trials[0] = NINV_NOFF;
trials[1] = NINV_LOFF;
trials[2] = NINV_ROFF;
trials[3] = INV_NOFF;
trials[4] = INV_LOFF;
trials[5] = INV_ROFF;
/*
if (pParams->first_lock) num_trials=3;
else num_trials= 6;
*/
num_trials= 6;
}
break;
}
pResult->SignalStatus=LOCK_KO_361;
index=0;
pParams.prev_lock_status=NO_LOCK;
while ( ( (index) < num_trials) && (pResult->SignalStatus!=LOCK_OK_361))
{
inv= trials[index]%2;
if ((!pParams.first_lock)||(pParams.Inv == STTUNER_INVERSION_AUTO) || (pParams.Inv == STTUNER_INVERSION_UNK) )
{
pParams.Sense = inv;
}
else
{
}
/*
inv= trials[index]%2;
if ((!pParams->first_lock)||(pSearch->Inv))
{
pLook.Inv = inv;
pParams->Sense = inv;
}
else
{
pLook.Inv = pParams->Sense;
}
*/
delta_freq=(trials[index]/2)*2 - (trials[index]/4)*6; /*circular module */
pParams.Frequency = frequency+delta_freq * STEP;
/** error checking is done here for the fix of the bug GNBvd20315 **/
error=FE_361_Search(DeviceMap,IOHandle,&pParams,pResult,TunerInstance);
if(error != FE_361_NO_ERROR)
{
return error;
}
if ((pResult->SignalStatus == NOAGC_361) || (pResult->SignalStatus == NOSYMBOL_361) ) break;
if ((pResult->SignalStatus==LOCK_OK_361))
{
switch(delta_freq)
{
case 0:
pParams.prev_lock_status=LOCK_NO_OFF;
break;
case 2:
pParams.prev_lock_status=LOCK_RI_OFF;
break;
case -2:
pParams.prev_lock_status=LOCK_LE_OFF;
break;
default:
pParams.prev_lock_status=LOCK_LE_OFF;
break;
}
}
index++;
}
return error;
}
/*----------------------------------------------------
FUNCTION GetNoiseEstimator (18Oct01)
ACTION
PARAMS IN
PARAMS OUT
RETURN
------------------------------------------------------*/
void FE_361_GetNoiseEstimator(STTUNER_IOREG_DeviceMap_t *DeviceMap, IOARCH_Handle_t IOHandle, U32 *pNoise, U32 *pBer)
{
short unsigned int source,prf;
U32 quoz,error;
U32 snr=0;
error = STTUNER_IOREG_GetField(DeviceMap,IOHandle,ERROR_COUNT1_LO);
error += STTUNER_IOREG_GetField(DeviceMap,IOHandle,ERROR_COUNT1_HI) * 256;
error = error*100;
quoz=1;
if (!STTUNER_IOREG_GetField(DeviceMap,IOHandle,ERRMODE1))
{
source=STTUNER_IOREG_GetField(DeviceMap,IOHandle,ERR_SOURCE1);
quoz=FE_361_PowOf2(12+2*(STTUNER_IOREG_GetField(DeviceMap,IOHandle,NUM_EVENT1)));
switch (source)
{
case 0:
quoz=quoz*8;
prf=STTUNER_IOREG_GetField(DeviceMap,IOHandle,PR);
switch(prf)
{
case 0:
error=(U32)(error*(1/2)); /*gbgbcast*/
break;
case 1:
error=(U32)(error*(2/3)); /*gbgbcast*/
break;
case 2:
error=(U32)(error*(3/4)); /*gbgbcast*/
break;
case 3:
error=(U32)(error*(5/6)); /*gbgbcast*/
break;
case 4:
error=(U32)(error*(6/7)); /*gbgbcast*/
break;
case 5:
error=(U32)(error*(7/8)); /*gbgbcast*/
break;
default:
error=error;
break;
}
break;
case 1:
quoz=quoz*8;
break;
case 2:
break;
case 3:
error=error*188;
break;
default:
error=error;
break;
}
}
snr=STTUNER_IOREG_GetField(DeviceMap,IOHandle,CHC_SNR);
/**pNoise = (snr*10) >> 3;*/
/** fix done here for the bug GNBvd20972 where pNoise is calculated in right percentage **/
*pNoise=((snr/8)*100)/32;
*pBer = error*(100000000/quoz); /**** (error/quoz) gives my actual BER . We multiply it with
10*e+8 now and 10*e+2 before for scaling purpose so that we can send a integer
value to application user . So total scaling factor is 10*e+10*****/
return;
}
/*********************************************************
--FUNCTION :: FE_361_Tracking
--ACTION :: Once the chip is locked tracks its state
--PARAMS IN :: period/duration of tracking in seconds
:: Handle to Chip
--PARAMS OUT:: NONE
--RETURN :: NONE
--********************************************************/
void FE_361_Tracking(STTUNER_IOREG_DeviceMap_t *DeviceMap, IOARCH_Handle_t IOHandle,FE_361_SearchResult_t *Result)
{
int change;
int locka,lockb,wd;
int pr,mod,pr_temp;
unsigned short int mode;
unsigned short int guard=3;
/*FE_361_InternalParams_ts *pParams;*/
short int tempo;
/*D0361_InstanceData_t *Instance;*/
/*pParams = (FE_361_InternalParams_t *)Instance->FE_361_Handle;*/
tempo=900;
change=0;
mode=Result->Mode;
guard=Result->Guard;
if (Result->Hierarchy==STTUNER_HIER_LOW_PRIO)
{
pr=Result->Lprate;
}
else
{
pr=Result->Hprate;
}
/* pr=(pParams->Results).Hprate;*/
mod=Result->Modulation;
if (!STTUNER_IOREG_GetField(DeviceMap,IOHandle,TPS_LOCK) || (!STTUNER_IOREG_GetField(DeviceMap,IOHandle,LK) ) )
{
STTUNER_IOREG_SetField(DeviceMap,IOHandle,OP2_VAL,0) ;
STTUNER_IOREG_SetField(DeviceMap,IOHandle,OP2_VAL,1) ;
STTUNER_IOREG_SetField(DeviceMap,IOHandle,OP2_VAL,0) ;
SystemWaitFor(50);
STTUNER_IOREG_SetField(DeviceMap,IOHandle,MODE,(STTUNER_IOREG_GetField(DeviceMap,IOHandle,SYR_MODE))) ;
STTUNER_IOREG_SetField(DeviceMap,IOHandle,GUARD,(STTUNER_IOREG_GetField(DeviceMap,IOHandle,SYR_GUARD))) ;
STTUNER_IOREG_SetField(DeviceMap,IOHandle,FORCE,1) ;
Result->Echo.L1s2va3vp4 = 4;
STTUNER_IOREG_SetField(DeviceMap,IOHandle,CORE_ACTIVE,0) ;
SystemWaitFor(2);
STTUNER_IOREG_SetField(DeviceMap,IOHandle,CORE_ACTIVE,1) ;
STTUNER_IOREG_SetField(DeviceMap,IOHandle,OP2_VAL,0) ;
STTUNER_IOREG_SetField(DeviceMap,IOHandle,OP2_VAL,1) ;
SystemWaitFor(30);
STTUNER_IOREG_SetField(DeviceMap,IOHandle,OP2_VAL,0) ;
wd=300;
while ((wd>=0) && (!STTUNER_IOREG_GetField(DeviceMap,IOHandle,TPS_LOCK) ) )
{
SystemWaitFor(24);
wd-=24;
}
locka=lockb=STTUNER_IOREG_GetField(DeviceMap,IOHandle,TPS_LOCK);
change=0;
if (locka)
{
if(Result->Hierarchy==STTUNER_HIER_LOW_PRIO)
{
pr_temp=STTUNER_IOREG_GetField(DeviceMap,IOHandle,TPS_LPCODE);
}
else
{
pr_temp=STTUNER_IOREG_GetField(DeviceMap,IOHandle,TPS_HPCODE);
}
if( (pr_temp==pr) && (mod==STTUNER_IOREG_GetField(DeviceMap,IOHandle,TPS_CONST)) )
{
SystemWaitFor(100);
tempo-=80;
lockb=STTUNER_IOREG_GetField(DeviceMap,IOHandle,TPS_LOCK);
change=0;
}
else
change = 1;
}
if ((!lockb) && (!change))
{
STTUNER_IOREG_SetField(DeviceMap,IOHandle,OP2_VAL,0);
STTUNER_IOREG_SetField(DeviceMap,IOHandle,OP2_VAL,1);
SystemWaitFor(30);
STTUNER_IOREG_SetField(DeviceMap,IOHandle,OP2_VAL,0);
Result->Echo.L1s2va3vp4 = 4;
STTUNER_IOREG_SetField(DeviceMap,IOHandle,CORE_ACTIVE,0);
SystemWaitFor(2);
STTUNER_IOREG_SetField(DeviceMap,IOHandle,CORE_ACTIVE,1);
STTUNER_IOREG_SetField(DeviceMap,IOHandle,OP2_VAL,0);
STTUNER_IOREG_SetField(DeviceMap,IOHandle,OP2_VAL,1);
SystemWaitFor(32);
STTUNER_IOREG_SetField(DeviceMap,IOHandle,OP2_VAL,0);
wd=300;
while ((wd>=0) && (!STTUNER_IOREG_GetField(DeviceMap,IOHandle,TPS_LOCK)) )
{
SystemWaitFor(32);
wd-=32;
}
if (wd>=0)
{
if(Result->Hierarchy==STTUNER_HIER_LOW_PRIO)
{
pr_temp=STTUNER_IOREG_GetField(DeviceMap,IOHandle,TPS_LPCODE);
}
else
{
pr_temp=STTUNER_IOREG_GetField(DeviceMap,IOHandle,TPS_HPCODE);
}
if( (pr_temp!=pr) || (mod!=STTUNER_IOREG_GetField(DeviceMap,IOHandle,TPS_CONST)) ) change=1;
}
} /*end if locka */
} /* end if chipget.... */
if ( (STTUNER_IOREG_GetField(DeviceMap,IOHandle,TPS_LOCK))&&(!change))
{
if (STTUNER_IOREG_GetField(DeviceMap,IOHandle,SYR_GUARD) == 3)
{
/* pParams->L1s2va3vp4 = 4; */
/* it replaces the call to echo_proc */
passive_monitoring_361(DeviceMap,IOHandle,&(Result->Echo));
active_monitoring_361(DeviceMap,IOHandle,&(Result->Echo));
Echo_long_scan_361(DeviceMap,IOHandle,&(Result->Echo));
/* ********************************** */
}
}
if (change)
{
if (STTUNER_IOREG_GetField(DeviceMap,IOHandle,TPS_CONST)==0)
{
;
}
SystemWaitFor(500);
if (STTUNER_IOREG_GetField(DeviceMap,IOHandle,TPS_CONST)==0)
{
SystemWaitFor(400);
}
STTUNER_IOREG_SetField(DeviceMap,IOHandle,MODE,STTUNER_IOREG_GetField(DeviceMap,IOHandle,SYR_MODE));
STTUNER_IOREG_SetField(DeviceMap,IOHandle,GUARD,STTUNER_IOREG_GetField(DeviceMap,IOHandle,SYR_GUARD));
STTUNER_IOREG_SetField(DeviceMap,IOHandle,FORCE,1);
STTUNER_IOREG_SetField(DeviceMap,IOHandle,OP2_VAL,0);
STTUNER_IOREG_SetField(DeviceMap,IOHandle,OP2_VAL,1);
STTUNER_IOREG_SetField(DeviceMap,IOHandle,OP2_VAL,0);
if (STTUNER_IOREG_GetField(DeviceMap,IOHandle,TPS_CONST)==0)
{
;
}
STTUNER_IOREG_SetField(DeviceMap,IOHandle,CORE_ACTIVE,0);
STTUNER_IOREG_SetField(DeviceMap,IOHandle,CORE_ACTIVE,1);
if (STTUNER_IOREG_GetField(DeviceMap,IOHandle,TPS_CONST)==0)
{
;
}
SystemWaitFor(400);
}
if (STTUNER_IOREG_GetField(DeviceMap,IOHandle,LK) )
{
if(Result->Hierarchy==STTUNER_HIER_LOW_PRIO)
{
Result->Lprate=STTUNER_IOREG_GetField(DeviceMap,IOHandle,TPS_LPCODE);
}
else
{
Result->Hprate=STTUNER_IOREG_GetField(DeviceMap,IOHandle,TPS_HPCODE);
}
mod=STTUNER_IOREG_GetField(DeviceMap,IOHandle,TPS_CONST);
Result->Modulation=mod;
}
STTUNER_IOREG_SetField(DeviceMap,IOHandle,FORCE,0);
return;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -