📄 vfd_portable.c
字号:
}
#endif //end #ifdef CONTINUOUS_PRESS_ACTION
}
}
else
{
#ifdef CONTINUOUS_PRESS_ACTION
if(keyprev && !long_press_flag)
{
if((vfd_keycode[keyprev - 1]!=IRC_NULL) && (keyprev<=MAX_KEY))
{
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]);
}
}
#endif
reset_key_para:
keyprev = 0;
press_flag = 0;
long_press_flag = 0;
key_press_times = 0;
}
}
#elif defined(IC_8202R)//use 4 gpio scan 16 key shenyj add 2007-7-5 17:44
#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]={16,17,18,22};/*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->gpio_first[0]|= (0x1); //Set Pin1 as GPIO16
regs0->gpio_first[0]|= (0x1<<1); //Set Pin2 as GPIO17
regs0->gpio_first[0]|= (0x1<<2); //Set Pin3 as GPIO18
regs0->gpio_first[0]|= (0x1<<6); //Set Pin22 as GPIO22
GPIO_M_SET(16,1);
GPIO_E_SET(16,0);
GPIO_M_SET(17,1);
GPIO_E_SET(17,0);
GPIO_M_SET(18,1);
GPIO_E_SET(18,0);
GPIO_M_SET(22,1);
GPIO_E_SET(22,0);
/* 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;
}
#endif //end #ifdef CONTINUOUS_PRESS_ACTION
}
}
else
{
#ifdef CONTINUOUS_PRESS_ACTION
if(keyprev && !long_press_flag)
{
if((vfd_keycode[keyprev - 1]!=IRC_NULL) && (keyprev<=MAX_KEY))
{
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]);
}
}
#endif
reset_key_para:
keyprev = 0;
press_flag = 0;
long_press_flag = 0;
key_press_times = 0;
}
}
#else //#ifdef APEX_PORTABLE_DVD
const BYTE gpio[8]={46,47,48,49,50,51,52,18};
#ifdef USE_COMBINED_KEY
#define LONG_PRESS_KEY_TIME 12
#endif
//#define PORTABLE_IOKEY_DEBUG
void check_portable_key(void)
{
#ifdef USE_COMBINED_KEY
BYTE i,j,keydata;
static BYTE column_dot = 4;
static BYTE row_dot = 0;
static BYTE keyprev = 0;
static BYTE key_press_times = 0 ;
#ifdef HOLD_KEY_DETECT
if(hold_state)
return;
#endif
regs0->gpio_oe[3]&= 0xffcf; //jhuang org 011f
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(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
#ifdef D02_9_10INCH
if((keydata == 8) || (keydata == 10))
#else
if((keydata == 4) || (keydata == 6)
#ifdef D02_A_10INCH
||(keydata == 10) || (keydata == 16)
#endif
)
#endif
{
key_press_times++;
#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
#ifdef D02_9_10INCH
if(keyprev == 8)
#else
if(keyprev == 4)
#endif
{
#ifdef D02_A_10INCH
call_ir_func(IRC_LEFT);
#else
call_ir_func(IRC_PREV);
#endif
}
else
{
#ifdef D02_A_10INCH
if(keyprev == 10)
call_ir_func(IRC_DOWN);
else if (keyprev == 16)
call_ir_func(IRC_UP);
else
call_ir_func(IRC_RIGHT);
#else
call_ir_func(IRC_NEXT);
#endif
}
}
else
{//short key press
call_ir_func(vfd_keycode[keyprev - 1]);
#ifdef PORTABLE_IOKEY_DEBUG
printf("call short key:%d\n",keyprev);
#endif
}
key_press_times = 0;
keyprev = 0;
column_dot = 4;
row_dot = 0;
}
}
}
#else
BYTE i,j,k,keydata,press_key=0;
static BYTE keyprev=0;
#ifdef HOLD_KEY_DETECT
if(hold_state)
return;
#endif
regs0->gpio_oe[3]&= 0xffcf; //jhuang org 011f
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;
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//#else //#ifdef APEX_PORTABLE_DVD
#endif //#ifdef PDVD_USE_IO_SCAN_KEY
//Jack added 05/11/29 for PollingSpecifiedKeys() use when in MP4 file init state.
UINT16 GetPanelKeyCode(void)
{//panel keys check...... pls add,because different customers have different key-detect array!!!
UINT16 iRet = IR_CODE_MAX_NUM;
#if defined(MUSTEK_K100D_MODEL)
{
GPIO_M_SET(POWER_KEY_GPIO,1);
GPIO_E_SET(POWER_KEY_GPIO,0);
if(GPIO_I_GET(POWER_KEY_GPIO))
iRet = IRC_POWER;
}
#endif
return iRet;
}
UINT16 get_portable_panel_key(void)
{
UINT16 iRet = IR_CODE_MAX_NUM;
BYTE temp __UNUSED =0;
//Cover SW check......
#ifdef CHECK_PORTABLE_OPCLSW
#if defined(MUSTEK_K100D_MODEL)
{
}
#elif 0//defined()
{
}
#else
{
#ifdef SUNPLUS_8202P_DEMOBOARD
regs0->sft_cfg4 &= ~((0x03)<<2); //Enable GPIO2,3 For COVER & TFT SW
#endif
GPIO_M_SET(PDVD_OPCLSW_GPIO,1);
GPIO_O_SET(PDVD_OPCLSW_GPIO,0);
temp=GPIO_I_GET(PDVD_OPCLSW_GPIO);
if(temp)
{
if(!CDOpened())
iRet = IRC_EJECT;
}
}
#endif
#endif
//panel keys check......
if(iRet != IRC_EJECT)
iRet = GetPanelKeyCode();
return iRet;
}
#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
#ifdef SUPPORT_DVD_POWER_ONOFF
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
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -