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

📄 vfd_portable.c

📁 mp3 player program please read carefully.
💻 C
📖 第 1 页 / 共 3 页
字号:
		            #ifdef ARGUS_PDVD_MENU_PLUS
                    if(full_scrn & SETUP_PLUS)
                        ircmd_setup_plus();
                    #endif //end #ifdef ARGUS_PDVD_MENU_PLUS
                    call_ir_func(IRC_EJECT);
                    PrintOsdMsg(STR_OS_OPEN,REGION1,0,0);
                }   
            }
            else
            {
                if(CDOpened())
                call_ir_func(IRC_EJECT);
            }
	    
            #endif //end #if defined(MUSTEK_K100D_MODEL)
            #endif //#ifdef CHECK_PORTABLE_OPCLSW
        
	    #ifdef  DVB_DVD_8202
        }
	    #endif   
        
    #ifdef TFT_VIDEO_INOUT
    }
    #endif //end #ifdef TFT_VIDEO_INOUT
        
  #ifdef TFT_ONOFF_CONTROL//shenyj add
  UINT16 tft_sw_flag;
  tft_sw_flag = GPIO_I_GET(TFT_SW_GPIO);
  if(tft_sw_flag)
  	{
  		GPIO_M_SET(CTR_TFT_GPIO,1); 
		GPIO_E_SET(CTR_TFT_GPIO,1);
		GPIO_O_SET(CTR_TFT_GPIO,0);
  	}
  	else
  	{
  		GPIO_M_SET(CTR_TFT_GPIO,1); 
		GPIO_E_SET(CTR_TFT_GPIO,1);
		GPIO_O_SET(CTR_TFT_GPIO,1);
  	}
  #endif      
        

#if defined(GBM_PORTABLE_DVD)||defined(SUNPLUS_8202P_DEMOBOARD)     //rbhung for GBM Portable DVD
    #ifdef TFT_VIDEO_INOUT 
    if(!AVin_step)
    #endif //end #ifdef TFT_VIDEO_INOUT 
    {
        #ifdef HOLD_KEY_DETECT    
        temp=regs0->gpio_in[HOLD_GPIO / 16] & (1 << (HOLD_GPIO % 16));  //get (HOLD)
        if(temp)
        	hold_state=1;
        else
        	hold_state=0;		 	
        #endif
        
        temp=regs0->gpio_in[TFT_SW_GPIO / 16] & (1 << (TFT_SW_GPIO % 16));  //get (TFT_SW)
        if(temp)
            regs0->gpio_out[CTR_TFT_GPIO /16]|= (1 << (CTR_TFT_GPIO % 16));
        else
            regs0->gpio_out[CTR_TFT_GPIO /16]&= ~(1 << (CTR_TFT_GPIO % 16));
    }
    	
    temp=regs0->gpio_in[MCU_POWER_DET_GPIO / 16] & (1 << (MCU_POWER_DET_GPIO % 16));  //get gpio41(MCU_POWER_DET)
    if(temp)
    {
    	powerdown_timer=0;
    }
    else
    {
    	powerdown_timer++;
    	if(powerdown_timer>100)
    	{
            regs0->gpio_out[CTR_GLED_GPIO/16]|= (1 << (CTR_GLED_GPIO % 16));      //CTR_GLED->H,GREEN LED OFF
            regs0->gpio_out[DSP_RLED_GPIO/16]&= ~(1 << (DSP_RLED_GPIO % 16));     //DSP_RLED->L,RED LED ON    
	    	call_ir_func(IRC_POWER);
		}
    }	
        	
    	
    temp=regs0->gpio_in[LOWBAT_DET_GPIO / 16] & (1 << (LOWBAT_DET_GPIO % 16));  //get gpio42(LOWBAT_DET)
    if(temp)
    {	
        if(lowbat_timer==0)
			ClearOsdMsg(2);
    	lowbat_timer=1;
        regs0->gpio_out[CTR_GLED_GPIO/16]&= ~(1 << (CTR_GLED_GPIO % 16));     //CTR_GLED->L,GREEN LED ON
        regs0->gpio_out[DSP_RLED_GPIO/16]|= (1 << (DSP_RLED_GPIO % 16));      //DSP_RLED->H,RED LED OFF
    }
    else
    {
    	if(lowbat_timer<100)
    	{
    		PrintOsdMsg(STR_OS_LOWBAT,REGION2,0,0);
    		lowbat_timer++;
            regs0->gpio_out[CTR_GLED_GPIO/16]|= (1 << (CTR_GLED_GPIO % 16));  //CTR_GLED->H,GREEN LED OFF
            regs0->gpio_out[DSP_RLED_GPIO/16]&= ~(1 << (DSP_RLED_GPIO % 16)); //DSP_RLED->L,RED LED GLITTER ON
    	}	
    	else
    	{
    		if((lowbat_timer>=100) & (lowbat_timer<150))
    		{
    			ClearOsdMsg(2);
    			lowbat_timer++;
                regs0->gpio_out[DSP_RLED_GPIO/16]|= (1 << (DSP_RLED_GPIO % 16));  //DSP_RLED->H,RED LED GLITTER OFF
    		}	
    		else	
    			lowbat_timer=0;
    	}	
    }	
