Exemplo n.º 1
0
static void linuxraw_joypad_poll(void)
{
   int i, ret;
   struct epoll_event events[MAX_USERS + 1];

retry:
   ret = epoll_waiting(events, MAX_USERS + 1, 0);
   if (ret < 0 && errno == EINTR)
      goto retry;

   for (i = 0; i < ret; i++)
   {
      if (events[i].data.ptr)
         linuxraw_poll_pad((struct linuxraw_joypad*)events[i].data.ptr);
      else
         handle_plugged_pad();
   }
}
Exemplo n.º 2
0
static void udev_input_poll(void *data)
{
   int i, ret;
   struct epoll_event events[32];
   udev_input_t *udev = (udev_input_t*)data;

   if (!udev)
      return;

   udev->mouse_x   = udev->mouse_y   = 0;
   udev->mouse_wu  = udev->mouse_wd  = 0;
   udev->mouse_whu = udev->mouse_whd = 0;

   while (udev->monitor && udev_hotplug_available(udev->monitor))
      udev_input_handle_hotplug(udev);

   ret = epoll_waiting(&udev->epfd, events, ARRAY_SIZE(events), 0);

   for (i = 0; i < ret; i++)
   {
      if (events[i].events & EPOLLIN)
      {
         int j, len;
         struct input_event input_events[32];
         udev_input_device_t *device = (udev_input_device_t*)events[i].data.ptr;

         while ((len = read(device->fd, input_events, sizeof(input_events))) > 0)
         {
            len /= sizeof(*input_events);
            for (j = 0; j < len; j++)
               device->handle_cb(udev, &input_events[j], device);
         }
      }
   }

   if (udev->joypad)
      udev->joypad->poll();
}