USB HID Touchscreen Device

OP #3021763
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
(Firma: matzetronics) #3021775
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
OP #3021789
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.
Gast #3453460
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?
(Firma: matzetronics) #3454277
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.
#4169977
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren