2012-03-19 11 views
5

¿Qué es una prueba de tontos método para encontrar el nodo de dispositivo caso para el hardware teclado o ratón?dispositivo de evento para el teclado, el ratón

Lo que he intentado es leer /proc/bus/input/dispositivos y la búsqueda de 'Teclado' o 'ratón' en el nombre del dispositivo, pero esto no funciona siempre, como el los nombres de los dispositivos varían mucho.

La otra opción era seleccionar los que tienen Manipuladores = kbd y Manipuladores = mouseX, pero en un ordenador portátil, hay otros dispositivos como 'botón de encendido', 'bus Vídeo' con Manipuladores = kbd también.

Respuesta

0

Todos los dispositivos de entrada tienen valor de &input_class en el campo dev->class. Para que pueda iterar sobre todos los dispositivos y verificar (dev->class == &input_class). Luego, para cada dispositivo de entrada que haya encontrado, necesitará ver si tiene un nombre válido de teclado/mouse (por ejemplo, "mouse", "mouse% d", etc.).

+0

Los nombres de los dispositivos varían mucho, y ¡no contiene necesariamente las palabras mouse, mouse o keyboard! – vikraman

0

Este es un ejemplo para encontrar evento de teclado:

const std::string get_dev_event_kbd() 
{ 
    std::string sline, sdev="/dev/input/", sH="", sBEV=""; 
    std::ifstream ifs("/proc/bus/input/devices"); 
    auto trimstr=[](std::string &s) 
    { 
     int i=0, n=s.length(); //left 
     while ((i<n)&&((s[i]==' ')||(s[i]=='\t'))) i++; 
     s=(i>0)?s.substr(i):s; 
     n=s.length()-1; i=n; //right 
     while ((i>0)&&((s[i]==' ')||(s[i]=='\t')||(s[i]=='\n')||(s[i]=='\r'))) i--; 
     s=(i<n)?s.substr(0,i+1):s; 
    }; 

    while (std::getline(ifs,sline).good()) 
    { 
     if (sline[0]=='H') 
     { 
      sH=sline.substr(sline.rfind(" event")); 
      trimstr(sH); 
     } 
     if (sline.substr(0,5)=="B: EV") 
     { 
      sBEV=sline.substr(sline.find('=')+1); 
      trimstr(sBEV); 
     } 
     if (sBEV=="120013") break; 
    } 
    sdev+=sH; 
    return sdev; 
} 

Ver: this y this para más detalles. Además, si obtiene el error 13 (Permiso denegado) cuando abre() en el dispositivo, verifique si el grupo 'entrada' está definido y agregue su usuario al grupo

Cuestiones relacionadas