xinput_calibrator: Como os dados de calibração são gerados?

1

Estou brincando com esse touchscreen que usa drivers eGalax.
O sistema operacional do fórum ao qual ele está conectado é o Ubuntu LTS 16.04.01

Por alguma razão, não consigo calibrar corretamente, mas esse não é exatamente o objetivo dessa pergunta.

Quando eu executo o xinput_calibrator para o sistema tentar calibrá-lo magicamente, atingindo todos os pontinhos, ele realmente gera 4 pontos de dados separados por vírgula, que são plugados nas propriedades de xinput desse dispositivo (ou seja, " Calibração do Eixo Evdev ").

Eu gostaria de entender como esses 4 números são calculados.

Não consigo encontrar um recurso on-line decente explicando exatamente o que este programa faz para obter esses números, mas essa informação pode ser útil na solução de problemas agora e no futuro.

Como referência, aqui está uma das minhas sessões de calibração:

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

Para que você possa ver, o calibrador leu meus dados de calibração anteriores como "min_x = 2226, max_x = 294 e min_y = 402, max_y = 2138" e, em seguida, gerou os pontos de dados "2504, 281, 375, 2386" com base na sessão de calibração que acabou de acontecer.

Como os pontos de dados "2504, 281, 375, 2386" foram calculados?

    
por MD-7 12.01.2017 / 23:00

1 resposta

0

Esses dados são lidos em evdev . E, como este é um projeto de código aberto, podemos até mesmo ver o código !

Na verdade, a linha que gera esses dados é aqui :

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);

Agora, a função pai para isso ( set_calibration ) é chamada em finish_data . Este, por sua vez, é chamado por finish .

Em suma, ele faz um escalonamento complicado baseado no tamanho da tela e nos pontos capturados, e retorna os valores dos parâmetros para o intervalo X / Y válido, que é o novo "canto" definido da tela.

Basicamente, ele pega a média de todos os seus cliques de calibração, determina o dimensionamento, analisa-o em mais escala para que o X possa entendê-lo e, em seguida, o arredonda para valores "bonitos". Se necessário, opcionalmente, reverterá / trocará os dados de calibração da tela de toque para ajustar a configuração da tela sensível ao toque.

    
por Kaz Wolfe 12.01.2017 / 23:14