};
-static int
-_e_info_input_create_keyboard_device(const char *dev_name)
+static void
+_e_info_input_set_keyboard(struct uinput_user_dev *uinput_dev, int uinput_fd)
{
- int fd_uinput = -1, nwrite = 0, i;
- struct uinput_user_dev dev_uinput = {0, };
-
- fd_uinput = open("/dev/uinput", O_WRONLY | O_NDELAY);
- EINA_SAFETY_ON_FALSE_RETURN_VAL(fd_uinput >= 0, -1);
-
- strncpy(dev_uinput.name, dev_name, UINPUT_MAX_NAME_SIZE - 1);
- dev_uinput.id.version = 4;
- dev_uinput.id.bustype = BUS_VIRTUAL;
-
- ioctl(fd_uinput, UI_SET_EVBIT, EV_KEY);
- ioctl(fd_uinput, UI_SET_EVBIT, EV_SYN);
- ioctl(fd_uinput, UI_SET_EVBIT, EV_MSC);
+ int i;
for (i = KEY_ESC; i <= KEY_MICMUTE; i++)
- ioctl(fd_uinput, UI_SET_KEYBIT, i);
+ ioctl(uinput_fd, UI_SET_KEYBIT, i);
for (i = KEY_OK; i <= KEY_LIGHTS_TOGGLE; i++)
- ioctl(fd_uinput, UI_SET_KEYBIT, i);
+ ioctl(uinput_fd, UI_SET_KEYBIT, i);
for (i = KEY_ALS_TOGGLE; i <= KEY_ONSCREEN_KEYBOARD; i++)
- ioctl(fd_uinput, UI_SET_KEYBIT, i);
-
- ioctl(fd_uinput, UI_SET_MSCBIT, MSC_SCAN);
-
- /* Create input device into input sub-system */
- nwrite = write(fd_uinput, &dev_uinput, sizeof(dev_uinput));
- if (nwrite < 0) WRN("Failed to write for create device using uinput (err: %m)\n");
-
- if (ioctl(fd_uinput, UI_DEV_CREATE))
- {
- WRN("Failed to create %s device (err: %m)", dev_name);
- close (fd_uinput);
- return -1;
- }
-
- return fd_uinput;
+ ioctl(uinput_fd, UI_SET_KEYBIT, i);
}
-static int
-_e_info_input_create_touch_device(const char *dev_name)
+static void
+_e_info_input_set_touch(struct uinput_user_dev *uinput_dev, int uinput_fd)
{
- int fd_uinput = -1, nwrite = 0;
- struct uinput_user_dev dev_uinput = {0, };
E_Output *output;
int w = 0, h = 0;
- fd_uinput = open("/dev/uinput", O_WRONLY | O_NDELAY);
- EINA_SAFETY_ON_FALSE_RETURN_VAL(fd_uinput >= 0, -1);
-
output = e_comp_screen_primary_output_get(e_comp->e_comp_screen);
e_output_size_get(output, &w, &h);
+ if ((w <= 0) || (h <= 0))
+ WRN("Failed to get output size for creating touch device in e_info. So set arbitrary output size [%d x %d]\n", w, h);
+
if (w <= 0) w = 4096;
if (h <= 0) h = 4096;
- WRN("Failed to get output size for creating touch device in e_info. So set arbitrary output size [%d x %d]\n", w, h);
-
- strncpy(dev_uinput.name, dev_name, UINPUT_MAX_NAME_SIZE - 1);
- dev_uinput.id.version = 4;
- dev_uinput.id.bustype = BUS_VIRTUAL;
-
- ioctl(fd_uinput, UI_SET_EVBIT, EV_KEY);
- ioctl(fd_uinput, UI_SET_EVBIT, EV_SYN);
- ioctl(fd_uinput, UI_SET_EVBIT, EV_MSC);
- ioctl(fd_uinput, UI_SET_EVBIT, EV_ABS);
-
- ioctl(fd_uinput, UI_SET_KEYBIT, BTN_TOUCH);
- ioctl(fd_uinput, UI_SET_ABSBIT, ABS_X);
- ioctl(fd_uinput, UI_SET_ABSBIT, ABS_Y);
- ioctl(fd_uinput, UI_SET_ABSBIT, ABS_MT_SLOT);
- ioctl(fd_uinput, UI_SET_ABSBIT, ABS_MT_TOUCH_MAJOR);
- ioctl(fd_uinput, UI_SET_ABSBIT, ABS_MT_TOUCH_MINOR);
- ioctl(fd_uinput, UI_SET_ABSBIT, ABS_MT_WIDTH_MAJOR);
- ioctl(fd_uinput, UI_SET_ABSBIT, ABS_MT_POSITION_X);
- ioctl(fd_uinput, UI_SET_ABSBIT, ABS_MT_POSITION_Y);
- ioctl(fd_uinput, UI_SET_ABSBIT, ABS_MT_TRACKING_ID);
- ioctl(fd_uinput, UI_SET_MSCBIT, MSC_SCAN);
-
- dev_uinput.absmin[ABS_X] = 0;
- dev_uinput.absmax[ABS_X] = w - 1;
- dev_uinput.absmin[ABS_Y] = 0;
- dev_uinput.absmax[ABS_Y] = h - 1;
- dev_uinput.absmin[ABS_MT_SLOT] = 0;
- dev_uinput.absmax[ABS_MT_SLOT] = 9;
- dev_uinput.absmin[ABS_MT_TOUCH_MAJOR] = 0;
- dev_uinput.absmax[ABS_MT_TOUCH_MAJOR] = 255;
- dev_uinput.absmin[ABS_MT_TOUCH_MINOR] = 0;
- dev_uinput.absmax[ABS_MT_TOUCH_MINOR] = 255;
- dev_uinput.absmin[ABS_MT_WIDTH_MAJOR] = 0;
- dev_uinput.absmax[ABS_MT_WIDTH_MAJOR] = 255;
- dev_uinput.absmin[ABS_MT_POSITION_X] = 0;
- dev_uinput.absmax[ABS_MT_POSITION_X] = w - 1;
- dev_uinput.absmin[ABS_MT_POSITION_Y] = 0;
- dev_uinput.absmax[ABS_MT_POSITION_Y] = h - 1;
- dev_uinput.absmin[ABS_MT_TRACKING_ID] = 0;
- dev_uinput.absmax[ABS_MT_TRACKING_ID] = 65535;
- dev_uinput.absmin[ABS_MT_ORIENTATION] = 0;
- dev_uinput.absmax[ABS_MT_ORIENTATION] = 2;
+ ioctl(uinput_fd, UI_SET_EVBIT, EV_ABS);
+
+ ioctl(uinput_fd, UI_SET_KEYBIT, BTN_TOUCH);
+ ioctl(uinput_fd, UI_SET_ABSBIT, ABS_X);
+ ioctl(uinput_fd, UI_SET_ABSBIT, ABS_Y);
+ ioctl(uinput_fd, UI_SET_ABSBIT, ABS_MT_SLOT);
+ ioctl(uinput_fd, UI_SET_ABSBIT, ABS_MT_TOUCH_MAJOR);
+ ioctl(uinput_fd, UI_SET_ABSBIT, ABS_MT_TOUCH_MINOR);
+ ioctl(uinput_fd, UI_SET_ABSBIT, ABS_MT_WIDTH_MAJOR);
+ ioctl(uinput_fd, UI_SET_ABSBIT, ABS_MT_POSITION_X);
+ ioctl(uinput_fd, UI_SET_ABSBIT, ABS_MT_POSITION_Y);
+ ioctl(uinput_fd, UI_SET_ABSBIT, ABS_MT_TRACKING_ID);
+
+ uinput_dev->absmin[ABS_X] = 0;
+ uinput_dev->absmax[ABS_X] = w - 1;
+ uinput_dev->absmin[ABS_Y] = 0;
+ uinput_dev->absmax[ABS_Y] = h - 1;
+ uinput_dev->absmin[ABS_MT_SLOT] = 0;
+ uinput_dev->absmax[ABS_MT_SLOT] = 9;
+ uinput_dev->absmin[ABS_MT_TOUCH_MAJOR] = 0;
+ uinput_dev->absmax[ABS_MT_TOUCH_MAJOR] = 255;
+ uinput_dev->absmin[ABS_MT_TOUCH_MINOR] = 0;
+ uinput_dev->absmax[ABS_MT_TOUCH_MINOR] = 255;
+ uinput_dev->absmin[ABS_MT_WIDTH_MAJOR] = 0;
+ uinput_dev->absmax[ABS_MT_WIDTH_MAJOR] = 255;
+ uinput_dev->absmin[ABS_MT_POSITION_X] = 0;
+ uinput_dev->absmax[ABS_MT_POSITION_X] = w - 1;
+ uinput_dev->absmin[ABS_MT_POSITION_Y] = 0;
+ uinput_dev->absmax[ABS_MT_POSITION_Y] = h - 1;
+ uinput_dev->absmin[ABS_MT_TRACKING_ID] = 0;
+ uinput_dev->absmax[ABS_MT_TRACKING_ID] = 65535;
+ uinput_dev->absmin[ABS_MT_ORIENTATION] = 0;
+ uinput_dev->absmax[ABS_MT_ORIENTATION] = 2;
+}
- /* Create input device into input sub-system */
- nwrite = write(fd_uinput, &dev_uinput, sizeof(dev_uinput));
- if (nwrite < 0) WRN("Failed to write for create device using uinput (err: %m)\n");
+static void
+_e_info_input_set_pointer(struct uinput_user_dev *uinput_dev, int uinput_fd)
+{
+ int i;
- if (ioctl(fd_uinput, UI_DEV_CREATE))
- {
- WRN("Failed to create %s device (err: %m)", dev_name);
- close (fd_uinput);
- return -1;
- }
+ ioctl(uinput_fd, UI_SET_EVBIT, EV_REL);
+
+ ioctl(uinput_fd, UI_SET_RELBIT, REL_X);
+ ioctl(uinput_fd, UI_SET_RELBIT, REL_Y);
+ ioctl(uinput_fd, UI_SET_RELBIT, REL_WHEEL);
+ ioctl(uinput_fd, UI_SET_RELBIT, REL_HWHEEL);
- return fd_uinput;
+ for (i = BTN_MISC; i <= BTN_TASK; i++)
+ ioctl(uinput_fd, UI_SET_KEYBIT, i);
}
-static int
-_e_info_input_create_pointer_device(const char *dev_name)
+int _e_info_input_create_device(const char *dev_name, unsigned int type)
{
- int fd_uinput = -1, nwrite = 0, i;
- struct uinput_user_dev dev_uinput = {0, };
-
- fd_uinput = open("/dev/uinput", O_WRONLY | O_NDELAY);
- EINA_SAFETY_ON_FALSE_RETURN_VAL(fd_uinput >= 0, -1);
+ int uinput_fd = -1, nwrite = 0;
+ struct uinput_user_dev uinput_dev = {0, };
- strncpy(dev_uinput.name, dev_name, UINPUT_MAX_NAME_SIZE - 1);
- dev_uinput.id.version = 4;
- dev_uinput.id.bustype = BUS_VIRTUAL;
+ uinput_fd = open("/dev/uinput", O_WRONLY | O_NDELAY);
+ EINA_SAFETY_ON_FALSE_RETURN_VAL(uinput_fd >= 0, -1);
- ioctl(fd_uinput, UI_SET_EVBIT, EV_KEY);
- ioctl(fd_uinput, UI_SET_EVBIT, EV_REL);
- ioctl(fd_uinput, UI_SET_EVBIT, EV_SYN);
- ioctl(fd_uinput, UI_SET_EVBIT, EV_MSC);
+ strncpy(uinput_dev.name, dev_name, UINPUT_MAX_NAME_SIZE - 1);
+ uinput_dev.id.version = 4;
+ uinput_dev.id.bustype = BUS_VIRTUAL;
- ioctl(fd_uinput, UI_SET_RELBIT, REL_X);
- ioctl(fd_uinput, UI_SET_RELBIT, REL_Y);
- ioctl(fd_uinput, UI_SET_RELBIT, REL_WHEEL);
- ioctl(fd_uinput, UI_SET_RELBIT, REL_HWHEEL);
+ ioctl(uinput_fd, UI_SET_EVBIT, EV_KEY);
+ ioctl(uinput_fd, UI_SET_EVBIT, EV_SYN);
+ ioctl(uinput_fd, UI_SET_EVBIT, EV_MSC);
+ ioctl(uinput_fd, UI_SET_MSCBIT, MSC_SCAN);
- for (i = BTN_MISC; i <= BTN_TASK; i++)
- ioctl(fd_uinput, UI_SET_KEYBIT, i);
-
- ioctl(fd_uinput, UI_SET_MSCBIT, MSC_SCAN);
+ if (type & E_INPUT_SEAT_KEYBOARD)
+ {
+ _e_info_input_set_keyboard(&uinput_dev, uinput_fd);
+ }
+ if (type & E_INPUT_SEAT_TOUCH)
+ {
+ _e_info_input_set_touch(&uinput_dev, uinput_fd);
+ }
+ if (type & E_INPUT_SEAT_POINTER)
+ {
+ _e_info_input_set_pointer(&uinput_dev, uinput_fd);
+ }
/* Create input device into input sub-system */
- nwrite = write(fd_uinput, &dev_uinput, sizeof(dev_uinput));
+ nwrite = write(uinput_fd, &uinput_dev, sizeof(uinput_dev));
if (nwrite < 0) WRN("Failed to write for create device using uinput (err: %m)\n");
- if (ioctl(fd_uinput, UI_DEV_CREATE))
+ if (ioctl(uinput_fd, UI_DEV_CREATE))
{
WRN("Failed to create %s device (err: %m)", dev_name);
- close (fd_uinput);
+ close (uinput_fd);
return -1;
}
- return fd_uinput;
+ return uinput_fd;
}
static int
if (_e_info_input.gen.fd >=0) return "Already opened device is exist";
if (type)
{
- if (type & E_INPUT_SEAT_KEYBOARD)
- {
- fd = _e_info_input_create_keyboard_device(name);
- _e_info_input.gen.virtual_dev = EINA_TRUE;
- _e_info_input.gen.fd = fd;
- }
- if (type & E_INPUT_SEAT_TOUCH)
- {
- fd = _e_info_input_create_touch_device(name);
- _e_info_input.gen.virtual_dev = EINA_TRUE;
- _e_info_input.gen.fd = fd;
- }
- if (type & E_INPUT_SEAT_POINTER)
- {
- fd = _e_info_input_create_pointer_device(name);
- _e_info_input.gen.virtual_dev = EINA_TRUE;
- _e_info_input.gen.fd = fd;
- }
+ fd = _e_info_input_create_device(name, type);
+ _e_info_input.gen.virtual_dev = EINA_TRUE;
+ _e_info_input.gen.fd = fd;
}
else
{