📄 qam029old7.c
字号:
/*----------------------------------------------------------------------------*/
static void tuner_process( void *pvParam )
{
int acquisition_time = 0,
acquisition_attempt_cnt = 0;
while ( TRUE )
{
switch ( tuner_state )
{
case TUNER_IDLE:
LockIndicator=0; /*fang020119 */
semaphore_signal ( psemTunerIdleStateEntered );
semaphore_wait ( psemTunerIdleStateReleased );
acquisition_attempt_cnt = MAX_ACQUISITION_ATTEMPT_BEFORE_IQ_INVERT;
/*the above is meant to force IQ invertion at the first unsuccesful
acquisition attempt when tuning to a new transponder*/
QAM_DEBUG_CODE ( do_report ( severity_info, "TIDLE => left idle state\n" ) );
break;
case SIGNAL_DETECTION:
{
unsigned int agc;
LockIndicator=0; /* fang020119 */
NoSignalCount=0;
MsgFlag=0;
#if 0
agc = linkGetAGC2();
do_report(0,"-->agc2 =0x%x\n",agc);
if( agc == 0 )
{
QAM_DEBUG_CODE ( do_report ( severity_info, "TSD => AGC [%d]\n", agc ));
}
else
{
QAM_DEBUG_CODE ( do_report ( severity_info, "TSD => Good signal [%d]\n", agc ));
}
#endif
UPDATE_TUNER_STATE ( SIGNAL_DETECTION, ACQUISITION );
break;
}
case ACQUISITION:
{
unsigned int agc;
BOOLEAN bLock;
agc = linkGetAGC2();
QAM_DEBUG_CODE ( do_report ( severity_info, "TSD => Good signal [%d]\n", agc ));
// do_report(0,"agc2 =0x%x\n",agc);
bLock=linkDataLock();
if(!bLock&&agc>=0x18f)
{
// TunerNotify(FALSE);
// do_report(0,"agc2 =0x%x\n",agc);
s_AgcNoSignal=2;
}
else
s_AgcNoSignal=1;
if( bLock)
{
// do_report( severity_info, "TSD => Data lock\n" );
// do_report(0,"lock agc2 =0x%x\n",agc);
QAM_DEBUG_CODE( do_report( severity_info, "TSD => Data lock\n" ));
/* Add YinFQ */
FrontPanelShowLock(TRUE);
LockIndicator=1; /* fang020119 */
NoSignalCount=0;
/*
CA_SendMsgFromCAToAuxHandler(GUIM_MESSAGE_CA_NOTIFY_MSG,2006);
*/
TunerNotify(TRUE);
s_AgcNoSignal=0;
/* END HEAR */
UPDATE_TUNER_STATE( ACQUISITION, MONITOR_TUNING );
}
else if( acquisition_time > ACQUISITION_TIMEOUT )
{
acquisition_attempt_cnt += 1;
QAM_DEBUG_CODE( do_report( severity_info, "TSD => acquisition timeout\n" ));
/* Add YinFQ */
FrontPanelShowLock(FALSE);
LockIndicator=0; /* fang020119 */
/* END HEAR */
acquisition_time = 0;
if( acquisition_attempt_cnt >= MAX_ACQUISITION_ATTEMPT_BEFORE_IQ_INVERT )
{
acquisition_attempt_cnt=0;
iSpectrumInversion = !iSpectrumInversion;
QAM_DEBUG_CODE( do_report( severity_info, "TSD => switching spectrum inversion %s\n",
iSpectrumInversion ? "ON" : "OFF" ));
if( NoSignalCount++>2)
{
MsgFlag=TRUE;
/*
CA_SendMsgFromCAToAuxHandler(GUIM_MESSAGE_CA_NOTIFY_MSG,2005);
*/
TunerNotify(FALSE);
}
}
linkSignalSearch( cQamSize, iSymbolRate, iSweepRate, iFrequencyOffset, iSpectrumInversion );
}
else
{
/*TUNER_TUNER_CRITICAL( do_report( severity_info, "TSD => acquisition ongoing\n" ));*/
/* Add YinFQ */
FrontPanelShowLock(FALSE);
LockIndicator=0; /* fang020119 */
/* END HEAR */
acquisition_time += LOCK_TEST_INTERVAL;
MILLI_DELAY( LOCK_TEST_INTERVAL );
}
}
break;
case MONITOR_TUNING:
MILLI_DELAY( MONITOR_LOCK_TEST_INTERVAL );
//task_delay(1000);
if( !linkDataLock())
{
QAM_DEBUG_CODE( do_report( severity_info, "TSD => Data lock lost\n" ));
acquisition_attempt_cnt = 0;
UPDATE_TUNER_STATE( MONITOR_TUNING, ACQUISITION );
}/* end of if */
}/* end of switch */
}/* end of while */
do_report ( severity_error, "ERROR => Unexpected exit in TUNER_PROCESS ...\n" );
}
/*----------------------------------------------------------------------------*/
void DVBNewTuneReq( ITF_TRANSPONDER_INFO_STRUCT *pstTransponderInfo )
{
unsigned char band;
#ifndef INTEGRATE_TUNER_MODULE
return;
#endif
s_AgcNoSignal=0;
TUNER_PAUSE;
/*QAM_DEBUG_CODE()*/
#if 0
do_report ( severity_info, "\n\nTuning Req => QAM[64] F[%d] Sym[%d]\n",
pstTransponderInfo -> iTransponderFreq,
pstTransponderInfo -> iSymbolRate );
#endif
// pstTransponderInfo -> ucStatusPolFlag=2;
/*
switch( pstTransponderInfo -> ucStatusPolFlag & 0x0F )
{
case 0: cQamSize = QAM16;break;
case 1: cQamSize = QAM32;break;
case 2: cQamSize = QAM64;break;
case 3: cQamSize = QAM128;break;
case 4: cQamSize = QAM256;break;
default:break;
}
*/
cQamSize = QAM64; /* fang020105 */
iSymbolRate = pstTransponderInfo -> iSymbolRate;
iTransponderFreq = pstTransponderInfo -> iTransponderFreq;
iCurTunedFreq = ( int )( CHANGE_KHZ_TO_LSB( iTransponderFreq ));
/*if( iTransponderFreq < LOW_BAND_UPPER_BOUNDARY )
{
gloabAGC2Threshould=0x50;
globalInitFrequencyOffser=-35;
band = LOW_BAND;
}
else if( iTransponderFreq < MID_BAND_UPPER_BOUNDARY )
{
gloabAGC2Threshould=0x50;
globalInitFrequencyOffser=-35;
band = MID_BAND;
}
else
{
gloabAGC2Threshould=0x50;
globalInitFrequencyOffser=-54;
band = HIGH_BAND;
}*/
#if 0
iTransponderFreq = iTransponderFreq + TUNER_IF;
band = 0x05; /*xiejiang add*/
if(iTransponderFreq>87000&&iTransponderFreq<165000)
band = 0x05;
/*if(iTransponderFreq>=165000&&iTransponderFreq<=172000)
band = 0x45; */ /*20020118a xiejiang add*/
if(iTransponderFreq>172000&&iTransponderFreq<179000)
band = 0x45;
/*if(iTransponderFreq>=179000&&iTransponderFreq<=186000)
band = 0x06; */ /*b xiejiang add*/
if(iTransponderFreq>186000&&iTransponderFreq<382000)
band = 0x06;
/*if(iTransponderFreq>=382000&&iTransponderFreq<=390000)
band = 0x46; */ /*c xiejiang add*/
if(iTransponderFreq>390000&&iTransponderFreq<430000)
band = 0x46;
/*if(iTransponderFreq>=430000&&iTransponderFreq<=438000)
band = 0x86; */ /*xiejiang add*/
if(iTransponderFreq>438000&&iTransponderFreq<462000)
band = 0x86;
/*if(iTransponderFreq>=462000&&iTransponderFreq<=470000)
band = 0x03; */ /*xiejiang add*/
if(iTransponderFreq>470000&&iTransponderFreq<692000)
band = 0x03;
/* if(iTransponderFreq>=692000&&iTransponderFreq<=700000)
band = 0x43; */ /*xiejiang add*/
if(iTransponderFreq>700000&&iTransponderFreq<828000)
band = 0x43;
/*if(iTransponderFreq>=828000&&iTransponderFreq<=836000)
band = 0x83; */ /*xiejiang add*/
if(iTransponderFreq>836000&&iTransponderFreq<894000)
band = 0x83;
#else /* fang020118 */
iTransponderFreq = iTransponderFreq + TUNER_IF;
band = 0x05;
if(iTransponderFreq>84000&&iTransponderFreq<169000)
band = 0x05; /* fang020320 0x05; */
if(iTransponderFreq>=169000&&iTransponderFreq<=182000)
band = 0x45;
if(iTransponderFreq>182000&&iTransponderFreq<386000)
band = 0x06;
if(iTransponderFreq>=386000&&iTransponderFreq<=434000)
band = 0x46;
if(iTransponderFreq>434000&&iTransponderFreq<466000)
band = 0x86;
if(iTransponderFreq>=466000&&iTransponderFreq<=696000)
band = 0x03;
if(iTransponderFreq>696000&&iTransponderFreq<832000)
band = 0x43;
if(iTransponderFreq>=832000&&iTransponderFreq<=896000)
band = 0x83;
#endif
iTransponderFreq = iTransponderFreq - TUNER_IF;
/*ori: tuner_write( iCurTunedFreq, band, CHARGE_PUMP_OFF );*/
tuner_write( iCurTunedFreq, band, CHARGE_PUMP_ON );
//fang- MILLI_DELAY( TUNER_SETTLING_TIME );
iSweepRate = INITIAL_SWEEP_RATE;
iFrequencyOffset = INITIAL_FREQUENCY_OFFSET;
iSpectrumInversion = INITIAL_SPECTRUM_INVERSION;
linkSignalSearch( cQamSize, iSymbolRate, iSweepRate, iFrequencyOffset, iSpectrumInversion );
TUNER_RESUME;
// do_report ( severity_info, "Quit DVBNewTunerReq...1\n");
}
#ifdef TESTTOOL_PRESENT
/*--------------------------------------------------------*/
boolean SetTuner( parse_t *pars_p, char *result_sym_p )
{
ITF_TRANSPONDER_INFO_STRUCT stTransponderInfo;
long lInputVal;
cget_integer ( pars_p, 500000, &lInputVal );
stTransponderInfo . iTransponderFreq = ( int )lInputVal;
cget_integer ( pars_p, 7000, &lInputVal );
stTransponderInfo . iSymbolRate = ( int )lInputVal;
DVBNewTuneReq( &stTransponderInfo );
return FALSE;
}
/*--------------------------------------------------------*/
boolean R297( parse_t *pars_p, char *result_sym_p )
{
unsigned char read_byte;
long address;
cget_integer ( pars_p, 0x00, &address );
link_read( (unsigned char)address, &read_byte );
do_report( severity_info, "Read %02x: %02x\n", (unsigned char)address,read_byte );
return FALSE;
}
/*--------------------------------------------------------*/
boolean W297( parse_t *pars_p, char *result_sym_p )
{
long value;
long address;
cget_integer ( pars_p, 0x00, &address );
cget_integer ( pars_p, 0x48, &value );
link_write( (unsigned char)address, (unsigned char)value );
do_report( severity_info, "Write %02x: %02x\n", (unsigned char)address,(unsigned char)value );
return FALSE;
}
#endif
/*----------------------------------------------------------------------------*/
#define I2C_BUS_ID 0
ST_ErrorCode_t DVBTunerInit ( void )
{
#ifndef INTEGRATE_TUNER_MODULE
return FALSE;
#endif
ITF_TRANSPONDER_INFO_STRUCT stTransponderInfo;
do_report ( severity_info, "TUNER (STV0297) Module Initialisation ver[%s]\n", TUNER_SOFTWARE_UPDATE_ID );
/* Creating TUNER module semaphores */
QAM_DEBUG_CODE(do_report ( severity_info, "Creating TUNER module semaphores ...\n" ));
psemLinkIcAccess = semaphore_create_fifo ( 1 );
psemTunerAccess = semaphore_create_fifo ( 1 );
psemTunerStateWriteAccess = semaphore_create_fifo ( 1 );
psemTunerIdleStateEntered = semaphore_create_fifo ( 0 );
psemTunerIdleStateReleased = semaphore_create_fifo ( 0 );
if ( psemLinkIcAccess == NULL ||
psemTunerAccess == NULL ||
psemTunerStateWriteAccess == NULL ||
psemTunerIdleStateEntered == NULL ||
psemTunerIdleStateReleased == NULL )
{
do_report ( severity_error, "TUNER_INIT=> Unable to Initialise Semaphores\n" ) ;
return FALSE;
}
#if 1 /* def 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 = 0x38;
/*
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 STV0297 on [%s]\n",
__FILE__,
__LINE__,
Error,
I2CDeviceName [ I2C_BUS_ID ] );
return FALSE;
}
/* Initialize the I2C interface */
I2cOpenParams.BusAccessTimeOut = 5;
I2cOpenParams.AddressType = STI2C_ADDRESS_7_BITS;
I2cOpenParams.I2cAddress = 0xc2;
if ( ( Error = STI2C_Open ( I2CDeviceName [ I2C_BUS_ID ],
&I2cOpenParams,
&I2CTunerHandle ) ) != ST_NO_ERROR )
{
do_report ( severity_error, "%s %d> Failed (%d) to open I2C access for STV0297 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 = 0x38; /* by yxl for stv0297 */
#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 ) );
*/
}
#endif /* ENABLE_STAPI_ENVIRONMENT */
FORCE_TUNER_STATE ( TUNER_IDLE );
/* Create tuner_process */
QAM_DEBUG_CODE ( do_report ( severity_info, "Creating TUNER Process\n" ) );
if ( ( ptidTunerTask = task_create ( tuner_process,
NULL,
TUNER_PROCESS_STACK_SIZE,
/*TUNER_PROCESS_PRIORITY*/9,//hht 9 20050428
"tuner_process",
0 ) ) == NULL )
{
do_report ( severity_error, "TUNER_INIT=> Unable to create TUNER process\n" ) ;
return TRUE;
}
a_RegInit();
/*
#ifdef TESTTOOL_PRESENT
register_command ( "SetTuner", SetTuner, TUNER_COMMAND, "Set Tuner to QAM64 <freq> <symbol rate>" );
register_command ( "R297", R297, TUNER_COMMAND, "read 297 registers <address>" );
register_command ( "W297", W297, TUNER_COMMAND, "write 297 registers <address> <value>" );
#endif
*/
do_report ( severity_info, "Succesfully Installed TUNER QAM0297 module\n" );
/* stTransponderInfo . iTransponderFreq = 500000;
stTransponderInfo . iSymbolRate = 7000;
DVBNewTuneReq( &stTransponderInfo );*/
return FALSE;
}
/* ********************************************************************** */
#define WATCHDOG_SEND_SIGNAL 250/*500*/
#define WATCHDOG_PROCESS_WORKSPACE 256
#define WATCHDOG_PROCESS_PRIORITY 11
/* extern BYTE GLOBAL_uart_buf[]; */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -