4

Je suis en train de porter Android Gingerbread sur mon tableau personnalisé (avec un processeur Samsung S5PV210). J'ai un écran tactile avec une puce ESC7000. J'ai trouvé un pilote dans /kernel/drivers/input/touchscreen/usbtouchscreen.c. Cela a presque fonctionné, mais la gamme de bits, l'ordre et l'ordre des octets n'étaient pas bons dans les paquets USB. J'ai modifié le code pour obtenir la bonne position RAW (utilisé printk sur la console pour le voir) et maintenant cela fonctionne presque. Mes données vont de xmin, ymin à xmax, ymax est de 420,430 à 3650, 3650 alors qu'en théorie, il devrait être de 0,0 à 4095,4095. Ce n'est pas surprenant car une touche capacitive nécessite un étalonnage. C'est un étalonnage simple comme y = mx + b pour chaque axe (étalonnage linéaire simple). J'ai regardé autour dans les conducteurs et je ne peux pas savoir où l'étalonnage est traité. Il doit être programmable car il dépend de l'unité et doit être calibré pour chaque unité une fois dans la production du système. Je veux le faire nettoyer comme d'autres appareils Android. Quelqu'un sait où les informations d'étalonnage sont stockées dans un système Android? Où est le code effectuant le calcul de compensation. Toute recherche sur le Web à ce sujet donne des informations sur les personnes qui souhaitent recalibrer leur téléphone. Donc c'est inutile pour moi.Valeurs d'étalonnage de l'écran tactile, comment cela se fait-il dans Android/Kernel?

Répondre

3

Jetez un oeil au fil suivant: https://groups.google.com/forum/#!msg/rowboat/jlbwnmCIDg0/makHFil31pQJ

Sur EVM nous passons les valeurs calibrées (ou laissez-nous dire des valeurs codées en dur pour Xmin/max, Ymin/max et la résolution XY) du conducteur l'utilisateur espace.
...

événements bruts sont traités ici frameworks/base/libs/ui/InputReader.cpp

SingleTouchInputMapper::process(const RawEvent* rawEvent) traitera événements bruts pour un dispositif tactile unique. ABS_X et ABS_Y sont les valeurs transmises par le conducteur et ce sont les coordonnées absolues dans notre comme je vous l'ai dit dans mon courrier précédent.

Corrigez-moi si je me trompe, les téléphones Android afaik n'ont aucun mécanisme pour effectuer un étalonnage à partir de l'espace utilisateur. C'est une sorte de norme dans les téléphones Android pour envoyer les valeurs calibrées à partir du pilote lui-même.

Ce que je suggère est, utilisez tslib pour calibrer et laisser stocker les valeurs dans/etc/pointercal. Dans SingleTouchInputMapper::sync(nsecs_t when), calculez les coordonnées absolues en analysant les valeurs du fichier/etc/pointercal.

Questions connexes