ラベル Bluetooth の投稿を表示しています。 すべての投稿を表示
ラベル Bluetooth の投稿を表示しています。 すべての投稿を表示

2009/12/30

[Nokia N810] wiiリモコンをつないでみる (wiicontrol で)

まえふり
某ショップでは「N810はWiiが遊べる」などと例によった表記をして先立つものをふんだくっていますが、
(それがWiiリモコンをBluetooth HIDデバイスとして使うって意味なら)実際のところ、とても簡単です。
maemo向けには
  1. cwiid (C)
  2. wiicontrol (python)
という二つのソフトウェアがあります。

cwiidは C製で高機能。
  • Wiimoteをマウスとして使えたり
  • IR、加速度センサのデータをみたり
いろいろできますが、パッケージとGUIがないので導入がちょっと面倒です。追記:extras-develにあるようです

wiicontrolは python製でシンプルながら、
  • 柔軟なキーコンフィグ
  • わかりやすいGUI
  • maemo向けのキーコンフィグ
を備えます。
cwiidにはPC/linux向けの記事が既にありますから、
今回はwiicontrolに絞って紹介したいと思います。

早速インストール
1. 'apt-get install wiicontrol'なりAppManagerなりでwiicontrolをインストール
2. [アプリケーションメニュー] - [Extras] - [Wiicontrol] で起動。(Bluetoothは自動でOnになります)
wayv
これは変造版wiicontrolです

3 .すわ鎌倉と、wiiremoteの1と2を同時に押すか、電池近くの赤ボタンを押します。
4. 問題なく接続されれば、各モード選択にしたがってキーに機能が割り当てられます。

自分でキーコンフィグ
デフォルトの独特のキー配置(Bボタンは修飾キーです。気付いた?)を確認するためにも、
変更するためにも、pythonらしく、漢らしく、スクリプトをそのまま編集します。
とりあえず、バックアップをとっときましょう。(いざとなればapt-get --reinstall install wiicontrol)
$cp /usr/bin/wiicontrol /usr/bin/wiicontrol.backup
後は好きなエディタで/usr/bin/wiicontrolを編集するわけですが、
読んでみると#Home button is broken . Do not use it なんてコメントがあります。
これは/usr/bin/Wiimote.pyの213~215行目部分を
#        if newmask & buttonmap['H'] and not self.buttonmask & buttonmap['H']:
#            print "Re-enabling IR"
#            self.enable_IR()
こんなかんじにコメントアウトすることで回避できたりしますので、まずやっつけておきましょう。
さて、viだのemacsだのnanoだのありますが、leafpadもなかなかいいので
$sudo leafpad /usr/bin/wiicontrol
wayv

mapping_p, mapping_lはそれぞれPortrait/Landscape Mode時のキーマップです。
mapping_bはBボタンを押している間のキーマップですね。
モード別に各ボタンごとの機能を記述します。
機能には
  • a (+ Up/Down/Left/Right : D-padの各キー)
  • k(+キーの名前 : アルファベットやF1などのキー)
  • m (+ x座標 + y座標 : カーソルの移動)
  • b (+ 1/2/3 : 右/左/中ボタンクリック)
  • t (+ x座標 + y座標 : 指定座標をタップ)
  • s (+ 秒 : 指定秒スリープ)
  • False (機能割り当て無し)
があり、たとえば Landscape(横持ち)時のU (Up)キーで言えば"a Left"つまりD-padの左キーが割り当てられています。
300行目あたりの分岐を弄れば新たな機能を追加することも可能です。
そこらへんは次回。

蛇足
加速度センサの情報をリアルタイムにプロットするpyaxelwiiなんてのもあります。
それから全然関係ない話。そろそろPowerVRドライバ公開されるらしいです。年内とか。訂正。年内には出ないそうです。

2009/08/21

Nokia N810をBluetoothヘッドセットとして使う。

-------ぜんかいまでのあらすじ----
幼いころから、N810をA2DPのSinkにしてみたかった俺。
Google先生に尋ねてみれば、しかし、国内では推定お二人程しか挑戦していない、実にニッチなテーマであった。
足がかりとなったこちら(http://osdevj.g.hatena.ne.jp/osdevj/comment?date=20080612)のブログ様を発見したのが、去年の冬頃。
なんでも古いbluetooth-alsa中にa2recvとかいうA2DP再生プログラムがあるらしい。
というところまでは判ったものの、/dev/dspを使うからそのままでは動かないとか、armだからリトルエンディアンだとか、紆余曲折があって、最近ようやく動作したのだった。
-----------------------------------

....orz
そこで問題だ!このえぐられた心でどうするか?3択―ひとつだけ選びなさい

答え①ハンサムのポルナレフは豆腐の角に頭をぶつけて自害する。
答え②ハンサムのポルナレフは醤油を飲んで自害する。
答え③①の豆腐と②の醤油で冷奴をつくって食べる。

冷奴おいしいよね。 と脳内会議で決定されましたので、以下手順。なんてながい前振りだ。
  1. a2recv-esd.tar.gzをダウンロード。
  2. # tar xvzf a2recv-esd.tar.gz
  3. # cd a2recv-esd
  4. #./sdptool add A2SNK  //A2DP再生可能だとクエリに対して答える。
  5. #./a2recv-esd //a2recvを立ち上げる。
同梱のhciconfigで"./hciconfig hci0 class 0x200404"とかやれば、接続元デバイスから、N810がBluetoothヘッドセットに見えるようになります。
また、適当にesdを組み込んだだけなので、大概のスタックにおいて、ブツ切れ状態になります。
対処法としては、a2recvで繋ぎつつ、同梱のl2pingとかを"./l2ping <接続元BTアドレス>"とバックグラウンド実行してやるとまともになったりならなかったり。

ちなみに2recv-esd.tar.gzの中身はこんな感じになっております。
a2recv-esd/
a2recv-esd/a2recv-esd
a2recv-esd/avrecv (おまけ:AVRCP 受信)
a2recv-esd/avsnd (おまけ:AVRCP 送信)
a2recv-esd/hcitool
a2recv-esd/l2ping
a2recv-esd/sdptool

それからダメージソースコードはコチラ。diffとかとれよ自分。