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 + -
显示快捷键?