기존 이솝 임베디드 포럼의 지식인 서비스가 게시판 형태로 변경되었습니다.

안녕하세요.

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++ )
        {
              ...............
        }


}
  

고현철

2008.01.22 08:32:34
*.51.146.125

SDL에서 처리하는 방법을 원하시네요...^^

SDL에서는 timer를 돌려서 처리합니다. 연속버튼 누른거 말씀하시는거 맞지요?

박종석

2008.01.22 18:16:57
*.244.221.3

꼭 SDL이 아니라.. 일반 app에서 system loop중에 key반응에 따라 동작하고 싶은데... 저기서 blocking되어 멈춰버리니.. 제가 원하는것은 read해도 input queue에 변화가 없으면 그냥 넘어가고 뭔가 들어올때만 event처리하고 싶은데..제 뜻이 제대로 전달되었는지요?.

고현철

2008.01.22 19:31:09
*.51.146.125

select를 쓰시면 됩니다. timeout 기능 걸고요.....

read는 blocking이 되지만, select를 쓰시면 event 들어올때는 반응하고, 들어오지 않을 때는 timeout기능일용해서 넘어갈 수 있습니다.

박종석

2008.01.22 22:35:23
*.244.221.3

현철님.. select는 어떤 함수를 의미하시는건지요? fop에 없는 함수인것 같은데.. example 구현해주실수 있으신지요? ^^...바쁘실텐데 죄송..

고현철

2008.01.23 00:06:14
*.70.26.43

unix system programming 관련 자료를 보시면 있습니다.
예를 들어 kldp.org 가시거나, www.joinc.co.kr 에 가시면요.

저도 쓴지 오래된데다, 찾을려면 네트워크 서버들을 한참 찾아서 발췌를...^^

select와 poll은 I/O multiplex를 하는 함수입니다. 즉 여러개에서 동시에 들어오는 것을 체팅하는 함수인데, 기능중에 read timeout이 있습니다.

유닉스 계열은 이 함수를 자주 쓰는 편인데, 좀 이해하기는 까다롭지만 쓰는 것은 별로 어렵지 않을겁니다.

유형목

2008.01.23 08:57:57
*.131.98.102

target=_blank>http://www.joinc.co.kr/modules/moniwiki/wiki.php/Site/system_programing/File/select


예제를 잘 참고하시면 될것 같군요. select( ) 함수의 인자로 어떤값들을 넘겨주는지는 리눅스가 설치된 시스템에서 man 2 select 해보면 나옵니다.

박종석

2008.01.23 19:25:13
*.244.221.3

모두들 답변들 감사드립니다.
<sys/poll.h>를 사용하여 poll의 event처리를 이용하여 구현하였습니다.
유영창님의 "리눅스드라이버" 책의 14장에 잘 나와있네요..^_^

고현철

2008.01.23 22:23:38
*.70.26.43

poll로 하셔도 되고, select로 하셔도 됩니다....실제로는 둘 다 같은 넘인데(커널 입장에서는) 보통은 select를 주로 사용하는 편입니다.

List of Articles
번호 제목 글쓴이 날짜sort 조회 수
5268 Video_Connector에 NTSC 아날로그 카메라 입력되나요? [2] 이운근 2008-01-17 806
5267 [완료]파일 시스템에 관한 질문 드립니다. [3] 백승준 2008-01-17 491
5266 [완료]yaffs2 에러입니다. 함 봐주세요. [4] 김우겸 2008-01-17 1288
5265 [질문] lockup 상태 .. [2] 유형목 2008-01-17 1178
5264 [완료]키 드라이버 질문 드립니다. [3] 백승준 2008-01-18 674
5263 [완료] mp2530f_mpeg4_play_example 에서 고속 디코딩?? [3] 윤치호 2008-01-18 927
5262 [완]원격네트웍 프로그램의 끊김현상 [2] 문철민 2008-01-18 1323
5261 [질문] 터치스크린에 관한 질문입니다. [1] 신재곤 2008-01-18 605
5260 [I2C] 이재훈님의 소스에서요... [3] 이학남 2008-01-18 1288
5259 [완료] event0 pushkey driver 문의 [5] 박종석 2008-01-19 811
5258 MP2530 2.6.20 커널소스가 자료실에 없네요 .... [2] 장석원 2008-01-19 643
5257 FAT16에서 Cluster결정하는 방법 [2] 임종환 2008-01-19 1161
5256 S3C2442 관련된 질문 [1] 장계석 2008-01-19 639
5255 [re] S3C2442 관련된 질문 [2] 장계석 2008-01-21 792
5254 [질문]삼성2442 관련 질문 [1] 장계석 2008-01-21 1122
5253 [완료]삼성2440 관련 질문 [7] 장계석 2008-01-22 908
» [완료] Pushkey test app - aeospev [8] 박종석 2008-01-22 836
5251 [답변감사] S3C2440 보드를 만들어서 판매 하시는 건가요? [2] 장계석 2008-01-23 1055
5250 [완료]S3C2440 Datasheet을 받을수 있나요? [1] 장계석 2008-01-23 592
5249 [완료][질문]yaffs2 문의입니다.ㅜㅜ [3] 김우겸 2008-01-23 788

사용자 로그인