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

📄 radio_mv114_kst.c

📁 Sunplus 8202S source code.
💻 C
📖 第 1 页 / 共 3 页
字号:
		if(search_dir)
		{
			tuner_auto_search();
		}
		
		if(write2mem)
		{
			write2mem=0;
			tuner.memory_status=MEM_MODE;
			save_tuner_E2PROM();//xyy 2003-9-23 9:02
			//printf("write\n");
		}
    }
    
}


void tuner_auto_search( void )
{
    if( search_dir == 1 )  //auto search up
    {
        if( tuner.bandswitch )//am
        {//am auto search up
            //Amautosearchup();
            Amautosearch( AUTOSEARCHUP );
        }else
        { // fm auto search up
            //Fmautosearchup();
            Fmautosearch( AUTOSEARCHUP );
        }
    }else // search_dir == 2, auto search down    
    {
        if( tuner.bandswitch )//am
        { //am auto search down
            //Amautosearchdown();
            Amautosearch( AUTOSEARCHDOWN );
        }else
        {// fm auto search down
            //Fmautosearchdown();
            Fmautosearch( AUTOSEARCHDOWN );
        }
    }    
    
}   


void d_ms(BYTE ms)
{
    delay_1ms(ms);
}

void disfreq(void)
{
#if !defined(TUNER_DISABLE_VIDEO)//xyy 2004-11-9
    if(tuner.bandswitch) 
    {
		psprintf(RegionValStr[2],"AM CH:%d %03d KHZ",tuner.am_ch+1,(tuner.ambak>>4)*3-450); //ITEM number
    }
    else
    {
		//int x=tuner.fmbak*5-1070;
		int x = tuner.fmfreq[tuner.fm_ch]*5-1070;
		psprintf(RegionValStr[2],"FM CH:%d %d.%02d MHZ",tuner.fm_ch+1,x/100,x%100); //ITEM number
    }
    PrintOsdMsg(STR_OS_SPACE,0x2,0,1);
#endif

    vfd_set_power_state(0);
}

void  search(BYTE search_status)
{ 
    tuner_mute(1);
    
    if(tuner.bandswitch)
    {
		if(search_status==SEARCHADD)
		{
			tuner.ambak=(tuner.ambak+0x30);
			if(tuner.ambak>AM_FREQ_MAX)  tuner.ambak=AM_FREQ_MIN;
		}
		else if(search_status==SEARCHDEC)
		{
			tuner.ambak=(tuner.ambak-0x30);
			if(tuner.ambak<AM_FREQ_MIN)   tuner.ambak=AM_FREQ_MAX;
		}
		tuner.amfreq[tuner.am_ch] = tuner.ambak;
		set_freq(tuner.ambak);
    }
    else
    {
		if(search_status==SEARCHADD)
		{
			tuner.fmbak=(tuner.fmbak+1);
			if(tuner.fmbak>FM_FREQ_MAX) tuner.fmbak=FM_FREQ_MIN;
		}
		else if(search_status==SEARCHDEC)
		{
			tuner.fmbak=(tuner.fmbak-1);
			if(tuner.fmbak<FM_FREQ_MIN) tuner.fmbak=FM_FREQ_MAX;
		}
		tuner.fmfreq[tuner.fm_ch] = tuner.fmbak;
		set_freq(tuner.fmbak);
    }	
    disfreq();    
    tuner_mute_flag = 1; // auto demute after 500ms
    output_vfd_msg();
    write2mem = 1;
}

void output_vfd_msg(void)
{
	int i;
	
	polling();
	
#ifdef NEW_AUTO_SEARCH_ALL
	for(i=0;i<4;i++)
#endif
	{
		polling_vfdr();    	    
		//polling_vfd();    
	}
}



void Fmautosearch( BYTE autosearch_status )
{
	
#ifndef TUNER_DISABLE_VIDEO///xyy 2004-11-9	
#ifdef NEW_AUTO_SEARCH_ALL
	psprintf(RegionValStr[1],"AUTO SCAN"); 
    	PrintOsdMsg(STR_OS_SPACE,0x1,1,1);
#endif
#endif
	if(!tuner.bandswitch)
	{
		while(1)
		{       	         	  
			if( autosearch_status == AUTOSEARCHUP )
			{
				if(search_dir!=1) 	  //up
					return;
				
				tuner.fmbak=(tuner.fmbak+1); // 100K STEP, ref clock: 25k
				
				if(tuner.fmbak>FM_FREQ_MAX)  //fm max 107.8MHZ
				{
					tuner.fmbak=FM_FREQ_MIN;//87.8Mhz,ref= 25khz
					tuner_mute_flag=1;  // auto demute after 500 ms
					
					break;
				}
			}else if( autosearch_status == AUTOSEARCHDOWN )
			{
				if(search_dir!=2) 	  //down
					return;
				
				tuner.fmbak=(tuner.fmbak-1);   //gap = 2. 100K STEP
				
				
				if(tuner.fmbak<FM_FREQ_MIN)//fm min
				{
					tuner.fmbak=FM_FREQ_MAX;
					tuner_mute_flag = 1;
					break;
				}
				
			}		 
			tuner.fmfreq[tuner.fm_ch] = tuner.fmbak;
			disfreq();
			output_vfd_msg();
			if(is_station())
			{
				write2mem = 1;
				search_station = 1;//xyy 2004-3-12
#if defined(SUPPORT_STATION_INPUT)//xyy 2004-5-26
				tuner_oper_mode = RECALL_OR_STORE;
				timeout_vfd = 10000;
#endif
				break;
      }
      }
	  
      disfreq();
  }
  search_dir=0;
}	 

void Amautosearch( BYTE autosearch_status )
{
#ifndef TUNER_DISABLE_VIDEO//xyy 2004-11-9 
#ifdef NEW_AUTO_SEARCH_ALL
	psprintf(RegionValStr[1],"AUTO SCAN"); 
    	PrintOsdMsg(STR_OS_SPACE,0x1,1,1);
#endif
#endif

	if(tuner.bandswitch)//am
	{
		while(1)
		{       	         	  
			output_vfd_msg();  
			
			if( autosearch_status == AUTOSEARCHUP )
			{
				if(search_dir!=1) 	  //up
					return;
				
				tuner.ambak = (tuner.ambak + 0x30); // 3*3k step
				
                		if(tuner.ambak>AM_FREQ_MAX)  //am max
				{
					tuner.ambak=AM_FREQ_MIN;
					tuner_mute_flag=1;  // auto demute after 500 ms
					
					break;
				}
			}else if( autosearch_status == AUTOSEARCHDOWN )
			{
				if(search_dir!=2) 	  //down
					return;
				
				tuner.ambak=(tuner.ambak-0x30);   //gap = 3; 3*3K step
				
				if(tuner.ambak<AM_FREQ_MIN)//Am min
				{
					tuner.ambak=AM_FREQ_MAX;
					tuner_mute_flag=1;  // auto demute after 500 ms
					
					break;
				}
			}		 
			tuner.amfreq[tuner.am_ch] = tuner.ambak;
			disfreq();
			
			if(is_station())
			{
				write2mem = 1;
				search_station = 1;
#if defined(SUPPORT_STATION_INPUT)//xyy 2004-8-5
				tuner_oper_mode = RECALL_OR_STORE;
				timeout_vfd = 10000;
#endif
				break; 
			}     	  
      }
      disfreq();
  }
  search_dir=0;    
}	
  
	
 

void save_tuner_E2PROM(void)
{ 
	int test;
	BYTE    *p;
	
	
#ifdef TUNER_DBG
    //printf("!!!run save_tuner_setup ,size:%d\n",sizeof(t_tuner));
#endif
    
    p=(BYTE *)&tuner;    
    tuner.checksum = check_sum(p, (sizeof(tuner)-2));
    test=WriteToI2c(0xa0, TUNER_START,p, sizeof(t_tuner));
    
#ifdef TUNER_DBG
	printf("save checksum %x\n",tuner.checksum);	

#endif      
}


