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
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
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.
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?
Offenbar ist es OK, im USB-Polling-Interrupt einfach kein Daten zu senden? Dann wird der Cursor nicht beeinflusst.
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 */
|
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.
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.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.