2010年11月16日火曜日

Wiiリモコンの自動再接続

少し調べて見たのですが、なかなか難しいようです。

まず、リモコン自体の初期化の方法は無いみたい。
Wii本体の方では、Syncボタンを10秒長押しすることで、登録されたリモコンを初期化することができました。

ついでに Wii への登録方法も整理しておくと、1+2 同時押しと、電池のところのSyncボタンを押す方法の二種類あります。
前者は別のWiiで一時的に遊ぶ時に使うもの(ゲスト登録と呼ぼう)で、接続が切れたらペアリングも解除されます。
後者はWiiのホーム登録と呼ばれている処理で、こちらは再接続してくれます。

さて、前回の記事にも書いたように、Broadcom のスタックを使って Alt+S でパスキーをスルーして登録しました。
確定的な情報はありませんでしたが、ここが再接続しない原因として怪しいようです。
接続アプリを見てみても、「セキュリティで保護された接続」が薄く表示されていて、保護されていないことを示しています。
おそらくはパスキーをセットすれば、セキュリティで保護されたことになり、自動的な再接続も行ってくれるんじゃないでしょうか。

となると、プロトコルスタックの実装に依存する問題のようです。
Broadcom のサイトに行って、最新版(5.5.0.4700だったかな)をダウンロードインストール。
すると…リモコンを登録できなくなりました\(^o^)/
登録処理は Alt+S して最後まで行くんですが、実際には登録されていない状態。

次に、評判の良い BlueSoleil のスタックを入れてみました。
$25 ほどする商品ですが、買わなくても評価用に機能された状態で使うことができます。
アプリでは、「登録」と「ペアリング」の二種類の登録方法がありました。
「登録」の方ではパスキー入力無しでできますが、再接続はされず。
「ペアリング」はパスキー入力を求められ、知らないので失敗します。
Alt+S のような隠し機能にされていないだけで、機能的には Broadcom のと同じですね。

高速なデータ転送をしているという触れ込みもあるけれど、これは後で必要になったら使ってみましょう。
買ってまで BlueSoleil にする利点も無いので、Broadcom に戻します。

マシンは EeePC-S101 なので ASUS からドライバ落としてきてインストール。
バージョンは 5.5.0.4100 で無事認識できました。
# しかし確か最初は 5.5.0.4100 だった気がするが…まぁいいや。

Wiimote Project に、Linuxでホスト側のBluetoothアドレスを 30:30:30:30:30:30 にして、ペアキーを "000000" にしたらペアリングできたという記事がありました。
0x30 は ASCII コードでの文字 '0' ですから、パスキーはアドレスを使えば良いと推測されます。
しかし…実際のアドレスは 00:22:43:... などとなっていて、ASCII では入力できません。
Windows での変え方は分からないな。
レジストリの USBベンダーID/デバイスID っぽいところにアドレスが入っているが、これ書き換えていいものか。

キーは
  • HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\BTHidBus\
  • HKEY_LOCAL_MACHINE\SOFTWARE\Widcomm\BTConfig\Devices\00:...\
に入りそうだが、これは入力するペアキーそのものではなく、ペアキーから生成された数値になるようで、生成アルゴリズムまで調べるのも面倒だ。

やるなら、ペアリングの時にキー入れるところで、アプリのメモリをクラックするなりして直接書き換えちゃった方が楽そうだ。
うさみみハリケーン…入力されているところはあっさりと見つかりました。
テキスト入力のメモリだから文字列なのは当然ですね。
bluetoothデバイスIDは 00:22:... って00終端だから入れられないじゃん!

おそらくこの文字列を受け取る側では固定長バッファへ格納しているだろうから、そこを探すか。
んー見つからないな。ちょっと腰をすえてやらないとか。

0 件のコメント:

コメントを投稿