Problema con uinput (driver "virtual")

Iniciado por El_Java, 22 Abril 2011, 18:21 PM

0 Miembros y 1 Visitante están viendo este tema.

El_Java

Hola, edito mi anterior mensaje en el foro ya que no obtuve respuesta y asi ahorro espacio a elhacker

Estoy creando una aplicación y para que interactue con Ubuntu estoy haciendo uso de "linux/input.h" y "linux/uinput.h", el problema está en que me compila sin ningún tipo de error pero no hace nada, el fallo está hay casi seguro porque los he hecho un seguimiento a la aplicacion y registra los botones que pulso y todo, pero no ocurre nada.

Os dejo mi codigo para inicializar el driver.
Código (cpp) [Seleccionar]
int wmDevice::init_device(){
   //open uinput and creating descriptor
   if ((fd = open("/dev/uinput", O_WRONLY | O_NONBLOCK | O_NDELAY)) == 0){
       std::cout << "Unable to open /dev/uinput" << std::endl;
       return 1;
   }

   //configure uinput device parameters
   ret = ioctl(fd, UI_SET_EVBIT, EV_KEY);
   ret = ioctl(fd, UI_SET_EVBIT, EV_ABS);
  // ret = ioctl(fd, UI_SET_EVBIT, EV_SYN);

   ret = ioctl(fd, UI_SET_KEYBIT, KEY_SELECT); //left button mouse = A wiimote button wiimote
   ret = ioctl(fd, UI_SET_KEYBIT, KEY_CONTEXT_MENU); // right button mouse = B button wiimote
   ret = ioctl(fd, UI_SET_KEYBIT, KEY_SCROLLDOWN); // wiimote = 2
   ret = ioctl(fd, UI_SET_KEYBIT, KEY_SCROLLUP); //wiimote = 1
   ret = ioctl(fd, UI_SET_KEYBIT, KEY_POWER); //power (hold)
   ret = ioctl(fd, UI_SET_KEYBIT, KEY_ZOOM); //Zoom = +
   ret = ioctl(fd, UI_SET_KEYBIT, KEY_DELETEFILE); // (hold) -
   ret = ioctl(fd, UI_SET_KEYBIT, KEY_CLOSE); // -

   ret = ioctl(fd, UI_SET_ABSBIT, ABS_X);
   ret = ioctl(fd, UI_SET_ABSBIT, ABS_Y);

   //****************************************//

   memset(&userDev, 0, sizeof(userDev));

   strcpy(userDev.name, "wiimote");
   userDev.id.bustype = BUS_BLUETOOTH;
   userDev.id.vendor = 0x1234;
   userDev.id.product = 0x01;
   userDev.id.version = 1;

   userDev.absmax[ABS_X] = 1920;
   userDev.absmin[ABS_X] = 0;
   userDev.absmax[ABS_Y] = 1080;
   userDev.absmin[ABS_Y] = 0;

   //*****************************************//

   ret = write(fd, &userDev, sizeof(userDev));
   ret = ioctl(fd, UI_DEV_CREATE);

   return 0;
}

Ojala podais ayudarme! :D

El_Java


Mensaje antiguo:
CitarHola a todos.

Os explico mi problema: antesdeayer me dispuse a hacer un programa con el que usar el wiimote (mando de la wii) como si fuera un ratón ( se que existe ya, pero es para aprender), y bueno, ya he conseguido conectar el wiimote, enceder luces, vibración, etc etc...

Lo que no sé como hacer es para que funcione como si fuera un ratón, un amigo me ha comentado algo sobre /dev/input/mice.. yo estuve leyendo que se podia hacer mediante GLUT y SDL (aunque mi amigo insiste en que su metodo es mejor) y he encontrado documentación en inglés de los paquetes de bytes que envian los ratones PS/2 y por lo tanto creo que "debe" enviar el wiimote xD

Comoo veis, tengo tantas "opciones" que no se por donde empezar, si algun experimentado pudiera orientarme lo agradecería.. :P

Saludos!