#pragma once #include #include #include "Core/PS4/Loader/SymbolsResolver.h" namespace Emulator::HLE::Libraries::LibPad { typedef enum : u32 { SCE_PAD_BUTTON_L3 = 0x00000002, SCE_PAD_BUTTON_R3 = 0x00000004, SCE_PAD_BUTTON_OPTIONS = 0x00000008, SCE_PAD_BUTTON_UP = 0x00000010, SCE_PAD_BUTTON_RIGHT = 0x00000020, SCE_PAD_BUTTON_DOWN = 0x00000040, SCE_PAD_BUTTON_LEFT = 0x00000080, SCE_PAD_BUTTON_L2 = 0x00000100, SCE_PAD_BUTTON_R2 = 0x00000200, SCE_PAD_BUTTON_L1 = 0x00000400, SCE_PAD_BUTTON_R1 = 0x00000800, SCE_PAD_BUTTON_TRIANGLE = 0x00001000, SCE_PAD_BUTTON_CIRCLE = 0x00002000, SCE_PAD_BUTTON_CROSS = 0x00004000, SCE_PAD_BUTTON_SQUARE = 0x00008000, SCE_PAD_BUTTON_TOUCH_PAD = 0x00100000, SCE_PAD_BUTTON_INTERCEPTED = 0x80000000, } ScePadButton; struct ScePadOpenParam { u08 reserve[8]; }; struct ScePadAnalogStick { u08 x; u08 y; }; struct ScePadAnalogButtons { u08 l2; u08 r2; u08 padding[2]; }; struct SceFQuaternion { float x, y, z, w; }; struct SceFVector3 { float x, y, z; }; struct ScePadTouch { u16 x; u16 y; u08 id; u08 reserve[3]; }; constexpr int SCE_PAD_MAX_TOUCH_NUM = 2; typedef struct ScePadTouchData { u08 touchNum; u08 reserve[3]; u32 reserve1; ScePadTouch touch[SCE_PAD_MAX_TOUCH_NUM]; } ScePadTouchData; struct ScePadExtensionUnitData { u32 extensionUnitId; u08 reserve[1]; u08 dataLength; u08 data[10]; }; struct ScePadData { u32 buttons; ScePadAnalogStick leftStick; ScePadAnalogStick rightStick; ScePadAnalogButtons analogButtons; SceFQuaternion orientation; SceFVector3 acceleration; SceFVector3 angularVelocity; ScePadTouchData touchData; bool connected; u64 timestamp; ScePadExtensionUnitData extensionUnitData; uint8_t connectedCount; uint8_t reserve[2]; uint8_t deviceUniqueDataLen; uint8_t deviceUniqueData[12]; }; // hle functions int PS4_SYSV_ABI scePadInit(); int PS4_SYSV_ABI scePadOpen(Emulator::HLE::Libraries::LibUserService::SceUserServiceUserId userId, s32 type, s32 index, const ScePadOpenParam* pParam); int PS4_SYSV_ABI scePadReadState(int32_t handle, ScePadData* pData); void libPad_Register(SymbolsResolver* sym); }; // namespace Emulator::HLE::Libraries::LibPad