📄 d0360minidrv.c
字号:
{
/* no parameters set. Search completely automatic */
/* set guessed parameters to most plausible values */
}
else
{
/* hChip = pParams->hChip; get the handle */
pParams->Frequency=pSearch->Frequency;
/* debug code */
/* end debug code */
pParams->Mode = pSearch->Mode;
pParams->Guard = pSearch->Guard;
pParams->Inv= pSearch->Inv;
pParams->Force=pSearch->Force + ChipDemodGetField(FORCE)*2;
pParams->ChannelBW = pSearch->ChannelBW;
if(pParams->ChannelBW != pParams->ChannelBWStatus)
{
pParams->ChannelBWStatus=pParams->ChannelBW;
pParams->TrlNormRateTunning=FALSE;
pParams->TrlNormRateFineTunning=FALSE;
}
#ifndef HOST_PC
if (pParams->ChannelBW == STTUNER_CHAN_BW_6M)
{
ChipDemodSetField(GAIN_SRC_HI,M6_F_GAIN_SRC_HI);
ChipDemodSetField(GAIN_SRC_LO,M6_F_GAIN_SRC_LO);
/*ChipSetRegisters(hChip,R_GAIN_SRC1,2); */
if(pParams->Channel_6M_Trl_Done == FALSE)
{
/*if(pParams->Tuner == STTUNER_TUNER_DTT7592)
{
ChipSetFieldImage(hChip,TRL_NOMRATE_LSB,0x00);
ChipSetFieldImage(hChip,TRL_NOMRATE_LO,0xFE);
ChipSetFieldImage(hChip,TRL_NOMRATE_HI,0x40); */
temp_image[0]= 0x00; temp_image[1]=0xFE; temp_image[2]=0x40;
/*}
else
{
ChipSetFieldImage(hChip,TRL_NOMRATE_LSB,M6_F_TRL_NOMRATE0);
ChipSetFieldImage(hChip,TRL_NOMRATE_LO,M6_F_TRL_NOMRATE8_1);
ChipSetFieldImage(hChip,TRL_NOMRATE_HI,M6_F_TRL_NOMRATE16_9);
} */
} /*** end of if(pParams->Channel_6M_Trl_Done == FALSE)**/
else
{
/*ChipSetFieldImage(hChip,TRL_NOMRATE_LSB,pParams->Channel_6M_Trl[0]);
ChipSetFieldImage(hChip,TRL_NOMRATE_LO,pParams->Channel_6M_Trl[1]);
ChipSetFieldImage(hChip,TRL_NOMRATE_HI,pParams->Channel_6M_Trl[2]);*/
temp_image[0]= pParams->Channel_6M_Trl[0];
temp_image[1]= pParams->Channel_6M_Trl[1];
temp_image[2]= pParams->Channel_6M_Trl[2];
}/*** end of ELSE of if(pParams->Channel_6M_Trl_Done == FALSE)*/
/*ChipSetRegisters(hChip,R_TRL_CTL,3);*/
}
else if ((pParams->ChannelBW == STTUNER_CHAN_BW_7M))
{
ChipDemodSetField(GAIN_SRC_HI,M7_F_GAIN_SRC_HI);
ChipDemodSetField(GAIN_SRC_LO,M7_F_GAIN_SRC_LO);
if(pParams->Channel_7M_Trl_Done == FALSE)
{
temp_image[0]= 0x00; temp_image[1]=0xD3; temp_image[2]=0x4B;
}/*** end of if(pParams->Channel_7M_Trl_Done == FALSE) **/
else
{
temp_image[0]= pParams->Channel_7M_Trl[0];
temp_image[1]= pParams->Channel_7M_Trl[1];
temp_image[2]= pParams->Channel_7M_Trl[2];
}
/*ChipSetRegisters(hChip,R_TRL_CTL,3);*/
}
else /* Channel Bandwidth = 8M) */
{
/* ChipSetFieldImage(hChip,GAIN_SRC_HI,M8_F_GAIN_SRC_HI);
ChipSetFieldImage(hChip,GAIN_SRC_LO,M8_F_GAIN_SRC_LO);
ChipSetRegisters(hChip,R_GAIN_SRC1,2); */
ChipDemodSetField(GAIN_SRC_HI,M8_F_GAIN_SRC_HI);
ChipDemodSetField(GAIN_SRC_LO,M8_F_GAIN_SRC_LO);
if(pParams->Channel_8M_Trl_Done == FALSE)
{
temp_image[0]= 0x00; temp_image[1]=0xA8; temp_image[2]=0x56;
}/*** end of if(pParams->Channel_8M_Trl_Done == FALSE) **/
else
{
temp_image[0]= pParams->Channel_8M_Trl[0];
temp_image[1]= pParams->Channel_8M_Trl[1];
temp_image[2]= pParams->Channel_8M_Trl[2];
}/*** end of ELSE of if(pParams->Channel_8M_Trl_Done == FALSE) **/
}
temp_image[0] = (temp_image[0] &0x80)|(ChipDemodGetField(R_TRL_CTL))&0x7f;
error=STTUNER_IODIRECT_ReadWrite(STTUNER_IO_SA_WRITE, R_TRL_CTL, 0,0, temp_image, 3, FALSE);
#endif
pParams->EchoPos = pSearch->EchoPos;
ChipDemodSetField(LONG_ECHO,pParams->EchoPos);
/* dcdc */
#ifdef HOST_PC
repeator = TunerGetRepeator();
TunerSetRepeator(1);
#endif
/*FE_360_TunerSet(TunerInstance->DrvHandle,&pParams->Frequency,(STTUNER_TunerType_t)pParams->Tuner); */
/** error checking is done here for the fix of the bug GNBvd20315 **/
error=FE_360_TunerSet(TunerInstance->DrvHandle,(FE_360_InternalParams_t*)pParams);
if(error != FE_NO_ERROR )
{
return error;
}
/*TunerSetRepeator(0);*/
/* dcdc */
ChipDemodSetField(VTH0,0x1E);
ChipDemodSetField(VTH1,0x14);
ChipDemodSetField(VTH2,0xF);
ChipDemodSetField(VTH3,0x9);
ChipDemodSetField(VTH4,0x0);
ChipDemodSetField(VTH5,0x5);
ChipDemodSetField(R_PR,0xAF);
ChipDemodSetField(R_VSEARCH,0x30);
ChipDemodSetField(FORCE,(pParams->Force & 1) );
ChipDemodSetField(FRAPTCR,1);
if (pParams->Inv == STTUNER_INVERSION_NONE)
ChipDemodSetField(INV_SPECTR,1);
else if (pParams->Inv == STTUNER_INVERSION)
ChipDemodSetField(INV_SPECTR,0);
else if (pParams->Inv == STTUNER_INVERSION_AUTO)
{
if (pParams->Sense==1) ChipDemodSetField(INV_SPECTR,0);
else ChipDemodSetField(INV_SPECTR,1);
}
else if ( (pParams->Inv == STTUNER_INVERSION_UNK) && (!pParams->first_lock))
{
if (pParams->Sense==1) ChipDemodSetField(INV_SPECTR,0);
else ChipDemodSetField(INV_SPECTR,1);
}
}
return error;
}
/*****************************************************
--FUNCTION :: FE_360_Search
--ACTION :: Search for a valid transponder
--PARAMS IN :: Handle ==> Front End Handle
pSearch ==> Search parameters
pResult ==> Result of the search
--PARAMS OUT:: NONE
--RETURN :: Error (if any)
--***************************************************/
FE_360_Error_t FE_360_Search(FE_360_InternalParams_t *pParams, FE_360_SearchParams_t *pSearch, FE_360_SearchResult_t *pResult,STTUNER_tuner_instance_t *TunerInstance)
{
FE_360_Error_t error = FE_NO_ERROR;
if ((void*) pParams == NULL) error = FE_INVALID_HANDLE;
else
{
/** error checking is done here for the fix of the bug GNBvd20315 **/
error=FE_360_SearchInit(pParams,pSearch,TunerInstance);
if(error != FE_NO_ERROR)
{
return error ;
}
if ((pParams->Frequency == 0) || (pParams->Tuner == STTUNER_TUNER_NONE))
{
error = FE_MISSING_PARAMETER;
}
else
{
/*dcdc pParams->State = FE_360_SearchRun((FE_360_InternalParams_t *)Handle);*/
pParams->State = FE_360_SearchRun(pParams,TunerInstance);
FE_360_SearchTerm(pParams,pResult);
}
}/** end of first else **/
return error;
}
/*****************************************************
--FUNCTION :: FE_360_Term
--ACTION :: Terminate STV0360 chip connection
--PARAMS IN :: Handle ==> Front End Handle
--PARAMS OUT:: NONE
--RETURN :: Error (if any)
--***************************************************/
void FE_360_Term(void)
{
memory_deallocate(DEMODInstance->MemoryPartition, Params);
}
/*****************************************************
--FUNCTION :: FE_360_LookFor
--ACTION :: Intermediate layer before launching Search
--PARAMS IN :: Handle ==> Front End Handle
pSearch ==> Search parameters
pResult ==> Result of the search
--PARAMS OUT:: NONE
--RETURN :: Error (if any)
--***************************************************/
FE_360_Error_t FE_360_LookFor(FE_360_InternalParams_t *pParams, FE_360_SearchParams_t *pSearch, FE_360_SearchResult_t *pResult,STTUNER_tuner_instance_t *TunerInstance)
{
FE_360_SearchParams_t pLook;
U8 trials[6];
S8 num_trials,index;
FE_360_Error_t error = FE_NO_ERROR;
U8 flag_spec_inv;
U8 flag_freq_off;
U32 frequency;
U8 flag,inv;
S8 delta_freq;
if ((void*)pParams == NULL) error = FE_INVALID_HANDLE;
else
{
/* pParams=(FE_360_InternalParams_t *) Handle;*/
frequency = pSearch->Frequency;
pLook.Frequency = pSearch->Frequency;
pLook.Mode = pSearch->Mode;
pLook.Guard = pSearch->Guard;
pLook.Inv = pSearch->Inv;
pLook.Offset = pSearch->Offset;
pLook.Force = pSearch->Force;
pLook.ChannelBW = pSearch->ChannelBW;
pLook.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;
index=0;
pParams->prev_lock_status=NO_LOCK;
while ( ( (index) < num_trials) && (pResult->SignalStatus!=LOCK_OK))
{
inv= trials[index]%2;
if ((!pParams->first_lock)||(pParams->Inv == STTUNER_INVERSION_AUTO) || (pParams->Inv == STTUNER_INVERSION_UNK) )
{
pParams->Sense = inv;
}
else
{
}
delta_freq=(trials[index]/2)*2 - (trials[index]/4)*6; /*circular module */
pLook.Frequency = frequency+delta_freq * STEP;
/** error checking is done here for the fix of the bug GNBvd20315 **/
error=FE_360_Search(pParams,&pLook,pResult,TunerInstance);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -