안녕하세요.
mp2530 rootfs에 들어있는 aesopev key test 프로그램에서 질문이 있습니다.
/dev/input/event0를 open하여 아래 프로그램처럼 event queue를 read할시에...
input event가 들어오기전 까지( pushkey가 눌러지기전까지) blocking되는데..
while(1) loop에서 event가 들어오기전까지는 계속 while looping하고자 할때는
어떻게 해야하는지요?
input queue가 모두 clear되어서 그런건지...
trace해보니 evdev.c에서
static ssize_t evdev_read(..)
{
........
//여기서 blocking되더군요.......
retval = wait_event_interruptible(list->evdev->wait,
list->head != list->tail || (!list->evdev->exist));
.......
}
pushkey event가 발생하기전까지 blocking되지 않고.. 계속 코드가 돌면서
push key event를 polling으로 check하는 방법은 없는지요?
----------------------------------------
// input device open
if ((event_fd = open(device, O_RDONLY)) < 0)
....
while(1)
{
// event발생을 EVENT_BUF_NUM 만큼 읽어들인다.
read_bytes = read(event_fd, event_buf, (sizeof(struct input_event)
*EVENT_BUF_NUM) );
if( read_bytes < sizeof(struct input_event) )
{
printf("%s: read error", device);
exit(1);
}
// 읽은 event 갯수만큼 loop를 돈다.
for( i=0; i<(read_bytes/sizeof(struct input_event)); i++ )
{
...............
}
}
SDL에서는 timer를 돌려서 처리합니다. 연속버튼 누른거 말씀하시는거 맞지요?