Как заставить ioctl в c ++ управлять только двумя из четырех кнопок, которые есть у моей мыши? - PullRequest
1 голос
/ 13 марта 2019

Вот часть кода:

extra_btn_fd = open("/dev/input/by-id/usb-Razer_Razer_Naga_2014-event-mouse", O_RDONLY); 

ioctl(extra_btn_fd, EVIOCGRAB, 1);

Проблема в том, что он получает контроль не только над 2 дополнительными кнопками (вперед и назад), но также над кнопками (и прокруткой, я думаю,).

Я пытаюсь получить контроль только над двумя кнопками «вперед» и «назад», а не за щелчками.

Ответы [ 2 ]

2 голосов
/ 13 марта 2019

Вы должны фильтровать события в вашем коде. Например, как показано ниже

while(1) {
  struct input_event event;
  read(extra_btn_fd, &event, sizeof(event));
  if (event.type == EV_KEY && (event.code == BTN_FORWARD || event.code == BTN_BACK) {
    printf("%d %d\n", event.type, event.code);
  }
}
0 голосов
/ 13 марта 2019

Решено с помощью xinput путем включения 2-х кнопок в карту кнопок следующим образом:

xinput set-button-map $NAGAID2 1 2 3 4 5 6 7 11 10 8 9 13 14 15 275 276
...