Um alte Joysticks vom C-64 oder Amiga auch am PC betreiben zu können baue ich mir gerade einen Adapter. Das funktioniert auch prinzipiell schon überraschend gut.
Es gibt jedoch ein paar Feinheiten, welche ich gerne noch ändern würde.
So verwende ich die "Adafruit TinyUSB" Library und arbeite in der ArduinoIDE mit C++. Wenn ich jetzt folgendes als Beschreibung für HID verwende funktioniert alles super:
1
uint8_tconstdesc_hid_report[]=
2
{
3
TUD_HID_REPORT_DESC_GAMEPAD()
4
};
Dann hat der Adapter aber angeblich 8 Achsen und 32 Buttons. Achse 0 und 1 sowie Button 0 funktionieren und ich kann auch im Emulator problemlos damit spielen.
Ich würde aber gerne angeben, dass es 2 Achsen mit 1 Button sind. Dazu habe ich folgendes gebastelt:
1
uint8_tconstdesc_hid_report[]=
2
{
3
0x05,0x01,// Usage Page (Generic Desktop)
4
0x09,0x05,// Usage (Game Pad)
5
0xA1,0x01,// Collection (Application)
6
7
// X und Y Achsen
8
0x09,0x30,// Usage (X)
9
0x09,0x31,// Usage (Y)
10
0x15,0x81,// Logical Minimum (-127)
11
0x25,0x7F,// Logical Maximum (127)
12
0x75,0x08,// Report Size (8)
13
0x95,0x02,// Report Count (2)
14
0x81,0x02,// Input (Data,Var,Abs)
15
16
// Buttons (nur 1 Button)
17
0x05,0x09,// Usage Page (Button)
18
0x19,0x01,// Usage Minimum (Button 1)
19
0x29,0x01,// Usage Maximum (Button 1)
20
0x15,0x00,// Logical Minimum (0)
21
0x25,0x01,// Logical Maximum (1)
22
0x75,0x01,// Report Size (1)
23
0x95,0x01,// Report Count (1)
24
0x81,0x02,// Input (Data,Var,Abs)
25
26
// Padding auf Bytegröße
27
0x75,0x07,// Report Size (7)
28
0x95,0x01,// Report Count (1)
29
0x81,0x03,// Input (Const,Var,Abs)
30
31
0xC0// End Collection
32
};
Dann bekomme ich auch 2 Achsen und 1 Button angezeigt. Allerdings funktionieren die dann nicht mehr. Ändere ich es wieder funktioniert es sofort. Also an der Verkabelung kann es nicht liegen.
Das wäre der eine Punkt. Der Andere wäre dann noch, derzeit wird der Adapter vom PC als "Raspberry Pi Pico" erkannt. Ist kein Beinbruch aber der kleine Monk in mir würde da gerne etwas individuelles angezeigt sehen. Nur scheint mir, dass die Bibliothek das nicht zulässt. Mein Versuch die Funktion zu überschreiben schlug leider fehl.
Hier kommt dann der ganze Code, falls ich sonst wo einen Fehler gemacht habe.
Früher mal gab es bei PCs einen Joystickanschluss bzw. zwei (SubD15) und daran konnte man je einen analogen Joystick mit 2 Achsen und 2 Tasten anschliessen. Willst du an so einen Anschluss einen digitalen Joysteick anschliessen?