Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. Mobile and Embedded
  4. Cannot rotate my touchscreen with QT_QPA_EVDEV_TOUCHSCREEN_PARAMETERS, using linuxfb plugin

Cannot rotate my touchscreen with QT_QPA_EVDEV_TOUCHSCREEN_PARAMETERS, using linuxfb plugin

Scheduled Pinned Locked Moved Solved Mobile and Embedded
qpatouchscreenlinuxfbqt5.5
4 Posts 3 Posters 10.3k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • B Offline
    B Offline
    Bibindoum
    wrote on 2 Jun 2016, 09:02 last edited by
    #1

    Hello everyone !

    I'm presently working on an I.MX6 device, with a NHD‐4.3‐480272MF display (including a touchscreen).
    I built Qt5.5 in order to make a suitable app for my target, with this configuration:

    ./configure -release -v -directfb -no-xkbcommon-evdev -no-xcb-xlib -no-sse2 -no-glib -no-pulseaudio -no-alsa -gtkstyle -linuxfb -no-iconv -evdev -no-libjpeg -plugin-sql-sqlite -no-dbus -no-libproxy -no-sql-mysql -no-sql-ibase -no-sql-oci -no-sql-odbc -no-sql-tds -no-xkbcommon-evdev -no-icu -no-fontconfig -opensource -confirm-license -no-pch -no-xcb -opengl es2 -make libs -make examples -device imx6 -compile-examples -device-option CROSS_COMPILE=arm-linux-gnueabihf- -sysroot /home/swuser/Appli/Prj/_bsp_imx6_linux/buildroot/buildroot-2015.08.1/output/host/usr/arm-buildroot-linux-gnueabihf/sysroot -no-gcc-sysroot -prefix /usr/lib/qt

    (I kept Directfb and Eglfs plugins, because i wanted to try them. They didn't wok for me)

    For now on, I'm having difficulties with the display and touchscreen orientations (both in landscape, and not in portrait as I wished) with linuxfb plugin.
    I found a patch working for display rotation on this site: http://borkedlabs.com/2015/06/01/qt5-linuxfb-rotation-for-lcds/ , but it doesn't apply for touchscreen rotation.
    I tried to set the environment variable QT_QPA_EVDEV_TOUCHSCREEN_PARAMETERS with "rotate=angle"
    but it didn't work for me. I'm presently spiking qt source code to understand where my mistake could be.

    here is my environment configuration:
    export QT_DEBUG_PLUGINS=1
    export QT_PLUGIN_PATH=/usr/lib/plugins
    export QT_QPA_PLATFORM_PLUGIN_PATH=/usr/lib/plugins/platforms
    export QT_QPA_PLATFORM=linuxfb
    export QT_QPA_GENERIC_PLUGINS=tslib:/dev/input/event0
    export QT_QPA_EVDEV_TOUCHSCREEN_PARAMETERS=/dev/input/event0:rotate=270
    export TSLIB_TSEVENTTYPE='INPUT'

    and i launch my app sending the command:
    ./myapp -platform linuxfb:fb=/dev/fb0:rotation=angle

    If anyone could give me some insight on what I have done wrong, i would be very pleased.

    1 Reply Last reply
    1
    • B Offline
      B Offline
      Bibindoum
      wrote on 8 Jun 2016, 08:27 last edited by
      #2

      Hi again guys !

      I've resolved my problem:
      Initially, I made a mistake mixing up Tslib and Evdevtouch plugins. Even though Evdevtouch seems more suitable for my application (a rotation plugin is already coded), I just can't make it work: when i used it, events were happening, but actions (such as buttons) were not even triggered.
      So I decided to use Tslib plugin (it already worked for me), and i applied a patch to it, in order to be able to rotate the touchscreen as I wanted. The only thing needed is to export a environment variable with the suitable parameters:

      export TSLIB_PARAMETERS=mode=heightxwidth:rotate=angle
      

      where height and width represent the format of your display, and angle, the rotation for the touchscreen (can only be set to values: 0, 90, 180, 270)

      an example of application could be:

      export TSLIB_PARAMETERS=mode=480x272:rotate=270
      export QT_QPA_GENERIC_PLUGINS=tslib:/dev/input/event0
      export QT_QPA_FB_TSLIB=1
      
      ./name_of_app -platform linuxfb:fb=/dev/fb0:rotation=270
      

      As i cannot join attached files, i post the patch here. But feel free to contact me if you want more info.

      --- qtslib.cpp	2016-06-07 14:39:05.664970271 +0200
      +++ ./qt5/qtbase/src/platformsupport/input/tslib/qtslib.cpp	2016-06-07 14:43:39.899464647 +0200
      @@ -35,6 +35,8 @@
       
       #include <QSocketNotifier>
       #include <QStringList>
      +#include <QString>
      +#include <QPointF>
       #include <QPoint>
       #include <QLoggingCategory>
       
      @@ -102,6 +104,30 @@
       void QTsLibMouseHandler::readMouseData()
       {
           ts_sample sample;
      +    QString spec = QString::fromLocal8Bit(qgetenv("TSLIB_PARAMETERS"));
      +    int RotateAngle;
      +    int Width;
      +    int Height;
      +    QString ModeArg;
      +
      +    if(spec.isEmpty()){
      +	RotateAngle = 0;
      +	Height = 480;
      +	Width = 272;
      +    }
      +
      +    QStringList args = spec.split(QLatin1Char(':'));
      +    for (int i = 0; i < args.count(); ++i) {
      +        if(args.at(i).startsWith(QLatin1String("rotate"))) {
      +	   QString rotateArg = args.at(i).section(QLatin1Char('='), 1, 1);
      +	   RotateAngle = rotateArg.toInt();
      +        }
      +	else if(args.at(i).startsWith(QLatin1String("mode"))) {
      +	   ModeArg = args.at(i).section(QLatin1Char('='), 1, 1);
      +	   Width = ModeArg.section(QLatin1Char('x'),0,0).toInt();
      +	   Height= ModeArg.section(QLatin1Char('x'),1,1).toInt();
      +        }
      +    }
       
           while (get_sample(m_dev, &sample, m_rawMode)) {
               bool pressed = sample.pressure;
      @@ -121,8 +147,29 @@
                   if (dx*dx <= 4 && dy*dy <= 4 && pressed == m_pressed)
                       continue;
               }
      -        QPoint pos(x, y);
      -
      +	QPoint pos(x,y);
      +	//Switch to apply rotation
      +	switch (RotateAngle) {
      +            case 0:
      +		pos.setX(x);
      +		pos.setY(y);
      +		break;
      +            case 90:
      +		pos.setX(y);
      +		pos.setY(Width-x);		
      +		break;
      +            case 180:
      +		pos.setX(Width-x);
      +		pos.setY(Height-y);
      +		break;
      +            case 270:
      +		pos.setX(Height-y);
      +		pos.setY(x);
      +		break;
      +            default:
      +                break;
      +        }
      +	
               QWindowSystemInterface::handleMouseEvent(0, pos, pos, pressed ? Qt::LeftButton : Qt::NoButton);
       
               m_x = x;
      
      1 Reply Last reply
      2
      • S Offline
        S Offline
        Silveyra
        wrote on 15 Feb 2019, 18:39 last edited by
        #3

        What output files once you updated qtslib.cpp did you transfer to your program? I am using embedded linux. Any information would be really helpful.

        Thanks.

        J 1 Reply Last reply 3 Apr 2019, 04:58
        0
        • S Silveyra
          15 Feb 2019, 18:39

          What output files once you updated qtslib.cpp did you transfer to your program? I am using embedded linux. Any information would be really helpful.

          Thanks.

          J Offline
          J Offline
          JeremyCha
          wrote on 3 Apr 2019, 04:58 last edited by
          #4

          @Silveyra Probably, libqtslibplugin.so file under directory qt/plugins/generic/
          Please correct me if I'm wrong.

          1 Reply Last reply
          0

          • Login

          • Login or register to search.
          • First post
            Last post
          0
          • Categories
          • Recent
          • Tags
          • Popular
          • Users
          • Groups
          • Search
          • Get Qt Extensions
          • Unsolved