[C++] 245 SDL : ゲームコントローラーを認識させる Apple Silicon

[M1 Mac, Monterey 12.6.3, clang 13.0.0, SDL 2.26.2, ChatGPT Plus, NO IDE]

以下のコードでPS4のワイヤレスゲームコントローラーを認識させることができましたが、肝心のボタンが反応しません。

有線接続すると操作できるようになりました。

ワイヤレス接続については明日以降Intel Macで試してみます。

bool App::Init( bool bFullScreen, unsigned int displayWidth, unsigned int displayHeight )
{
	if( SDL_Init( SDL_INIT_EVERYTHING ) != 0)
	{
		fprintf( stderr, "SDL failed to initialise: %s\n",SDL_GetError() );
		return false;
	}

	<中略>

	// mJoystick
	mJoystick = SDL_JoystickOpen(0);
    if (!mJoystick) {
        std::cerr << "Failed to open joystick: " << SDL_GetError() << std::endl;
        return false;
    }

	int num_axes = SDL_JoystickNumAxes(mJoystick);
    int num_buttons = SDL_JoystickNumButtons(mJoystick);

	printf("Joystick: %s\n", SDL_JoystickName(mJoystick));
	cout << "JoystickNumAxes: " << num_axes << endl;
	cout << "JoystickNumButtons: " << num_buttons << endl;

	return true;
}
Joystick: PS4 Controller
JoystickNumAxes: 6
JoystickNumButtons: 16

ChatGPT調査
Q1: SDL2アプリに接続したPS4コントローラーがApple Siliconではうまく動作しないという情報はありますか

一部のユーザーが報告しているように、SDL2アプリに接続したPS4コントローラーがApple SiliconベースのMacコンピューターで動作しないことがあります。これは、macOS上でのHIDの処理に関連する問題である可能性があります。

ただし、問題が発生するかどうかは、使用するSDL2バージョンやmacOSのバージョンによって異なります。最新のSDL2バージョンである2.0.16では、この問題が解決されたと報告されています。また、macOS 12(Monterey)では、この問題が修正されると予想されています。

したがって、問題が発生している場合は、まず最新のSDL2バージョンを使用することをお勧めします。また、macOSのアップデートがリリースされるのを待つこともできます。

Q2: 一部ユーザーの報告についてリンクを貼ってください

以下にApple SiliconでのPS4コントローラーの問題に関する報告を示します。

ただし、これらは個人の報告であり、すべてのユーザーに当てはまるわけではありません。また、Apple SiliconでのSDL2アプリケーションでの問題には関する報告もありますので、注意してください。