Carte TQ6410 – Support des souris USB et des claviers AZERTY USB

La saga TQ6410 continue…Dernièrement la nappe de fils (4 fils) qui relie la dalle tactile à son contrôleur au dos de l’écran s’est coupée nette ! J’ai bien essayé de la réparer en grattant le plastique mais rien n’y fait et j’abime la nappe plus qu’autre chose. Donc direction e-bay pour l’achat d’une nouvelle dalle tactile (à environ 15€). La carte devait être utilisé pour présenter le travail d’un étudiant sur la commande de régulateur de température sur ModBUS, il faut donc trouver une autre solution pour interagir avec les programmes en Qt. La carte dispose d’un port USB1.1, nous allons donc utiliser ce port pour connecter un hub usb, une souris et un clavier.

Compilation d’un noyau avec support USB (clavier, souris, convertisseurs USB/Série)

Le problème est que j’avais optimisé le noyau linux de la carte en taille et en fonctionnalité. Le support USB n’était donc pas activé dans le noyau. La première des choses à faire est donc de modifier la configuration du noyau et relancer une compilation. Les options à activer sont les suivantes (que j’ai déterminé après moultes essais/erreurs) :

  • Device Drivers
    • USB support
      • Support for Host-side USB
        • USB annouce new devices (pour voir les messages du sous-système USB dans les messages noyau)
        • OHCI HCD support (support matériel pour le bus USB1.1)
    • HID Devices
      • Generic HID support
      • USB Human Interface Device (full HID) support
      • Special HID drivers (je n’ai pas testé sans cette option, peut-être est-ce inutile)
        • Load all HID drivers on hid core load + tous les drivers (en particulier Samsung)
    • Input device support
      • Mouse interface (accés à la souris par /dev/input/mice)
      • Keyboards
        • AT keyboard
      • Mice
        • PS/2 mouse + les options des différents constructeurs

Pour disposer de la configuration de compilation du noyau on peut l’inclure dans celui-ci. Je vais aussi avoir besoin d’utiliser des convertisseurs USB/Série. J’ai donc aussi activé:

  • General Setup -> Kernel .config support
    • Enable access to .config through /proc/config.gz
  • Device driver -> USB support
    • USB Serial Converter support
      • USB CP2101 UART bridge controller
      • USB FTDI Single Port Serial Driver
      • USB Prolific 2303 Single Port Serial Driver

On lance alors la compilation puis l’implantation du nouveau nouyau comme décrit dans les articles précédents. Au niveau des messages du noyau j’obtiens donc quelques lignes supplémentaires:

[21474536.995000] ohci_hcd: USB 1.1 ‘Open’ Host Controller (OHCI) Driver
[21474536.995000] s3c2410-ohci s3c2410-ohci: S3C24XX OHCI
[21474537.000000] s3c2410-ohci s3c2410-ohci: new USB bus registered, assigned bus number 1
[21474537.005000] s3c2410-ohci s3c2410-ohci: irq 79, io mem 0x74300000
[21474537.065000] usb usb1: configuration #1 chosen from 1 choice
[21474537.070000] hub 1-0:1.0: USB hub found
[21474537.070000] hub 1-0:1.0: 2 ports detected
[21474537.080000] usb usb1: New USB device found, idVendor=1d6b, idProduct=0001
[21474537.085000] usb usb1: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[21474537.090000] usb usb1: Product: S3C24XX OHCI
[21474537.095000] usb usb1: Manufacturer: Linux 2.6.28.6-IRIS-Turgot-O.Dartois ohci_hcd
[21474537.100000] usb usb1: SerialNumber: s3c24xx
[21474537.105000] usbcore: registered new interface driver usbserial
[21474537.110000] usbserial: USB Serial Driver core
[21474537.115000] USB Serial support registered for cp2101
[21474537.120000] usbcore: registered new interface driver cp2101
[21474537.125000] cp2101: v0.07:Silicon Labs CP2101/CP2102 RS232 serial adaptor driver
[21474537.130000] USB Serial support registered for FTDI USB Serial Device
[21474537.135000] usbcore: registered new interface driver ftdi_sio
[21474537.140000] ftdi_sio: v1.4.3:USB FTDI Serial Converters Driver
[21474537.145000] USB Serial support registered for pl2303
[21474537.155000] usbcore: registered new interface driver pl2303
[21474537.160000] pl2303: Prolific PL2303 USB to serial adaptor driver
[21474537.165000] mice: PS/2 mouse device common for all mice
[…]
[21474537.625000] usb 1-1: configuration #1 chosen from 1 choice
[21474537.625000] hub 1-1:1.0: USB hub found
[21474537.630000] hub 1-1:1.0: 4 ports detected
[21474537.645000] usb 1-1: New USB device found, idVendor=05e3, idProduct=0606
[21474537.645000] usb 1-1: New USB device strings: Mfr=0, Product=1, SerialNumber=0
[21474537.650000] usb 1-1: Product: USB2.0 Hub
INIT: version 2.88 booting
[21474537.930000] usb 1-1.3: new low speed USB device using s3c2410-ohci and address 3
Using makefile-style concurrent boot in runlevel S.
[21474538.025000] usb 1-1.3: no configurations
[21474538.025000] usb 1-1.3: can’t read configurations, error -22
[21474538.100000] usb 1-1.3: new low speed USB device using s3c2410-ohci and address 4
[21474538.220000] usb 1-1.3: configuration #1 chosen from 1 choice
[21474538.235000] input: Logitech USB-PS/2 Optical Mouse as /devices/platform/s3c2410-ohci/usb1/1-1/1-1.3/1-1.3:1.0/input/input1
[21474538.280000] generic-usb 0003:046D:C03E.0001: input: USB HID v1.10 Mouse [Logitech USB-PS/2 Optical Mouse] on usb-s3c24xx-1.3/input0
[21474538.285000] usb 1-1.3: New USB device found, idVendor=046d, idProduct=c03e
[21474538.295000] usb 1-1.3: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[21474538.300000] usb 1-1.3: Product: USB-PS/2 Optical Mouse
[21474538.310000] usb 1-1.3: Manufacturer: Logitech
[21474538.395000] usb 1-1.4: new low speed USB device using s3c2410-ohci and address 5
[21474538.520000] usb 1-1.4: configuration #1 chosen from 1 choice
[21474538.530000] input: LITEON Technology USB Multimedia Keyboard as /devices/platform/s3c2410-ohci/usb1/1-1/1-1.4/1-1.4:1.0/input/input2
[21474538.580000] generic-usb 0003:046D:C312.0002: input: USB HID v1.10 Keyboard [LITEON Technology USB Multimedia Keyboard] on usb-s3c24xx-1.4/input0
[21474538.590000] usb 1-1.4: New USB device found, idVendor=046d, idProduct=c312
[21474538.590000] usb 1-1.4: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[21474538.595000] usb 1-1.4: Product: USB Multimedia Keyboard
[21474538.600000] usb 1-1.4: Manufacturer: LITEON Technology

Au moment du test j’avais un hub usb2 défaillant mais j’ai quand même pu y brancher un clavier LiteON et une souris Logitech USB. Bon visiblement le matériel est reconnu. Voyons si tout se passe correctement dans l’espace utilisateur…

Support d’une souris USB, d’un clavier AZERTY USB dans l’espace utilisateur pour Qt Embedded

Sur l’écran de la TQ6410, j’ai le programme login qui attend une connexion. Je commence à taper et des caractères apparaissent à l’écran ! Le clavier est reconnu mais en mode QWERTY. Il va donc falloir installer tout ce qu’il faut pour passer en mode « francais »:

root@TQ6410-Iris:~# aptitude install keyboard-configuration
root@TQ6410-Iris:~# aptitude install console-setup
root@TQ6410-Iris:~# aptitude install console-data

Lors de la configuration des différents paquets précédents j’ai choisi à chaque fois les options ayant rapport avec le clavier français (fr-latin9). Après redémarrage, je dispose d’un clavier AZERTY. Pour ce qui est de la souris, je voulais vérifier que j’obtenais bien des données sans lancer un programme graphique. Une solution peut être la commande suivante qui affiche en héxadécimal les données reçues :

root@TQ6410-Iris:~# cat /dev/input/mice | hexdump

Si vous recevez des données lorsque vous bougez la souris, il y a de fortes chances que ca fonctionne 🙂 .

Bon maintenant il faut lancer un programme Qt qui active le framebuffer et qui à besoin de la souris et du clavier. J’ai donc recompilé mon programme de test de la carte ES ModBUS pour Qt embedded. Cependant avant de lancer le programme il faut lire la documentation de Qt sur les problèmes de clavier et de souris pour le monde embarqué :

Tout cela nous conduit à fixer les variables d’environnement suivantes:

export QWS_KEYBOARD= »TTY:/dev/tty0:keymap=fr.qmap »
export QWS_MOUSE_PROTO= »IntelliMouse:/dev/input/mice »

On lance l’application graphique. La souris réagit correctement mais le clavier est un QWERTY ! En sortant de l’application j’ai un message d’erreur qui me dit que le « fr.qmap » n’a pas été trouvé, c’est pour cette raison qu’il a basculé sur un clavier QWERTY. Recherche sur internet et il faut lire la page suivante : http://doc-snapshot.qt-project.org/4.8/qt-embedded-kmap2qmap.html

Donc sur ma station de développement dans le répertoire de Qt-everywhere je dois avoir un répertoire « tools » qui contient un utilitaire qui se nomme « kmap2map » : c’est bien le cas dans le répertoire éponyme. Je croos-compile donc cet utilitaire pour la TQ6410. L’exécutable, une fois compilé, se trouve dans « bin ». Je transfert le programme par scp et l’exécute sans paramètre pour visualiser l’aide. En gros il faut faire « ./kmap2qmap clavier.kmap clavier.qmap« . Pour ma part les claviers sont disponibles dans « /usr/share/keymaps/i386/azerty » (debian squeeze 6.0.4). Je tape donc les commandes suivantes:

root@TQ6410-Iris:~# cp /usr/share/keymaps/i386/azerty/fr-latin9.kmap.gz .
root@TQ6410-Iris:~# gunzip fr-latin9.kmap.gz
root@TQ6410-Iris:~# ./kmap2qmap fr-latin9.kmap fr.qmap

La génération du fichier « fr.qmap » vous donnera sûrement des erreurs ne pas en tenir compte. Relancez votre application, cette fois-ci le clavier doit être en français (du moins c’est le cas pour moi !)

Conclusion

On peut donc maintenant interagir avec les applications graphiques Qt et ceci sans dalle tactile. Cependant il ne faut pas perdre de vue que c’est la dalle tactile qui doit être utilisée in-fine !!!

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *