Forum Programmation.autre programmation X11 erreur sur XOpenDevice

Posté par  .
Étiquettes :
0
21
sept.
2006
bonjour,

je précise tout de suite que je ne connais vraiement pas grand chose en programmation x-window... donc c'est un peu une bouteille à la mer pour moi

Sur une debian sarge, avec un Xfree 4.03 (le .03 semble important), je veux mettre en place un écran tactile de marque touchcreen, via un port usb (à l'aide d'un pont PL 2303).
J'ai suivi l'installation proposé par la société, qui est en fait la
réutilisation d'un drivers écris par Alessandro Rubini en date de
2003, version 1.2.
Le drivers semble fonctionner, car j'arrive à faire bouger le curseur à l'écran. Mais, gros problème, il ne semble pas calibré.
Et là commence mes problèmes, le programme fourni pour la calibration se nomme "onetouch_calib", je lance, des points de calibration apparaisse, j'appuie.. et paf plus rien.

En débuggan sur le programme je tombe sur la fonction suivante, qui semble ne pas marcher. je pense, mais c'est des supposition!, que la façon de rechercher les devices, puis de les initialiser à changer entre la version 4.02 et 4.03 (est-ce le cas?)

la fonction (que j'ai essayé de modifié pour comprendre comment ça fonctionné, voir commentaire):



static int finddevice(Display *disp)
{
XDeviceInfo *info;
int infolen, i;

info = XListInputDevices(disp, &infolen);
for (i=0; i<infolen; i++) {
printf("devices n° %d = [%s] id=[%d]
\n",i,info[i].name,info[i].id);
if (info[i].use != IsXExtensionDevice)
continue;
if (strstr(info[i].name, "touch"))
break;
if (strstr(info[i].name, "Touchscreen0")) //ici j'ai modifié le nom, pour que le device correspondent au élements enrvoyé plus haut
break;
}
if (i == infolen)
{ i = -1 /* not found */;
printf("Device not found, forced to be the first!\n"); //ici je force, car sur mon systeme il est en premier position , mais bien sur
sa plante après!
i = info[1].id;;
}

else
{
i = info[i].id;
printf("Device found!!\n"); //jamais le cas :( !!!!
}
/* XFreeDeviceList(info); */
return i;
}


A l'origine, le programme ne trouve pas le bon device, même en mettant le nom correctement. J'ai essayé de "forcer", mais sans succès. Voici la sortie écran après que le programme utilise la fonction XOpenDevice dans suite du programme.


Error in startup script: devices n° 0 = [Mouse1] id=[0]
devices n° 1 = [Touchscreen0] id=[1]
devices n° 2 = [keyboard] id=[2]
Device not found, forced to be the first!
X Error of failed request: BadDevice, invalid or uninitialized input
device
Major opcode of failed request: 144 (XInputExtension)
Minor opcode of failed request: 3 (X_OpenDevice)
Serial number of failed request: 10
Current serial number in output stream: 10
while executing
"exec $prg1 off "
(file "./onetouch_calib" line 175)


voilà... je suis un peu perdu... existe-il une subtilité sur les recherches puis initialisation des devices sous X11? ya t-il eu des changements? ou pire... je me plante complètement, le souci est ailleurs et je ne le vois pas????

merci pour vos suggestions :) !!!
  • # comprend pas trop

    Posté par  . Évalué à 1.

    bon, j'ai en partie résolu le problème, même si je ne comprend pas complétement les raisons "internes". Contrairement à tout ce qui peut être indiquer sur les doc, mon paramètrage dans le fichier XF86Config était incorrecte.
    lors de la déclaration du device une option est nécessaire:
    Option "SendCoreEvents"

    de plus la description du server layout à son importance, vu que le panel doit être déclarer avec les options "SendCoreEvents", et une souris doit être déclarer en "CorePointer"

    les autres modes de fonctionnement me renvoi systèmatiquement des erreurs quand à l'ouverture du device pour exploitation...

    J'ai rencontrer le même problème sur une dalle tactile DMC, le même genre de déclaration pose problème...

    Que sa puisse service à d'autre .... :)

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.