日別アーカイブ: 2007年12月14日

バランスWiiボードの解析メモ 2

やはり拡張ポート経由扱いで接続されていました。
アクセス方法は Nunchuk や Classic Controller と同じです。

他の拡張ポート経由のデバイス同様、16 でレジスタに書き込んで初期化を
行えば拡張デバイスの更新情報を取得できます。

例えばレポート番号 0x34 を使った場合下記の形式でデータが取れます。

34 00 00 AA AA BB BB CC CC DD DD ?? ?? EE ..

 AA AA 右上 (L)
 BB BB 左上  右下 (S)
 CC CC 右下  左上 (S)
 DD DD 左下 (L)

(AA AA~は BigEndian)
EE にも何らかの値が入っているように見えますが用途は不明です。
センサーは4つ。
バランスボード本体の4本の足の位置に入っているようです。

 +----------------+
 | BB(S)  AA(L) |
 | DD(L)  CC(S) |
 |      Power     |
 +----------------+

裏返して足部分だけ押してみると、上の AA~DD の値が個別に
反応する様子がわかります。

センサーの種類は、値の範囲から見て2種類。

(L) が 18000~ 程度
(S) が 2700~ あたり

この2つはそれぞれ精度の担当範囲が異なっているのかもしれません。
対角に配置して精度を補いつつ、向きもわかる構造になっていると
考えられます。

2007/12/17追記: 単なるセンサーのばらつきでした

またこの値は Nunchuk/Classic のような 0x17 デコードが不要です。
実際に 0x04a40000 ~ 0x04a400ff をダンプしてみても、そのまま
素の値が取れているように見えます。
例えば 0x04a400fc は最初から 0xa4 です。

識別に使うと思われる 0x04a400f0~ のライン

04a400f0 : ff ff 00 00 ff ff 00 00 00 00 00 00 a4 20 04 02

その他わかったこと
・電源ボタンは Wii Remote の (A) ボタン相当
・電源ランプは LED1
・Nintendo RVL-WBC-01

●バランスWiiボード の判別アルゴリズム
(1) 0x20 レポートを読み出し、拡張ポートが使われているかチェック
(2) 拡張ポートが使われていなければ Wii コントローラのみ
(3) 拡張ポートへ接続があれば 0x04a400fc を読み出し 0xa4 かチェック
(4) 0xa4 なら 0x17 デコードをしない。0xa4 でなければ 0x17 変換を行う
(5) 0x04a400fe~ff を読み出し判別する。
   0x00 0x00 Wiimote+ヌンチャク
   0x01 0x01 Wiimote+クラシックコントローラ
   0x04 0x02 バランスWiiボード

キャリブレーション等その他の情報は不明。
追記: 解析済みです。解析メモ 3以降を参照してください。
これは blog の1エントリに過ぎないので、他の後日のエントリも参照してください。

参考ページ
WiiLi.org Wiimote
WiiLi.org Wiimote/Extension Nunchuk
WiiLi.org Wiimote/Extension Classic Controller
WiiBrewWiki Wiimote

リンク
WiiFit 、バランスWiiボード

関連ページ
バランスWiiボードの解析メモ 3 / 4
バランスWiiボードの解析メモ 5
wiibalancepc PC版体重計 Download