My previous post was mentioned over at maemo.org, with some speculation as to whether sixaxisd might work on the Nokia N900.
My initial thought was that with a small modification to sixpair, it would be possible to feed it an arbitrary BD address, so I started poking around in the source – and found that the feature is already there :D
You need the BD address of the device that you want to pair with the sixaxis – get this with hciconfig – run it (on the N900 – or whatever system) and you’ll hopefully see something like this (I don’t have an N900) :
hci0: Type: USB
BD Address: 00:1A:80:2C:BE:D0 ACL MTU: 384:8 SCO MTU: 64:8
RX bytes:87170 acl:1503 sco:0 events:62 errors:0
TX bytes:574 acl:22 sco:0 commands:21 errors:0
Plug your sixaxis into some other machine via USB, grab (and compile) sixpair.c and run it with the BD address
gcc sixpair.c -lusb -o sixpair
./sixpair 00:1A:80:2C:BF:D3 # use your own BD addr here
And that should be about it – unplug the sixaxis, continue with the instructions from the previous post and when you press the PS button, everything should work as if by magic.
If it does not, get more magic. Either way, leave a comment and let me know how it goes :)
sixaxisd is a little daemon that will translate sixaxis input, sent via bluetooth, into joystick and (optionally) mouse input. I found it as part of the pdaXrom-ng distro, available here.
To set it up, grab the source here, unpack, apply the patch from here (which fixes a couple of axis mappings) and compile using make.
You need a kernel with uinput support (Device drivers -> Input device support -> Miscellaneous devices -> User level driver support – or CONFIG_INPUT_UINPUT) and appropriate bluetooth support (I use ps3_defconfig’s defaults in this area), although you don’t need any particular system bluetooth services running – we set that up ourselves.
To configure the bluetooth device using hciconfig (which is part of Debian’s bluez package), run the following commands -
hciconfig hci0 up # bring up the interface
hciconfig hci0 lm master # set link mode to master
hciconfig hci0 piscan # enable page and inquiry scan
And then start the daemon -
# optional -mouse param provides mouse emulation
Hit the PS button on the controller to bring it to life – all going well, there device nodes /dev/input/js0 and /dev/input/mouse0 will be created.
There’s an init script to handle the hci configuration and all of this that may be found in the pdaXrom svn repo.
(I use my sixaxis with my PS3 – if you want to use it with a different system, you’ll need to use sixpair, available here)