Joystick Axes Problem

Contents

The problem

Some USB adapters are not fully compatible with StepMania. These incompatible adapters have a hardware limitation that they cannot detect Left+Right pressed simultaneously, and they can't detect Up+Down pressed simultaneously.

This occurs in PlayStation->USB adapters if the adapter hardware maps the PlayStation directional pad button to USB joystick axes on the PC. The PC cannot detect 2 individual and simultaneous presses on the same axis. So, for example, if Left and Right are pressed simultaneously, the PC will only be able to detect Left or Right

The solution

Compatible USB adapters map the PlayStation directional pad to appear as USB joystick buttons to the PC. The PC can detect the state of each button individually allowing simultaneous presses of Left+Right.

Some adapters map the PlayStation directional pad to both USB axes and USB buttons. StepMania will ignore all axis data from USB joysticks and instead use the USB joystick's button data.

Other adapters will map the axis controls to buttons by using a Dance Pad Code.

Rotated Mat Workaround

http://www.stepmania.com/screens/Docs/rotated_dance_pad.jpg A less-than-ideal solution is to not use the directional buttons on the pad but instead use only the 4 corner buttons. These appear as the X, O, Square, and Triangle on PlayStation pads. If you turn the pad 45 degrees then map your joystick to match that configuration you can play the game fine and hit 2 directions simultaneously. This is not ideal however, as the game will be more difficult due to the buttons being further apart than normal.

This workaround can be thought of as temporary or permanent, depending on your comfort. It would benefit you to check if your adapter can use the Dance Pad Code, or consider purchasing one of the fully compatible USB_Adapters.

Workaround via Technique

Sometimes you can fool the game into recognizing simultaneous direction buttons by holding down one and pressing the other just as both arrows strike. You don't often get "fantastic" but you at least get "great." In testing it only worked by holding down the Right button and then pressing Left, but this could be dependent on the configuration.

This should be thought of as a temporary workaround. It would benefit you to check if your adapter can use the Dance Pad Code, or consider purchasing one of the fully compatible USB_Adapters.

XBCD Setup Workaround Idea

By default, when using the XBCD setup, the up/down/left/right arrows on an XBox dance pad are mapped to something called the POV hat switch. Due to the nature of this switch, two opposite directions can never be active at the same time. This is why the bug occurs.


Luckily, the XBCD Setup program lets you easily remap all the buttons on your XBox controller. We will just remap the XBox directional pad to gamepad buttons instead of POV Switches. To remap a button, go to the XBox tab in XBCD and click on the button that you wish to remap. A "Controller Assignment" dialog will open. Select the "Button" radio button, and in the drop down list, select a button that isn't in use. I chose buttons 13 through 16. When you're done, click Apply to save your changes.

(See [[1]] showing XBCD settings.)


NOTE: If you are running Windows 7 (and possibly Windows Vista), you will have to run XBCD Setup as an administrator to save your changes. Instructions: [[2]]


When running StepMania, simply set up the controls as your normally would.

(Information submitted by Steve The Pirate, who gives credit to JasaniAvatar for inspiring this idea.)

IgnoreJoyAxes

Older versions of StepMania contained an option called IgnoreJoyAxes. Activating this option caused StepMania to ignore all joystick axis when mapping inputs.

StepMania now has smarter input mapping which detects when your dance pad triggers an axis and button simultaneously and automatically ignores the axis. This method allows StepMania to be compatible with adapters that map the PlayStation directional pad to both USB joystick axes and USB joystick buttons.

Linux XBOX DDR pad support

Linux kernel version 2.6.19 and up now correctly supports XBOX DDR pads for Stepmania.

Your pad should automatically be recognized as a dance pad. If not, then try entering the following commands into the terminal:

modprobe -r xpad

modprobe xpad dpad_to_buttons=1

If that works, send the output of 'cat /proc/bus/usb/devices' to binary1230-at-yahoo-dot-com. I can add your pad's ID's to the driver so it'll work out of the box in the future.

If this does not work for you, you may want to try the other Linux hacks below:

Hack for Linux

Note: Links to patch are non-operational.


If you're using Linux and are not afraid of compiling your own kernel, the following dirty hack might help. The patch is known to work with the 2-pad Warez converter but may also work with other converters with the same problem. Please update this section if you know any more compatible hardware.

You need the installed kernel source, I assume it is in /usr/src/linux Follow this commands:

cd /usr/src/linux
wget http://rushbase.net/linux/linux-2.6.18-joydev_analogtodigital.patch
patch -p0 < linux-2.6.18-joydev_analogtodigital.patch
make menuconfig

Now go to the section 'Device Drivers'->'Input Device support' and set it as below(you may either use joydev as a module or compiled in the kernel, it doesn't matter)

<M>   Joystick interface
[*]     Analog to Digital [fix for the Joy Axis Problem]

Recompile the kernel modules(or the kernel itself), replace the old module in memory or reboot your computer. Now the directional buttons should report both as digital and analog. Since stepmania uses digital first you should be a happy user of your converter(and Linux :>) now.

If the above patch didn't work for you and stepmania still detects the analog buttons make sure that SDL uses the right joystick device, you can force a proper device by the following command.

SDL_JOYSTICK_DEVICE="/dev/input/js0" stepmania

Another Hack for Linux

This also might come useful: http://www.justlinux.com/forum/showthread.php?t=124868

Yet another hack for Linux

If you can't download any of the patches above or they don't work for you, you could try the patch available here: http://www.inf.ufsc.br/~adiel/dance-pad/dance-pad.html

This patch tries to solve the axes problem by reinterpreting the data sent by the pad and/or the USB adapter.

Another Solution for Linux

Solution for axis problem with usb psx pad that map wrong the axis buttons... Do this as root (kernel 2.6.X): note: if u have up this modules, unload them (modprobe -r module_name)

modprobe joydev

modprobe gamecon map=0,7 (this loads psx driver mapping)


WOP!!! The axis will be buttons.. u can test it with this program.. http://vba.ngemu.com/downloads/SDLTest-Linux.zip

Linux Workaround without Messing with the Kernel

If you fear recompiling your kernel, for some controllers you can recompile StepMania instead to use a special hack - see http://pasky.or.cz/~pasky/dev/stepmania/3.9/

This workaround works at least for the DragonPlus PS->USB converter.

November 2009 / Edit by DarkGiank:

Compiled files and sources for this patch available here :

http://download.aldealinkfast.com/dgblog/stepmania/

More information about this :

http://blogs.aldealinkfast.com/darkgiank/2009/11/08/hello-world/

How to solve the axes problems on soft pads (need soldering)

If you're pad doesn't recognize simultaneous left+right and up+down presses, and you tried to put a dance code and to remap it with drivers and other things, but none of these worked, then you'll probably need to remap it onto the hardware.If that's a soft pad like the Kraft one,or like those without foam inserts, then you'll probably have to do like I did. First of all, open the small box between Start and Select and turn the board upside down (so you'll see the green part with all the wirings and all); you'll notice that it has 11 black wires coming from the pad printed on a cellophane surface: http://img164.imageshack.us/img164/2510/boardyk0.gif ... The big one in the middle is for Ground (I think...) and it's common to the other black wires (try it by yourself by turning the board upside down again so you can see that the black prints have some silver-like stripes...connect one wire to the central and it will trigger either a button or an arrow)...I tried every wire with ground while looking at Windows Game Controllers, so I understood what wire is what button/arrow: it should be like this: http://img101.imageshack.us/img101/8697/wiresww6.gif

So the order of the wires from left to right is (except for the central one,as it is ground and is common to every wire so we don't need it now): START - Circle - Right - Square - Up - (ground) - Down - Triangle - Left - X - Select

Ok, since I don't want to lose the opportunity to play Pump and other games that requires upper diagonal arrows, I'll "map" Down and Left as Square and Triangle (because, on my pad those are the lower diagonal buttons).

First, you'll need a soldering iron, some solder, two pieces of wire, and some screwdrivers. Ok, assumed that you already unscrewed the box on the pad and you have the wires ready to be soldered, while the iron is warming, you'll need to cut the connections on the board.Here's a little scheme: http://img70.imageshack.us/img70/2721/solderingjm3.gif

PS the circle in the middle is every other connection on the board, the real board doesn't look like the diagram, only the part with the wires connected to it is as it is really...

Ok, now I've cutted the connections of Square and Triangle as near as I can to the plastic that glues the printed wires ont the PCB, and then I scraped the green part for soldering,and I also cutted the Down and Left connections, but this time slightly upper than for Square and Triangle (since you're gonna soldering here, you need some surface to solder on).Here's another scheme: http://img60.imageshack.us/img60/5001/scrapepl5.gif

Then, you'll need to solder like this:http://img68.imageshack.us/img68/2388/solderxo9.gif

Now open Windows Game Controllers panel, and if Down and Left trigger as buttons instead of axes, you did it! Now remap the pad in StepMania and DANCE!!

by MickMad


While trying the solder method above, i wanted a pad that would still work with a playstation. Since the newer versions of Stepmania will detect a button press instead of a joy axis if both are activated, i decided to leave the connections unbroken, and in the same way as "left" and "down", connect the "right" button to "circle" and the "up" button to "x" so that the joystick commands wouldn't conflict. It worked great when i started up stepmania, and the pad was way more responsive. To save time i used a conductive pen to draw the circuit connections on the pcb, the only problem i ran into was that care must be taken to make sure that unwanted connections are not made.

by Trickmaster who gives credit to MickMad for the original inspiration


Some friends of mine and I did the soldering as suggested by MickMad on the following dance pad:

http://www.stepmania.com/screens/Dance%20Pads/tn/usb-2tech.jpg

The following edited fotos show in more detail the wires and how we did the soldering: http://www.freeimagehosting.net/uploads/336b78ca76.jpg


http://www.freeimagehosting.net/uploads/92ac1f0a11.jpg

by Anik

I verified first that I couldn't solve the problem through software (on Linux by executing "hexdump -v < /dev/hidraw0" as root and inspecting the raw device input), at least not with my current PS2->USB adapter, and then followed MickMad's great tips above

Here's the resulting PCB for the Logic3 PS420N dance mat:

http://www.freeimagehosting.net/uploads/cef0d63c6f.jpg

The sacrificed buttons are the L2 and R1 I believe (or some other combination of two R/L-buttons, can't remember right now)

Happy dancing!

by Motin

Thanks to

Pair.com (donated web hosting)