Hallo, ich will ein PIC18 als HID Maus einsetzen. Die Beispiele, die ich bis jetzt gesehen habe, senden eine relative Positionsänderung, die sich der Cursor bewegen soll. Ist es auch möglich eine absolute Position zu verwenden, z.B. von der linken unteren Ecke des Bildschirmrandes? Für Touchscreen wäre es sonst ja schwer oder garnicht möglich als HID Maus zu verwenden, oder sehe ich das falsch?
Martin S. schrieb: > Ist es auch möglich eine absolute Position zu verwenden, z.B. von der > linken unteren Ecke des Bildschirmrandes? Nicht, wenn es eine Maus sein soll. Absolut positionierende Geräte verwenden eigene Devicetreiber, sind also keine HID-Mäuse.
Doch, das geht. Ich habe mit der V-USB library von http://www.obdev.at/products/vusb/index.html ein Adapter gebaut, das ein älteres serielles Tektronix Tablett in eine absolute USB Maus umwandelt. Läuft an Mac und Windows ohne Treiber. Der Trick ist einfach der USB Deskriptor:
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 | };
|
Wie man sehen kann, ist mein Tablett auf eine Auflösung von 2973 dots eingestellt. Das ganze Dings ist ein 12" x 12" Monstrum. Das gesamte Projekt für einen ATTiny45/85 kannste hier einsehen : http://www.schoeldgen.de/avr/
Hi, danke für die Antwort! Gut zu wissen, dass es überhaupt geht :-) Kannst du erklären, wie die Datenbytes in der report structure zu stehen haben? Wieviel bytes muss der Ausgabepuffer haben? Sorry für meine Fragen, ich versuch mich grad erst in USB einzuarbeiten.
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.