⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 stv0299drv.c

📁 QPSK Tuner details, for conexant chipset.
💻 C
📖 第 1 页 / 共 5 页
字号:
		//sttbx_Print("\ndwCurSymbolRate = %d", g_ppdwSegSymbR[ii][0]);

		if(dwCurSymbolRate < g_ppdwSegSymbR[ii][0])
			break;
	}
	*pdwSearchTime=g_ppdwSegSymbR[ii][1];
	*pdwFreqStep=g_ppdwSegSymbR[ii][2];
	return CSQPSK_SUCCESS;

}

void CSSetConfigASIInSel ( CSHDITunerIndex bTunerIndex, int nASIInSel, int nASIStatusPin) 
{
	g_nASIInSelect[bTunerIndex] = nASIInSel ;
	g_nASIStatusPin[bTunerIndex] = nASIStatusPin ;
//	STV0299RegInit() ;
}


CSQPSK_Error_t STV0299_Optimize(CSHDITunerIndex bTunerIndex, DWORD dwSymbolRate, int nTunerType)
{
	BYTE bValue[3];
	int ErrorCode;
	//
	//[July 08, 2005]Modify by yuxibo in Istanbul.
	//
	if( nTunerType != STB6K)
	{
		if ( dwSymbolRate <= 5000 )	bValue[0] = 0x89;
		else if ( dwSymbolRate <= 10000 )	bValue[0] = 0x8F;
		else if ( dwSymbolRate <= 45000 )	bValue[0] = 0x95;	
		return ( STV0299WrtReg ( bTunerIndex,STV0299REG_BCLC, bValue, 1 ) );
	}
	else
	{
		//sttbx_Print("[STV0299_Optimize]STB6K optimize\n");
		if((dwSymbolRate>=5000))
		{
			bValue[0] = 0x99;
			bValue[1] = 0x97; 
		}
		else 
		{
			bValue[0] = 0x9B;
			bValue[1] = 0x93; 
		}
		if ( STV0299WrtReg ( bTunerIndex,STV0299REG_ACLC, bValue, 2 ) != CSQPSK_SUCCESS )
		{
			ErrorCode++;
		}	 
		 
		if(dwSymbolRate < 2000)
		{
			bValue[0] = 0x90;		
		}
		else
		{
			bValue[0] = 0x94;		
		}
		if ( STV0299WrtReg ( bTunerIndex,STV0299REG_AGC1R, bValue, 1 ) != CSQPSK_SUCCESS )
		{
			ErrorCode++;
		}
	}
		
	if ( ErrorCode != 0 )
	{
		return CSQPSK_FAILURE;
	}
	else
	{
		return CSQPSK_SUCCESS;
	}	

}

/* +==========================================================================+ */
/* | Function:	5C5=DiSEqC FIFO W4L,										  |	*/		
/* +==========================================================================+ */
static CSQPSK_Error_t CSDSCGetStatus ( CSHDITunerIndex bTunerIndex, int *pnDSCStatus )
{
	 BYTE bValue[4];
	 int ErrorCode;
	 
	 ErrorCode = STV0299ReadReg ( bTunerIndex, STV0299REG_DiSEqCSTATUS, bValue, 1 );
	 if(ErrorCode != CSQPSK_SUCCESS)
	 	return ErrorCode;
	 
	 if (( bValue[0] & FIFO_FULL_MASK) ==  FIFO_FULL_MASK)
		 *pnDSCStatus = 1;
	 else
		*pnDSCStatus = 0;

	 return CSQPSK_SUCCESS;
}



static CSQPSK_Error_t STV0299WaitDiSEqCFree (CSHDITunerIndex bTunerIndex)
{
	int i=0;
	int nDSCStatus;
	
	do 
	{
		CSSleep(1);
		CSDSCGetStatus(bTunerIndex,&nDSCStatus);
		i++;
	} while (  nDSCStatus && (i < 50));	// 5H5=FIFO?U!#
	if(i>=45) 
	{
		CSTRACE( ERROR_LEVEL, "[HDIQPSK] Err STV0299WaitDiSEqCFree TimeOut\n");
		CSTRACE( ERROR_LEVEL, "Position:file = %s,line = %d\n", __FILE__, __LINE__);
	     	return CSQPSK_FAILURE;
	}
	else
		return CSQPSK_SUCCESS;
}

