USB: HID Mouse absolute (Touchpanel) Polling Interrupt Transfer

Gast #3454100
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?
Gast #3454192
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?
Gast #3454287
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.

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