Archives

January 2008 の記事

一応動きました。

EeePC wbalancege

・EeePC 4G-X
・RAM 2GB に増設済み (512MB は RAMDISK)
・CPU Clock は 630MHz のまま
・Google Earth の cache は RAMDISK に割り当て
・使用した Bluetooth アダプタは BT-MicroEDR2

「建物の3D表示」(3Dモデル) ありでも GoogleEarth 単体だと
思ったより速くスムーズに動きます。

WbalanceGE 併用だと非常に厳しいです。
建物が多かったりアップになるとかなりのコマ落ちに。
上のキャプチャの状態では歩くのもやっと。
建物の3D表示 が無ければ大丈夫です。
WbalanceGE の描画はもっと軽量化した方が良いのかも(たぶん重すぎ)。

バランスWiiボード で地球を歩く WbalanceGE v1.10


内蔵ドライブは 4GB、C: ドライブの空きも少なくそのままでは無理です。

VC のみの最小構成にして SDHCカードに入れます。
容量は EeePC 付属の 4GB SDHC カードで十分でした。
RAM も標準の 512MB のまま。増設なしです。
VisualStudio 2008 は英語版を使いました。

VisualStudio 2008 のインストーラは、インストール先にリムーバブルディスクを
選択することができません。内蔵 SD もはじかれてしまいだめです。
いろいろ試したけどあきらめました。

仕方なく外付けの USB HDD にインストールしてから、フォルダごと SD カードに
コピーすることにします。


(1) 容量確認
  まずこの辺を参考にして、C: を 1.6GB 程度空けておきます。
4Gamer Eee PC発売記念(?) この小さいマシンでゲームを動かしてみよう
    ――その1:Windows XPを頑張って小さくしてみる


  RAM 512MB ですが、以下の手順は仮想メモリを切った状態で行っています。
  (ページングファイルなし)

(2) タスクトレイの「ハードウエアの安全な取り外し」から D: を取り外す。
  これで再起動するまで内蔵 SD カードリーダーは使用できなくなります。

(3) 外付け USB HDD を取り付ける。
  E: で認識されました。(環境依存、違っていたら読み替えてください)

  マイコンピュータのプロパティ>管理>ディスクの管理
  外付け USB HDD のドライブ (E:) を選択して右ボタンメニューから
   「ドライブ文字とパスの変更」
  ドライブ文字を D: に変更します。

(4) USB HDD (D:) へ VisualStudio 2008 をインストール
  画面を 800x600 に切り替えてからインストーラ起動。
  インストール先は
   D:\Program Files\Microsoft Visual Studio 9.0
  必ず Custom を選びます。

(5) パッケージ選択
  いらないものを全部削ります。VC のみ。
  最低限コンパイルできればよしとします。

  Language Tools の Visual C++ 以外は全部外します。
  さらに Visual C++ の中の
    × Smart Device Programmablity
  と、ソースコードもチェックを外しておきます。
    × Visual C++ Run-Time Libraries \ Visual C++ CRT Source Code
    × Visual C++ Class & Template Libraries \ ATL MFC Source Code

(6) インストール実行
  これだけ削ってインストール先も D: を指定したはずなのに、
  C: を 1.6GB も消費するといわれます。

  インストール先を指定できるのは VisualStudio 本体のみで、
  付随するコンポーネントの類は C: に入れられてしまうようです。

  ぎりぎりだけどそのまま進めます。
  この数値は多少多めに表示されているのか 220MB ほど残りました。

(7) インストーラ終了
  もちろんドキュメントは入れません。探し物はオンラインで。
  インストーラの最初の画面に戻ったら Exit

(8) SDK の移動
  C: にインストールされたものは .NET Framework 3.x や Windows SDK でした。
  特に Windows SDK が 450MB と巨大なので移動します。

   C:\Program Files\Microsoft SDKs

  これをそのまま D: に移動しました。

   D:\Program Files\Microsoft SDKs

  C: は 670MB ほどの空きになりました。

(9) 再起動
  (3) と同じ手順で USB HDD のドライブ文字を E: に戻します。
  再起動して再び D: が内蔵カードリーダーになります。

(10) SDカードに移動
  HDD 上の E:\Program Files を丸ごと SD の D:\Program Files に
  移動します。

(11) SDK の設定
  Windows SDK の場所を変更したのでその設定。
  環境変数 WindowsSdkDir の値は、vsvars32.bat の
  :GetWindowsSdkDirHelper 辺りを見ると次のレジストリを見ています。

  レジストリ HKLM
    \SOFTWARE\Microsoft\Microsoft SDKs\Windows

  上記レジストリ以下 CurrentInstallFolder に登録されているパスをすべて
  C:\ から D:\ に変更します。

  これだけではうまくいかなかったので、結局 VisualStudio 2008 の
  Tools → Options → Project and Solutions → VC++ Directories
  から Executable files、Include files、Library Files の
  $(WindowsSdkDir) を全部 D:\ から始まる実パスに置き換えてしまいました。

コンパイルできるようになりました。
SD カードは 1GB 少々 (NTFS) しか使ってないので、もっとインストール
時のオプションを増やしても大丈夫かもしれません。


ついでに DirectX SDK も入れました。
こちらは何もしなくてもインストール先にリムーバブルディスクを選べます。
ランタイムを入れると C: も多少消費します。

(1) DirectX SDK November 2007
  インストーラを起動します。
  unzip の展開先を聞いてくるので必ず、D:\TEMP など C: 以外の
  パスに書き換えてください。
  USB HDD がまだつながっているなら、そちらの方が高速です。

(2) インストール先指定
  展開が終わるとインストーラが起動するので、今度はインストール先を
  変更します。ドライブ名を C: から D: にするだけ。

  インストール内容を選びます。容量を食いそうなサンプルは外しておきました。
   × DirectX Samples and Source Code


コンパイル前に、環境変数 TEMP と TMP を、SD カードなど C: 以外のパスに
設定しておいてください。D:\TEMP など。

これで一通り開発環境ができました。
SD カード上でコンパイルも OK。


発売日 25日に Eee PC 買いました。店頭で。
開店直後に飛び込みました。

店頭に実機が1台ありましたが、なぜかデフラグ実行後の画面。
SSD なのに!

その後注文したものの、在庫の箱が見つからないらしく店員総出で
店内の棚から倉庫から探し回り、15分ほど待たされました。
発売日なのに。


本体は小さいゆえに思ったより若干重く感じます。それでも 1kg 未満。
付属の AC アダプタもコネクタ一体型で小さいものでした。

パームレスト部が狭いので、手の置き場所にはちょっと困るかもしれません。
机の上だとキーが遠いけど、完全に手を乗せるだけのスペースはなし。

ところでこのキーボードに見覚えがあります。
以前 EM・ONE で愛用していた ELECOM TK-UP84CP
物理的な大きさ、形状、配列がそっくりです。
emobile EM・ONE USBキーボードの改造

キーの刻印と配列は若干違っていて、スペースバーの右が [変換] ではなく
[ひらカタ] になっています。自分は [変換] の方を使うので、下記のように
入れ替えました。

キー入れ替え reg ファイル (Caps Lock → Control 、[ひらカタ] → [変換])
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout]
"Scancode Map"=hex:00,00,00,00,00,00,00,00,\
  04,00,00,00,\
  1d,00,3a,00,\
  79,00,70,00,\
  70,00,79,00,\
  00,00,00,00

画面解像度は 800x480 で狭いですが、EeePC Tray Utility でいつでも
800x600 (上下スクロール) と切り替えられるようになっています。
同じ解像度でも WindowsMobile よりずっと情報量が多いのは不思議です。

他に気になるのはディスク容量とバッテリー寿命くらいでしょうか。

だけど SSD なのでアクセス音が皆無。
電源を入れると無音で立ち上がるところがかなり新鮮です。

起動したまま揺らしても走ってもたぶん大丈夫。
ポケットに Wiiリモコン を入れて、ログを取りながら一度本気走りを
してみたいです。(これがやりたかった)

ゼロスピンドルとはいっても冷却用ファンなど機械可動部はまだあります。
動作時のディスクアクセスが問題なくても、本体のつくりが耐衝撃
構造かどうかはまた別の問題なのでご注意ください。


・キーボードがつながる
・マウスがつながる
・携帯電話をモデムにしてネット接続できる
・オーディオアダプタがつながって音楽再生
・PDA の同期ができる(ActiveSync)
・WiiリモコンやバランスWiiボードがつながる
・PDA や携帯電話のファイル転送ができる

その他試していないけど

・ヘッドセットがつながる
・GPSユニットがつながる

などなど。

早い話、USBでできることのワイヤレス版、と思えばほぼイメージに近いです。

ワイヤレスマウスやキーボードも、それぞれ専用のレシーバーを使う
必要がなくなります。PCに内蔵されていればそれで済むし、
アダプタをつける場合も1個でできます。

さらに A2DP では Bluetooth 自体が PC 上の音源として認識されます。
USB 音源のようなもので、対応受信機さえあれば PC に音源が無くても
ヘッドホンやスピーカーが鳴らせます。


欠点は接続時にペアリングが必要なこと。
 ケーブル抜き差しだけで済むUSBよりも最初に若干手間がかかります。

それと通信速度が遅いこと。
 ストレージ系など大容量のデータ転送は苦手です。

また対応機器の選択の幅が狭く、それぞれ結構な値段がすること。

そして bluetooth stack によって対応プロファイルの違いがあって、
結果として使えたり使えなかったり、相性の問題が生じてしまうことでしょうか。
操作方法もソフトによって異なっています。


これまで EM・ONE のダイヤルアップ接続と Keyboard くらいにしか
使っていませんでしたが、bluetooth のプログラム作ったり調べたり
していたらすっかりはまってました。

 ノートPC(Windows)
 マウス
 外部キーボード
 ネット回線 (EM・ONE)
 ヘッドホン
 ゲームコントローラ (Wiiリモコン等)

が全部無線でつながってしまいました。PCから伸びているケーブルは無し!
(それぞれバッテリーが持つ間だけ)


USB の Bluetooth アダプタは3種類試しましたが、基本的には Windows XP
でも Vista でも標準のドライバで使うことができました。x64 でも大丈夫です。

ただし Windows 標準の bluetooth stack では A2DP 等のオーディオ系
プロファイルが使えず、必要な場合はアダプタ付属の bluetooth stack や
他のソフトに頼ることになります。

このときアダプタ付属の bluetooth stack は、Vista や x64 未対応の
場合もあるため注意が必要です。

また API の違いもあるので、すべてに対応する場合プログラム側の工夫も
必要でした。プログラムによっては bluetooth stack の種類に依存する
可能性があります。
Toshiba bluetooth stack と Bluesoleil 対応


結局 Bluesoleil 5 を購入しました。Windows の stack と異なり
A2DP は使えるようになったものの、代わりに bluetooth による
WM 端末の ActiveSync 接続が使えなくなりました。悩ましいところです。

まとめ
・bluetooth stack によってプロファイルが異なる
・bluetooth stack によって API が異なる
・bluetooth stack によって OS に対応していないことがある


Windows XP SP2 (x86 32bit) と Windows XP SP2 (x64) で動作確認しました。
どちらも Windows 標準の bluetooth stack で、アダプタ付属のドライバを
使用せずに認識できました。

Windows bluetooth stack の場合、通信時に何らかの理由で timeout すると
WriteFile() に切り替わってしまう問題があったので修正しました。


