LINUX.ORG.RU

Отправка собственных событий в /dev/uinput. Эмуляция геймпада.

 , ,


0

1

Пытаюсь сэмулировать геймпад, отправляя собственные события в uinput. Клавиатура эмулируется отлично, а вот с геймпадом отчего-то беда. Его события не регистрируются. Что не так? Вот код: http://pastebin.com/NqA3jKJ3

Собственно, открываю файл:

    fd = open("/dev/uinput", O_WRONLY | O_NONBLOCK);
        if(fd < 0)
            die("error: open");

Разрешаю конкретные события:

    if(ioctl(fd, UI_SET_KEYBIT, BTN_A) < 0)
        die("error: ioctl");
     
    if(ioctl(fd, UI_SET_EVBIT, EV_SYN) < 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");

И отправляю события:

    memset(&ev, 0, sizeof(struct input_event));
                ev.type = EV_KEY;
                ev.code = BTN_A;
                ev.value = 1;
                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");

Что не так?



Последнее исправление: cetjs2 (всего исправлений: 2)

Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.