ct202.c

来自「QPSK Tuner details, for conexant chipset」· C语言 代码 · 共 2,621 行 · 第 1/5 页

C
2,621
字号
		else
		{	  
			/*g_nLockStatus = 0;
			*pnLockStatus = FALSE;*/  
			if ((GetAQCFail(bTunerIndex) == TRUE) /*|| g_nReSyncCnt > 10*/)/*加上会使搜索湖北卫视变慢*/
			{
				g_nReSyncCnt = 0;
				ReSync(bTunerIndex);////start a new sync process
			}
			g_nReSyncCnt ++;   
			CSSleep(3);///50  
		}
	}	
	g_nLockStatus = 0;
	*pnLockStatus = FALSE;
	CT202AManualReSync(bTunerIndex);
	return CSQPSK_SUCCESS;	
	#endif
	#if 0
	nReturn1  = CT_NIM_CheckLock(&pu16LockStatus, bTunerIndex);
	//////////printf("nReturn1 === %d\r\n",nReturn1);
	//////////printf("pu16LockStatus === %d\r\n",pu16LockStatus);
	if ( nReturn1 == DRV_OK )
	{
		//printf("111111111111");
		if(pu16LockStatus == TRUE) 
		{	
			//printf("22222222222");
			#ifdef CT202ADEBUG
			////////printf("t1t1ttttttt11111");
			#endif
			//nReturn = CSQPSK_SUCCESS;
			*pnLockStatus = TRUE;
			//printf("*pnLockStatus == LOCK!!!!");
			return CSQPSK_SUCCESS;
		}
		else 
		{
			//////////printf("333333333");
			#ifdef CT202ADEBUG
			////////printf("t12222222222");
			#endif
			//printf("*pnLockStatus == NOT LOCK!!!!");
			*pnLockStatus = FALSE;
			return CSQPSK_SUCCESS;
		}

	}
	else 
	{	
		//////////printf("44444444");
		#ifdef CT202ADEBUG
		////////printf("t3333333333333");
		#endif
		//printf("*pnLockStatus == CT_NIM_CheckLock NOT OK!!!!");
		*pnLockStatus = FALSE;
		return CSQPSK_FAILURE;
	}

	//return nReturn;
	#endif
}
#endif

CSQPSK_Error_t CT202ALockChannel(CSHDITunerIndex bTunerIndex, CSQPSKCHANNEL *pCHPara)
{
	BYTE ucBuffer;
	BYTE szSymRate[3];
	DWORD dwTemp;
	int lock_flag = 0;
	CT_NIM_Channel CtChannel;
	int nTimes,i;

	if (pCHPara->m_CHANNEL.m_DMD.m_dwChannelSymbolRate< 990|| pCHPara->m_CHANNEL.m_DMD.m_dwChannelSymbolRate > 45450) 
	{
		return CSQPSK_INVALID_PARAM;
	}

	CtChannel.u16SymbRate = pCHPara->m_CHANNEL.m_DMD.m_dwChannelSymbolRate; 
	CtChannel.u32Freq =  pCHPara->m_CHANNEL.m_dwChannelFrequency;

	CT_NIM_SetChannel(CtChannel, bTunerIndex);

	if (pCHPara->m_CHANNEL.m_DMD.m_dwChannelSymbolRate < 10000)
	{
		nTimes = 4;
	}
	else
	{
		nTimes = 1;
	}
	
	for (i = 0; i < nTimes;i++)
	{
		CT202ACheckLockStatus (bTunerIndex, &lock_flag);
		if (TRUE != lock_flag)
		{
			continue;
		}
		else
		{
			return CSQPSK_SUCCESS;
		}
	}	
	return CSQPSK_FAILURE;
}
CSQPSK_Error_t CT202AGetStrength(CSHDITunerIndex bTunerIndex, int *pnSignalStrength)
{	
	if (DRV_OK == CT_NIM_GetStrength(pnSignalStrength,bTunerIndex))
	{
		return CSQPSK_SUCCESS;
	}
	else
	{
		return CSQPSK_FAILURE;
	}

}
CSQPSK_Error_t CT202AGetQuality(CSHDITunerIndex bTunerIndex,  int *pnSignalQuality)
{
	int nLockStatus;
	#if 0
	CT202ACheckLockStatus (bTunerIndex, &nLockStatus);
	printf("nLockStatus == %d",nLockStatus);
	if (1 != nLockStatus)/*add by th on 070104*/
	{
		*pnSignalQuality = 0;
		return CSQPSK_SUCCESS;
	}
	#endif
	if (1 != g_nLockStatus)
	{
		*pnSignalQuality = 0;
		return CSQPSK_SUCCESS;
	}
	if (DRV_OK == CT_NIM_GetQuality(pnSignalQuality,bTunerIndex))
	{
		return CSQPSK_SUCCESS;
	}
	else
	{
		*pnSignalQuality = 0;
		return CSQPSK_FAILURE;   
	}
}

CSQPSK_Error_t CT202AF22KSwitch ( CSHDITunerIndex bTunerIndex, CSHDISwitch nF22KCtrl )
{

	if ( nF22KCtrl == CSHDI_ON)
	{
		if (TRUE == SetTone(CSHDI_ON,bTunerIndex))
		{
			return CSQPSK_SUCCESS;
		}
		return CSQPSK_FAILURE;
	}
	else 
	{
		if (TRUE == SetTone(CSHDI_OFF,bTunerIndex))
		{
			return CSQPSK_SUCCESS;
		}
		return CSQPSK_FAILURE;
	}
	return CSQPSK_FAILURE;
}

CSQPSK_Error_t CT202ASetStandby ( CSHDITunerIndex bTunerIndex, int nStandby )
{
	return CSQPSK_SUCCESS;
}

CSQPSK_Error_t CT202ASetClockPolarity ( CSHDITunerIndex bTunerIndex, T_ClockPolarity clockPol)
{
	u8 reg;
	bool8 status;

	status = PASS;
	
	if (LOW_TO_HIGH == clockPol)
	{
		status = GetReg(g_CTK202A[bTunerIndex],TS_CONTROL_REG_1, &reg, 0x01);
		reg &= 0xfb;
		status = SetReg(g_CTK202A[bTunerIndex],TS_CONTROL_REG_1, &reg, 0x01);
		if (PASS == status)
		{
			return CSQPSK_SUCCESS;
		}
		else
		{
			return CSQPSK_FAILURE;
		}
	}
	else
	{
		status = GetReg(g_CTK202A[bTunerIndex],TS_CONTROL_REG_1, &reg, 0x01);
		reg |= 0x04;
		status = SetReg(g_CTK202A[bTunerIndex],TS_CONTROL_REG_1, &reg, 0x01);
		if (PASS == status)
		{
			return CSQPSK_SUCCESS;
		}
		else
		{
			return CSQPSK_FAILURE;
		}
	}
	return CSQPSK_FAILURE;
}

CSQPSK_Error_t CT202AGetSignalBer ( CSHDITunerIndex bTunerIndex, DWORD *pdwBer )
{
	WORD pwBer;
	if (1 != g_nLockStatus)
	{
		*pdwBer = 10000000;
		return CSQPSK_SUCCESS;		
	}/*add by th on 070110*/
	if (PASS == GetCNR(&pwBer,bTunerIndex))
	{
		*pdwBer = pwBer;
		return CSQPSK_SUCCESS;	
	}
	return CSQPSK_FAILURE;
}



/*static*/ CSQPSK_Error_t CT202ATBCommand ( CSHDITunerIndex bTunerIndex, BYTE bTBSwitch )
{
	#if 1
	BYTE bValue;
	int ErrorCode;
	CT_DiSEqC_PARAMETER stDiSEqCMsg;
	bValue = 0;

	#ifdef CT202ADEBUG
	////////printf("enter CT202ATBCommand mode!!!!");
	#endif
	if ( bTBSwitch == 0 )
	{
	
		stDiSEqCMsg.au8Msg[0] = 0xff;
		stDiSEqCMsg.u16MsgLen = 1;
		stDiSEqCMsg.u8Satellite = 1;
		if (DRV_OK == CT_NIM_WriteDiSEqC_ToneBurst(&stDiSEqCMsg, bTunerIndex))
		{
			return CSQPSK_SUCCESS;
		}
		else

		{
			////////printf("CT_NIM_WriteDiSEqC failed!!!!!!!!!!!!!!!!");
		}
	
		
	}
	else if (bTBSwitch == 1)
	{
		stDiSEqCMsg.au8Msg[0] = 0x00;
		stDiSEqCMsg.u16MsgLen = 1;
		stDiSEqCMsg.u8Satellite = 0 ;
		if (DRV_OK == CT_NIM_WriteDiSEqC_ToneBurst(&stDiSEqCMsg, bTunerIndex))
		{
			return CSQPSK_SUCCESS;
		}
		else

		{
			////////printf("CT_NIM_WriteDiSEqC failed!!!!!!!!!!!!!!!!");
		}
		
	}
	#endif 
	
}    

CSQPSK_Error_t CT202ASendDiSEqC12Command (CSHDITunerIndex bTunerIndex, PBYTE pbValue, int nCommandNum)
{
	BYTE bValue;
	int ii;
	CT_DiSEqC_PARAMETER stDiSEqCMsg;
	#ifdef CT202ADEBUG
	////////printf("enter CT202ASendDiSEqC12Command!!!!!!!!!!!");
	#endif
	//CSTRACE(ERROR_LEVEL, "[HDIQPSK]CT202ASendDiSEqC12Command ");
	for ( ii = 0; ii < nCommandNum; ii++ )
	{
		//CSTRACE(ERROR_LEVEL, "[0x%x]  ", pbValue[ii]);
		stDiSEqCMsg.au8Msg[ii] = pbValue[ii];
	}
	//CSTRACE(ERROR_LEVEL, "\r\n");
	stDiSEqCMsg.u16MsgLen = nCommandNum;
	stDiSEqCMsg.u8Satellite = 0;
	CT_NIM_WriteDiSEqC(&stDiSEqCMsg,bTunerIndex);
	//CSSleep(250);/*不延时的话会导致在锁频的时候发连续的DiSEqC命令,前面的命令被后面的命令冲掉*/
	CSQPSKSleep(bTunerIndex, TIME_DELAY_BETWEEN_COMMAND);
	return CSQPSK_SUCCESS;   
}
CSQPSK_Error_t CT202ADiSEqCReset(CSHDITunerIndex bTunerIndex)	
{
	BYTE ucResetCommand [3];
	//printf("CT202ADiSEqCReset!!!!");
	ucResetCommand [0] = 0xe0;
	ucResetCommand [1] = 0x10;
	ucResetCommand [2] = 0x00;
	CT202ASendDiSEqC12Command (bTunerIndex, ucResetCommand, 3);
}
CSQPSK_Error_t CT202ASendOptionCommand(CSHDITunerIndex bTunerIndex, BYTE ucOptionSwitch)
{
	int nOptionSwitch;	
	BYTE aucDiseqcCommand[4];

	 CSTRACE( INFO_LEVEL, "\n[HDI][CS_QPSK][CT202ASendOptionCommand]:\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)
	{
		CT202ASendDiSEqC12Command(bTunerIndex, aucDiseqcCommand, 3);
		//CSQPSKSleep(bTunerIndex, 100);
		CSQPSKSleep(bTunerIndex, TIME_DELAY_BETWEEN_COMMAND);
	}
}
CSQPSK_Error_t CT202ASendDiSEqC10Command (CSHDITunerIndex bTunerIndex, BYTE bSwitchType, BYTE bCommittedByte, BYTE bToneBurstSel, BYTE bRepeat)
{
	CT_DiSEqC_PARAMETER stDiSEqCMsg;
	BYTE bRepeatTimes;
	BYTE pbValue[4];
	BYTE bToneburst;
	BYTE bValue;
	int ii;

	//printf("CT202ASendDiSEqC10Command enter!!!!\r\n");
	//printf("bCommittedByte == %2x\r\n", bCommittedByte);
	
	bRepeatTimes = bRepeat;
	pbValue[0] = 0xE0;
	pbValue[1] = 0x10;
	pbValue[2] = 0x38;
	pbValue[3] = bCommittedByte;
	//bToneburst = (bCommittedByte >> 2) & 0x01;

	/*
	if (1 == bSwitchType)
	{
		pbValue[2] = 0x39;
	}*/

	//CSTRACE(ERROR_LEVEL, "[HDIQPSK]CT202ASendDiSEqC10Command ");
	while ( TRUE )
	{
		for ( ii = 0; ii < 4; ii++ )
		{
			//CSTRACE(ERROR_LEVEL, "[0x%x]  ", pbValue[ii]);
			stDiSEqCMsg.au8Msg[ii] = pbValue[ii];
		}
		//CSTRACE(ERROR_LEVEL, "\r\n");
		stDiSEqCMsg.u16MsgLen = 4;
		stDiSEqCMsg.u8Satellite = 0;
		CT_NIM_WriteDiSEqC(&stDiSEqCMsg,bTunerIndex);
		if (bRepeatTimes == 0)
		{
			CSQPSKSleep(bTunerIndex, TIME_DELAY_BETWEEN_COMMAND);
			break;
		}
		else
		{
			CSQPSKSleep(bTunerIndex, TIME_DELAY_BETWEEN_COMMAND);
			pbValue[0] = 0xE1;/*repeat trans*/
			bRepeatTimes--;
		}
	}
	#if 0
	/*前面发的1.0 的命令可能受这个函数中RESET 的影响,解决方法待定*/	
	if ( CT202ATBCommand ( bTunerIndex, bToneBurstSel -1) != CSQPSK_SUCCESS )
	{
		return CSQPSK_FAILURE;
	}
	#endif
	return CSQPSK_SUCCESS;
}


CSQPSK_Error_t CT202ASendDiSEqC11Command (CSHDITunerIndex bTunerIndex, BYTE bCommittedByte, BYTE bUnCommittedByte, BYTE bRepeat)
	{

	BYTE bPreF22KStatus;
	BYTE bRepeatTimes;
	BYTE pbCommittedCommand[4];
	BYTE pbUnCommittedCommand[4];
	BYTE bToneburst;
	BYTE bValue;
	int ii;
	CT_DiSEqC_PARAMETER stDiSEqCMsg;

	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;

	//CSTRACE(ERROR_LEVEL, "[HDIQPSK]CT202ASendDiSEqC11Command begin\r\n");
	
	while ( TRUE )
	{
		//CSTRACE(ERROR_LEVEL, "[HDIQPSK]CT202ASendDiSEqC11Command ");
		/*
		for ( ii = 0; ii < 4; ii++ )
		{
			//CSTRACE(ERROR_LEVEL, "[0x%x]  ", pbCommittedCommand[ii]);
			stDiSEqCMsg.au8Msg[ii] = pbCommittedCommand[ii];
		}
		//CSTRACE(ERROR_LEVEL, "\r\n");
		stDiSEqCMsg.u16MsgLen = 4;
		stDiSEqCMsg.u8Satellite = 0;
		CT_NIM_WriteDiSEqC(&stDiSEqCMsg,bTunerIndex);
		if ((bRepeatTimes == 0) && (bRepeat >0))
		{
			CSSleep(TIME_DELAY_BETWEEN_COMMAND);
			break;
		}
		CSSleep(TIME_DELAY_BETWEEN_COMMAND);
		*/
		//CSTRACE(ERROR_LEVEL, "[HDIQPSK]CT202ASendDiSEqC11Command  1 ");
		for ( ii = 0; ii < 4; ii++ )
		{
			//CSTRACE(ERROR_LEVEL, "[0x%x]  ", pbUnCommittedCommand[ii]);
			stDiSEqCMsg.au8Msg[ii] = pbUnCommittedCommand[ii];
		}
		//CSTRACE(ERROR_LEVEL, "\r\n");
		stDiSEqCMsg.u16MsgLen = 4;
		stDiSEqCMsg.u8Satellite = 0;
		CT_NIM_WriteDiSEqC(&stDiSEqCMsg,bTunerIndex);

		if (bRepeatTimes == 0)
		{
			CSQPSKSleep(bTunerIndex, TIME_DELAY_BETWEEN_COMMAND);
			break;
		}
		else  
		{
			//pbCommittedCommand[0] = 0xE1;
			pbUnCommittedCommand[0] = 0xE1;
			CSQPSKSleep(bTunerIndex, TIME_DELAY_BETWEEN_COMMAND);
			bRepeatTimes--;
		}
	}
	/*
	//CSTRACE(ERROR_LEVEL, "[HDIQPSK] CT202ASendDiSEqC11Command CT202ATBCommand\r\n");
	if ( CT202ATBCommand ( bTunerIndex, bToneburst ) != CSQPSK_SUCCESS )	
	{
		return CSQPSK_FAILURE;
	}*/
	return CSQPSK_SUCCESS;
}

CSQPSK_Error_t CT202AToneBurstCommandOnly (CSHDITunerIndex bTunerIndex, BYTE bToneBurstSel)
{

	BYTE bValue;
	BYTE bPreF22KStatus;

	CT202ADiSEqCReset(bTunerIndex);/*add bu th on070110 for MultiSwitch*/	
	if (bToneBurstSel == 0)
	return CSQPSK_SUCCESS;
	
	//CSTRACE(ERROR_LEVEL, "[HDIQPSK]CT202AToneBurstCommandOnly\r\n");
	if (CT202ATBCommand(bTunerIndex, bToneBurstSel-1) != CSQPSK_SUCCESS)
	{
		return CSQPSK_FAILURE;
	}

	return CSQPSK_SUCCESS;

}


#if 0
bool8 GetCNE(u8 *u8decimal, u8 *u8point)
{

	bool8 result = PASS;
	u16 window_length[]={0x10000, 0x4000, 0x1000, 0x400};
	//int cnr=0;
	int i, count = 0;

#if 0
	u8 Locksta;
    GetLockStat(&Locksta);
	////////printf("RCVL AGCL CEL SRL STL CRL VTL FSL\n");
	for(i=0; i<8; i++)
	{
		////////printf("  %hx ", (Locksta >> i) & 0x01);
	}
	////////printf("\n");
#endif

	//for(i=0;i<4;++i)
	//{
		//result = SetCNRmon(window_length[i]);
		//result

⌨️ 快捷键说明

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