X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=libpcsxcore%2Fplugins.c;h=b143923b595f71b9c5ea5fa0e01f89dcc530e298;hb=a1c43985137284cbcce5abfca50a1acc0a8d11c2;hp=19de72c51364b74e7822139512a7d16e38d354dc;hpb=2ead2fb6d618305ca48e50e1982bb7e01bf45237;p=pcsx_rearmed.git diff --git a/libpcsxcore/plugins.c b/libpcsxcore/plugins.c index 19de72c5..b143923b 100644 --- a/libpcsxcore/plugins.c +++ b/libpcsxcore/plugins.c @@ -371,8 +371,8 @@ extern int in_type[8]; void *hPAD1Driver = NULL; void *hPAD2Driver = NULL; -static int multitap1 = -1; -static int multitap2 = -1; +static int multitap1; +static int multitap2; //Pad information, keystate, mode, config mode, vibration static PadDataS pad[8]; @@ -630,6 +630,7 @@ void _PADstartPoll(PadDataS *pad) { switch (pad->controllerType) { case PSE_PAD_TYPE_MOUSE: stdpar[0] = 0x12; + stdpar[1] = 0x5a; stdpar[2] = pad->buttonStatus & 0xff; stdpar[3] = pad->buttonStatus >> 8; stdpar[4] = pad->moveX; @@ -639,6 +640,7 @@ void _PADstartPoll(PadDataS *pad) { break; case PSE_PAD_TYPE_NEGCON: // npc101/npc104(slph00001/slph00069) stdpar[0] = 0x23; + stdpar[1] = 0x5a; stdpar[2] = pad->buttonStatus & 0xff; stdpar[3] = pad->buttonStatus >> 8; stdpar[4] = pad->rightJoyX; @@ -648,7 +650,7 @@ void _PADstartPoll(PadDataS *pad) { memcpy(buf, stdpar, 8); respSize = 8; break; - case PSE_PAD_TYPE_GUNCON: // GUNCON - gun controller SLPH-00034 from Namco + case PSE_PAD_TYPE_GUNCON: // GUNCON - gun controller SLPH-00034 from Namco stdpar[0] = 0x63; stdpar[1] = 0x5a; stdpar[2] = pad->buttonStatus & 0xff; @@ -691,6 +693,7 @@ void _PADstartPoll(PadDataS *pad) { break; case PSE_PAD_TYPE_ANALOGPAD: // scph1150 stdpar[0] = 0x73; + stdpar[1] = 0x5a; stdpar[2] = pad->buttonStatus & 0xff; stdpar[3] = pad->buttonStatus >> 8; stdpar[4] = pad->rightJoyX; @@ -702,6 +705,7 @@ void _PADstartPoll(PadDataS *pad) { break; case PSE_PAD_TYPE_ANALOGJOY: // scph1110 stdpar[0] = 0x53; + stdpar[1] = 0x5a; stdpar[2] = pad->buttonStatus & 0xff; stdpar[3] = pad->buttonStatus >> 8; stdpar[4] = pad->rightJoyX; @@ -712,8 +716,8 @@ void _PADstartPoll(PadDataS *pad) { respSize = 8; break; case PSE_PAD_TYPE_STANDARD: - default: stdpar[0] = 0x41; + stdpar[1] = 0x5a; stdpar[2] = pad->buttonStatus & 0xff; stdpar[3] = pad->buttonStatus >> 8; //avoid analog value in multitap mode if change pad type in game. @@ -723,6 +727,19 @@ void _PADstartPoll(PadDataS *pad) { stdpar[7] = 0xff; memcpy(buf, stdpar, 8); respSize = 8; + break; + default: + stdpar[0] = 0xff; + stdpar[1] = 0xff; + stdpar[2] = 0xff; + stdpar[3] = 0xff; + stdpar[4] = 0xff; + stdpar[5] = 0xff; + stdpar[6] = 0xff; + stdpar[7] = 0xff; + memcpy(buf, stdpar, 8); + respSize = 8; + break; } } @@ -747,7 +764,8 @@ unsigned char _PADpoll(int port, unsigned char value) { req = value; // Don't enable Analog/Vibration for a standard pad - if (in_type[port] == PSE_PAD_TYPE_STANDARD) { + if (in_type[port] == PSE_PAD_TYPE_STANDARD || + in_type[port] == PSE_PAD_TYPE_NEGCON) { ; // Pad keystate already in buffer } else @@ -758,7 +776,8 @@ unsigned char _PADpoll(int port, unsigned char value) { } //if no new request the pad return 0xff, for signaling connected - if (reqPos >= respSize) return 0xff; + if (reqPos >= respSize) + return 0xff; switch(reqPos){ case 2: @@ -772,9 +791,12 @@ unsigned char _PADpoll(int port, unsigned char value) { case CMD_READ_DATA_AND_VIBRATE: //mem the vibration value for Large motor; pad[port].Vib[1] = value; + + if (in_type[port] != PSE_PAD_TYPE_ANALOGPAD) + break; + //vibration - if (in_type[port] != PSE_PAD_TYPE_STANDARD) - vibrate(port); + vibrate(port); break; } break; @@ -794,12 +816,6 @@ unsigned char _PADpollMultitap(int port, unsigned char value) { unsigned char CALLBACK PAD1__startPoll(int pad) { reqPos = 0; // first call the pad provide if a multitap is connected between the psx and himself - if (multitap1 == -1) { - PadDataS padd; - padd.requestPadIndex = 0; - PAD1_readPort1(&padd); - multitap1 = padd.portMultitap; - } // just one pad is on port 1 : NO MULTITAP if (multitap1 == 0) { PadDataS padd; @@ -850,6 +866,7 @@ long CALLBACK PAD1__keypressed() { return 0; } if (PAD1_##dest == NULL) PAD1_##dest = (PAD##dest) PAD1__##dest; static int LoadPAD1plugin(const char *PAD1dll) { + PadDataS padd; void *drv; hPAD1Driver = SysLoadLibrary(PAD1dll); @@ -872,6 +889,10 @@ static int LoadPAD1plugin(const char *PAD1dll) { LoadPad1Sym0(poll, "PADpoll"); LoadPad1SymN(setSensitive, "PADsetSensitive"); + padd.requestPadIndex = 0; + PAD1_readPort1(&padd); + multitap1 = padd.portMultitap; + return 0; } @@ -887,14 +908,6 @@ unsigned char CALLBACK PAD2__startPoll(int pad) { pad_index = 0; } - //first call the pad provide if a multitap is connected between the psx and himself - if (multitap2 == -1) { - PadDataS padd; - padd.requestPadIndex = pad_index; - PAD2_readPort2(&padd); - multitap2 = padd.portMultitap; - } - // just one pad is on port 1 : NO MULTITAP if (multitap2 == 0) { PadDataS padd; @@ -943,6 +956,7 @@ long CALLBACK PAD2__keypressed() { return 0; } LoadSym(PAD2_##dest, PAD##dest, name, FALSE); static int LoadPAD2plugin(const char *PAD2dll) { + PadDataS padd; void *drv; hPAD2Driver = SysLoadLibrary(PAD2dll); @@ -965,6 +979,10 @@ static int LoadPAD2plugin(const char *PAD2dll) { LoadPad2Sym0(poll, "PADpoll"); LoadPad2SymN(setSensitive, "PADsetSensitive"); + padd.requestPadIndex = 0; + PAD2_readPort2(&padd); + multitap2 = padd.portMultitap; + return 0; }