📄 qpsk0299.c
字号:
if ( iCurTunerTaskState != TUNER_CARRIER_DETECTION )
break;
TUNER_TUNER ( do_report ( severity_info, "TCC => Sync not found\n" ) );
/*
* if possible try Fs/4 (may be the image). If the new
* new offset (ie) after adding Fs/4, is within the
* LNB drift limit then restart the zig-zag from 0
* else continue the zig-zag from the derotator freq
* for which the carrier was found
*/
pParams -> DerotFreq = sDerotatorFreqWritten;
if ( TRUE == DEMOD_SearchFalseLock ( pParams ) )
{
/* setup the derotator frequency */
sDerotatorFreqWritten = pParams -> DerotFreq;
continue;
}
}
/* Set the derotator frequency */
FieldSetVal ( DEROTATORFREQUENCYMSB, MSB ( sDerotatorFreqWritten ) );
FieldSetVal ( DEROTATORFREQUENCYLSB, LSB ( sDerotatorFreqWritten ) );
RegSetRegisters ( R_CFRM, 2 );
TUNER_TUNER ( do_report ( severity_info, "TCC => ZigZag DEROT W[%d]\n",
sDerotatorFreqWritten ) );
/*
* goto next derotator step
*/
sDerotatorFreqWritten = ( sDerotatorFreqWritten > 0 ) ? -sDerotatorFreqWritten : ( -sDerotatorFreqWritten + pParams -> DerotStep );
}
/*
* If data is found already then break this carrier cum data
* detection loop
*/
if ( iCurTunerTaskState != TUNER_CARRIER_DETECTION )
break;
/* adjust tuner_freq back to 0 */
iTunerOffset = 0;
pParams -> Frequency = TunerSetFrequency ( iInitialTunedFreq );
pParams -> TunerOffset = 0;
TUNER_TUNER_CRITICAL ( do_report ( severity_info, "TCC => Zig-Zag failed, found new off [%d] + freq_req [%d] => %d\n",
iTunerOffset,
iInitialTunedFreq,
pParams -> Frequency ) );
/*
* give an delay of 50mSec
*/
MILLI_DELAY ( 50 );
UPDATE_TUNER_STATE ( TUNER_CARRIER_DETECTION, TUNER_SIGNAL_DETECTION );
}
break;
case TUNER_MONITOR_TUNING:
if ( RegGetField ( CF ) )
{
if ( RegGetField ( LK ) )
{
signed int iLocLnbOffset;
#if 1
/* read the current derotator offset */
RegGetRegisters ( R_CFRM, 2 );
iLocLnbOffset = ( short int ) MAKEWORD ( FieldGetVal ( DEROTATORFREQUENCYMSB ), FieldGetVal ( DEROTATORFREQUENCYLSB ) );
#if 0
printf ( "[%c] LocLnb => %d",
iDerotatorSignValue == -1 ? '-' : '+',
iLocLnbOffset );
#endif
/* convert frequency drift into tuner steps */
iLocLnbOffset = Params . Frequency + ( iDerotatorSignValue * iLocLnbOffset * ( Params . Mclk ) / 1000 );
iLocLnbOffset -= Params . BaseFreq;
#if 0
printf ( " Calc[%d] Cur[%d] Set[%d] Base[%d] Step[%d] RegOff[%d]\n",
iLocLnbOffset,
TunerGetFrequency (),
Params . Frequency,
Params . BaseFreq,
iTunerStepSize,
iLnbOffsetRegistered );
#endif
if ( iTunerStepSize )
iLocLnbOffset /= iTunerStepSize;
else
iLocLnbOffset = 0;
#else
if ( iTunerStepSize )
iLocLnbOffset = ( TunerGetFrequency () - Params . BaseFreq ) / iTunerStepSize;
else
iLocLnbOffset = 0;
#endif
if ( iLocLnbOffset != iLnbOffsetRegistered )
{
iLnbOffsetRegistered = iLocLnbOffset;
asLnbOffset [ cCurLnbSource ] = iLocLnbOffset;
}
if ( cTransponderIndex2bRetrieved >= 0 &&
cTransponderIndex2bRetrieved < MAX_NO_OF_TRANSPONDERS &&
iLnbOffsetRegistered != ( int ) acLnbOffset [ cTransponderIndex2bRetrieved ] )
{
acLnbOffset [ cTransponderIndex2bRetrieved ] = ( signed char ) iLocLnbOffset;
UpdateNvmXpdrInfo ( ( BYTE ) acLnbOffset [ cTransponderIndex2bRetrieved ],
0, /* WARNING !!!! image side */
FieldGetVal ( IQ ) ? TRUE : FALSE,
Result . PunctureRate );
}
/*
* wake up every 500 msec
*/
MILLI_DELAY ( PERIODIC_SLEEP_PERIOD_DURATION );
if ( ++iTunerPeriodicReportCnt > 24 )
{
TUNER_PERIODIC ( do_report ( severity_info, "TMT => Xpdr[%d] Locked [%02X] Base[%d] @TO[%d] TF[%d KHz]\n",
cTransponderIndex2bRetrieved,
RegGetOneRegister ( R_VSTATUS ),
Params . BaseFreq,
iLocLnbOffset,
TunerGetFrequency () ) );
iTunerPeriodicReportCnt = 0;
}
}
else
{
TUNER_TUNER_CRITICAL ( do_report ( severity_info, "TMT => Lost DataLock. Switching to TSP. [%X] [%d]\n",
RegGetOneRegister ( R_VSTATUS ),
RegGetOneRegister ( R_RTF ) ) );
MILLI_DELAY ( 200 );
UPDATE_TUNER_STATE ( TUNER_MONITOR_TUNING, TUNER_SIGNAL_DETECTION );
}
}
else
{
/*
* failed to be in LOCKED state, so switch to CARRIER_DETECTION
* coarse
*/
TUNER_TUNER_CRITICAL ( do_report ( severity_info, "TMT => Lost CarrLock. Switching to TSP. [%X] [%d]\n",
RegGetOneRegister ( R_VSTATUS ),
RegGetOneRegister ( R_RTF ) ) );
UPDATE_TUNER_STATE ( TUNER_MONITOR_TUNING,
TUNER_SIGNAL_DETECTION );
}
break;
default:
do_report ( severity_info, "%s %d> Unknown TunerState[%d]\n",
iCurTunerTaskState );
break;
}
}
}
/*}}}*/
/*
* CODE : SetupLnbPower
* TYPE : subroutine
* PROTOTYPE :
* void SetupLnbPower ( void )
*
* STACK : callers stack
* INPUT : nothing
* OUTPUT : nothing
*
* GLOBAL VARIABLES USED :
* a. cCurLnbSource signed char ( R )
*
* DEVICES ACCESSED : nothing
* FUNCTIONS CALLED : nothing
* CALLERS :
* a. SetupBoxParam ..\USIF\INSTALL.C
*
* PURPOSE :
* when there is a change in the LNB powering mode - ON to OFF
* or viceversa, just accordingly select the LNB source
*/
/*{{{ SetupLnbPower ()*/
void SetupLnbPower ( void )
{
#ifndef INTEGRATE_TUNER_MODULE
return;
#else
if ( pstBoxInfo -> bSupplyLnb == TRUE )
{
if ( cCurLnbSource == LNB1 )
{
SELECT_LNB ( LNB1_SELECTION );
}
else
{
SELECT_LNB ( LNB2_SELECTION );
}
}
else
{
SELECT_LNB ( DONT_SELECT_ANY_LNB );
}
#endif
}
/*}}}*/
/*
* CODE : SetupPolarization
* TYPE : subroutine
* PROTOTYPE :
* void SetupLnbPower ( void )
*
* STACK : callers stack
* INPUT : nothing
* OUTPUT : nothing
*
* GLOBAL VARIABLES USED :
* a. cCurLnbSource signed char ( R )
*
* DEVICES ACCESSED : nothing
* FUNCTIONS CALLED : nothing
* CALLERS :
* a. SetupBoxParam ..\..\USIF\SOURCE\INSTALL.C
*
* PURPOSE :
* when there is a change in the polarization of a xpdr - Vert or Horiz
* or viceversa, just accordingly select the polarization
*/
/*{{{ SetupPolarization ()*/
#if 0
void SetupPolarization( void )
{
#ifndef INTEGRATE_TUNER_MODULE
return;
#else
if ( pstBoxInfo -> bSupplyLnb == TRUE )
{
if ( cCurLnbSource == POLARIZATION_V )
{
SELECT_POL ( POLARIZATION_V );
}
else
{
SELECT_POL ( POLARIZATION_H );
}
}
else
{
SELECT_POL ( DONT_SELECT_ANY_LNB );
}
#endif
}
#endif /*if 0 */
/*}}}*/
/*{{{ DVBTunerInit ( )*/
int DVBTunerInit ( void )
{
int iLocIndex;
#ifndef INTEGRATE_TUNER_MODULE
return FALSE;
#endif
do_report ( severity_info, "TUNER (STV0299) Module Initialisation ver[%s]\n",
TUNER_SOFTWARE_UPDATE_ID );
#ifdef IQ_INVERTED_IN_HARDWARE
do_report ( severity_info, "IQ Inverted by Hadrware ...\n" );
iDerotatorSignValue = 1;
#else
iDerotatorSignValue = -1;
#endif
#if defined(STV0199_4MHZ)
do_report ( severity_info, "Master clock is 4MHz ...\n" );
#elif defined(STV0199_27MHZ)
do_report ( severity_info, "Master clock is 27MHz ...\n" );
#endif
#ifdef CRITICAL_STAGE_DEBUGGING
do_report ( severity_info, "TUNER CRITICAL_STAGE_DEBUGGING ---> Enabled ...\n" );
#endif
#ifdef DEVELOPMENT_STAGE_DEBUGGING
do_report ( severity_info, "TUNER DEVELOPMENT_STAGE_DEBUGGING ---> Enabled ...\n" );
#endif
/*
* initialise the LNB offset values to be zero
*/
iLocIndex = 0;
asLnbOffset [ 0 ] = 0;
asLnbOffset [ 1 ] = 0;
while ( iLocIndex < MAX_NO_OF_TRANSPONDERS )
{
acLnbOffset [ iLocIndex ] = 0;
asSymbolRateOffset [ iLocIndex ] = 0;
++iLocIndex;
}
/* Creating TUNER module semaphores */
do_report ( severity_info, "Creating TUNER module semaphores ...\n" );
psemLinkIcAccess = semaphore_create_fifo ( 1 );
psemTunerStateWriteAccess = semaphore_create_fifo ( 1 );
psemTunerIdleStateEntered = semaphore_create_fifo ( 0 );
psemTunerIdleStateReleased = semaphore_create_fifo ( 0 );
if ( psemLinkIcAccess == NULL ||
psemTunerStateWriteAccess == NULL ||
psemTunerIdleStateEntered == NULL ||
psemTunerIdleStateReleased == NULL )
{
TUNER_INIT ( do_report ( severity_error, "TUNER_INIT=> Unable to Initialise Semaphores\n" ) );
return FALSE;
}
#ifdef ENABLE_STAPI_ENVIRONMENT
{
STI2C_OpenParams_t I2cOpenParams;
ST_ErrorCode_t Error = ST_NO_ERROR;
/* Initialize the I2C interface */
I2cOpenParams.BusAccessTimeOut = 5;
I2cOpenParams.AddressType = STI2C_ADDRESS_7_BITS;
I2cOpenParams.I2cAddress = I2C_SLAVE_ADDR_FOR_STV0299;
TUNER_INIT ( do_report ( severity_info, "%s %d> Opening I2C access for STv0299 ... [%s] Addr[%02X]\n",
__FILE__,
__LINE__,
I2CDeviceName [ I2C_BUS_ID ],
I2cOpenParams . I2cAddress ) );
if ( ( Error = STI2C_Open ( I2CDeviceName [ I2C_BUS_ID ],
&I2cOpenParams,
&I2CDemodHandle ) ) != ST_NO_ERROR )
{
do_report ( severity_error, "%s %d> Failed (%d) to open I2C access for STV0299 on [%s]\n",
__FILE__,
__LINE__,
Error,
I2CDeviceName [ I2C_BUS_ID ] );
return FALSE;
}
TUNER_INIT ( do_report ( severity_info, "%s %d> STv0299I2CHandle=%08X\n",
__FILE__,
__LINE__,
I2CDemodHandle ) );
/*
* Re-use old open parameters structure, but modify the address
* to be used.
*/
#if 0
I2cOpenParams . I2cAddress = I2C_SLAVE_ADDR_FOR_TUNER;
#else
I2cOpenParams . I2cAddress = 0xC2;
#endif
TUNER_INIT ( do_report ( severity_info, "%s %d> Opening I2C access for DEMOD ... [%s] Addr[%02X]\n",
__FILE__,
__LINE__,
I2CDeviceName [ I2C_BUS_ID ],
I2cOpenParams . I2cAddress ) );
if ( STI2C_Open( I2CDeviceName [ I2C_BUS_ID ],
&I2cOpenParams,
&I2CTunerHandle ) != ST_NO_ERROR )
{
do_report ( severity_error, "%s %d> Failed (%d) to open I2C access for DEMOD on [%s]\n",
__FILE__,
__LINE__,
Error,
I2CDeviceName [ I2C_BUS_ID ] );
/* Clean-up previously allocated resources */
( void ) STI2C_Close ( I2CDemodHandle );
return FALSE;
}
TUNER_INIT ( do_report ( severity_info, "%s %d> DemodI2CHandle=%08X\n",
__FILE__,
__LINE__,
I2CDemodHandle ) );
/* setup the i2c bridge */
I2cSetDemodHandle ( ( int ) I2CDemodHandle );
I2cSetTunerHandle ( ( int ) I2CTunerHandle );
}
#endif /* ENABLE_STAPI_ENVIRONMENT */
/* initialise the object modules */
/* LP - 26/06/00 - semSTv0299RegAccess initialized here instead of
* inside RegInit() previously. This prevents us from
* any malfunction while using the I2c repeater.
* See bug GNBvd04232 details under DDTS.
*/
semaphore_init_fifo ( &semSTv0299RegAccess, 1 );
TunerSelect ( DEFAULT_TUNER_TYPE, DEFAULT_TUNER_SLAVE_ADDR );
RegInit ( );
SELECT_LNB ( DONT_SELECT_ANY_LNB );
#ifdef LNB_SELECTION_THROUGH_STV0299_OP_PINS
/* 290800 - Added by LP - Disable 22KHz by default => OP0VALUE=0 */
SetLnb(0);
#endif
FORCE_TUNER_STATE ( TUNER_IDLE );
/* Create tuner_process */
TUNER_INIT ( do_report ( severity_info, "Creating TUNER Process\n" ) );
if ( ( ptidTunerTask = task_create ( tuner_process,
NULL,
TUNER_PROCESS_STACK_SIZE,
TUNER_PROCESS_PRIORITY,
"tuner_process",
0 ) ) == NULL )
{
TUNER_INIT ( do_report ( severity_error, "TUNER_INIT=> Unable to create TUNER process\n" ) );
return TRUE;
}
#ifdef TESTTOOL_PRESENT
register_command (
"FEREG",
FE_PrintAllRegs,
"Print all register contents of 299" );
register_command (
"FERD",
FE_ReadReg,
"Read specific 299 register" );
register_command (
"FEWR",
FE_WriteReg,
"Write to 299 register" );
register_command ( "FESTAT",
TESTTOOLTunerStatistics,
"Print the tuner module statistics" );
#endif
do_report ( severity_info, "Succesfully Installed TUNER module\n" );
return FALSE;
}
/*}}}*/
/*
* CODE : DVBNewTuneReq
* TYPE : subroutine
* PROTOTYPE :
* void TUNER_USIF_tune_req ( TRANSPONDER_INFO_STRUCT *pstTransponderInfo );
*
* STACK : callers stack
* INPUT :
* a. pstTransponderInfo pointer to structure type ( R )
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -