summaryrefslogtreecommitdiff
path: root/plugins/dfinput
diff options
context:
space:
mode:
authorSND\dario86_cp <SND\dario86_cp@e17a0e51-4ae3-4d35-97c3-1a29b211df97>2011-03-10 17:31:02 +0000
committerSND\dario86_cp <SND\dario86_cp@e17a0e51-4ae3-4d35-97c3-1a29b211df97>2011-03-10 17:31:02 +0000
commitc257b2ba811853191944c69da7e3fee2870504e2 (patch)
treebe5ba1b152105a65601d795cb296468a25051ec2 /plugins/dfinput
parent8ee251f1379ffab7d0fd914429e834ae672afc57 (diff)
downloadpcsxr-c257b2ba811853191944c69da7e3fee2870504e2.tar.gz
Fixed reopened issue #8061 (by darktjm).
git-svn-id: https://pcsxr.svn.codeplex.com/svn/pcsxr@64391 e17a0e51-4ae3-4d35-97c3-1a29b211df97
Diffstat (limited to 'plugins/dfinput')
-rw-r--r--plugins/dfinput/sdljoy.c36
1 files changed, 28 insertions, 8 deletions
diff --git a/plugins/dfinput/sdljoy.c b/plugins/dfinput/sdljoy.c
index ff4ed467..750f26bb 100644
--- a/plugins/dfinput/sdljoy.c
+++ b/plugins/dfinput/sdljoy.c
@@ -53,6 +53,26 @@ void DestroySDLJoy() {
}
}
+static void bdown(int pad, int bit)
+{
+ if(bit < 16)
+ g.PadState[pad].JoyKeyStatus &= ~(1 << bit);
+ else if(bit == DKEY_ANALOG) {
+ if(++g.PadState[pad].PadModeKey == 10)
+ g.PadState[pad].PadModeSwitch = 1;
+ else if(g.PadState[pad].PadModeKey > 10)
+ g.PadState[pad].PadModeKey = 11;
+ }
+}
+
+static void bup(int pad, int bit)
+{
+ if(bit < 16)
+ g.PadState[pad].JoyKeyStatus |= (1 << bit);
+ else if(bit == DKEY_ANALOG)
+ g.PadState[pad].PadModeKey = 0;
+}
+
void CheckJoy() {
uint8_t i, j, n;
@@ -70,15 +90,15 @@ void CheckJoy() {
if (g.cfg.PadDef[i].KeyDef[j].J.Axis > 0) {
if (SDL_JoystickGetAxis(g.PadState[i].JoyDev, n) > 16383) {
- g.PadState[i].JoyKeyStatus &= ~(1 << j);
+ bdown(i, j);
} else {
- g.PadState[i].JoyKeyStatus |= (1 << j);
+ bup(i, j);
}
} else if (g.cfg.PadDef[i].KeyDef[j].J.Axis < 0) {
if (SDL_JoystickGetAxis(g.PadState[i].JoyDev, n) < -16383) {
- g.PadState[i].JoyKeyStatus &= ~(1 << j);
+ bdown(i, j);
} else {
- g.PadState[i].JoyKeyStatus |= (1 << j);
+ bup(i, j);
}
}
break;
@@ -87,17 +107,17 @@ void CheckJoy() {
n = (g.cfg.PadDef[i].KeyDef[j].J.Hat >> 8);
if (SDL_JoystickGetHat(g.PadState[i].JoyDev, n) & (g.cfg.PadDef[i].KeyDef[j].J.Hat & 0xFF)) {
- g.PadState[i].JoyKeyStatus &= ~(1 << j);
+ bdown(i, j);
} else {
- g.PadState[i].JoyKeyStatus |= (1 << j);
+ bup(i, j);
}
break;
case BUTTON:
if (SDL_JoystickGetButton(g.PadState[i].JoyDev, g.cfg.PadDef[i].KeyDef[j].J.Button)) {
- g.PadState[i].JoyKeyStatus &= ~(1 << j);
+ bdown(i, j);
} else {
- g.PadState[i].JoyKeyStatus |= (1 << j);
+ bup(i, j);
}
break;