Difference between revisions of "Talk:Uinput"

From Ilianko
Line 63: Line 63:
 
     read(fd1, &ev2, sizeof(struct input_event));
 
     read(fd1, &ev2, sizeof(struct input_event));
  
     if(ev2.type == 1 && ev2.code == 103 && ev2.value == 1)
+
     if(ev2.type == 1 && ev2.code == 103 && (ev2.value == 1 || ev2.value == 2))
 
       { printf("key %i state %i || UP ||\n", ev2.code, ev2.value);
 
       { printf("key %i state %i || UP ||\n", ev2.code, ev2.value);
 
         dx = 0;
 
         dx = 0;
 
         dy = -5;
 
         dy = -5;
 +
       
 
          
 
          
 
          
 
          
Line 91: Line 92:
 
}
 
}
 
 
if(ev2.type == 1 && ev2.code == 105 && ev2.value == 1)
+
if(ev2.type == 1 && ev2.code == 105 && (ev2.value == 1 || ev2.value == 2))
 
       { printf("key %i state %i || LEFT ||\n", ev2.code, ev2.value);
 
       { printf("key %i state %i || LEFT ||\n", ev2.code, ev2.value);
 
         dx = -5;
 
         dx = -5;
Line 120: Line 121:
 
 
 
 
if(ev2.type == 1 && ev2.code == 106 && ev2.value == 1)
+
if(ev2.type == 1 && ev2.code == 106 && (ev2.value == 1 || ev2.value == 2))
 
       { printf("key %i state %i || RIGHT ||\n", ev2.code, ev2.value);
 
       { printf("key %i state %i || RIGHT ||\n", ev2.code, ev2.value);
 
         dx = 5;
 
         dx = 5;
Line 149: Line 150:
 
 
 
 
if(ev2.type == 1 && ev2.code == 108 && ev2.value == 1)
+
if(ev2.type == 1 && ev2.code == 108 && (ev2.value == 1 || ev2.value == 2))
 
       { printf("key %i state %i || DOWN ||\n", ev2.code, ev2.value);
 
       { printf("key %i state %i || DOWN ||\n", ev2.code, ev2.value);
 
         dx = 0;
 
         dx = 0;
Line 183: Line 184:
 
         die("error: ioctl");return 0;
 
         die("error: ioctl");return 0;
 
}
 
}
 +
  
  
  
 
</pre></code>
 
</pre></code>

Revision as of 09:29, 14 April 2011

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;
}