왼쪽은 golang의 touchscreen uinput 기능을 이용한 것, 오른쪽은 uinput 예제에서 설정한 것인데

UI_DEV_SETUP 대신 write로 쓰는게 좀.. 특이하다. 

그리고 write로 장치 이름을 쓰고 1116 바이트가 써졌다라..

ioctl(3, UI_SET_EVBIT, 0x1)             = 0
ioctl(3, UI_SET_KEYBIT, 0x110)          = 0
ioctl(3, UI_SET_KEYBIT, 0x111)          = 0
ioctl(3, UI_SET_KEYBIT, 0x14a)          = 0

ioctl(3, UI_SET_EVBIT, 0x3)             = 0
ioctl(3, UI_SET_ABSBIT, 0)              = 0
ioctl(3, UI_SET_ABSBIT, 0x1)            = 0

write(3, "testpad\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 1116) = 1116
ioctl(3, UI_DEV_CREATE, 0)              = 0
ioctl(3, UI_SET_EVBIT, 0x1)             = 0
ioctl(3, UI_SET_KEYBIT, 0x110)          = 0
ioctl(3, UI_SET_KEYBIT, 0x111)          = 0
ioctl(3, UI_SET_KEYBIT, 0x14a)          = 0

ioctl(3, UI_SET_EVBIT, 0x3)             = 0
ioctl(3, UI_SET_ABSBIT, 0)              = 0
ioctl(3, UI_SET_ABSBIT, 0x1)            = 0

ioctl(3, UI_DEV_SETUP, 0x7ffc48a87ef0)  = 0
ioctl(3, UI_DEV_CREATE, 0)              = 0

 

struct uinput_user_dev   uinp;

            // create input device in input subsystem
            retcode = write(ufile, &uinp, sizeof(uinp));
            printf("First write returned %d.\n", retcode);

First write returned 1116.

[링크 : https://hybridego.net/1823]

 

sturct uinput_setup 은 92 바이트 길이

#define UINPUT_MAX_NAME_SIZE 80
struct uinput_setup {
struct input_id id;
char name[UINPUT_MAX_NAME_SIZE];
__u32 ff_effects_max;
};

[링크 : https://elixir.bootlin.com/linux/v4.7/source/include/uapi/linux/uinput.h#L66]

 

struct uinput_user_dev도 그리 길어 보이진 않는데..

#define UINPUT_MAX_NAME_SIZE 80
struct uinput_user_dev {
char name[UINPUT_MAX_NAME_SIZE];
struct input_id id;
__u32 ff_effects_max;
__s32 absmax[ABS_CNT];
__s32 absmin[ABS_CNT];
__s32 absfuzz[ABS_CNT];
__s32 absflat[ABS_CNT];
};

[링크 : https://elixir.bootlin.com/linux/v4.0/source/include/uapi/linux/uinput.h#L148]

 

64개까지 등록 가능하도록 되어있는건가?

#define ABS_MAX 0x3f
#define ABS_CNT (ABS_MAX+1)

[링크 : https://github.com/spotify/linux/blob/master/include/linux/input.h]

 

+

uinput old interface 로 분류된 구조체인듯..

Programs supportinf older versions of uinput interface need to fill a uinput_user_dev structure and write it to the uinput file descriptor to configure the new uinput device

[링크 : https://www.kernel.org/doc/html/v4.12/input/uinput.html]

'프로그램 사용 > uinput' 카테고리의 다른 글

uinput을 이용한 절대좌표 입력 기기 만들기  (0) 2022.08.11
struct uinput_setup 와 struct uinput_user_dev  (0) 2022.08.05
uinput 터치 스크린 예제  (0) 2022.08.05
evbug  (0) 2022.08.05
uinput 장치 확인  (0) 2022.03.04
uinput absolute mouse  (0) 2022.02.23
Posted by 구차니

댓글을 달아 주세요

尹대통령 지지율 '24%'..긍정 평가 이유 1위 '모름·응답거절'

[링크 : https://news.v.daum.net/v/20220805110215751]

Posted by 구차니

댓글을 달아 주세요

golang의 예제로는 원하는대로 절대 좌표 이동이 되는데..

C로 하는건 영 안되네 ㅠㅠ 무슨 차이냐!!!

 

[링크 : https://pkg.go.dev/github.com/bendahl/uinput#section-readme]

[링크 : https://github.com/torvalds/linux/blob/master/include/uapi/linux/uinput.h]

[링크 : https://github.com/bendahl/uinput/blob/master/touchpad.go]

'프로그램 사용 > uinput' 카테고리의 다른 글

uinput을 이용한 절대좌표 입력 기기 만들기  (0) 2022.08.11
struct uinput_setup 와 struct uinput_user_dev  (0) 2022.08.05
uinput 터치 스크린 예제  (0) 2022.08.05
evbug  (0) 2022.08.05
uinput 장치 확인  (0) 2022.03.04
uinput absolute mouse  (0) 2022.02.23
Posted by 구차니

댓글을 달아 주세요

uinput에 대한 이벤트 로그를 demsg를 통해 볼 수 있게 해주는 디버그용 모듈

 

$ sudo modprobe evbug

[링크 : https://www.linuxquestions.org/questions/debian-26/how-to-disable-the-evbug-module-478529/]

[링크 : https://copyprogramming.com/howto/simulating-absolute-mouse-movements-in-linux-using-uinput]

'프로그램 사용 > uinput' 카테고리의 다른 글

struct uinput_setup 와 struct uinput_user_dev  (0) 2022.08.05
uinput 터치 스크린 예제  (0) 2022.08.05
evbug  (0) 2022.08.05
uinput 장치 확인  (0) 2022.03.04
uinput absolute mouse  (0) 2022.02.23
xmodmap  (0) 2022.02.21
Posted by 구차니

댓글을 달아 주세요