1

安いPS3コントローラーとNEO-GEO Xコントローラーを持っています。それらは両方とも例えばで検出されます。Fedora 20 と Lubuntu 14.04。それらは lsusb に表示されます

Bus 001 Device 012: ID 0e8f:0003 GreenAsia Inc. MaxFire Blaze2
Bus 001 Device 016: ID 1292:4e47 Innomedia

の下にデバイスが表示されます/dev/input。それらの両方で udevadm を実行すると、GreenAsia デバイスがpantherlordドライバーを使用し、他のデバイスがドライバーを使用することが示されます。hid-generic

次のテスト コードを実行すると、GreenAsia デバイスのみが SDL によって報告されます。プラグを抜くと、他のデバイスが検出されます。これは SDL の既知の制限ですか、それとも他の問題ですか?

// from http://www.libsdl.org/release/SDL-1.2.15/docs/html/guideinput.html
#include "SDL/SDL.h"

int main () {
    if (SDL_Init( SDL_INIT_VIDEO | SDL_INIT_JOYSTICK ) < 0)
    {
        fprintf(stderr, "Couldn't initialize SDL: %s\n", SDL_GetError());
        exit(1);
    }
    printf("%i joysticks were found.\n\n", SDL_NumJoysticks() );
    printf("The names of the joysticks are:\n");

    for( int i=0; i < SDL_NumJoysticks(); i++ ) 
    {
        printf("    %s\n", SDL_JoystickName(i));
    }
   return 0;
}
4

1 に答える 1

2

ジョイスティックの 1 つだけがデバイスなどにマップされている場合、私の質問に対する答えは「いいえ」のように見えます/dev/input/event13

SDL_SYS_JoystickInitのコードがあります

#if SDL_INPUT_LINUXEV
        /* This is a special case...
           If the event devices are valid then the joystick devices
           will be duplicates but without extra information about their
           hats or balls. Unfortunately, the event devices can't
           currently be calibrated, so it's a win-lose situation.
           So : /dev/input/eventX = /dev/input/jsY = /dev/jsY
        */
        if ( (i == 0) && (numjoysticks > 0) )
            break;
#endif

が 0 の場合i、「イベント」デバイスを探しています。私の PS3 コントローラはデバイス/dev/input/event13/dev/input/js1を取得しますが、私の NEO-GEO X コントローラは デバイス しか持っていない/dev/input/js0ため、ループから抜け出すと無視されます。

この場合の回避策は、対応する「イベント」デバイスを持たないデバイスを追加することですSDL_JOYSTICK_DEVICE

Brian McFarland のおかげで、この問題を解決することができました。

于 2015-05-16T15:39:01.517 に答える