Interruptions de la souris
bueno_contigo
-
Franklin -
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
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
-
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. -
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);
} -
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 ^^