📄 key_io_portable.c
字号:
#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 + -