cx24116.c
来自「QPSK Tuner details, for conexant chipset」· C语言 代码 · 共 936 行 · 第 1/2 页
C
936 行
/*if(PHANTOM_BERControl(&nim1,PHANTOM_BER_WINDOW_TWO_POWER_8,PHANTOM_BER_WINDOW_TWO_POWER_8)!=True)
{
return FAILURE;
}*/
nErrorCode= PHANTOMGetLockStatus(bTunerIndex,&nLockStatus);
if(nErrorCode!=CSQPSK_SUCCESS)
{
return nErrorCode ;
}
if ( nLockStatus!= TRUE )
{
*pdwBer = 0x989680;
}
else
{
if (PHANTOM_GetBER (&nim1,&ulCorrBitErrRate,&wUncorrFrameErrRate,&WBerWindowAdjustment,&mstatus)!= FALSE)
{
for(ii=0;ii<22;ii++)
{
if(nim1.rx_operation_mode==ucaRxMode[ii]) break;
}
dwCorrectedBitErrorRate=(ulCorrBitErrRate*40000)/waBitsPerFrame[ii];
*pdwBer=dwCorrectedBitErrorRate;
}
else
{
*pdwBer = 0x989680;
return CSQPSK_FAILURE;
}
}
return CSQPSK_FAILURE;
}
CSQPSK_Error_t PHANTOMGetSignalQuality (CSHDITunerIndex bTunerIndex, int *pnSignalQuality )
{
WORD wSignalquality;
int nQuality;
int nLockStatus;
int nErrorCode;
nErrorCode= PHANTOMGetLockStatus(bTunerIndex,&nLockStatus);
if(nErrorCode!=CSQPSK_SUCCESS)
{
return nErrorCode ;
}
if ( nLockStatus!= TRUE )
{
*pnSignalQuality = 0;
}
else
{
nErrorCode=PHANTOM_GetChannelEsNo(&nim1,&wSignalquality);
if(nErrorCode!=True)
{
*pnSignalQuality = 0;
return CSQPSK_FAILURE;
}
wSignalquality = (wSignalquality * 100.0 ) / 300.0;
#ifdef QPSK_DEBUG
CSTRACE( ERROR_LEVEL,"dwSigquality is %d\r\n",wSignalquality);
#endif
if(wSignalquality < 10)
nQuality = 10 ;
else
nQuality = (int)wSignalquality;
*pnSignalQuality=nQuality;
}
#ifdef QPSK_DEBUG
CSTRACE( ERROR_LEVEL,"SignalQuality is %d\r\n",nQuality);
#endif
return CSQPSK_SUCCESS;
}
CSQPSK_Error_t PHANTOMGetSignalStrength( CSHDITunerIndex bTunerIndex, int *pnSignalStrength )
{
PHANTOM_AGCACC agc;
BYTE ucSaturated;
signed char cPower;
int nStrength;
if (PHANTOM_GetAGCAcc(&nim1, &agc, &cPower, &ucSaturated) != FALSE)
{
/*if(power==(-70))
*pnSignalStrength=0;
else*/
{
nStrength=((1023-(agc&0x3FF))*100)/1023;
//nStrength=(100*(power+70))/45;
//CSTRACE( 3, "SignalStrength is agc=%d,power=%d,saturated=%d,nStrength=%d\r\n",agc,power,saturated,nStrength);
*pnSignalStrength=nStrength;
}
return CSQPSK_SUCCESS;
}
else
{
#ifdef QPSK_DEBUG
CSTRACE( ERROR_LEVEL,"GetAGC failed!\r\n");
#endif
*pnSignalStrength=0;
return CSQPSK_FAILURE;
}
}
CSQPSK_Error_t PHANTOMF22KSwitch ( CSHDITunerIndex bTunerIndex, CSHDISwitch nF22KCtrl )
{
PHANTOM_LNBTONE lnb_tone;
if(nF22KCtrl ==1)
{
lnb_tone=PHANTOM_LNBTONE_ON;
}
else
{
if(nF22KCtrl ==0)
{
lnb_tone=PHANTOM_LNBTONE_OFF;
}
else
return CSQPSK_FAILURE;
}
//CSTRACE( 3, "lnb_tone=%d\r\n",lnb_tone);
if (PHANTOM_SetLNBTone(&nim1, lnb_tone)!= FALSE)
{
return CSQPSK_SUCCESS;
}
else
return CSQPSK_FAILURE;
}
CSQPSK_Error_t PHANTOM_DiSEqC_Init( void )
{
if(PHANTOM_DiseqcInitialize(&nim1,PHANTOM_REPLY_EXPIRATION_WINDOW_150,2,22,40,PHANTOM_LNB_TONEBURST_DISABLE , PHANTOM_LNBMODE_DIGITAL_TONE)!=True)
{
#ifdef QPSK_DEBUG
CSTRACE( ERROR_LEVEL,"diseqc initializing failed\r\n");
#endif
return CSQPSK_FAILURE;
}
else
{
#ifdef QPSK_DEBUG
CSTRACE( ERROR_LEVEL,"diseqc initializing succeed\r\n");
#endif
return CSQPSK_SUCCESS;
}
}
CSQPSK_Error_t PHANTOMSendDiSEqC10Command (CSHDITunerIndex bTunerIndex, BYTE bSwitchType, BYTE bCommittedByte, BYTE bToneBurstSel, BYTE bRepeat)
{
BYTE bPreF22KStatus;
BYTE bRepeatTimes;
BYTE pbValue[6];
BYTE bToneburst;
long bValue;
int ii;
bRepeatTimes =bRepeat;
pbValue[0] = 0xE0;
pbValue[1] = 0x10;
pbValue[2] = 0x38;
pbValue[3] = bCommittedByte;
if ( PHANTOM_GetLNBTone ( &nim1, &bValue ) != True )
{
#ifdef QPSK_DEBUG
CSTRACE( ERROR_LEVEL,"[PHANTOMSendDiSEqC10Command]GetLNBTone failed!\r\n");
#endif
return CSQPSK_FAILURE;
}
bPreF22KStatus = bValue ; // 5C5=22KW4L,#,1cSZRT:s;V84!#
#ifdef QPSK_DEBUG
CSTRACE( ERROR_LEVEL,"LNBTone :%d\r\n",bPreF22KStatus);
#endif
if ( PHANTOM_SetLNBTone ( &nim1,PHANTOM_LNBTONE_OFF ) != True ) // 9X22KJd3v!#
{
#ifdef QPSK_DEBUG
CSTRACE( ERROR_LEVEL,"SetLNBTone failed!\r\n");
#endif
return CSQPSK_FAILURE;
}
CSSleep(25);
while ( TRUE )
{
PHANTOM_DiseqcSendMessage(&nim1,pbValue,4,True,PHANTOM_RXMODE_NOREPLY,PHANTOM_LNB_BURST_MODULATED);
if (bRepeatTimes == 0)
{
CSSleep(40);
break;
}
else
{
CSSleep(130);
pbValue[0] = 0xE1;
bRepeatTimes--;
}
}
CSSleep(40);
if (PHANTOM_SetLNBTone ( &nim1, bPreF22KStatus) != True)
{
return CSQPSK_FAILURE;
}
return CSQPSK_SUCCESS;
}
CSQPSK_Error_t PHANTOMSendDiSEqC11Command (CSHDITunerIndex bTunerIndex, BYTE bCommittedByte, BYTE bUnCommittedByte, BYTE bRepeat)
{
BYTE bPreF22KStatus;
BYTE bRepeatTimes;
BYTE pbValue[6];
BYTE bToneburst;
long bValue;
int ii;
bRepeatTimes =bRepeat;
pbValue[0] = 0xE0;
pbValue[1] = 0x10;
pbValue[2] = 0x39;
pbValue[3] = bUnCommittedByte;
if ( PHANTOM_GetLNBTone ( &nim1, &bValue ) != True )
{
#ifdef QPSK_DEBUG
CSTRACE( ERROR_LEVEL,"GetLNBTone failed!\r\n");
#endif
return CSQPSK_FAILURE;
}
bPreF22KStatus = bValue ; // 5C5=22KW4L,#,1cSZRT:s;V84!#
#ifdef QPSK_DEBUG
CSTRACE( ERROR_LEVEL,"LNBTone :%d\r\n",bPreF22KStatus);
#endif
if ( PHANTOM_SetLNBTone ( &nim1,PHANTOM_LNBTONE_OFF ) != True ) // 9X22KJd3v!#
{
#ifdef QPSK_DEBUG
CSTRACE( ERROR_LEVEL,"SetLNBTone failed!\r\n");
#endif
return CSQPSK_FAILURE;
}
CSSleep(25);
while ( TRUE )
{
PHANTOM_DiseqcSendMessage(&nim1,pbValue,4,True,PHANTOM_RXMODE_NOREPLY,PHANTOM_LNB_BURST_MODULATED);
if (bRepeatTimes == 0)
{
CSSleep(40);
break;
}
else
{
CSSleep(130);
pbValue[0] = 0xE1;
bRepeatTimes--;
}
}
CSSleep(40);
if (PHANTOM_SetLNBTone ( &nim1, bPreF22KStatus) != True)
{
return CSQPSK_FAILURE;
}
return CSQPSK_SUCCESS;
}
CSQPSK_Error_t PHANTOMSendDiSEqCCommand (CSHDITunerIndex bTunerIndex, PBYTE pbValue, int nCommandNum)
{
BYTE bPreF22KStatus;
long bValue;
int ii;
if ( PHANTOM_GetLNBTone ( &nim1, &bValue ) != True )
{
#ifdef QPSK_DEBUG
CSTRACE( ERROR_LEVEL,"GetLNBTone failed!\r\n");
#endif
return CSQPSK_FAILURE;
}
bPreF22KStatus = bValue ; // 5C5=22KW4L,#,1cSZRT:s;V84!#
#ifdef QPSK_DEBUG
CSTRACE( ERROR_LEVEL,"LNBTone :%d\r\n",bPreF22KStatus);
#endif
if ( PHANTOM_SetLNBTone ( &nim1,PHANTOM_LNBTONE_OFF ) != True ) // 9X22KJd3v!#
{
#ifdef QPSK_DEBUG
CSTRACE( ERROR_LEVEL,"SetLNBTone failed!\r\n");
#endif
return CSQPSK_FAILURE;
}
CSSleep(25);
if(PHANTOM_DiseqcSendMessage(&nim1,pbValue,nCommandNum,True,PHANTOM_RXMODE_NOREPLY,PHANTOM_LNB_BURST_MODULATED)==True)
{
#ifdef QPSK_DEBUG
CSTRACE( ERROR_LEVEL,"(PHANTOM_DiseqcSendMessage succeed\r\n");
#endif
}
else
{
#ifdef QPSK_DEBUG
CSTRACE( ERROR_LEVEL,"(PHANTOM_DiseqcSendMessage faildd\r\n");
#endif
}
CSSleep(40);
if (PHANTOM_SetLNBTone ( &nim1, bPreF22KStatus) != True)
{
#ifdef QPSK_DEBUG
CSTRACE( ERROR_LEVEL,"RecoverLNBTone failed!\r\n");
#endif
return CSQPSK_FAILURE;
}
return CSQPSK_SUCCESS;
}
CSQPSK_Error_t PHANTOMToneBurstCommandOnly (CSHDITunerIndex bTunerIndex, BYTE bToneBurstSel)
{
int nReturn = CSQPSK_SUCCESS;
long bValue;
BYTE bPreF22KStatus;
if (bToneBurstSel == 0)
return CSQPSK_SUCCESS;
if ( PHANTOM_GetLNBTone ( &nim1, &bValue ) != True)
{
return CSQPSK_FAILURE;
}
bPreF22KStatus = bValue ; // 5C5=22KW4L,#,1cSZRT:s;V84!#
if ( PHANTOM_SetLNBTone ( &nim1,PHANTOM_LNBTONE_OFF ) != True ) // 9X22KJd3v!#
{
return CSQPSK_FAILURE;
}
CSSleep(25);
if (PHANTOM_DiseqcSendToneBurst ( &nim1, bToneBurstSel ) != True)
{
return CSQPSK_FAILURE;
}
CSSleep(40);
if (PHANTOM_SetLNBTone ( &nim1, bPreF22KStatus) != True)
{
return CSQPSK_FAILURE;
}
return CSQPSK_SUCCESS;
}
PHANTOM_RX_OPER_MODE Get_rx_operation_mode(BYTE ucStandard, BYTE ucFEC_Rate, BYTE ucModulation)
{
if( ucStandard == DVBS_STANDARD )
{
switch( ucFEC_Rate )
{
case FEC1_2:
return PHANTOM_MODE_DVB_1_2;
case FEC2_3:
return PHANTOM_MODE_DVB_2_3;
case FEC3_4:
return PHANTOM_MODE_DVB_3_4;
case FEC5_6:
return PHANTOM_MODE_DVB_5_6;
case FEC7_8:
return PHANTOM_MODE_DVB_7_8;
case FEC_AUTO:
return PHANTOM_MODE_DVB_UNDEF;/*add by th on 070515 for AUTO fec option*/
default:
break;
}
}
if( ucStandard == DVBS2_STANDARD )
{
if( ucModulation == CS_QPSK )
{
switch( ucFEC_Rate )
{
case FEC1_2:
return PHANTOM_MODE_3;
case FEC3_5:
return PHANTOM_MODE_4;
case FEC2_3:
return PHANTOM_MODE_5;
case FEC3_4:
return PHANTOM_MODE_6;
case FEC4_5:
return PHANTOM_MODE_7;
case FEC5_6:
return PHANTOM_MODE_8;
case FEC8_9:
return PHANTOM_MODE_9;
case FEC9_10:
return PHANTOM_MODE_10;
case FEC_AUTO:
return PHANTOM_S2_QPSK_MODE_UNDEF;/*add by th on 070515 for AUTO fec option*/
default:
break;
}
}
if( ucModulation == CS_8PSK )
{
switch( ucFEC_Rate )
{
case FEC3_5:
return PHANTOM_MODE_11;
case FEC2_3:
return PHANTOM_MODE_12;
case FEC3_4:
return PHANTOM_MODE_13;
case FEC5_6:
return PHANTOM_MODE_14;
case FEC8_9:
return PHANTOM_MODE_15;
case FEC9_10:
return PHANTOM_MODE_16;
case FEC_AUTO:
return PHANTOM_S2_8PSK_MODE_UNDEF;/*add by th on 070515 for AUTO fec option*/
default:
break;
}
}
}
}
CSQPSK_Error_t PHANTOMSendOptionCommand(CSHDITunerIndex bTunerIndex, BYTE ucOptionSwitch)
{
int nOptionSwitch;
BYTE aucDiseqcCommand[4];
CSTRACE( INFO_LEVEL, "\n[HDI][CS_QPSK][STV0288SendOptionCommand]:\n ucOptionSwitch= %d",ucOptionSwitch);
if (ucOptionSwitch == 1)
{
aucDiseqcCommand[0] = 0xE0;
aucDiseqcCommand[1] = 0x15;
aucDiseqcCommand[2] = 0x23;
}
else if (ucOptionSwitch == 2)
{
aucDiseqcCommand[0] = 0xE0;
aucDiseqcCommand[1] = 0x15;
aucDiseqcCommand[2] = 0x27;
}
if (nOptionSwitch != 0)
{
PHANTOMSendDiSEqCCommand(bTunerIndex, aucDiseqcCommand, 3);
CSSleep(100);
}
return CSQPSK_SUCCESS;
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?