CSQPSK_Error_t STV0299SendOptionCommand(CSHDITunerIndex bTunerIndex, BYTE ucOptionSwitch)
{
	int nOptionSwitch;	
	BYTE aucDiseqcCommand[4];

	 CSTRACE( INFO_LEVEL, "\n[HDI][CS_QPSK][STV0299SendOptionCommand]:\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)
	{
		STV0299SendDiSEqCCommand(bTunerIndex, aucDiseqcCommand, 3);
		CSSleep(100);
	}
}
CSQPSK_Error_t STV0299SendDiSEqCCommand (CSHDITunerIndex bTunerIndex, PBYTE pbValue, int nCommandNum)
{
	BYTE bPreF22KStatus;
	BYTE bValue;
	int ii;

        CSTRACE( INFO_LEVEL, "\n[HDI][CS_QPSK][STV0299SendDiSEqCCommand]:\n=========Enter STV0299SendDiSEqCCommand=============");
        
	if ( CSI2CRequestBus_inner(bTunerIndex, CSHDI_TIMEOUT_INFINITY) == CSI2C_SUCCESS )
	{
		STV0299WaitDiSEqCFree(bTunerIndex);
		if ( STV0299ReadReg ( bTunerIndex,STV0299REG_DiSEqC, &bValue, 1 ) != CSQPSK_SUCCESS )
		{
			CSI2CReleaseBus_inner(bTunerIndex);
			return CSQPSK_FAILURE;
		}

		bPreF22KStatus = bValue & DiSEqCMODE_MASK;	// 5C5=22KW4L,#,1cSZRT:s;V84!#

		if ( DiSEqCF22KSwitch ( bTunerIndex, CSHDI_OFF ) != CSQPSK_SUCCESS )			// 9X22KJd3v!#
		{
			CSI2CReleaseBus_inner(bTunerIndex);
			return CSQPSK_FAILURE;
		}
		CSSleep(25);

		if ( CSDSCActive (bTunerIndex) != CSQPSK_SUCCESS)		// =xHkDiSEqCD#J=
		{
			CSI2CReleaseBus_inner(bTunerIndex);
			return CSQPSK_FAILURE;
		}
		for ( ii = 0; ii < nCommandNum; ii++ )
		{
			STV0299WaitDiSEqCFree(bTunerIndex);
			bValue = *pbValue++;
			STV0299WriteReg ( bTunerIndex,STV0299REG_DiSEqCFIFO, &bValue, 1 );
		}
		STV0299WaitDiSEqCFree(bTunerIndex);

		CSSleep(40);
		if (STV0299WriteReg ( bTunerIndex,STV0299REG_DiSEqC, &bPreF22KStatus, 1 ) != CSQPSK_SUCCESS)
		{
			CSI2CReleaseBus_inner(bTunerIndex);
			return CSQPSK_FAILURE;
		}
		CSI2CReleaseBus_inner(bTunerIndex);

            	CSTRACE( INFO_LEVEL, "\n[HDI][CS_QPSK][STV0299SendDiSEqCCommand]:\n========================================\n");
				
		return CSQPSK_SUCCESS;
	}
	else
		return CSQPSK_FAILURE;
}


CSQPSK_Error_t STV0299SendDiSEqC10Command (CSHDITunerIndex bTunerIndex, BYTE bSwitchType, BYTE bCommittedByte, BYTE bToneBurstSel, BYTE bRepeat)
{
	BYTE bPreF22KStatus;
	BYTE bRepeatTimes;
	BYTE pbValue[4];
	BYTE bToneburst;
	BYTE bValue;
	int ii;

        CSTRACE( INFO_LEVEL, "\n[HDI][CS_QPSK][STV0299SendDiSEqC10Command]:\n=========Enter STV0299SendDiSEqC10Command=============");
        CSTRACE( INFO_LEVEL, "\n[HDI][CS_QPSK][STV0299SendDiSEqC10Command]:\n bSwitchType = %d, bCommittedByte = 0x%x, bToneBurstSel = %d",bSwitchType,bCommittedByte,bToneBurstSel);
        
	if ( CSI2CRequestBus_inner(bTunerIndex, CSHDI_TIMEOUT_INFINITY) == CSI2C_SUCCESS )
	{
		bRepeatTimes = bRepeat;
		pbValue[0] = 0xE0;
		pbValue[1] = 0x10;
		pbValue[2] = 0x38;
		pbValue[3] = bCommittedByte;
		/*bToneburst = (bCommittedByte >> 2) & 0x01;
		if (1 == bSwitchType)
		{
			pbValue[2] = 0x39;
		}*/
		STV0299WaitDiSEqCFree(bTunerIndex);
		if ( STV0299ReadReg ( bTunerIndex,STV0299REG_DiSEqC, &bValue, 1 ) != CSQPSK_SUCCESS )
		{
			CSI2CReleaseBus_inner(bTunerIndex);
			return CSQPSK_FAILURE;
		}

		bPreF22KStatus = bValue & DiSEqCMODE_MASK;	// 5C5=22KW4L,#,1cSZRT:s;V84!#

		if ( DiSEqCF22KSwitch ( bTunerIndex, CSHDI_OFF ) != CSQPSK_SUCCESS )			// 9X22KJd3v!#
		{
			CSI2CReleaseBus_inner(bTunerIndex);
			return CSQPSK_FAILURE;
		}
		CSSleep(25);

		if ( CSDSCActive (bTunerIndex) != CSQPSK_SUCCESS)		// =xHkDiSEqCD#J=
		{
			CSI2CReleaseBus_inner(bTunerIndex);
			return CSQPSK_FAILURE;
		}
	
		while ( TRUE )
		{
			for ( ii = 0; ii < 4; ii++ )
			{
				STV0299WaitDiSEqCFree(bTunerIndex);
				bValue = pbValue[ii];
				STV0299WriteReg ( bTunerIndex, STV0299REG_DiSEqCFIFO, &bValue, 1 );
			}
			STV0299WaitDiSEqCFree(bTunerIndex);
			if (bRepeatTimes == 0)
			{
				CSSleep(40);
				break;
			}
			else
			{
				CSSleep(130);
				pbValue[0] = 0xE1;
				bRepeatTimes--;
			}
		}
		/*
		if (0 == bSwitchType)
		{
			if ( CSDSCTBCommand ( bTunerIndex, bToneburst ) != CSQPSK_SUCCESS )	// 7"KMTone BurstC|An
			{
				CSI2CReleaseBus(bTunerIndex);
				return CSQPSK_FAILURE;
			}
		}
		else if ((bToneBurstSel == 1) || (bToneBurstSel == 2))
		{
			if ( CSDSCTBCommand ( bTunerIndex, bToneburst-1 ) != CSQPSK_SUCCESS )	// 7"KMTone BurstC|An
			{
				CSI2CReleaseBus(bTunerIndex);
				return CSQPSK_FAILURE;
			}
		}*/
	
		STV0299WaitDiSEqCFree(bTunerIndex);
		CSSleep(40);
//		sttbx_Print("\nF22KStatus = 0x%x", bPreF22KStatus);
		if (STV0299WriteReg ( bTunerIndex, STV0299REG_DiSEqC, &bPreF22KStatus, 1 ) != CSQPSK_SUCCESS)
		{
			CSI2CReleaseBus_inner(bTunerIndex);
			return CSQPSK_FAILURE;
		}
		CSI2CReleaseBus_inner(bTunerIndex);

		// delay to ensure the signal is stable
		CSSleep(20);
		
            CSTRACE( INFO_LEVEL, "\n[HDI][CS_QPSK][STV0299SendDiSEqC10Command]:\n=================================================\n");
                
		return CSQPSK_SUCCESS;
	}
	else
		return CSQPSK_FAILURE;
}

CSQPSK_Error_t STV0299SendDiSEqC11Command (CSHDITunerIndex bTunerIndex, BYTE bCommittedByte, BYTE bUnCommittedByte, BYTE bRepeat)
{
	BYTE bPreF22KStatus;
	BYTE bRepeatTimes;
	BYTE pbCommittedCommand[4];
	BYTE pbUnCommittedCommand[4];
	BYTE bToneburst;
	BYTE bValue;
	int ii;

        CSTRACE( INFO_LEVEL, "\n[HDI][CS_QPSK][STV0299SendDiSEqC11Command]:\n=========Enter STV0299SendDiSEqC11Command=============");
        CSTRACE( INFO_LEVEL, "\n[HDI][CS_QPSK][STV0299SendDiSEqC11Command]:\nbCommittedByte = 0x%x, bUnCommittedByte = 0x%x, bRepeat = %d",bCommittedByte,bUnCommittedByte,bRepeat);
	
	if ( CSI2CRequestBus_inner(bTunerIndex, CSHDI_TIMEOUT_INFINITY) == CSI2C_SUCCESS )
	{
		bRepeatTimes = bRepeat;
		/*
		pbCommittedCommand[0] = 0xE0;
		pbCommittedCommand[1] = 0x10;
		pbCommittedCommand[2] = 0x38;
		pbCommittedCommand[3] = bCommittedByte;
		bToneburst = (bCommittedByte >> 2) & 0x01;*/
		pbUnCommittedCommand[0] = 0xE0;
		pbUnCommittedCommand[1] = 0x10;
		pbUnCommittedCommand[2] = 0x39;
		pbUnCommittedCommand[3] = bUnCommittedByte;

		STV0299WaitDiSEqCFree(bTunerIndex);
		if ( STV0299ReadReg ( bTunerIndex,STV0299REG_DiSEqC, &bValue, 1 ) != CSQPSK_SUCCESS )
		{
			CSI2CReleaseBus_inner(bTunerIndex);
			return CSQPSK_FAILURE;
		}

		bPreF22KStatus = bValue & DiSEqCMODE_MASK;	// 5C5=22KW4L,#,1cSZRT:s;V84!#

		if ( DiSEqCF22KSwitch ( bTunerIndex, CSHDI_OFF ) != CSQPSK_SUCCESS )			// 9X22KJd3v!#
		{
			CSI2CReleaseBus_inner(bTunerIndex);
			return CSQPSK_FAILURE;
		}
		CSSleep(40);

		if ( CSDSCActive (bTunerIndex) != CSQPSK_SUCCESS)		// =xHkDiSEqCD#J=
		{
			CSI2CReleaseBus_inner(bTunerIndex);
			return CSQPSK_FAILURE;
		}
	
		while ( TRUE )
		{
			/*
			for ( ii = 0; ii < 4; ii++ )
			{
				STV0299WaitDiSEqCFree(bTunerIndex);
				bValue = pbCommittedCommand[ii];
				STV0299WriteReg ( bTunerIndex, STV0299REG_DiSEqCFIFO, &bValue, 1 );
			}
			STV0299WaitDiSEqCFree(bTunerIndex) ;*/
			

			for ( ii = 0; ii < 4; ii++ )
			{
				STV0299WaitDiSEqCFree(bTunerIndex);
				bValue = pbUnCommittedCommand[ii];
				STV0299WriteReg ( bTunerIndex, STV0299REG_DiSEqCFIFO, &bValue, 1 );
			}

			STV0299WaitDiSEqCFree(bTunerIndex);

			if ((bRepeatTimes == 0))
			{
				CSSleep(40);
				break;
			}
			else
			{
				//pbCommittedCommand[0] = 0xE1;
				pbUnCommittedCommand[0] = 0xE1;
				CSSleep(90);
				bRepeatTimes--;
			}
		}
		/*if ( CSDSCTBCommand ( bTunerIndex, bToneburst ) != CSQPSK_SUCCESS )	// 7"KMTone BurstC|An
		{
			CSI2CReleaseBus(bTunerIndex);
			return CSQPSK_FAILURE;
		}*/
	
		STV0299WaitDiSEqCFree(bTunerIndex);
		CSSleep(40);
		if (STV0299WriteReg ( bTunerIndex, STV0299REG_DiSEqC, &bPreF22KStatus, 1 ) != CSQPSK_SUCCESS)
		{
			CSI2CReleaseBus_inner(bTunerIndex);
			return CSQPSK_FAILURE;
		}
		CSI2CReleaseBus_inner(bTunerIndex);

		// delay to ensure the signal is stable
		CSSleep(20);

            	CSTRACE( INFO_LEVEL, "\n[HDI][CS_QPSK][STV0299SendDiSEqC11Command]:\n========================================\n");
		return CSQPSK_SUCCESS;
	}
	else
		return CSQPSK_FAILURE;
}



long CalcDataTimeConstant(int errorrate, int sn, int to, int hy, long BAUD)
{
	long	Tviterbi = 0	,
			TimeOut = 0	,
			THysteresis = 0	,
			PhaseNumber[5] = {2,6,4,6,8}	,
			averaging[4] = {1024L , 4096L , 16384L , 65536L}	,
			InnerCode = 1000	,
			HigherRate = 1000	;
	int		i	;
	
	if(BAUD == 0)
		return 100;
	/* Data capture time (msec)*/
	/*This time is due to the Viterbi synchronisation .*/
	for(i=0 ; i<5 ; i++)
	{
		if(((errorrate>>i)&0x01) == 0x01)
		{
			switch(i)
			{
				case 0	:/*inner code = 1/2*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -