cx24301.c

来自「QPSK Tuner details, for conexant chipset」· C语言 代码 · 共 191 行

C
191
字号
#include "cx24301.h"
#include "CS_assert.h"
#include "CS_typedef.h"

extern int Tuner_Lock_Test(unsigned long dwFreq, unsigned long dwSym, unsigned char ucFEC);
extern void AddFunCheckLockStatus ( int  bTunerIndex, int *pnLockStatus );

CSQPSK_Error_t CX24301CheckLockStatus ( CSHDITunerIndex bTunerIndex, int *pnLockStatus )
{
	AddFunCheckLockStatus(bTunerIndex, pnLockStatus);
	return CSHDI_SUCCESS;
}


CSQPSK_Error_t CX24301BER(CSHDITunerIndex bTunerIndex, DWORD *pdwBer)
{
	AddBER(bTunerIndex, pdwBer);
	return CSQPSK_SUCCESS;
}

CSQPSK_Error_t CX24301SignalQuality(CSHDITunerIndex bTunerIndex, int *pnSignalQuality )
{
	AddFunSignalQuality(bTunerIndex, pnSignalQuality);
	return CSQPSK_SUCCESS;
}

CSQPSK_Error_t CX24301SignalStrength ( CSHDITunerIndex bTunerIndex, int *pnSignalStrength )
{
	AddFunSignalStrength(bTunerIndex, pnSignalStrength);
	return CSQPSK_SUCCESS;
}

CSQPSK_Error_t CX24301F22KSwitch ( CSHDITunerIndex bTunerIndex, CSHDISwitch nF22KCtrl )
{
	CSTRACE(ERROR_LEVEL, "[CX24301F22KSwitch](index, n22kstatus) = (%d, %d)\r\n", bTunerIndex, nF22KCtrl);
	AddFunF22KSwitch(bTunerIndex, nF22KCtrl);
	return CSQPSK_SUCCESS;
}

#define WATI_TIME 200
#define WAIT_EVERY_TIMES 50

static int g_nFlag = 0; 
CSQPSK_Error_t CX24301SearchLock  ( CSHDITunerIndex bTunerIndex, CSQPSKCHANNEL *pCSCHANNEL )
{
	int i;
	int nStatus = 0;
	unsigned long dwFreqStep;
	int j;
	unsigned long  dwCurrentFreq;
	int nTmp;
	int nReturn;
	int offset;
	unsigned char ucFEC;
	int nCurOffset;
	
	if ( (pCSCHANNEL->m_CHANNEL.m_DMD.m_dwChannelSymbolRate < 1000) ||
			(pCSCHANNEL->m_CHANNEL.m_DMD.m_dwChannelSymbolRate > 50000) ||
			(pCSCHANNEL->m_CHANNEL.m_dwChannelFrequency < 900000) ||
			(pCSCHANNEL->m_CHANNEL.m_dwChannelFrequency > 2250000) )
	{
	
		Add_TUNER_CX24108_set_freq(bTunerIndex,900*1000);
		return CSQPSK_FAILURE;
	}

	offset = pCSCHANNEL->m_nFrequencyOffset;
	//MyPrint("CX24301SearchLock: offset=%d, FEC:%d\n", offset, pCSCHANNEL->m_bFECRates);
	if ((offset > 5000) || (offset < -5000))
	{
		offset = 0;
	}
	dwFreqStep = 1000;

#if 1
       
	if (pCSCHANNEL->m_bFECRates != FEC_AUTO)
	{
		nReturn = Tuner_Lock_Test(pCSCHANNEL->m_CHANNEL.m_dwChannelFrequency, pCSCHANNEL->m_CHANNEL.m_DMD.m_dwChannelSymbolRate, FEC_AUTO);
		if (nReturn == TRUE)
		{
				USPPrint(3, "[HDIQPSK]connected\r\n");
				return CSQPSK_SUCCESS;
		}
		else
		{
				//USPPrint(3, "[HDIQPSK]lost (freq, sym) = (%d, %d)\r\n", dwCurrentFreq, pCSCHANNEL->m_CHANNEL.m_DMD.m_dwChannelSymbolRate);
		}	
	}
	
	for ( j=0; j<=((1500 / dwFreqStep)*2 + 1); j++ )
	{
		nTmp = ((dwFreqStep * j) / 2);
		if ((j%2) != 0)
		{
			nTmp += 1000;
			nTmp *= -1;
		}
		dwCurrentFreq = pCSCHANNEL->m_CHANNEL.m_dwChannelFrequency + nTmp;
		//dwCurrentFreq = pCSCHANNEL->m_CHANNEL.m_dwChannelFrequency;
		
		nReturn = Tuner_Lock_Test(dwCurrentFreq, pCSCHANNEL->m_CHANNEL.m_DMD.m_dwChannelSymbolRate,pCSCHANNEL->m_bFECRates);

		if (nReturn == TRUE)
		{
			USPPrint(3, "[HDIQPSK]connected\r\n");
			return CSQPSK_SUCCESS;
		}
		else
		{
			//USPPrint(3, "[HDIQPSK]lost (freq, sym) = (%d, %d)\r\n", dwCurrentFreq, pCSCHANNEL->m_CHANNEL.m_DMD.m_dwChannelSymbolRate);
		}
	}

	#else
	
		ucFEC = pCSCHANNEL->m_bFECRates;

START:	
		nReturn = Tuner_Lock_Test(pCSCHANNEL->m_CHANNEL.m_dwChannelFrequency - offset, pCSCHANNEL->m_CHANNEL.m_DMD.m_dwChannelSymbolRate, ucFEC);
		
		//hamaro_get_freq_offset(0, &nCurOffset);

		if (nReturn == TRUE)
		{
			//MyPrint("[HDIQPSK]connected\r\n");
			hamaro_get_freq_offset(0, &nCurOffset);
			
			pCSCHANNEL->m_nFrequencyOffset += nCurOffset /1000;			
			//MyPrint("Signal Locked: pCSCHANNEL->m_nFrequencyOffset=%d\n", pCSCHANNEL->m_nFrequencyOffset);
			return CSQPSK_SUCCESS;
		}
		else if (ucFEC != FEC_AUTO)
		{
			ucFEC = FEC_AUTO;
			goto START;
		}
	#endif
	
	//MyPrint("lost\r\n");
	return CSQPSK_FAILURE;
}

