diff --git a/src/core/libraries/pad/pad.cpp b/src/core/libraries/pad/pad.cpp index a24d4bc1a..ca759083b 100644 --- a/src/core/libraries/pad/pad.cpp +++ b/src/core/libraries/pad/pad.cpp @@ -177,19 +177,18 @@ int PS4_SYSV_ABI scePadGetIdleCount() { return ORBIS_OK; } -int PS4_SYSV_ABI scePadGetInfo(u32* data) { +int PS4_SYSV_ABI scePadGetInfo(OrbisPadInfo* data) { LOG_WARNING(Lib_Pad, "(DUMMY) called"); if (!data) { return ORBIS_PAD_ERROR_INVALID_ARG; } - data[0] = 0x1; // index but starting from one? - data[1] = 0x0; // index? - data[2] = 1; // pad handle - data[3] = 0x0101; // ??? - data[4] = 0x0; // ? - data[5] = 0x0; // ? - data[6] = 0x00ff0000; // colour(?) - data[7] = 0x0; // ? + auto& controllers = *Common::Singleton::Instance(); + auto col = controllers[0]->GetLightBarRGB(); + std::memset(data, 0, sizeof(OrbisPadInfo)); + data->unk1 = 0x1; + data->pad_handle = 1; + data->unk3 = 0x00000101; + data->colour = col.r + (col.g << 8) + (col.b << 16); return ORBIS_OK; } diff --git a/src/core/libraries/pad/pad.h b/src/core/libraries/pad/pad.h index 2f4cbcc6a..d0a9dfd34 100644 --- a/src/core/libraries/pad/pad.h +++ b/src/core/libraries/pad/pad.h @@ -253,6 +253,18 @@ struct OrbisPadVibrationParam { u8 smallMotor; }; +struct OrbisPadInfo { + u32 unk1; + u32 unk2; + u32 pad_handle; + u32 unk3; + u32 unk4; + u32 unk5; + u32 colour; + u32 unk6; + u32 unk[30]; +}; + int PS4_SYSV_ABI scePadClose(s32 handle); int PS4_SYSV_ABI scePadConnectPort(); int PS4_SYSV_ABI scePadDeviceClassGetExtendedInformation( @@ -280,7 +292,7 @@ int PS4_SYSV_ABI scePadGetFeatureReport(); int PS4_SYSV_ABI scePadGetHandle(Libraries::UserService::OrbisUserServiceUserId userId, s32 type, s32 index); int PS4_SYSV_ABI scePadGetIdleCount(); -int PS4_SYSV_ABI scePadGetInfo(u32* data); +int PS4_SYSV_ABI scePadGetInfo(OrbisPadInfo* data); int PS4_SYSV_ABI scePadGetInfoByPortType(); int PS4_SYSV_ABI scePadGetLicenseControllerInformation(); int PS4_SYSV_ABI scePadGetMotionSensorPosition(); diff --git a/src/input/controller.cpp b/src/input/controller.cpp index c1ba584e3..04e845bf4 100644 --- a/src/input/controller.cpp +++ b/src/input/controller.cpp @@ -157,6 +157,10 @@ void GameController::SetLightBarRGB(u8 r, u8 g, u8 b) { } } +Colour GameController::GetLightBarRGB() { + return colour; +} + void GameController::PollLightColour() { if (m_sdl_gamepad != nullptr) { SDL_SetGamepadLED(m_sdl_gamepad, colour.r, colour.g, colour.b); diff --git a/src/input/controller.h b/src/input/controller.h index 1c711c488..fcd1308f4 100644 --- a/src/input/controller.h +++ b/src/input/controller.h @@ -126,6 +126,7 @@ public: void UpdateAcceleration(const float acceleration[3]); void UpdateAxisSmoothing(); void SetLightBarRGB(u8 r, u8 g, u8 b); + Colour GetLightBarRGB(); void PollLightColour(); bool SetVibration(u8 smallMotor, u8 largeMotor); void SetTouchpadState(int touchIndex, bool touchDown, float x, float y);