Touch Display Microtouch Controller

L I V E Stammtisch ab 20:30 Uhr im Chat
  • Hallo Leute

    Ich habe einen älteren Touchscreen erhalten. Er hat einen microtouch EX11-ASIC USB-Controller. Auf Windows habe ich ihn zum Laufen gebracht, aber auf dem Raspberry mit folgender Version kriege ich es nicht hin:

    Der Touchscreen macht die falsche "Bewegung". Das heisst, wenn ich z.B. nach oben wische, dann geht der Zeiger nach links.

    Für Windows habe ich den Treiber von dieser Seite heruntergeladen: https://www.3m.com/3M/en_US/touch…kernel-patches/

    Ich habe dasselbe auch für Linux versucht, (Version: Linux (Single Touch) 32Bit) aber es funktioniert nicht. Wenn ich die heruntergeladene Datei mit wine starten will erhalte ich folgende Fehlermeldung:

    Code
    pi@raspberrypi:~ $ wine start /home/pi/Desktop/MT7.14.4.bin64
    Warning: memory above 0x80000000 doesn't seem to be accessible.
    Wine requires a 3G/1G user/kernel memory split to work properly.
    wine: failed to map the shared user data: c0000018

    Kann mir jemand helfen? Im Internet habe ich gefunden, dass man wenn möglich wine umgehen soll, aber ich sehe im Moment kein anderer Weg.

    Ich habe auch bereits hier ein anderer fast gleicher Eintrag gefunden, aber der hilft mir nicht weiter und er ist auch schon etwas älter (Touchscreen mit 3m Microtouch EX controller (USB))

    Grüsse

    Bern

  • Mit WINE wirst du da nichts reißen können. Das bildet den Userspace von Windows ab. Also all das, was Programme vom System brauchen. Ein Treiber ist per Definition hinter dieser Wasserscheide, und kann darob unter Linux (üblicherweise) nicht laufen. Vor allem aber kann Intel Code nicht unter ARM laufen.

    Aber dein Problem hört sich doch einfach nach einem Kalibrations-Problem an. Hast du das mal probiert?


    Gerade das hier gefunden:


    https://www.kernel.org/doc/html/latest/usb/mtouchusb.html


    Damit ist klar: du musst selbst Kalibrieren. Mit Linux geht das einfach über https://www.kernel.org/doc/html/v4.12/input/uinput.html - wenn man programmieren kann.

    Einmal editiert, zuletzt von hyle (18. Mai 2020 um 21:51) aus folgendem Grund: Ein Beitrag von __deets__ mit diesem Beitrag zusammengefügt.

  • Hallo @__deets__

    danke für die Antwort.

    Leider verstehe ich den zweiten Link nicht wirklich.

    Ich habe noch andere Kalibrierungserklärungen gesucht, aber z.B. bei diesem hier kann uTouch nicht installiert werden, weil es offenbar nicht existiert und auf dem RPI kann ich es auch nicht finden. Und wenn ich nur der andere Teil ohne die Installation von uTouch machen will fehlt die Datei /usr/share/X11/xorg.conf.d/10-evdev.conf .

    Gruss

    Bern

  • Na so wie ich den Treiber verstehe, gehen eben die normalen kalibrationen nicht. Du bekommst einfach rohe positionsdaten, und damit kannst du dann selbst was machen. Mein Vorschlag war nur, das dann in ein Input device per software zu wandeln. Das ist aber viel Arbeit und braucht ne Menge Durchhaltevermögen.

  • Ich häng mich da mal dran. Ich hab genau das gleiche Problem, dass ich mein Touch Panel kalibrieren will.

    Ich will mein Panel hochkant an die Wand schrauben und habe daher mit

    Code
    display_rotate=1

    das Bild gedreht. Nur leider kommt die Touch Eingabe nicht mit.

    Habe es schon mit dieser Anleitung probiert https://blog.h7d.de/2018/01/06/ras…n-um-90-drehen/, allerdings brauche ich wohl einen anderen Treiber als den FT5406, ich hab noch nicht ganz gecheckt, wie man das rausfindet und diesen dann richtig einbindet. Aber vielleicht kann ja Bern was mit dem Link anfangen.

  • Das ist natürlich sinnvoll, da einfach eine affine Transformation zu hinterlegen. Wenn man damit die Eingabe manipuliert bekommt, ist das ändern der Bewegungsrichtung ja nur noch ein Vorzeichen.


    Ich würde mal Das hier durchgehen um zu erfahren, welchen TouchTreiber du hast : https://wiki.ubuntu.com/Touchscreen

  • lsusb hatte ich schon probiert, Bus 001 Device 007: ID 043e:9aa3 LG Electronics USA, Inc. ist mein Gerät. Wie komme ich von da jetzt auf den Treiber?

    Bei

    Code
    xinput_calibrator --output-type xinput

    sagt er mir, dass kein kalibrierbares Gerät gefunden wird.

  • Zieh mal den USB-Stecker ab, und gib

    udevadm monitor -pek

    (ggf. mit sudo davor) ein, und dann stoepsel wieder ein. Und poste mal die Ausgabe.

  • Spoiler anzeigen

    monitor will print the received events for:

    KERNEL - the kernel uevent

    KERNEL[2371.818015] add /devices/platform/scb/http://fd500000.pcie/pci0000:00/000…/usb1/1-1/1-1.4 (usb)

    ACTION=add

    DEVPATH=/devices/platform/scb/http://fd500000.pcie/pci0000:00/000…/usb1/1-1/1-1.4

    SUBSYSTEM=usb

    DEVNAME=/dev/bus/usb/001/007

    DEVTYPE=usb_device

    PRODUCT=43e/9aa3/100

    TYPE=0/0/0

    BUSNUM=001

    DEVNUM=007

    SEQNUM=1705

    MAJOR=189

    MINOR=6

    KERNEL[2371.836902] add /devices/platform/scb/http://fd500000.pcie/pci0000:00/000…1-1.4/1-1.4:1.0 (usb)

    ACTION=add

    DEVPATH=/devices/platform/scb/http://fd500000.pcie/pci0000:00/000…1-1.4/1-1.4:1.0

    SUBSYSTEM=usb

    DEVTYPE=usb_interface

    PRODUCT=43e/9aa3/100

    TYPE=0/0/0

    INTERFACE=3/0/0

    MODALIAS=usb:v043Ep9AA3d0100dc00dsc00dp00ic03isc00ip00in00

    SEQNUM=1706

    KERNEL[2371.849605] add /devices/platform/scb/http://fd500000.pcie/pci0000:00/000…:043E:9AA3.0005 (hid)

    ACTION=add

    DEVPATH=/devices/platform/scb/http://fd500000.pcie/pci0000:00/000…:043E:9AA3.0005

    SUBSYSTEM=hid

    HID_ID=0003:0000043E:00009AA3

    HID_NAME=LGE LGE MultiTouch Device

    HID_PHYS=usb-0000:01:00.0-1.4/input0

    HID_UNIQ=TOUCH

    MODALIAS=hid:b0003g0002v0000043Ep00009AA3

    SEQNUM=1707

    KERNEL[2371.858414] add /devices/platform/scb/http://fd500000.pcie/pci0000:00/000…5/input/input16 (input)

    ACTION=add

    DEVPATH=/devices/platform/scb/http://fd500000.pcie/pci0000:00/000…5/input/input16

    SUBSYSTEM=input

    PRODUCT=3/43e/9aa3/110

    NAME="LGE LGE MultiTouch Device"

    PHYS="usb-0000:01:00.0-1.4/input0"

    UNIQ="TOUCH"

    PROP=2

    EV=b

    KEY=400 0 0 0 0 0 0 0 0 0 0

    ABS=2608000 3

    MODALIAS=input:b0003v043Ep9AA3e0110-e0,1,3,k14A,ra0,1,2F,35,36,39,mlsfw

    SEQNUM=1708

    KERNEL[2371.860556] add /devices/platform/scb/http://fd500000.pcie/pci0000:00/000…/input16/mouse1 (input)

    ACTION=add

    DEVPATH=/devices/platform/scb/http://fd500000.pcie/pci0000:00/000…/input16/mouse1

    SUBSYSTEM=input

    DEVNAME=/dev/input/mouse1

    SEQNUM=1709

    MAJOR=13

    MINOR=33

    KERNEL[2371.861798] add /devices/platform/scb/http://fd500000.pcie/pci0000:00/000…/input16/event1 (input)

    ACTION=add

    DEVPATH=/devices/platform/scb/http://fd500000.pcie/pci0000:00/000…/input16/event1

    SUBSYSTEM=input

    DEVNAME=/dev/input/event1

    SEQNUM=1710

    MAJOR=13

    MINOR=65

    KERNEL[2371.869347] add /class/usbmisc (class)

    ACTION=add

    DEVPATH=/class/usbmisc

    SUBSYSTEM=class

    SEQNUM=1711

    KERNEL[2371.869913] add /devices/platform/scb/http://fd500000.pcie/pci0000:00/000…usbmisc/hiddev0 (usbmisc)

    ACTION=add

    DEVPATH=/devices/platform/scb/http://fd500000.pcie/pci0000:00/000…usbmisc/hiddev0

    SUBSYSTEM=usbmisc

    DEVNAME=/dev/usb/hiddev0

    SEQNUM=1712

    MAJOR=180

    MINOR=96

    KERNEL[2371.870790] add /devices/platform/scb/http://fd500000.pcie/pci0000:00/000…/hidraw/hidraw1 (hidraw)

    ACTION=add

    DEVPATH=/devices/platform/scb/http://fd500000.pcie/pci0000:00/000…/hidraw/hidraw1

    SUBSYSTEM=hidraw

    DEVNAME=/dev/hidraw1

    SEQNUM=1713

    MAJOR=245

    MINOR=1

    KERNEL[2371.871649] bind /devices/platform/scb/http://fd500000.pcie/pci0000:00/000…:043E:9AA3.0005 (hid)

    ACTION=bind

    DEVPATH=/devices/platform/scb/http://fd500000.pcie/pci0000:00/000…:043E:9AA3.0005

    SUBSYSTEM=hid

    DRIVER=hid-multitouch

    HID_ID=0003:0000043E:00009AA3

    HID_NAME=LGE LGE MultiTouch Device

    HID_PHYS=usb-0000:01:00.0-1.4/input0

    HID_UNIQ=TOUCH

    MODALIAS=hid:b0003g0002v0000043Ep00009AA3

    SEQNUM=1714

    KERNEL[2371.872662] bind /devices/platform/scb/http://fd500000.pcie/pci0000:00/000…1-1.4/1-1.4:1.0 (usb)

    ACTION=bind

    DEVPATH=/devices/platform/scb/http://fd500000.pcie/pci0000:00/000…1-1.4/1-1.4:1.0

    SUBSYSTEM=usb

    DEVTYPE=usb_interface

    DRIVER=usbhid

    PRODUCT=43e/9aa3/100

    TYPE=0/0/0

    INTERFACE=3/0/0

    MODALIAS=usb:v043Ep9AA3d0100dc00dsc00dp00ic03isc00ip00in00

    SEQNUM=1715

    KERNEL[2371.874029] bind /devices/platform/scb/http://fd500000.pcie/pci0000:00/000…/usb1/1-1/1-1.4 (usb)

    ACTION=bind

    DEVPATH=/devices/platform/scb/http://fd500000.pcie/pci0000:00/000…/usb1/1-1/1-1.4

    SUBSYSTEM=usb

    DEVNAME=/dev/bus/usb/001/007

    DEVTYPE=usb_device

    DRIVER=usb

    PRODUCT=43e/9aa3/100

    TYPE=0/0/0

    BUSNUM=001

    DEVNUM=007

    SEQNUM=1716

    MAJOR=189

    MINOR=6

  • Dann wuerde ich mal an den Stellen, wo der Treibername (oder wohl eher Geraetename) bei xinput verwandt wurde "LGE LGE MultiTouch Device" probieren.

  • Danke Leute für die Hilfe

    Ich habe das selbe versucht, wie KalliTelb gemacht hat. Leider geht es bei mir nicht.

    Wenn ich das eingebe:

    Zieh mal den USB-Stecker ab, und gib

    udevadm monitor -pe

    bekomme ich folgende Ausgabe:

    Spoiler anzeigen

    monitor will print the received events for:

    KERNEL - the kernel uevent

    KERNEL[9036.493717] add /devices/platform/soc/http://3f980000.usb/usb1/1-1/1-1.3 (usb)

    ACTION=add

    DEVPATH=/devices/platform/soc/http://3f980000.usb/usb1/1-1/1-1.3

    SUBSYSTEM=usb

    DEVNAME=/dev/bus/usb/001/010

    DEVTYPE=usb_device

    PRODUCT=596/1/290

    TYPE=0/0/0

    BUSNUM=001

    DEVNUM=010

    SEQNUM=1378

    MAJOR=189

    MINOR=9

    KERNEL[9036.494183] add /devices/platform/soc/http://3f980000.usb/usb1/1-1/1-1.3/1-1.3:1.0 (usb)

    ACTION=add

    DEVPATH=/devices/platform/soc/http://3f980000.usb/usb1/1-1/1-1.3/1-1.3:1.0

    SUBSYSTEM=usb

    DEVTYPE=usb_interface

    PRODUCT=596/1/290

    TYPE=0/0/0

    INTERFACE=255/0/0

    MODALIAS=usb:v0596p0001d0290dc00dsc00dp00icFFisc00ip00in00

    SEQNUM=1379

    KERNEL[9037.781313] add /devices/platform/soc/http://3f980000.usb/usb1/1-1/1-1.3/1-1.3:1.0/input/input6 (input)

    ACTION=add

    DEVPATH=/devices/platform/soc/http://3f980000.usb/usb1/1-1/1-1.3/1-1.3:1.0/input/input6

    SUBSYSTEM=input

    PRODUCT=3/596/1/290

    NAME="MicroTouch Systems, Inc. MicroTouch USB Touchscreen - EX II"

    PHYS="usb-3f980000.usb-1.3/input0"

    PROP=0

    EV=b

    KEY=400 0 0 0 0 0 0 0 0 0 0

    ABS=3

    MODALIAS=input:b0003v0596p0001e0290-e0,1,3,k14A,ra0,1,mlsfw

    SEQNUM=1380

    KERNEL[9037.781784] add /devices/platform/soc/http://3f980000.usb/usb1/1-1/1-1.3…t/input6/mouse1 (input)

    ACTION=add

    DEVPATH=/devices/platform/soc/http://3f980000.usb/usb1/1-1/1-1.3…t/input6/mouse1

    SUBSYSTEM=input

    DEVNAME=/dev/input/mouse1

    SEQNUM=1381

    MAJOR=13

    MINOR=33

    KERNEL[9037.782063] add /devices/platform/soc/http://3f980000.usb/usb1/1-1/1-1.3…t/input6/event3 (input)

    ACTION=add

    DEVPATH=/devices/platform/soc/http://3f980000.usb/usb1/1-1/1-1.3…t/input6/event3

    SUBSYSTEM=input

    DEVNAME=/dev/input/event3

    SEQNUM=1382

    MAJOR=13

    MINOR=67

    KERNEL[9037.782357] bind /devices/platform/soc/http://3f980000.usb/usb1/1-1/1-1.3/1-1.3:1.0 (usb)

    ACTION=bind

    DEVPATH=/devices/platform/soc/http://3f980000.usb/usb1/1-1/1-1.3/1-1.3:1.0

    SUBSYSTEM=usb

    DEVTYPE=usb_interface

    DRIVER=usbtouchscreen

    PRODUCT=596/1/290

    TYPE=0/0/0

    INTERFACE=255/0/0

    MODALIAS=usb:v0596p0001d0290dc00dsc00dp00icFFisc00ip00in00

    SEQNUM=1383

    KERNEL[9037.782763] bind /devices/platform/soc/http://3f980000.usb/usb1/1-1/1-1.3 (usb)

    ACTION=bind

    DEVPATH=/devices/platform/soc/http://3f980000.usb/usb1/1-1/1-1.3

    SUBSYSTEM=usb

    DEVNAME=/dev/bus/usb/001/010

    DEVTYPE=usb_device

    DRIVER=usb

    PRODUCT=596/1/290

    TYPE=0/0/0

    BUSNUM=001

    DEVNUM=010

    SEQNUM=1384

    MAJOR=189

    MINOR=9

    Dann ändere ich die screenrotate.sh Datei so ab:

    Bash
    #!/bin/bash
    # Ungebungsvariable muss gesetzt sein da sonst keine Verbindung zum X-Server aufgebaut wird:
    export DISPLAY=:0.0
    # Toucheingabe um 90° drehen:
    xinput --set-prop 'MicroTouch Systems, Inc. MicroTouch USB Touchscreen - EX II' 'Coordinate Transformation Matrix' 0 1 0 -1 0 1 0 0 

    wenn ich die Datei ausführe erhalte ich folgendes:

    Code
    pi@raspberrypi:~ $ ~/screenrotate.sh
    X Error of failed request:  BadValue (integer parameter out of range for operation)
      Major opcode of failed request:  131 (XInputExtension)
      Minor opcode of failed request:  57 ()
      Value in failed request:  0x73
      Serial number of failed request:  20
      Current serial number in output stream:  21

    Vor der Installation der xinput-calibrator erschien die Meldung, dass es nicht gefunden wurde. Aber nun erscheint eben die Meldung, die oben steht.

    Ich verstehe aber das Problem nicht...? Kann mir jemand helfen?

  • Ich habe doch schon die Dokumentation des Treibers verlinkt, die besagt, dass der Kalibration nicht beherrscht. Also geht das eben nicht. Du musst die Informationen selbst auslesen, und selbst neue Events generieren, die Kalibriert sind. Wie schon ganz zu Beginn des Threads ausgefuehrt.

  • Hallo zusammen

    Ich habe es nun doch noch geschafft, ohne dass ich selber etwas programmieren musste – dem Service von 3M sei Dank.

    Ich habe einige Dateien erhalten, die ich alle unten angefügt habe.

    Am Schluss musste ich eigentlich nur die Datei erstellen, die im PDF Datei EX Kernel Driver unter dem Punkt „Simple Fix for Kernel Versions 2.6.29 and Later" beschrieben ist und die Zeile vom PDF-Dokument in diese Datei schreiben. Das heisst, dass ich die Datei usbtouchscreen.conf unter dem Pfad etc/modprobe.d mit Root-Rechten erstellte und in diese Datei nur die Zeile ”options usbtouchscreen hwcalib_xy=1” ebenfalls mit Root-Rechten über das Terminal schrieb.

    Anschliessend musste ich noch das ganze kalibrieren. Dies machte ich mit dem SDU-Tool (sdu_pi_v010.bin-Datei im Anhang). Das ist ein Diagnose-Tool von 3M. Danach funktionierte alles ohne Probleme.

    Nachfolgend sind Beschreibungen, die ich vom 3M-Support erhalten habe:

    Support von 3M =>„Das SDU ist unser Diagnose Tool. Damit kann man das Touch System auch kalibrieren. Die SDU_pi Version sollte auf Raspbian funktionieren, zumindest für Raspbian GNU/Linux 9. Die Orientierung könnte man auch über den Menüpunkt Orientation ändern:"

    -Das SDU-Tool funktioniert auch unter Raspbian 10, die Orientierung konnte ich über dieses Tool nicht ändern.

    Support von 3M => „Das Problem scheint zu sein, dass Linux die unskalierte Koordinaten benutzt, die der Kontroller mitsendet und nicht die kalibrierte, kompensierte Daten. Die angehängte PDF Datei EX Kernel Driver soll erklären, wie man das ändern kann.

    3M Touch Drivers and Kernel Patches

    Ich hoffe, dass ich vielleicht jemandem so helfen kann.

    Liebe Grüsse

    Bern93


    Edit: Dateianhänge entfernt, weil 3M das nicht erlaubt! Wenn das gebraucht wird, soll man sich doch bitte bei dem Support von 3M melden.

    Tut mir leid.

    2 Mal editiert, zuletzt von Bern93 (25. Juni 2020 um 11:39)

  • Hab ich gemacht - bisher leider noch keine Reaktion ...

    edit: ich habe eine Lösung gefunden:

    1. Installieren des evdev-Treibers

    Code
    sudo apt-get install xserver-xorg-input-evdev

    und Anpassen der /usr/share/X11/xorg.conf.d/40-libinput.conf

    Code
    Section "InputClass"        Identifier "libinput touchscreen catchall"        MatchIsTouchscreen "on"        MatchDevicePath "/dev/input/event*"        #Driver "libinput"        Driver "evdev"EndSection

    2. Kalibrieren des Touchers mit dem entsprechenden Programm (xinput_calibrator), die Ausgaben werden dann eingetragen in die Datei /usr/share/X11/xorg.conf.d/99-calibration.conf

    Code
    Section "InputClass"    Identifier  "calibration"    MatchProduct        "3M 3M USB Touchscreen - EX II"    Option      "Calibration"   "14350 1975 2420 14056"    Option      "SwapAxes"      "0"EndSection

    Man kann getrost mehrmals kalibrieren, bis alles zur Zufriedenheit läuft. Mit dem Eintragen der Ausgabe in die 99-calibration.conf wird es nur dauerhaft übernommen.

    Sollte mal eine rekalibrierung notwendig werden, so muß das Ergebnis natürlich wieder eingetragen werden ...

    Gruß, Christoph

    PS: Lösung im raspberry.org-forum gefunden ...

    2 Mal editiert, zuletzt von caldir65 (5. Februar 2021 um 20:40)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!