xinput_calibrator: Как калибровочные данные сгенерированы?

Я играл вокруг с этим сенсорным экраном, который использует eGalax драйверы.
ОС платы, с которой это подключено, является Ubuntu LTS 16.04.01

По некоторым причинам я не мог вполне калибровать его просто право, но это не действительно точка этого вопроса.

То, когда я выполняю xinput_calibrator для системы, чтобы попытаться волшебно калибровать его для меня путем удара всех небольших точек, это действительно просто генерирует 4 запятые, разделило точки данных, которые в конечном счете включены xinput свойства для того устройства (а именно, "Калибровка Оси Evdev").

Я хотел бы понять, как те 4 числа вычисляются.

Я не могу найти достойный ресурс, онлайн объяснив точно, что эта программа делает для предложения тех чисел, но эта информация могла бы быть полезной в поиске и устранении неисправностей сейчас и в будущем.

Как ссылка, вот одна из моих калибровочных сессий:

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

Таким образом, Вы видите, калибратор считал мои предыдущие калибровочные данные как "min_x=2226, max_x=294 и min_y=402, max_y=2138", и затем генерировал точки данных "2504, 281, 375, 2386" на основе калибровочной сессии, которая просто произошла.

Как были точки данных "2504, 281, 375, 2386" вычислены?

1
задан 13 January 2017 в 01:24

1 ответ

Эти данные считаны от evdev. И, поскольку это - проект с открытым исходным кодом, мы можем даже видеть код !

На самом деле, строка, которая производит эти данные, прямо здесь :

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

Теперь, родительская функция для этого (set_calibration) вызвана в finish_data . Это, в свою очередь назван finish .

Короче говоря, это делает некоторое сложное масштабирование на основе размера экрана и полученных точек, и затем возвращает значения параметров для допустимого диапазона X/Y, который является новым определенным "углом" экрана.

В основном, это берет среднее число всех Ваших калибровочных щелчков, определяет масштабирование, синтаксические анализы это в большее количество масштабирования так, чтобы X мог понять это и затем округлил его в "симпатичные" значения. В случае необходимости это дополнительно инвертирует/подкачает калибровочные данные с сенсорным экраном для установки установке сенсорного экрана.

0
ответ дан 8 December 2019 в 07:04

Другие вопросы по тегам:

Похожие вопросы: