Forum: PC Hard- und Software USB: HID Mouse absolute (Touchpanel) Polling Interrupt Transfer


von gugl (Gast)


Lesenswert?

Ich versuche mit einem AVR und obdevs V-USB ein "4-wire analog resistive 
Touchpanel" zur Pointer-Steuerung einzusetzen.

Allerdings habe ich festgestellt, dass durch das sture Senden der 
absoluten
Position z.B. eine zweite, normale Maus blockiert wird, d.h. der
Cursor lässt sich nicht durch andere Eingabegeräte manipulieren.
Der Touchpanel-Controller müsste irgendwie die "Kontrolle abgeben", 
solange es keine Berührung und damit keine neue Position gibt.

Ist es OK, im USB-Polling-Interrupt einfach keine Daten an den Host zu 
senden (also kein
1
usbSetInterrupt((void *)&reportBuffer, sizeof(reportBuffer));
) ? Dann wird nämlich auch der Mauszeiger nicht beeinflusst.

Oder lieber ungültige Daten (außerhalb des Wertebereiches) senden?

von gugl (Gast)


Lesenswert?

Offenbar gibt es auch die Möglichkeit, ein NAK zu senden:
http://www.beyondlogic.org/usbnutshell/usb4.shtml#Interrupt

Ist das eine gültige Antwort auf einen Request?

Aber wie machen mit V-USB?

usbdrv.h:230
1
USB_PUBLIC void usbSetInterrupt(uchar *data, uchar len);
2
/* This function sets the message which will be sent during the next interrupt
3
 * IN transfer. The message is copied to an internal buffer and must not exceed
4
 * a length of 8 bytes. The message may be 0 bytes long just to indicate the
5
 * interrupt status to the host.
6
 * If you need to transfer more bytes, use a control read after the interrupt.
7
 */

Ich habe nun auch V-USB Code gesehen, wo die Fkt. einfach nicht 
aufgerufen wird. Das bringt keine Fehlermeldungen unter Windows 7 - 
evtl. wird aus dem V-USB Interrupt-Handler mit leerem Buffer dann 
automatisch ein NAK gesendet?

von Klaus (Gast)


Lesenswert?

Ich werde nicht ganz schlau aus deinen Aussagen, aber ich glaube, Du 
hast das Prinzip nicht verstanden.

Bei einer Tastatur ist es so, dass man die Veränderung zum 
vorhergehenden Vorgang an den PC sendet und sonst einfach Nullen soweit 
ich das noch in Erinnerung habe.

Also: Taste 'i' drücken und wieder loslassen:
send('Taste i gedrückt')
send('Taste i losgelassen')
send(0,0,0,0,0)
....
send(0,0,0,0,0)
...

Und so ähnlich wird das auch bei Deinem Panel sein. Wenn Du also immer 
eine feste Position sendest, dann kann die Maus zwar durchaus den Cursor 
umpositionieren, aber Dein Panel zieht ihn immer wieder zurück - und 
zwar so schnell, dass man es nicht sieht.

von gugl (Gast)


Lesenswert?

Klaus schrieb:
> Ich werde nicht ganz schlau aus deinen Aussagen, aber ich glaube, Du
> hast das Prinzip nicht verstanden.

Hilft mir nicht, aber danke trotzdem.

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.