tunerapi.c

来自「DVB软件,基于CT216软件的开发源程序.」· C语言 代码 · 共 435 行

C
435
字号
#include <stdio.h>
#include <string.h>
#include "ct_type.h"
#include "ct_os.h"
#include "ct_sys.h"
#include "ct_iic.h"
#include "ct_nim.h"
#include "nim_config.h"

#ifdef SUPPORT_TUNER_DTT8D1C
#include "DTT8D1C.h"    	
#endif //SUPPORT_TUNER_DTT8D1C   

#ifdef SUPPORT_TUNER_DTT2004
#include "DTT2004.h"    	
#endif //SUPPORT_TUNER_DTT2004

#ifdef SUPPORT_TUNER_DTT74530
#include "DTT74530.h"		
#endif //SUPPORT_TUNER_DTT74530
			
#ifdef SUPPORT_TUNER_EDT1022
#include "EDT1022.h"		
#endif //SUPPORT_TUNER_EDT1022
		
#ifdef SUPPORT_TUNER_EDT3022
#include "EDT3022.h"		
#endif //SUPPORT_TUNER_EDT3022
			
#ifdef SUPPORT_TUNER_LG101D
#include "lg101d.h"		
#endif //SUPPORT_TUNER_LG101D
			
#ifdef SUPPORT_TUNER_LG352D
#include "lg252d.h"		
#endif //SUPPORT_TUNER_LG352D
			
#ifdef SUPPORT_TUNER_LG352DN
#include "lg352DN.h"		
#endif //SUPPORT_TUNER_LG352DN
			
#ifdef SUPPORT_TUNER_LGXX1D
#include "lgxx1d.h"		
#endif //SUPPORT_TUNER_LGXX1D

#ifdef SUPPORT_TUNER_LH17AS  
#include "LH17AS.h"    	
#endif //SUPPORT_TUNER_LH17AS    

#ifdef SUPPORT_TUNER_LH172A     
#include "LH172A.h"    	
#endif //SUPPORT_TUNER_LH172A  
		
#ifdef SUPPORT_TUNER_MH201A   
#include "MH201A.h"    	
#endif //SUPPORT_TUNER_MH201A

#ifdef SUPPORT_TUNER_MXL5005		
#include "MXL5005_ct221.h"		
#endif //SUPPORT_TUNER_MXL5005

#ifdef SUPPORT_TUNER_MXL5007
#include "MxL5007_API.h"
#include "MxL_User_Define.h"
bool8 b8TunerWflag = TRUE;
static MxL5007_TunerConfigS stMxL5007Tuner;
#endif //SUPPORT_TUNER_MXL5007

#ifdef SUPPORT_TUNER_TD1611
#include "TD1600AL.h"
#include "ct_fp.h"		
#endif //SUPPORT_TUNER_TD1611	

#ifdef SUPPORT_TUNER_TDAD4	
#include "TDAD4.h"
#include "ct_fp.h"		
#endif //SUPPORT_TUNER_TDAD4	


#if 1
#define TUNER_DBG(p)
#else
#define TUNER_DBG(p) 		printf p
#endif

/*******************************************************************************************/
TUNER_InitParams Tuner_Init;

#ifdef SUPPORT_TUNER_MXL5007
bool8 CT221_ProgramTuner_MxL5007(u32 dwFreqkHz,u8 dwBWandFreqMHz);
#endif //SUPPORT_TUNER_MXL5007

/*******************************************************************************************/
bool8 Tuner_PowerDown(void)
{
#ifdef SUPPORT_TUNER_MXL5005	
	CT221_PD_MAX5003();
#endif //SUPPORT_TUNER_MXL5005
	return TRUE;	
}

/*******************************************************************************************/
void Tuner_Reset_paras(u8 val)
{
#ifdef SUPPORT_TUNER_TD1611		
	Reset_paras(val);
#endif //SUPPORT_TUNER_TD1611	
}

/*******************************************************************************************/
bool8 Tuner_DebugTuner(void)
{
#ifdef SUPPORT_TUNER_MXL5007
	if (Tuner_Init.enTunerType == EN_TUNER_MXL5007)
	{
		u8 u8Tempbuf[2];
		b8TunerWflag = FALSE; // Set Tuner can't be set channel
	    u8Tempbuf[0] = 0x18;	
	
		CT221_ProgramTuner_MxL5007(57000, 8);
	    CT_OS_MS_Delay(500);
		MxL_I2C_Read(0xC0, 0x18, &u8Tempbuf[1]);
	    u8Tempbuf[1] |= (1<<6); 
		MxL_I2C_Write(0xC0, u8Tempbuf, 2);
		MxL_I2C_Read(0xC0, 0xAA, &u8Tempbuf[1]);   
	    printf("57Mhz: 0xAA:%d \n", u8Tempbuf[1]);
	    printf("57Mhz: 50 < 0xAA (Dec) < 150 \n");
	
		MxL_I2C_Read(0xC0, 0x18, &u8Tempbuf[1]);
	    u8Tempbuf[1] &= ~(1<<6); 
		MxL_I2C_Write(0xC0, u8Tempbuf, 2);
	    CT_OS_MS_Delay(500);
	    
	    CT221_ProgramTuner_MxL5007(148000, 8);  
	    CT_OS_MS_Delay(500);
		MxL_I2C_Read(0xC0, 0x18, &u8Tempbuf[1]);
	    u8Tempbuf[1] |= (1<<6); 
		MxL_I2C_Write(0xC0, u8Tempbuf, 2);
		MxL_I2C_Read(0xC0, 0xAA, &u8Tempbuf[1]);   
	    printf("148Mhz: 0xAA:%d \n", u8Tempbuf[1]);
	    printf("148Mhz: 25 < 0xAA (Dec) < 100 \n");
	
		MxL_I2C_Read(0xC0, 0x18, &u8Tempbuf[1]);
	    u8Tempbuf[1] &= ~(1<<6); 
		MxL_I2C_Write(0xC0, u8Tempbuf, 2);
	    CT_OS_MS_Delay(500);
	  
	    CT221_ProgramTuner_MxL5007(508000, 8);    
	    CT_OS_MS_Delay(500);
		MxL_I2C_Read(0xC0, 0x18, &u8Tempbuf[1]);
	    u8Tempbuf[1] |= (1<<6); 
		MxL_I2C_Write(0xC0, u8Tempbuf, 2);
		MxL_I2C_Read(0xC0, 0xAA, &u8Tempbuf[1]);   
	    printf("508Mhz: 0xAA:%d \n", u8Tempbuf[1]);
	    printf("508Mhz: 25 < 0xAA (Dec) < 100 \n");
		
		MxL_I2C_Read(0xC0, 0x18, &u8Tempbuf[1]);
	    u8Tempbuf[1] &= ~(1<<6); 
		MxL_I2C_Write(0xC0, u8Tempbuf, 2);	
		
		b8TunerWflag = TRUE; // Set Tuner can't be set channel
	}
#endif //SUPPORT_TUNER_MXL5007

    return TRUE;
}

/*******************************************************************************************/
bool8 Tuner_DumpTuner(void)
{
#ifdef SUPPORT_TUNER_MXL5007
	if (Tuner_Init.enTunerType == EN_TUNER_MXL5007)
	{
		u8 u8Tempbuf;
		b8TunerWflag = FALSE; // Set Tuner can't be set channel	
		u16 u16i;
		for(u16i=0; u16i<0xff; u16i++)
		{
			MxL_I2C_Read(0xC0, u16i, &u8Tempbuf);
	    	printf("Mx5007[%02hx]: %02hx \n", u16i, u8Tempbuf);
		}
	
		b8TunerWflag = TRUE; // Set Tuner can't be set channel
	}
#endif //SUPPORT_TUNER_MXL5007

    return TRUE;
}

#ifdef SUPPORT_TUNER_MXL5007
/*******************************************************************************************/ 
bool8 CT221_ProgramTuner_MxL5007(u32 dwFreqkHz,u8 dwBWandFreqMHz)
{
	u32 u32RF_Freq_Hz = 0;
	MxL_ERR_MSG enMxlMsg = MxL_ERR_OTHERS;

	u32RF_Freq_Hz = dwFreqkHz * 1000;
	
	stMxL5007Tuner.I2C_Addr=MxL_I2C_ADDR_96<<1;
	stMxL5007Tuner.Mode=MxL_MODE_DVBT;
	stMxL5007Tuner.IF_Diff_Out_Level=-8;
	stMxL5007Tuner.Xtal_Freq=MxL_XTAL_24_MHZ;
	stMxL5007Tuner.IF_Freq=MxL_IF_4_57_MHZ;
	stMxL5007Tuner.IF_Spectrum=MxL_NORMAL_IF;
	stMxL5007Tuner.ClkOut_Setting=MxL_CLKOUT_ENABLE;
	stMxL5007Tuner.ClkOut_Amp=MxL_CLKOUT_AMP_0;
	stMxL5007Tuner.BW_MHz=dwBWandFreqMHz;
	stMxL5007Tuner.RF_Freq_Hz=u32RF_Freq_Hz;

	MxL_Tuner_Init(&stMxL5007Tuner);	
	
	enMxlMsg = MxL_Tuner_RFTune(&stMxL5007Tuner,u32RF_Freq_Hz, dwBWandFreqMHz );

	if(enMxlMsg != MxL_OK)
	{
		TUNER_DBG(("\n>> Change Frequency Fail......[MxL5007]\n"));
		return (FALSE);
	}
	else
		return (TRUE);	
	
}
#endif //SUPPORT_TUNER_MXL5007

