Yesterday, the SmartJoy Dual Plus USB adapter arrived by snail-mail. I ordered that thing so I could use the good old PS2 controllers in stead of buying a new set of joysticks to play games on the PC.

The adapter with 2 pads plugged in. If you’re wondering about the semi-transparent white plastic wrapping around the
controllers’ wirings: that’s to rabbit-proof them. Rabbits and loose wires don’t mix.
What’s in the package?
Apart from the adapter itself, the package contains a (Windows/Mac) driver diskette and a brief explanation how to set it all up. Well, if you use Windows or OS X anyways.. As a reference I googled around to see how other USB joysticks are being set up.
Set-up
The actual set-up was a breeze. Before ordering, as with any other device a Linux-user buys, I had to make sure it was supported. I found out it is a HID-compliant device — so this should not pose any problem.
The supplied driver allows you to map buttons and probably do other stuff but obviously I can’t use that on my operating system. Possibly, additionally force feedback may be a problem — but that’s the first thing I disable in games anyways to save my wrists — so, at least for me, that is a non-issue.
In order for the device to be properly picked up by the Linux (2.6.17) kernel, I figured I had to modify its configuration.
First, obviously, joystick support has to be enabled (Kernel configuration / Device Drivers / Input device support). Additionally, I also enabled the ‘Multisystem gamepads’ under Kernel configuration / Device drivers / Input device support / Joysticks. In retrospect I don’t think these are necessary as the thing works, without any additional module loaded apart from ‘joydev‘.
Although I already had USB and HID support compiled-in (Kernel configuration / Device drivers / USB support), I also enabled
- Force feedback support
- /dev/hiddev’ raw HID device support
After my kernel was re-compiled and I loaded the modules (depending on your kernel configuration you might need to reboot though), I could insert the adapter to see it nicely being picked up as a:
- input: WiseGroup.,Ltd SmartJoy Dual PLUS Adapter as /class/input/input5
input: USB HID v1.00 Joystick [WiseGroup.,Ltd SmartJoy Dual PLUS Adapter] on usb-0000:00:02.1-1
Usage
To test the device I quickly did a ‘cat /dev/input/js0′ to see some garbage being spit out, which was an indication for me that the device was actually sending data to my PC.
I opened the KDE’s Control Panel and lo and behold, in the Joystick screen, it could see the joystick — and all its buttons and axis:

I noticed, when configuring some programs that a slight drawback is the fact that the adapter presents itself as one device: one joystick with a ‘double’ amount of axis and buttons. This may be a configuration issue or a driver bug. This hasn’t bothered me yet, as most games allow one to assign different mappings. I can imagine that some games might not understand that, though. This is something I’m going to look into.
If you have ever played two player games on one keyboard — you know, like playing Twister while your fingers get intertwined with the other persons’ — you can imagine how it feels to now use gamepads: bliss. It was an extensive — err — ‘testing’ session.
Update: After fiddling and looking around, I found out that what was causing the device to export only one joystick in stead of two. It was a driver issue all along: it simply didn’t know this devices’ vendor and product IDs. I cooked up this simple patch against linux/drivers/usb/input/hid-core.c to make two joysticks appear in stead of only one with all the buttons crammed into it:

Force Feedback
I tried to test force feedback today using the fftest utility but that didn’t do anything apart from barfing an error at me that the upload of effects failed due to a ‘function not implemented’. Oh well, at least I tried — I don’t miss it. I knew what I was getting into when I ordered it.
Conclusion
For a mere €15,95, the SmartJoy Dual Plus PS2 to USB adapter is a cheap, yet very functional solution to get to use your PS2 controllers on your Linux PC.
Given the fact that, ‘out of the box’ when 2 controllers are plugged in, it presents itself as one joystick device rather than two, and the force-feedback seems not to function, I give this piece of hardware a solid 8/10.
on
June 29th 2006 at 8:30 am in 










