From 01d8f85bc87b9940ca859593418ed467e5de04df Mon Sep 17 00:00:00 2001 From: kalaposfos13 <153381648+kalaposfos13@users.noreply.github.com> Date: Fri, 25 Apr 2025 10:56:00 +0200 Subject: [PATCH] Fix gamepad indexing + cleanup --- src/core/libraries/pad/pad.cpp | 6 ++---- src/input/controller.cpp | 25 +------------------------ src/input/input_handler.cpp | 6 +++++- src/sdl_window.cpp | 2 +- 4 files changed, 9 insertions(+), 30 deletions(-) diff --git a/src/core/libraries/pad/pad.cpp b/src/core/libraries/pad/pad.cpp index bd8a0af57..293d31272 100644 --- a/src/core/libraries/pad/pad.cpp +++ b/src/core/libraries/pad/pad.cpp @@ -289,8 +289,7 @@ int PS4_SYSV_ABI scePadOutputReport() { } int PS4_SYSV_ABI scePadRead(s32 handle, OrbisPadData* pData, s32 num) { - LOG_TRACE(Lib_Pad, "called"); - LOG_DEBUG(Lib_Pad, "handle: {}", handle); + LOG_TRACE(Lib_Pad, "handle: {}", handle); int connected_count = 0; bool connected = false; Input::State states[64]; @@ -356,8 +355,7 @@ int PS4_SYSV_ABI scePadReadHistory() { } int PS4_SYSV_ABI scePadReadState(s32 handle, OrbisPadData* pData) { - LOG_TRACE(Lib_Pad, "called"); - LOG_DEBUG(Lib_Pad, "handle: {}", handle); + LOG_TRACE(Lib_Pad, "handle: {}", handle); if (handle == ORBIS_PAD_ERROR_DEVICE_NO_HANDLE) { return ORBIS_PAD_ERROR_INVALID_HANDLE; } diff --git a/src/input/controller.cpp b/src/input/controller.cpp index d69338236..740001bda 100644 --- a/src/input/controller.cpp +++ b/src/input/controller.cpp @@ -285,6 +285,7 @@ void GameControllers::TryOpenSDLControllers(GameControllers& controllers) { controllers[i]->m_sdl_gamepad = pad; controllers[i]->user_id = i + 1; slot_taken[i] = true; + SDL_SetGamepadPlayerIndex(pad, i); AddUserServiceEvent( {OrbisUserServiceEventType::Login, SDL_GetGamepadPlayerIndex(pad) + 1}); @@ -312,30 +313,6 @@ void GameControllers::TryOpenSDLControllers(GameControllers& controllers) { } } } - - // if (m_sdl_gamepad == nullptr || !SDL_GamepadConnected(m_sdl_gamepad)) { - // int gamepad_count; - // SDL_JoystickID* gamepads = SDL_GetGamepads(&gamepad_count); - // m_sdl_gamepad = gamepad_count > 0 ? SDL_OpenGamepad(gamepads[0]) : nullptr; - // if (Config::getIsMotionControlsEnabled()) { - // if (SDL_SetGamepadSensorEnabled(m_sdl_gamepad, SDL_SENSOR_GYRO, true)) { - // gyro_poll_rate = SDL_GetGamepadSensorDataRate(m_sdl_gamepad, SDL_SENSOR_GYRO); - // LOG_INFO(Input, "Gyro initialized, poll rate: {}", gyro_poll_rate); - // } else { - // LOG_ERROR(Input, "Failed to initialize gyro controls for gamepad"); - // } - // if (SDL_SetGamepadSensorEnabled(m_sdl_gamepad, SDL_SENSOR_ACCEL, true)) { - // accel_poll_rate = SDL_GetGamepadSensorDataRate(m_sdl_gamepad, SDL_SENSOR_ACCEL); - // LOG_INFO(Input, "Accel initialized, poll rate: {}", accel_poll_rate); - // } else { - // LOG_ERROR(Input, "Failed to initialize accel controls for gamepad"); - // } - // } - - // SDL_free(gamepads); - - // SetLightBarRGB(0, 0, 255); - // } } u32 GameController::Poll() { diff --git a/src/input/input_handler.cpp b/src/input/input_handler.cpp index f757f191a..ba7686a95 100644 --- a/src/input/input_handler.cpp +++ b/src/input/input_handler.cpp @@ -754,7 +754,11 @@ void ActivateOutputsFromInputs() { } u8 GetGamepadIndexFromJoystickId(SDL_JoystickID id) { - return SDL_GetGamepadPlayerIndex(SDL_GetGamepadFromID(id)) + 1; + u8 index = SDL_GetGamepadPlayerIndex(SDL_GetGamepadFromID(id)); + if (index > 3) [[unlikely]] { + UNREACHABLE_MSG("Index out of bounds: {}", index); + } + return index; } } // namespace Input diff --git a/src/sdl_window.cpp b/src/sdl_window.cpp index 16d8478ea..c5a0b2799 100644 --- a/src/sdl_window.cpp +++ b/src/sdl_window.cpp @@ -191,7 +191,7 @@ void WindowSDL::WaitEvent() { OnGamepadEvent(&event); break; case SDL_EVENT_GAMEPAD_SENSOR_UPDATE: { - int controller_id = Input::GetGamepadIndexFromJoystickId(event.gsensor.which) - 1; + int controller_id = Input::GetGamepadIndexFromJoystickId(event.gsensor.which); switch ((SDL_SensorType)event.gsensor.sensor) { case SDL_SENSOR_GYRO: controllers[controller_id]->Gyro(0, event.gsensor.data);