/*******************************************************************************************/
bool8 Tuner_ProgramTuner(u32 RfFreq, u8 ucBandWidthMHz)
{
	if (Tuner_Init.enTunerType == EN_TUNER_DTT8D1C)
	{					
#ifdef SUPPORT_TUNER_DTT8D1C
    	return CT221_ProgramTuner_DTT8D1C(RfFreq, ucBandWidthMHz);	
#endif //SUPPORT_TUNER_DTT8D1C   
	}
	else if (Tuner_Init.enTunerType == EN_TUNER_DTT2004)
	{
#ifdef SUPPORT_TUNER_DTT2004
    	return CT221_ProgramTuner_DTT2004(RfFreq, ucBandWidthMHz);
#endif //SUPPORT_TUNER_DTT2004
	}
	else if (Tuner_Init.enTunerType == EN_TUNER_DTT74530)
	{
#ifdef SUPPORT_TUNER_DTT74530
		return CT221_ProgramTuner_DTT74530(RfFreq, ucBandWidthMHz);
#endif //SUPPORT_TUNER_DTT74530
	}
	else if (Tuner_Init.enTunerType == EN_TUNER_EDT1022)
	{				
#ifdef SUPPORT_TUNER_EDT1022
		return CT221_ProgramTuner_EDT1022(RfFreq, ucBandWidthMHz);	
#endif //SUPPORT_TUNER_EDT1022
	}
	else if (Tuner_Init.enTunerType == EN_TUNER_EDT3022)
	{				
#ifdef SUPPORT_TUNER_EDT3022
		return CT221_ProgramTuner_EDT3022(RfFreq, ucBandWidthMHz);	
#endif //SUPPORT_TUNER_EDT3022
	}
	else if (Tuner_Init.enTunerType == EN_TUNER_LG101D)
	{				
#ifdef SUPPORT_TUNER_LG101D
		return CT221_ProgramTuner_LG101D(RfFreq, ucBandWidthMHz);	
#endif //SUPPORT_TUNER_LG101D
	}
	else if (Tuner_Init.enTunerType == EN_TUNER_LG352D)
	{				
#ifdef SUPPORT_TUNER_LG352D
		return CT221_ProgramTuner_LG252D(RfFreq, ucBandWidthMHz);	
#endif //SUPPORT_TUNER_LG352D
	}
	else if (Tuner_Init.enTunerType == EN_TUNER_LG352DN)
	{				
#ifdef SUPPORT_TUNER_LG352DN
		return CT221_ProgramTuner_LG352DN(RfFreq, ucBandWidthMHz);	
#endif //SUPPORT_TUNER_LG352DN
	}		
	else if (Tuner_Init.enTunerType == EN_TUNER_LGXX1D)
	{				
#ifdef SUPPORT_TUNER_LGXX1D
		return CT221_ProgramTuner_LGXX1D(RfFreq, ucBandWidthMHz);	
#endif //SUPPORT_TUNER_LGXX1D
	}
	else if (Tuner_Init.enTunerType == EN_TUNER_LH17AS)	
	{
#ifdef SUPPORT_TUNER_LH17AS  
    	return CT221_ProgramTuner_LH17AS(RfFreq, ucBandWidthMHz); 
#endif //SUPPORT_TUNER_LH17AS    
	}
	else if (Tuner_Init.enTunerType == EN_TUNER_LH172A)	
	{	
#ifdef SUPPORT_TUNER_LH172A     
    	return CT221_ProgramTuner_LH172A(RfFreq, ucBandWidthMHz);
#endif //SUPPORT_TUNER_LH172A  
	}
	else if (Tuner_Init.enTunerType == EN_TUNER_MH201A)	
	{			
#ifdef SUPPORT_TUNER_MH201A   
    	return CT221_ProgramTuner_MH201A(RfFreq, ucBandWidthMHz);
#endif //SUPPORT_TUNER_MH201A
	}
	else if (Tuner_Init.enTunerType == EN_TUNER_MXL5005)
	{
#ifdef SUPPORT_TUNER_MXL5005		
		return CT221_ProgramTuner_MAX5003(RfFreq, ucBandWidthMHz);
#endif //SUPPORT_TUNER_MXL5005
	}
	else if (Tuner_Init.enTunerType == EN_TUNER_MXL5007)
	{
#ifdef SUPPORT_TUNER_MXL5007
		if(b8TunerWflag == TRUE)
		{
			return CT221_ProgramTuner_MxL5007(RfFreq, ucBandWidthMHz);
		}
#endif //SUPPORT_TUNER_MXL5007
	}
	else if (Tuner_Init.enTunerType == EN_TUNER_TD1611)
	{
#ifdef SUPPORT_TUNER_TD1611
		return CT221_ProgramTuner_TD1600AL(RfFreq, ucBandWidthMHz);
#endif //SUPPORT_TUNER_TD1611	
	}
	else if (Tuner_Init.enTunerType == EN_TUNER_TDAD4)
	{
#ifdef SUPPORT_TUNER_TDAD4	
		return CT221_ProgramTuner_TDAD4(RfFreq, ucBandWidthMHz);
#endif //SUPPORT_TUNER_TDAD4	
	}
	return FALSE;
}

