diff options
| author | SND\edgbla_cp <SND\edgbla_cp@e17a0e51-4ae3-4d35-97c3-1a29b211df97> | 2010-05-13 04:27:32 +0000 |
|---|---|---|
| committer | SND\edgbla_cp <SND\edgbla_cp@e17a0e51-4ae3-4d35-97c3-1a29b211df97> | 2010-05-13 04:27:32 +0000 |
| commit | bde36b80a64a25e1258187c2ddaf08e22cc3ba69 (patch) | |
| tree | 2cc9473d0a216481393b5a61d3c6f818000b8eab /libpcsxcore/plugins.c | |
| parent | 7c1066b38fd4cb7f6b0be449d63a4f53a9f6b17e (diff) | |
| download | pcsxr-bde36b80a64a25e1258187c2ddaf08e22cc3ba69.tar.gz | |
PADreadPort1/2 for NRage pad plugin (windows). :(
git-svn-id: https://pcsxr.svn.codeplex.com/svn/pcsxr@47945 e17a0e51-4ae3-4d35-97c3-1a29b211df97
Diffstat (limited to 'libpcsxcore/plugins.c')
| -rw-r--r-- | libpcsxcore/plugins.c | 153 |
1 files changed, 128 insertions, 25 deletions
diff --git a/libpcsxcore/plugins.c b/libpcsxcore/plugins.c index 90db0961..d5978931 100644 --- a/libpcsxcore/plugins.c +++ b/libpcsxcore/plugins.c @@ -96,6 +96,7 @@ PADtest PAD1_test; PADopen PAD1_open;
PADclose PAD1_close;
PADquery PAD1_query;
+PADreadPort1 PAD1_readPort1;
PADkeypressed PAD1_keypressed;
PADstartPoll PAD1_startPoll;
PADpoll PAD1_poll;
@@ -109,6 +110,7 @@ PADtest PAD2_test; PADopen PAD2_open;
PADclose PAD2_close;
PADquery PAD2_query;
+PADreadPort2 PAD2_readPort2;
PADkeypressed PAD2_keypressed;
PADstartPoll PAD2_startPoll;
PADpoll PAD2_poll;
@@ -140,7 +142,7 @@ static const char *err; #if defined (__MACOSX__)
#define LoadSym(dest, src, name, checkerr) \
dest = (src)SysLoadSym(drv, name); \
- if (checkerr) CheckErr(name); \ + if (checkerr) CheckErr(name); \
else SysLibError();
#else
#define LoadSym(dest, src, name, checkerr) \
@@ -322,6 +324,93 @@ static int LoadSPUplugin(const char *SPUdll) { void *hPAD1Driver = NULL;
void *hPAD2Driver = NULL;
+static unsigned char buf[256];
+unsigned char stdpar[10] = { 0x00, 0x41, 0x5a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff };
+unsigned char mousepar[8] = { 0x00, 0x12, 0x5a, 0xff, 0xff, 0xff, 0xff };
+unsigned char analogpar[9] = { 0x00, 0xff, 0x5a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff };
+
+static int bufcount, bufc;
+
+PadDataS padd1, padd2;
+
+unsigned char _PADstartPoll(PadDataS *pad) {
+ bufc = 0;
+
+ switch (pad->controllerType) {
+ case PSE_PAD_TYPE_MOUSE:
+ mousepar[3] = pad->buttonStatus & 0xff;
+ mousepar[4] = pad->buttonStatus >> 8;
+ mousepar[5] = pad->moveX;
+ mousepar[6] = pad->moveY;
+
+ memcpy(buf, mousepar, 7);
+ bufcount = 6;
+ break;
+ case PSE_PAD_TYPE_NEGCON: // npc101/npc104(slph00001/slph00069)
+ analogpar[1] = 0x23;
+ analogpar[3] = pad->buttonStatus & 0xff;
+ analogpar[4] = pad->buttonStatus >> 8;
+ analogpar[5] = pad->rightJoyX;
+ analogpar[6] = pad->rightJoyY;
+ analogpar[7] = pad->leftJoyX;
+ analogpar[8] = pad->leftJoyY;
+
+ memcpy(buf, analogpar, 9);
+ bufcount = 8;
+ break;
+ case PSE_PAD_TYPE_ANALOGPAD: // scph1150
+ analogpar[1] = 0x73;
+ analogpar[3] = pad->buttonStatus & 0xff;
+ analogpar[4] = pad->buttonStatus >> 8;
+ analogpar[5] = pad->rightJoyX;
+ analogpar[6] = pad->rightJoyY;
+ analogpar[7] = pad->leftJoyX;
+ analogpar[8] = pad->leftJoyY;
+
+ memcpy(buf, analogpar, 9);
+ bufcount = 8;
+ break;
+ case PSE_PAD_TYPE_ANALOGJOY: // scph1110
+ analogpar[1] = 0x53;
+ analogpar[3] = pad->buttonStatus & 0xff;
+ analogpar[4] = pad->buttonStatus >> 8;
+ analogpar[5] = pad->rightJoyX;
+ analogpar[6] = pad->rightJoyY;
+ analogpar[7] = pad->leftJoyX;
+ analogpar[8] = pad->leftJoyY;
+
+ memcpy(buf, analogpar, 9);
+ bufcount = 8;
+ break;
+ case PSE_PAD_TYPE_STANDARD:
+ default:
+ stdpar[3] = pad->buttonStatus & 0xff;
+ stdpar[4] = pad->buttonStatus >> 8;
+
+ memcpy(buf, stdpar, 5);
+ bufcount = 4;
+ }
+
+ return buf[bufc++];
+}
+
+unsigned char _PADpoll(unsigned char value) {
+ if (bufc > bufcount) return 0;
+ return buf[bufc++];
+}
+
+unsigned char CALLBACK PAD1__startPoll(int pad) {
+ PadDataS padd;
+
+ PAD1_readPort1(&padd);
+
+ return _PADstartPoll(&padd);
+}
+
+unsigned char CALLBACK PAD1__poll(unsigned char value) {
+ return _PADpoll(value);
+}
+
long CALLBACK PAD1__configure(void) { return 0; }
void CALLBACK PAD1__about(void) {}
long CALLBACK PAD1__test(void) { return 0; }
@@ -352,17 +441,30 @@ static int LoadPAD1plugin(const char *PAD1dll) { LoadPad1Sym1(open, "PADopen");
LoadPad1Sym1(close, "PADclose");
LoadPad1Sym0(query, "PADquery");
+ LoadPad1Sym1(readPort1, "PADreadPort1");
LoadPad1Sym0(configure, "PADconfigure");
LoadPad1Sym0(test, "PADtest");
LoadPad1Sym0(about, "PADabout");
LoadPad1Sym0(keypressed, "PADkeypressed");
- LoadPad1Sym1(startPoll, "PADstartPoll");
- LoadPad1Sym1(poll, "PADpoll");
+ LoadPad1Sym0(startPoll, "PADstartPoll");
+ LoadPad1Sym0(poll, "PADpoll");
LoadPad1SymN(setSensitive, "PADsetSensitive");
return 0;
}
+unsigned char CALLBACK PAD2__startPoll(int pad) {
+ PadDataS padd;
+
+ PAD2_readPort2(&padd);
+
+ return _PADstartPoll(&padd);
+}
+
+unsigned char CALLBACK PAD2__poll(unsigned char value) {
+ return _PADpoll(value);
+}
+
long CALLBACK PAD2__configure(void) { return 0; }
void CALLBACK PAD2__about(void) {}
long CALLBACK PAD2__test(void) { return 0; }
@@ -393,12 +495,13 @@ static int LoadPAD2plugin(const char *PAD2dll) { LoadPad2Sym1(open, "PADopen");
LoadPad2Sym1(close, "PADclose");
LoadPad2Sym0(query, "PADquery");
+ LoadPad2Sym1(readPort2, "PADreadPort2");
LoadPad2Sym0(configure, "PADconfigure");
LoadPad2Sym0(test, "PADtest");
LoadPad2Sym0(about, "PADabout");
LoadPad2Sym0(keypressed, "PADkeypressed");
- LoadPad2Sym1(startPoll, "PADstartPoll");
- LoadPad2Sym1(poll, "PADpoll");
+ LoadPad2Sym0(startPoll, "PADstartPoll");
+ LoadPad2Sym0(poll, "PADpoll");
LoadPad2SymN(setSensitive, "PADsetSensitive");
return 0;
@@ -532,23 +635,23 @@ void ReleasePlugins() { SysCloseLibrary(hNETDriver); hNETDriver = NULL;
}
}
- -void SetIsoFile(const char *filename) { - if (filename == NULL) { - IsoFile[0] = '\0'; - return; - } - strncpy(IsoFile, filename, MAXPATHLEN); -} - -const char *GetIsoFile(void) { - return IsoFile; -} - -boolean UsingIso(void) { - return (IsoFile[0] != '\0'); -} - -void SetCdOpenCaseTime(s64 time) { - cdOpenCaseTime = time; -} +
+void SetIsoFile(const char *filename) {
+ if (filename == NULL) {
+ IsoFile[0] = '\0';
+ return;
+ }
+ strncpy(IsoFile, filename, MAXPATHLEN);
+}
+
+const char *GetIsoFile(void) {
+ return IsoFile;
+}
+
+boolean UsingIso(void) {
+ return (IsoFile[0] != '\0');
+}
+
+void SetCdOpenCaseTime(s64 time) {
+ cdOpenCaseTime = time;
+}
|
