summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSND\weimingzhi_cp <SND\weimingzhi_cp@e17a0e51-4ae3-4d35-97c3-1a29b211df97>2010-08-01 11:11:29 +0000
committerSND\weimingzhi_cp <SND\weimingzhi_cp@e17a0e51-4ae3-4d35-97c3-1a29b211df97>2010-08-01 11:11:29 +0000
commit3f7356f6f3b1825d53e41abe52aa4f16434ca75d (patch)
tree6748ea78874d8359e472a9894a2321efd5ca06eb
parent8bca7a2d9797c2b0546895f5e62fc05b38183468 (diff)
downloadpcsxr-3f7356f6f3b1825d53e41abe52aa4f16434ca75d.tar.gz
dfinput: only accept axis input when the current axis position is off enough from previous or initial position in config dialog box.
git-svn-id: https://pcsxr.svn.codeplex.com/svn/pcsxr@55344 e17a0e51-4ae3-4d35-97c3-1a29b211df97
-rw-r--r--ChangeLog10
-rw-r--r--macosx/plugins/DFInput/DFInput.xcodeproj/project.pbxproj1
-rw-r--r--macosx/plugins/DFInput/macsrc/MappingCell.m2
-rw-r--r--macosx/plugins/DFInput/macsrc/cfg.c32
-rw-r--r--macosx/plugins/DFInput/macsrc/cfg.h1
-rw-r--r--plugins/dfinput/cfg-gtk2.c32
6 files changed, 68 insertions, 10 deletions
diff --git a/ChangeLog b/ChangeLog
index 2325fb90..a561e06d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+August 1, 2010 Wei Mingzhi <whistler_wmz@users.sf.net>
+
+ * plugins/dfinput/cfg-gtk2.c: Only accept axis input if the current axis
+ position is off enough from the previous position or initial position.
+ * macosx/plugins/DFInput/macsrc/cfg.c: Likewise.
+ * macosx/plugins/DFInput/macsrc/cfg.h: Likewise.
+ * macosx/plugins/DFInput/macsrc/MappingCell.m: Likewise.
+ * macosx/plugins/DFInput/DFInput.xcodeproj/project.pbxproj: Fixed compile
+ error.
+
July 31, 2010 Wei Mingzhi <whistler_wmz@users.sf.net>
* plugins/dfsound/spu.c: Silenced warning on Mac OS X and FreeBSD.
diff --git a/macosx/plugins/DFInput/DFInput.xcodeproj/project.pbxproj b/macosx/plugins/DFInput/DFInput.xcodeproj/project.pbxproj
index 416142b2..35a8d87e 100644
--- a/macosx/plugins/DFInput/DFInput.xcodeproj/project.pbxproj
+++ b/macosx/plugins/DFInput/DFInput.xcodeproj/project.pbxproj
@@ -516,6 +516,7 @@
../../../libpcsxcore,
../..,
../../../plugins/dfinput,
+ ../../../plugins/dfinput,
../../../../plugins/dfinput,
./SDL,
./SDL/include,
diff --git a/macosx/plugins/DFInput/macsrc/MappingCell.m b/macosx/plugins/DFInput/macsrc/MappingCell.m
index 812adf42..0fb43bd1 100644
--- a/macosx/plugins/DFInput/macsrc/MappingCell.m
+++ b/macosx/plugins/DFInput/macsrc/MappingCell.m
@@ -48,6 +48,8 @@
/* delay for a little while to allow user to release the button pressed to activate the element */
[NSThread sleepUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.15]];
+ InitAxisPos(whichPad);
+
/* wait for 10 seconds for user to press a key */
for (i = 0; i < 10; i++) {
[NSApp runModalSession:session];
diff --git a/macosx/plugins/DFInput/macsrc/cfg.c b/macosx/plugins/DFInput/macsrc/cfg.c
index f9b897b8..9465426c 100644
--- a/macosx/plugins/DFInput/macsrc/cfg.c
+++ b/macosx/plugins/DFInput/macsrc/cfg.c
@@ -559,6 +559,28 @@ int CheckKeyDown() {
return 0;
}
+static Sint16 InitialAxisPos[256], PrevAxisPos[256];
+
+#define NUM_AXES(js) (SDL_JoystickNumAxes(js) > 256 ? 256 : SDL_JoystickNumAxes(js))
+
+void InitAxisPos(int padnum) {
+ int i;
+ SDL_Joystick *js;
+
+ if (g.cfg.PadDef[padnum].DevNum >= 0) {
+ js = SDL_JoystickOpen(g.cfg.PadDef[padnum].DevNum);
+ SDL_JoystickEventState(SDL_IGNORE);
+ } else return;
+
+ SDL_JoystickUpdate();
+
+ for (i = 0; i < NUM_AXES(js); i++) {
+ InitialAxisPos[i] = PrevAxisPos[i] = SDL_JoystickGetAxis(js, i);
+ }
+
+ SDL_JoystickClose(js);
+}
+
int ReadDKeyEvent(int padnum, int key) {
SDL_Joystick *js;
int i, changed = 0, t;
@@ -585,14 +607,15 @@ int ReadDKeyEvent(int padnum, int key) {
}
}
- for (i = 0; i < SDL_JoystickNumAxes(js); i++) {
+ for (i = 0; i < NUM_AXES(js); i++) {
axis = SDL_JoystickGetAxis(js, i);
- if (abs(axis) > 16383) {
+ if (abs(axis) > 16383 && (abs(axis - PrevAxisPos[i]) > 4096 || abs(axis - InitialAxisPos[i]) > 4096)) {
g.cfg.PadDef[padnum].KeyDef[key].JoyEvType = AXIS;
g.cfg.PadDef[padnum].KeyDef[key].J.Axis = (i + 1) * (axis > 0 ? 1 : -1);
changed = 1;
goto end;
}
+ PrevAxisPos[i] = axis;
}
for (i = 0; i < SDL_JoystickNumHats(js); i++) {
@@ -667,14 +690,15 @@ int ReadAnalogEvent(int padnum, int analognum, int analogdir) {
}
}
- for (i = 0; i < SDL_JoystickNumAxes(js); i++) {
+ for (i = 0; i < NUM_AXES(js); i++) {
axis = SDL_JoystickGetAxis(js, i);
- if (abs(axis) > 16383) {
+ if (abs(axis) > 16383 && (abs(axis - PrevAxisPos[i]) > 4096 || abs(axis - InitialAxisPos[i]) > 4096)) {
g.cfg.PadDef[padnum].AnalogDef[analognum][analogdir].JoyEvType = AXIS;
g.cfg.PadDef[padnum].AnalogDef[analognum][analogdir].J.Axis = (i + 1) * (axis > 0 ? 1 : -1);
changed = 1;
goto end;
}
+ PrevAxisPos[i] = axis;
}
for (i = 0; i < SDL_JoystickNumHats(js); i++) {
diff --git a/macosx/plugins/DFInput/macsrc/cfg.h b/macosx/plugins/DFInput/macsrc/cfg.h
index 232ed9c6..99bc103d 100644
--- a/macosx/plugins/DFInput/macsrc/cfg.h
+++ b/macosx/plugins/DFInput/macsrc/cfg.h
@@ -23,6 +23,7 @@
void GetKeyDescription(char *buf, int joynum, int key);
void GetAnalogDescription(char *buf, int joynum, int analognum, int dir);
+void InitAxisPos(int padnum);
int ReadDKeyEvent(int padnum, int key);
int ReadAnalogEvent(int padnum, int analognum, int analogdir);
diff --git a/plugins/dfinput/cfg-gtk2.c b/plugins/dfinput/cfg-gtk2.c
index 4bc5a7a3..cfbd8fa2 100644
--- a/plugins/dfinput/cfg-gtk2.c
+++ b/plugins/dfinput/cfg-gtk2.c
@@ -325,11 +325,20 @@ static void ReadDKeyEvent(int padnum, int key) {
time_t t;
GdkEvent *ge;
int i;
- Sint16 axis;
+ Sint16 axis, numAxes = 0, InitAxisPos[256], PrevAxisPos[256];
if (g.cfg.PadDef[padnum].DevNum >= 0) {
js = SDL_JoystickOpen(g.cfg.PadDef[padnum].DevNum);
SDL_JoystickEventState(SDL_IGNORE);
+
+ SDL_JoystickUpdate();
+
+ numAxes = SDL_JoystickNumAxes(js);
+ if (numAxes > 256) numAxes = 256;
+
+ for (i = 0; i < numAxes; i++) {
+ InitAxisPos[i] = PrevAxisPos[i] = SDL_JoystickGetAxis(js, i);
+ }
} else {
js = NULL;
}
@@ -349,13 +358,14 @@ static void ReadDKeyEvent(int padnum, int key) {
}
}
- for (i = 0; i < SDL_JoystickNumAxes(js); i++) {
+ for (i = 0; i < numAxes; i++) {
axis = SDL_JoystickGetAxis(js, i);
- if (abs(axis) > 16383) {
+ if (abs(axis) > 16383 && (abs(axis - InitAxisPos[i]) > 4096 || abs(axis - PrevAxisPos[i]) > 4096)) {
g.cfg.PadDef[padnum].KeyDef[key].JoyEvType = AXIS;
g.cfg.PadDef[padnum].KeyDef[key].J.Axis = (i + 1) * (axis > 0 ? 1 : -1);
goto end;
}
+ PrevAxisPos[i] = axis;
}
for (i = 0; i < SDL_JoystickNumHats(js); i++) {
@@ -404,11 +414,20 @@ static void ReadAnalogEvent(int padnum, int analognum, int analogdir) {
time_t t;
GdkEvent *ge;
int i;
- Sint16 axis;
+ Sint16 axis, numAxes = 0, InitAxisPos[256], PrevAxisPos[256];
if (g.cfg.PadDef[padnum].DevNum >= 0) {
js = SDL_JoystickOpen(g.cfg.PadDef[padnum].DevNum);
SDL_JoystickEventState(SDL_IGNORE);
+
+ SDL_JoystickUpdate();
+
+ numAxes = SDL_JoystickNumAxes(js);
+ if (numAxes > 256) numAxes = 256;
+
+ for (i = 0; i < SDL_JoystickNumAxes(js); i++) {
+ InitAxisPos[i] = PrevAxisPos[i] = SDL_JoystickGetAxis(js, i);
+ }
} else {
js = NULL;
}
@@ -428,13 +447,14 @@ static void ReadAnalogEvent(int padnum, int analognum, int analogdir) {
}
}
- for (i = 0; i < SDL_JoystickNumAxes(js); i++) {
+ for (i = 0; i < numAxes; i++) {
axis = SDL_JoystickGetAxis(js, i);
- if (abs(axis) > 16383) {
+ if (abs(axis) > 16383 && (abs(axis - InitAxisPos[i]) > 4096 || abs(axis - PrevAxisPos[i]) > 4096)) {
g.cfg.PadDef[padnum].AnalogDef[analognum][analogdir].JoyEvType = AXIS;
g.cfg.PadDef[padnum].AnalogDef[analognum][analogdir].J.Axis = (i + 1) * (axis > 0 ? 1 : -1);
goto end;
}
+ PrevAxisPos[i] = axis;
}
for (i = 0; i < SDL_JoystickNumHats(js); i++) {