Touch screen under Embedded Linux requires a kernel module that receives the hardware signals and exports them as an input device to be read in user space by a library.
As an example, if you are using Boot to Qt image with Capacitive Touch Display 7" Parallel, your setup will look like the following flowchart:
On the other hand, if you are using Ångström X11 image with Resistive Touch Display 7" Parallel, your setup will look like the following flowchart:
In this article, touch screen calibration will be discussed applied to different libraries and its methods to correctly calibrate your touchscreen display.
Touch screen calibration almost always implies calibrating a resistive touch, since the capacitive touch panels usually are calibrated by default. It means that this article is most useful if you have a resistive touch panel.
Read the following article to learn more about Resistive Touch Screen on our Embedded Linux BSPs.
Select your BSP version from the tabs below:
BSP 5 provides Weston/Wayland support, as described in the BSP Layers and Reference Images for Yocto Project Software. The Reference Multimedia Image comes with weston-touch-calibrator
which can be used to calibrate the touch screen:
# weston-touch-calibrator
You may need to change the default Weston configuration to make it work, though. See how we have implemented the weston-touch-calibrator container on Touch Screen Calibration (Torizon) as an example implementation. For example, possibly you'll have to update the weston.ini.
On BSP 3, some SoMs are supported with X11 and others with Weston/Wayland, as described in the page BSP Layers and Reference Images for Yocto Project Software. Since there is only a console image, it is up to you add a calibration program, or to tweak values as explained in the corresponding graphics framework documentation.
BSP 2.x automatically performs a calibration upon first boot and will continue to ask for calibration in every boot until it is successfully completed.
The calibration application can be found in /usr/bin/xinput_calibrator
.
Torizon uses Weston and Libinput. Toradex provides a container for touch screen calibration. For more details read Touch Screen Calibration (Torizon).
Touch screen calibration concerning the input libraries is provided in this section.
As mentioned in libinput's wiki:
libinput is a library to handle input devices in Wayland compositors and to provide a generic X.Org input driver. It provides device detection, device handling, input device event processing and abstraction so minimize the amount of custom input code compositors need to provide the common set of functionality that users expect.
Concerning Toradex offerings, Libinput is used by:
Calibration
For static configuration via udev, one can set the LIBINPUT_CALIBRATION_MATRIX udev property as a environment variable with the following udev rule:
ENV{LIBINPUT_CALIBRATION_MATRIX}="1 0 0 0 1 0"
You can use the following command line examples to create a file with the udev rule.
Default matrix:
echo 'ENV{LIBINPUT_CALIBRATION_MATRIX}="1 0 0 0 1 0"' > /etc/udev/rules.d/libinput.rules
Invert Y axis only:
echo 'ENV{LIBINPUT_CALIBRATION_MATRIX}="1 0 0 0 -1 1"' > /etc/udev/rules.d/libinput.rules
Invert X axis only:
echo 'ENV{LIBINPUT_CALIBRATION_MATRIX}="-1 0 1 0 1 0"' > /etc/udev/rules.d/libinput.rules
Invert X and Y axis:
echo 'ENV{LIBINPUT_CALIBRATION_MATRIX}="-1 0 1 0 -1 1"' > /etc/udev/rules.d/libinput.rules
Further information on the LIBINPUT_CALIBRATION_MATRIX, please access the documentation.
Touch screen calibration concerning display servers (such as Xorg and Wayland) or standalone frameworks (such as Qt) is provided in this section.
The Qt framework supports different input methods. Regardless of this article's information, please also consult the official Qt documentation.
Boot to Qt
The Qt for Device Creation demo image uses libinput, therefore please refer to the previous libinput section for touchscreen calibration information.