Activation de l'écran tactile de l'U810
Le 12 juillet 2008, à 11:59 par Ulhume...

La gestion de l'écran tactile est aussi fondamentale pour une unité mobile comme l'U810 que l'est la gestion de l'énergie. Et dans ce domaine, même si des améliorations importantes sont apparues ces dernières années, GNU/Linux, qui reste un OS originellement conçu pour des serveurs, est loin d'être consciliant. Mais avec quelque efforts, il est là aussi possible de faire des miracles. La liberté a un prix, et GNU/Linux nous le prouve régulièrement Wink

Les sources correspondant à l'U810 sont disponibles ici.

Tablet ou Touch Panel

L'écran tactile de l'U810 est géré par une puce de chez Sun Microsystems connectée sur le bus USB interne (Id: 0430:0501). Cette puce peut exploiter la zone sensible de l'écran selon deux modes distincts : Tablet et Touch Screen. Le passage d'un mode à l'autre se fait par le BIOS en allant dans le menu Advanced/Miscellaneous Configuration/Touch Panel Settings pour basculer de Tablet à Touch Panel et vice-versa.

La différence fondamentale entre ces deux modes tient à la manière de traduire les mouvements du stylet et la résolution utilisée. Dans le mode Touch Screen, la puce utilise la zone sensible à la manière d'un touchpad de portable. La résolution est faible et le mode de déplacement du curseur peut adapté au stylet ce qui donne un sentiment de manque de réactivité et de sensibilité.

En mode Tablet nous sommes plus proche de ce l'on attend d'un écran tactile car cette fois les mouvements du stylet sont traduits en un flot de coordonnées sur une résolution beaucoup plus grande.

Il semblerait donc logique de n'utiliser que le mode Tablet qui est clairement le mode natif de cette surface de pointage, mais manque de bol, c'est le mode Touch Screen qui est reconnu en standard par Linux/Xorg. Le mode Tablet doit lui passer par un module kernel expérimental.

Maintenant dans un mode comme dans l'autre, il va nous falloir un module Xorg capable de prendre en compte ce nouveau mode de saisie, il s'agit d'evtouch.

Notez que le Windows livré avec la machine est paramétré pour le mode Tablet exclusivement. C'est donc celui-là que l'on cherchera à faire fonctionner à tout prix si l'on reste lié à cet OS. Sinon, il faudra à chaque redémarrage, basculer d'un mode à l'autre.

Le module Xorg/evtouch

Le problème est que le paquet Mandriva pour ce module ne marche pas du tout. Pour commencer le module plante purement et simplement le serveur X au démarrage car il continue à faire appel à une fonction xf86AlwaysCore qui n'existe plus. Ensuite, et même si l'on corrige ce problème en recompilant à partir des sources du paquet, de nombreux patchs d'amélioration et de correction n'ont pas été appliqués. Comment je le sais ? Simplement parce que le paquet équivalent sur Debian, lui, les as appliqués et du coup evtouch y fonctionne à merveille.

En conséquence, ce n'est même pas la peine d'installer le paquet evtouch par les dépôts Mandriva, il va nous falloir le compiler nous-même. Pour simplifier la procédure, je vous propose de récupérer les sources que j'ai indiquées au début de l'article. Allez dans le dossier usr/src/evtouch. Vous y trouverez l'archive des sources de la version 0.8.7 et le patch. Ensuite procédez comme suit

  1. tar -jxvf xf86-input-evtouch-0.8.7.tar.bz2
  2. cd xf86-input-evtouch-0.8.7
  3. patch -p1 < ../xf86-input-evtouch-0.8.7-debian.patch
  4. ./configure --prefix=/usr --enable-evcalibrate --enable-udevinstall
  5. make
  6. make install

Et voilà, le module est installé.

L'écran Tactile en mode \"Touch Screen\"

Même s'il est peu adapté à ce type de surface, le Touch Screen a l'avantage de fonctionner directement sous Xorg/Linux. Une fois que vous avez changé le paramétrage dans le BIOS, la puce est automatiquement reconnue par le module kernel usbhid entraînant la création d'une nouvelle périphérique d'entrée /dev/input/by-id/usb-Fujitsu_Component_USB_Touch_Panel-event-joystick. Le Joystick nous rapelle bien que ce mode n'est pas le top pour ce type de surface.

Pour utiliser ce périphérique, il faut ajouter une entrée InputDevice dans le fichier /etc/xorg.conf :

  1. Section "InputDevice"
  2.         Identifier      "Touch Screen"
  3.         Driver          "evtouch"
  4.         Option          "Device" "/dev/input/by-id/usb-Fujitsu_Component_USB_Touch_Panel-event-joystick"
  5.         Option          "DeviceName" "Touchscreen"
  6.         Option          "MinX" "530"
  7.         Option          "MinY" "1075"
  8.         Option          "MaxX" "15260"
  9.         Option          "MaxY" "15800"
  10.         Option          "longtouched_action" "down"
  11.         Option          "longtouched_button" "3"
  12.         Option          "maybetapped_action" "click"
  13.         Option          "maybetapped_button" "1"
  14.         Option          "touched_drag" "1"
  15.         Option          "oneandahalftap_button" "0"
  16.         Option          "LongtouchTimer"  "500"
  17.         Option          "MoveLimit"  "18"
  18.         Option          "ReportingMode" "Raw"
  19.         Option          "Emulate3Buttons"
  20.         Option          "Emulate3Timeout" "50"
  21.         Option          "TapTimer" "90"
  22.         Option          "SendCoreEvents"
  23. #       Option          "Calibrate" "1"
  24. EndSection

Ceci fait, cherchez la section ServerLayout et ajoutez l'entrée correspondant au Touch Screen

  1.       Section "ServerLayout"
  2.            ...
  3.            InputDevice "Touch Screen" "SendCoreEvents"
  4.            ...
  5.     EndSection

Maintenant, relancez X et vérifiez que cela fonctionne. Si le curseur est décalé par rapport au stylet, c'est que votre zone tactile n'a pas le même calibrage que la mienne. Pour lancer un calibrage c'est assez peu pratique....

  1. Modifiez le fichiez /etc/X11/xorg.conf et décommentez la ligne Option "Calibrate" "1".
  2. Quittez X pour revenir en mode console.
  3. Loggez-vous en tant que root.
  4. Allez dans le dossier /usr/lib/xf86-input-evtouch.
  5. Lancez ./calibrate.sh.
  6. A l'affichage de la mire, déplacez le stylet sur la surface du centre vers les côtés. Des valeurs min et max pour X et Y devraient s'afficher et changer au fur et à mesure que vous tapez sur tous les bords de l'écran. Allez bien jusqu'au plastique de la coque.
  7. Lorsque les valeurs minimum et maximum ne bouge plus, notez les dans un coin.
  8. Quitter le calibrage par Ctrl-Alt-BS.
  9. Ouvrez alors votre fichier /etc/X11/xorg.conf et modifiez les valeurs MinX, MinY, MaxX et MaxY avec celles données par l'outil de calibrage.
  10. Re-commentez la ligne Option "Calibrate" "1"
  11. Sauvez et redémarrez X.

Normalement l'écran devrait être maintenant correctement calibré.

L'écran Tactile en mode \"Tablet\"

Vous l'aurez constaté, le mode Touch Screen n'est pas des plus efficace mais il a le mérite de fonctionner en toute situation et position d'écran. Si vous voulez cependant tester le mode Tablet, il vous faut commencer par redémarrer la machine et basculer sur Tablet dans le BIOS.

Une fois Linux redémarré, vous constatez que le périphérique joystick a disparu de /dev/input. C'est là qu'intervient le module kernel expérimental de Julian Brown que nous utilisons depuis de début. Allez dans le dossier /usr/src/tablet et procédez comme suit :

  1. tar -zxvf u810_tablet.tar.gz
  2. cd u810_tablet
  3. make install

Le module est maintenant sagement rangé près des autres. Maintenant pour qu'udev soit au courant, vous devez ajouter un fichier /etc/udev/rules.d/010_u810_tablet.rules, contenant simplement

SUBSYSTEM=="usb_device", SYSFS{idVendor}=="0430", SYSFS{idProduct}=="0530", ENV{ID_CLASS}="event"

Pour plus de sécurité, faite comme pour Windows et redémarrez la machine pour être sur qu'udev soit à jour. Ensuite pour charger le module, il nous faut d'abord décharger usbhid qui squatte déjà notre puce pour prendre sa place. Cela nous donne :

  • ##modprobe -r usbmouse
  • ##modprobe -r usbhid
  • ##modprobe -r u810_tablet
  • ##modprobe u810_tablet
  • ##modprobe usbhid
  • ##modprobe u810_tablet
  •  
  • ##dmesg
  • ..
  • input: Fujitsu Component USB Touch Panel as /class/input/input8
  • usbcore: registered new interface driver usb_u810_tablet
  • /root/u810_tablet/u810_tablet.c: v0.1E:Fujitsu U810 tablet driver
  •  
  • ##ls /dev/input/by-id/usb-Fujitsu_Component_USB_Touch_Panel-mouse
  • /dev/input/by-id/usb-Fujitsu_Component_USB_Touch_Panel-mouse@

Si dmesg vous donne bien ces résultats et si la périphérique est bien dans /dev/input/by-id, nous pouvons passez à evtouch

Comme pour le Touch Screen, nous allons devoir ajouter une nouvelle section InputDevice dans /etc/X11/xorg.conf. Pas la peine d'enlever l'ancienne, nous allons juste lui donner un nom différent.

  1. Section "InputDevice"
  2.         Identifier      "Tablet"
  3.         Driver          "evtouch"
  4.         Option          "Device"        "/dev/input/by-id/usb-Fujitsu_Component_USB_Touch_Panel-event-mouse"
  5.         Option          "DeviceName"    "touchscreen"
  6.         Option          "MinX"        "7069"
  7.         Option          "MinY"        "20000"
  8.         Option          "MaxX"        "389100"
  9.         Option          "MaxY"        "397042"
  10.         Option          "SendCoreEvents" "On"
  11.         Option          "longtouched_action" "down"
  12.         Option          "longtouched_button" "3"
  13.         Option          "maybetapped_action" "click"
  14.         Option          "maybetapped_button" "1"
  15.         Option          "touched_drag" "1"
  16.         Option          "oneandahalftap_button" "0"
  17.         Option          "LongtouchTimer"  "500"
  18.         Option          "MoveLimit"  "18"
  19.         Option          "ReportingMode" "Raw"
  20.         Option          "Emulate3Buttons"
  21.         Option          "Emulate3Timeout" "50"
  22.         Option          "TapTimer" "90"
  23.         Option          "SendCoreEvents" "On"
  24.         #Option         "Calibrate" "1"
  25. EndSection

Ceci fait, nous allons commenter l'ancien InputDevice pour ajouter le nouveau dans la section ServerLayout :

  1.       Section "ServerLayout"
  2.            ...
  3.            # InputDevice "Touch Screen" "SendCoreEvents"
  4.            InputDevice "Tablet" "SendCoreEvents"
  5.            ...
  6.     EndSection

Un redémarrage de X et c'est bon. Comme pour le mode Touch Screen, il se peut que le curseur soit décalé pour cause de mauvais calibrage. Appliquez donc la même procédure que plus haut pour trouver les bonnes valeurs.

A ce stade, tout devrait fonctionner et de manière beaucoup plus fluide qu'en mode Touch Screen.

Conclusion

Entre le mauvais paquet de la mandriva et le mode Tablet non reconnu, la prise en charge de l'écran tactile n'a pas été très simple. Mais maintenant, ça marche relativement bien. Il reste cependant en mode tablet un étrange problème de perte de sensibilité lorsque l'on se rapproche de l'écran, à suivre donc...

Commentaires

Dab, le 9 July, 2008 - 14:17

Ulhume: Je prend toujours beaucoup de plaisir à lire tes articles mais là tu exagère, tu en écris trop, du coup ma productivité baisse, irritant ainsi notre ami commun Wink ... tu sais celui qui me/nous transforme insidieusement en esclave des temps nouveaux.

Ulhume, le 9 July, 2008 - 14:30

Euhh je donne ma langue au chat là, je vois pas bien de qui tu parles...

Mais ok, je vais un peu arrêter Smiling il ne me reste plus qu'à porter le clavier français que j'avais fait pour le Z et c'est ok.

Dab, le 9 July, 2008 - 15:07

Je crois que tu le nomme naboleon Wink

Ulhume, le 9 July, 2008 - 15:19

Ou là oui !! le nain-femme Smiling Si encore c'était insidieux, vu le calibre du bourrin c'est un peu raté pour la dentelle Wink

malic , le 9 July, 2008 - 16:11

naboleon?

C'est le nom de l'U810?

Ulhume, le 9 July, 2008 - 16:23

@malic Mais non, c'est celui d'un nabot qui semble avoir trouvé sa voie il y a un peu plus d'un an de cela...

Dab, le 9 July, 2008 - 16:30

Insidieux dans le sens 'qui tend des pièges', rappelle toi la mine satisfaite des syndicats après leur premier contact avec la chose naine ... hier le projet de loi sur le temps de travail est passé comme une lettre à la poste ... compensation : Nada ! ... bosser+ pour rien de plus Arf, dèjà que je ne comtait pas en faire plus alors si c'est pour rien de plus, faut m'oublier Wink
@Malic: Celui dont on ne prononce pas le nom Wink

Ulhume, le 9 July, 2008 - 16:39

@Dab Travailler plus pour penser moins Wink Je commence à arrêter la liste des horreurs qu'il nous met en place, entre le 2ième EPR, la loi sur le sous-culture, la communication des données personelles aux états-unis, kadhafi, le déculotage face à la chine, bref, ça commence à filer le bourdon méchant.

jpmatrix , le 5 September, 2008 - 21:42

hello
j ai un petit soucis au .configure de la compilation de evtouch:
No package 'xorg-server' found
No package 'xproto' found

et impossible de trouver ces paquets dans rpmdrake.....
help?

jpmatrix , le 5 September, 2008 - 22:11

ha laisse tomber, c etait tout con ....
je continue

jpmatrix , le 5 September, 2008 - 23:55

ouf ca fonctionne ! merci encore pour ce tutoriel ! j aurais juste un petit recalibrage a effectuer pour mon u1010 Smiling

petite question : comment simuler le clic-droit avec le stylet ?

Ulhume, le 6 September, 2008 - 22:46

@jpmatrix avec X11 je ne sais pas comment faire cela. Moi j'ai déconnecté ce module tant que je n'ai pas trouvé un moyen de calibre définitivement l'écran.

Poster un nouveau commentaire

Le contenu de ce champ est gardé secret et ne sera pas montré publiquement.
  • Allowed HTML tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • To highlight piece of code, just surround them with <code type="language"> Your code &tl;/code>>. Language can be java,c++,bash,etc... Everything Geshi support.
  • Les lignes et les paragraphes vont à la ligne automatiquement.
  • Textual smileys will be replaced with graphical ones.
  • Les adresses de pages web et de messagerie électronique sont transformées en liens automatiquement.

Plus d'informations sur les options de formatage

Connexion utilisateur
Les derniers bavardages...