📄 tmbsl10086.c
字号:
// NOTES: the value stocked in the object is returned
//-----------------------------------------------------------------------------
//
tmErrorCode_t
tmbsl10086GetRF (
tmUnitSelect_t demodUnit, // I: Demod unit number
UInt32 *puRF // O: RF freqency (KHz)
)
{
UInt32 uRF;
//----------------------
// test input parameters
//----------------------
// test the instance number
if (demodUnit > TDA10086_MAX_UNITS)
return TMBSL_ERR_DEMOD_BAD_UNIT_NUMBER;
// test the object
if (g10086Instance[demodUnit].Init == False)
return TMBSL_ERR_DEMOD_NOT_INITIALIZED;
//----------------------
// Core function
//----------------------
if ( !bAutoScan || (bAutoScan && bAutoScanReallyStarted))
{
*puRF = g10086Instance[demodUnit].sCurrentChannel.uRF;
}
else if (bAutoScan && !bAutoScanReallyStarted)
{
uRF = (g10086Instance[demodUnit].uStartFrequency + 3000000);
*puRF = uRF;
}
return TM_OK;
}
//-----------------------------------------------------------------------------
// FUNCTION: tmbsl10086SetSR
//
// DESCRIPTION: this function calculates the frequency symbol for registers
// BDR_LSB, BDR_MID, BDR_MSB, BDR_INV
//
// RETURN: TMBSL_ERR_DEMOD_BAD_UNIT_NUMBER
// TMBSL_ERR_DEMOD_NOT_INITIALIZED
// TMBSL_ERR_DEMOD_BAD_PARAMETER
// TM_OK
//
// NOTES:
//-----------------------------------------------------------------------------
//
tmErrorCode_t
tmbsl10086SetSR (
tmUnitSelect_t demodUnit, // I: Demod unit number
UInt32 uSR // I: Symbol Rate (Bauds)
)
{
//----------------------
// test input parameters
//----------------------
// test the instance number
if (demodUnit > TDA10086_MAX_UNITS)
return TMBSL_ERR_DEMOD_BAD_UNIT_NUMBER;
// test the object
if (g10086Instance[demodUnit].Init == False)
return TMBSL_ERR_DEMOD_NOT_INITIALIZED;
// test the parameter value
if (uSR < TDA10086_SR_MIN || uSR > TDA10086_SR_MAX)
return TMBSL_ERR_DEMOD_BAD_PARAMETER;
//----------------------
// Core function
//----------------------
//update uSRui only one time at beginning to keep the value setting by user : modif PR1047 YFL
g10086Instance[demodUnit].sCurrentChannel.uSRui = uSR;
if (Tda10086WriteSR(&g10086Instance[demodUnit], &uSR) == False)
return TM_FALSE;
// update return value
g10086Instance[demodUnit].sCurrentChannel.uSR = uSR;
// set limits
g10086Instance[demodUnit].uStartSymbolRate = g10086Instance[demodUnit].uStopSymbolRate = uSR;
// start algo
g10086Instance[demodUnit].bStartAlgo = True;
return TM_OK;
}
//-----------------------------------------------------------------------------
// FUNCTION: tmbsl10086GetSR
//
// DESCRIPTION: this function reads the current frequency symbol.
//
// RETURN: TMBSL_ERR_DEMOD_BAD_UNIT_NUMBER
// TMBSL_ERR_DEMOD_NOT_INITIALIZED
// TM_OK
//
// NOTES: the value stocked in the object is returned
//-----------------------------------------------------------------------------
//
tmErrorCode_t
tmbsl10086GetSR (
tmUnitSelect_t demodUnit, // I: Demod unit number
UInt32 *puSR // I: Symbol Rate (Bauds)
)
{
//----------------------
// test input parameters
//----------------------
// test the instance number
if (demodUnit > TDA10086_MAX_UNITS)
return TMBSL_ERR_DEMOD_BAD_UNIT_NUMBER;
// test the object
if (g10086Instance[demodUnit].Init == False)
return TMBSL_ERR_DEMOD_NOT_INITIALIZED;
//----------------------
// Core function
//----------------------
*puSR = g10086Instance[demodUnit].sCurrentChannel.uSRui; //modif PR1047 YFL
return TM_OK;
}
//-----------------------------------------------------------------------------
// FUNCTION: tmbsl10086SetSI
//
// DESCRIPTION: this function programs the spectral inversion
//
// RETURN: TMBSL_ERR_DEMOD_BAD_UNIT_NUMBER
// TMBSL_ERR_DEMOD_NOT_INITIALIZED
// TMBSL_ERR_DEMOD_BAD_PARAMETER
// TM_OK
//
// NOTES:
//-----------------------------------------------------------------------------
//
tmErrorCode_t
tmbsl10086SetSI (
tmUnitSelect_t demodUnit, // I: Demod unit number
tmhalFESpectrum_t eSI // I: Spectral Inversion
)
{
//----------------------
// test input parameters
//----------------------
// test the instance number
if (demodUnit > TDA10086_MAX_UNITS)
return TMBSL_ERR_DEMOD_BAD_UNIT_NUMBER;
// test the object
if (g10086Instance[demodUnit].Init == False)
return TMBSL_ERR_DEMOD_NOT_INITIALIZED;
// test the parameter value
if (eSI >= tmhalFESpectralInvMax)
return TMBSL_ERR_DEMOD_BAD_PARAMETER;
//----------------------
// Core function
//----------------------
if (!g10086Instance[demodUnit].sConfig.bIQ_Swapped)
{
// if IQ not swapped
switch(eSI)
{
case tmhalFESpectrumNormal:
g10086Instance[demodUnit].systemFunc.SY_WriteBit(
g10086Instance[demodUnit].uDemodHwAdd,
TDA10086_CONF_IND,
TDA10086_CONF_SPECINV_MSK,
TDA10086_CONF_NOSPECINV_VAL);
g10086Instance[demodUnit].sApiStatus.iAutoSpecInv = 0;
break;
case tmhalFESpectrumInverted:
g10086Instance[demodUnit].systemFunc.SY_WriteBit(
g10086Instance[demodUnit].uDemodHwAdd,
TDA10086_CONF_IND,
TDA10086_CONF_SPECINV_MSK,
TDA10086_CONF_SPECINV_VAL);
g10086Instance[demodUnit].sApiStatus.iAutoSpecInv = 0;
break;
default:
g10086Instance[demodUnit].systemFunc.SY_WriteBit(
g10086Instance[demodUnit].uDemodHwAdd,
TDA10086_CONF_IND,
TDA10086_CONF_SPECINV_MSK,
TDA10086_CONF_AUTOSPECINV_VAL);
g10086Instance[demodUnit].sApiStatus.iAutoSpecInv = 1;
break;
}
}
else
{
// if IQ swapped
switch(eSI)
{
case tmhalFESpectrumNormal:
g10086Instance[demodUnit].systemFunc.SY_WriteBit(
g10086Instance[demodUnit].uDemodHwAdd,
TDA10086_CONF_IND,
TDA10086_CONF_SPECINV_MSK,
TDA10086_CONF_SPECINV_VAL);
g10086Instance[demodUnit].sApiStatus.iAutoSpecInv = 0;
break;
case tmhalFESpectrumInverted:
g10086Instance[demodUnit].systemFunc.SY_WriteBit(
g10086Instance[demodUnit].uDemodHwAdd,
TDA10086_CONF_IND,
TDA10086_CONF_SPECINV_MSK,
TDA10086_CONF_NOSPECINV_VAL);
g10086Instance[demodUnit].sApiStatus.iAutoSpecInv = 0;
break;
default:
g10086Instance[demodUnit].systemFunc.SY_WriteBit(
g10086Instance[demodUnit].uDemodHwAdd,
TDA10086_CONF_IND,
TDA10086_CONF_SPECINV_MSK,
TDA10086_CONF_AUTOSPECINV_VAL);
g10086Instance[demodUnit].sApiStatus.iAutoSpecInv = 1;
break;
}
}
// start algo
g10086Instance[demodUnit].bStartAlgo = True;
// update value
g10086Instance[demodUnit].sCurrentChannel.eSI = eSI;
return TM_OK;
}
//-----------------------------------------------------------------------------
// FUNCTION: tmbsl10086GetSI
//
// DESCRIPTION: this function reads the spectral inversion regarding to the value
// of the IQswapped at the input of the tuner.
// 0: no spectral inversion else spectral inversion.
//
// RETURN: TMBSL_ERR_DEMOD_BAD_UNIT_NUMBER
// TMBSL_ERR_DEMOD_NOT_INITIALIZED
// TM_OK
//
// NOTES: the register is read each time
//-----------------------------------------------------------------------------
//
tmErrorCode_t
tmbsl10086GetSI (
tmUnitSelect_t demodUnit, // I: Demod unit number
tmhalFESpectrum_t *peSI // O: Spectral Inversion
)
{
UInt32 uRegister;
//----------------------
// test input parameters
//----------------------
// test the instance number
if (demodUnit > TDA10086_MAX_UNITS)
return TMBSL_ERR_DEMOD_BAD_UNIT_NUMBER;
// test the object
if (g10086Instance[demodUnit].Init == False)
return TMBSL_ERR_DEMOD_NOT_INITIALIZED;
//----------------------
// Core function
//----------------------
// Read the spectral inversion in the register
g10086Instance[demodUnit].systemFunc.SY_Read(
g10086Instance[demodUnit].uDemodHwAdd,
TDA10086_CONF_IND,
1,
&uRegister);
// check value
switch(uRegister & TDA10086_CONF_SPECINV_MSK)
{
case TDA10086_CONF_NOSPECINV_VAL:
*peSI = tmhalFESpectrumNormal;
break;
case TDA10086_CONF_SPECINV_VAL:
*peSI = tmhalFESpectrumInverted;
break;
default:
// Read the result of the auto spectral inversion
g10086Instance[demodUnit].systemFunc.SY_Read(
g10086Instance[demodUnit].uDemodHwAdd,
TDA10086_STATUS_IND,
1,
&uRegister);
if (uRegister & TDA10086_STATUS_SIA_MSK)
*peSI = tmhalFESpectrumInverted;
else
*peSI = tmhalFESpectrumNormal;
break;
}
// check if I/Q are swapped
if (g10086Instance[demodUnit].sConfig.bIQ_Swapped)
{
// invert
if (*peSI == tmhalFESpectrumInverted)
*peSI = tmhalFESpectrumNormal;
else
*peSI = tmhalFESpectrumInverted;
}
return TM_OK;
}
//-----------------------------------------------------------------------------
// FUNCTION: tmbsl10086SetVR
//
// DESCRIPTION: this function programs the viterbi rate
//
// RETURN: TMBSL_ERR_DEMOD_BAD_UNIT_NUMBER
// TMBSL_ERR_DEMOD_NOT_INITIALIZED
// TMBSL_ERR_DEMOD_BAD_PARAMETER
// TM_OK
//
// NOTES:
//-----------------------------------------------------------------------------
//
tmErrorCode_t
tmbsl10086SetVR (
tmUnitSelect_t demodUnit, // I: Demod unit number
tmhalFEDepuncRate_t eVR // I: Viterbi Rate
)
{
UInt32 uVR;
//----------------------
// test input parameters
//----------------------
// test the instance number
if (demodUnit > TDA10086_MAX_UNITS)
return TMBSL_ERR_DEMOD_BAD_UNIT_NUMBER;
// test the object
if (g10086Instance[demodUnit].Init == False)
return TMBSL_ERR_DEMOD_NOT_INITIALIZED;
// test the parameter value
if (eVR >= tmhalFEDepuncRateMax)
return TMBSL_ERR_DEMOD_BAD_PARAMETER;
//----------------------
// Core function
//----------------------
uVR = eVR;
if (eVR == tmhalFEDepuncRateAuto)
{
// auto viterbi
g10086Instance[demodUnit].systemFunc.SY_WriteBit(
g10086Instance[demodUnit].uDemodHwAdd,
TDA10086_RATE_IND,
TDA10086_RATE_RAUTO_MSK,
TDA10086_RATE_RAUTO_BIT);
g10086Instance[demodUnit].sApiStatus.iAutoViterbi = True;
}
else
{
// non auto viterbi
uVR--;
g10086Instance[demodUnit].systemFunc.SY_Write(
g10086Instance[demodUnit].uDemodHwAdd,
TDA10086_RATE_IND,
1,
&uVR);
g10086Instance[demodUnit].sApiStatus.iAutoViterbi = False;
}
// start algo
g10086Instance[demodUnit].bStartAlgo = True;
// update current config
g10086Instance[demodUnit].sCurrentChannel.eVR = eVR;
return TM_OK;
}
//-----------------------------------------------------------------------------
// FUNCTION: tmbsl10086GetVR
//
// DESCRIPTION: this function reads the viterbi rate (1:1/2 2:2/3 .... 8:8/9).
//
// RETURN: TMBSL_ERR_DEMOD_BAD_UNIT_NUMBER
// TMBSL_ERR_DEMOD_NOT_INITIALIZED
// TM_OK
//
// NOTES: the register is read each time
//-----------------------------------------------------------------------------
//
tmErrorCode_t
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -