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

📄 radio_mv114_kst.c

📁 Sunplus 8202S source code.
💻 C
📖 第 1 页 / 共 3 页
字号:

/* note: this program is for self tuned radio MV114, MV014, MV011 */
/* PLL IC: LC72131, TUNER IC: LA1844 */
/* state=FM AM mode */

#include "regmap.h"
#include "global.h"
#include "func.h"
#include "radio_mv114_kst.h"
#include "radio_rds.h"
#include "ircode.h" 
#include "osd.h"
#include "dsp3_if.h"
#include "set.h"
#include "audctrl.h"
#include "util.h"
extern UINT16 check_sum(BYTE *data,BYTE len); 
#define NEW_AUTO_SEARCH_ALL
#define TUNER_DBG
/*
#ifdef SUPPORT_TUNER_DBG
#define  TUNER_DBG
#endif
*/ 
/*
#ifndef DVDRELEASE
#define TUNER_DBG
#endif

#ifndef   TUNER_DBG
#undef printf
#undef print_block
#define printf(f, a...) do {} while (0)
#define print_block(x,y) do {} while (0)
#endif
*/
#ifndef  SUPPORT_OSD
#undef   PrintOsdMsg(x,y,z,w)
#define  PrintOsdMsg(x,y,z,w)
#endif

/*
* declare extern function
*/
extern void init_ir_num(void);
extern void  polling_vfdr(void);

/*from lc72131.c*/
extern void tuner_mute( BYTE );
extern void set_band(BYTE);
extern void set_mono_stereo(BYTE);
extern void set_station(BYTE i);
extern BYTE is_station();
extern void init_tuner();
extern BYTE test_tuner();
extern void set_freq(UINT16 freq);
extern BYTE is_stereo(void);

BYTE search_station=0;
static BYTE   search_dir=0;
BYTE write2mem=0;
extern int rep_ir_times;

#include ".\\Customers\\Sunplus\\vfd_gbmsample_l.h"  
#include "vfdfunc.h"
extern void  vfd_set_str();

/*/////////////////////////
Creator: xyy 2004-3-12 
Function:Auto search all station and save the station to e2prom
//////////////////////////*/
#ifndef NEW_AUTO_SEARCH_ALL
void auto_search_all()
{
	int i=0;
	search_dir = 1;
	if(tuner.bandswitch)//am
	{
		tuner.ambak=AM_FREQ_MIN+0x30;
		while(1)
		{
			if(tuner.ambak == AM_FREQ_MIN)
			{
				i = 0;
				search_station = 0;
				save_tuner_E2PROM();
				tuner.am_ch = 1;
				set_station(tuner.am_ch);
			    break;
			}
			Amautosearch(AUTOSEARCHUP);
			
			if(search_station==1)
			{
				tuner.amfreq[i] = tuner.ambak;
				i++;
				//save station
				search_station = 0;
				search_dir = 1;

			}
		}		
	}
	else //fm*/
	{
		tuner.fmbak=FM_FREQ_MIN+1;
		while(1)
		{
			if(tuner.fmbak == FM_FREQ_MIN)
			{
				i = 0;
				search_station = 0;
				save_tuner_E2PROM();
				tuner.fm_ch = 1;
				set_station(tuner.fm_ch);
			    break;
			}
			Fmautosearch(AUTOSEARCHUP);
			
			if(search_station==1)
			{
				tuner.fmfreq[i] = tuner.fmbak;
				i++;
				//save station
				search_station = 0;
				search_dir = 1;
			}
		}		
	}	
}
#endif//NEW_AUTO_SEARCH_ALL

#ifdef NEW_AUTO_SEARCH_ALL
void auto_search_all_am()
{
	BYTE ch;

	if(tuner.bandswitch  == 0)
	{
		tuner.bandswitch=(!tuner.bandswitch);	
		set_band(tuner.bandswitch);
	}
	//now is am

	tuner.ambak = AM_FREQ_MIN;
	tuner.am_ch = 0;
	for(ch = 0;ch < MAX_MEM_BAND;ch++)
	{
		
		while(1)
		{       	
				tuner.ambak = (tuner.ambak + 0x30); // 3*3k step
				if(tuner.ambak>AM_FREQ_MAX)  //am max
				{
					break;
				}
				
				tuner.amfreq[tuner.am_ch] = tuner.ambak;
				disfreq();
			
				if(is_station())
				{
					break; 
				}     	  
      		}
		if(tuner.ambak>AM_FREQ_MAX)  //am max
		{
				break;
		}

		if(tuner.am_ch < (MAX_MEM_BAND-1))
			tuner.am_ch++;
		else
			tuner.am_ch = 0;
	}
}



void auto_search_all_fm()
{
	BYTE ch;

	if(tuner.bandswitch  == 1)
	{
		tuner.bandswitch=(!tuner.bandswitch);	
		set_band(tuner.bandswitch);
	}
	//now is fm
	tuner.fmbak = FM_FREQ_MIN;
	tuner.fm_ch = 0;
	tuner.bandswitch = 0;//fm
	for(ch = 0;ch < MAX_MEM_BAND;ch++)
	{
		
		while(1)
		{       	
			tuner.fmbak=(tuner.fmbak+1); // 100K STEP, ref clock: 25k
			if(tuner.fmbak>FM_FREQ_MAX)  //fm max 107.8MHZ
			{
				break;
			}	 
			tuner.fmfreq[tuner.fm_ch] =tuner.fmbak ;
			disfreq();
			if(is_station())
				break;
      		}

		if(tuner.fmbak >FM_FREQ_MAX)  //fm max 107.8MHZ
		{
			break;
		}	
		
		if(tuner.fm_ch < (MAX_MEM_BAND-1))
			tuner.fm_ch++;
		else
			tuner.fm_ch = 0;
	}
}
#endif//NEW_AUTO_SEARCH_ALL

/*
char *capitalise(char *p)

mode==0
----translate lowercase into capital
mode==1
----translate capital into lowercase
len ??????
*/
void capitalize(char *p,BYTE mode,BYTE len)
{
    while(len)
    {
        if(*p>='a'&&*p<='z')
        {
            if(mode)
                *p+=0x20;
            else
                *p-=0x20;
        }
        p++;
        len--;
    }
}


void str_filter(char *p,BYTE len)
{
	//capitalize(p,len);
    while(len)
    {
        if(*p>='A'&&*p<='Z')
        {
        }
        else if((*p == '-')||(*p == ':'))
        {

        }
        else if(*p>='0'&&*p<='9')
        {

        }
        else
        {
		*p = ' ';
        }
        p++;
        len--;
    }
	
}



#ifdef XINGQIU_DVD_RECEIVER//xyy 2004-5-24 9:06

void tuner_key(BYTE key)
{

    static BYTE enter_flag=0;
	//return;
    switch(key)
	{
		
/*	case IRC_0:
	case IRC_1:
	printf("========  hello hello =======\n");
	tuner_oper_mode = RECALL_OR_STORE;
		break;*/
	case IRC_MUTE:
		{ 
			int id;
			//rds_decoder_init();
			//return;
			//printf("size of :%d\n",sizeof(tuner));
			user_mute=!user_mute;
			tuner_mute(user_mute);
			
			if(user_mute)
			{
				id=STR_OS_MUTE;

                OSD1000ISP_STATUS(OSDISP_MUTE, OSDIR_MUTE);

    			PrintOsdMsg(id,REGION1,0,0);
			}
			else
            {
//			    id=STR_OS_SPACE;

                OSD1000ISP_STATUS(OSDISP_CLEAR, OSDIR_GLOBAL);

		        OSD_OnOffRegion(OSD_OFF,1);//xyy 2003-10-13 17:15
            }
			break;
		}     
		
	case IRC_GOTO:
		tuner_oper_mode = AUTO_SEARCH;
		timeout_vfd = 0;   
		if(tuner.bandswitch  == 1)
		{
			auto_search_all_am();
			tuner.am_ch = 0;
			set_station(tuner.am_ch);
		}
		else
		{
			auto_search_all_fm();
			tuner.fm_ch = 0;
			set_station(tuner.fm_ch);
		}
		save_tuner_E2PROM();
		tuner_oper_mode = NORMAL_TUNE;
		disfreq();
		break;
		
	case IRC_SETUP:
		search_station = 1;
		tuner_oper_mode = RECALL_OR_STORE;
		timeout_vfd = 6000;
		break;
		
	case IRC_AUD_LANGUAGE:
		if(!tuner.bandswitch)
		{
			tuner_st_mono();
			timeout_vfd = 4000;
		}
		break;
	case IRC_CLEAR:
		printf("======  clear ======\n");
		break;
		
	case IRC_TITLEMENU:
		tuner_oper_mode = FREQ_DIRECT_CALL;
		timeout_vfd = 6000;
		erase_vfd_mem();
		if(tuner.bandswitch)
		{
			station_input_index = 1;
			psprintf(linebuf,"%02d   0000",tuner.am_ch); 
		}	
		else
		{
			psprintf(linebuf,"%02d  00000",tuner.fm_ch); 
			vfd_set_dot(0x49);
		}
			vfd_set_str(0,0,0,linebuf);
		break;
#ifdef SUPPORT_RDS_FUNCTION//xyy 2003-12-4 13:54
	case IRC_SELECT:
	    if(enter_flag == 0)
	    {
            	erase_vfd_mem();
            	if(psReadyFlag == 0x0f)
            	{
    	        	rds_func_flag = PS_FUNC; 
    	        	psprintf(RegionValStr[REGION1],"PS : %s",programServiceBuf);
		 	PrintOsdMsg(0, REGION1, 0, 1);
    	    	}
    		else
    	    	{
	    	       //vfd_set_str(0,0,0,"  NO PS  "); 
	    	       psprintf(RegionValStr[REGION1],"NO PS");
	    	       PrintOsdMsg(0, REGION1, 0, 1);
    	        	rds_func_flag = 0;
    	    	}
	       enter_flag++;
	    }
	    else if(enter_flag == 1)
	    {
            erase_vfd_mem();
            if(ptyReadyFlag == 0xff)
            	{
    	        rds_func_flag = PTY_FUNC;
		//printf( "PTY %s",programTypeBuf);
		//PrintOsdMsg(, y, z, w)
		 psprintf(RegionValStr[REGION1],"PYP : %s",programTypeBuf);
		 PrintOsdMsg(0, REGION1, 0, 1);
            }
    	    else
    	    {
    	        //vfd_set_str(0,0,0,"  NO PTY  "); 
    	        psprintf(RegionValStr[REGION1],"NO PYP");
		 PrintOsdMsg(0, REGION1, 0, 1);
    	        rds_func_flag = 0;
    	    }
	        enter_flag++;
	    }
	    else if(enter_flag == 2)
		{
            erase_vfd_mem();
            if((txtBreadyFlag == 0xffff)||(txtAreadyFlag == 0xffff))
            	{
    	        rds_func_flag = RT_FUNC;
		//printf("%s\n",radioTextBufA[0]);
    	        capitalize(radioTextBufA[radio_text_type], 0, 64);
		 str_filter(radioTextBufA[radio_text_type], 64);
    	        //printf("%s\n",radioTextBufA[0]);
		 psprintf(RegionValStr[REGION1],"RT : %s",radioTextBufA[radio_text_type]);
		 PrintOsdMsg(0, REGION1, 0, 1);
            }
    	    else
    	    {
    	        //vfd_set_str(0,0,0,"  NO RT  "); 
    	        psprintf(RegionValStr[REGION1],"NO RT");
		 PrintOsdMsg(0, REGION1, 0, 1);
    	        
    	        rds_func_flag = 0;
    	    }
	        enter_flag++;
	    }
	    else if(enter_flag == 3)
            {
            erase_vfd_mem();
            if(ctReadyFlag == 0xff)
            	{
    	        rds_func_flag = CT_FUNC;
    	        //printf("CT %s\n",clocktimeBuf);
		 psprintf(RegionValStr[REGION1],"%s",clocktimeBuf);
		 PrintOsdMsg(0, REGION1, 0, 1);
       
            }
    	    else
    			{	             			
    	        //vfd_set_str(0,0,0,"  NO CT  "); 
    	        psprintf(RegionValStr[REGION1],"NO CT");
		 PrintOsdMsg(0, REGION1, 0, 1);
    	     
    	        rds_func_flag = 0;
    	    }
	        enter_flag++;
	    }
	    else if(enter_flag == 4)
    		{
    		 
            erase_vfd_mem();
            if(ptynReadyFlag == 0x0f)
            	{
    	       	rds_func_flag = PTYN_FUNC;
    	       	capitalize(programTypeNameBuf, 0, 9);
    	       	str_filter(programTypeNameBuf,9);
			psprintf(RegionValStr[REGION1],"PTYN:%s",programTypeNameBuf);
			PrintOsdMsg(0, REGION1, 0, 1);
            	}
    		else
    	    	{
    	       	 //vfd_set_str(0,0,0," NO PTYN "); 
    	        	rds_func_flag = 0;
			psprintf(RegionValStr[REGION1],"NO PTYN");
		 	PrintOsdMsg(0, REGION1, 0, 1);
    		}
	        enter_flag = 0;
    		}
        rdsinfo_dispindex = 0;
        timeout_vfd = 2000;
    			
	    	     	break;
#endif
	case IRC_FORWARD:/* auto search up */
#ifdef SUPPORT_RDS_FUNCTION//xyy 2003-12-4 16:18
        rds_clear_var();
#endif	
		tuner_oper_mode = NORMAL_TUNE;    
		tuner.Istuning[tuner.bandswitch]=1;
		timeout_vfd = 0;
		// to avoid the noise when enter auto search mode
		tuner_mute_flag = 0;
		search_dir=1;
			break;
	case  IRC_BACKWARD:  /* auto search down */

#ifdef SUPPORT_RDS_FUNCTION//xyy 2003-12-4 16:18
        rds_clear_var();
#endif	
			// to avoid the noise when enter auto search mode
			tuner_oper_mode = NORMAL_TUNE; 
			timeout_vfd = 0;   
			tuner_mute_flag = 0;
			search_dir=2;
			break;

	case IRC_LEFT:
		search_dir = 0;
		search(SEARCHDEC);
		break;
	case IRC_RIGHT:
		search_dir = 0;
		search(SEARCHADD);
		break;

⌨️ 快捷键说明

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