Über mich

Text? Mein Name ist Heiko, ich bin 33 Jahre alt und lebe im schönen Stralsund. Somit genieße ich mein Dasein als Informatiker in Meeresnähe. :)
Näheres findest du hier.

Neueste Kommentare

Beliebteste Artikel

Blogroll

Kategorien

Tag Cloud

Archiv

10.03.2012

Terminator coming soon^^

Vor nicht allzu langer Zeit hatte ich einen kleinen Plausch mit einer Freundin. Irgendwie sind wir dann auf das Thema Lego gekommen und wie wir uns so unterhielten sagte ich plötzlich: Jetzt hätte ich lust mal wieder Lego zu bauen. Ihre Antwort war nur: Warum denn nicht, mach doch. …
Ja, warum eigentlich nicht? … Nun, Lego ist es jetzt doch nicht geworden aber es kommt dem Ganzen schon recht nahe.^^

Servo Sensorplattform per PS3 Gamepad

Mit Hilfe diese Gamepads werden die Servomotoren (links im Bild) gesteuert, es handelt sich um einen Demonstrationsaufbau für meine neuste Treiberentwicklung.

Und hier findet sich der Code für diese kleine Spielerei:)
Strike FX Wireless driver download

Was man hier zu sehen bekommt ist das Ergebnis von vier schlaflosen Nächten. Es handelt sich grundlegend um ein Arduino ähnliches Entwicklerboard mit einem ATmega1280 Microprozessor.

DFRobotMega Entwicklerboard

Dieses wurde um eine USB Hostschnittstelle erweitert.

USB Host Shield

Ziel war es nun einen kabellosen Gamecontroller, als Fernsteuerung für zukünftige Projekte an diesem Microchip zu betreiben. Die Wahl fiel am Ende auf das Strike FX Wireless von Speedlink.

Speedlink Strike FX Wireless

Um das Basteln etwas einfacher zu gestalten habe ich nun erstmal ein Prototyping Board gebaut.

Mein Prototyping Board

Natürlich muss der Prozessor auch erst einmal wissen was er mit der neuen Schnittstelle anfangen soll, ein USB Core muss also her. Glücklicherweise gibt es hier bereits eine Bibliothek, die das realisiert. Wozu das Rad neu erfinden? Hier gehts also zum git Repository, wo man sich diese herunterladen kann. Zusätzlich findet sich die aktuelle Version auch in meinem Download, so hat man direkt die Version, auf welcher auch mein Treibermodul basiert. :)

Die eigentliche Treiberentwicklung ging am Ende nicht so einfach von der Hand wie erwartet. Der erste Stein im Weg war die Bibliothek für den USB Core, hier fehlt leider jegliche Dokumentation. Einige Beispiele sind enthalten, welche aber nur minimal helfen, wenn man noch keinen Schimmer hat, wie die Schnittstelle arbeitet. Die erste Nacht ist also fast ausschließlich dem Reverse Engineering dieses Moduls zum Opfer gefallen. Ich bin am überlegen, ob ich nicht ein kleines Tutorial hier veröffentliche, um anderen diese Tortur zu ersparen, auch da es nicht jedem leicht fällt sich in fremdem Code zurecht zu finden. Am Ende ist es jedoch denkbar einfach das Modul zu bedienen.
Nachdem endlich klar war wie man dem USB Host Core seine eigenen Treiber unterjubelt, konnte ich nun also auch endlich mit diesem Punkt beginnen. Doch auch das Gamepad war für Überraschungen zu haben: Es handelt sich um einen Gamecontroller, der sowohl für den Betrieb am PC, als auch an einer PS3 gedacht ist. Der erste Gedanke war es, den Controller an einem Linux PC zu betreiben und die Treiber-Gerätekommunikation mit Hilfe von usbmon und Wireshark mitzuschneiden. Gesagt, getan. Das Ergebnis offenbarte auch die aus dem Studium der USB Spezifikationen für HIDs erwartete Kommunikation, also keine Probleme mehr von hier an… Denkste…
Am Mikroprozessor meldete sich das Gerät nun komplett anders als am PC, es hält den Chip für eine Playstation und möchte nun auch wie ein Playstationcontroller behandelt werden. Nachdem das Gerät aber grundsätzlich erkannt wurde und über eine serielle Konsole die neuen Descriptoren ausgelesen waren, folgten kaum enden wollende Trial & Error Versuche, denn die Verbindung zwischen Controller und Empfänger wurde zwar grundsätzlich hergestellt, Daten wollte mir dieser jedoch nicht freiwillig geben.
Etwa zu diesem Zeitpunkt schraubte ich meine Erwartungen erst einmal herunter: Den Controller auslesen soll erstmal reichen, das Ansteuern der LEDs und Rumblepack Motoren schieb ich erst einmal auf. Es erscheint fast wie Ironie, dass diese das erste waren was ich zum Laufen bekam, glücklicherweise muss man sagen. Am Ende wollte das Pad nämlich nur eine leuchtende LED haben (Die PS3 sagt dem Benutzer hiermit, welcher Spieler mit dem Controller assoziiert wird) um nicht beim Abfragen der Tasten und Achsen rumzuheulen.

Der restliche Entwicklungsprozess verlief dann “straight forward”, innerhalb einer Nacht stand das Treibermodul, mit dem nun sämtliche Änderungen an Tastendruck, Achsenposition und selbst der Energiezustand (Aktiv, Sleepmode) treiberseitig in Events umgewandelt werden. Das ermöglicht es einem, das Pad in sein Arduino Projekt einzubauen und dabei eine sehr übersichtliche Programmstruktur zu wahren.
Neben dem Eventhandling bietet der Treiber aber noch anderes: LEDs können in beliebiger Kombination geschaltet und ausgelesen werden, selbiges gilt für die beiden Force Feedback Motoren des Controllers.
Außerdem bietet der Treiber die Möglichkeit Einfluss auf das Pollingverhalten und die “Auflösung” der Eventerzeugung zu nehmen und besitzt einen einfachen Kalibrierungsmechanismus für die beiden Joysticks.

Im Download enthalten sind, neben dem Treiber selbst, ein kleines Demoprogramm, ein englischsprachiges Handbuch und, wie bereits angesprochen, die USB Hostshield Library.
Strike FX Wireless driver download

Noch kein Kommentar »

Kommentar schreiben:

XHTML: Erlaubte Tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Blogverzeichnis - Blog Verzeichnis bloggerei.de    © 2011 – Powered by WordPress – Theme Papyrus 1.0 designed by Leonardo da Finchi