Reverse engineering: V4 Force Feedback, Interact

Auf Hard-Reset.de haben wir schon öfters darüber gesprochen, Chris nennt es immer “Reserve engineering” ;). Es ist die Kunst ein Gerät, eine Elektronik oder ein Protokoll zu analysieren und es nachzubilden, oder so änlich ^^. Da ich gerade selbst sowas gemacht habe dachte ich mir teile ich mit euch die Schritte die ich durchgeführt habe und wie sowas ungefähr abläuft. Ich habe das hier auf meinem Dachboden gefunden:

IMG_3994

Das ist ein altes Force Feedback PC Lenkrad von Hersteller Interact und leider gibt es nur Treiber bis Windows 98. Es hat keinen USB Anschluss sondern noch nen guten alten Gameport Anschluss, was echt cool ist weil man den super mit einen Microkontroller auslesen und benutzen kann! Was? Ihr wisst nicht was nen Gameport aka D-Sub 15 ist? ;)

IMG_3998

Das ist ein Gameport Anschluss. Hier habt ihr auch gleich die normale Belegung des Steckers:

1 +5V VCC
2 Joystick 1 Taste 1
3 Joystick 1 X-Achse
4 GND
5
6 Joystick 1 Y-Achse
7 Joystick 1 Taste 2
8 +5V VCC
9 +5V VCC
10 Joystick 2 Taste 1
11 Joystick 2 X-Achse
12 GND (MIDI Out)
13 Joystick 2 Y-Achse
14 Joystick 2 Taste 2
15 +5V VCC (MIDI In)

Warum Normale Belegung? Weil leider die meisten “neueren” Gameport Joysticks und Lenkräder nicht einfach ihre Achsen über die oben gekennzeichneten Pins ausgeben. Hinzu kommt das der Gameport “eigentlich” nur Unidirektional ist, was soviel heist wie es gehen nur Infos von einem Angeschlossenen Gerät an den Computer. Wenn man also wie bei diesem Lenkrad Force Feedback will, muss man nen Weg finden mit dem Gerät zu reden. Die meisten Hersteller haben sich für ihre Geräte also jeweils was eigenes ausgedacht, aber da es nicht viele Möglichkeiten gibt sind die Lösungen recht änlich. Aber wie bekommt man jetzt raus was genau zwischen dem Lenkrad und einem Rechner abgeht wenn man es benutzt? Tja, als erstes sollte man rausfinden welche Pins eigentlich genau verwendet werden, dazu hab ich als erstes das Lenkrad auseinander genommen:

IMG_3996IMG_3995

IMG_3999IMG_3997

Ich hatte nicht erwartet das der Motor so groß ist, solche Motoren hab ich zuletzt in einem Modellauto gesehen ^^. Man sieht auch toll die Drähte die in das Kabel für den Gamport führen, ich habe mit einem Multimeter gemessen welche Drahtfarbe an welchen Pin geht:

1 Braun +5V VCC
2 Rot Joystick 1 Taste 1
4 Schwarz GND
7 Orange Joystick 1 Taste 2
10 Gelb Joystick 2 Taste 1
12 Blau MIDI Out
14 Grau Joystick 2 Taste 2

Wie ich vorhin schon erwähnt habe werden die Achsen des Lenkrads nicht über Pin 3,6,11,13 übertragen. Es sind nur die Tasten Ausgänge des Lenkrads belegt und der Midi Ausgang des Rechners. Mein erster Gedanke: Also wird scheinbar irgendwie über die 4 Tasten der Status des Lenkrads übertragen und über Midi das Force Feedback gesteuert. Da wir die Achsen und mehr als 4 Tasten haben muss es irgend einen Trick geben wie über die 4 Tasten die Infos an unseren Rechner geschickt werden. Aber wie rausfinden? Ich habe mir von meiner Arbeit einen Logic-Analyser ausgeliehen und ein Kabel gebastelt an dem ich den Analyser anschliesen kann:

IMG_3989

Danach hab ich mir nen alten Rechner geschnappt und Windows 98 installiert, da es nurnoch dafür Treiber gibt. Danach hab ich alles verkabelt, Treiber installiert und schon ging es los. Über die eingebaute Config für “Gamecontroller” konnte ich schonmal testen ob das Lenkrad geht und einfache Force Feedback Befehle an das Lenkrad senden. Da das Lenkrad scheinbar Midi verwendet, was auch nur ne RS232 mit 31250 Baud ist, hab das noch schnell bei der Software des Analysers eingestellt und schon konnte ich sehen wie das Lenkrad tickt:

logic

Oben sieht man was ich mit geschnitten habe und darunter das Dokument wo ich nach und nach meine Beobachtungen Dokumentiert habe. Man sieht schön das vom Rechner aus über MIDI die Hex Befehle “0xA5″ und “0xB0″ kommen und das Lenkrad dann darauf Antwortet. Die Antwort erfolgt über die Buttons die als 3Bit parallel Schnittstelle mit Clock Signal missbraucht wird:

10 Gelb Clock
7 Orange Data
2 Rot Data
14 Grau (in der Software Schwarz) Data

Nach rumprobieren, Lenkrad bewegen und Tastendrücken hab ich rausgefunden das es sich bei dem Aufgenommenen Befehl um eine Statusabfrage handelt die ich Stück für Stück Dokumentiert habe, wie man ein wenig auf dem Screenshot sieht ;). Ich weis also jetzt was ich dem Lenkrad über die Midi Schnittstelle schicken muss damit ich die Daten der Achsen und Buttons bekomme :). Ich habe dann noch ein wenig rumgespielt mit Force Feedback und auch das Tool “FEdit” (Einfach danach googeln) gefunden und hab auch gleich noch die Force Feedback Befehle dokumentiert, hab davon aber leider keine Bilder mehr. Für interesierte hab ich hier mal das Dokument das ich angefertig hab angehängt:

V4-Protokol

Nachdem ich das also hatte konnte ich weiter basteln. Wie ich anfangs erwähnt hatte kann man Gameport Geräte wie dieses Lenkrad super mit einem Microkontroller verwenden und genau das habe ich auch getan ;). Bewaffnet mit den Infos habe ich mir einen Prototypen auf Lochraster aufgebaut:

IMG_3991IMG_3992

Nachdem ich mir ne einfache Software zusammen gehackt hatte und auf den Controller gespielt hatte konnte ich dem Lenkrad Befehle senden und es auch wunderbar auslesen :). Wenn ihr euch jetzt fragt wozu das ganze … das wird noch nicht verraten ;)

Ich hoffe ich konnte euch ein wenig zeigen wie Reverse engineering so von statten gehen kann und euch vieleicht ein wenig die Angst davor nehmen es vielleicht selbst mal zu versuchen. Ich werde dann erstmal weiter basteln um Stoff für den nächsten Eintrag zu sammeln!

LED Strobe

Mein erster Post hier auf meinem neuen Blog. Ich werde noch hier und da ein wenig basteln müssen das er für mich passt aber wann muss ich das nicht ;). Aber für den ersten Post geben ich gleich schon einen kurzen Einblick in ein etwas älteres Projekt von mir: Ein kleiner einstellbarer LED Strobe.

Gedacht ist er um Vibrationen bei RC-Modellen wie z.B. einen Quadrocopter oder ein Fahrzeug sichtbar zu machen und so die Frequenz rauszufinden. Getestet habe ich ihn nach dem Zusammenbau an meinen Ventilator

Leider existiert kein wirklicher Schaltplan für die Elektronik da ich das Ding mehr oder weniger frei Schnauze zusammen gebaut hab, aber vieleicht komme ich mal dazu eine richtige Platine samt Schaltplan zu erstellen und zur Verfügung zu stellen ;)

strobe_boardstrobe_backstrobe_displaystrobe_led