Högis Dungeon

Und jetzt erst recht!

Projektvorstellung: ScpToolkit

Wow, über ein halbes Jahr ist nun schon wieder vergangen, seit ich mein erstes richtig großes Community-Projekt in die Welt gepflanzt habe. Passend zu meiner schier grenzenlosen Trägheit folgt nun auch der erste Blog-Beitrag dazu hier  Nun, besser spät als nie: ich präsentiere das ScpToolkit!

Was bitte?

Ok, eines gleich vorweg: das “Scp” steht nicht für Secure, Contain, Protect sondern für Scarlet.Crush Productions, eine fiktive Herstellerfirma des ursprünglichen Autors des ScpServer Projekts und dessen Vorgängern. Die Software dient auch nicht dazu Verbindung zu übernatürlichen Wesen herzustellen bzw. würde ich auch nicht darüber berichten dürfen, wenn es so wäre  Der ursprüngliche Autor Bruce James (zumindest ist das der Name des Besitzers der digitalen Signatur) hat aus unbekannten Gründen Anfang 2014 dem Projekt den Rücken zugekehrt, seit Juli 2015 sitze ich am Ruder 

Worum geht es?!

Oh, natürlich! Es handelt sich bei dem Projekt um einen Windows Treiber für Sony DualShock 3 bzw. DualShock 4 Controller. Die Software ersetzt hierbei den für die über USB angeschlossenen Controller Standardtreiber hidusb.sys durch den generischen WinUSB.sys und übernimmt so die volle Kontrolle über die angeschlossenen Controller. Die gesendeten Eingangssignale (sog. HID Reports) werden anschließend in ein Xbox 360 kompatibles Format umgewandelt und an einen virtuellen Xbox 360 Controller gesendet, welcher wiederum von XInput-kompatiblen erkannt und genutzt werden kann. Spiele sehen also nur einen Xbox-Controller und dessen Features, während in Wahrheit ein Sony-Controller mit dem System verbunden ist.

Wieso?

Da ich ohne Spielkonsolen aufgewachsen bin (ein Trauma, ich weiß ) und erst über Emulatoren am PC in den Genuss zahlreicher Klassiker gekommen bin, musste auch irgendwann ein klassisches Gamepad statt Maus und Tastatur her, um voll in den authentischen Genuss von 2D-Spielen kommen zu können. Hierfür hat der typische Nullachtfuffzehn-Controller von Gamestop lange gute Dienste geleistet. Irgendwann im Sommer 2015 kam mir schließlich in den Sinn, das ganze etwas professioneller anzugehen und auf drahtlos umzusteigen, damit das Kabelgewirr in der Gaming-Höhle vom Boden weg kommt. Also bin ich eines sonnigen Tages guter Dinge in den Blöd-Markt marschiert und habe mir den erstbesten Wireless Controller geschnappt, zufällig ein Nachbau des DualShock 3 für die Playstation 3. Steht ja Bluetooth drauf, muss also auch am PC unter Windows funktionieren – typisches Consumer-Verhalten eben  Nun, leider war dem nicht so.

Nachdem ich durch herumfummeln mit den Bluetooth-Einstellungen und fehlgeschlagenen Paarungsversuchen des Controllers mit dem Host selbst nicht wirklich weiter gekommen bin, musste mal wieder das Internet herhalten. Ziemlich schnell bin ich auf einen Treiber namens MotioninJoy gestoßen. Ich linke aus zweierlei Gründen nicht darauf; erstens ist es bekannt als Ad- und/oder Spyware, zweitens ist die zugehörige Website seit Monaten down und, äh, drittens funktioniert es mit neueren Versionen von Windows nicht mehr allzu gut. Alternativ hierzu bin ich dann ziemlich schnell auf Scarlet.Crushs Project gestoßen, welches ich wie gesagt übernommen habe.

Und nun?

In dem vergangenen halben Jahr hat sich einiges getan; zu allererst wurde die Codebasis mittels ReSharper ordentlich aufgeräumt und ausgedünnt, mit massenhaft Kommentaren versehen, das zu Grunde liegende .NET Framework auf eine aktuelle Version gehoben, kompiliert, experimentiert und vieles mehr. Nach fast 1000 Commits wage ich zu behaupten, den Code relativ gut zu kennen. Mittlerweile gibt es sogar ein schmuckes Setup erstellt mittels Advanced Installer. Aber es gibt noch viel zu tun:

  • Bluetooth-Konnektivität zu Nachbau-Controllern von diversen chinesischen Drittanbietern (“PANHAI”, “VINS”, “GHIC”, …) funktioniert nicht oder nur eingeschränkt. Der aktuelle im Projekt inkludierte Bluetooth-Stack ist sehr rudimentär und emuliert die Funktionalität der PS3 nicht gut genug um diese gefälschten Controller zu unterstützen. Als kompletter Bluetooth-Noob komme ich diese Materie betreffend nur sehr langsam voran; aktuell vertiefe ich mich in das Buch Bluetooth Low Energy: The Developer’s Handbook um die Probleme hoffentlich ohne weiteres Reverse Engineering beheben zu können. Mal sehen 
  • Mapping-Profile: ich habe begonnen, die Funktionalität, Buttons und Sticks auf andere Kommandos umzubiegen neu zu implementieren. Eine furchtbar unsinnige Arbeit aus Sicht der Programmierung… mal überlegen ob ich das durchziehe 
  • Xbox 360 Emulator: es gibt noch ein paar bekannte Bugs im Scp Virtual Bus bzw. Xbox 360 Emulator Treiber. Einer davon wäre, dass man keinen legitimen (physischen) Microsoft Xbox 360 Controller mehr benutzen kann, wenn der Emulator aktiv ist. Leider ist hier das Thema ähnlich wie beim Bluetooth-Stack; ich habe keine bis wenig Erfahrung mit der Entwicklung von Kernel-Mode Treibern. Hierbei werde ich mir – in welcher Form auch immer – Unterstützung suchen müssen.

Fortsetzung folgt definitiv