Пытаюсь сэмулировать геймпад, отправляя собственные события в 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");
Что не так?