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

📄 vfd_portable.c

📁 mp3 player program please read carefully.
💻 C
📖 第 1 页 / 共 3 页
字号:
		}
         #endif //end #ifdef CONTINUOUS_PRESS_ACTION
	}
}  
else
{      
	#ifdef CONTINUOUS_PRESS_ACTION      
	if(keyprev && !long_press_flag)
	{
		if((vfd_keycode[keyprev - 1]!=IRC_NULL) && (keyprev<=MAX_KEY))
		{
			if ((rep_ab_mode==REPEAT_FIND_B) && 
				(sys_cmd==(CMD_FUNC|CMD_FUNC_REPAB)) && 
				(cd_type_loaded != CDROM)) // Robert 2004/02/06
			{
				//printf_w("!!!!waiting for navigator\n");
				goto reset_key_para;
			}
			call_ir_func(vfd_keycode[keyprev-1]);
		}
            
	}
	#endif
reset_key_para:
	keyprev = 0;
	press_flag = 0;
	long_press_flag = 0;
	key_press_times = 0;
} 
}
#elif defined(IC_8202R)//use 4 gpio scan 16 key shenyj add 2007-7-5 17:44
#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]={16,17,18,22};/*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->gpio_first[0]|= (0x1);    //Set Pin1 as GPIO16
    regs0->gpio_first[0]|= (0x1<<1);    //Set Pin2 as GPIO17
    regs0->gpio_first[0]|= (0x1<<2);    //Set Pin3 as GPIO18
    regs0->gpio_first[0]|= (0x1<<6);    //Set Pin22 as GPIO22
    
    GPIO_M_SET(16,1);
    GPIO_E_SET(16,0);
    GPIO_M_SET(17,1);
    GPIO_E_SET(17,0);    
    GPIO_M_SET(18,1);
    GPIO_E_SET(18,0);
    GPIO_M_SET(22,1);
    GPIO_E_SET(22,0);
    
/* 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;  
		}
         #endif //end #ifdef CONTINUOUS_PRESS_ACTION
	}
}  
else
{      
	#ifdef CONTINUOUS_PRESS_ACTION      
	if(keyprev && !long_press_flag)
	{
		if((vfd_keycode[keyprev - 1]!=IRC_NULL) && (keyprev<=MAX_KEY))
		{
			if ((rep_ab_mode==REPEAT_FIND_B) && 
				(sys_cmd==(CMD_FUNC|CMD_FUNC_REPAB)) && 
				(cd_type_loaded != CDROM)) // Robert 2004/02/06
			{
				//printf_w("!!!!waiting for navigator\n");
				goto reset_key_para;
			}
			call_ir_func(vfd_keycode[keyprev-1]);
		}
            
	}
	#endif
reset_key_para:
	keyprev = 0;
	press_flag = 0;
	long_press_flag = 0;
	key_press_times = 0;
} 
}
#else //#ifdef APEX_PORTABLE_DVD 
   
const BYTE gpio[8]={46,47,48,49,50,51,52,18};
#ifdef USE_COMBINED_KEY
#define LONG_PRESS_KEY_TIME 12  
#endif
    
//#define PORTABLE_IOKEY_DEBUG
        
void check_portable_key(void)
{
#ifdef USE_COMBINED_KEY
    BYTE i,j,keydata;
    static BYTE column_dot = 4;
    static BYTE row_dot = 0;
    static BYTE keyprev = 0;
    static BYTE key_press_times = 0 ;

    #ifdef HOLD_KEY_DETECT
    if(hold_state)
        return;
    #endif
	
    regs0->gpio_oe[3]&= 0xffcf;     //jhuang org 011f
    
    for(i=0;i<4;i++)
    {
        for(j=0;j<4;j++)
          GPIO_O_SET(gpio[j],1);
          
        GPIO_O_SET(gpio[i],0);
    
        for(j=4;j<8;j++)
        {
            keydata=GPIO_I_GET(gpio[j]);
            
            if(keydata == 0)
            {//have key pressing                  
                keydata=i*4+(j-4)+1;
                column_dot = j;
                row_dot = i;
                
                if(keyprev != keydata)
                {//first press key!                         
                    keyprev = keydata;
                    #ifdef PORTABLE_IOKEY_DEBUG
                    printf("%d key press at the first time\n",keydata);
                    #endif
                }
                else 
                {//count the key press times
                    #ifdef D02_9_10INCH
                    if((keydata == 8) || (keydata == 10))
                    #else 
                    if((keydata == 4) || (keydata == 6)
                        #ifdef D02_A_10INCH
                        ||(keydata == 10) || (keydata == 16)
                        #endif
                      )
                    #endif
                    {
                        key_press_times++;
                        #ifdef PORTABLE_IOKEY_DEBUG
                        printf("key press times:---->%d\n",key_press_times);
                        #endif
                    }
                }           
                break;
            }
            else if((j == column_dot) && (i == row_dot) && (keyprev != 0))
            {//key is released
                if(key_press_times >= LONG_PRESS_KEY_TIME)
                {//long press key 
                    #ifdef PORTABLE_IOKEY_DEBUG
                    printf("call long key:%d!press %d times\n",keyprev,key_press_times);
                    #endif  
                 
                    #ifdef D02_9_10INCH
                    if(keyprev == 8)
                    #else
                    if(keyprev == 4)
                    #endif
                    {
                        #ifdef D02_A_10INCH
                        call_ir_func(IRC_LEFT); 
                        #else
                        call_ir_func(IRC_PREV); 
                        #endif
                    }
                    else
                    {
                        #ifdef D02_A_10INCH
                        if(keyprev == 10)
                            call_ir_func(IRC_DOWN);
                        else if (keyprev == 16)
                            call_ir_func(IRC_UP); 
                        else
                            call_ir_func(IRC_RIGHT);
                        #else
                        call_ir_func(IRC_NEXT);
                        #endif
                    }
              }
              else
              {//short key press
                  call_ir_func(vfd_keycode[keyprev - 1]);
                  #ifdef PORTABLE_IOKEY_DEBUG
                  printf("call short key:%d\n",keyprev);
                  #endif
              }
              
              key_press_times = 0;
              keyprev = 0;
              column_dot = 4;
              row_dot = 0;
           } 
        }       
    }
#else
    BYTE i,j,k,keydata,press_key=0;
    static BYTE keyprev=0;
	
    #ifdef HOLD_KEY_DETECT
    if(hold_state)
        return;
    #endif
    
    regs0->gpio_oe[3]&= 0xffcf;     //jhuang org 011f
	
	for(i=0;i<4;i++)
	{
		for(j=0;j<4;j++)
			GPIO_O_SET(gpio[j],1);
	    GPIO_O_SET(gpio[i],0);
	
  		for(k=4;k<8;k++)
  		{  		 
        	keydata=GPIO_I_GET(gpio[k]);
    		if(keydata==0)
    		{    	       	  
    			press_key=1;
    			keydata=i*4+(k-4)+1;    			
    			if(keyprev!=keydata)
    			{    			  			
    			    keyprev=keydata;
    			    call_ir_func(vfd_keycode[keydata - 1]);
    			    printf("key %d SW %d,%d.\n",keydata,i,k-4);
    			}  
    			break;
    		}    		    		
  		}  		
  	}
  	if(press_key==0) keyprev=0;
#endif //end #ifdef USE_COMBINED_KEY

}
#endif//#else //#ifdef APEX_PORTABLE_DVD 
#endif //#ifdef PDVD_USE_IO_SCAN_KEY


//Jack added 05/11/29 for PollingSpecifiedKeys() use when in MP4 file init state.
UINT16 GetPanelKeyCode(void)
{//panel keys check...... pls add,because different customers have different key-detect array!!!
    UINT16 iRet = IR_CODE_MAX_NUM;
    
    #if defined(MUSTEK_K100D_MODEL)
    {
        GPIO_M_SET(POWER_KEY_GPIO,1);
        GPIO_E_SET(POWER_KEY_GPIO,0);
        
        if(GPIO_I_GET(POWER_KEY_GPIO))
            iRet = IRC_POWER;
    }
    
    #endif
        
    return iRet;
}

UINT16 get_portable_panel_key(void)
{
    UINT16 iRet = IR_CODE_MAX_NUM;
        
    BYTE temp __UNUSED =0;
    
    //Cover SW check......
    #ifdef CHECK_PORTABLE_OPCLSW
    
    #if defined(MUSTEK_K100D_MODEL)
    {
        
    }
    #elif 0//defined()
    {
        
    }
    #else
    {
        #ifdef SUNPLUS_8202P_DEMOBOARD
        regs0->sft_cfg4 &= ~((0x03)<<2);    //Enable GPIO2,3 For COVER & TFT SW
        #endif
    
        GPIO_M_SET(PDVD_OPCLSW_GPIO,1);
        GPIO_O_SET(PDVD_OPCLSW_GPIO,0);
    
        temp=GPIO_I_GET(PDVD_OPCLSW_GPIO);
    
        if(temp)
        {
            if(!CDOpened())
                iRet = IRC_EJECT;
        
        }
    }
    #endif
    
    #endif
    
    //panel keys check......
    if(iRet != IRC_EJECT)
        iRet = GetPanelKeyCode();
    
    return iRet;
}

#if defined(CHECK_PORTABLE_OPCLSW)/*||defined(TOP_DOOR_LOADER)*/
BYTE  check_eject_sw(void);
BYTE  check_eject_sw(void)
{
      return  GPIO_I_GET(PDVD_OPCLSW_GPIO);
}
#endif

#ifdef  SUPPORT_DVD_POWER_ONOFF
void  dvd_power_onoff(BYTE  onoff)
{
    GPIO_M_SET(DVD_POWER_SW_GPIO,1);  
    GPIO_E_SET(DVD_POWER_SW_GPIO,1);

	if(onoff == TURN_ON) 
	{              
        GPIO_O_SET(DVD_POWER_SW_GPIO,1);  //tiany: turn on MOTOR power 
        // printf_w("turn off  MOTOR power   111111       turn on  MOTOR power   \n");//20051207 tiang add 
    }
	else
	{
        GPIO_O_SET(DVD_POWER_SW_GPIO,0);  //tiany: turn off  MOTOR power 
	    //  printf_w("turn off  MOTOR power     22222222     turn off  MOTOR power   \n");//20051207 tiang add 
	}
}            
#endif //endif=>#ifdef  SUPPORT_DVD_POWER_ONOFF

⌨️ 快捷键说明

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