Interruptions de la souris

bueno_contigo -  
 Franklin -
Bonjour,

L'enseignant nous a demandé de chercher une commande (ou d'écrire un script) qui permet d'afficher à temps réels les interruptions produire par la souris.

Je m'explique, la solution doit afficher un numéro qui s'incrémente avec chaque mouvement du pointeur de la souris.

Sous Windows, il est possible d'utiliser Process Explorer, mais sous Linux aucune idée !!!

Merci pour toute tentative de collaboration

3 réponses

  1. swed
     
    Bonjour,

    Il te suffit de lire le fichier device associé à ta souris (probablement /dev/mouse).
    Pour tester, tu peux faire un "cat /dev/mouse", et bouger ta souris.

    Cordialement, M.
    2
    1. toufa
       
      mais il n'y a pas de mouse dans dev ?
      il y a des fichiers tty, tty0,tty1 et encore plus
      alors comment savoir le fichier qui correspond au fichier mouse??
      0
    2. swed
       
      Ca doit apparaître dans le dmesg, ou dans tes logs systèmes lorsque tu débranches/rebranches ta souris.
      C'est souvent /dev/input/mouse0 ou /dev/input/mice, ou quelquechose comme ca...
      0
    3. bueno_contigo
       
      Oui, lorsque j'ai fait un cat /dev/input/mice, j'ai eu des points d'interrogation qui s'affichent avec le mouvement de la souris; je peux dire que Swed a résolu la moitié du problème !!!

      Merci
      0
    4. toufa
       
      merci swed sa marche ton truc c'est ce que j'ai besoin
      0
  2. Franklin
     
    Bonjour ,, voila pour linux
    il fo comprendres les packets envoye par le driver sur linux il fais 8 bytes les bytes 1 et 2 sont les positions x et y

    #include <stdio.h>
    #include <unistd.h>
    #include <sys/fcntl.h>
    #include <errno.h>
    #include <sys/time.h>
    #include <math.h>

    #define nd 1
    int absolute (int x);

    int main(){

    unsigned char c = 0xFF; // -1

    printf( "d :: %d \n", c );

    char buf[100];
    int fd,i,j,n,retval;

    struct mouse_state{
    int buttons;
    char dx;
    char dy;
    } state;

    fd_set rfds;
    struct timeval st;
    int dx=0,dy=0;

    fd=open("/dev/psaux",O_RDONLY);
    if(fd<0){ printf("mouse open error\n"); return 1;}

    state.dx=0;
    state.dy=0;

    for(i=0;i<1000;){
    for(j=0;j<3;j++)
    {

    n=read(fd,buf+j,nd);
    printf("%02X ",(int)buf[j] & 0xff);

    }//EoFor j

    if(j<2)
    {
    if(j>0)
    printf("PS2 mouse read sequence error\n");
    continue;
    }

    printf("\n");
    // i++;
    if(buf[0] & 0x08){
    state.buttons=buf[0]&0x7;

    if(buf[0] & 0x40) printf("X overflow ");
    if(buf[0] & 0x80) printf("Y overflow ");

    if(buf[0] & 0x10)
    state.dx=buf[1];
    else
    state.dx=buf[1];

    if(buf[0] & 0x20)
    state.dy=buf[2];

    else state.dy=buf[2];

    // printf(" buttons=%02X \tdx=%d \tdy=%d\n",state.buttons,state.dx,state.dy);
    }//EoState
    else {
    printf("Error data received from ps2 mouse.\n");
    break;
    }

    if(state.dx<0)
    dx-=absolute(state.dx);
    else dx += state.dx;
    if(state.dy<0) dy-=absolute(state.dy);
    else dy += state.dy;

    printf("dx=%d \tdy=%d\n",dx,dy);

    }//EoFor i
    close(fd);
    return 0;
    }

    int absolute (int x) {

    return (x > 0 ? x : -x);
    }
    0
  3. Utilisateur anonyme
     
    Sur google en 5 secondes, j'ai trouvé ça:
    http://ensizero.ensimag.fr/forum/viewtopic.php?f=10&t=145

    ça peut peut-être être la bonne voie ^^
    -2
    1. bueno_contigo
       
      Est-ce que tu peux préciser les lignes de code à ajouter au programme pour que je puisse le compiler et l'exécuter sous shell ?

      Merci
      0