After looking into the kernel HID driver source I can see why force feedback won’t work: force-feedback initialisation is disabled for devices for which the HID_QUIRK_MULTI_INPUT flag is set.
Now, for instance, what is button 302 on controller 1, is button 318 on controller 2, et cetera. Basically, a driver should create 2 devices, remapping these events to ‘identical’ values. Looking at the code, I don’t think that’s trivial at all…
Oh! Disregard that latest thing.
The PCI ID for this card isn’t defined in the hid-core.c file in the Linux source tree; that’s what’s preventing it to appear as 2 seperate joysticks!
I checked lsusb output and noticed it being different than the ones defined in linux/drivers/usb/input/hid-core.c. So I updated the file in question to include these so it correctly detects the device.
Re-compiling and re-loading the module gave me a /dev/input/js0 as well as a /dev/input/js1. Yay!
Applying this patch here should set you up if you have a similar problem with this device.
Still no dice on the force feedback though.
(I will update the original post in a minute to include this fix.)
Hello Navaho,
The same ‘1 instead of 2′ problem exists in Mac OS X too.
Do you have any idea on how the same ‘devices’ vendor and product ID’ patch can be applied to Mac OS X?
If not, anybody else?
Help!
Hmm that’s odd, Tsonix.
At the risk of stating the obvious, I remember this device is supported since OSX v10.2, sure you run that version?
And I never checked it out, but I remember the thing came with a driver-diskette. Chances are there could be a driver for your OS on there… But I guess you most probably have already checked it out.
Google returned a few hits on their forums about people complaining this thing having issues on both Mac OS X 10.2 and 10.3, so I headed over to the Lik-Sang’s website but I noticed it has an Out-Of-Business notice because of legal actions brought down on them by Sony.
Yeah so that sucks. Usually, when you got a mainstream OS you shouldn’t have to worry about any of that — it should just ‘work’. Especially if a product says the OS is supported. I am used to checking out any hardware before selling it but not everybody is able, or even wants to do so.
There is a standard that these devices should comply to, but why do vendors ignore it? It seems almost like some vendors like to use flaky chips and flaky drivers to prevent it working on other machines, or something. I don’t get it…
I don’t know where you got the device from, but if something doesn’t do what is says on the box, in my country you can get a refund…
I have the same problem but in Windows XP (he work like one device)
Do you have any idea on how I can fix that?
Heh, fix a curious bug and people quickly start mistaking me for an expert on this stuff.
I surely know even less about Windows XP, so I really wouldn’t know, Jose.
F*ck… now I have the same problem as well…
Hm… I have Terminal open and I await your commands…

Hahah, well I guess that, at some time, I might have figured this out.
Meanwhile, I am trying to get more acquainted with the inner-workings of Darwin but at this point I can’t and won’t guarantee a thing.
hi, i’m trying to use the same hack for other device/vendor id but with the same issues as you…
the thing is that i really don’t want to recompile all my kernel (i’m a kind of newbie with all this stuff) just usbhid.
I copy linux/drivers/usb/input/ folder in my devel environment, patch hid-core.c adding my vendor/product id and registering it, adjust Makefile looking how the original was maded (this info is in /boot/config) and run make…
The module compile but thorws me some warnings..
WARNING: "usbhid_wait_io" [/home/diego/dev/c/modules/level3/usbhid.ko] undefined!
WARNING: “usbhid_submit_report” [/home/diego/dev/c/modules/level3/usbhid.ko] undefined!
WARNING: “usbhid_close” [/home/diego/dev/c/modules/level3/usbhid.ko] undefined!
WARNING: “usbhid_init_reports” [/home/diego/dev/c/modules/level3/usbhid.ko] undefined!
WARNING: “usbhid_open” [/home/diego/dev/c/modules/level3/usbhid.ko] undefined!
‘Ignoring’ that, i tried to insmod usbhid.ko and apparently the vermagic test pass because it cannot insert the module not by this normal problem but alerting me what warnings said me before
usbhid: Unknown symbol usbhid_wait_ioand the others…Some idea about this issue or how can i fix it?
I think that i’m not so far… what do u think?
sorry, my mistake… i had an error in Makefile :-/
the same hack works for Twin USB Joystick