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

📄 key_io_portable.c

📁 mp3 player program please read carefully.
💻 C
📖 第 1 页 / 共 3 页
字号:
	GPIO_E_SET(55,0);  //input	
	GPIO_M_SET(56,1); 
	GPIO_E_SET(56,0);  //input		
	GPIO_M_SET(57,1); 
	GPIO_E_SET(57,0);  //input
	GPIO_M_SET(29,1); 
	GPIO_E_SET(29,0);  //input
	/////////for output
    GPIO_M_SET(59,1); 
	GPIO_E_SET(59,1);  //output	
	GPIO_M_SET(21,1); 
	GPIO_E_SET(21,1);  //output		
	GPIO_M_SET(22,1); 
	GPIO_E_SET(22,1);  //output
	GPIO_M_SET(23,1); 
	GPIO_E_SET(23,1);  //output
    #else
    regs0->sft_cfg1&= ~((0x1)<<3); //GPIO 16 PIN66    
    GPIO_M_SET(16,1);//GPIO 16 PIN66
    #endif
	for(i=0;i<4;i++)
	{
		for(j=0;j<4;j++)
                GPIO_O_SET(gpio[j],1);
	   
	    GPIO_O_SET(gpio[i],0);
	    #ifdef IO_CHECK_GET_DELAY
	    for(delay_cnt=0;delay_cnt<200;delay_cnt++)
                ;
	    #endif
  		for(j=4;j<8;j++)
  		{  		 
        	keydata=GPIO_I_GET(gpio[j]);    		
    		if(keydata==0)
    		{    	       	  
    			keydata=i*4+(j-4)+1;	
    			printf_w("key:%d i:%d j:%d.........\n",keydata,i,j);
    			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; 	
#else    
    BYTE i,j,keydata;
    static BYTE column_dot = 4;
    static BYTE row_dot = 0;
    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_oe[3]&= 0xffcf;     //jhuang org 011f
    #ifdef ALCO_PV1950
    regs0->gpio_master[1]|= 0x0004;    //GPIO 18
    regs0->gpio_master[3]|= 0x01de;    //GPIO 49,50,51,52,54,55,56    
	regs0->gpio_oe[1]|= 0x0004;        //GPIO 18 output
    regs0->gpio_oe[3]|= 0x01c0;		   //GPIO 54,55,56 output	
    regs0->gpio_oe[3]&= ~(0x001e);     //GPIO 49,50,51,52 input
    #endif
    
    #ifdef ALCO_PVS177W
    regs0->gpio_master[0]|= 0xf000;    //GPIO 12,13,14,15
    regs0->gpio_master[1]|= 0x00e1;    //GPIO 16,21,22,23
    regs0->gpio_oe[0]&= ~(0xf000);     //GPIO 12,13,14,15 input
    regs0->gpio_oe[1]|= 0x00e1;        //GPIO 16,21,22,23 output
    #endif
    
    for(i=0;i<4;i++)
    {
        for(j=0;j<4;j++)
          GPIO_O_SET(gpio[j],1);
          
        GPIO_O_SET(gpio[i],0);
    
        #ifdef IO_CHECK_GET_DELAY
	    for(delay_cnt=0;delay_cnt<50;delay_cnt++)
	        ;
	    #endif
	        
        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
                    #ifndef CONTINUOUS_PRESS_ACTION 
                    if((keydata == 2) || (keydata == 6))
                    #endif
                    {
                        key_press_times++;
                        
                        if((key_press_times>=LONG_PRESS_KEY_TIME)
                            #ifdef CONTINUOUS_PRESS_ACTION
                            ||((play_state==VCD_STATE_OPEN)&&(key_press_times>=OPEN_STATE_LONG_PRESS_KEY_TIME))
                            #endif
                           )
                        
                        {
                          if(keyprev == 2)
                          {
                            if(Is_JPEG_STATE() && (pFsJpeg->gbfsSlide))
                                call_ir_func(IRC_PREV); 
                          else
                                call_ir_func(IRC_BACKWARD); 
                          }
                          else if(keyprev == 6)
                          {
                            if((cd_type_loaded==CDROM) && Is_JPEG_STATE() && (pFsJpeg->gbfsSlide))
                                call_ir_func(IRC_NEXT); 
                            else
                                call_ir_func(IRC_FORWARD);
                          }
                          #ifdef CONTINUOUS_PRESS_ACTION
                          else
                          {
                              #ifdef NEED_DIFF_IR_PANEL_KEY
                              if(!panel_key_flag)
                                panel_key_flag |= (0x01<<0);
                              #endif
                              
                              call_ir_func(vfd_keycode[keyprev - 1]);  
                              
                              #ifdef NEED_DIFF_IR_PANEL_KEY
                              /* //04/12/21 do not need pause/setup key
                              #ifdef USE_REVERSE_IO_KEY 
                              if((keyprev!=15) && (play_state!=VCD_STATE_STOP) && (play_state!=VCD_STATE_OPEN) && (play_state!=VCD_STATE_IDLE))
                              #else
                              if((keyprev!=9) && (play_state!=VCD_STATE_STOP) && (play_state!=VCD_STATE_OPEN) && (play_state!=VCD_STATE_IDLE))
                              #endif
                              */
                              panel_key_flag = 0;
                              
                              #endif
                          }
                          #endif
                            
                          key_press_times = 0;
                          long_press_flag = 1;  
                        }
                        
                        #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  
                                  
                    if(keyprev == 2)
                        call_ir_func(IRC_BACKWARD); 
                    else
                        call_ir_func(IRC_FORWARD);
              }
              else
              */
              if(!long_press_flag)
              {//short key press
                  #ifdef NEED_DIFF_IR_PANEL_KEY
                  if(!panel_key_flag)
                     panel_key_flag |= (0x01<<0);
                  #endif
                  
                  call_ir_func(vfd_keycode[keyprev - 1]);
                  
                  #ifdef NEED_DIFF_IR_PANEL_KEY
                  
                  #ifdef USE_REVERSE_IO_KEY 
                  if((keyprev!=15) && (play_state!=VCD_STATE_STOP) && (play_state!=VCD_STATE_OPEN) && (play_state!=VCD_STATE_IDLE))
                  #else
                  if((keyprev!=9) && (play_state!=VCD_STATE_STOP) && (play_state!=VCD_STATE_OPEN) && (play_state!=VCD_STATE_IDLE))
                  #endif
                  panel_key_flag = 0;
                  #endif
                  
                  #ifdef PORTABLE_IOKEY_DEBUG
                  printf("call short key:%d\n",keyprev);
                  #endif
              }
              
              key_press_times = 0;
              keyprev = 0;
              column_dot = 4;
              row_dot = 0;
              long_press_flag = 0;
           } 
        }       
    }
#endif
#else
    BYTE i,j,k,keydata,press_key=0;
    static BYTE keyprev=0;
	
	regs0->gpio_master[1]|= 0x0004;    //GPIO 18
    regs0->gpio_master[3]|= 0x01de;    //GPIO 49,50,51,52,54,55,56    
	#ifdef USE_REVERSE_IO_KEY 
	regs0->gpio_oe[1]&= ~(0x00040;        //GPIO 18 input
    regs0->gpio_oe[3]&= ~(0x01c0);		   //GPIO 54,55,56 input	
    regs0->gpio_oe[3]|= (0x001e);     //GPIO 49,50,51,52 output
    #else
	regs0->gpio_oe[1]|= 0x0004;        //GPIO 18 output
    regs0->gpio_oe[3]|= 0x01c0;		   //GPIO 54,55,56 output	
    regs0->gpio_oe[3]&= ~(0x001e);     //GPIO 49,50,51,52 inout
    #endif
    
	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;    			
    			//printf("key:%d i:%d k:%d.........\n",keydata,i,k);
    			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 //#ifdef PDVD_USE_IO_SCAN_KEY
///////////////////////////shenyj add for alco 8712
#ifdef ALCO_PVS8712
const BYTE gpio2[4]={12,13,14,15};

void check_portable_key2(void)
{

    #ifdef IO_CHECK_GET_DELAY
	UINT16 delay_cnt;
	#endif
	
    BYTE i,j,keydata,press_flag;
    static BYTE keyprev = 0;
    static BYTE key_press_times = 0 ;
    static BYTE long_press_flag = 0;    
    regs0->gpio_master[0]|= 0x0f00;    //GPIO 12,13,14,15 
    for(i=0;i<4;i++)
    {
        press_flag = 0;         
        //current detected GPIO is set input
        GPIO_E_SET(gpio2[i],0);
        keydata = 1;        
        //others GPIOs output 1        
        for(j=0;j<4;j++)
        {
            if(j!=i)
            {
                GPIO_E_SET(gpio2[j],1);
                GPIO_O_SET(gpio2[j],1);
            }   
        }      
        if(i == 0)
        {  
            for(j=i;j<4;j++)
            {
                 if(j>i)
                GPIO_O_SET(gpio2[j],0);            
            #ifdef IO_CHECK_GET_DELAY
            for(delay_cnt=0;delay_cnt<MAX_DELAY;delay_cnt++)
                ;
	        #endif	        
                 keydata=GPIO_I_GET(gpio2[i]);                 
                 if(!keydata)
                 {
                    press_flag = 1;
                    keydata = i+j+1;
                    goto KeyProcess;
                 }
            }           
        }
        else if(i == 1)
        {    
            for(j=i;j<4;j++)
            {
                 if(j>i)
                GPIO_O_SET(gpio2[j],0);            
            #ifdef IO_CHECK_GET_DELAY
            for(delay_cnt=0;delay_cnt<MAX_DELAY;delay_cnt++)
                ;
	        #endif
	        
                 keydata=GPIO_I_GET(gpio2[i]);
                 
                 if(!keydata)
                 {
                    press_flag = 1;
                    keydata = 6+j;
                    goto KeyProcess;
                 }
            }
            
        }
        else if(i == 2)
        {                
	        for(j=i;j<4;j++)
            {
                 if(j>i)
                GPIO_O_SET(gpio2[j],0);
            
            #ifdef IO_CHECK_GET_DELAY
            for(delay_cnt=0;delay_cnt<MAX_DELAY;delay_cnt++)
                ;
	        #endif	        
                 keydata=GPIO_I_GET(gpio2[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(gpio2[i]);                 
            if(!keydata)
            {
                press_flag = 1;
                keydata =10;
                goto KeyProcess;
            }
        }
    }

KeyProcess:
    if(press_flag)
    {                   
        if(keyprev != keydata)
        {//first press key!                         
            keyprev = keydata;
            #ifdef PORTABLE_IOKEY_DEBUG
            printf_w("%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_keycode2[keyprev - 1]!=IRC_NULL) && (keyprev<=MAX_KEY))              
                    call_ir_func(vfd_keycode2[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_keycode2[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_keycode2[keyprev - 1]);
            }
            
        }
reset_key_para:
        keyprev = 0;
        press_flag = 0;
        long_press_flag = 0;
        key_press_times = 0;
    }   
}
#endif
/////shenyj move here for alco 2006/03/23//////////////////
#if defined(SUPPORT_DVD_POWER_ONOFF)&&defined(ALCO_PORTABLE_DVD_8202D_DVB)
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
#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
/////shenyj move here for alco 2006/03/23//////////////////

⌨️ 快捷键说明

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