[완료] 마우스 프로그래밍 관련.. /dev/input/mice 읽어오기
글쓴이: nekoko / 작성시간: 목, 2008/05/15 - 4:58오후
USB 마우스 프로그래밍을 하고 있습니다.
mknod /dev/input/mice c 13 63 을 하고나서
read()로 이걸 읽어와 마우스 이벤트를 처리하려고 합니다.
그런데..
int read_bytes;
struct input_event ev;
read_bytes = read(fd, &ev, sizeof(struct input_event));
이런 식으로 하면, input_event를 읽어오지 않습니다. 3바이트를 읽어오는데요
minor번호 63에서 읽어오려면 어떤 형식으로 읽어와야 하는지요?
3바이트가 구체적으로 어떤 내용인지 모르겠습니다.
minor를 64로 해서 (여기서부턴 이벤트 이벤트 핸들러?) 읽어오면 제대로
input_event 구조체를 읽어오구요..
전부 검색해봐도 input_event로 읽어오는 것밖에 안나와있고
63으로부터 읽어오려면 어떤 형식으로 읽어야하는지는 못 찾겠네요
굳이 63으로 하려는 이유는.. 64로 하면, usb마우스를 뽑았다가 다시 꽂으면
63으로부터 다시 읽어오기가 안되더라구요. (이 이유도 모르겠습니다)
64로 하면, 다시 꽂으면 다시 읽기가 됩니다.
아무런 조언이나 환영입니다.
Forums:
http://wiki.kldp.org/wiki.php
http://wiki.kldp.org/wiki.php/MouseRAW
도구의 결함은 장인의 손으로 극복한다.
아래 코드는 X 서버의
아래 코드는 X 서버의 마우스 드라이버 소스입니다.
그리고 64는 마우스 장치가 아니라 linux input event device 입니다.
----
데스크탑 프로그래머를 꿈꾸는 임베디드 삽질러
----
데스크탑 프로그래머를 꿈꾸는 임베디드 삽질러
우왕ㅋ
3바이트가 그런 내용이었군요~
등잔 밑이 어둡다더니 kldp 위키를 안 찾아봤네요
두분 빠른 답변 고맙습니다
(그런데
http://www.frogmouth.net/hid-doco/x401.html
http://blog.naver.com/nugu99?Redirect=Log&logNo=70004648008 (유영창님 강좌)
같은 곳을 보면 read를 할 때 input_event로 읽으라고 나와있는데..
보통 마우스 프로그래밍할 때 이벤트 처리를 어떤 식으로 하는지
확실히 모르겠네요)
"I'm convinced that the only thing that kept me going was that I loved what I did." - Steve Jobs 1955-2011
시스템에 여러개의
시스템에 여러개의 마우스 장치가 연결되어 있더라도 모든 마우스 이벤트는 /dev/input/mice 장치에서 얻을 수 있습니다.
linux input event device (보통 줄여서 evdev라고합니다.)는 각 장치마다 따로 이벤트가 발생됩니다.
그리고 evdev는 마우스, 키보드, 터치, 조이스틱, 등등의 모든 입력장치를 모두 포함합니다..
input_event를 사용하려면 먼저 해당 장치가 원하는 장치인지 확인하는 부분이 필요할껍니다.
참고로 현재 시스템에 등록된 evdev를 확인하려면 다음 명령을 사용하세요.
----
데스크탑 프로그래머를 꿈꾸는 임베디드 삽질러
----
데스크탑 프로그래머를 꿈꾸는 임베디드 삽질러
우왕
리플 감사합니다.
그런데 혹시 응용프로그램에서
마우스가 뽑아지거나 꽂혀진 순간을 어떻게 알 수 있을까요?
마우스가 빠지면 커서를 없애고, 꽂히면 그려주려고 합니다.
저는 말씀하신 proc/bus/input/devices 를 open해서
파싱한 후 H: Handlers=mouse0 event5 부분에서 "mouse"라는
문자열이 검색되면 마우스가 꼽혀있고, 없으면 빠져있는 것으로
판단하도록 프로그래밍할 생각이었는데..
어떤가요?
"I'm convinced that the only thing that kept me going was that I loved what I did." - Steve Jobs 1955-2011
마우스 연결/해제
마우스 연결/해제 이벤트는 리눅스 핫플러그쪽을 보셔야 할껍니다.
조금 옛날문서라서 요새상황과 안맞는 부분이 많이 있지만 아래 문서를 참조하세요.
http://wiki.kldp.org/wiki.php/LinuxHotplug
그리고 현대적(?)인 방법으로 하고 싶다면 udev에 스크립트를 추가하거나 hal 이벤트를 dbus로 받아서 처리하면 됩니다.
----
데스크탑 프로그래머를 꿈꾸는 임베디드 삽질러
----
데스크탑 프로그래머를 꿈꾸는 임베디드 삽질러
ㅋ
답변 고맙습니다. :)
"I'm convinced that the only thing that kept me going was that I loved what I did." - Steve Jobs 1955-2011
작성하신 프로그램이
작성하신 프로그램이 항상 실행되어 있는 상태라면,
udev 처럼 커널이 뿌려주는 netlink 메시지를 직접 받아보실 수도 있습니다.
NETLINK_KOBJECT_UEVENT 를 열어서 받아보시면 됩니다.
단, root 권한이 필요합니다 -.-;
fedora8, linux-2.6.24 에서 해보니
마우스에 대해선,
USB 메모리에 대해선,
이렇게 날아오는군요. 예전과는 좀 다르네요. 전에는 mount/umount 이벤트도 날아왔었는데.
중간의 fat,vfat 은 udev->hal 이 동작해서 마운트하면서 나오는 이벤트들입니다.
OTL
^^
참고하겠습니다 ^^
"I'm convinced that the only thing that kept me going was that I loved what I did." - Steve Jobs 1955-2011
댓글 달기