Forum: PC-Programmierung (HID) Gerät unter Linux ansteuern


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von TNZS (Gast)


Lesenswert?

Wie geht man vor, um ein Gerät (via Systemtreiber) unter Linux 
anzusteuern?
Konkret geht es um ein Playstation 5 Gamepad namens "DualSense".
Das hat Bluetooth und USB. Beides funktioniert unter Linux.
Es hat Gimmicks wie LEDs, Touchpad (steuert Maus), 
Beschleunigungssensor, Vibration, Mikrofon und Lautsprecher (USB, aber 
scheint einen Vibrator/VCM anzusprechen, denn für Audio reicht es nicht) 
und wohl noch nicht unterstütztes Einstellen der Trigger-Kräfte 
(Force-Feedback).

Erstes Ziel wäre, es über das System auszulesen (Tasten, Achsen, Sensor, 
Touch) und anzusteuern (LED, Vibration).

Welche Möglichkeiten/Ebenen gibt es dazu heutzutage (habe vor 20 Jahren 
mal was mit 'nem USB-Gerät gemacht)?

Treiber
https://github.com/torvalds/linux/blob/master/drivers/hid/hid-playstation.c

Zwei Projekte habe ich gefunden:

C via Treiber (älter)
https://github.com/nowrep/dualsensectl/blob/main/main.c

Python / GUI via Gerätedateien
https://github.com/cow-killer/dualsense-led-configurator

von Émile (Gast)


Lesenswert?

TNZS schrieb:
> Wie geht man vor, um ein Gerät (via Systemtreiber) unter Linux
> anzusteuern?

Warum "Systemtreiber"? Es gibt libusb.

von TNZS (Gast)


Lesenswert?

Weil der "Systemtreiber" nicht nur die niedrigere USB-Ebene, sondern 
auch Bluetooth erledigt.

von Frank K. (fchk)


Lesenswert?

TNZS schrieb:
> Weil der "Systemtreiber" nicht nur die niedrigere USB-Ebene, sondern
> auch Bluetooth erledigt.

/dev/input/js* gibt Dir die Standardinfos (Buttons, Joysticks, ...) 
zurück.

fchk

von TNZS (Gast)


Lesenswert?

Frank K. schrieb:
> /dev/input/js* gibt Dir die Standardinfos (Buttons, Joysticks, ...)
> zurück.

Da tut sich was. Aber was ist das Format?

    cat /dev/input/js0
    T���T���T���T���T���T���T���T���T��T���  T���

von Rolf M. (rmagnus)


Lesenswert?


von TNZS (Gast)


Lesenswert?

Das hier hilft nicht wesentlich weiter:

#include <stdlib.h>
#include <stdio.h>

struct input_event {
  struct timeval time;
  unsigned short type;
  unsigned short code;
  unsigned int value;
};
1
int main(void) {
2
3
  FILE *fp;
4
5
  fp = fopen("/dev/input/js0", "rb");
6
  if(!fp) {
7
        perror("File opening failed");
8
        return EXIT_FAILURE;
9
    }
10
11
    while(1){
12
        struct input_event ie;
13
        size_t ret_code = fread(&ie, sizeof ie, 1, fp);
14
15
        printf("time:  %ld \ntype:  %u\ncode:  %u\nvalue: %u\n\n", ie.time, ie.type, ie.code, ie.value);
16
    }
17
18
  fclose(fp);
19
  
20
  return EXIT_SUCCESS;
21
}

von TNZS (Gast)


Lesenswert?


von Rolf M. (rmagnus)


Lesenswert?

TNZS schrieb:
> struct input_event {
>   struct timeval time;
>   unsigned short type;
>   unsigned short code;
>   unsigned int value;
> };

Das ist die Struktur für das evdev, nicht für das Joystick-Interface.
Ich würde außerdem nicht fopen() und fread() nehmen, sondern die 
POSIX-Funktionen.

von Εrnst B. (ernst)


Lesenswert?

Code wie du die Farben am Controller (über HID, bluetooth und USB) 
verstellst findest du z.B. hier:

https://gitlab.com/CalcProgrammer1/OpenRGB/-/blob/master/Controllers/SonyGamepadController/SonyDualSenseController.cpp

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.