#ifdef IIC_UART
/*******************************************************************************************/
bool8 Tuner_Write(u8 *pu8Buffer , u8 u8Length)
{
    if ((pu8Buffer == NULL)||
        (u8Length > MAX_IIC_BURST_LENGTH)||
        (u8Length==0))
    {        
        return FALSE;
    }

    if ( IIC2UART_Write(Tuner_Init.u8TunerAddress, *pu8Buffer, (pu8Buffer+1), (u8Length-1)) == FALSE )
	{		    
	    return FALSE;
	}
    return TRUE;
}
/*******************************************************************************************/
bool8 Tuner_Read(u8 *pu8Buffer, u8 u8Length)
{
    if ((pu8Buffer == NULL)||(u8Length > MAX_IIC_BURST_LENGTH))
    {
        return FALSE;
    }    
    
	if ( IIC2UART_Read(Tuner_Init.u8TunerAddress, 0, pu8Buffer, u8Length, FALSE) == FALSE )
	{
	    return FALSE;
	}

    return TRUE;
}
#else
/*******************************************************************************************/
bool8 Tuner_Write(u8 *pu8Buffer , u8 u8Length)
{
    u32 u32Handle;	
    
	if (CT_NIM_GetBus() == EN_CT_NIM_BUS_0)
	{
		if( CT_IIC_Open(EN_CT_IIC_BUS_0, Tuner_Init.u8TunerAddress, &u32Handle)!= DRV_OK)
		{		
			printf("\nCT_IIC_Open 0 Error");
	        return FALSE;
	    }
	}
	else
	{
		if( CT_IIC_Open(EN_CT_IIC_BUS_1, Tuner_Init.u8TunerAddress, &u32Handle)!= DRV_OK)
		{		
			printf("\nCT_IIC_Open 1 Error");
	        return FALSE;
	    }		
	}
#ifdef NIM_SW_IIC
	if(CT_SW_IIC_WriteData(u32Handle, pu8Buffer, u8Length) != DRV_OK )
#else
	if(CT_IIC_WriteData(u32Handle, pu8Buffer, u8Length) != DRV_OK )
#endif
	{		
		printf("\nCT_IIC_WriteData Error");
		CT_IIC_Close(u32Handle);
		return(FALSE);
	}
	
	CT_IIC_Close(u32Handle);
	return (TRUE);     
}
/*******************************************************************************************/
bool8 Tuner_Read(u8 *pu8Buffer, u8 u8Length)
{    
    u32 u32Handle;
		
	if (CT_NIM_GetBus() == EN_CT_NIM_BUS_0)
	{
		if( CT_IIC_Open(EN_CT_IIC_BUS_0, Tuner_Init.u8TunerAddress, &u32Handle)!= DRV_OK)
		{
			printf("\nR CT_IIC_Open 0 Error");
        	return FALSE;
        }
	}
	else
	{
		if( CT_IIC_Open(EN_CT_IIC_BUS_1, Tuner_Init.u8TunerAddress, &u32Handle)!= DRV_OK)
		{
			printf("\nR CT_IIC_Open 1 Error");
        	return FALSE;		
        }
	}

#ifdef NIM_SW_IIC
	if(CT_SW_IIC_ReadData(u32Handle, pu8Buffer, u8Length) != DRV_OK )
#else
	if(CT_IIC_ReadData(u32Handle, pu8Buffer, u8Length) != DRV_OK )
#endif
	{
		printf("\nR CT_IIC_ReadData Error");
		CT_IIC_Close(u32Handle);		
		return FALSE;
	}
	
	CT_IIC_Close(u32Handle);
	return (TRUE) ;
}
#endif

⌨️ 快捷键说明

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