📄 d0362.c
字号:
/* top level public instance data */
Inst = STTUNER_GetDrvInst();
/* Read noise estimations for C/N and BER */
FE_362_GetNoiseEstimator(&(Instance->DeviceMap), Instance->IOHandle, &CurSignalQuality, &CurBitErrorRate);
/******The Error field of TunerInfo in Instaneous database is updated ******/
TunerError= ST_NO_ERROR;
/*************************************************************************/
/* Get the modulation type */
Data=STTUNER_IOREG_GetField(&(Instance->DeviceMap), Instance->IOHandle, F0362_TPS_CONST);
switch (Data)
{
case 0: CurModulation = STTUNER_MOD_QPSK; break;
case 1: CurModulation = STTUNER_MOD_16QAM; break;
case 2: CurModulation = STTUNER_MOD_64QAM; break;
default:
/*CurModulation = STTUNER_MOD_ALL;*/
CurModulation = Data ;
task_delay(5);
Data=STTUNER_IOREG_GetField(&(Instance->DeviceMap), Instance->IOHandle, F0362_TPS_CONST);
switch (Data)
{
case 0: CurModulation = STTUNER_MOD_QPSK; break;
case 1: CurModulation = STTUNER_MOD_16QAM; break;
case 2: CurModulation = STTUNER_MOD_64QAM; break;
default:
CurModulation = Data ;
TunerError=ST_ERROR_BAD_PARAMETER;
}
break;
}
/* Get the mode */
Data=STTUNER_IOREG_GetField(&(Instance->DeviceMap), Instance->IOHandle, F0362_TPS_MODE);
switch (Data)
{
case 0: CurMode = STTUNER_MODE_2K; break;
case 1: CurMode = STTUNER_MODE_8K; break;
default:
CurMode =Data;
task_delay(5);
Data=STTUNER_IOREG_GetField(&(Instance->DeviceMap), Instance->IOHandle, F0362_TPS_MODE);
switch (Data)
{
case 0: CurMode = STTUNER_MODE_2K; break;
case 1: CurMode = STTUNER_MODE_8K; break;
default:
CurMode =Data;
TunerError=ST_ERROR_BAD_PARAMETER;
}
break; /* error */
}
/* Get the Hierarchical Mode */
Data=STTUNER_IOREG_GetField(&(Instance->DeviceMap), Instance->IOHandle, F0362_TPS_HIERMODE);
switch(Data)
{
case 0 : CurHierMode=STTUNER_HIER_ALPHA_NONE; break;
case 1 : CurHierMode=STTUNER_HIER_ALPHA_1; break;
case 2 : CurHierMode=STTUNER_HIER_ALPHA_2; break;
case 3 : CurHierMode=STTUNER_HIER_ALPHA_4; break;
default :
CurHierMode=Data;
TunerError=ST_ERROR_BAD_PARAMETER;
break; /* error */
}
/* Get the FEC Rate */
Data = STTUNER_IOREG_GetField(&(Instance->DeviceMap),Instance->IOHandle, F0362_TPS_HPCODE);
switch (Data)
{
case 0: CurFECRates = STTUNER_FEC_1_2; break;
case 1: CurFECRates = STTUNER_FEC_2_3; break;
case 2: CurFECRates = STTUNER_FEC_3_4; break;
case 3: CurFECRates = STTUNER_FEC_5_6; break;
case 4: CurFECRates = STTUNER_FEC_7_8; break;
default:
CurFECRates = Data;
TunerError=ST_ERROR_BAD_PARAMETER;
break; /* error */
}
/* Get the Guard time */
Data = STTUNER_IOREG_GetField(&(Instance->DeviceMap), Instance->IOHandle, F0362_TPS_GUARD);
switch (Data)
{
case 0: CurGuard = STTUNER_GUARD_1_32; break;
case 1: CurGuard = STTUNER_GUARD_1_16; break;
case 2: CurGuard = STTUNER_GUARD_1_8; break;
case 3: CurGuard = STTUNER_GUARD_1_4; break;
default:
CurGuard = Data;
TunerError=ST_ERROR_BAD_PARAMETER;
break; /* error */
}
/* Get the spectrum.Register is not read as spectrum inversion code added*/
CurSpectrum = Instance->ResultSpectrum;
/* Get the correct frequency */
CurFrequency = TunerInfo_p->Frequency;
/********Frequency offset calculation done here*******************/
STTUNER_IOREG_SetField(&(Instance->DeviceMap), Instance->IOHandle,F0362_FREEZE,1);
STTUNER_IOREG_GetContigousRegisters(&(Instance->DeviceMap), Instance->IOHandle,R0362_CRL_FREQ1,3,crl_freq1);
STTUNER_IOREG_SetField(&(Instance->DeviceMap), Instance->IOHandle,F0362_FREEZE,0);
CrlRegVal = (crl_freq1[2]<<16) ;
CrlRegVal+= (crl_freq1[1] <<8);
CrlRegVal+= crl_freq1[0];
if (CrlRegVal > 8388607)
{
offset =(CrlRegVal - 16777216);
TunerInfo_p->ScanInfo.FreqOff = offset_type;
}
else
{
offset = CrlRegVal;/*2's complement negative value*/
}
offset *=2; /*Actual value should be multiplied by 2*/
STTUNER_IOREG_GetRegister(&(Instance->DeviceMap), Instance->IOHandle,R0362_SYR_STAT);
offset=((offset*11)/10)*4/(FE_362_Pow(4,STTUNER_IOREG_GetField(&(Instance->DeviceMap),Instance->IOHandle,F0362_SYR_MODE))*16384);
Data = STTUNER_IOREG_GetField(&(Instance->DeviceMap), Instance->IOHandle, F0362_INV_SPECTR);
if(offset >= 150 )
{
if(Data ==0)
{
offset_type =STTUNER_OFFSET_POSITIVE;
}
else
{
offset_type =STTUNER_OFFSET_NEGATIVE;
}
}
else if(offset < - 150)
{
if(Data==0)
{
offset_type =STTUNER_OFFSET_NEGATIVE;
}
else
{
offset_type =STTUNER_OFFSET_POSITIVE;
}
}
else
{
offset = 0;
offset_type=STTUNER_OFFSET_NONE;
}
TunerInfo_p->ScanInfo.FreqOff = offset_type;
TunerInfo_p->ScanInfo.ResidualOffset = offset;
/************************************************/
/* Get the echo position */
CurEchoPos=STTUNER_IOREG_GetField(&(Instance->DeviceMap), Instance->IOHandle, F0362_LONG_ECHO);
TunerInfo_p->FrequencyFound = CurFrequency;
TunerInfo_p->SignalQuality = CurSignalQuality;
TunerInfo_p->BitErrorRate = CurBitErrorRate;
TunerInfo_p->ScanInfo.Modulation = CurModulation;
TunerInfo_p->ScanInfo.Mode = CurMode;
TunerInfo_p->ScanInfo.FECRates = CurFECRates;
TunerInfo_p->ScanInfo.Guard = CurGuard;
TunerInfo_p->ScanInfo.Spectrum = CurSpectrum;
TunerInfo_p->ScanInfo.EchoPos = CurEchoPos;
TunerInfo_p->ScanInfo.Hierarchy = CurHierMode;
Inst[Instance->TopLevelHandle].TunerInfoError = TunerError;
#ifdef STTUNER_DEBUG_MODULE_TERDRV_D0362
STTBX_Print(("F=%d SQ=%u BER=%u Modul=%u Mode=%u FR=%u G=%u Sp=%u\n",CurFrequency,CurSignalQuality,CurBitErrorRate,CurModulation,CurMode,CurFECRates,CurGuard,CurSpectrum));
#endif
/*Error handling from device map*/
return(Error);
}
/* ----------------------------------------------------------------------------
Name: demod_d0362_GetSignalQuality()
Description:
Parameters:
Return Value:
---------------------------------------------------------------------------- */
ST_ErrorCode_t demod_d0362_GetSignalQuality(DEMOD_Handle_t Handle, U32 *SignalQuality_p, U32 *Ber)
{
#ifdef STTUNER_DEBUG_MODULE_TERDRV_D0362
const char *identity = "STTUNER d0362.c demod_d0362_GetSignalQuality()";
#endif
ST_ErrorCode_t Error = ST_NO_ERROR;
D0362_InstanceData_t *Instance;
/* private driver instance data */
Instance = d0362_GetInstFromHandle(Handle);
/* Read noise estimations for C/N and BER */
FE_362_GetNoiseEstimator(&(Instance->DeviceMap), Instance->IOHandle, SignalQuality_p, Ber);
#ifdef STTUNER_DEBUG_MODULE_TERDRV_D0362
STTBX_Print(("%s SignalQuality=%u Ber=%u\n", identity, *SignalQuality_p, *Ber));
#endif
Error = Instance->DeviceMap.Error;
return(Error);
}
/* ----------------------------------------------------------------------------
Name: demod_d0362_GetModulation()
Description:
Parameters:
Return Value:
---------------------------------------------------------------------------- */
ST_ErrorCode_t demod_d0362_GetModulation(DEMOD_Handle_t Handle, STTUNER_Modulation_t *Modulation)
{
#ifdef STTUNER_DEBUG_MODULE_TERDRV_D0362
const char *identity = "STTUNER d0362.c demod_d0362_GetModulation()";
#endif
STTUNER_Modulation_t CurModulation;
ST_ErrorCode_t Error = ST_NO_ERROR;
D0362_InstanceData_t *Instance;
U32 Data;
/* private driver instance data */
Instance = d0362_GetInstFromHandle(Handle);
/* Get the modulation type */
/*Use IOREG Call instead of chip call */
STTUNER_IOREG_GetField(&(Instance->DeviceMap), Instance->IOHandle, F0362_TPS_CONST);
Data = STTUNER_IOREG_GetField(&(Instance->DeviceMap),Instance->IOHandle, F0362_TPS_CONST);
switch (Data)
{
case 0:
CurModulation = STTUNER_MOD_QPSK;
break;
case 1:
CurModulation = STTUNER_MOD_16QAM;
break;
case 2:
CurModulation = STTUNER_MOD_64QAM;
break;
default:
CurModulation = STTUNER_MOD_ALL;
break;
}
*Modulation = CurModulation;
#ifdef STTUNER_DEBUG_MODULE_TERDRV_D0362
STTBX_Print(("%s Modulation=%u\n", identity, *Modulation));
#endif
/*add Error handling from device map*/
return(Error);
}
/* ----------------------------------------------------------------------------
Name: demod_d0362_GetAGC()
Description:
Parameters:
Return Value:
---------------------------------------------------------------------------- */
ST_ErrorCode_t demod_d0362_GetAGC(DEMOD_Handle_t Handle, S16 *Agc)
{
#ifdef STTUNER_DEBUG_MODULE_TERDRV_D0362
const char *identity = "STTUNER d0362.c demod_d0362_GetAGC()";
#endif
ST_ErrorCode_t Error = ST_NO_ERROR;
S16 Data1=0;
S16 Data2=0;
D0362_InstanceData_t *Instance;
/** fix done here for the bug GNBvd20972 **
** where body of the function demod_d0362_GetAGC written **
** and the function now returns the core gain **/
/* private driver instance data */
Instance = d0362_GetInstFromHandle(Handle);
/* Get the mode type */
Data1 = STTUNER_IOREG_GetField(&(Instance->DeviceMap), Instance->IOHandle, F0362_AGC_GAIN_LO);
Data2 = STTUNER_IOREG_GetField(&(Instance->DeviceMap), Instance->IOHandle, F0362_AGC_GAIN_HI);
Data2 <<=8;
Data2 &= 0x0F00;
Data2 |= Data1 ;
*Agc=Data2 ;
/*add error handling from device map*/
return(Error);
}
/* ----------------------------------------------------------------------------
Name: demod_d0362_GetFECRates()
Description:
Parameters:
Return Value:
---------------------------------------------------------------------------- */
ST_ErrorCode_t demod_d0362_GetFECRates(DEMOD_Handle_t Handle, STTUNER_FECRate_t *FECRates)
{
#ifdef STTUNER_DEBUG_MODULE_TERDRV_D0362
const char *identity = "STTUNER d0362.c demod_d0362_GetFECRates()";
#endif
U8 Data;
STTUNER_FECRate_t CurFecRate;
ST_ErrorCode_t Error = ST_NO_ERROR;
D0362_InstanceData_t *Instance;
/* private driver instance data */
Instance = d0362_GetInstFromHandle(Handle);
CurFecRate = 0;
STTUNER_IOREG_GetField(&(Instance->DeviceMap), Instance->IOHandle, F0362_TPS_HPCODE);
Data = STTUNER_IOREG_GetField(&(Instance->DeviceMap),Instance->IOHandle, F0362_TPS_HPCODE);
/* Convert venrate value to a STTUNER fecrate */
switch (Data)
{
case 0:
CurFecRate = STTUNER_FEC_1_2;
break;
case 1:
CurFecRate = STTUNER_FEC_2_3;
break;
case 2:
CurFecRate = STTUNER_FEC_3_4;
break;
case 3:
CurFecRate = STTUNER_FEC_5_6;
break;
case 4:
CurFecRate = STTUNER_FEC_7_8;
break;
default:
CurFecRate = 0; /* error */
break;
}
*FECRates = CurFecRate; /* Copy back for caller */
#ifdef STTUNER_DEBUG_MODULE_TERDRV_D0362
STTBX_Print(("%s FECRate=%u\n", identity, CurFecRate));
#endif
/*Add error handling from device map*/
return(Error);
}
/* ----------------------------------------------------------------------------
Name: demod_d0362_GetMode()
Description:
Parameters:
Return Value:
---------------------------------------------------------------------------- */
ST_ErrorCode_t demod_d0362_GetMode(DEMOD_Handle_t Handle, STTUNER_Mode_t *Mode)
{
#ifdef STTUNER_DEBUG_MODULE_TERDRV_D0362
const char *identity = "STTUNER d0362.c demod_d0362_GetMode()";
#endif
U8 Data;
STTUNER_Mode_t CurMode;
ST_ErrorCode_t Error = ST_NO_ERROR;
D0362_InstanceData_t *Instance;
/* private driver instance data */
Instance = d0362_GetInstFromHandle(Handle);
/* Get the mode type */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -