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