Nintendo WiiMote

From LinuxMCE
Revision as of 20:07, 25 March 2008 by Zaerc (Talk | contribs) (added a few steps that also seem necessary)

Jump to: navigation, search
Wiimote.jpg

This device is not out of the box supported by LinuxMCE, but it is known to work [1] [2] [3].

Wiimote setup

I will try to explain what i have done to make the wiimote work with linuxmce.

The wiimote is a cheap gyration device which could work for linuxmce instead of the chief remote from fiire which i find to expensive!!

Setup

Login as root to the media director which has a bluetooth stick with ssh. Install the cwiid driver as fllows

apt-get install libcwiid0
apt-get install wminput

Make sure the uinput kernel module is loded at boot-time:

echo "uinput" >>/etc/modules

Load it manually in the mean time:

modprobe uinput

create the daemon

vi /usr/sbin/wminputd
#!/bin/bash
#read the config file
. /etc/wminputd.conf
export DISPLAY=:0

while true ; do
        #check if the OrbiterGL is already running!
        LMCE=`pidof OrbiterGL`
        if [ ! -z $LMCE ] ; then
                while true ; do
                #check if the wiimote is already connected
                SCAN=`hcitool con|grep $WIIMOTE_BDADDR`
                        if [ -z $SCAN ] ; then
                                PID=`pidof wminput`
                                kill -9 $PID
                                xset m 3 1/2
                                wminput -c ir_ptr $WIIMOTE_BDADDR &
                                sleep 5
                        else
                                sleep 5
                        fi
                done
        fi
done

Make it executable

chmod 755 /usr/sbin/wminputd
  • Create the config file
vi /etc/wminputd.conf
#this is the config file for the wminputd
#enter the wiimote mac address, you can find it with ~#hcitool scan  and then press the red button
#besides the battery's off the wiimote
#Then place the show'n mac address as follows
WIIMOTE_BDADDR="00:AA:00:BB:AA:FF"

you can find your address with hcitool scan

  • Edit the file /etc/cwiid/wminput/buttons
vi /etc/cwiid/wminput/buttons

And make it suitable to your needs below is mine

#buttons

Wiimote.A               = BTN_LEFT
Wiimote.B               = BTN_RIGHT
Wiimote.Up              = KEY_UP
Wiimote.Down    = KEY_DOWN
Wiimote.Left    = KEY_LEFT
Wiimote.Right   = KEY_RIGHT
Wiimote.Minus   = KEY_F7
Wiimote.Plus    = KEY_F8
Wiimote.Home    = KEY_F3
Wiimote.1               = KEY_F1
Wiimote.2               = KEY_F6


  • create the init file
vi /etc/init.d/wminputd
#!/bin/sh
# Start/stop the wminputd daemon.
#
### BEGIN INIT INFO
# Provides:          wminputd
# Required-Start:    $syslog $time
# Required-Stop:     $syslog $time
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: mousemodule
# Description:       wminputd
#
#
#
### END INIT INFO


test -f /usr/sbin/wminputd || exit 0
. /lib/lsb/init-functions

case "$1" in
start)  log_daemon_msg "Starting wii-remote mousemodule" "wminputd"
        start-stop-daemon -b --start --quiet --pidfile /var/run/wminputd.pid --name wminputd --startas /usr/sbin/wminputd -- $LSBNAMES
        log_end_msg $?
        ;;
stop)   log_daemon_msg "Stopping wii-mote mousemodule" "wminputd"
        start-stop-daemon --stop --quiet --pidfile /var/run/wminputd.pid --name wminputd
        log_end_msg $?
        ;;
restart) log_daemon_msg "Restarting wii-mote mousemdule" "wminputd"
        start-stop-daemon --stop --retry 5 --quiet --pidfile /var/run/wminputd.pid --name wminputd
        start-stop-daemon -b --start --quiet --pidfile /var/run/wminputd.pid --name wminputd --startas /usr/sbin/wminputd -- $LSBNAMES
        log_end_msg $?
        ;;
*)      log_action_msg "Usage: /etc/init.d/wminputd {start|stop|restart}"
        exit 2
        ;;
esac
exit 0

Make it executable

chmod 755 /etc/init.d/wminputd

run the script and push the red button beside the battery and your wiimote is ready to go

enable the script so it wil start at boot time

update-rc.d wminputd defaults

now start the script and take look if it works

/etc/init.d/wminputd start

Troubleshooting

  • Q: When i reload the router then the wiimote will be slow
  • A: Just push the red button besides the wiimote so it will connect again