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

📄 key_io_portable.c

📁 mp3 player program please read carefully.
💻 C
📖 第 1 页 / 共 3 页
字号:
const BYTE gpio[4]={21,22,23,72};
#define MAX_DELAY   120
#define MAX_KEY     10
#endif

#ifdef ALCO_PVS8712
//const BYTE gpio[7]={14,13,12,21,22,23,72};
const BYTE gpio[5]={16,72,21,22,23};
#define MAX_DELAY   120
#define MAX_KEY     10
#endif

#ifdef ALCO_PVS1090
const BYTE gpio[8]={16,21,22,23,12,13,14,15};
#define MAX_DELAY   120
#define MAX_KEY     16
#endif

#ifdef ALCO_PVS1090_AVIN
const BYTE gpio[8]={59,21,22,23,55,56,57,29};
#define MAX_DELAY   120
#define MAX_KEY     16
#endif

#ifdef USE_COMBINED_KEY
#define LONG_PRESS_KEY_TIME 8  
#ifdef CONTINUOUS_PRESS_ACTION
#define OPEN_STATE_LONG_PRESS_KEY_TIME 4  
#endif
#endif
    
//#define PORTABLE_IOKEY_DEBUG
UINT16 get_portable_panel_key(void)
{
    UINT16 iRet=0;
    BYTE temp=0;
    #ifdef IO_CHECK_GET_DELAY
    BYTE delay_cnt=0;
    #endif
    
    
    #ifdef CHECK_PORTABLE_OPCLSW
    
    #ifdef PORTABLE_8202D
    regs0->sft_cfg4&= ~((0x1)<<6);//added 05/08/23     
    #endif
    GPIO_M_SET(PDVD_OPCLSW_GPIO,1);
	GPIO_E_SET(PDVD_OPCLSW_GPIO,0); //input
	    
    #ifdef IO_CHECK_GET_DELAY
	for(delay_cnt=0;delay_cnt<20;delay_cnt++)
	    ;
	#endif
	     
	temp=GPIO_I_GET(PDVD_OPCLSW_GPIO);
        
    if(temp)
        iRet=IRC_EJECT;
        
    #endif //end #ifdef CHECK_PORTABLE_OPCLSW
        
    return iRet;
}
        
void check_portable_key(void)
{
    #ifdef IO_CHECK_GET_DELAY
	UINT16 delay_cnt;
	#endif
	
    #ifdef VIDEO_IN_CONTROL
    if(AVin_step)
      return;
    #endif
    
    
#ifdef USE_COMBINED_KEY
#ifdef ALCO_PVS19251
    BYTE i,j,keydata,press_flag;
    static BYTE keyprev = 0;
    static BYTE key_press_times = 0 ;
    static BYTE long_press_flag = 0;
    
    #ifdef HOLD_KEY_DETECT
    if(hold_state)
        return;
    #endif

    regs0->gpio_master[1]|= 0x00e1;    //GPIO 16,21,22,23
    
    for(i=0;i<3;i++)
    {
        press_flag = 0; 
        
        if(i == 0)
        {    
            for(j=0;j<4;j++)
                GPIO_E_SET(gpio[j],0);
            
            #ifdef IO_CHECK_GET_DELAY
                for(delay_cnt=0;delay_cnt<MAX_DELAY;delay_cnt++)
                    ;
	        #endif
	    
            for(j=0;j<4;j++)
            {
                 keydata=GPIO_I_GET(gpio[j]);
                 
                 if(!keydata)
                 {
                    press_flag = 1;
                    goto KeyProcess;
                 }
            }
            
        }
        else if(i == 1)
        {    
            //two in
            for(j=0;j<2;j++)
                GPIO_E_SET(gpio[j],0);
            
            //two out
            for(;j<4;j++)
                GPIO_E_SET(gpio[j],1);
            
            GPIO_O_SET(gpio[j-2],0);    
            GPIO_O_SET(gpio[j-1],1);
            
            
            #ifdef IO_CHECK_GET_DELAY
                for(delay_cnt=0;delay_cnt<MAX_DELAY;delay_cnt++)
                    ;
	        #endif
	    
            for(j=0;j<2;j++)
            {
                 keydata=GPIO_I_GET(gpio[j]);
                 
                 if(!keydata)
                 {
                    press_flag = 1;
                    goto KeyProcess;
                 }
            }
            
        }
        else if(i == 2)
        {    
            //ont in
            GPIO_E_SET(gpio[0],0);
            
            //three out
            for(j=1;j<4;j++)
                GPIO_E_SET(gpio[j],1);
            
            GPIO_O_SET(gpio[j-3],0);
            GPIO_O_SET(gpio[j-2],1);    
            GPIO_O_SET(gpio[j-1],1);
            
            
            #ifdef IO_CHECK_GET_DELAY
                for(delay_cnt=0;delay_cnt<MAX_DELAY;delay_cnt++)
                    ;
	        #endif
	        
	        j = 0;
	        
	        keydata=GPIO_I_GET(gpio[j]);
                 
            if(!keydata)
            {
                press_flag = 1;
                goto KeyProcess;
            }
            
        }
    }

KeyProcess:
    if(press_flag)
    {
        keydata = 4*i+j+1;
                   
        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 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;  
            }
                       
            #ifdef PORTABLE_IOKEY_DEBUG
            printf("key press times:---->%d\n",key_press_times);
            #endif
            
            #endif //end #ifdef CONTINUOUS_PRESS_ACTION
        }
    }  
    else
    {           
        if(keyprev && !long_press_flag)
        {
            if((vfd_keycode[keyprev - 1]!=IRC_NULL) && (keyprev<=MAX_KEY))
                {
                    //shenyj add for alco repeat_ab issue 1104
                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]);
            }
            
        }

        //printf_w("reset key para............\n");
reset_key_para:
        keyprev = 0;
        press_flag = 0;
        long_press_flag = 0;
        key_press_times = 0;
    } 
    
#elif defined(ALCO_PVS1262)
    BYTE i,j,keydata,press_flag;
    static BYTE keyprev = 0;
    static BYTE key_press_times = 0 ;
    static BYTE long_press_flag = 0;
    #ifdef PORTABLE_8202D
    regs0->sdc_data_cnt[6][0] |= (0x0e);
    #endif
    
    regs0->gpio_master[1]|= 0x00e0;    //GPIO 21,22,23
    GPIO_M_SET(72,1);//GPIO 72 
    
    for(i=0;i<4;i++)
    {
        press_flag = 0; 
        
        //current detected GPIO is set input
        GPIO_E_SET(gpio[i],0);
        keydata = 1;
        
        //others GPIOs output 1
        
        for(j=0;j<4;j++)
        {
            if(j!=i)
            {
                GPIO_E_SET(gpio[j],1);
                GPIO_O_SET(gpio[j],1);
            }   
        }
        
        if(i == 0)
        {                   
            GPIO_O_SET(gpio[j-1],0);
            
            #ifdef IO_CHECK_GET_DELAY
            for(delay_cnt=0;delay_cnt<MAX_DELAY;delay_cnt++)
                ;
	        #endif
            
            keydata=GPIO_I_GET(gpio[i]);
                 
            if(!keydata)
            {
                press_flag = 1;
                keydata = 1;
                goto KeyProcess;
            }
        }
        else if(i == 1)
        {    
            for(j=i;j<4;j++)
            {
                 if(j>i)
                GPIO_O_SET(gpio[j],0);
            
            #ifdef IO_CHECK_GET_DELAY
            for(delay_cnt=0;delay_cnt<MAX_DELAY;delay_cnt++)
                ;
	        #endif
	        
                 keydata=GPIO_I_GET(gpio[i]);
                 
                 if(!keydata)
                 {
                    press_flag = 1;
                    keydata = i+(j-1)+1;
                    goto KeyProcess;
                 }
            }
            
        }
        else if(i == 2)
        {                
	        for(j=i;j<4;j++)
            {
                 if(j>i)
                GPIO_O_SET(gpio[j],0);
            
            #ifdef IO_CHECK_GET_DELAY
            for(delay_cnt=0;delay_cnt<MAX_DELAY;delay_cnt++)
                ;
	        #endif
	        
                 keydata=GPIO_I_GET(gpio[i]);
                 
                 if(!keydata)
                 {
                    press_flag = 1;
                    keydata = i+j+1;
                    goto KeyProcess;
                 }
            }
        }
        else
        {                
            #ifdef IO_CHECK_GET_DELAY
            for(delay_cnt=0;delay_cnt<MAX_DELAY;delay_cnt++)
                ;
	        #endif
	        
	        keydata=1;
	             
            keydata=GPIO_I_GET(gpio[i]);
                 
            if(!keydata)
            {
                press_flag = 1;
                keydata = 7;
                goto KeyProcess;
            }
        }
    }

