📄 vfd_portable.c
字号:
#ifdef ARGUS_PDVD_MENU_PLUS
if(full_scrn & SETUP_PLUS)
ircmd_setup_plus();
#endif //end #ifdef ARGUS_PDVD_MENU_PLUS
call_ir_func(IRC_EJECT);
PrintOsdMsg(STR_OS_OPEN,REGION1,0,0);
}
}
else
{
if(CDOpened())
call_ir_func(IRC_EJECT);
}
#endif //end #if defined(MUSTEK_K100D_MODEL)
#endif //#ifdef CHECK_PORTABLE_OPCLSW
#ifdef DVB_DVD_8202
}
#endif
#ifdef TFT_VIDEO_INOUT
}
#endif //end #ifdef TFT_VIDEO_INOUT
#ifdef TFT_ONOFF_CONTROL//shenyj add
UINT16 tft_sw_flag;
tft_sw_flag = GPIO_I_GET(TFT_SW_GPIO);
if(tft_sw_flag)
{
GPIO_M_SET(CTR_TFT_GPIO,1);
GPIO_E_SET(CTR_TFT_GPIO,1);
GPIO_O_SET(CTR_TFT_GPIO,0);
}
else
{
GPIO_M_SET(CTR_TFT_GPIO,1);
GPIO_E_SET(CTR_TFT_GPIO,1);
GPIO_O_SET(CTR_TFT_GPIO,1);
}
#endif
#if defined(GBM_PORTABLE_DVD)||defined(SUNPLUS_8202P_DEMOBOARD) //rbhung for GBM Portable DVD
#ifdef TFT_VIDEO_INOUT
if(!AVin_step)
#endif //end #ifdef TFT_VIDEO_INOUT
{
#ifdef HOLD_KEY_DETECT
temp=regs0->gpio_in[HOLD_GPIO / 16] & (1 << (HOLD_GPIO % 16)); //get (HOLD)
if(temp)
hold_state=1;
else
hold_state=0;
#endif
temp=regs0->gpio_in[TFT_SW_GPIO / 16] & (1 << (TFT_SW_GPIO % 16)); //get (TFT_SW)
if(temp)
regs0->gpio_out[CTR_TFT_GPIO /16]|= (1 << (CTR_TFT_GPIO % 16));
else
regs0->gpio_out[CTR_TFT_GPIO /16]&= ~(1 << (CTR_TFT_GPIO % 16));
}
temp=regs0->gpio_in[MCU_POWER_DET_GPIO / 16] & (1 << (MCU_POWER_DET_GPIO % 16)); //get gpio41(MCU_POWER_DET)
if(temp)
{
powerdown_timer=0;
}
else
{
powerdown_timer++;
if(powerdown_timer>100)
{
regs0->gpio_out[CTR_GLED_GPIO/16]|= (1 << (CTR_GLED_GPIO % 16)); //CTR_GLED->H,GREEN LED OFF
regs0->gpio_out[DSP_RLED_GPIO/16]&= ~(1 << (DSP_RLED_GPIO % 16)); //DSP_RLED->L,RED LED ON
call_ir_func(IRC_POWER);
}
}
temp=regs0->gpio_in[LOWBAT_DET_GPIO / 16] & (1 << (LOWBAT_DET_GPIO % 16)); //get gpio42(LOWBAT_DET)
if(temp)
{
if(lowbat_timer==0)
ClearOsdMsg(2);
lowbat_timer=1;
regs0->gpio_out[CTR_GLED_GPIO/16]&= ~(1 << (CTR_GLED_GPIO % 16)); //CTR_GLED->L,GREEN LED ON
regs0->gpio_out[DSP_RLED_GPIO/16]|= (1 << (DSP_RLED_GPIO % 16)); //DSP_RLED->H,RED LED OFF
}
else
{
if(lowbat_timer<100)
{
PrintOsdMsg(STR_OS_LOWBAT,REGION2,0,0);
lowbat_timer++;
regs0->gpio_out[CTR_GLED_GPIO/16]|= (1 << (CTR_GLED_GPIO % 16)); //CTR_GLED->H,GREEN LED OFF
regs0->gpio_out[DSP_RLED_GPIO/16]&= ~(1 << (DSP_RLED_GPIO % 16)); //DSP_RLED->L,RED LED GLITTER ON
}
else
{
if((lowbat_timer>=100) & (lowbat_timer<150))
{
ClearOsdMsg(2);
lowbat_timer++;
regs0->gpio_out[DSP_RLED_GPIO/16]|= (1 << (DSP_RLED_GPIO % 16)); //DSP_RLED->H,RED LED GLITTER OFF
}
else
lowbat_timer=0;
}
}
#endif //end #ifdef GBM_PORTABLE_DVD
#ifdef BAT_DETECT//shenyj add 2006-9-12 02:37下午
check_bat_detect_gpio();
#endif
}
#endif
#ifdef PDVD_USE_IO_SCAN_KEY
#ifdef APEX_PORTABLE_DVD //liulilifeng add for apex portable dvd eth1007
const BYTE gpio[5]={KEY_A,KEY_B,KEY_C,KEY_D,KEY_E};
void check_portable_key(void)
{
BYTE i,j,keydata,press_key=0;
static BYTE keyprev=0;
#ifdef HOLD_KEY_DETECT
if(hold_state)
return;
#endif
//GPIO_E_SET (23 , 1 );
//GPIO_O_SET (23 , 1 );
for (i=5;i>0;i--)
{
for (j=0;j<5;j++)
{
if ( j<i )
GPIO_E_SET( gpio[j] , 0); //set as input port
else if (j>i)
{
GPIO_E_SET( gpio[j] , 1); //set as output port
GPIO_O_SET( gpio[j] , 1);
}
else
{
GPIO_E_SET( gpio[j] , 1); //set as output port
GPIO_O_SET (gpio[j] , 0);
}
}
for (j=0;j<i;j++)
{
keydata = GPIO_I_GET( gpio[j] );
if (keydata ==0 )
{
press_key =1;
keydata = i*5 + j;
if (keyprev != keydata)
{
keyprev = keydata;
call_ir_func(vfd_keycode[keydata - 1]);
printf ("key %d x,y %d ,%d \n",keydata , i , j );
}
}
}
if (press_key ==1 )
break ;
}
for (j=0;j<5;j++)
{
GPIO_E_SET (gpio[j] , 1);
GPIO_O_SET (gpio[j] , 1);
}
if(press_key==0) keyprev=0;
}
#elif defined(MUSTEK_K100D_MODEL)
/*
by justin 2005/09/08
from here to end this function is change to let keyboard used.
*/
#define LONG_PRESS_KEY_TIME 5 ///10
const BYTE gpio[6]={31,33,39,40,30,32};
#ifdef IO_CHECK_DELAY
#define MAX_DELAY_CNT 30
#endif
void check_portable_key(void)
{
BYTE i,j,k,keydata,unuseful,press_key=0;
static BYTE keyprev=0;
static BYTE olddata=0;
static BYTE key_press_times=0;
GPIO_M_SET(31,1);
GPIO_M_SET(33,1);
GPIO_M_SET(39,1);
GPIO_M_SET(40,1);
GPIO_M_SET(30,1);
GPIO_M_SET(32,1);
GPIO_E_SET(31,1);
GPIO_E_SET(33,1);
GPIO_E_SET(39,1);
GPIO_E_SET(40,0);
GPIO_E_SET(30,0);
GPIO_E_SET(32,0);
#ifdef HOLD_KEY_DETECT
if(hold_state)
return;
#endif
//gpio confgi should move to reset_gpio_portable()!!!
//regs0->sft_cfg0 &=~((0x01)<<4); //GPIO39(Pin162)Disable M_DQM2 and enable
//1.100 maybe is too lagrge!!!
//2.delay should be not in here!!!
//for(unuseful=0;unuseful<100;unuseful++);
//delay key scan
// for the program run too fast
//regs0->sft_cfg1 &= ~(0x7 << 9); //gpio 33(pin 155)
//for(unuseful=0;unuseful<100;unuseful++);
regs0->sft_cfg1 &= ~(0x7 << 9); //gpio33(pin 155)
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
GPIO_O_SET(gpio[j],1);
GPIO_O_SET(gpio[i],0);
//delay....
#ifdef IO_CHECK_DELAY
for(unuseful=0;unuseful<MAX_DELAY_CNT;unuseful++);
#endif
for(k=3;k<6;k++)
{
keydata=GPIO_I_GET(gpio[k]);
if(keydata==0)
{
press_key=1;
keydata=i*3+(k-3)+1;
//by justin 2005/10/21 press a key for a long time , system do it again
if(keydata==olddata)
{
key_press_times++;
}
else
{
key_press_times=0;
olddata=keydata;
}
if((keyprev!=keydata)||(key_press_times>LONG_PRESS_KEY_TIME))
{
BYTE temp;
key_press_times=0;
keyprev=keydata;
temp=vfd_keycode[keydata - 1];
//by justin 2005/11/01 the same key on panel have different name in different mode
if(source_play_mode==DVB_T_MODE)
{
if(temp==IRC_FORWARD)temp=IRC_NEXT;
if(temp==IRC_BACKWARD)temp=IRC_PREV;
}
#ifdef SUPPORT_8202_DVB
if(Is_Dvb_State())
Dvb_ircmd_pre_parser(temp);
else
#endif //SUPPORT_8202_DVB
call_ir_func(temp);
// call_ir_func(vfd_keycode[keydata - 1]);
//printf("key %d SW %d,%d.\n",keydata,i,k-4);
//call_ir_func(IRC_VOLUME_UP);
//printf("key %d SW %d,%d.\n",keydata,i,k-3);
}
break;
}
}
}
if(press_key==0)
{
keyprev=0;
key_press_times=0;
olddata=0;
}
/*.......................................................................................................
by justin 2005/09/012
key_board_power
.........................................................................................................*/
if(IunTestPin84>=2)
{
GPIO_E_SET(POWER_KEY_GPIO,0);
//QiaoHuilin:2005-10-21
if(GPIO_I_GET(POWER_KEY_GPIO))while(1)
call_ir_func(IRC_POWER);
///////////////////////////////////////////////////////////////////////////
}
}
#elif defined(IC_8202L)//use 4 gpio scan 16 key
#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]={6,7,8,11};/*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->sft_cfg4 &= ~(0x1<<5);//set pin 3 as gpio6
regs0->sft_cfg13 &= ~(0x1<<6);// set pin 1 as gpio4
GPIO_M_SET(6,1);
GPIO_M_SET(7,1);
GPIO_M_SET(8,1);
GPIO_M_SET(11,1);
/* 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;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -