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

📄 key_io_portable.c

📁 mp3 player program please read carefully.
💻 C
📖 第 1 页 / 共 3 页
字号:

#ifdef ALCO_PVS177W
//#include "tvif.h"
#endif

#if defined(TFT_ONOFF_CONTROL)
#if defined(ALCO_PV1950)||defined(ALCO_PVS19251)
#define IS_VIDEO_INPUT()  (GPIO_I_GET(INT_EXT_VIDEO_GPIO1)+GPIO_I_GET(INT_EXT_VIDEO_GPIO2))
#elif defined(ALCO_PVS177W)||defined(ALCO_PVS1090_AVIN)//shenyj add for alco177w
#define IS_VIDEO_INPUT()  (GPIO_I_GET(INT_EXT_VIDEO_GPIO))
#endif
#endif

#ifdef DISPLAY_REMAIN_TIME
extern int display_and_time;
extern BYTE display_flag;
#endif
#ifdef ALCO_PORTABLE
extern void ForceClearOsdMsg();
#endif
#define DELAY_COUNT     25
#define TRAYIN_START1   50  //added 04/12/31
#define TRAYIN_START2   75

#ifdef BAT_DETECT    //shenyj add 050222
#ifdef FW_DELAY_LONG

#define FULL_BAT_LOW_DELAY_CNT      90000//90000*10ms==900s/60=15min
#define FULL_BAT_LOW_DELAY_LIMIT    120000  
#define LOW_BAT_LOW_DELAY_CNT       24000
#define LOW_BAT_LOW_DELAY_LIMIT     42000  
#define POWER_ON_BAT_LOW_LIMIT      6000
#define POWER_ON_DETECT_TIMER       8000

void check_alco_bat_detect_gpio(void)
{
    static int power_on_detect_timer=POWER_ON_DETECT_TIMER;
    static int power_on_bat_low_times=0;
    static int delay_cnt;
    static int delay_limit;
    
    if(power_on_detect_timer)
        power_on_detect_timer--;
    
    #ifdef HIGH_BAT_LOW
    if(!GPIO_I_GET(BAT_LOW_GPIO))
    #else
    if(GPIO_I_GET(BAT_LOW_GPIO))
    #endif
    {	   
        if(lowbat_timer)
		ClearOsdMsg(1);
		    
    	lowbat_timer = 0;
    	
    	#ifdef BAT_LOW_LED_CONTROL 
    	    #ifdef ALCO_PVS1090
    	    regs0->sdc_data_cnt[6][0] |= (0x0e);//enable gpio 72
	        GPIO_M_SET(BAT_LOW_LED_GPIO,1); 
	        GPIO_E_SET(BAT_LOW_LED_GPIO,1);  //output
	    #endif
	    GPIO_O_SET(BAT_LOW_LED_GPIO,0);
	    #endif
	    
	    power_on_bat_low_times = 0;
    }
    else
    {      
    	if(power_on_detect_timer)
    	    power_on_bat_low_times++;
    	
    	if(power_on_detect_timer==1)    
    	{
    	    if(power_on_bat_low_times >= POWER_ON_BAT_LOW_LIMIT)
    	    {
    	        delay_cnt = LOW_BAT_LOW_DELAY_CNT;
    	        delay_limit = LOW_BAT_LOW_DELAY_LIMIT;
        }	
    	else
    	{   		
    	        delay_cnt = FULL_BAT_LOW_DELAY_CNT;
    	        delay_limit = FULL_BAT_LOW_DELAY_LIMIT;
    	    }
        }
    
    	if(!power_on_detect_timer)
    	{
    	    #ifdef WHEN_BAT_LOW_POWER_OFF
    	    if(lowbat_timer<delay_limit)
    	    #endif
    	    {
    	        if(lowbat_timer>delay_cnt)
    	{
    	    int flag;
    	    flag=lowbat_timer/70;
    		if(flag%3!=1)
    		{
    		    PrintOsdMsg(STR_OS_LOWBAT,REGION1,0,0);
    		#ifdef BAT_LOW_LED_CONTROL 
    		#ifdef ALCO_PVS1090
    		regs0->sdc_data_cnt[6][0] |= (0x0e);//enable gpio 72
	        GPIO_M_SET(BAT_LOW_LED_GPIO,1); 
	        GPIO_E_SET(BAT_LOW_LED_GPIO,1);  //output
	        #endif
	        GPIO_O_SET(BAT_LOW_LED_GPIO,1);
	        #endif
        }	
    	else
    	{   		
    	        ClearOsdMsg(1); 
    	        #ifdef BAT_LOW_LED_CONTROL 
    	        #ifdef ALCO_PVS1090
    	        regs0->sdc_data_cnt[6][0] |= (0x0e);//enable gpio 72
	            GPIO_M_SET(BAT_LOW_LED_GPIO,1); 
	            GPIO_E_SET(BAT_LOW_LED_GPIO,1);  //output
	            #endif
	            GPIO_O_SET(BAT_LOW_LED_GPIO,0);
	            #endif
    	    }
    	        }   
    		lowbat_timer++;
        }	
    	    #ifdef WHEN_BAT_LOW_POWER_OFF
    	else
    	{   		
           ircmd_power();	
    	}	
#endif
        }
    }
}

#elif defined(ALCO_PVS1090)||defined(ALCO_PVS1090_AVIN)    //shenyj add 
void check_alco_bat_detect_gpio(void)
{
    if(GPIO_I_GET(BAT_LOW_GPIO))
    {	   
        if(lowbat_timer)
		ClearOsdMsg(1);
    	lowbat_timer = 0;
    	#ifdef BAT_LOW_LED_CONTROL 
    	    #ifdef ALCO_PVS1090
    	    regs0->sdc_data_cnt[6][0] |= (0x0e);//enable gpio 72
	        GPIO_M_SET(BAT_LOW_LED_GPIO,1); 
	        GPIO_E_SET(BAT_LOW_LED_GPIO,1);  //output
	        #endif
	        GPIO_O_SET(BAT_LOW_LED_GPIO,0);
	    #endif
    }
    else
    {      
        #ifdef BAT_LOW_LED_CONTROL 
    	    #ifdef ALCO_PVS1090
    	    regs0->sdc_data_cnt[6][0] |= (0x0e);//enable gpio 72
	        GPIO_M_SET(BAT_LOW_LED_GPIO,1); 
	        GPIO_E_SET(BAT_LOW_LED_GPIO,1);  //output
	        #endif
	        GPIO_O_SET(BAT_LOW_LED_GPIO,1);
	    #endif
    	if(lowbat_timer<6000)
    	{
    	    int flag;
    	    flag=lowbat_timer/70;
    		if(flag%3!=1)
    		{
    		    PrintOsdMsg(STR_OS_LOWBAT,REGION1,0,0);
    	    }
    	    else
    	    {
    	        ClearOsdMsg(1); 
    	    }
    		lowbat_timer++;
        }	
    	else
    	{   	
	        #ifdef WHEN_BAT_LOW_POWER_OFF 
           ircmd_power();	
            #endif
    	}	
    }
}

#else //#ifdef FW_DELAY_LONG

#define GPIO_LOW_DELAY_CNT          1000
#ifdef WHEN_BAT_LOW_POWER_OFF
#define POWER_OFF_LIMIT             18000
#endif
#define DETECT_PERIOD               300               

void check_alco_bat_detect_gpio(void)
{
    static UINT16 detect_times=DETECT_PERIOD;
    static BYTE power_on_delay_timer = 0;
    
    if(detect_times>1)
        detect_times--;
        
    #ifdef HIGH_BAT_LOW
    if(!GPIO_I_GET(BAT_LOW_GPIO))
    #else
    if(GPIO_I_GET(BAT_LOW_GPIO))
    #endif
    	highbat_timer++;
    else
        lowbat_timer++;
    
    if(detect_times==1)
    {
    	if((lowbat_timer>highbat_timer) && (power_on_delay_timer>=5))
    	    PrintOsdMsg(STR_OS_LOWBAT,REGION1,1,0);
        
        lowbat_timer = 0;
        highbat_timer = 0;  
        
        if(power_on_delay_timer<5)
            power_on_delay_timer++;
          
        detect_times = DETECT_PERIOD;
    }    
}
#endif  //end #ifdef FW_DELAY_LONG
#endif  //end #ifdef BAT_DETECT

//end shenyj add 050222
void check_alco_portable_gpio(void)
{
	UINT16 temp=0;
	static BYTE i=0;
	
	#ifdef IO_CHECK_GET_DELAY
	UINT16 delay_cnt;//shenyj add for alco177w
	#endif
	
	#ifdef PLAY_IN_SUNPLUS_PLATFORM
	return;
	#endif
	
	#ifdef TFT_ONOFF_CONTROL
	#if defined(ALCO_PV1950)||defined(ALCO_PVS19251)
	GPIO_O_SET(TFT_CONTROL_GPIO1,1);
	GPIO_O_SET(TFT_CONTROL_GPIO2,1);
    #elif defined(ALCO_PVS177W)//shenyj add for alco177w
	regs0->sft_cfg3 &= ~((0x1)<<3); //enable gpio55 for TFT_CHECK
    regs0->sft_cfg0&= ~((0x1)<<6); //enable gpio29 for TFT_CTL	
	
	GPIO_M_SET(TFT_CHECK_GPIO,1); 
	GPIO_E_SET(TFT_CHECK_GPIO,0);  //input	
	GPIO_M_SET(TFT_CONTROL_GPIO,1); 
	GPIO_E_SET(TFT_CONTROL_GPIO,1);  //output
	
	#ifdef IO_CHECK_GET_DELAY
	for(delay_cnt=0;delay_cnt<20;delay_cnt++)
	    ;
	#endif
	
	//printf_w("shenyj test here tft_flay=%d\n",tft_flag);
	if(GPIO_I_GET(TFT_CHECK_GPIO))
	{
	    GPIO_O_SET(TFT_CONTROL_GPIO,1);	
    }
    else
    {
        GPIO_O_SET(TFT_CONTROL_GPIO,0);	
    }
    #elif defined(ALCO_PVS127X)||defined(ALCO_PVS1262)||defined(ALCO_PVS8712)||defined(ALCO_PVS1090)
	    #if !defined(ALCO_PVS1090)&&!defined(ALCO_CARD_USB_MODEL)
	regs0->sft_cfg1&= ~((0x1)<<3); //enable gpio16 for TFT_STB_CTL
	    #endif
	    #if !defined(ALCO_PVS1262)&&!defined(ALCO_PVS8712)&&!defined(ALCO_PVS1090)&&!defined(ALCO_PVS1090_AVIN)
	regs0->sft_cfg3 &= ~((0x1)<<3); //enable gpio55 for TFT_CHECK
	#endif
	#ifdef ALCO_PVS1090
	regs0->sft_cfg3&= ~((0x1)<<1); //enable gpio53 for TFT_CHECK
	regs0->sft_cfg3 &= ~((0x1)<<0); //enable gpio58 for TFT_ON_OFF
	regs0->sft_cfg3 &= ~((0x1)<<9); //enable gpio59 for TFT_POWER_STB
	#endif
	#ifdef ALCO_CARD_USB_MODEL
	    regs0->sft_cfg3&= ~((0x1)<<1); //enable gpio53 for TFT_CHECK
	    regs0->sft_cfg3 &= ~((0x1)<<0); //enable gpio58 for TFT_ON_OFF
	    #ifdef ALCO_PVS1090_AVIN
	    #if !defined(ARCHT16_USE_64M_ESP)//shenyj add for alco 2006/02/28
	    regs0->sft_cfg1 &= ~((0x1)<<4); //enable gpio25 pin111 for TFT_POWER_STB
	    #endif
	    #else
	    regs0->sft_cfg3 &= ~((0x1)<<9); //enable for TFT_POWER_STB
	#endif
	    #endif
	GPIO_M_SET(TFT_CHECK_GPIO,1); 
	GPIO_E_SET(TFT_CHECK_GPIO,0);  //input	
	GPIO_M_SET(TFT_CONTROL_GPIO,1); 
	GPIO_E_SET(TFT_CONTROL_GPIO,1);  //output		
	GPIO_M_SET(TFT_STB_CONTROL_GPIO,1); 
	GPIO_E_SET(TFT_STB_CONTROL_GPIO,1);  //output
	
	#ifdef IO_CHECK_GET_DELAY
	for(delay_cnt=0;delay_cnt<20;delay_cnt++)
	    ;
	#endif
	if(GPIO_I_GET(TFT_CHECK_GPIO))
	{
	    #ifdef POWER_ON_LCD_BACKGROUND_VOlTAGE_DELAY
	    if(i > BACKGROUND_VOlTAGE_DELAY_VALUE)//added 07/05/26
	    #endif
	    GPIO_O_SET(TFT_CONTROL_GPIO,1);	
	    #if defined(ALCO_PVS1262)||defined(ALCO_PVS8712)||defined(ALCO_PVS1090)||defined(ALCO_PVS1090_AVIN)
	    GPIO_O_SET(TFT_STB_CONTROL_GPIO,1);
	    #else
	    GPIO_O_SET(TFT_STB_CONTROL_GPIO,0);
	    #endif
    }
    else
    {
        GPIO_O_SET(TFT_CONTROL_GPIO,0);	
        #if defined(ALCO_PVS1262)||defined(ALCO_PVS8712)||defined(ALCO_PVS1090)||defined(ALCO_PVS1090_AVIN)		
	    GPIO_O_SET(TFT_STB_CONTROL_GPIO,0);
	    #else
        GPIO_O_SET(TFT_STB_CONTROL_GPIO,1);
        #endif
    }
	#endif//end shenyj add for alco177w
	#endif
	
    #ifdef VIDEO_IN_CONTROL   
    #if defined(ALCO_PV1950)||defined(ALCO_PVS19251)  
    INT_EXT_GPIO_INIT1();
    INT_EXT_GPIO_INIT2();
   
    #ifdef IO_CHECK_GET_DELAY//Jack modified delay_cnt from 50 to 100 on 05/04/01
	for(delay_cnt=0;delay_cnt<100;delay_cnt++)
	    ;
	#endif  
	
    switch (IS_VIDEO_INPUT())
    {
    case 2: //two video-in sw are not in video in state 
        //printf_w("do nothing............\n");

        //do nothing!
        break;        
    case 1://8210 input video to TFT
        //one video-in sw is in video in state
        if(system_state!=SYSTEM_BROWSE)
           GPIO_DEMUTE();

        //printf_w("one AV in............\n");

        break;
    case 0://External AV input to TFT
        if(i > (DELAY_COUNT-1))
        {
            //printf_w("towo an in............\n");

        AVin_step = 0x0f;
        call_ir_func(IRC_POWER);
        }
        break;
    }
    #elif defined(ALCO_PVS177W)||defined(ALCO_PVS1090_AVIN)//shenyj add for alco177w       
    INT_EXT_GPIO_INIT();
    #ifdef IO_CHECK_GET_DELAY//Jack modified delay_cnt from 50 to 100 on 05/04/01
	for(delay_cnt=0;delay_cnt<100;delay_cnt++)
	    ;
	#endif     
    
    switch (IS_VIDEO_INPUT())
    {
        
    case 1://8202s input video to TFT        
        //if(system_state!=SYSTEM_BROWSE)
        //   GPIO_DEMUTE();
        break;
    case 0://External AV input to TFT       
        if(i > (DELAY_COUNT-1))
        {
        //tv_dacoff((1<<5)|(1<<4)|(1<<3)|(1<<2)|(1<<1)|(1<<0));
        AVin_step = 0x0f;        
        call_ir_func(IRC_POWER);
        }
        break;
    default:
        break;
    }
    #endif 

    if(!AVin_step)
    {
    #endif //end #ifdef VIDEO_IN_CONTROL
        #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
	    //Cover SW(GPIO8)
        
        #ifdef IO_CHECK_GET_DELAY
	    for(delay_cnt=0;delay_cnt<20;delay_cnt++)
	        ;
	    #endif
	     
	    #if defined(PORTABLE_8202S)||defined(PORTABLE_8202D)
        temp=GPIO_I_GET(PDVD_OPCLSW_GPIO);
        #else
        regs0->gpio_in[PDVD_OPCLSW_GPIO / 16] & (1 << (PDVD_OPCLSW_GPIO % 16));  //get gpio16(COVER_SW)
        #endif
        
        //printf("open/close:%d...\n",temp);
        if(i<DELAY_COUNT)
          i++;
        
        if(temp)
        {
          if((i>=TRAYIN_START1) && (i<=TRAYIN_START2)) //added 04/12/31
          {
                i++;
                return;
          }
                
          #if 0//def REM_DECODE_JPEG
          if((!jpeg_decoding) && (!CDOpened())) 
          #else
          if(!CDOpened())
          #endif
          {
            #ifdef UNLOCK_STATE_NOT_CHECK_PASSWD
            disc_has_unlock = 0;
            #endif
            
            if(full_scrn)
            {    
                osd_init();
                ForceClearOsdMsg(0);
            }
            else
            osd_tog_region(0,OSD_OFF); //don't change the sequence between these two sentences and the "call_ir_func(IRC_EJECT);" sentence!!!
            t_disp = old_t_disp = 0;
            
            call_ir_func(IRC_EJECT);
            
            #ifdef DISPLAY_REMAIN_TIME
            display_and_time = 0;
            display_flag = 0; 
            #endif
            
            PrintOsdMsg(STR_OS_OPEN,REGION1,0,0);
          }   
        }
        else
        {
            
            if((i>=TRAYIN_START1) && (i<=TRAYIN_START2))//added 04/12/31
                i++;
                
            if(CDOpened())
            {
              i = TRAYIN_START1;
              call_ir_func(IRC_EJECT);
            }
            
            if(i==1)
              ircmd_trayout();
            
        }
        #endif //end #ifdef CHECK_PORTABLE_OPCLSW
    #ifdef VIDEO_IN_CONTROL
}
#endif
    #ifdef BAT_DETECT
    check_alco_bat_detect_gpio();
    #endif   
}
     
#ifdef PDVD_USE_IO_SCAN_KEY

#ifdef ALCO_PV1950    
const BYTE gpio[8]={56,55,54,18,49,50,51,52};
#endif
#if defined(ALCO_PVS177W)||defined(ALCO_PVS127X)
const BYTE gpio[8]={23,22,21,16,12,13,14,15};
#endif

#ifdef ALCO_PVS19251
const BYTE gpio[4]={21,22,23,16};
#define MAX_DELAY   100
#define MAX_KEY     10
#endif

#ifdef ALCO_PVS1262

⌨️ 快捷键说明

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