KeyProcess:
    if(press_flag)
    {                   
        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 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))
              )
            {        
                #ifdef PANEL_NEXT_FOWARD_IN_ONE_KEY
                if(keyprev == 2)
                {
                    call_ir_func(IRC_FORWARD);
                }
                else if(keyprev == 7)
                {
                    //printf_w(".............\n");
                    call_ir_func(IRC_BACKWARD);
                }
                else 
                #endif
                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;  
            }
                       
            #ifdef PORTABLE_IOKEY_DEBUG
            printf("key press times:---->%d\n",key_press_times);
            #endif
            
            #endif //end #ifdef CONTINUOUS_PRESS_ACTION
        }
    }  
    else
    {           
        if(keyprev && !long_press_flag)
        {
            if((vfd_keycode[keyprev - 1]!=IRC_NULL) && (keyprev<=MAX_KEY))
            {
                //shenyj add for alco repeat_ab issue 1104
                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]);
            }    
            
        }

        //printf_w("reset key para............\n");
reset_key_para:
        keyprev = 0;
        press_flag = 0;
        long_press_flag = 0;
        key_press_times = 0;
    } 
     
#elif defined(ALCO_PVS8712)
    BYTE i,j,k,keydata,press_key=0;
    static BYTE keyprev=0;  
    regs0->gpio_master[1]|= 0x00e0;    //GPIO 21,22,23
    regs0->sdc_data_cnt[6][0] |= (0x0e);
    GPIO_M_SET(72,1);//GPIO 72 
    regs0->sft_cfg1&= ~((0x1)<<3); //GPIO 16 PIN66    
    GPIO_M_SET(16,1);//GPIO 16 PIN66
	for(i=0;i<2;i++)
	{
		for(j=0;j<2;j++)
                GPIO_O_SET(gpio[j],1);
	   
	    GPIO_O_SET(gpio[i],0);
	    #if 0//def IO_CHECK_GET_DELAY
	    for(delay_cnt=0;delay_cnt<200;delay_cnt++)
                ;
	        #endif
  		for(k=2;k<5;k++)
  		{  		 
        	keydata=GPIO_I_GET(gpio[k]);
    		
    		if(keydata==0)
    		{    	       	  
    			press_key=1;
    			if(i==0)//shenyj modify for alco 8712 0928
    			keydata=k-1;
    			if(i==1)    	
    			keydata=k+2;	
    			//printf_w("key:%d i:%d k:%d.........\n",keydata,i,k);
    			if(keyprev!=keydata)
    			{    			  			
    			    keyprev=keydata;
    			    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[keydata - 1]);
    			    //printf("key %d SW %d,%d.\n",keydata,i,k-4);
    			}  
    			break;
    		}  		    		
  		}  		
reset_key_para:
    press_key=0;
    keyprev=0;	
  	}
  	if(press_key==0) keyprev=0;
  	
#elif defined(ALCO_PVS1090)||defined(ALCO_PVS1090_AVIN)
    BYTE i,j,keydata,press_key=0;
    static BYTE keyprev=0;  
    regs0->gpio_master[1]|= 0x00e0;    //GPIO 21,22,23
    #ifdef ALCO_PVS1090_AVIN
    #if !defined(ARCHT16_USE_64M_ESP)//shenyj add for alco 2006/02/28
    regs0->sft_cfg0&= ~((0x1)<<6); //enalbe gpio29 pin125
    #endif
    regs0->sft_cfg3&= ~((0x4b)<<3);//enable gpio55,56,57,59 pin175,176,177,180
    //////////for input
    GPIO_M_SET(55,1); 

⌨️ 快捷键说明

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