rubyでwiiリモコン操作

ruby/ffiを試した。
ruby1.8を使っているので
sudo gem1.8 install ffi --version "= 0.6.3"
すでに
sudo apt-get install wminput lswm
をしているので/usr/lib/のlibcwiid.so.1をつかう。
hcitool scanでリモコンのIDをてにいれる。
僕の場合は 00:24:44:A1:1D:76 だった。
もうちょっとで、wiiバランスボードができそうだ。
cwiid.hには、
int cwiid_get_balance_cal(struct wiimote *wiimote,struct balance_cal *balance_cal);
があるので、なんとかなりそうだが、ちょっと、煮詰まってる。
そこでとりあえず、リモコンのバイブとLEDの点滅のプログラムを作った。

<こちらにCwiidFFIのモジュール載せときました。>
http://gaziya.exblog.jp/15643259/
+++++++++++++++++++++++++++++++

#!usr/bin/env ruby

require 'rubygems'
require 'ffi'

module CwiidFFI
extend FFI::Library
ffi_lib 'libcwiid.so.1'

CWIID_LED1_ON = 0x01
CWIID_LED2_ON = 0x02
CWIID_LED3_ON = 0x04
CWIID_LED4_ON = 0x08

attach_function :str2ba,[:pointer,:pointer],:pointer
attach_function :cwiid_open,[:pointer,:int],:pointer
attach_function :cwiid_close,[:pointer],:int
attach_function :cwiid_set_rumble,[:pointer,:int],:int
attach_function :cwiid_set_led,[:pointer,:int],:int
end

address = "00:24:44:A1:1D:76"
bdaddr_t = FFI::MemoryPointer.new(:pointer,1)
CwiidFFI::str2ba(address, bdaddr_t)
puts "Put Wiimote in discoverable mode now (press 1+2)..."
wiimote_t = CwiidFFI::cwiid_open(bdaddr_t,0)

CwiidFFI::cwiid_set_rumble(wiimote_t,1)
CwiidFFI::cwiid_set_led(wiimote_t,CwiidFFI::CWIID_LED1_ON)
sleep 1
CwiidFFI::cwiid_set_rumble(wiimote_t,0)
CwiidFFI::cwiid_set_led(wiimote_t,CwiidFFI::CWIID_LED2_ON)
sleep 1
CwiidFFI::cwiid_set_led(wiimote_t,CwiidFFI::CWIID_LED3_ON)
sleep 1
CwiidFFI::cwiid_set_led(wiimote_t,CwiidFFI::CWIID_LED4_ON)
sleep 1
CwiidFFI::cwiid_set_led(wiimote_t,CwiidFFI::CWIID_LED1_ON | CwiidFFI::CWIID_LED3_ON)
sleep 1
CwiidFFI::cwiid_set_led(wiimote_t,0)
sleep 1
CwiidFFI::cwiid_set_led(wiimote_t,0x0f)
sleep 1

CwiidFFI::cwiid_close(wiimote_t)
[PR]
by gaziya | 2011-03-26 11:08