From 9d74b4ecb490bfec1fc4c21b49bd8a83ade03104 Mon Sep 17 00:00:00 2001 From: Sajid Date: Mon, 30 Sep 2024 10:55:30 +0600 Subject: [PATCH] Add additional xbox structures --- PowerUtils/xbox.h | 120 +++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 118 insertions(+), 2 deletions(-) diff --git a/PowerUtils/xbox.h b/PowerUtils/xbox.h index 6e6e48a..233d07c 100644 --- a/PowerUtils/xbox.h +++ b/PowerUtils/xbox.h @@ -2,6 +2,8 @@ #include #include #include +#include + #ifdef _WIN32 #include @@ -51,6 +53,16 @@ #define GUEST_HANDLE(HANDLE) ((HANDLE) | 0x80000000) #define HOST_HANDLE(HANDLE) ((HANDLE) & ~0x80000000) +// Return true to free the associated memory +typedef bool(*TypeDestructor_t)(void*); + +template +bool DestroyObject(void* obj) +{ + static_cast(obj)->~T(); + return true; +} + template struct be { @@ -117,12 +129,13 @@ struct be } }; +extern "C" void* MmGetHostAddress(uint32_t ptr); template struct xpointer { be ptr; - xpointer(T* ptr) : ptr(ptr) + xpointer(T* ptr) : ptr((uint32_t)ptr) { } @@ -134,7 +147,7 @@ struct xpointer return nullptr; } - return static_cast(ptr); + return reinterpret_cast(MmGetHostAddress(ptr)); } operator T* () const @@ -148,6 +161,12 @@ struct xpointer } }; +template +struct HostObject +{ + typedef TGuest guest_type; +}; + typedef BYTE XBYTE; typedef be XWORD; typedef be XDWORD; @@ -305,3 +324,100 @@ typedef struct _XKSEMAPHORE XDISPATCHER_HEADER Header; XDWORD Limit; } XKSEMAPHORE; + +typedef struct _XUSER_SIGNIN_INFO { + be xuid; + XDWORD dwField08; + XDWORD SigninState; + XDWORD dwField10; + XDWORD dwField14; + CHAR Name[16]; +} XUSER_SIGNIN_INFO; + +// Content types +#define XCONTENTTYPE_SAVEDATA 1 +#define XCONTENTTYPE_DLC 2 +#define XCONTENTTYPE_RESERVED 3 + +#define XCONTENT_NEW 1 +#define XCONTENT_EXISTING 2 + +#define XCONTENT_MAX_DISPLAYNAME 128 +#define XCONTENT_MAX_FILENAME 42 +#define XCONTENTDEVICE_MAX_NAME 27 + +typedef struct _XCONTENT_DATA +{ + XDWORD DeviceID; + XDWORD dwContentType; + be szDisplayName[XCONTENT_MAX_DISPLAYNAME]; + CHAR szFileName[XCONTENT_MAX_FILENAME]; +} XCONTENT_DATA, * PXCONTENT_DATA; + +typedef struct _XHOSTCONTENT_DATA : _XCONTENT_DATA +{ + // This is a host exclusive type so we don't care what goes on + std::string szRoot{}; +} XHOSTCONTENT_DATA, *PXHOSTCONTENT_DATA; + + +#define XCONTENTDEVICETYPE_HDD 1 +#define XCONTENTDEVICETYPE_MU 2 + +typedef struct _XDEVICE_DATA +{ + XDWORD DeviceID; + XDWORD DeviceType; + XQWORD ulDeviceBytes; + XQWORD ulDeviceFreeBytes; + be wszName[XCONTENTDEVICE_MAX_NAME]; +} XDEVICE_DATA, *PXDEVICE_DATA; + +// Direct reflection of XInput structures + +#define XAMINPUT_GAMEPAD_DPAD_UP 0x0001 +#define XAMINPUT_GAMEPAD_DPAD_DOWN 0x0002 +#define XAMINPUT_GAMEPAD_DPAD_LEFT 0x0004 +#define XAMINPUT_GAMEPAD_DPAD_RIGHT 0x0008 +#define XAMINPUT_GAMEPAD_START 0x0010 +#define XAMINPUT_GAMEPAD_BACK 0x0020 +#define XAMINPUT_GAMEPAD_LEFT_THUMB 0x0040 +#define XAMINPUT_GAMEPAD_RIGHT_THUMB 0x0080 +#define XAMINPUT_GAMEPAD_LEFT_SHOULDER 0x0100 +#define XAMINPUT_GAMEPAD_RIGHT_SHOULDER 0x0200 +#define XAMINPUT_GAMEPAD_A 0x1000 +#define XAMINPUT_GAMEPAD_B 0x2000 +#define XAMINPUT_GAMEPAD_X 0x4000 +#define XAMINPUT_GAMEPAD_Y 0x8000 + +typedef struct _XAMINPUT_GAMEPAD +{ + WORD wButtons; + BYTE bLeftTrigger; + BYTE bRightTrigger; + SHORT sThumbLX; + SHORT sThumbLY; + SHORT sThumbRX; + SHORT sThumbRY; +} XAMINPUT_GAMEPAD, *PXAMINPUT_GAMEPAD; + +typedef struct _XAMINPUT_VIBRATION +{ + WORD wLeftMotorSpeed; + WORD wRightMotorSpeed; +} XAMINPUT_VIBRATION, * PXAMINPUT_VIBRATION; + +typedef struct _XAMINPUT_CAPABILITIES +{ + BYTE Type; + BYTE SubType; + WORD Flags; + XAMINPUT_GAMEPAD Gamepad; + XAMINPUT_VIBRATION Vibration; +} XAMINPUT_CAPABILITIES, * PXAMINPUT_CAPABILITIES; + +typedef struct _XAMINPUT_STATE +{ + DWORD dwPacketNumber; + XAMINPUT_GAMEPAD Gamepad; +} XAMINPUT_STATE, * PXAMINPUT_STATE;