Forum: Mikrocontroller und Digitale Elektronik USB HID Touchscreen Device


von Klaus S. (skibby)


Lesenswert?

Guten Abend zusammen,

ich habe an einen Embedded PC mit Windows XP ein Touchscreen-Panel mit 
FT5406-Touchcontroller angeschlossen. Der FT5406 wird über I2C 
angesteuert.
Ich möchte den FT5406 über einem LPC1343 als USB HID Touchscreen Device 
betreiben und bin momentan etwas ratlos welchen Report Descriptor ich 
dafür nehmen soll. Könnte mir jemand einen Tipp geben was da am besten 
geeignet ist ? Es soll ein einfaches Single-Touch Device werden mit dem 
ich das Windows ohne Maus bedienen kann.

Viele Grüße,
Klaus Skibowski

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Du benötigst ein Maus Device mit absoluten Koordinaten.Ich habe sowas 
mit V-USB mal für ein altes Tektronix Tablet gemacht. Hier ist mein USB 
Descriptor:
1
PROGMEM char usbHidReportDescriptor[60] = {
2
    0x05, 0x01,                    // USAGE_PAGE (Generic Desktop)
3
    0x09, 0x02,                    // USAGE (Mouse)
4
    0xa1, 0x01,                    // COLLECTION (Application)
5
    0x09, 0x01,                    //   USAGE (Pointer)
6
    0xa1, 0x00,                    //   COLLECTION (Physical)
7
    0x05, 0x09,                    //     USAGE_PAGE (Button)
8
    0x19, 0x01,                    //     USAGE_MINIMUM (Button 1)
9
    0x29, 0x03,                    //     USAGE_MAXIMUM (Button 3)
10
    0x15, 0x00,                    //     LOGICAL_MINIMUM (0)
11
    0x25, 0x01,                    //     LOGICAL_MAXIMUM (1)
12
    0x95, 0x03,                    //     REPORT_COUNT (3)
13
    0x75, 0x01,                    //     REPORT_SIZE (1)
14
    0x81, 0x02,                    //     INPUT (Data,Var,Abs)
15
    0x95, 0x01,                    //     REPORT_COUNT (1)
16
    0x75, 0x05,                    //     REPORT_SIZE (5)
17
    0x81, 0x03,                    //     INPUT (Cnst,Var,Abs)
18
    0x05, 0x01,                    //     USAGE_PAGE (Generic Desktop)
19
    0x09, 0x30,                    //     USAGE (X)
20
    0x09, 0x31,                    //     USAGE (Y)
21
    0x35, 0x00,                    //     PHYSICAL_MINIMUM (0)
22
    0x46, 0x9d, 0x0b,              //     PHYSICAL_MAXIMUM (2973)
23
    0x15, 0x00,                    //     LOGICAL_MINIMUM (0)
24
    0x26, 0x9d, 0x0b,              //     LOGICAL_MAXIMUM (2973)
25
    0x65, 0x11,                    //     UNIT (SI Lin:Distance)
26
    0x55, 0x0e,                    //     UNIT_EXPONENT (-2)
27
    0x75, 0x10,                    //     REPORT_SIZE (16)
28
    0x95, 0x02,                    //     REPORT_COUNT (2)
29
    0x81, 0x02,                    //     INPUT (Data,Var,Abs)
30
    0xc0,                          //   END_COLLECTION
31
    0xc0                           // END_COLLECTION
32
};
Mein Tablett wurde hier auf 2974 * 2974 Punkte initialisiert. Der Trick 
besteht grossenteils darin, dem Host die Daten als absolute Koordinaten 
zu liefern - INPUT(Data,Var,Abs) Mein Digitizer hat 4 Knöpfe, wovon die 
Hosts aber meistens nur drei nutzen können. YMMV

von Klaus S. (skibby)


Lesenswert?

Hallo Matthias,
danke für die schnelle Antwort !!!
Ich werde das mal ausprobieren. Allerdings habe ich keine Knöpfe zur 
Vefügung, nur den Touchscreen. Ich werde versuche mit dem Pressure-Wert 
den der Controller ausspuckt die linke Maustaste zu emulieren. Mehr 
brauche ich im Prinzip wohl auch nicht.

von gugl (Gast)


Lesenswert?

Hallo mschoeldgen,

ich kenne mich noch nicht wirklich mit USB aus, spiele aber trotzdem mit 
deinem Descriptor und V-USB herum, denn ich möchte ein resistives 
Touchpanel direkt per AVR-IO/ADC auswerten.
Allerdings stelle ich fest, dass durch das sture Senden der absoluten 
Position z.B. eine reguläre, relative Maus blockiert wird, d.h. der 
Cursor lässt sich nicht durch andere Eingabegeräte manipulieren.
Der Touchpanel-Controller müsste die "Kontrolle abgeben", solange es 
keine Berührung und damit keine neue Position gibt - hat (V-)USB dafür 
einen Mechanismus?

von gugl (Gast)


Lesenswert?

Offenbar ist es OK, im USB-Polling-Interrupt einfach kein Daten zu 
senden? Dann wird der Cursor nicht beeinflusst.

von gugl (Gast)


Lesenswert?

Habe gerade gesehen, dass du (http://schoeldgen.de/avr/index.html) es 
mit ungültigen Daten machst:
1
reportBuffer.dx = 0x7fff;    /* invalid data helps to put focus 
2
back to mouse */

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Ja, das ist eine Eigenart meines Tabletts, aber dein Touchscreen wird es 
ähnlich machen. Wenn da nix tatscht, kommen Koordinaten raus, die sich 
deutlich von gültigen Werten unterscheiden. Wenn deine Software diese 
Fälle erkennt und Phantasiewerte wie die o.a. 0x7fff zurückgibt, wird 
der Rechner genauso reagieren wie bei meinem Tablett.

Das ist beim Tablett sogar noch komplizierter, weil ich bei meinem 
12"*12" Flugzeugmutterschiff den Pointer ganz aus dem aktiven Bereich 
bewegen muss, bei deinem Touchscreen wird es reichen, den Finger 
wegzunehmen.

von gugl (Gast)


Lesenswert?

Hallo,
ich lese das Panel ja direkt per ADC aus, daher war meine Frage nur, wie 
man keine Daten via USB sendet, damit der Cursor nicht festgehalten 
wird.
Man kann mit V-USB aber auch NULL Daten senden: 
Beitrag "Re: USB: HID Mouse absolute (Touchpanel) Polling Interrupt Transfer"

Danke jedenfalls für deinen Descriptor.

von Elmü M. (elmue)


Lesenswert?

Hallo

Auf der Suche nach einem Touch Screen HID device descriptor hat mich 
Google hierher gebracht und ich habe den oben geposteten Descriptor 
getestet.

Mein Vorhaben war einen universalen HID Descriptor zu finden der auf 
ALLEN Betriebssystemen funktioniert.

Der oben gepostete Deskriptor taugt dafür nicht.

Das Probem mit USAGE (MOUSE) ist z.B. dass der Linux X11 Server voller 
Bugs ist und absolute Koordinaten von einer Maus nicht akzeptiert.

Ich bin deshalb auf Nummer Sicher gegangen und habe einen echten 
Touchscreen von ELO Touchsystems geklont.

Wer an einem universellen Touchscreen für alle Betriebssystem 
interessiert ist, der lese meinen Artikel auf Codeproject:
http://www.codeproject.com/Articles/1001891/A-USB-HID-Keyboard-Mouse-Touchscreen-emulator-with

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Elmü Meister schrieb:
> Das Probem mit USAGE (MOUSE) ist z.B. dass der Linux X11 Server voller
> Bugs ist und absolute Koordinaten von einer Maus nicht akzeptiert.

Ich hatte das so vor Jahren am Mac und am PC mit WinXP getestet und mich 
um X11 und Konsorten nicht geschert - Linux läuft bei mir nur auf dem 
Server und mit CLI.

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.