void load_tuner_E2PROM(void)
{ 
    int     iRts;   
    BYTE    *p;
    
    //printf("load tuner e2prom\n");
    p=(BYTE *)&tuner;    
    iRts = ReadFromI2c(0xa0, TUNER_START,p, sizeof(t_tuner)); 

    if(iRts<0)
    {
    	init_tuner_var();
    	return;
    }

    if(tuner.checksum != check_sum(p, (sizeof(t_tuner)-2)))    
    {
#ifdef TUNER_DBG
		//printf("checksum err! load default\n");
#endif
		init_tuner_var();
		save_tuner_E2PROM();
    }
	
}

/*****************
Changed by xyy 2004-5-26
******************/
#if defined(SUPPORT_STATION_INPUT)//xyy 2004-8-5
void init_tuner_var(void)
{
    int i;
	printf("init var\n");
	for(i=0;i<MAX_MEM_BAND;i++)
	{
		tuner.fmfreq[i]=0x7de;
		tuner.amfreq[i]=0x1470;
	}

	//tuner.memory_band_id[0]=1;
	//tuner.memory_band_id[1]=1;
	tuner.memory_status=NO_MEM_MODE;
	tuner.bandswitch=0;    //0:fm, 1:am
	tuner.Istuning[0]=1;
	tuner.Istuning[1]=1;
	tuner.ambak=0x1440;
    tuner.fmbak=0x7b2;
//    tuner.in2_data1=0x00;

	//p = (BYTE *)&tuner;
	//tuner.checksum = check_sum(p,sizeof(tuner));
    
#ifdef TUNER_DBG    
    //report_tuner_info();
#endif
}
#else
void init_tuner_var(void)
{
    const UINT16 fmfreq[MAX_MEM_BAND]={0x7de,0x802,0x86c,0x87e,0x91e,0x922,0x922,0x922,0x922,0x922,0x922,0x922,0x922,0x922,0x922,0x922,0x922,0x922,0x922,0x922};// 90.0 91.8 97.1 98.0 106.0 106.2
    const UINT16 amfreq[MAX_MEM_BAND]={0x1470,0x15f0,0x1e30,0x26a0,0x2ac0,0x2b20,0x2b20,0x2b20,0x2b20,0x2b20,0x2b20,0x2b20,0x2b20,0x2b20,0x2b20,0x2b20,0x2b20,0x2b20,0x2b20,0x2b20};//531 603 999 1404 1602 1620
    int i;
    //BYTE *p;

	printf("init var\n");
	for(i=0;i<MAX_MEM_BAND;i++)
	{
		tuner.fmfreq[i]=fmfreq[i];
		tuner.amfreq[i]=amfreq[i];
	}
	
	//tuner.memory_band_id[0]=1;
	//tuner.memory_band_id[1]=1;
	tuner.memory_status=NO_MEM_MODE;
	tuner.bandswitch=0;    //0:fm, 1:am
	tuner.Istuning[0]=1;
	tuner.Istuning[1]=1;
	tuner.ambak=0x1440;
    tuner.fmbak=0x7b2;
//    tuner.in2_data1=0x00;

	//p = (BYTE *)&tuner;
	//tuner.checksum = check_sum(p,sizeof(tuner));
    
#ifdef TUNER_DBG    
    //report_tuner_info();
#endif
}
#endif


#if defined(SUPPORT_STATION_INPUT)
/**********************
Changed by xyy 2004-5-24
**********************/

void tuner_func_input(void)     //xyy 2003-11-3 11:20
{
//	if(tuner.memory_status==MEM_MODE)
	if(tuner_oper_mode == RECALL_OR_STORE)
	{
		vfd_set_stationNm();
	}
#if defined(SUPPORT_FREQ_DIRECT_CALL) 
	else if(tuner_oper_mode == FREQ_DIRECT_CALL)//xyy 2004-7-28
	{
		if(tuner.bandswitch) 
			vfd_set_amFreq_input();
		else
			vfd_set_fmFreq_input();
	}
#endif
}
#endif

void tuner_st_mono(void) 
{
	if(tuner.st_mono == 1)
	{
		tuner.st_mono = 0;
		psprintf(RegionValStr[1],"MONO");
	}
	else
	{
		tuner.st_mono = 1;
		psprintf(RegionValStr[1],"ST");
	}
	PrintOsdMsg(STR_OS_SPACE,0x1,1,1);
	set_mono_stereo(tuner.st_mono);
	write2mem=1;    	
}

#ifdef SUPPORT_RDS_FUNCTION
disp_rds_func(BYTE enter_flag)
{
	printf("flag %d\n",enter_flag);
	    if(enter_flag == 0)
	    {
    	       	psprintf(RegionValStr[REGION1],"PS :");
		 		PrintOsdMsg(0, REGION1, 1, 1);
        }
	   
	    else if(enter_flag == 1)
	    {
    			psprintf(RegionValStr[REGION1],"PTY :");
		 		PrintOsdMsg(0, REGION1, 1, 1);
	    }
	    
	    else if(enter_flag == 2)
		{
    	        psprintf(RegionValStr[REGION1],"RT :");
		 		PrintOsdMsg(0, REGION1, 1, 1);
        }
 	    else if(enter_flag == 3)
        {
    	 		psprintf(RegionValStr[REGION1],"CT :");
		 		PrintOsdMsg(0, REGION1, 1, 1);
	    }

	    else if(enter_flag == 4)
    	{
    	       	psprintf(RegionValStr[REGION1],"PTYN :");
				PrintOsdMsg(0, REGION1, 1, 1);
	    }

}

void disp_rds(BYTE enter_flag)
{


	char rds_disp_buf[65];
	
	    if(enter_flag == 0)
	    {
            if(RDS_PS_RDY())
            {
    	       	psprintf(RegionValStr[REGION1],"PS : %s",rds_get_ps());
		 		PrintOsdMsg(0, REGION1, 1, 1);
		 		RDS_PS_CLR_RDY();
    	    }
        }
	   
	    else if(enter_flag == 1)
	    {
            if(RDS_PTY_RDY())
            {
    			psprintf(RegionValStr[REGION1],"PTY : %s",rds_get_pty());
		 		PrintOsdMsg(0, REGION1, 1, 1);
		 		RDS_PTY_CLR_RDY();
            }
	    }
	    
	    else if(enter_flag == 2)
		{
            if(RDS_RTA_RDY()||RDS_RTB_RDY())
           	{
    	      	memcpy(rds_disp_buf,rds_get_rt(RDS_RT_TYPE()),64);
    	        capitalize(rds_disp_buf, 0, 64);
		 		str_filter(rds_disp_buf, 64);
    	        psprintf(RegionValStr[REGION1],"RT : %s",rds_disp_buf);
		 		PrintOsdMsg(0, REGION1, 1, 1);
		 		RDS_RTA_CLR_RDY();
		 		RDS_RTB_CLR_RDY();
            }
        }
 	    else if(enter_flag == 3)
        {
            if(RDS_CT_RDY())
           	{
    	 		psprintf(RegionValStr[REGION1],"%s",rds_get_ct());
		 		PrintOsdMsg(0, REGION1, 1, 1);
		 		RDS_CT_CLR_RDY();
            }
	    }

	    else if(enter_flag == 4)
    	{
    	    if(RDS_PTYN_RDY())
           	{
    	       	psprintf(RegionValStr[REGION1],"PTYN:%s",rds_get_ptyn());
				PrintOsdMsg(0, REGION1, 1, 1);
				RDS_PTYN_CLR_RDY();
            }
	    }
    	
}




#endif /*rds func*/

⌨️ 快捷键说明

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