web-dev-qa-db-fra.com

xinput_calibrator: Comment les données d'étalonnage sont-elles générées?

Je joue avec cet écran tactile qui utilise des pilotes eGalax.
Le système d'exploitation de la carte à laquelle il est connecté est Ubuntu LTS 16.04.01

Pour une raison quelconque, je ne peux pas tout à fait bien régler le problème, mais ce n'est pas vraiment le but de cette question.

Lorsque je lance xinput_calibrator pour que le système tente de le calibrer comme par magie en tapant sur tous les petits points, il ne génère en réalité que 4 points de données séparés par des virgules, qui sont finalement insérés dans les propriétés xinput de ce périphérique (à savoir "Evdev Axis Calibration ").

J'aimerais comprendre comment ces 4 chiffres sont calculés.

Je ne trouve pas de ressource en ligne décente expliquant exactement ce que le programme fait pour obtenir ces chiffres, mais cette information pourrait être utile pour le dépannage, maintenant et à l'avenir.

À titre de référence, voici l'une de mes sessions d'étalonnage:

root@MyDevice:~# xinput_calibrator -v
DEBUG: XInputExtension version is 2.3
DEBUG: Skipping virtual master devices and devices without axis valuators.
DEBUG: Skipping device 'Virtual core XTEST pointer' id=4, does not report Absolute events.
Warning: multiple calibratable devices found, calibrating last one (eGalax Inc. USB TouchController)
        use --device to select another one.
DEBUG: Selected device: eGalax Inc. USB TouchController
DEBUG: Not usbtouchscreen calibrator: Not a usbtouchscreen device
DEBUG: Read axes swap value of 0.
DEBUG: Read InvertX=0, InvertY=0.
Calibrating EVDEV driver for "eGalax Inc. USB TouchController" id=12
        current calibration values (from XInput): min_x=2226, max_x=294 and min_y=402, max_y=2138
DEBUG: Found that 'eGalax Inc. USB TouchController' is a sysfs name.
DEBUG: Adding click 0 (X=0, Y=63)
DEBUG: Adding click 1 (X=696, Y=61)
DEBUG: Adding click 2 (X=0, Y=479)
DEBUG: Adding click 3 (X=685, Y=479)

Doing dynamic recalibration:
        Setting calibration data: 2504, 281, 375, 2386
DEBUG: Successfully applied axis calibration.
        --> Making the calibration permanent <--
DEBUG: Found that 'eGalax Inc. USB TouchController' is a sysfs name.
  copy the snippet below into '/etc/X11/xorg.conf.d/99-calibration.conf' (/usr/share/X11/xorg.conf.d/ in some distro's)
Section "InputClass"
        Identifier      "calibration"
        MatchProduct    "eGalax Inc. USB TouchController"
        Option  "Calibration"   "2504 281 375 2386"
        Option  "SwapAxes"      "0"
EndSection

Comme vous pouvez le constater, le calibrateur a lu mes données d'étalonnage précédentes sous la forme "min_x = 2226, max_x = 294 et min_y = 402, max_y = 2138", puis a généré les points de données "2504, 281, 375, 2386" en fonction de l'étalonnage session qui vient de se passer.

Comment les points de données "2504, 281, 375, 2386" ont-ils été calculés?

1
MD-7

Ces données sont lues à partir de evdev. Et, comme il s’agit d’un projet open-source, on peut même voir le code !

En fait, la ligne qui produit ces données est ici :

_printf("\tSetting calibration data: %d, %d, %d, %d\n", new_axys.x.min, new_axys.x.max, new_axys.y.min, new_axys.y.max);
_

Désormais, la fonction parent pour cela (_set_calibration_) est appelée dans finish_data . Ceci, à son tour, est appelé par finish .

En bref, il effectue une mise à l'échelle compliquée en fonction de la taille de l'écran et des points capturés, puis renvoie les valeurs de paramètre de la plage X/Y valide, qui correspond au nouveau "coin" défini de l'écran.

Fondamentalement, il prend la moyenne de tous vos clics d’étalonnage, détermine la mise à l’échelle, l’analyse plus en profondeur afin que X puisse la comprendre, puis l’arrondit en "jolies" valeurs. Si nécessaire, il inversera/échangera éventuellement les données d'étalonnage de l'écran tactile afin de s'adapter à la configuration de l'écran tactile.

0
Kaz Wolfe