Files
furui/model.c
2026-04-01 22:30:31 +09:00

76 lines
2.7 KiB
C

/*
This file is part of Furui.
Furui is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Furui is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Furui. If not, see <https://www.gnu.org/licenses/>.
*/
#include <stdio.h>
#include <stdlib.h>
#include "model.h"
static unsigned int keyboard_keys[] = {
KEY_ESC, KEY_GRAVE, KEY_1, KEY_2, KEY_3, KEY_4, KEY_5, KEY_6, KEY_7, KEY_8, KEY_9, KEY_0, KEY_MINUS, KEY_EQUAL, KEY_BACKSPACE,
KEY_TAB, KEY_Q, KEY_W, KEY_E, KEY_R, KEY_T, KEY_Y, KEY_U, KEY_I, KEY_O, KEY_P, KEY_LEFTBRACE, KEY_RIGHTBRACE, KEY_BACKSLASH,
KEY_CAPSLOCK, KEY_A, KEY_S, KEY_D, KEY_F, KEY_G, KEY_H, KEY_J, KEY_K, KEY_L, KEY_SEMICOLON, KEY_APOSTROPHE, KEY_ENTER,
KEY_LEFTSHIFT, KEY_Z, KEY_X, KEY_C, KEY_V, KEY_B, KEY_N, KEY_M, KEY_COMMA, KEY_DOT, KEY_SLASH, KEY_RIGHTSHIFT,
KEY_LEFTCTRL, KEY_LEFTALT, KEY_SPACE, KEY_RIGHTALT, KEY_RIGHTCTRL,
0
};
struct libevdev *furui_model_keyboard(void) {
struct libevdev *dev;
int i;
dev = libevdev_new();
if (dev == NULL) {
perror("libevdev_new");
exit(EXIT_FAILURE);
}
libevdev_set_name(dev, FURUI_MODEL_KEYBOARD_NAME);
libevdev_set_id_bustype(dev, BUS_VIRTUAL);
libevdev_enable_event_type(dev, EV_KEY);
libevdev_enable_event_type(dev, EV_SYN);
for (i = 0; keyboard_keys[i] != 0; i++) {
libevdev_enable_event_code(dev, EV_KEY, keyboard_keys[i], NULL);
}
libevdev_enable_event_code(dev, EV_SYN, SYN_REPORT, NULL);
return dev;
}
struct libevdev *furui_model_mouse(void) {
struct libevdev *dev;
dev = libevdev_new();
if (dev == NULL) {
perror("libevdev_new");
exit(EXIT_FAILURE);
}
libevdev_set_name(dev, FURUI_MODEL_MOUSE_NAME);
libevdev_set_id_bustype(dev, BUS_VIRTUAL);
libevdev_enable_event_type(dev, EV_KEY);
libevdev_enable_event_type(dev, EV_REL);
libevdev_enable_event_type(dev, EV_SYN);
libevdev_enable_event_code(dev, EV_KEY, BTN_LEFT, NULL);
libevdev_enable_event_code(dev, EV_KEY, BTN_RIGHT, NULL);
libevdev_enable_event_code(dev, EV_KEY, BTN_MIDDLE, NULL);
libevdev_enable_event_code(dev, EV_REL, REL_X, NULL);
libevdev_enable_event_code(dev, EV_REL, REL_Y, NULL);
libevdev_enable_event_code(dev, EV_REL, REL_HWHEEL, NULL);
libevdev_enable_event_code(dev, EV_REL, REL_WHEEL, NULL);
libevdev_enable_event_code(dev, EV_SYN, SYN_REPORT, NULL);
return dev;
}