Hilfe bei selbstbau USB Schubsteuerung

Hillar

Neues Mitglied
3 Dez 2020
3
0
1
Sprachen
  1. ANSI C
  2. C++
  3. Python
Hallo zusammen,

mir ist bewusst, dass das hier eigentlich das ARM Forum ist, mein Problem ist aber eher ein USB Problem in einem Projekt mit einem ARM Microcontroller, nämlich einem STM32F411 auf einem BlackPill Board.
Als Entwicklugsumgebung verwende ich die STM32CubeIDE unter Linux.

Nun zu meinem Projekt. Ich möchte eine eigene Schubsteuerung zu meinem Joystick bauen, also den Teil, der bei einem HOTAS System für die linke Hand gedacht ist. Den Joystick habe ich bereits selbst (um)gebaut, ganz neu ist mir das Thema also nicht. Technisch wird das ganze also ein Custom USB HID Gerät.
Die Schubsteuerung soll 4 Schubregler bekommen, damit ich bei einer 747 jedes Triebwerk einzeln regeln kann :-D
Das Problem ist, dass der PC von den 4 definierten Schubreglern nur einen erkennt, die anderen 3 fallen einfach unter den Tisch.
Mein ReportDescriptor sieht so aus (11 Achsen, davon 4 Schub, ein 8-Wege Hat und 36 Buttons):

C:
/** Usb HID report descriptor. */
__ALIGN_BEGIN static uint8_t CUSTOM_HID_ReportDesc_FS[USBD_CUSTOM_HID_REPORT_DESC_SIZE] __ALIGN_END =
{
  /* USER CODE BEGIN 0 */

  0x05, 0x01,                    // USAGE_PAGE (Generic Desktop)
  0x09, 0x04,                    // USAGE (Joystick)

  0xa1, 0x01,                    // COLLECTION (Application)

  // 6 Byte

  // ------------------------- Axes ----------------------------

  0xa1, 0x00,                    //   COLLECTION (Physical)

  0x09, 0x30,                    //     USAGE (X)
  0x09, 0x31,                    //     USAGE (Y)
  0x09, 0x32,                    //     USAGE (Z)
  0x09, 0x33,                    //     USAGE (Rx)
  0x09, 0x34,                    //     USAGE (Ry)

  0x09, 0x37,                    //     USAGE (Dial)
  0x09, 0x38,                    //     USAGE (Wheel)

  0x09, 0x36,                    //     USAGE (Slider)
  0x09, 0x36,                    //     USAGE (Slider)
  0x09, 0x36,                    //     USAGE (Slider)
  0x09, 0x36,                    //     USAGE (Slider)

  0x15, 0x00,                    //     LOGICAL_MINIMUM (0)
  0x26, 0xff, 0x0f,               //     LOGICAL_MAXIMUM ( 4095 = 12 Bit)

  0x75, 0x10,                    //     REPORT_SIZE (16)
  0x95, 11,                      //     REPORT_COUNT (11)

  0x81, 0x02,                    //     INPUT (Data,Var,Abs)
  0xc0,                          //   END_COLLECTION

  // 36 Byte

  // ------------------------- the hat switch, 4 Bit ----------------------------
  0xa1, 0x00,                    //   COLLECTION (Physical)

  0x05, 0x01,                    //     USAGE_PAGE (Generic Desktop)
  0x09, 0x39,                    //     USAGE (Hat switch)
  0x15, 0x00,                    //     LOGICAL_MINIMUM (0)
  0x25, 0x07,                    //     LOGICAL_MAXIMUM (7)
  0x35, 0x00,                    //     PHYSICAL_MINIMUM (0)

  0x46, 0x3b, 0x01,              //     PHYSICAL_MAXIMUM (315)
  0x75, 0x04,                    //     REPORT_SIZE (4)
  0x95, 0x01,                    //     REPORT_COUNT (1)
  0x65, 0x14,                    //     UNIT (Eng Rot:Angular Pos)
  0x55, 0x00,                    //     UNIT EXPONENT(0)

  0x81, 0x42,                    //     INPUT (Data,Var,Abs,Null)
  0xc0,                          //   END_COLLECTION

  // 26 Bytes

  // ------------------------- Buttons ----------------------------
  0xa1, 0x00,                    //   COLLECTION (Physical)

  0x05, 0x09,                    //     USAGE_PAGE (Button)
  0x15, 0x00,                    //     LOGICAL_MINIMUM (0)
  0x25, 0x01,                    //     LOGICAL_MAXIMUM (1)
  0x35, 0x00,                    //     PHYSICAL_MINIMUM (0)
  0x45, 0x01,                    //     PHYSICAL_MAXIMUM (1)

  0x75, 0x01,                    //     REPORT_SIZE (1)
  0x95, 36,                      //     REPORT_COUNT (36)
  0x19, 0x01,                    //     USAGE_MINIMUM (Button 1)
  0x29, 36,                      //     USAGE_MAXIMUM (Button 36)
  0x81, 0x02,                    //     INPUT (Data,Var,Abs)

  0xc0,                          //   END_COLLECTION

  // 23 byte

  /* USER CODE END 0 */
  0xC0    /*     END_COLLECTION                 */
};

Das Tool "jstest" meldet nur 10 Achsen anstatt 13 die es eigentlich sein müssten (der 8-Wege-Hat wird durch zwei Achsen dargestellt), davon nur ein Throttle anstatt der definierten 4:
Driver version is 2.1.0.
Joystick (Hillar ForceThrottle) has 10 axes (X, Y, Z, Rx, Ry, Throttle, Rudder, Wheel, Hat0X, Hat0Y)
and 36 buttons (Trigger, ThumbBtn, ThumbBtn2, TopBtn, TopBtn2, PinkieBtn, BaseBtn, BaseBtn2, BaseBtn3, BaseBtn4, BaseBtn5, BaseBtn6, ?, ?, ?, BtnDead, (null), (null), (null), (null), (null), (null), (null), (null), (null), (null), (null), (null), (null), (null), (null), (null), (null), (null), (null), (null)).
Testing ... (interrupt to exit)

In der grafischen Version sieht es dann so aus:

jstest_MissingSliders1.png

Es muss aber möglich sein, kommerzielle Joysticks wie der Saitek x56 habe auch mehr als einen (in dem Falls 2) Schubregler.
Wenn jemand eine Idee hat was ich ändern muss damit alle Schubregler erkannt werden wäre ich echt dankbar, ich habe keine Idee mehr woran es liegt.

Schon mal danke im Vorraus
Hillar
 

alecxs

Neues Mitglied
28 Jun 2020
15
2
3
Ich verstehe leider nix davon, ist das jetzt ein Problem mit dem HID oder vielleicht einfach PC-seitig? Hast Du es denn mittlerweile hingekriegt?
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)