2017-12-11 1 views
0

Ich möchte einen PS4-Controller auf meinem PC arbeiten und dann die Daten über UART an einen Mikrocontroller weiterleiten.Schnittstelle Playstation DualShock 4 (DS4) Controller unter Linux mit C++

Das Problem ist, dass ich keine Erfahrung in C++ - Programmierung für Linux habe. Der UC-Teil ist eher zu meinen Gunsten. Trotzdem möchte ich ein Programm schreiben, das eine Verbindung mit einem PS4-Controller herstellen und alle Tasten, Sticks, Bewegungen und das Track-Pad lesen kann. Außerdem wäre es schön, Rumble und die LED-Farbe kontrollieren zu können.

Ich benutze Ubuntu 16.4 und habe gelesen, dass der PS4-Controller nativ seit ver unterstützt wird. 14.xx. Aber alles, was ich über eine Verbindung finden kann, ist, wie man den Controller für Steam oder Gaming im Allgemeinen aufstellt. Aber nicht, wie diese Statusinformationen erhalten und mit ihnen mit C++ arbeiten.

Im Internet habe ich einige Projekte gefunden, die alle mindestens 3-4 Jahre alt sind und eine alte Version von Ubuntu verwenden. Aber da der Controller nativ unterstützt wird, wäre es schön, ihn ohne veraltete Plugins/Treiber zu verwenden, die sowieso veraltet sind. Ich habe auch angefangen, HID-Geräte zu untersuchen, aber das scheint mehr eine Art Workaround zu sein und ich hoffte, z. eine Bibliothek zu enthalten und zu verwenden ...

Wenn jemand mir einen Hinweis geben kann, würde es sehr geschätzt werden.

Antwort

1

Ich habe das meiste davon auf einem Himbeer-pi aber das meiste davon gilt nach wie vor, weil die zugrunde liegenden Treiber sind meist die gleichen

Connecting: https://wiki.gentoo.org/wiki/Sony_DualShock Blick auf das Teil über bluetoothctl und entweder versuchen, das folgen oder erhalten ein drahtloser Dongle. (Das sollte automatisch eingerichtet)

Kontrolliert: Ihre beste Wette liest /dev/input/jsX wobei x die Nummer des Controllers Sie verbunden sind (normalerweise 0). Dies funktioniert mit normalen Leseoperationen, sollte also kein Problem sein. Diese Datei enthält alles von Tastenanschlägen bis zu Trackpad-Ereignissen und allen anderen Sensordaten. Es ist ereignisbasiert, wenn Sie also eine Taste drücken, erhalten Sie einen 8 Byte Datenburst. Die Struktur sieht wie folgt aus:
1. Zeitstempel niedrigste Byte
2. Timestamp zweitniedrigste Byte
3. Timestamp zweithöchste Byte
4. Zeitstempel höchste Byte
5. Messdaten MSB
6. Messdaten LSB
7. Typ (1 für Taste. 2 für Achse (also ein Stick oder ein anderer analoger Wert))
8. ID Byte (also die ID der gedrückten Taste. ZB: 1 für x, 2 für Quadrat, 5 für linken Stock x)

LEDs: Dieser ist ein bisschen komplizierter. Der einzige Weg, den ich bis jetzt gefunden habe, ist Zugriff auf /sys/class/leds
Dieser Ordner sollte einen Unterordner Ordner wie etwa 0005:054C:05C4.0009:<blue/green/red/global>
Das sind Ihre R/G/B-Kanäle enthalten. In diesen Ordnern befinden sich Dateien max_brightness und brightness Um die Farbe zu ändern genannt zum Beispiel 0x00FF00 0-blue

+0

Vielen viel Sie sehr red 255-green und 0 schreiben! Leider wurde mir in letzter Zeit eine andere Aufgabe mit höherer Priorität zugewiesen, also muss ich etwas später nachschauen, aber das klingt erstaunlich einfach. –