ここ数日一番悩んだ問題が、使っていると突然 バランスWiiボードの 通信が
切れてしまうというもの。電池交換しても変わらず、プログラム側の負荷が
高いせいかと、かなり悩んだのですが・・。

ふと切れた直後にボードの電源ランプが点滅していることを発見。
比較的長時間点滅が続くので、どうやら sync 待ち状態っぽい。

さらに左下、電池ボックス上の特定の一点に力をかけると点滅が始ることを
突き止めた。
sync ボタンが押されてしまっているらしい。

壊してしまったのかと分解してみると、sync ボタンは基板から電池ボックス
まで長い棒が伸びている。これ、垂直に押さなくても軽く倒しただけでも
スイッチが入るらしい。

どうも圧力で電池ボックス周辺がゆがんで、sync ボタンのスイッチが倒れて
押されているようだ。

電池ボックスの sync ボタンの穴を削って、干渉しないように広げたら
再発しなくなりました。


他のボードでは全く発生しないので、個体差か単に酷使しすぎてへたった
だけだと思います。


Toshiba bluetooth stack と Bluesoleil に対応できました。
より多くの Bluetooth アダプタ(ドライバ) で動作するようになりました。

WbalanceGE v1.20 (GoogleEarth を歩く)
WBHealthMeter v1.10 (バランスWiiボード 体重計)

あらかじめ接続してから上記プログラムを起動する必要あり。
ペアリングと接続はそれぞれ、個別の接続管理画面で行います。

●Toshiba bluetooth stack
・Bluetooth 設定で[新しい接続]を押す
  必要に応じて バランスWiiボード の Sync ボタンを押す。

・一度登録されたら、以後は Nintendo RVL_WBC-01 のアイコンを選んで
 メニューから[接続]するだけ。このときも Sync ボタンを押す必要あり。

●Bluesoleil
・バランスWiiボードの Sync を押して、検索画面でアイコンが表示されるのを待つ。
 バランスWiiボードのランプ点滅が止まったら Sync を押しておく。

・名前が確定したら、メニューから接続(Connect)を選ぶ
 やはり接続時も Sync ボタンを押しておく必要あり。

●Windows 標準
・これまでどおり、プログラム上から「バランスWiiボード登録」で可能。
 コントロールパネルから登録しても OK

コマンドの送信が原因でした。他の bluetooth stack では
HidD_SetOutputReport() が使えないようです。Toshiba 以外はエラーも
返らないので工夫が要ります。

まとめると下記のようになります。

WindowsVista bluetooth stack
 ○ HidD_SetOutputReport
 × WriteFile  (送信できない、エラーにならない)

Toshiba bluetooth stack v5.10.15
 × HidD_SetOutputReport (送信できない、エラーになる)
 ○ WriteFile

Bluesoleil v2.6.0.1 070402 (BT-MicroEDR2 付属)
 HID の認識でエラーのため列挙できない

Bluesoleil v5.0.5 64bit
 × HidD_SetOutputReport (送信できない、エラーにならない)
 ○ WriteFile

判定手順
 1. HidD_SetOutputReport() を使い、0x15 等の return のあるコマンドを送る
 2. もし 1. がエラーになったら WriteFile を選択する
 3. 結果が来たらそのまま、一定期間経っても結果がこなければ WriteFile を選択する

今回実験した組み合わせ
 Vista x86 + Princeton PTM-UBT3S + 付属 Toshiba stack
 Vista x86 + Princeton PTM-UBT3S + Windows stack
 Vista x64 + Planex BT-Mini2EDR + Windows stack
 Vista x64 + Planex BT-Mini2EDR + Bluesoleil 5
 Vista x64 + Planex BT-MicroEDR2 + Bluesoleil 2/5


関連エントリ
バランスWiiボードを使ったまじめな体重計 WBHealthMeter 1.00
バランスWiiボード で地球を歩く WbalanceGE v1.10