📄 tmbsl10023.c
字号:
case IFMIN:
*puValue = g10023Instance[demodUnit].sConfig.bIFMin;
break;
case TUNMAX:
*puValue = g10023Instance[demodUnit].sConfig.bTUNMax;
break;
case TUNMIN:
*puValue = g10023Instance[demodUnit].sConfig.bTUNMin;
break;
case AGCTRESHOLD:
*puValue = g10023Instance[demodUnit].sConfig.bAGCtreshold;
break;
case EQUALTYPE:
*puValue = g10023Instance[demodUnit].sConfig.bEqualType;
break;
case POLAPWM1:
*puValue = g10023Instance[demodUnit].sConfig.bPolaPWM1;
break;
case POLAPWM2:
*puValue = g10023Instance[demodUnit].sConfig.bPolaPWM2;
break;
case BERDEPTH:
*puValue = g10023Instance[demodUnit].sConfig.bBERdepth;
break;
case BERWINDOW:
*puValue = g10023Instance[demodUnit].sConfig.uBERwindow;
break;
case CLKOFFSETRANGE:
*puValue = g10023Instance[demodUnit].sConfig.bClkOffsetRange;
break;
case IQSWAP:
*puValue = g10023Instance[demodUnit].sConfig.bTUN_IQSwap;
break;
case IF:
*puValue = g10023Instance[demodUnit].sConfig.uTUN_IF;
break;
case OCLK1:
*puValue = g10023Instance[demodUnit].sConfig.bOUT_OClk1;
break;
case PARASER1:
*puValue = g10023Instance[demodUnit].sConfig.bOUT_bParaSer1;
break;
case MSBFIRST1:
*puValue = g10023Instance[demodUnit].sConfig.bOUT_bMSBFirst1;
break;
case MODEABC1:
*puValue = g10023Instance[demodUnit].sConfig.bOUT_ModeABC1;
break;
case PARADIV1:
*puValue = g10023Instance[demodUnit].sConfig.bOUT_ParaDiv1;
break;
case OCLK2:
*puValue = g10023Instance[demodUnit].sConfig.bOUT_OClk2;
break;
case MSBFIRST2:
*puValue = g10023Instance[demodUnit].sConfig.bOUT_bMSBFirst2;
break;
case SWDYN:
*puValue = g10023Instance[demodUnit].sConfig.bSwDyn;
break;
case SWSTEP:
*puValue = g10023Instance[demodUnit].sConfig.bSwStep;
break;
// backdoor functions
case IDENTITY:
g10023Instance[demodUnit].systemFunc.SY_Read(
g10023Instance[demodUnit].uDemodHwAdd,
TDA10023_IDENTITY_IND, 1, &uByte);
if (uByte != TDA10023_IDENTITY_DEF)
*puValue = False;
else
*puValue = True;
break;
case READSYNC:
if(g10023Instance[demodUnit].sConfig.bModeDvbMcns)
{
// MCNS mode
// MPEGLCK and FRAMELCK
g10023Instance[demodUnit].systemFunc.SY_Read(
g10023Instance[demodUnit].uDemodHwAdd,
TDA10023_STATUS_MCNS_IND, 1, &uByte);
// shift register to the left in order to have an equivalent mapping as in DVB mode
*puValue = (uByte & (TDA10023_STATUS_MCNS_MPEGLCK_BIT | TDA10023_STATUS_MCNS_FRAMELCK_BIT)) << 1;
// CARLOCK
g10023Instance[demodUnit].systemFunc.SY_Read(
g10023Instance[demodUnit].uDemodHwAdd,
TDA10023_STATUS_IND, 1, &uByte);
*puValue |= (uByte & TDA10023_STATUS_CARLOCK_BIT);
}
else
{
// DVB mode
g10023Instance[demodUnit].systemFunc.SY_Read(
g10023Instance[demodUnit].uDemodHwAdd,
TDA10023_STATUS_IND, 1, puValue);
}
break;
case READAGC:
g10023Instance[demodUnit].systemFunc.SY_Read(
g10023Instance[demodUnit].uDemodHwAdd,
TDA10023_AGCIF_IND, 1, &uByte);
*puValue = uByte << 8;
g10023Instance[demodUnit].systemFunc.SY_Read(
g10023Instance[demodUnit].uDemodHwAdd,
TDA10023_AGCTUN_IND, 1, &uByte);
*puValue |= uByte;
break;
case GETNBOFUNIT:
*puValue = TDA10023_MAX_UNITS;
break;
case READIQ:
return tmbsl10023GetIQ(demodUnit, puValue);
case READCOEF:
return tmbsl10023GetCOEF(demodUnit, puValue);
case READMSE:
g10023Instance[demodUnit].systemFunc.SY_Read(
g10023Instance[demodUnit].uDemodHwAdd,
TDA10023_MSE_IND, 1, puValue);
break;
case STOPEQUAL:
// freeze the equalizer coef only if the algorithm is not working
if (g10023Instance[demodUnit].bState == 0)
g10023Instance[demodUnit].systemFunc.SY_WriteBit(
g10023Instance[demodUnit].uDemodHwAdd,
TDA10023_EQCONF1_IND, TDA10023_EQCONF1_ENADAPT_BIT, 0);
break;
case STARTEQUAL:
// unfreeze the equalizer coef only if the algorithm is not working
if (g10023Instance[demodUnit].bState == 0)
g10023Instance[demodUnit].systemFunc.SY_WriteBit(
g10023Instance[demodUnit].uDemodHwAdd,
TDA10023_EQCONF1_IND, TDA10023_EQCONF1_ENADAPT_BIT, TDA10023_EQCONF1_ENADAPT_BIT);
break;
case TUNERLVL:
// Test if the GetLevel function is implemented
// NOTE: if the GetLevel function is not implemented or not enabled, we must not
// change the I2C switch. The trick used to determine if the function is enabled
// is to call the getCfgFunc with a null pointer for the last parameter. In this
// case, the function return TM_OK if the function is enabled.
if ( g10023Instance[demodUnit].tunerFunc.getCfgFunc(g10023Instance[demodUnit].eTunerUnit, tmhalFETunerLVL, (UInt32*)0) == TM_OK)
{
// tuner is accessible
g10023Instance[demodUnit].systemFunc.SY_WriteBit(
g10023Instance[demodUnit].uDemodHwAdd,
TDA10023_TEST_IND, TDA10023_TEST_BYPIIC_BIT,
TDA10023_TEST_BYPIIC_BIT);
// The last parameter of the getCfgFunc isn't a null pointer
// so we get the input level
g10023Instance[demodUnit].tunerFunc.getCfgFunc(g10023Instance[demodUnit].eTunerUnit, tmhalFETunerLVL, puValue);
// tuner is disconnected from the I2C bus
g10023Instance[demodUnit].systemFunc.SY_WriteBit(
g10023Instance[demodUnit].uDemodHwAdd,
TDA10023_TEST_IND, TDA10023_TEST_BYPIIC_BIT, 0);
if (*puValue == 0xFFFFFFFF)
return TMBSL_ERR_DEMOD_NOT_SUPPORTED;
else
return TM_OK;
}
else
{
return TMBSL_ERR_DEMOD_NOT_SUPPORTED;
}
break;
case JQAMMODE:
g10023Instance[demodUnit].systemFunc.SY_Read(
g10023Instance[demodUnit].uDemodHwAdd | TDA10023_JQAMFILTER_ADDR_OFFSET,
TDA10023_JQAM_MODE_IND, 1, puValue);
break;
case JQAMREQTS:
g10023Instance[demodUnit].systemFunc.SY_Read(
g10023Instance[demodUnit].uDemodHwAdd | TDA10023_JQAMFILTER_ADDR_OFFSET,
TDA10023_REQ_TS_IDH_IND, 2, puBytes);
*puValue = (puBytes[0] << 8) | puBytes[1];
break;
case JQAMREQON:
g10023Instance[demodUnit].systemFunc.SY_Read(
g10023Instance[demodUnit].uDemodHwAdd | TDA10023_JQAMFILTER_ADDR_OFFSET,
TDA10023_REQ_ON_IDH_IND, 2, puBytes);
*puValue = (puBytes[0] << 8) | puBytes[1];
break;
case JQAMGETREG5:
g10023Instance[demodUnit].systemFunc.SY_Read(
g10023Instance[demodUnit].uDemodHwAdd | TDA10023_JQAMFILTER_ADDR_OFFSET,
TDA10023_REG5_IND, 1, puValue);
break;
case JQAMGETTSSTATUS:
g10023Instance[demodUnit].systemFunc.SY_Read(
g10023Instance[demodUnit].uDemodHwAdd | TDA10023_JQAMFILTER_ADDR_OFFSET,
TDA10023_TS_STATUS_H_IND, 2, puBytes);
*puValue = (puBytes[0] << 8) | puBytes[1];
break;
case JQAMGETRCVSTATUS:
g10023Instance[demodUnit].systemFunc.SY_Read(
g10023Instance[demodUnit].uDemodHwAdd | TDA10023_JQAMFILTER_ADDR_OFFSET,
TDA10023_RCV_STATUS4_IND, 4, puBytes);
*puValue = (puBytes[0] << 24) | (puBytes[1] << 16) | (puBytes[2] << 8) | puBytes[3];
break;
case JQAMGETTSON:
for(i=0 ; i< TDA10023_JQAMFILTER_NB ; i++)
{
g10023Instance[demodUnit].systemFunc.SY_Read(
g10023Instance[demodUnit].uDemodHwAdd | TDA10023_JQAMFILTER_ADDR_OFFSET,
TDA10023_TS_ID1H_IND+(4*i), 4, puBytes);
*puValue = (puBytes[0] << 24) | (puBytes[1] << 16) | (puBytes[2] << 8) | puBytes[3];
puValue++;
}
break;
default:
return TM_ERR_BAD_PARAMETER;
}
return TM_OK;
}
//-----------------------------------------------------------------------------
// FUNCTION: tmbsl10023Write
//
// DESCRIPTION: this function writes bytes in the demod registers.
//
// RETURN: TMBSL_ERR_DEMOD_BAD_UNIT_NUMBER
// TMBSL_ERR_DEMOD_NOT_INITIALIZED
// TM_ERR_IIC_ERR
// TM_OK
//
// NOTES: This function can be removed if needed
//-----------------------------------------------------------------------------
//
tmErrorCode_t
tmbsl10023Write (
tmUnitSelect_t demodUnit, // I: Demod unit number
UInt32 uIndex, // I: Start index to write
UInt32 uNbBytes, // I: Number of bytes to write
UInt32* puBytes // I: Pointer on an array of bytes
)
{
SEND_TRACEFCT1(DEBUG_WRITE_ID, 0);
//----------------------
// test input parameters
//----------------------
// test the instance number
if (demodUnit > TDA10023_MAX_UNITS)
return TMBSL_ERR_DEMOD_BAD_UNIT_NUMBER;
// test the object
if (g10023Instance[demodUnit].sApiFlags.iInit == False)
return TMBSL_ERR_DEMOD_NOT_INITIALIZED;
//----------------------
// Implementation
//----------------------
if (g10023Instance[demodUnit].systemFunc.SY_Write(
g10023Instance[demodUnit].uDemodHwAdd,
uIndex, uNbBytes, puBytes) == False)
return TM_ERR_IIC_ERR;
return TM_OK;
}
//-----------------------------------------------------------------------------
// FUNCTION: tmbsl10023WriteBit
//
// DESCRIPTION: this function writes a bit to the mask position
//
// RETURN: TMBSL_ERR_DEMOD_BAD_UNIT_NUMBER
// TMBSL_ERR_DEMOD_NOT_INITIALIZED
// TM_ERR_IIC_ERR
// TM_OK
//
// NOTES: This function can be removed if needed
//-----------------------------------------------------------------------------
//
tmErrorCode_t
tmbsl10023WriteBit (
tmUnitSelect_t demodUnit, // I: Demod unit number
UInt32 uIndex, // I: Index to write
UInt32 uBitMask, // I: byte mask
UInt32 uByte // I: value
)
{
SEND_TRACEFCT1(DEBUG_WRITEBIT_ID, 0);
//----------------------
// test input parameters
//----------------------
// test the instance number
if (demodUnit > TDA10023_MAX_UNITS)
return TMBSL_ERR_DEMOD_BAD_UNIT_NUMBER;
// test the object
if (g10023Instance[demodUnit].sApiFlags.iInit == False)
return TMBSL_ERR_DEMOD_NOT_INITIALIZED;
//----------------------
// Implementation
//----------------------
if (g10023Instance[demodUnit].systemFunc.SY_WriteBit(
g10023Instance[demodUnit].uDemodHwAdd,
uIndex, uBitMask, uByte) == False)
return TM_ERR_IIC_ERR;
return TM_OK;
}
//-----------------------------------------------------------------------------
// FUNCTION: tmbsl10023Read
//
// DESCRIPTION: this function reads bytes
//
// RETURN: TMBSL_ERR_DEMOD_BAD_UNIT_NUMBER
// TMBSL_ERR_DEMOD_NOT_INITIALIZED
// TM_ERR_IIC_ERR
// TM_OK
//
// NOTES: This function can be removed if needed
//-----------------------------------------------------------------------------
//
tmErrorCode_t
tmbsl10023Read (
tmUnitSelect_t demodUnit, // I: Demod unit number
UInt32 uIndex, // I: Start index to write
UInt32 uNbBytes, // I: Number of bytes to read
UInt32* puBytes // O: Pointer on an array of bytes
)
{
SEND_TRACEFCT1(DEBUG_READ_ID, 0);
//----------------------
// test input parameters
//----------------------
// test the instance number
if (demodUnit > TDA10023_MAX_UNITS)
return TMBSL_ERR_DEMOD_BAD_UNIT_NUMBER;
// test the object
if (g10023Instance[demodUnit].sApiFlags.iInit == False)
return TMBSL_ERR_DEMOD_NOT_INITIALIZED;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -