mirror of https://github.com/PCSX2/pcsx2.git
PAD: windows sstates support
This commit is contained in:
parent
afef852609
commit
ce7fbe6398
|
@ -17,6 +17,8 @@
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include "PAD.h"
|
||||||
|
|
||||||
#ifdef __linux__
|
#ifdef __linux__
|
||||||
// Seriously why there is no standard
|
// Seriously why there is no standard
|
||||||
#include "stdint.h"
|
#include "stdint.h"
|
||||||
|
@ -140,56 +142,4 @@ extern Window GSwin;
|
||||||
extern HINSTANCE hInst;
|
extern HINSTANCE hInst;
|
||||||
#endif
|
#endif
|
||||||
// Needed for config screen
|
// Needed for config screen
|
||||||
void GetNameAndVersionString(wchar_t *out);
|
void GetNameAndVersionString(wchar_t *out);
|
||||||
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
unsigned char controllerType;
|
|
||||||
unsigned short buttonStatus;
|
|
||||||
unsigned char rightJoyX, rightJoyY, leftJoyX, leftJoyY;
|
|
||||||
unsigned char moveX, moveY;
|
|
||||||
unsigned char reserved[91];
|
|
||||||
} PadDataS;
|
|
||||||
|
|
||||||
EXPORT_C_(void)
|
|
||||||
PADupdate(int pad);
|
|
||||||
EXPORT_C_(u32)
|
|
||||||
PS2EgetLibType(void);
|
|
||||||
EXPORT_C_(u32)
|
|
||||||
PS2EgetLibVersion2(u32 type);
|
|
||||||
EXPORT_C_(char *)
|
|
||||||
PS2EgetLibName(void);
|
|
||||||
EXPORT_C_(void)
|
|
||||||
PADshutdown();
|
|
||||||
EXPORT_C_(s32)
|
|
||||||
PADinit(u32 flags);
|
|
||||||
EXPORT_C_(s32)
|
|
||||||
PADopen(void *pDsp);
|
|
||||||
EXPORT_C_(void)
|
|
||||||
PADclose();
|
|
||||||
EXPORT_C_(u8)
|
|
||||||
PADstartPoll(int pad);
|
|
||||||
EXPORT_C_(u8)
|
|
||||||
PADpoll(u8 value);
|
|
||||||
EXPORT_C_(u32)
|
|
||||||
PADquery();
|
|
||||||
EXPORT_C_(void)
|
|
||||||
PADabout();
|
|
||||||
EXPORT_C_(s32)
|
|
||||||
PADtest();
|
|
||||||
EXPORT_C_(keyEvent *)
|
|
||||||
PADkeyEvent();
|
|
||||||
EXPORT_C_(u32)
|
|
||||||
PADreadPort1(PadDataS *pads);
|
|
||||||
EXPORT_C_(u32)
|
|
||||||
PADreadPort2(PadDataS *pads);
|
|
||||||
EXPORT_C_(void)
|
|
||||||
PADconfigure();
|
|
||||||
EXPORT_C_(s32)
|
|
||||||
PADfreeze(int mode, freezeData *data);
|
|
||||||
EXPORT_C_(s32)
|
|
||||||
PADsetSlot(u8 port, u8 slot);
|
|
||||||
EXPORT_C_(s32)
|
|
||||||
PADqueryMtap(u8 port);
|
|
||||||
EXPORT_C_(void)
|
|
||||||
PADsetSettingsDir(const char *dir);
|
|
|
@ -39,6 +39,7 @@
|
||||||
#include "svnrev.h"
|
#include "svnrev.h"
|
||||||
#include "DualShock3.h"
|
#include "DualShock3.h"
|
||||||
#include <timeapi.h>
|
#include <timeapi.h>
|
||||||
|
#include "Utilities/pxStreams.h"
|
||||||
|
|
||||||
#define WMA_FORCE_UPDATE (WM_APP + 0x537)
|
#define WMA_FORCE_UPDATE (WM_APP + 0x537)
|
||||||
#define FORCE_UPDATE_WPARAM ((WPARAM)0x74328943)
|
#define FORCE_UPDATE_WPARAM ((WPARAM)0x74328943)
|
||||||
|
@ -1596,3 +1597,49 @@ s32 PADsetSlot(u8 port, u8 slot)
|
||||||
// return pads[port][slot].enabled | !slot;
|
// return pads[port][slot].enabled | !slot;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void PADDoFreezeOut(void* dest)
|
||||||
|
{
|
||||||
|
freezeData fP = { 0, (s8*)dest };
|
||||||
|
if (PADfreeze(FREEZE_SIZE, &fP) != 0)
|
||||||
|
return;
|
||||||
|
if (!fP.size)
|
||||||
|
return;
|
||||||
|
|
||||||
|
Console.Indent().WriteLn("Saving PAD");
|
||||||
|
|
||||||
|
if (PADfreeze(FREEZE_SAVE, &fP) != 0)
|
||||||
|
throw std::runtime_error(" * PAD: Error saving state!\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void PADDoFreezeIn(pxInputStream& infp)
|
||||||
|
{
|
||||||
|
freezeData fP = { 0, nullptr };
|
||||||
|
if (PADfreeze(FREEZE_SIZE, &fP) != 0)
|
||||||
|
fP.size = 0;
|
||||||
|
|
||||||
|
Console.Indent().WriteLn("Loading PAD");
|
||||||
|
|
||||||
|
if (!infp.IsOk() || !infp.Length())
|
||||||
|
{
|
||||||
|
// no state data to read, but PAD expects some state data?
|
||||||
|
// Issue a warning to console...
|
||||||
|
if (fP.size != 0)
|
||||||
|
Console.Indent().Warning("Warning: No data for PAD found. Status may be unpredictable.");
|
||||||
|
|
||||||
|
return;
|
||||||
|
|
||||||
|
// Note: Size mismatch check could also be done here on loading, but
|
||||||
|
// some plugins may have built-in version support for non-native formats or
|
||||||
|
// older versions of a different size... or could give different sizes depending
|
||||||
|
// on the status of the plugin when loading, so let's ignore it.
|
||||||
|
}
|
||||||
|
|
||||||
|
ScopedAlloc<s8> data(fP.size);
|
||||||
|
fP.data = data.GetPtr();
|
||||||
|
|
||||||
|
infp.Read(fP.data, fP.size);
|
||||||
|
if (PADfreeze(FREEZE_LOAD, &fP) != 0)
|
||||||
|
throw std::runtime_error(" * PAD: Error loading state!\n");
|
||||||
|
}
|
|
@ -38,17 +38,31 @@
|
||||||
#include <queue>
|
#include <queue>
|
||||||
|
|
||||||
|
|
||||||
s32 PADinit();
|
typedef struct
|
||||||
|
{
|
||||||
|
unsigned char controllerType;
|
||||||
|
unsigned short buttonStatus;
|
||||||
|
unsigned char rightJoyX, rightJoyY, leftJoyX, leftJoyY;
|
||||||
|
unsigned char moveX, moveY;
|
||||||
|
unsigned char reserved[91];
|
||||||
|
} PadDataS;
|
||||||
|
|
||||||
|
|
||||||
|
void PADupdate(int pad);
|
||||||
void PADshutdown();
|
void PADshutdown();
|
||||||
|
s32 PADinit(u32 flags);
|
||||||
s32 PADopen(void* pDsp);
|
s32 PADopen(void* pDsp);
|
||||||
void PADclose();
|
void PADclose();
|
||||||
u32 PADquery();
|
|
||||||
s32 PADsetSlot(u8 port, u8 slot);
|
|
||||||
s32 PADfreeze(int mode, freezeData* data);
|
|
||||||
u8 PADstartPoll(int pad);
|
u8 PADstartPoll(int pad);
|
||||||
u8 PADpoll(u8 value);
|
u8 PADpoll(u8 value);
|
||||||
|
u32 PADquery();
|
||||||
keyEvent* PADkeyEvent();
|
keyEvent* PADkeyEvent();
|
||||||
void PADupdate(int pad);
|
u32 PADreadPort1(PadDataS* pads);
|
||||||
|
u32 PADreadPort2(PadDataS* pads);
|
||||||
void PADconfigure();
|
void PADconfigure();
|
||||||
//void PADDoFreezeOut(void* dest);
|
s32 PADfreeze(int mode, freezeData* data);
|
||||||
//void PADDoFreezeIn(pxInputStream& infp);
|
s32 PADsetSlot(u8 port, u8 slot);
|
||||||
|
s32 PADqueryMtap(u8 port);
|
||||||
|
void PADsetSettingsDir(const char* dir);
|
||||||
|
void PADDoFreezeOut(void* dest);
|
||||||
|
void PADDoFreezeIn(pxInputStream& infp);
|
Loading…
Reference in New Issue