📄 d0297.c
字号:
STTBX_Print(("%s fail reset device\n", identity));
#endif
SEM_UNLOCK(Lock_InitTermOpenClose);
return(Error);
}
/* Set capabilties */
Capability->FECAvail = 0;
Capability->ModulationAvail = STTUNER_MOD_QAM |
STTUNER_MOD_16QAM |
STTUNER_MOD_32QAM |
STTUNER_MOD_64QAM |
STTUNER_MOD_128QAM |
STTUNER_MOD_256QAM; /* direct mapping to STTUNER_Modulation_t */
Capability->J83Avail = STTUNER_J83_A |
STTUNER_J83_C;
Capability->AGCControl = FALSE;
Capability->SymbolMin = STV0297_SYMBOLMIN; /* 1 MegaSymbols/sec (e.g) */
Capability->SymbolMax = STV0297_SYMBOLMAX; /* 11 MegaSymbols/sec (e.g) */
Capability->BerMax = 0;
Capability->SignalQualityMax = STV0297_MAX_SIGNAL_QUALITY;
Capability->AgcMax = STV0297_MAX_AGC;
/* Setup stateblock */
Instance->StateBlock.ScanMode = DEF0297_CHANNEL;
Instance->StateBlock.lastAGC2Coef = 1;
Instance->StateBlock.Ber[0] = 0;
Instance->StateBlock.Ber[1] = 50; /* Default Ratio for BER */
Instance->StateBlock.Ber[2] = 0;
Instance->StateBlock.CNdB = 0;
Instance->StateBlock.SignalQuality = 0;
/* TS output mode */
switch (Instance->TSOutputMode)
{
case STTUNER_TS_MODE_SERIAL:
/*
--- For Eval 5518 set jumpers to
--- JP08 off Serial
--- JP18 off FrontEnd
--- JP10 on Inv TS/CLK
--- JP09 on NotCLK
--- JP26 on D0/D7
*/
Error |= STTUNER_IOREG_SetRegister(&Instance->DeviceMap, Instance->IOHandle, R0297_OUTFORMAT_0, 0x47);
Error |= STTUNER_IOREG_SetRegister(&Instance->DeviceMap, Instance->IOHandle, R0297_OUTFORMAT_1, 0x00);
Error |= STTUNER_IOREG_SetRegister(&Instance->DeviceMap, Instance->IOHandle, R0297_OUTFORMAT_2, 0x00);
Error |= STTUNER_IOREG_SetRegister(&Instance->DeviceMap, Instance->IOHandle, R0297_CTRL_4, 0x22);
break;
case STTUNER_TS_MODE_DVBCI:
/*
--- For Eval 5518 set jumpers to
--- JP08 on Serial
--- JP18 off FrontEnd
--- JP10 off Inv TS/CLK
--- JP09 on NotCLK
--- JP26 on D0/D7
*/
Error |= STTUNER_IOREG_SetRegister(&Instance->DeviceMap, Instance->IOHandle, R0297_OUTFORMAT_0, 0x43);
Error |= STTUNER_IOREG_SetRegister(&Instance->DeviceMap, Instance->IOHandle, R0297_OUTFORMAT_1, 0x40);
Error |= STTUNER_IOREG_SetRegister(&Instance->DeviceMap, Instance->IOHandle, R0297_OUTFORMAT_2, 0x12);
Error |= STTUNER_IOREG_SetRegister(&Instance->DeviceMap, Instance->IOHandle, R0297_CTRL_4, 0x00); /* ckx2dis = 0, ckx2sel = 0 */
break;
case STTUNER_TS_MODE_PARALLEL:
case STTUNER_TS_MODE_DEFAULT:
default:
/*
--- For Eval 5512 set jumpers to
--- JP26 off
--- JP27 on
--- JP28 on
--- JP29 on
*/
/*
--- For Eval 5518 set jumpers to
--- JP08 on Serial
--- JP18 off FrontEnd
--- JP10 off Inv TS/CLK
--- JP09 on NotCLK
--- JP26 on D0/D7
*/
Error |= STTUNER_IOREG_SetRegister(&Instance->DeviceMap, Instance->IOHandle, R0297_OUTFORMAT_0, 0x43);
Error |= STTUNER_IOREG_SetRegister(&Instance->DeviceMap, Instance->IOHandle, R0297_OUTFORMAT_1, 0x00);
Error |= STTUNER_IOREG_SetRegister(&Instance->DeviceMap, Instance->IOHandle, R0297_OUTFORMAT_2, 0x00);
Error |= STTUNER_IOREG_SetRegister(&Instance->DeviceMap, Instance->IOHandle, R0297_CTRL_4, 0x04);
break;
}
/* Set default error count mode, bit error rate */
STTUNER_IOREG_SetField(&Instance->DeviceMap, Instance->IOHandle, F0297_BERT_ON, 0); /* Ber count Off */
STTUNER_IOREG_SetField(&Instance->DeviceMap, Instance->IOHandle, F0297_ERR_MODE, 0);
/* finally (as nor more errors to check for, allocate handle */
Instance->TopLevelHandle = OpenParams->TopLevelHandle;
*Handle = (U32)Instance;
#ifdef STTUNER_DEBUG_MODULE_CABDRV_D0297
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_d0297_Close()
Description:
Parameters:
Return Value:
---------------------------------------------------------------------------- */
ST_ErrorCode_t demod_d0297_Close(DEMOD_Handle_t Handle, DEMOD_CloseParams_t *CloseParams)
{
#ifdef STTUNER_DEBUG_MODULE_CABDRV_D0297
const char *identity = "STTUNER d0297.c demod_d0297_Close()";
#endif
ST_ErrorCode_t Error = ST_NO_ERROR;
D0297_InstanceData_t *Instance;
/* private driver instance data */
Instance = D0297_GetInstFromHandle(Handle);
if(Installed == FALSE)
{
#ifdef STTUNER_DEBUG_MODULE_CABDRV_D0297
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_D0297
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_D0297
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_D0297
STTBX_Print(("%s closed\n", identity));
#endif
SEM_UNLOCK(Lock_InitTermOpenClose);
return(Error);
}
/* ----------------------------------------------------------------------------
Name: demod_d0297_IsAnalogCarrier()
Description:
Parameters:
Return Value:
---------------------------------------------------------------------------- */
ST_ErrorCode_t demod_d0297_IsAnalogCarrier(DEMOD_Handle_t Handle, BOOL *IsAnalog)
{
ST_ErrorCode_t Error = ST_ERROR_FEATURE_NOT_SUPPORTED;
return(Error);
}
/* ----------------------------------------------------------------------------
Name: demod_d0297_GetSignalQuality()
Description:
Parameters:
Return Value:
---------------------------------------------------------------------------- */
ST_ErrorCode_t demod_d0297_GetSignalQuality(DEMOD_Handle_t Handle, U32 *SignalQuality_p, U32 *Ber_p)
{
#ifdef STTUNER_DEBUG_MODULE_CABDRV_D0297
const char *identity = "STTUNER d0297.c demod_d0297_GetSignalQuality()";
clock_t time_start, time_end;
#endif
ST_ErrorCode_t Error = ST_NO_ERROR;
STTUNER_tuner_instance_t *TunerInstance;
STTUNER_InstanceDbase_t *Inst;
D0297_InstanceData_t *Instance;
int Mean, CNdB100;
int ApplicationBERCount;
BOOL IsLocked;
/*
--- Set parameters
*/
#ifdef STTUNER_DEBUG_MODULE_CABDRV_D0297
time_start = time_now();
#endif
*SignalQuality_p = 0;
*Ber_p = 0;
Mean = 0;
CNdB100 = 0;
ApplicationBERCount = 0; /* Bit Error counter */
/* private driver instance data */
Instance = D0297_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_d0297_IsLocked(Handle, &IsLocked);
if ( Error == ST_NO_ERROR && IsLocked )
{
/*
--- Read Blk Counter
*/
Reg0297_StopBlkCounter(&Instance->DeviceMap, Instance->IOHandle);
/*
--- Read noise estimations and BER
*/
Driv0297BertCount(&Instance->DeviceMap, Instance->IOHandle, &Instance->StateBlock,
TunerInstance, &ApplicationBERCount, Instance->StateBlock.Ber);
Driv0297CNEstimator(&Instance->DeviceMap, Instance->IOHandle, &Instance->StateBlock,
TunerInstance, &Mean, &CNdB100, &Instance->StateBlock.SignalQuality);
/*
--- Restart Blk Counter
*/
Reg0297_StartBlkCounter(&Instance->DeviceMap, Instance->IOHandle);
/*
--- Set results
*/
*SignalQuality_p = Instance->StateBlock.SignalQuality;
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_D0297
time_end = time_now();
STTBX_Print(("%s Mean=%d CN=%d dBx100 (%d %%) (%u ms)\n", identity,
Mean, CNdB100, Instance->StateBlock.SignalQuality,
((time_minus(time_end, time_start))*1000)/ST_GetClocksPerSecond()
));
/*
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_d0297_GetModulation()
Description:
Parameters:
Return Value:
---------------------------------------------------------------------------- */
ST_ErrorCode_t demod_d0297_GetModulation(DEMOD_Handle_t Handle, STTUNER_Modulation_t *Modulation)
{
/*
#ifdef STTUNER_DEBUG_MODULE_CABDRV_D0297
const char *identity = "STTUNER d0297.c demod_d0297_GetModulation()";
#endif
*/
ST_ErrorCode_t Error = ST_NO_ERROR;
D0297_InstanceData_t *Instance;
/* private driver instance data */
Instance = D0297_GetInstFromHandle(Handle);
/* This implementation of the DEMOD device only supports one type of modulation */
*Modulation = Reg0297_GetQAMSize(&Instance->DeviceMap, Instance->IOHandle);
/*
#ifdef STTUNER_DEBUG_MODULE_CABDRV_D0297
STTBX_Print(("%s Modulation=%u\n", identity, *Modulation));
#endif
*/
Error |= Instance->DeviceMap.Error;
Instance->DeviceMap.Error = ST_NO_ERROR;
return(Error);
}
/* ----------------------------------------------------------------------------
Name: demod_d0297_GetAGC()
Description:
Parameters:
Return Value:
---------------------------------------------------------------------------- */
ST_ErrorCode_t demod_d0297_GetAGC(DEMOD_Handle_t Handle, S16 *Agc)
{
#ifdef STTUNER_DEBUG_MODULE_CABDRV_D0297
const char *identity = "STTUNER d0297.c demod_d0297_GetAGC()";
#endif
ST_ErrorCode_t Error = ST_NO_ERROR;
D0297_InstanceData_t *Instance;
/* private driver instance data */
Instance = D0297_GetInstFromHandle(Handle);
*Agc = (S16)(0xFFFF & Reg0297_GetAGC(&Instance->DeviceMap, Instance->IOHandle));
#ifdef STTUNER_DEBUG_MODULE_CABDRV_D0297
STTBX_Print(("%s Agc=%u\n", identity, *Agc));
#endif
Error |= Instance->DeviceMap.Error;
Instance->DeviceMap.Error = ST_NO_ERROR;
return(Error);
}
/* ----------------------------------------------------------------------------
Name: demod_d0297_GetFECRates()
Description:
Parameters:
Return Value:
---------------------------------------------------------------------------- */
ST_ErrorCode_t demod_d0297_GetFECRates(DEMOD_Handle_t Handle, STTUNER_FECRate_t *FECRates)
{
ST_ErrorCode_t Error = ST_ERROR_FEATURE_NOT_SUPPORTED;
return(Error);
}
/* ----------------------------------------------------------------------------
Name: demod_d0297_IsLocked()
Description:
Parameters:
Return Value:
---------------------------------------------------------------------------- */
ST_ErrorCode_t demod_d0297_IsLocked(DEMOD_Handle_t Handle, BOOL *IsLocked)
{
#ifdef STTUNER_DEBUG_MODULE_CABDRV_D0297
const char *identity = "STTUNER d0297.c demod_d0297_IsLocked()";
#endif
ST_ErrorCode_t Error = ST_NO_ERROR;
U8 Version;
D0297_InstanceData_t *Instance;
D0297_SignalType_t SignalType;
/* private driver instance data */
Instance = D0297_GetInstFromHandle(Handle);
*IsLocked = FALSE;
/*
--- Get Version Id (In fact to test I2C Access
*/
Version = Reg0297_GetSTV0297Id(&Instance->DeviceMap, Instance->IOHandle);
if ( Version != STV0297_DEVICE_VERSION)
{
return(ST_ERROR_UNKNOWN_DEVICE);
}
/*
--- Get Information from demod
*/
SignalType = Drv0297_CheckAgc(&Instance->DeviceMap, Instance->IOHandle, &Instance->StateBlock.Params);
if (SignalType == E297_AGCOK)
{
SignalType = Drv0297_CheckData(&Instance->DeviceMap, Instance->IOHandle, &Instance->StateBlock.Params);
if (SignalType == E297_DATAOK)
{
Instance->StateBlock.Result.SignalType = E297_LOCKOK;
*IsLocked = TRUE;
}
else
{
#ifdef STTUNER_DEBUG_MODULE_CABDRV_D0297
STTBX_Print(("%s FRONT END IS UNLOCKED !!!! NO DATA\n", identity));
#endif
/*
--- Update Satus
*/
Instance->StateBlock.Result.SignalType = SignalType;
}
}
else
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -