USB HID Maus

#2441532
Lesenswert?

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?
(Firma: matzetronics) #2441545
Lesenswert?

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/

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