📄 d0370qam.c
字号:
}
/* Set default error count mode, bit error rate */
/* finally (as nor more errors to check for, allocate handle */
Instance->TopLevelHandle = OpenParams->TopLevelHandle;
*Handle = (U32)Instance;
#ifdef STTUNER_DEBUG_MODULE_CABDRV_D0370QAM
STTBX_Print(("%s opened ok\n", identity));
#endif
SEM_UNLOCK(Lock_InitTermOpenClose);
Error |= Instance->DeviceMap.Error;
Instance->DeviceMap.Error = ST_NO_ERROR;
return(Error);
}
/* ----------------------------------------------------------------------------
Name: demod_d0370QAM_Close()
Description:
Parameters:
Return Value:
---------------------------------------------------------------------------- */
ST_ErrorCode_t demod_d0370QAM_Close(DEMOD_Handle_t Handle, DEMOD_CloseParams_t *CloseParams)
{
#ifdef STTUNER_DEBUG_MODULE_CABDRV_D0370QAM
const char *identity = "STTUNER d0370QAM.c demod_d0370QAM_Close()";
#endif
ST_ErrorCode_t Error = ST_NO_ERROR;
D0370QAM_InstanceData_t *Instance;
/* private driver instance data */
Instance = D0370QAM_GetInstFromHandle(Handle);
if(Installed == FALSE)
{
#ifdef STTUNER_DEBUG_MODULE_CABDRV_D0370QAM
STTBX_Print(("%s fail driver not installed\n", identity));
#endif
return(STTUNER_ERROR_INITSTATE);
}
SEM_LOCK(Lock_InitTermOpenClose);
/* ---------- check that at least one init has taken place ---------- */
if(InstanceChainTop == NULL)
{
#ifdef STTUNER_DEBUG_MODULE_CABDRV_D0370QAM
STTBX_Print(("%s fail nothing initalized\n", identity));
#endif
SEM_UNLOCK(Lock_InitTermOpenClose);
return(STTUNER_ERROR_INITSTATE);
}
if(Instance->TopLevelHandle == STTUNER_MAX_HANDLES)
{
#ifdef STTUNER_DEBUG_MODULE_CABDRV_D0370QAM
STTBX_Print(("%s fail driver instance not open\n", identity));
#endif
SEM_UNLOCK(Lock_InitTermOpenClose);
return(ST_ERROR_OPEN_HANDLE);
}
Instance->TopLevelHandle = STTUNER_MAX_HANDLES;
#ifdef STTUNER_DEBUG_MODULE_CABDRV_D0370QAM
STTBX_Print(("%s closed\n", identity));
#endif
SEM_UNLOCK(Lock_InitTermOpenClose);
return(Error);
}
/* ----------------------------------------------------------------------------
Name: demod_d0370QAM_IsAnalogCarrier()
Description:
Parameters:
Return Value:
---------------------------------------------------------------------------- */
ST_ErrorCode_t demod_d0370QAM_IsAnalogCarrier(DEMOD_Handle_t Handle, BOOL *IsAnalog)
{
ST_ErrorCode_t Error = ST_ERROR_FEATURE_NOT_SUPPORTED;
return(Error);
}
/* ----------------------------------------------------------------------------
Name: demod_d0370QAM_GetSignalQuality()
Description:
Parameters:
Return Value:
---------------------------------------------------------------------------- */
ST_ErrorCode_t demod_d0370QAM_GetSignalQuality(DEMOD_Handle_t Handle, U32 *SignalQuality_p, U32 *Ber_p)
{
#ifdef STTUNER_DEBUG_MODULE_CABDRV_D0370QAM
const char *identity = "STTUNER d0370QAM.c demod_d0370QAM_GetSignalQuality()";
#endif
ST_ErrorCode_t Error = ST_NO_ERROR;
STTUNER_tuner_instance_t *TunerInstance;
STTUNER_InstanceDbase_t *Inst;
D0370QAM_InstanceData_t *Instance;
int Mean, CNdB100;
int ApplicationBERCount;
BOOL IsLocked;
/*
--- Set parameters
*/
*SignalQuality_p = 0;
*Ber_p = 0;
Mean = 0;
CNdB100 = 0;
ApplicationBERCount = 0; /* Bit Error counter */
/* private driver instance data */
Instance = D0370QAM_GetInstFromHandle(Handle);
/* top level public instance data */
Inst = STTUNER_GetDrvInst();
/* get the tuner instance for this driver from the top level handle */
TunerInstance = &Inst[Instance->TopLevelHandle].Cable.Tuner;
/*
--- Get Carrier And Data (TS) status
*/
Error = demod_d0370QAM_IsLocked(Handle, &IsLocked);
if ( Error == ST_NO_ERROR && IsLocked )
{
/*
--- Read noise estimations and BER
*/
Driv0370QAMBertCount(&Instance->DeviceMap, Instance->IOHandle, &Instance->StateBlock,
TunerInstance, &ApplicationBERCount, Instance->StateBlock.Ber);
Driv0370QAMCNEstimator(Handle,&Instance->DeviceMap, Instance->IOHandle, &Mean, &CNdB100, &Instance->StateBlock.SignalQuality);
/*
--- Set results
*/
/*calculate signal quality in % considering 50dB as theoretical maximum*/
*SignalQuality_p = Instance->StateBlock.SignalQuality /STB0370QAM_MAX_SIGNAL_QUALITY_IN_DB;
if ( Instance->StateBlock.Ber[2] == 0 && ApplicationBERCount != 0 )
{
*Ber_p = ApplicationBERCount; /* Set BER to counter (no time to count) */
}
else
{
*Ber_p = Instance->StateBlock.Ber[2];
}
}
#ifdef STTUNER_DEBUG_MODULE_CABDRV_D0370QAM
STTBX_Print(("%s Mean=%d CN=%d dBx100 (%d %%)\n", identity, Mean, CNdB100, Instance->StateBlock.SignalQuality));
STTBX_Print(("%s BERCount=%d BER[0..2] (cnt %d sat %d rate %d 10E-6)\n", identity,
ApplicationBERCount,
Instance->StateBlock.Ber[0],
Instance->StateBlock.Ber[1],
Instance->StateBlock.Ber[2]));
STTBX_Print(("%s SignalQuality %u %% Ber %u 10E-6\n", identity, *SignalQuality_p, *Ber_p));
STTBX_Print(("%s BlkCounter %9d CorrBlk %9d UncorrBlk %9d\n", identity,
Instance->StateBlock.BlkCounter,
Instance->StateBlock.CorrBlk,
Instance->StateBlock.UncorrBlk
));
#endif
Error |= Instance->DeviceMap.Error;
Instance->DeviceMap.Error = ST_NO_ERROR;
return(Error);
}
/* ----------------------------------------------------------------------------
Name: demod_d0370QAM_GetModulation()
Description:
Parameters:
Return Value:
---------------------------------------------------------------------------- */
ST_ErrorCode_t demod_d0370QAM_GetModulation(DEMOD_Handle_t Handle, STTUNER_Modulation_t *Modulation)
{
#ifdef STTUNER_DEBUG_MODULE_CABDRV_D0370QAM
const char *identity = "STTUNER d0370QAM.c demod_d0370QAM_GetModulation()";
#endif
ST_ErrorCode_t Error = ST_NO_ERROR;
D0370QAM_InstanceData_t *Instance;
/* private driver instance data */
Instance = D0370QAM_GetInstFromHandle(Handle);
/* This implementation of the DEMOD device only supports one type of modulation */
*Modulation = Reg0370QAM_GetQAMSize(&Instance->DeviceMap, Instance->IOHandle);
#ifdef STTUNER_DEBUG_MODULE_CABDRV_D0370QAM
STTBX_Print(("%s Modulation=%u\n", identity, *Modulation));
#endif
Error |= Instance->DeviceMap.Error;
Instance->DeviceMap.Error = ST_NO_ERROR;
return(Error);
}
/* ----------------------------------------------------------------------------
Name: demod_d0370QAM_GetAGC()
Description:
Parameters:
Return Value:
---------------------------------------------------------------------------- */
ST_ErrorCode_t demod_d0370QAM_GetAGC(DEMOD_Handle_t Handle, S16 *Agc)
{
#ifdef STTUNER_DEBUG_MODULE_CABDRV_D0370QAM
const char *identity = "STTUNER d0370QAM.c demod_d0370QAM_GetAGC()";
#endif
ST_ErrorCode_t Error = ST_NO_ERROR;
D0370QAM_InstanceData_t *Instance;
/* private driver instance data */
Instance = D0370QAM_GetInstFromHandle(Handle);
*Agc = (S16)(0xFFFF & Reg0370QAM_GetAGC(&Instance->DeviceMap, Instance->IOHandle));
#ifdef STTUNER_DEBUG_MODULE_CABDRV_D0370QAM
STTBX_Print(("%s Agc=%u\n", identity, *Agc));
#endif
Error |= Instance->DeviceMap.Error;
Instance->DeviceMap.Error = ST_NO_ERROR;
return(Error);
}
/* ----------------------------------------------------------------------------
Name: demod_d0370QAM_GetFECRates()
Description:
Parameters:
Return Value:
---------------------------------------------------------------------------- */
ST_ErrorCode_t demod_d0370QAM_GetFECRates(DEMOD_Handle_t Handle, STTUNER_FECRate_t *FECRates)
{
ST_ErrorCode_t Error = ST_ERROR_FEATURE_NOT_SUPPORTED;
return(Error);
}
/* ----------------------------------------------------------------------------
Name: demod_d0370QAM_IsLocked()
Description:
Parameters:
Return Value:
---------------------------------------------------------------------------- */
ST_ErrorCode_t demod_d0370QAM_IsLocked(DEMOD_Handle_t Handle, BOOL *IsLocked)
{
#ifdef STTUNER_DEBUG_MODULE_CABDRV_D0370QAM
const char *identity = "STTUNER d0370QAM.c demod_d0370QAM_IsLocked()";
#endif
ST_ErrorCode_t Error = ST_NO_ERROR;
U8 Version;
D0370QAM_InstanceData_t *Instance;
D0370QAM_SignalType_t SignalType;
/* private driver instance data */
Instance = D0370QAM_GetInstFromHandle(Handle);
*IsLocked = FALSE;
/*
--- Get Version Id (In fact to test I2C Access
*/
Version = Reg0370QAM_GetSTB0370QAMId(&Instance->DeviceMap, Instance->IOHandle);
if ((Version & STB0370QAM_DEVICE_VERSION) != STB0370QAM_DEVICE_VERSION)
{
#ifdef STTUNER_DEBUG_MODULE_CABDRV_D0370QAM
STTBX_Print(("%s fail device not found (0x%02x)\n", identity, Version));
#endif
SEM_UNLOCK(Lock_InitTermOpenClose);
return(ST_ERROR_UNKNOWN_DEVICE);
}
/*
--- Get Information from demod
*/
SignalType = Drv0370QAM_CheckAgc(&Instance->DeviceMap, Instance->IOHandle, &Instance->StateBlock.Params);
if (SignalType == E370QAM_AGCOK)
{
SignalType = Drv0370QAM_CheckData(&Instance->DeviceMap, Instance->IOHandle, &Instance->StateBlock.Params);
if (SignalType == E370QAM_DATAOK)
{
Instance->StateBlock.Result.SignalType = E370QAM_LOCKOK;
*IsLocked = TRUE;
}
else
{
#ifdef STTUNER_DEBUG_MODULE_CABDRV_D0370QAM
STTBX_Print(("%s FRONT END IS UNLOCKED !!!! NO DATA\n", identity));
#endif
/*
--- Update Satus
*/
Instance->StateBlock.Result.SignalType = SignalType;
}
}
else
{
#ifdef STTUNER_DEBUG_MODULE_CABDRV_D0370QAM
STTBX_Print(("%s FRONT END IS UNLOCKED !!!! NO AGC\n", identity));
#endif
/*
--- Update Satus
*/
Instance->StateBlock.Result.SignalType = SignalType;
}
#ifdef STTUNER_DEBUG_MO
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -