Forum: PC-Programmierung (Multi)Touch Treiber / Simulation, Raspberry Pi


von Epi K. (epi_k)


Lesenswert?

Hallo,

Ich versuche ein Touch oder Multi-Touch zu erzeugen auf Basis eines 
C-Code der eine Mausbewegung simuliert hat (das/Maus hat funktioniert).

Ich habe nun überall statt REL, ABS eingetragen und die Werte die gemäss 
protocol siehe => 
https://www.kernel.org/doc/Documentation/input/multi-touch-protocol.txt 
nötig wären...


Mit "evtest" erhalte ich jetzt aber nur X und Y ohne ABS_MT_SLOT und 
ohne ABS_MT_TRACKING_ID... nur wieso jetzt?? (siehe auch Code ganz 
unten) Das ist vermutlich ein Problem weil auch TSLIB (siehe weiter 
unten) die Simulation nicht als Touch erfasst:

***********************************
Event: time 1483041111.172596, type 3 (EV_ABS), code 53 
(ABS_MT_POSITION_X), value 8
Event: time 1483041111.172596, type 3 (EV_ABS), code 54 
(ABS_MT_POSITION_Y), value 8
Event: time 1483041111.172596, -------------- EV_SYN ------------
Event: time 1483041111.187699, type 3 (EV_ABS), code 53 
(ABS_MT_POSITION_X), value 9
Event: time 1483041111.187699, type 3 (EV_ABS), code 54 
(ABS_MT_POSITION_Y), value 9
Event: time 1483041111.187699, -------------- EV_SYN ------------
Event: time 1483041111.202803, type 3 (EV_ABS), code 53 
(ABS_MT_POSITION_X), value 10
Event: time 1483041111.202803, type 3 (EV_ABS), code 54 
(ABS_MT_POSITION_Y), value 10
Event: time 1483041111.202803, -------------- EV_SYN ------------
Event: time 1483041111.217907, type 3 (EV_ABS), code 53 
(ABS_MT_POSITION_X), value 11
Event: time 1483041111.217907, type 3 (EV_ABS), code 54 
(ABS_MT_POSITION_Y), value 11
Event: time 1483041111.217907, -------------- EV_SYN ------------
***********************************


Desweiteren erhalte ich bei "TSLIB" ein Fehler, wieso??:

***********************************
pi@raspberrypi:~ $ sudo TSLIB_FBDEVICE=/dev/fb0 
TSLIB_TSDEVICE=/dev/input/event0 ts_calibrate
xres = 1920, yres = 1080
selected device is not a touchscreen I understand
***********************************


Code:
***********************************
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <errno.h>
#include <linux/input.h>
#include <linux/uinput.h>
#define die(str, args...) do { \
        perror(str); \
        exit(EXIT_FAILURE); \
    } while(0)

int main(void) {
    int fd;
    struct uinput_user_dev uidev;
    struct input_event ev;
    int dx, dy;
    int i;
    fd = open("/dev/uinput", O_WRONLY | O_NONBLOCK);
    if(fd < 0)
        die("error: open");
    if(ioctl(fd, UI_SET_EVBIT, EV_KEY) < 0)
        die("error: ioctl");
    if(ioctl(fd, UI_SET_KEYBIT, BTN_TOUCH) < 0)
        die("error: ioctl");
    if(ioctl(fd, UI_SET_EVBIT, EV_ABS) < 0)
        die("error: ioctl");
    if(ioctl(fd, UI_SET_ABSBIT, ABS_MT_POSITION_X) < 0)
        die("error: ioctl");
    if(ioctl(fd, UI_SET_ABSBIT, ABS_MT_POSITION_Y) < 0)
        die("error: ioctl");
    if(ioctl(fd, UI_SET_ABSBIT, ABS_MT_SLOT) < 0)
        die("error: ioctl");
    if(ioctl(fd, UI_SET_ABSBIT, ABS_MT_TRACKING_ID) < 0)
        die("error: ioctl");

    memset(&uidev, 0, sizeof(uidev));
    snprintf(uidev.name, UINPUT_MAX_NAME_SIZE, "uinput-sample");
    uidev.id.bustype = BUS_USB;
    uidev.id.vendor = 0x1;
    uidev.id.product = 0x1;
    uidev.id.version = 1;

    uidev.absmax[ABS_MT_SLOT] = 5;

    uidev.absmax[ABS_MT_POSITION_X] = 1920;
    uidev.absmin[ABS_MT_POSITION_X] = 0;

    uidev.absmax[ABS_MT_POSITION_Y] = 1080;
    uidev.absmin[ABS_MT_POSITION_Y] = 0;

    if(write(fd, &uidev, sizeof(uidev)) < 0)
        die("error: write");
    if(ioctl(fd, UI_DEV_CREATE) < 0)
        die("error: ioctl");
    sleep(2);


    while(1)
    {


       for(i = 0; i < 20; i++)
        {
            memset(&ev, 0, sizeof(struct input_event));
            ev.type = EV_ABS;
            ev.code = ABS_MT_SLOT;
            ev.value = 0;
            if(write(fd, &ev, sizeof(struct input_event)) < 0)
                die("error: write");

            memset(&ev, 0, sizeof(struct input_event));
            ev.type = EV_ABS;
            ev.code = ABS_MT_TRACKING_ID;
            ev.value = 1;
            if(write(fd, &ev, sizeof(struct input_event)) < 0)
                die("error: write");

            memset(&ev, 0, sizeof(struct input_event));
            ev.type = EV_ABS;
            ev.code = ABS_MT_POSITION_X;
            ev.value = i;
            if(write(fd, &ev, sizeof(struct input_event)) < 0)
                die("error: write");

            memset(&ev, 0, sizeof(struct input_event));
            ev.type = EV_ABS;
            ev.code = ABS_MT_POSITION_Y;
            ev.value = i;
            if(write(fd, &ev, sizeof(struct input_event)) < 0)
                die("error: write");

            memset(&ev, 0, sizeof(struct input_event));
            ev.type = EV_SYN;
            ev.code = SYN_REPORT;
            ev.value = 0;
            if(write(fd, &ev, sizeof(struct input_event)) < 0)
                die("error: write");

            usleep(15000);
        }
        sleep(1);
    }

    sleep(2);
    if(ioctl(fd, UI_DEV_DESTROY) < 0)
        die("error: ioctl");
    close(fd);
    return 0;
}
***********************************


Zwei vorangehenden Themen bzgl. Lösungen für Touch-Erzeugung:

Beitrag "X11, xlib, multi touch simulation"
Beitrag "evdev, mousemove, multitouch auf Raspberry"

Mit diesem einfachen I2C Read Code kann ich simpel X und Y Daten 
auslesen:
Beitrag "I2C read mit C-Programm Raspberry PI"

von Epi K. (epi_k)


Lesenswert?

irgendwie liegt es wohl daran das beim 2.touch x und y keine wechselnden 
werte erhalten habe, habe auch noch usleeps(8000) eingefügt, 
aufjedenfall erhalte  mit evtest was vernünftiges, siehe unten. NUR... 
wie teste ich das? Mit tslib habe ich kein erfolg? evtl. Paint, aber 
welches Paint unterstützt touch?

Aufjedenfall funktionieren html5 touch programme nicht :-(

evtest:
************************
Event: time 1483050928.364221, type 3 (EV_ABS), code 47 (ABS_MT_SLOT), 
value 0
Event: time 1483050928.364221, type 3 (EV_ABS), code 53 
(ABS_MT_POSITION_X), value 507
Event: time 1483050928.364221, type 3 (EV_ABS), code 54 
(ABS_MT_POSITION_Y), value 507
Event: time 1483050928.364221, type 3 (EV_ABS), code 47 (ABS_MT_SLOT), 
value 1
Event: time 1483050928.364221, type 3 (EV_ABS), code 53 
(ABS_MT_POSITION_X), value 707
Event: time 1483050928.364221, type 3 (EV_ABS), code 54 
(ABS_MT_POSITION_Y), value 707
Event: time 1483050928.364221, ++++++++++++++ EV_REL ++++++++++++
Event: time 1483050928.364221, -------------- EV_SYN ------------
Event: time 1483050928.460511, type 3 (EV_ABS), code 47 (ABS_MT_SLOT), 
value 0
Event: time 1483050928.460511, type 3 (EV_ABS), code 53 
(ABS_MT_POSITION_X), value 508
Event: time 1483050928.460511, type 3 (EV_ABS), code 54 
(ABS_MT_POSITION_Y), value 508
Event: time 1483050928.460511, type 3 (EV_ABS), code 47 (ABS_MT_SLOT), 
value 1
Event: time 1483050928.460511, type 3 (EV_ABS), code 53 
(ABS_MT_POSITION_X), value 708
Event: time 1483050928.460511, type 3 (EV_ABS), code 54 
(ABS_MT_POSITION_Y), value 708
Event: time 1483050928.460511, ++++++++++++++ EV_REL ++++++++++++
Event: time 1483050928.460511, -------------- EV_SYN ------------
Event: time 1483050928.556866, type 3 (EV_ABS), code 47 (ABS_MT_SLOT), 
value 0
Event: time 1483050928.556866, type 3 (EV_ABS), code 53 
(ABS_MT_POSITION_X), value 509
Event: time 1483050928.556866, type 3 (EV_ABS), code 54 
(ABS_MT_POSITION_Y), value 509
Event: time 1483050928.556866, type 3 (EV_ABS), code 47 (ABS_MT_SLOT), 
value 1
Event: time 1483050928.556866, type 3 (EV_ABS), code 53 
(ABS_MT_POSITION_X), value 709
Event: time 1483050928.556866, type 3 (EV_ABS), code 54 
(ABS_MT_POSITION_Y), value 709
Event: time 1483050928.556866, ++++++++++++++ EV_REL ++++++++++++
Event: time 1483050928.556866, -------------- EV_SYN ------------
Event: time 1483050928.653166, type 3 (EV_ABS), code 47 (ABS_MT_SLOT), 
value 0
Event: time 1483050928.653166, type 3 (EV_ABS), code 53 
(ABS_MT_POSITION_X), value 510
Event: time 1483050928.653166, type 3 (EV_ABS), code 54 
(ABS_MT_POSITION_Y), value 510
Event: time 1483050928.653166, type 3 (EV_ABS), code 47 (ABS_MT_SLOT), 
value 1
Event: time 1483050928.653166, type 3 (EV_ABS), code 53 
(ABS_MT_POSITION_X), value 710
Event: time 1483050928.653166, type 3 (EV_ABS), code 54 
(ABS_MT_POSITION_Y), value 710
Event: time 1483050928.653166, ++++++++++++++ EV_REL ++++++++++++
Event: time 1483050928.653166, -------------- EV_SYN ------------

von Simon B. (nomis)


Lesenswert?

Epi K. schrieb:
> irgendwie liegt es wohl daran das beim 2.touch x und y keine wechselnden
> werte erhalten habe, habe auch noch usleeps(8000) eingefügt,
> aufjedenfall erhalte  mit evtest was vernünftiges, siehe unten. NUR...
> wie teste ich das? Mit tslib habe ich kein erfolg?

Es könnte sein, dass der tslib die ABS_X und ABS_Y-Achse fehlen. Ich 
glaube älteren Versionen wollten auch unbedingt die ABS_PRESSURE-Achse 
sehen, wobei die allerdings von der Kernel-API her eigentlich nur 
vorgesehen ist, wenn sie tatsächlich variable Werte liefert (und nicht 
nur 0/1 als Synonym für den BTN_TOUCH).

Ansonsten komprimiert der Kernel die Events und liefert nur die aus, die 
tatsächlich geänderte Werte enthalten.

Viele Grüße,
        Simon

von Epi K. (epi_k)


Lesenswert?

vielen Dank. Werde dies mal versuchen...

wobei so wie es jetzt ist, auf der HTML Seite 
http://scripty2.com/demos/touch/touchspector/

wird kein Touch erkannt... also wird es wohl kaum funktionieren.

Im Moment versuche ich es deshalb direkt über ein "touchemulator 
javascript"
https://github.com/hammerjs/touchemulator

Der Browser übernimmt die touch-Daten ja von irgendwo und übergibt Sie 
weiter, und hier versuche ich zu manipulieren und die eigenen X-Y Daten 
zu übergeben.

Naja sehr schade, dass all dies nicht einfacher geht :-((

: Bearbeitet durch User
von Daniel A. (daniel-a)


Lesenswert?

Betrachten wir nochmal alle Threads:

Beitrag "evdev, mousemove, multitouch auf Raspberry"
Beitrag "X11, xlib, multi touch simulation"
Beitrag "I2C read mit C-Programm Raspberry PI"

Zuerst versuchst du es mit python zu emulieren, dann mit C, und dann 
kommst du zum schluss, dass:

Epi K. schrieb:
> Naja sehr schade, dass all dies nicht einfacher geht :-((

Und nun willst es auf einem noch höheren Layer emulieren. Ich meine, 
Come on, das ist doch von hinten durch die Brust ins Auge. Was spricht 
dagegen es auf dem normalen weg zu lösen:

Daniel A. schrieb:
> Verstehe ich dass jetzt richtig, du willst einfach einen noch nicht von
> linux unterstützten I2C Touchscreen verwenden? Wäre es da nicht
> einfacher den Linux kernel neu zu kompilieren, und darin einen i2c hid
> treiber zu schreiben/anzupassen?


Wie auch immer, hast du nachgeschaut ob xinput dein Input device 
auflistet? Damit kann man sich glaub ich auchnoch die Events anzeigen 
lassen, die X von einem Input device sieht. Falls es in xinput nicht 
auftaucht, muss man es in Xorg erst bekannt machen. Früher ging das über 
/etc/Xorg.conf, heuzutage ist eher /etc/X11/xorg.conf.d/ in mode.


PS: Sind wirklich derart viele Threads notwendig? In diesem Forum wird 
viel Diskutiert, anders als in anderen reinen Frage=>Antwort Foren. 
Dabei ist es immer nützlich, wenn man den gesammten Kontext sieht.

von Epi K. (epi_k)


Lesenswert?

Hoi Daniel

Daniel A. schrieb:
> PS: Sind wirklich derart viele Threads notwendig? In diesem Forum wird
> viel Diskutiert, anders als in anderen reinen Frage=>Antwort Foren.
> Dabei ist es immer nützlich, wenn man den gesammten Kontext sieht.

jo das ist ein wenig viel, entschuldigung. Habe verschiedene Wege im 
Kopf gehabt...


Daniel A. schrieb:
> Wie auch immer, hast du nachgeschaut ob xinput dein Input device
> auflistet? Damit kann man sich glaub ich auchnoch die Events anzeigen
> lassen, die X von einem Input device sieht. Falls es in xinput nicht
> auftaucht, muss man es in Xorg erst bekannt machen. Früher ging das über
> /etc/Xorg.conf, heuzutage ist eher /etc/X11/xorg.conf.d/ in mode.

auf Xinput wird es nicht gelistet. Habe lange versucht eine Anleitung zu 
finden dies auf Xinput bekannt zu machen... ich werde mir dein Link mal 
anschauen. Danke.

Daniel A. schrieb:
> Und nun willst es auf einem noch höheren Layer emulieren. Ich meine,
> Come on, das ist doch von hinten durch die Brust ins Auge. Was spricht
> dagegen es auf dem normalen weg zu lösen:

was dagegegen spricht? ganz einfach ich habe noch nie ein Treiber 
geschrieben und integriert. Und wenn ich mir so die Quell-Codes von 
verschiedenen Touch-Treiber anschaue kriege ich ne Panik-Attacke...
Und zu alldem müsste ich diese auch noch in den Kernel integrieren.

Ganz ehrlich mir ist es schwer gefallen eine einfache Anleitung für 
Treiber Implementierung zu finden.

Ich habe doch einfach nur 10 x und Y Koordinaten und dann noch die ID zu 
jedem Touch und die Info ob aktiv oder nicht aktiv. Und das muss 
irgendwo übergeben werden... tja

von Epi K. (epi_k)


Lesenswert?

pi@raspberrypi:~ $ evtest
No device specified, trying to scan all of /dev/input/event*
Not running as root, no devices may be available.
Available devices:
/dev/input/event0:      uinput-sample
Select the device event number [0-0]: 0



pi@raspberrypi:~ $ export DISPLAY=':0'
pi@raspberrypi:~ $ xinput
⎡ Virtual core pointer                          id=2    [master pointer 
(3)]
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer 
(2)]
⎣ Virtual core keyboard                         id=3    [master keyboard 
(2)]
    ↳ Virtual core XTEST keyboard               id=5    [slave  keyboard 
(3)]



wie sieht der code ungefährt aus um uinput-sample or whatever auf
/etc/X11/xorg.conf.d/ bekannt zu machen, vorallem aber habe ich nicht 
mal ein xorg.conf...bzw. nur dort: /usr/share/X11/xorg.conf.d/?

: Bearbeitet durch User
von Simon B. (nomis)


Lesenswert?

Epi K. schrieb:
> pi@raspberrypi:~ $ export DISPLAY=':0'
> pi@raspberrypi:~ $ xinput

Probiere mal das tatsächlich aus einer gestarteten X-Session heraus zu 
tun. Eigentlich sollte der evdev-Treiber von Xorg das Ding automatisch 
aufpicken (Auf meinem Laptop tut er das).

Ansonsten: Sicherstellen, dass dein "uinput"-Programm läuft und dann X 
restarten.

Grüße,
        Simon

von Simon B. (nomis)


Lesenswert?

Daniel A. schrieb:
> Und nun willst es auf einem noch höheren Layer emulieren. Ich meine,
> Come on, das ist doch von hinten durch die Brust ins Auge. Was spricht
> dagegen es auf dem normalen weg zu lösen:

Naja, es ist halt leider echt doof, dass die ganzen "Desktop"-Browser 
mit Multitouch-Input nur sehr bedingt klarkommen (im Gegensatz zu den 
Android-Mobile-Browsern). Insofern kann ich schon nachvollziehen, dass 
hier die Luft langsam dünn wird und man nach Strohhalmen greift.

Das ganze Zeugs ist aus irgendwelchen doofen Gründen echt Arbeit. Und 
ein ordentlich im Kernel implementierter Treiber - so einfach das 
scheinbar ist - garantiert halt leider noch lange nicht, dass die 
Multitouch-taugliche Webseite wie geplant funktioniert...

Grüße,
        Simon

von Epi K. (epi_k)


Lesenswert?

Simon B. schrieb:
> Naja, es ist halt leider echt doof, dass die ganzen "Desktop"-Browser
> mit Multitouch-Input nur sehr bedingt klarkommen (im Gegensatz zu den
> Android-Mobile-Browsern). Insofern kann ich schon nachvollziehen, dass
> hier die Luft langsam dünn wird und man nach Strohhalmen greift.

ich bin mir da nicht sicher ob dass wirklich nicht funktionieren 
sollte... weil mit richtig implementierten Treiber funktionieren ja 
Touch's auch auf Browser einwandfrei... und die arbeiten ja auch nur mit 
X?!

Wenn es auf deinem Laptop läuft, also auf Xinput auch was angezeigt 
wird...
dann könntest du mir doch gleich auf folgender Homepage testen ob auch 
ein Touch angeigt wird:
http://scripty2.com/demos/touch/touchspector/

Simon B. schrieb:
> Probiere mal das tatsächlich aus einer gestarteten X-Session heraus zu
> tun. Eigentlich sollte der evdev-Treiber von Xorg das Ding automatisch
> aufpicken (Auf meinem Laptop tut er das).
phu leider blicke ich bei diesem X-Zeug noch nicht so durch... wie 
meinst du das?

von Simon B. (nomis)


Lesenswert?

Epi K. schrieb:
> Simon B. schrieb:
>> Naja, es ist halt leider echt doof, dass die ganzen "Desktop"-Browser
>> mit Multitouch-Input nur sehr bedingt klarkommen (im Gegensatz zu den
>> Android-Mobile-Browsern). Insofern kann ich schon nachvollziehen, dass
>> hier die Luft langsam dünn wird und man nach Strohhalmen greift.
>
> ich bin mir da nicht sicher ob dass wirklich nicht funktionieren
> sollte... weil mit richtig implementierten Treiber funktionieren ja
> Touch's auch auf Browser einwandfrei... und die arbeiten ja auch nur mit
> X?!

Aha? Tun sie? Redest Du von Multi-Touch? Wie hast Du das verifiziert?

> Wenn es auf deinem Laptop läuft, also auf Xinput auch was angezeigt
> wird...
> dann könntest du mir doch gleich auf folgender Homepage testen ob auch
> ein Touch angeigt wird:
> http://scripty2.com/demos/touch/touchspector/

Mit meinem Firefox (Debian Unstable) funktioniert der ordentlich 
konfigurierte und in xinput verfügbare Wacom-Multitouch-Touchscreen 
nicht (bzw. nur als Mausersatz). Lustigerweise funktionieren ein paar 
Gesten (zwei-Finger-Scrolling und Pinch-Zooming).

Keinen Schimmer warum.

>
> Simon B. schrieb:
>> Probiere mal das tatsächlich aus einer gestarteten X-Session heraus zu
>> tun. Eigentlich sollte der evdev-Treiber von Xorg das Ding automatisch
>> aufpicken (Auf meinem Laptop tut er das).
> phu leider blicke ich bei diesem X-Zeug noch nicht so durch... wie
> meinst du das?

Du hast explizit ein export DISPLAY=:0 gemacht, was für mich darauf 
hindeutete, dass Du das via SSH von remote gemacht hast. Starte dein 
uinput-Dings mal aus einem xterminal heraus.

Grüße,
        Simon

von Epi K. (epi_k)


Lesenswert?

Simon B. schrieb:
>> ich bin mir da nicht sicher ob dass wirklich nicht funktionieren
>> sollte... weil mit richtig implementierten Treiber funktionieren ja
>> Touch's auch auf Browser einwandfrei... und die arbeiten ja auch nur mit
>> X?!
>
> Aha? Tun sie? Redest Du von Multi-Touch? Wie hast Du das verifiziert?

von https://www.bytesatwork.ch/ weiss ich, dass die mit Linux (Yocto) 
und HTML5 arbeiten und z.B. EDT Touches bis 10 Finger (z.B. zeichnen) 
ohne Probleme funktioniert...

Danke für den Tip bzgl. xterminal... aber jetzt habe ich einfach 
XTerminal gestartet, und
export DISPLAY=':0'
sudo ./touch & (meine Anwendung gestartet

dann: evtest

es erscheint "uinput-sample"

dann: xinput

wird kein uinput-sample oder was ähnliches aufgelistet...

habs auch mal ohne export DISPLAY=':0' gemacht.
Und jetzt auch alles nicht per SSH.

Danke

: Bearbeitet durch User
von Simon B. (nomis)


Lesenswert?

Epi K. schrieb:
> Simon B. schrieb:
>>> ich bin mir da nicht sicher ob dass wirklich nicht funktionieren
>>> sollte... weil mit richtig implementierten Treiber funktionieren ja
>>> Touch's auch auf Browser einwandfrei... und die arbeiten ja auch nur mit
>>> X?!
>>
>> Aha? Tun sie? Redest Du von Multi-Touch? Wie hast Du das verifiziert?
>
> von https://www.bytesatwork.ch/ weiss ich, dass die mit Linux (Yocto)
> und HTML5 arbeiten und z.B. EDT Touches bis 10 Finger (z.B. zeichnen)
> ohne Probleme funktioniert...

Die spannende Frage ist: Mit welchem Browser in welcher Version?

> wird kein uinput-sample oder was ähnliches aufgelistet...

Ok, dann muss man da mal gucken ob man den Xorg irgendwie noch weiter 
konfigurieren muss damit da was tut. Spontan gehen mir da erstmal die 
Ideen aus.

Grüße,
        Simon

von Epi K. (epi_k)


Lesenswert?

Simon B. schrieb:
> Ok, dann muss man da mal gucken ob man den Xorg irgendwie noch weiter
> konfigurieren muss damit da was tut. Spontan gehen mir da erstmal die
> Ideen aus.
>
> Grüße,
>         Simon

was genau wird bei dir auf xinput aufgelistet? Und wie gehst du schritt 
für schritt vor?

Weil wenn es bei dir aufgelistet wird, dann fehlt noch irgendein x 
-paket im raspberry...

Danke

von Simon B. (nomis)


Lesenswert?

Epi K. schrieb:
> Simon B. schrieb:
>> Ok, dann muss man da mal gucken ob man den Xorg irgendwie noch weiter
>> konfigurieren muss damit da was tut. Spontan gehen mir da erstmal die
>> Ideen aus.
>>
>> Grüße,
>>         Simon
>
> was genau wird bei dir auf xinput aufgelistet? Und wie gehst du schritt
> für schritt vor?

Vorher:
1
simon@mezzanine:/tmp$ xinput 
2
⎡ Virtual core pointer                          id=2    [master pointer  (3)]
3
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
4
⎜   ↳ Wacom Co.,Ltd. Pen and multitouch sensor Finger touch     id=9    [slave  pointer  (2)]
5
⎜   ↳ Wacom Co.,Ltd. Pen and multitouch sensor Pen stylus       id=10   [slave  pointer  (2)]
6
⎜   ↳ AlpsPS/2 ALPS DualPoint TouchPad          id=13   [slave  pointer  (2)]
7
⎜   ↳ AlpsPS/2 ALPS DualPoint Stick             id=14   [slave  pointer  (2)]
8
⎜   ↳ Wacom Co.,Ltd. Pen and multitouch sensor Pen eraser       id=16   [slave  pointer  (2)]
9
⎣ Virtual core keyboard                         id=3    [master keyboard (2)]
10
    ↳ Virtual core XTEST keyboard               id=5    [slave  keyboard (3)]
11
    ↳ Power Button                              id=6    [slave  keyboard (3)]
12
    ↳ Video Bus                                 id=7    [slave  keyboard (3)]
13
    ↳ Sleep Button                              id=8    [slave  keyboard (3)]
14
    ↳ Integrated Camera                         id=11   [slave  keyboard (3)]
15
    ↳ AT Translated Set 2 keyboard              id=12   [slave  keyboard (3)]
16
    ↳ ThinkPad Extra Buttons                    id=15   [slave  keyboard (3)]

Starten deines uinput-Programms (ich glaube quasi ohne Änderung - bis 
auf ein paar Delay-Dinge die meinen Computer benutzbar halten indem 
nicht sofort Events geschickt werden):
1
simon@mezzanine:/tmp$ sudo ./uinput 
2
^Z
3
[1]+  Stopped                 sudo ./uinput
4
simon@mezzanine:/tmp$ bg
5
[1]+ sudo ./uinput &

Und dann anschließend die Ausgabe mit uinput-sample:
1
simon@mezzanine:/tmp$ xinput 
2
⎡ Virtual core pointer                          id=2    [master pointer  (3)]
3
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
4
⎜   ↳ Wacom Co.,Ltd. Pen and multitouch sensor Finger touch     id=9    [slave  pointer  (2)]
5
⎜   ↳ Wacom Co.,Ltd. Pen and multitouch sensor Pen stylus       id=10   [slave  pointer  (2)]
6
⎜   ↳ AlpsPS/2 ALPS DualPoint TouchPad          id=13   [slave  pointer  (2)]
7
⎜   ↳ AlpsPS/2 ALPS DualPoint Stick             id=14   [slave  pointer  (2)]
8
⎜   ↳ Wacom Co.,Ltd. Pen and multitouch sensor Pen eraser       id=16   [slave  pointer  (2)]
9
⎜   ↳ uinput-sample                             id=17   [slave  pointer  (2)]
10
⎣ Virtual core keyboard                         id=3    [master keyboard (2)]
11
    ↳ Virtual core XTEST keyboard               id=5    [slave  keyboard (3)]
12
    ↳ Power Button                              id=6    [slave  keyboard (3)]
13
    ↳ Video Bus                                 id=7    [slave  keyboard (3)]
14
    ↳ Sleep Button                              id=8    [slave  keyboard (3)]
15
    ↳ Integrated Camera                         id=11   [slave  keyboard (3)]
16
    ↳ AT Translated Set 2 keyboard              id=12   [slave  keyboard (3)]
17
    ↳ ThinkPad Extra Buttons                    id=15   [slave  keyboard (3)]

Grüße,
        Simon

von Epi K. (epi_k)


Lesenswert?

ok. interessant danke, und wird bei dir ein Touch auf 
http://scripty2.com/demos/touch/touchspector/ angezeigt?

von Simon B. (nomis)


Lesenswert?

Epi K. schrieb:
> ok. interessant danke, und wird bei dir ein Touch auf
> http://scripty2.com/demos/touch/touchspector/ angezeigt?

Nachdem das schon mit meinem Wacom-Multitouch im Firefox nicht 
funktioniert (siehe oben) habe ich das gar nicht erst probiert (und sehe 
auch keinen Sinn darin).

Ich bin mir sehr sicher, dass - sofern man die richtigen Events 
bereitstellt - es für das Xorg quasi keinen Unterschied darstellt ob ein 
Device ein reales physikalisches Gerät ist (und z.B. erst nachträglich 
durch Anstecken eines USB-Geräts auftaucht) oder ob das per uinput 
simuliert wird.

Grüße,
         Simon

von Epi K. (epi_k)


Lesenswert?

Simon B. schrieb:
> Nachdem das schon mit meinem Wacom-Multitouch im Firefox nicht
> funktioniert (siehe oben) habe ich das gar nicht erst probiert (und sehe
> auch keinen Sinn darin).

ok. wie schauts mit Chrome bzw. Chromium aus? Der scheint ziemlich gut 
Multitouch fähig zu sein?... Ich werde mal bei gelegenheit bei 
byte@works nachfragen welchen browser sie den verwenden.
Aber ich glaube nicht, dass es ein spezieller ist.

Danke

: Bearbeitet durch User
von Simon B. (nomis)


Lesenswert?

Epi K. schrieb:
> ok. wie schauts mit Chrome bzw. Chromium aus? Der scheint ziemlich gut
> Multitouch fähig zu sein?...

Chromium nicht bei mir. Chrome habe ich nicht installiert.

Grüße,
        Simon

von Epi K. (epi_k)


Lesenswert?

och schade vielleicht kannst du für mich mal den chrome installieren...

anyway ich bin jetzt in der Lage mit dem touch-emulator() mulittouch's 
zu simulieren.

D.h. ich muss jetzt einfach bei jeder Touch-Fähigen Homepage dieses 
script vorher starten..

was jetzt noch fehlt, ich muss meine X-Y Daten diesem java-script 
übergeben können... evtl. JSON. Aber irgendwie suche ich ne 
Browser-Schnittstelle um einfach nur Array's zu übergeben... und es muss 
mindestens 30mal in der Sekunde abrufbar sein...

Müsste fast ein weiteren Thread dafür erstellen, aber ich lass es mal..

von Simon B. (nomis)


Lesenswert?

Simon B. schrieb:
> Chromium nicht bei mir.

Ach guck: mit "chromium --touch-events=enabled" sehe ich mit dem 
Wacom-Touchscreen mehrere Berührpunkte. Er meldet mir auch 10 Punkte 
wenn ich alle Finger auflege, malt aber anscheinend nicht um alle die 
Rahmen (warum auch immer)...

Viele Grüße,
        Simon

von Epi K. (epi_k)


Lesenswert?

oh cool, das prg. rendert glaubs nur max. 5 touch's, wie siehts mit 
uinput aus?

: Bearbeitet durch User
von Simon B. (nomis)


Lesenswert?

Epi K. schrieb:
> oh cool, das prg. rendert glaubs nur max. 5 touch's, wie siehts mit
> uinput aus?

Dein Programm von oben realisiert noch keine mehrfachen Touches - und 
ich werde unbezahlt da auch erstmal keine Zeit reinstecken, das zu 
implementieren.

Generell kannst Du aber diese Tests auch selber machen - du brauchst nur 
ein Desktop-Linux und kannst da nach Herzenslust selber rumfrickeln. Und 
dann kannst Du probieren, an welcher Stelle es beim Raspberry dann ggf. 
scheitert.

Viele Grüße,
        Simon

von H. S. (Gast)


Lesenswert?

Darf Ich zwischenfragen, ob jemand ein Tutorial kennt, aus dem man 
entnehmen könnte, wie das überhaupt geht mit dem Multitouch? Ist das auf 
Basis einer Multiplexfunktion?

Ich meine, wenn Ich mir ein Gitter mit den Spannungen vorstelle, die 
sich infolge des Widerstandes ändern, bekomme Ich eigentlich bei mehr, 
als einer Berührung einen Mittelwert, oder?

von H. S. (Gast)


Lesenswert?

Ich komme nochmals auf das Thema zurück:

EPI, hast Du das hinbekommen?

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.