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

📄 radio_new_ui.c

📁 Sunplus 8202S source code.
💻 C
📖 第 1 页 / 共 4 页
字号:
			{
			if(tuner.fm_ch<(MAX_MEM_BAND-1))
				tuner.fm_ch++;
			else
				tuner.fm_ch = (MAX_MEM_BAND-1);
			set_station(tuner.fm_ch);
			}
		write2mem =1;
		disfreq();
		break;


	case  IRC_FORMAT:
		tuner_st_mono();
		break;
		
	case  IRC_ZOOM:                             /* serach- */
		{
			search_dir=0;
			tuner.bandswitch=(!tuner.bandswitch);
			//printf("band\n");
			set_band(tuner.bandswitch);  
			write2mem=1;    	
			break;
		}

	case IRC_PROGRAM:
#ifndef NEW_AUTO_SEARCH_ALL
		auto_search_all();
#else
		auto_search_all_am();
		auto_search_all_fm();
		tuner.fm_ch = 0;
		set_station(tuner.fm_ch);  //goto the 1st station
#endif  //NEW_AUTO_SEARCH_ALL
		break;

#ifdef SUPPORT_APOGEE_AMP
	case IRC_VOLUME_UP:
//	    ircmd_volume_up();
//		set_volume(1);
		break ;
	case IRC_VOLUME_DN:
//	    ircmd_volume_down();
//		set_volume(0);
		break ;
#endif
	default:                                      
		break;
      }	      
}
#endif

#include "sysmain2_inc.h" 
#include "kernel.h"
#include "tvif.h"
//#include "radio_rds.h"//xyy 2003-12-1 13:28

void   tuner_main(void)
{
    #ifndef SUPPORT_Radio_NEW_UI  //wuzhj  2004/12/10
	osd_init();//xyy 2003-9-23 16:36
    #endif

#ifdef NEW_AUTO_SEARCH_ALL
	//change_system_clock(19);
#endif
	//disable_video();
	//tv_dacoff(0x3f);


	 
   	load_tuner_E2PROM();//marked by xyy 2003-9-23 9:01 

	tunerflag = 0;
	station_input_index = 0;
	tuner_oper_mode = NORMAL_TUNE;    

    
	init_tuner();
    
    if(test_tuner())
    {
		psprintf(RegionValStr[2],"TUNER NOT READY");
		PrintOsdMsg(STR_OS_SPACE,0x2,0,1);		
#ifdef XINGQIU_RECEIVER_PANNEL	//xyy 2004-8-5
		vfd_set_str(0,0,0,"NOT READY");
#endif
		while (system_state != SYSTEM_OPEN)
		{
			polling();
		}
    }
    else    //wuzhj 2005/01/18  debug not tuner bug 
   {
    erase_vfd_mem(); 

  #ifdef SUPPORT_Radio_NEW_UI  //wuzhj  2004/12/10
    osd_init_Radio();   //wuzhj 2004/12/04
    disfreq();
    ShowRadioTitle();  //wuzhj 2004/12/04
  #else
    disfreq();
  
  #endif
    while (system_state != SYSTEM_OPEN)
    {
#ifdef SUPPORT_RDS_FUNCTION  //xyy

#ifdef SUPPORT_Radio_NEW_UI  //wuzhj  2004/12/10	
//rds display wuzhj 2004/12/06
if(rds_radio_flag==1)
{
    rds_collect_data();
    disp_rds();
} 
#else
    rds_collect_data();
    disp_rds(rds_func_flag);
#endif 
#endif
		polling();//i=keyscan()
#if 0
		if(RDS_PS_RDY())
		{
			//printf("ps:%s\n",rds_get_ps());
			psprintf(RegionValStr[REGION1],"PS : %s",rds_get_ps());
			PrintOsdMsg(0, REGION1, 1, 1);
			RDS_PS_CLR_RDY();
		}
#endif
#ifdef SUPPORT_STEREO_DETECT
		if(is_stereo())
    	{
        	printf("stereo\n");    
    	}
    	else
    	{
        	printf("mono\n");
    	}
#endif //SUPPORT_STEREO_DETECT

		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);
}

#ifdef SUPPORT_Radio_NEW_UI  //wuzhj  2004/12/10
void disfreq(void)
{
    if(tuner.bandswitch) 
    {
		psprintf(RegionValStr[2]," AM CH:%d %03d KHZ ",tuner.am_ch+1,(tuner.ambak>>4)*3-450); //ITEM number
        if(tuner.am_ch<=9)
        {
            radio_down_flag=tuner.am_ch;
        }
        else
        {
            radio_down_flag=tuner.am_ch-10;
        }  

    }
    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
        if(tuner.fm_ch<=9)
        {
            radio_down_flag=tuner.fm_ch;
        
        }
        else
        {
            radio_down_flag=tuner.fm_ch-10;
        
        }  
    }
   
   // osd_init_Radio();
    ShowRadioMsg();
   
    DrawRadiodown(radio_down_flag,radio_right_flag,am_radio_right_flag);
    vfd_set_power_state(0);
}

#else

void disfreq(void)
{
    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);
    vfd_set_power_state(0);
}
#endif

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();
	
#ifndef NEW_AUTO_SEARCH_ALL
	for(i=0;i<10000;i++)
#endif
	{
		polling_vfdr();    	    
		//polling_vfd();    
	}
}



void Fmautosearch( BYTE autosearch_status )
{
#ifdef NEW_AUTO_SEARCH_ALL
	psprintf(RegionValStr[1],"AUTO SCAN");
  #ifndef SUPPORT_Radio_NEW_UI  //wuzhj  2004/12/10 
    	PrintOsdMsg(STR_OS_SPACE,0x1,1,1);
  #endif    	
#endif
	if(!tuner.bandswitch)
	{
		while(1)
		{       	         	  
			output_vfd_msg();
			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();
			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 = 6000;
#endif
				break;
            }
        }
	  
      disfreq();
  }
  search_dir=0;
}	 

void Amautosearch( BYTE autosearch_status )
{
#ifdef NEW_AUTO_SEARCH_ALL
	psprintf(RegionValStr[1],"AUTO SCAN"); 
#ifndef SUPPORT_Radio_NEW_UI  //wuzhj  2004/12/10
    	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 = 6000;
#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

#ifdef SUPPORT_Radio_NEW_UI     //wuzhj add for new ui 2004/12/10
void tuner_st_mono(void) 
{
	if(tuner.st_mono == 1)
	{
		psprintf(RegionValStr[1],"  ST  ");
	}
	else
	{
		psprintf(RegionValStr[1]," MONO ");
	}
	osd_DrawString(SETUP_SUB_XSTART+8, SETUP_MENU_YSTART-2, RegionValStr[1], SFONTCOLOR, SBGCOLOR);
	set_mono_stereo(tuner.st_mono);
	write2mem=1;    	
}

#else
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;    	
}
#endif

⌨️ 快捷键说明

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