X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=plugins%2Fdfinput%2Fpad.c;h=348bb8f346a39f9f2b3ba94a27fab86662da92cd;hb=4e47706596441172d1cc3f203b8baa398cea3023;hp=ab55db0f2ee289f53b1cd34f1dde35776a99dd95;hpb=b944a30eda75c36c94ef71e7768497801887612b;p=pcsx_rearmed.git diff --git a/plugins/dfinput/pad.c b/plugins/dfinput/pad.c index ab55db0f..348bb8f3 100644 --- a/plugins/dfinput/pad.c +++ b/plugins/dfinput/pad.c @@ -21,7 +21,7 @@ #include -#include "../../libpcsxcore/psemu_plugin_defs.h" +#include "psemu_plugin_defs.h" #include "main.h" enum { @@ -203,14 +203,43 @@ static void do_cmd2(unsigned char value) break; } break; - - case CMD_READ_DATA_AND_VIBRATE: - if (value == 1 && CurPad == 0 && in_enable_vibration) - plat_trigger_vibrate(); - break; } } +static void do_cmd3(unsigned char value) +{ + int i; + switch (CurCmd) { + case CMD_READ_DATA_AND_VIBRATE: + if (!in_enable_vibration) + break; + if (padstate[CurPad].pad.controllerType != PSE_PAD_TYPE_ANALOGPAD) + break; + + for (i = 0; i < 2; i++) { + if (padstate[CurPad].pad.Vib[i] == CurByte) + padstate[CurPad].pad.VibF[i] = value; + } + + plat_trigger_vibrate(CurPad, + padstate[CurPad].pad.VibF[0], + padstate[CurPad].pad.VibF[1]); + break; + case CMD_VIBRATION_TOGGLE: + for (i = 0; i < 2; i++) { + if (padstate[CurPad].pad.Vib[i] == CurByte) + buf[CurByte] = 0; + } + if (value < 2) { + padstate[CurPad].pad.Vib[value] = CurByte; + if((padstate[CurPad].PadID & 0x0f) < (CurByte - 1) / 2) { + padstate[CurPad].PadID = (padstate[CurPad].PadID & 0xf0) + (CurByte - 1) / 2; + } + } + break; + } +} + #if 0 #include unsigned char PADpoll_(unsigned char value); @@ -223,8 +252,7 @@ unsigned char PADpoll(unsigned char value) { #endif unsigned char PADpoll_pad(unsigned char value) { - - if (CurByte == 0) { + if (CurByte == 0) { CurCmd = value; CurByte++; @@ -233,13 +261,15 @@ unsigned char PADpoll_pad(unsigned char value) { CurCmd = CMD_READ_DATA_AND_VIBRATE; return do_cmd(); - } + } + + if (CurByte >= CmdLen) + return 0xff; // verified - if (CurByte == 2) + if (CurByte == 2) do_cmd2(value); - if (CurByte >= CmdLen) - return 0xff; // verified + do_cmd3(value); return buf[CurByte++]; }