按键对应得键值
//按键对应的键值
#define IO_KEY_BACK 0x00000001 //back key
#define IO_KEY_HOME 0x00000002 //home key
#define IO_KEY_VOLUP 0x00000004
#define IO_KEY_VOLDOWN 0x00000008
#define IO_KEY_HELP 0x00000010
#define IO_KEY_MENU 0x00000020 //menu key
#define IO_KEY_UP 0x00000100
#define IO_KEY_DOWN 0x00000200
#define IO_KEY_LEFT 0x00000400
#define IO_KEY_RIGHT 0x00000800
#define IO_KEY_ROTATE 0x00001000
#define IO_KEY_POWER 0x80000000
按键面板初始化
int Keypad_Initialize(void)
{
if (! Is_Keypad_Initialized)
{
Fd_Event = open("/dev/input/event1", O_RDONLY|O_NONBLOCK);
if (Fd_Event < 0)
{
return STATUS_INITIALIZE_ERROR;
}
Fd_PowerKey = open("/dev/input/event0", O_RDONLY|O_NONBLOCK);
if (Fd_PowerKey < 0)
{
return STATUS_INITIALIZE_ERROR;
}
Is_Keypad_Initialized = 1;
}
return 0;
}
按键清除
void Keypad_Cleanup(void)
{
if (Is_Keypad_Initialized)
{
if (Fd_Event > 0)
{
close(Fd_Event);
Fd_Event = -1;
}
if (Fd_PowerKey > 0)
{
close(Fd_PowerKey);
Fd_PowerKey = -1;
}
Is_Keypad_Initialized = 0;
}
}
获取按键状态
int Keypad_Get_IOKeyStatus(void)
{
struct input_event key_event, key_power_event;
int ret, ret_power;
do{
ret = read(Fd_Event, &key_event, sizeof(key_event));
if (key_event.type == EV_KEY && key_event.value)
{
switch (key_event.code)
{
case 0x9E: //EXIT or Back key
return IO_KEY_BACK;
case 0x8A: //help key
return IO_KEY_HELP;
case 0x73: //v+ key
return IO_KEY_VOLUP;
case 0x72: //v- key
return IO_KEY_VOLDOWN;
case 0x8B: //shutter or menu key
return IO_KEY_MENU;
case 0x67: //up key
return IO_KEY_UP;
case 0x6A: //right key
return IO_KEY_RIGHT;
case 0x6C: //down key
return IO_KEY_DOWN;
case 0x69: //left key
return IO_KEY_LEFT;
case 0x66: //home or enter key
return IO_KEY_HOME;
case 0x74: //power
return IO_KEY_POWER;
case 0xF9: //rotate
return IO_KEY_ROTATE;
default:
return 0;
}
}
ret_power = read(Fd_PowerKey, &key_power_event, sizeof(key_power_event));
if (key_power_event.type == EV_KEY && key_power_event.value && key_power_event.code == 0x74)
return IO_KEY_POWER;
}while ( ret > 0 && ret_power > 0);
return 0;
}
使用按键
void Camera_Test_for_PCBA(void)
{
int key_status = 0 ;
static int status_count = 0 ;
int File_num = 0 ;
int flag = 0 ;
//初始化界面显示
INIT:
Display_Initialize();
disp_setting();
Display_Title();
printf("disp_set success!\n");
//初始化按键
Keypad_Initialize();
while(1)
{
key_status = Keypad_Get_IOKeyStatus();
if(key_status == IO_KEY_HOME)
{
printf("Start_camera test\n");
Start_Camera_Test();
}
}