#endif //end #ifdef GBM_PORTABLE_DVD

#ifdef BAT_DETECT//shenyj add 2006-9-12 02:37下午
    check_bat_detect_gpio();
#endif

}
#endif
     
#ifdef PDVD_USE_IO_SCAN_KEY
    
#ifdef APEX_PORTABLE_DVD  //liulilifeng add for apex portable dvd eth1007

const BYTE gpio[5]={KEY_A,KEY_B,KEY_C,KEY_D,KEY_E};

void check_portable_key(void)
{
    BYTE i,j,keydata,press_key=0;
    static BYTE keyprev=0;
    #ifdef HOLD_KEY_DETECT
    if(hold_state)
        return;
    #endif

    //GPIO_E_SET (23 , 1 );
    //GPIO_O_SET (23 , 1 );

    for (i=5;i>0;i--)
    {

        for (j=0;j<5;j++)
        {
            if ( j<i )
                GPIO_E_SET( gpio[j] , 0); //set as input port
            else if (j>i)
            {
                GPIO_E_SET( gpio[j] , 1); //set as output port
                GPIO_O_SET( gpio[j] , 1);
            }
            else
            {
                GPIO_E_SET( gpio[j] , 1); //set as output port
                GPIO_O_SET (gpio[j] , 0);
            }

        }
       
        for (j=0;j<i;j++)
        {
            keydata = GPIO_I_GET( gpio[j] );
            if (keydata ==0 )
            {
                press_key =1;
                keydata = i*5 + j;
                if (keyprev != keydata)
                {
                    keyprev = keydata;
                    call_ir_func(vfd_keycode[keydata - 1]);
                    printf ("key %d x,y %d ,%d \n",keydata , i , j );
                }
                
            }
        }
        if (press_key ==1 )
            break ;
    }

    for (j=0;j<5;j++)
    {
        GPIO_E_SET (gpio[j] , 1);
        GPIO_O_SET (gpio[j] , 1);
    }
    
  	if(press_key==0) keyprev=0;
}

#elif defined(MUSTEK_K100D_MODEL)
/*
by justin 2005/09/08
from here to end this function is change to let keyboard used.
*/

#define LONG_PRESS_KEY_TIME  5   ///10  
const BYTE gpio[6]={31,33,39,40,30,32};
#ifdef IO_CHECK_DELAY
#define MAX_DELAY_CNT   30
#endif

void check_portable_key(void)
{
    BYTE i,j,k,keydata,unuseful,press_key=0;
    static BYTE keyprev=0;
    static BYTE olddata=0;
    static BYTE key_press_times=0;	
        	        
	GPIO_M_SET(31,1);
	GPIO_M_SET(33,1);
	GPIO_M_SET(39,1);
	GPIO_M_SET(40,1);
	GPIO_M_SET(30,1);
	GPIO_M_SET(32,1);

	GPIO_E_SET(31,1);
	GPIO_E_SET(33,1);
	GPIO_E_SET(39,1);
	
	GPIO_E_SET(40,0);
	GPIO_E_SET(30,0);
	GPIO_E_SET(32,0);
	
    #ifdef HOLD_KEY_DETECT
    if(hold_state)
        return;
    #endif
    
    //gpio confgi should move to reset_gpio_portable()!!!
    //regs0->sft_cfg0 &=~((0x01)<<4); //GPIO39(Pin162)Disable M_DQM2 and enable
    
    //1.100 maybe is too lagrge!!!
    //2.delay should be not in here!!!
    //for(unuseful=0;unuseful<100;unuseful++);
    //delay key scan 
    // for the program  run  too fast  
    //regs0->sft_cfg1 &= ~(0x7 << 9); //gpio 33(pin 155)
    //for(unuseful=0;unuseful<100;unuseful++);
    
    regs0->sft_cfg1 &= ~(0x7 << 9); //gpio33(pin 155)
    
	for(i=0;i<3;i++)
	{
	    for(j=0;j<3;j++)
		    GPIO_O_SET(gpio[j],1);
        
	    GPIO_O_SET(gpio[i],0);
	    
	    //delay....
	    #ifdef IO_CHECK_DELAY
	    for(unuseful=0;unuseful<MAX_DELAY_CNT;unuseful++);
	    #endif
	    
  	    for(k=3;k<6;k++)
  		{  		 
        	keydata=GPIO_I_GET(gpio[k]);
    		if(keydata==0)
    		{    	       	  
    			press_key=1;
    	
              	keydata=i*3+(k-3)+1;    	
//by justin 2005/10/21 press a key for a long time , system do it again
			    if(keydata==olddata)
    			{
    			    key_press_times++;
    			}
    			else
    			{
    			    key_press_times=0;
    				olddata=keydata;
    			}
              	
    			if((keyprev!=keydata)||(key_press_times>LONG_PRESS_KEY_TIME))
    			{    			  			
    			    BYTE temp;
    			    key_press_times=0;
    			    keyprev=keydata;
    			    temp=vfd_keycode[keydata - 1];
    			    //by justin 2005/11/01  the same key on panel have different name in different mode
			        if(source_play_mode==DVB_T_MODE)
					{	
						if(temp==IRC_FORWARD)temp=IRC_NEXT;
						if(temp==IRC_BACKWARD)temp=IRC_PREV;
					}
			        
			        #ifdef SUPPORT_8202_DVB
	                if(Is_Dvb_State())
	                    Dvb_ircmd_pre_parser(temp);
    		        else
                    #endif //SUPPORT_8202_DVB
			        call_ir_func(temp);

    		       // call_ir_func(vfd_keycode[keydata - 1]);
    	            //printf("key %d SW %d,%d.\n",keydata,i,k-4);
    	            //call_ir_func(IRC_VOLUME_UP);
                    //printf("key %d SW %d,%d.\n",keydata,i,k-3);
                      		

    	        }  
    			break;
    		}    		    		
  		}  		
  	}
  	if(press_key==0) 
  	{
  		keyprev=0;
  		key_press_times=0;
  		olddata=0;
  	}
  	
  	/*.......................................................................................................
    by justin 2005/09/012
    key_board_power  
    .........................................................................................................*/
    if(IunTestPin84>=2)
    {
        GPIO_E_SET(POWER_KEY_GPIO,0);
        //QiaoHuilin:2005-10-21
	    if(GPIO_I_GET(POWER_KEY_GPIO))while(1)
	    	call_ir_func(IRC_POWER);
	///////////////////////////////////////////////////////////////////////////
	}    
    
}

#elif defined(IC_8202L)//use 4 gpio scan 16 key
#define MAX_KEY 16
#define CONTINUOUS_PRESS_ACTION

#ifdef CONTINUOUS_PRESS_ACTION
#define LONG_PRESS_KEY_TIME 5
#define OPEN_STATE_LONG_PRESS_KEY_TIME 3  
#endif

const BYTE gpio[4]={6,7,8,11};/*pin3->gpio6,pin4->gpio7,pin1->gpio4,pin11->gpio11*/	
void check_portable_key(void)
{
    int i,j,keydata;
    int is_gnd_key_data;
	int press_flag=0;
	
	static int is_gnd_key_press;
	static BYTE keyprev ;
    static BYTE key_press_times;
    static BYTE long_press_flag; 
    regs0->sft_cfg4 &= ~(0x1<<5);//set pin 3 as gpio6
    regs0->sft_cfg13 &= ~(0x1<<6);// set pin 1 as gpio4  
	GPIO_M_SET(6,1);
	GPIO_M_SET(7,1);
	GPIO_M_SET(8,1);
	GPIO_M_SET(11,1);	
/* scan gnd key */
	for(i=0;i<4;i++)
	{
		GPIO_E_SET(gpio[i],0);		//set as input	
	}
	for(i=0;i<4;i++)
	{		
		is_gnd_key_data=GPIO_I_GET(gpio[i]);
		if(!is_gnd_key_data)
		{
			is_gnd_key_press=1;
			keydata=i+1;
			press_flag=1;
			goto KeyProcess;								
		}
		else
			is_gnd_key_press=0;
	}
//scan othter key
	if(!is_gnd_key_press)//
	{
		for(i=0;i<4;i++)
		{				
			if(i==0)
			{
				GPIO_E_SET(gpio[1],0);
				GPIO_E_SET(gpio[2],0);
				GPIO_E_SET(gpio[3],0);
	
				GPIO_E_SET(gpio[i],1);
				GPIO_O_SET(gpio[i],0);
				for(j=i+1;j<4;j++)
            	{
            		GPIO_E_SET(gpio[j],0);
            		keydata=GPIO_I_GET(gpio[j]);
            		if(!keydata)
            		{
            			press_flag=1;
            			keydata=j+4;//need to debug
            			goto KeyProcess;            				
            		}
				}	
			}								
			if(i==1)
			{
				GPIO_E_SET(gpio[0],0);
				GPIO_E_SET(gpio[2],0);
				GPIO_E_SET(gpio[3],0);
					
				GPIO_E_SET(gpio[i],1);
				GPIO_O_SET(gpio[i],0);
				for(j=i+1;j<4;j++)
            	{
            		GPIO_E_SET(gpio[j],0);
            		keydata=GPIO_I_GET(gpio[j]);
            		if(!keydata)
            		{
            			press_flag=1;
            			keydata=j+7;
            			goto KeyProcess;
            		}            			
				 }
				GPIO_E_SET(gpio[0],0);
				keydata=GPIO_I_GET(gpio[0]);
            	if(!keydata)
            	{
            		press_flag=1;
            		keydata=8;
            		goto KeyProcess;
            	}
			}
			if(i==2)
			{
				GPIO_E_SET(gpio[0],0);
				GPIO_E_SET(gpio[1],0);
				GPIO_E_SET(gpio[3],0);
					
				GPIO_E_SET(gpio[i],1);
				GPIO_O_SET(gpio[i],0);
											
				for(j=0;j<i;j++)
            	{
            		GPIO_E_SET(gpio[j],0);
            		keydata=GPIO_I_GET(gpio[j]);
            		if(!keydata)
            		{
            			press_flag=1;
            			keydata=j+11;
            			goto KeyProcess;
            		}
				 }
					GPIO_E_SET(gpio[3],0);
					keydata=GPIO_I_GET(gpio[3]);
            		if(!keydata)
            		{
            			press_flag=1;
            			keydata=13;
            			goto KeyProcess;
            		}		
				}
			if(i==3)
			{
				GPIO_E_SET(gpio[0],0);
				GPIO_E_SET(gpio[1],0);
				GPIO_E_SET(gpio[2],0);
					
				GPIO_E_SET(gpio[i],1);
				GPIO_O_SET(gpio[i],0);
				for(j=0;j<i;j++)
            	{
            		GPIO_E_SET(gpio[j],0);
            		keydata=GPIO_I_GET(gpio[j]);
            		if(!keydata)
            		{
            			press_flag=1;
            			keydata=j+14;
            			goto KeyProcess;
            		}
				}						
			}
		}
	}	 		
KeyProcess:
if(press_flag)
{                 
	if(keyprev != keydata)
	{//first press key!                         
		keyprev = keydata;
		printf_w("%d key press at the first time\n",keydata);
	}
	else 
	{//count the key press times
		#ifdef CONTINUOUS_PRESS_ACTION 
		key_press_times++;
                        
		 if((key_press_times>=LONG_PRESS_KEY_TIME)
                ||((play_state==VCD_STATE_OPEN)&&(key_press_times>=OPEN_STATE_LONG_PRESS_KEY_TIME))
           )
		{           
			if((vfd_keycode[keyprev - 1]!=IRC_NULL) && (keyprev<=MAX_KEY))              
            call_ir_func(vfd_keycode[keyprev - 1]);   
                      
                key_press_times = 0;
                long_press_flag = 1;  

⌨️ 快捷键说明

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