CSQPSK_Error_t  CX24301STDBY (CSHDITunerIndex bTunerIndex, int  bPDownFlag )
{
	AddFunSetStandby(bTunerIndex, bPDownFlag);
	return CSQPSK_SUCCESS;
}

CSQPSK_Error_t CX24301SetClockPolarity( CSHDITunerIndex bTunerIndex, T_ClockPolarity clockPol )
{
	AddFunSetClockPolarity(bTunerIndex, clockPol);
	return CSQPSK_SUCCESS;
}

CSQPSK_Error_t CX2430113_18VSwitch( CSHDITunerIndex bTunerIndex, Channel_Polarisation nSwitchStatus )
{
	AddFunSetLNBDC(bTunerIndex, nSwitchStatus);
	return CSQPSK_SUCCESS;
}

CSQPSK_Error_t CX24301Set_LNBPower ( CSHDITunerIndex bTunerIndex, UCHAR  bGPIOValue )
{
	return CSQPSK_SUCCESS;
}

CSQPSK_Error_t  CX24301SendDiSEqC10Command(CSHDITunerIndex bTunerIndex, BYTE bSwitchType, BYTE bCommittedByte, BYTE bToneBurstSel, BYTE bRepeat)
{
	AddFunSendDiSEqC10Command(bTunerIndex, bSwitchType, bCommittedByte, bToneBurstSel, bRepeat);
	return CSQPSK_SUCCESS;
}


CSQPSK_Error_t CX24301SendDiSEqC11Command (CSHDITunerIndex bTunerIndex, BYTE bCommittedByte, BYTE bUnCommittedByte, BYTE bRepeat)
{
	AddFunSendDiSEqC11Command(bTunerIndex, bCommittedByte, bUnCommittedByte, bRepeat);
	return CSQPSK_SUCCESS;
}

CSQPSK_Error_t CX24301SendDiSEqCCommand (CSHDITunerIndex bTunerIndex, PBYTE pbValue, int nCommandNum)
{
	AddFunSendDiSEqCCommand(bTunerIndex, pbValue, nCommandNum);
	return CSQPSK_SUCCESS;
}

CSQPSK_Error_t CX24301ToneBurstCommandOnly (CSHDITunerIndex bTunerIndex, BYTE bToneBurstSel)
{
	AddFunToneBurstCommandOnly(bTunerIndex, bToneBurstSel);
}

⌨️ 快捷键说明

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