Sonntag, 17. August 2014

Xbox360 Controller C Integration

Dieser Blog ist umgezugen: http://scholtyssek.org/blog/de/2014/08/16/xbox360-controller-c-integration/

Heute habe ich ein Stück Code geschrieben, der es einfach ermöglicht, einen Xbox360 Controller  in ein C Programm zu integrieren. Der Code liest die Werte der Achsen und Knöpfe des Controllers aus und gibt diese Informationen auf dem Bildschirm aus. Das folgende Bild zeigt die Ausgabe dieser Informationen:



In diesem Fall wurden die Tasten "A" and "TL", welche die "top left" Taste ist, gedrückt. Das Projekt trägt den Namen xboxControllerClient und kann in meinem Repository unter https://code.google.com/p/scholtyssek-blogspot/ untergeladen werden.
Die Konfiguration des Controllers befindet sich in der Headerdatei xboxController.h. Darin ist außerdem das Mapping der Tasten und Achsen implementiert. Die gemessenen Daten werden in einer Struktur von Typ xboxCtrl gespeichert, welche sich ebenfalls in der Headerdatei befindet. Das folgende Beispiel zeigt, wie der Code verwendet werden kann:


#include <stdlib>
#include "xboxController.h"

int main(int argc, char **argv) {

 if (initXboxContoller(XBOX_DEVICE) >= 0) {
  xboxCtrl* xbox = getXboxDataStruct();
  readXboxControllerInformation(xbox);

  printf("xbox controller detected\n\naxis:\t\t%d\nbuttons:\t%d\nidentifier:\t%s\n",
    xbox->numOfAxis, xbox->numOfButtons, xbox->identifier);

  while (1) {
   readXboxData(xbox);
   printXboxCtrlValues(xbox);
  }

  deinitXboxController(xbox);
 }
 return 0;
}

Die Methode initXboxContoller(XBOX_DEVICE) öffnet eine Verbindung zu dem Device  /dev/input/js0. Dieses ist als Standarddevice eingetragen, um ein anderes Device zu verwenden, kann einfach der Wert von XBOX_DEVICE verändert werden. Anschließend wird mit dem Aufruf von getXboxDataStruct() ein Pointer auf die Datenstruktur xboxCtrl geholt. Darin sind die Messdaten gespeichert. Die Werte können mit einem Aufruf von  readXboxData(xbox) periodisch aktualisiert werden. Mit einem Aufruf von printXboxCtrlValues(xbox) können die Messwerte dann auf in der Konsole ausgegeben werden. Das war's schon, viele Freude damit :-)

Keine Kommentare:

Kommentar veröffentlichen