Difference between revisions of "Talk:Uinput"
From Ilianko
m (moved Talk:Упражнение 6. Mice to Talk:Uinput) |
|||
(3 intermediate revisions by 2 users not shown) | |||
Line 186: | Line 186: | ||
+ | |||
+ | |||
+ | </pre></code> | ||
+ | |||
+ | |||
+ | by Samuil Goranov | ||
+ | <code> | ||
+ | <pre> | ||
+ | #include <stdio.h> | ||
+ | #include <stdlib.h> | ||
+ | #include <string.h> | ||
+ | #include <unistd.h> | ||
+ | #include <fcntl.h> | ||
+ | #include <errno.h> | ||
+ | #include <linux/input.h> | ||
+ | #include <linux/uinput.h> | ||
+ | |||
+ | #define die(str, args...) do { \ | ||
+ | perror(str); \ | ||
+ | exit(EXIT_FAILURE); \ | ||
+ | } while(0) | ||
+ | |||
+ | int | ||
+ | main(void) | ||
+ | { | ||
+ | int fd; | ||
+ | struct uinput_user_dev uidev; | ||
+ | struct input_event ev; | ||
+ | int dx, dy; | ||
+ | int i; | ||
+ | |||
+ | fd = open("/dev/uinput", O_WRONLY | O_NONBLOCK); | ||
+ | if(fd < 0) | ||
+ | die("error: open"); | ||
+ | |||
+ | if(ioctl(fd, UI_SET_EVBIT, EV_KEY) < 0) | ||
+ | die("error: ioctl"); | ||
+ | if(ioctl(fd, UI_SET_KEYBIT, BTN_LEFT) < 0) | ||
+ | die("error: ioctl"); | ||
+ | |||
+ | if(ioctl(fd, UI_SET_EVBIT, EV_REL) < 0) | ||
+ | die("error: ioctl"); | ||
+ | if(ioctl(fd, UI_SET_RELBIT, REL_X) < 0) | ||
+ | die("error: ioctl"); | ||
+ | if(ioctl(fd, UI_SET_RELBIT, REL_Y) < 0) | ||
+ | die("error: ioctl"); | ||
+ | |||
+ | memset(&uidev, 0, sizeof(uidev)); | ||
+ | snprintf(uidev.name, UINPUT_MAX_NAME_SIZE, "uinput-sample"); | ||
+ | uidev.id.bustype = BUS_USB; | ||
+ | uidev.id.vendor = 0x1; | ||
+ | uidev.id.product = 0x1; | ||
+ | uidev.id.version = 1; | ||
+ | |||
+ | if(write(fd, &uidev, sizeof(uidev)) < 0) | ||
+ | die("error: write"); | ||
+ | |||
+ | if(ioctl(fd, UI_DEV_CREATE) < 0) | ||
+ | die("error: ioctl"); | ||
+ | |||
+ | sleep(2); | ||
+ | |||
+ | //========================================= | ||
+ | int fdd; | ||
+ | struct input_event evv; | ||
+ | |||
+ | fdd = open("/dev/input/event3", O_RDONLY); | ||
+ | if(fdd < 0) { | ||
+ | printf("error openning"); | ||
+ | return 1;} | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | while(1){ | ||
+ | read(fdd, &evv, sizeof(struct input_event)); | ||
+ | if(evv.type ==1 ){ | ||
+ | //printf("key %i state %i\n", evv.code, evv.value); | ||
+ | if(evv.code == 103){ dx = -0; dy = -10; } | ||
+ | if(evv.code == 106){ dx = +10; dy = -0; } | ||
+ | if(evv.code == 105){ dx = -10; dy = -0; } | ||
+ | if(evv.code == 108){ dx = -0; dy = +10; } | ||
+ | if(evv.code == 82){ puts("Habara habara"); } | ||
+ | |||
+ | |||
+ | |||
+ | //========================================= | ||
+ | |||
+ | //dx = -100; | ||
+ | //dy = -10; | ||
+ | |||
+ | |||
+ | memset(&ev, 0, sizeof(struct input_event)); | ||
+ | ev.type = EV_REL; | ||
+ | ev.code = REL_X; | ||
+ | ev.value = dx; | ||
+ | if(write(fd, &ev, sizeof(struct input_event)) < 0) | ||
+ | die("error: write"); | ||
+ | |||
+ | memset(&ev, 0, sizeof(struct input_event)); | ||
+ | ev.type = EV_REL; | ||
+ | ev.code = REL_Y; | ||
+ | ev.value = dy; | ||
+ | if(write(fd, &ev, sizeof(struct input_event)) < 0) | ||
+ | die("error: write"); | ||
+ | |||
+ | memset(&ev, 0, sizeof(struct input_event)); | ||
+ | ev.type = EV_SYN; | ||
+ | ev.code = 0; | ||
+ | ev.value = 0; | ||
+ | if(write(fd, &ev, sizeof(struct input_event)) < 0) | ||
+ | die("error: write"); | ||
+ | |||
+ | usleep(15000); | ||
+ | }} | ||
+ | |||
+ | if(ioctl(fd, UI_DEV_DESTROY) < 0) | ||
+ | die("error: ioctl"); | ||
+ | |||
+ | close(fd); | ||
+ | |||
+ | return 0; | ||
+ | } | ||
</pre></code> | </pre></code> |
Latest revision as of 09:08, 31 March 2013
Created by Dobril Todorov Marinov grade III - Computer Peripherals
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <errno.h>
#include <linux/input.h>
#include <linux/uinput.h>
#define die(str, args...) do { \
perror(str); \
exit(EXIT_FAILURE); \
} while(0)
int
main(void)
{
int fd,fd1;
struct uinput_user_dev uidev;
struct input_event ev;
int dx, dy;
fd = open("/dev/uinput", O_WRONLY | O_NONBLOCK);
if(fd < 0)
die("error: open");
if(ioctl(fd, UI_SET_EVBIT, EV_KEY) < 0)
die("error: ioctl");
if(ioctl(fd, UI_SET_KEYBIT, BTN_LEFT) < 0)
die("error: ioctl");
if(ioctl(fd, UI_SET_EVBIT, EV_REL) < 0)
die("error: ioctl");
if(ioctl(fd, UI_SET_RELBIT, REL_X) < 0)
die("error: ioctl");
if(ioctl(fd, UI_SET_RELBIT, REL_Y) < 0)
die("error: ioctl");
memset(&uidev, 0, sizeof(uidev));
snprintf(uidev.name, UINPUT_MAX_NAME_SIZE, "uinput-sample");
uidev.id.bustype = BUS_USB;
uidev.id.vendor = 0x1;
uidev.id.product = 0x1;
uidev.id.version = 1;
if(write(fd, &uidev, sizeof(uidev)) < 0)
die("error: write");
if(ioctl(fd, UI_DEV_CREATE) < 0)
die("error: ioctl");
struct input_event ev2;
fd1 = open("/dev/input/event3", O_RDONLY);
sleep(2);
while (1)
{
read(fd1, &ev2, sizeof(struct input_event));
if(ev2.type == 1 && ev2.code == 103 && (ev2.value == 1 || ev2.value == 2))
{ printf("key %i state %i || UP ||\n", ev2.code, ev2.value);
dx = 0;
dy = -5;
memset(&ev, 0, sizeof(struct input_event));
ev.type = EV_REL;
ev.code = REL_X;
ev.value = dx;
if(write(fd, &ev, sizeof(struct input_event)) < 0)
die("error: write");
memset(&ev, 0, sizeof(struct input_event));
ev.type = EV_REL;
ev.code = REL_Y;
ev.value = dy;
if(write(fd, &ev, sizeof(struct input_event)) < 0)
die("error: write");
memset(&ev, 0, sizeof(struct input_event));
ev.type = EV_SYN;
ev.code = 0;
ev.value = 0;
if(write(fd, &ev, sizeof(struct input_event)) < 0)
die("error: write");
}
if(ev2.type == 1 && ev2.code == 105 && (ev2.value == 1 || ev2.value == 2))
{ printf("key %i state %i || LEFT ||\n", ev2.code, ev2.value);
dx = -5;
dy = 0;
memset(&ev, 0, sizeof(struct input_event));
ev.type = EV_REL;
ev.code = REL_X;
ev.value = dx;
if(write(fd, &ev, sizeof(struct input_event)) < 0)
die("error: write");
memset(&ev, 0, sizeof(struct input_event));
ev.type = EV_REL;
ev.code = REL_Y;
ev.value = dy;
if(write(fd, &ev, sizeof(struct input_event)) < 0)
die("error: write");
memset(&ev, 0, sizeof(struct input_event));
ev.type = EV_SYN;
ev.code = 0;
ev.value = 0;
if(write(fd, &ev, sizeof(struct input_event)) < 0)
die("error: write");
}
if(ev2.type == 1 && ev2.code == 106 && (ev2.value == 1 || ev2.value == 2))
{ printf("key %i state %i || RIGHT ||\n", ev2.code, ev2.value);
dx = 5;
dy = 0;
memset(&ev, 0, sizeof(struct input_event));
ev.type = EV_REL;
ev.code = REL_X;
ev.value = dx;
if(write(fd, &ev, sizeof(struct input_event)) < 0)
die("error: write");
memset(&ev, 0, sizeof(struct input_event));
ev.type = EV_REL;
ev.code = REL_Y;
ev.value = dy;
if(write(fd, &ev, sizeof(struct input_event)) < 0)
die("error: write");
memset(&ev, 0, sizeof(struct input_event));
ev.type = EV_SYN;
ev.code = 0;
ev.value = 0;
if(write(fd, &ev, sizeof(struct input_event)) < 0)
die("error: write");
}
if(ev2.type == 1 && ev2.code == 108 && (ev2.value == 1 || ev2.value == 2))
{ printf("key %i state %i || DOWN ||\n", ev2.code, ev2.value);
dx = 0;
dy = 5;
memset(&ev, 0, sizeof(struct input_event));
ev.type = EV_REL;
ev.code = REL_X;
ev.value = dx;
if(write(fd, &ev, sizeof(struct input_event)) < 0)
die("error: write");
memset(&ev, 0, sizeof(struct input_event));
ev.type = EV_REL;
ev.code = REL_Y;
ev.value = dy;
if(write(fd, &ev, sizeof(struct input_event)) < 0)
die("error: write");
memset(&ev, 0, sizeof(struct input_event));
ev.type = EV_SYN;
ev.code = 0;
ev.value = 0;
if(write(fd, &ev, sizeof(struct input_event)) < 0)
die("error: write");
}
usleep(15000);
} close(fd);
if(ioctl(fd, UI_DEV_DESTROY) < 0)
die("error: ioctl");return 0;
}
by Samuil Goranov
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <errno.h>
#include <linux/input.h>
#include <linux/uinput.h>
#define die(str, args...) do { \
perror(str); \
exit(EXIT_FAILURE); \
} while(0)
int
main(void)
{
int fd;
struct uinput_user_dev uidev;
struct input_event ev;
int dx, dy;
int i;
fd = open("/dev/uinput", O_WRONLY | O_NONBLOCK);
if(fd < 0)
die("error: open");
if(ioctl(fd, UI_SET_EVBIT, EV_KEY) < 0)
die("error: ioctl");
if(ioctl(fd, UI_SET_KEYBIT, BTN_LEFT) < 0)
die("error: ioctl");
if(ioctl(fd, UI_SET_EVBIT, EV_REL) < 0)
die("error: ioctl");
if(ioctl(fd, UI_SET_RELBIT, REL_X) < 0)
die("error: ioctl");
if(ioctl(fd, UI_SET_RELBIT, REL_Y) < 0)
die("error: ioctl");
memset(&uidev, 0, sizeof(uidev));
snprintf(uidev.name, UINPUT_MAX_NAME_SIZE, "uinput-sample");
uidev.id.bustype = BUS_USB;
uidev.id.vendor = 0x1;
uidev.id.product = 0x1;
uidev.id.version = 1;
if(write(fd, &uidev, sizeof(uidev)) < 0)
die("error: write");
if(ioctl(fd, UI_DEV_CREATE) < 0)
die("error: ioctl");
sleep(2);
//=========================================
int fdd;
struct input_event evv;
fdd = open("/dev/input/event3", O_RDONLY);
if(fdd < 0) {
printf("error openning");
return 1;}
while(1){
read(fdd, &evv, sizeof(struct input_event));
if(evv.type ==1 ){
//printf("key %i state %i\n", evv.code, evv.value);
if(evv.code == 103){ dx = -0; dy = -10; }
if(evv.code == 106){ dx = +10; dy = -0; }
if(evv.code == 105){ dx = -10; dy = -0; }
if(evv.code == 108){ dx = -0; dy = +10; }
if(evv.code == 82){ puts("Habara habara"); }
//=========================================
//dx = -100;
//dy = -10;
memset(&ev, 0, sizeof(struct input_event));
ev.type = EV_REL;
ev.code = REL_X;
ev.value = dx;
if(write(fd, &ev, sizeof(struct input_event)) < 0)
die("error: write");
memset(&ev, 0, sizeof(struct input_event));
ev.type = EV_REL;
ev.code = REL_Y;
ev.value = dy;
if(write(fd, &ev, sizeof(struct input_event)) < 0)
die("error: write");
memset(&ev, 0, sizeof(struct input_event));
ev.type = EV_SYN;
ev.code = 0;
ev.value = 0;
if(write(fd, &ev, sizeof(struct input_event)) < 0)
die("error: write");
usleep(15000);
}}
if(ioctl(fd, UI_DEV_DESTROY) < 0)
die("error: ioctl");
close(fd);
return 0;
}