月別アーカイブ: 2009年11月

NetWalker PC-Z1 ubuntu で ctrla を動かす ([A] キーで Control と両立)

久しぶりに NetWalker の情報を探したら、モジュールを作れるようになっているし
キーカスタマイズソフト「窓使いの憂鬱」も動くようになっているとのことです。
かなり便利になってきました。ありがたいことです。

Android Zaurusの日記
 ・NetWalkerのカーネルとローダブルモジュールのビルド

ひとりぶろぐ
 ・[NetWalker]窓使いの憂鬱をNetWalkerで動かす

しかも「窓使いの憂鬱」では [A]キー を Control にする設定まで出来るようです。
これで ctrla を作らなくて済むし、楽が出来る!!
と思って試したら ctrla の動作とはちょっと違いました。少々甘かったようです。

そこで上のページを参考にして uinput.ko を作り、ctrla を NetWalker 本体の Ubuntu
で動くようにしてみました。
Android Zaurusの日記 さん、ひとりぶろぐ さんの記事を参考にさせていただきました。
ありがとうございました。

以下
 ・ctrla の動作の違い
 ・新しい ctrla v1.10
 ・ctrla を NetWalker の Ubuntu で動かすまで

ctrla は、[A] キーを Control キー兼用として用いるためのソフトです。

● ctrla の動作の違い

「窓使いの憂鬱」の “mod control += !!A” の設定では、[A]キー を押している間に
他のキーが押されたタイミングで Control キーと見なしています。

これだけだと、素早く文字入力を行った場合に意図しない Control キーが挿入されて
しまうことがあります。

例えば「会議」と打とうとして “kai” と素早くタイプすると、[A] を離す前に [I]
が押されて Control-I が入ってしまうことになります。

ctrla では連続タイプについていろいろ検証しており、この状態を区別できるように
二つのクロスストローク判定を導入しています。

もしかしたら「窓使いの憂鬱」でも設定次第で実現出来るのかもしれません。
そのような機能がすでにありましたらごめんなさい。

●クロスストローク判定1、遅延判定

“kai” を素早く打つと、下記のように前のキーを離す前に次のキーを押してしまう
ことがあります。

→時間
                 (1)  (2)
---------------------------------------
[K]dw ------ [K]up
         [A]dw ------ [A]up
                 [I]dw ------ [I]up

「窓使いの憂鬱」+ “mod control += !!A” はおそらく (1) のタイミングで判定
しています。これだと Control-I が入ってしまいます。

ctrla では、[A] キーを先に離すと ‘A’ キーを、[I] を先に離すと Control-I が
入るように判定を遅らせています。
つまり上の例だと (2) のタイミングで ‘A’ キーを送信します。

下記の例では先に [I] を離しているので (3) のタイミングで Control-I になります。

                   (3)
---------------------------------------
 [A]dw ------------------- [A]up
         [I]dw --- [I]up

●クロスストローク判定2、id による識別

実際に使ってみると、上の「遅延判定」だけでは不十分なことがわかります。
例えば「朝」と高速にタイプしようとすると下記のキーストローク “asa” になります。

→時間
         (4)          (5)
---------------------------------------
[A]dw ------ [A]up
         [S]dw ------ [S]up
                 [A]dw ------ [A]up
---------------------------------------
ID1→            ID2→

[S] を押したタイミング (4) でも、[S] を離したタイミング (5) でも、どちらも
[A] キーが押されているため、単純な遅延判定だと (5) で Control-S が入ってしまいます。

そこで ctrla では、[A] キーを押す度に毎回異なる id 値を割り振るようにしています。
キーを押した時点の id と離した時の id 値が異なる場合は、別の [A] キーとみなして
Control に変換しません。

よって上の例の場合、(5) のタイミングで id が異なるのでそのまま ‘S’ キーを送信します。

●新しい ctrla v1.10

プログラム ctrla110.tgz

下記の修正を行いました。

 1. NetWalker の Ubuntu (uinput.ko) で動作しない問題を修正
 2. 連続して 1秒以上 [A] キーだけ押し続けた場合、Control とみなす

1. は hook_main.c で構造体がクリアされていないところがあったために、module
として組み込んだ場合に誤動作していました。カーネルに組み込んだ場合はメモリが
0 初期化されているらしく動いていました。(/dev/input/event* で動くのもそのせい)

テキストエディタ上で考え事をしているとき、無意識に Ctrl キーを押しっぱなしに
していることがあります。カーソル移動とか編集操作を一切せずにキーを離すと
‘A’ キーが入ってしまうことがありました。
そこで [A] を 1秒以上押し続けた場合は Control と見なすようにしました。

● ctrla を NetWalker の Ubuntu で動かすまで

(1) 3Gモデム対応ツールを入れる

NetWalker(PC-Z1) 「3Gモデム対応ツール」

 この更新を行うと無線 LAN 接続でトラブルが起こる可能性が高いので、先に無線LAN
 を off にしておいてください。以前自分でカーネルを build したときに無線 LAN
 が動かなかった症状と良く似ています。

(2) uinput.ko を作る

NetWalkerのカーネルとローダブルモジュールのビルド」の手順をそのまま実行します。

Makefile の修正は「EXTRAVERSION = .10」の行を「EXTRAVERSION = -15-araneo」
に置き換えます。

1時間くらいしてコンパイルが通ったらモジュールを作ります。

$ sudo aptitude install libncurses5-dev
$ make menuconfig

メニューで下記の設定を変更します。
(space キーを押して User level driver support を ‘<M>’ にする )

Input device support --->
  Miscellaneous devices --->
     User level driver support
$ make modules
$ sudo cp  drivers/input/misc/uinput.ko  /lib/modules/2.6.28-15-araneo/kernel/drivers/input/
$ sudo insmod /lib/modules/2.6.28-15-araneo/kernel/drivers/input/uinput.ko

(3) ctrla v1.10 を動かす

$ mkdir $HOME/ctrla
$ cd $HOME/ctrla
$ wget http://dench.flatlib.jp/arfiles/ctrla110.tgz
$ tar -zxvf ctrla110.tgz
$ sleep 1; sudo ctrla/ctrla /dev/input/event5

まずはこの状態で、他のターミナルやソフトでキーの動作を確認してみてください。
万が一キー入力できなくなった場合も、慌てずに USB キーボードつないでください。
外付けキーボードの動作には影響を与えません。

関連エントリ
NetWalker PC-Z1 カーネルのコンパイル
NetWalker PC-Z1 Debian (2)
NetWalker PC-Z1 Debian
NetWalker PC-Z1 [A] キーを Control キーと兼用する実験
NetWalker PC-Z1 Bluetooth とキーカスタムその他

PSP-N1000 PSP go 自動中断セーブでバッテリー切れが怖くない

小さくなったおかげで持ち歩きやすくなり、結構便利に使ってます。

● 例えばミュージックプレイヤー

Bluetooth が AVRCP に対応しているおかげで、ヘッドホン用のレシーバー DRC-BT15P
がワイヤレスリモコンも兼ねるようになりました。
曲の選曲や再生停止も手元でできるわけです。
この機能が使えるのは、クロスメディアバーでカーソルがミュージックにある場合に
限られるようです。
プレイヤーに移動したり、画面を消したり HOLD したりと少々手順が多いのが難点。

● HOLD は重要です

使っていて気になったのは、少しスライドしただけですぐスリープが解除されて
しまうこと。

一度鞄から取り出したらバッテリーが無くなっていて、電源が全く入らなくなっていた
ことがありました。たぶん移動中にどこかでスライドがずれて電源が入ったのだと思います。

ゲーム中のスリープだったので、オートスリープせずにバッテリーを使い切って
しまったのでしょう。スライドも HOLD にしておけば反応しないので、普段から
HOLD に切り替えておいた方が良さそうです。

その代わり嬉しい発見もありました。

●自動で中断セーブしてくれます

スリープ中バッテリーが空になったので、直前のゲームが消えてるだろうなとあきらめて
いたのですが、なんと中断セーブデータが残っていました。バッテリーが切れる前の状態
から再開しています。
バッテリーが切れそうになると、自ら中断セーブを行ってくれるようです。

PSP go はゲームの中断機能があって、プレイ中に別の機能を呼び出すことが出来ます。
仕組みはノート PC のサスペンド/ハイバネーションと同じなので、このような活用も
出来るんだと感心しました。

これ実際のゲームプレイ中にも一度確認してみたいと思ってます。
本当に自動で中断してくれるならもうバッテリー切れが怖くないですね。

関連エントリ
PSP-N1000 PSP go の Bluetooth で出来ること
PSP-N1000 PSP go 購入、Store が無くても出来ること

Direct3D 11 / DirectX 11 Compute Shader の実行回数

ComputeShader はかなり便利なことがわかってきました。
ポストフィルタなどのピクセル処理だけでなく、VertexShader の前段に頂点演算として
挿入したり、頂点シェーダーの代わりに使ったりも出来ます。
標準描画パイプラインへのちょっとした機能追加が簡単にできるようになった印象です。

これまでは Stream Output や PixelShader を使っていた処理が ComputeShader
だけで済むわけです。

●ここが簡単

・読み込み位置、書き込み位置が固定されない

  与えるリソースはどれも任意アドレスに対してアクセス可能で、特別扱いする
  ものがありません。

・設定が項目が少ない

  ConstantBuffer, ShaderResourceView, UnorderedAccessView のわずか 3つだけ。
  サンプラーを使う場合は + 1。

・設定が独立している

  描画用のステートをいじる必要がないので、パラメータを保存したり復帰させなくて
  済みます。たとえば Viewport とか、RenderTarget とか、
  DepthStencilState とか!! 描画に影響与えないし、戻さなくてもいいんです。
 
特に 3番目。いちいち DepthStencilState を作ったり、Depth を disable にしたり
しなくても良いだけで CS ありがとう、といった感じ。

● CS の制限

今までの Shader から見れば制限無しに扱いやすい ComputeShader ですが、
VertexShader 代わりに使おうとするといくつか制限も生じます。

 ・グループ内の実行スレッド数はシェーダー内に記述し、実行時に書き換えできない。
 ・Dispatch() に与えられる実行回数は x,y,z それぞれ 65535 まで。
 ・グループ内のスレッド数は 1024 まで。

よって VertexShader のように、1~100万回 など任意の実行回数が与えられた場合に
どのように Compute Shader を呼び出せばよいのか悩みます。

1. 65535 回を超える場合

x, y, z に分けるにしろ、CS 内のアトリビュートで Group 内スレッド数を増やすにしろ、
実行回数が常に定数で割り切れるとは限らない。

2. 速度

ある程度グループ内のスレッド数を大きめの値にしなければ ComputeShader の実行
速度が落ちます。65535 回未満だからと言って、Dispatch() だけで回数を指定して
下記のようなシェーダーを走らせると非常に低速になります。

[numthreads(1,1,1)]
void cmain_loop1( uint3 threadid : SV_DispatchThreadID )
{
    lmain( threadid.x );
}

●解決案

二通りの手段を考えてみました。

(1) 複数のシェーダーに分ける

numthreads = 32 などグループスレッド数を増やしたものと、numthreads = 1 の
端数を処理するスレッドに分けて実行します。
下のプログラムは 32 で割り切れる回数分 cmain_loop32 を実行し、端数を
cmain_loop1 で処理しています。

例えば 75 個のデータを処理するなら、cmain_loop32 を 2回、cmain_loop1 を 11回分
実行します。

// Compute Shader 5.0
cbuffer offset_T : register( b0 ) {
    uint    threadid_offset;
    uint    thread_total;
    uint    r0;
    uint    r1;
};

[numthreads(32,1,1)]
void cmain_loop32( uint3 threadid : SV_DispatchThreadID)
{
    lmain( threadid.x );
}

[numthreads(1,1,1)]
void cmain_loop1( uint3 threadid : SV_DispatchThreadID )
{
    lmain( threadid.x + threadid_offset );
}
// C++
    const int ThreadGroup= 32;
    int dcount1= data_count/ThreadGroup;
    int offset= dcount1*ThreadGroup;
    int dcount2= dcount - offset;

    offset_T cparam;
    cparam.threadid_offset= offset;
    cparam.thread_total= data_count;
    context.UpdateSubresource( CB_Offset.iBuffer, 0, NULL, &cparam, 0, 0 );
    context.CSSetConstantBuffers( 0, 1, &CB_Offset.iBuffer );

    if( dcount1 > 0 ){
        context.CSSetShader( LoopShader_1.iCS, NULL, 0 );
        context.Dispatch( dcount1, 1, 1 );
    }
    if( dcount2 > 0 ){
        context.CSSetShader( LoopShader_32.iCS, NULL, 0 );
        context.Dispatch( dcount2, 1, 1 );
    }

(2) 動的分岐を用いる

端数込みで 32 の倍数分実行します。スレッド番号が実行したい回数より多ければ、
動的分岐で処理を省きます。

例えば 75 個のデータを処理するなら、cmain_loop_dis を 3 回 (96回分) 実行し、
id が 75 以上なら何もしないで終了します。

// Compute Shader 5.0
cbuffer offset_T : register( b0 ) {
    uint    threadid_offset;
    uint    thread_total;
    uint    r0;
    uint    r1;
};

[numthreads(32,1,1)]
void cmain_loop_dis( uint3 threadid : SV_DispatchThreadID )
{
    if( threadid.x < thread_total ){
        lmain( threadid.x );
    }
}
// C++
    const int ThreadGroup= 32;
    int dcount1= (data_count+ThreadGroup-1)/ThreadGroup;

    offset_T cparam;
    cparam.threadid_offset= 0;
    cparam.thread_total= data_count;
    context.UpdateSubresource( CB_Offset.iBuffer, 0, NULL, &cparam, 0, 0 );
    context.CSSetConstantBuffers( 0, 1, &CB_Offset.iBuffer );

    context.CSSetShader( CSSubDShaderDis.iCS, NULL, 0 );
    context.Dispatch( dcount1, 1, 1 );

●実行結果

RADEON HD 5870 で試してみました。
1 フレームあたり 7セット Compute Shader の実行を繰り返しています。
それ以外の描画は fps などのフォントのみ。

上のプログラムはグループ内スレッド数 32 固定でしたが、16~320 まで変更して
試しています。

GroupThread= 16
(1)   476 fps
(2)   482 fps

GroupThread= 32
(1)   840 fps
(2)   852 fps

GroupThread= 48
(1)   973 fps
(2)  1006 fps

GroupThread= 64
(1)  1102 fps
(2)  1145 fps

GroupThread= 96
(1)   984 fps
(2)  1026 fps

GroupThread= 128
(1)  1090 fps
(2)  1140 fps

GroupThread= 256
(1)  1083 fps
(2)  1128 fps

GroupThread= 320
(1)  1009 fps
(2)  1065 fps

GroupThread が小さいと低速です。あまり小さいと Dispatch() の 65535 制限にも
ひっかかります。

どのケースでも、分岐を用いた (2) の方が高速でした。
端数分とはいえ GroupThread=1 で実行しているスレッドがあるため効率が悪い、
7セットの実行中に毎回シェーダー切り替えが発生しているから、切り替えないで済む
(2) の方が条件的に有利、等の理由が考えられます。

関連エントリ
DirectX 11 / Direct3D 11 と RADEON HD 5870 の caps
Direct3D11/DirectX11 ComputeShader 4.0 を使う
Direct3D11/DirectX11 (6) D3D11 の ComputeShader を使ってみる

NetBook を WiMAX 据え置きルータにする

URoad-5000 は持ち歩きには便利だし電源を入れるだけで即使える点も魅力です。
でもバッテリー駆動できるモバイル向けルータなので、パフォーマンスよりバッテリー
寿命や軽量化の方が優先されているようです。自宅など据え置き用途で使うには少々
パワー不足な感じがします。UPnP に対応していないといった制限もあります。

そこで、使い道に困っている(余っている) NetBook を自宅用ルータにしました。
Windows 標準の ICS を使っているだけですが、たぶんこちらの方が高速でしょう。
実際に試したのは Vista Home Basic です。ここでは Windows 7 で説明しています。

(1) NetBook に WiMAX の設定を行います。普通に WiMAX が繋がれば OK。

  USB タイプ UD01SS (UD03SS) を使ったので、USB ポートにさしてドライバとユーティリティ
  ソフトをインストールし、更新をかけました。

(2) 「ネットワークと共有センター」を開きます。
  左側の「アダプターの設定の変更」をクリック。(Vista だと「ネットワーク接続の管理」)

(3) 「ローカルエリア接続」の中から WiMAX 相当を探します。
  右ボタンでプロパティを開きます。

(4) “共有” タブを開いて共有の設定をします。
   「ネットワークのほかのユーザーに ~ 接続を許可する」
   「ネットワークのほかのユーザーに ~ 制御や無効化を許可する」
  の両方にチェックを入れます。

(5) 「ホーム ネットワーク接続」のプルダウンメニューで、他の PC やゲーム機など
  の端末をどこにつなぐか選択します。

  たいていの NetBook は、有線 LAN ポートと無線 LAN の両方を備えています。
  おそらくアダプタとしてこの段階で下記の 3つが存在しているはずです。

   ・ローカルエリア接続
   ・ローカルエリア接続 2 (UD01SS WiMAX)
   ・ワイヤレスネットワーク

  ※ ローカルエリア接続 の番号は環境によって変わる可能性あり
  今回は次のようにつなぐので、WiMAX じゃない方のローカルエリア接続を選びます。

     WAN (UQ WiMAX)
       |
 [ローカルエリア接続2 (UD01SS)] 
       |
     [NetBook]
       |
 [ローカルエリア接続 (有線LAN)]]
       |
[ハブ or 無線LAN アクセスポイント]
       |
   他の PC やゲーム機

共有設定することで NetBook がルータ相当になり、DHCP サーバーとして IP アドレスも
割り振ってくれます。

無線 LAN アクセスポイントの設定が済んでいるなら、NetBook とアクセスポイント間を
無線でつなぐことも可能です。アクセスポイントに DHCP クライアント機能があるならそれを
有効にするだけですが、固定 IP アドレスなら割り振られるアドレスと確認してから登録します。

●速度

時間帯や条件が一定と限らないので、速度はおおよその目安です。
UQ WiMAX 自体の速度はエリアや電波状況で変わります。

(1) 1.5Mbps

UD01SS + URoad-5000 --無線-- LAN-PWG/APR(子機モード) --有線-- Desktop PC

モバイルルータを 2 個経由していたせいか、かなり速度が落ちていました。
LAN-PWG/APR は子機モードでコンバータとして使っています。

(2) 2~3Mbps

UD01SS + URoad-5000 --無線-- GW-USMicroN (USB無線LANアダプタ) + Desktop PC

無線 LAN 直結 (11n) になったので速くなりました。

(3) 5~Mbps

UD01SS + NetBook

直差しが一番速いです。5Mbps くらい。

(4) 5Mbps

UD01SS + NetBook --有線-- CG-WLBARGNH(ルータ,Hubとして) --有線-- Desktop PC

NetBook に直接有線でぶら下がっている形です。オーバーヘッドが減っています。

(5) 4.5~Mbps

UD01SS + NetBook --有線-- CG-WLBARGNH --無線-- GW-USMicroN + Desktop PC

CG-WLBARGNH (無線LAN ルータ) を、アクセスポイントモードで設定しています。
これで無線 LAN ルータ相当となりました。モバイルルータをそのまま使うよりも
速度が出ています。

関連エントリ
WiMAX ルータ URoad-5000 (4) 充電の仕方
Windows7 beta で UQ WiMAX

PSP-N1000 PSP go の Bluetooth で出来ること

Bluetooth を使ってみました。
本体に触らないでゲームできます。

pspgo_00.jpg

PS3 コントローラで PhantasyStar Portable 2 体験版 + Bluetooth でヘッドホン

●PSP go の特徴

PSP go の最大の違いは UMD ドライブが無いことです。他にも

 ・フラッシュメモリ 16GB 内蔵
 ・スライド式のボディ
 ・Bluetooth 機能内蔵
 ・ゲームの中断機能に対応
 ・時計/カレンダー表示

といった新要素があります。また従来の PSP から変更されたのは下記の点です。

 ・充電+通信コネクタが専用形状に変更
 ・画面サイズが 4.3 → 3.8 inch に縮小
 ・メモリカードが MS Duo から M2 に変更された

新要素の中でも Bluetooth に対応したのは大きな特徴です。

● PSP go の方向キー

PSP go の方向キー(十字キー)はスライド機構のため、周囲との段差が少なくストロークも
かなり浅くなっています。倒すと言うよりボタンをクリックして押す感じに近いです。
方向の押し分けはしっかりしており操作性は問題ありませんが、PSP-2000/3000 の操作感に
慣れてしまうと、若干斜め方向が入りにくく感じるかもしれません。

とはいえ PSP-1000 のように全く反応しないと言うこともなく、比べものにならないほど
きちんと斜め方向が入ります。DS Lite のように斜めに入り損ねることもなく、PSP go の方が
反応良く確実に押せます。ボタンの薄さは DSi に近いかもしれません。

さらに PSP go は外付けのコントローラを使うことが出来ます。
操作性に関しては、個人の好みの点も含めても携帯機で最高の環境を備える可能性が出てきました。

● PS3 コントローラが使える

Playstation 3 / Wii 等のワイヤレスコントローラは Bluetooth を使っています。
PSP go も Bluetooth を内蔵したことにより、携帯ゲーム機ながら外付けのゲーム
コントローラが使えるようになりました。

現在対応しているのは PS3 用のゲームコントローラ SIXAXIS / DUALSHOCK3 です。
Bluetooth は汎用プロトコルなので今後の更新で対応デバイスが増える可能性があります。

注意点はペアリングのために PS3 本体が必要となること。
SIXAXIS / DUALSHOCK3 は USB ケーブルによるワイヤード接続でペアリングを行う仕様と
なっており、Bluetooth のペアリングモードを備えていません。PSP go もいったん PS3 を
経由してコントローラの登録を行います。一度ペアリングを行えば PS3 が無くても使えます。
PS3 持ってる人に頼んでペアリングだけしてもらうのもありでしょう。

● ペアリング

用意する物

 ・PS3 用コントローラ (SIXAXIS/DUALSHOCK 3)
 ・PS3 本体 (最初だけ)
 ・PSP go
 ・それぞれをつなぐ USB ケーブル

(1) PS3 の電源を入れておく
(2) PSP go 側で操作
   「設定」→「Bluetooth機器設定」→「Bluetooth 機器管理」
    →「新しい機器の登録」→「PS3 コントローラを登録する」
(3) 以後 PSP go の画面の指示に従います。

 1. PSP go と PS3 を USB ケーブルでつなぐ。
 2. ペアリングしたいコントローラを PS3 本体と USB ケーブルでつなぐ。
 3. 画面の指示があったら両方とも USB ケーブルを抜く。
 4. PS3 コントローラの (PS) ボタンを押す

操作は PSP go 側で行うので、この間 PS3 の画面を見る必要がありません。
TV をつけずに設定出来ました。

●操作

PS3 コントローラを使うとスライドを閉じた状態でもゲームが出来ます。
(PS) ボタンも反応するし、PSP go の電源を切るとコントローラの電源も落ちます。
go の電源を入れてコントローラの (PS) ボタンを押せばすぐに再リンクします。

ボタンの対応は下記の通り。

・右アナログスティック, L3, R3 = 未使用
・L1, L2 = どちらも PSP の L
・R1, R2 = どちらも PSP の R

基本的に PSP に存在していないボタンは使えないようです。

ゲームアーカイブスの PS1 タイトルで右アナログが使えるかどうか、DUALSHOCK 対応ソフトを
持っていなかったので検証できませんでした。設定画面を見つけていないので、おそらく
振動機能も使えないのではないかと思います。
PS1 のゲームで同時に複数のコントローラが使えるかどうかも未確認です。

●その他の入力デバイス

キーボードとマウスは「非対応のデバイスです」といわれて接続できませんでした。

PS3 ワイヤレスキーパッド
・RBK-2000BT2 (Bluetooth キーボード)
・VGP-BMS33 (Bluetooth マウス)

●オーディオデバイス

Bluetooth オーディオデバイス (A2DP) に対応しています。
下記のワイヤレスオーディオレシーバーを使ってみました。

SONY DRC-BT15P
SANWA MM-BTSH3

ペアリングは直接行います。

「設定」→「Bluetooth 機器設定」→「Bluetooth 機器管理」→「新しい機器の登録」
 →「Bluetooth 機器を検索する」

あとはそれぞれのレシーバーのマニュアルに書かれているパスキーを入れるだけ。
音声出力切り替えは、PSP go 上面にある [♪] 音符マークのサウンドボタンを使います。

 ・[♪] ボタンを長押しするとミュート (1秒)
 ・[♪] ボタンをさらに長押し (5秒) すると音声の出力先が Bluetooth に切り替わる

A2DP 対応は PS3 にも欲しい機能です。

● Bluetooth 音声の注意点

Bluetooth のリンクが切れると音声は強制的に本体から流れます。
例えば左側面のワイヤレススイッチを切った場合、無線 LAN だけでなく Bluetooth も
切れます。直後、本体スピーカーから音声が流れることになります。

●ダイヤルアップネットワーク

PSP は無線 LAN のアドホックでインターネット接続できないので、Bluetooth の
ダイヤルアップ対応は嬉しい機能の一つです。

EMOBILE TouchDiamond S21HT を使ってみましたが、ペアリングできるものの接続は
まだ成功していません。PC からの接続では Bluetooth 経由で DUN で繋がっているのに、
PSP go からは 8030000B というエラーで失敗します。まだ原因はわかってません。

●警告画面が出てしまう

Bluetooth を ON にすると、USB モードに切り替わるたびに Bluetooth を一時的に無効するとの
警告画面が出てきます。いちいちボタンを押さなければならないので少々面倒かもしれません。

●PSP go 全般

PSP-1000 時代に夢だった外部コントローラが、念願かなって使えるようになって
しまいました。当時 PSP-1000 の方向キーに問題があったせいなのですが…。
PS3 のように、今後はキーボードとか様々なデバイスに繋がるようになればゲームの
幅も広がります。特にアーカイブスタイトルとか。

画面は密度が上がったことと、コントラストが高く色もはっきりしており非常にきれいに
見えます。以前使っていた PSP が PSP-2000 なので特にそう感じるのかもしれません。

本体は非常に小さくスリムです。これに携帯電話が付いていてもおかしくないと思うくらい。
本体底面に滑り止めのゴムあり。

上面は隙間無くボタンが並んでいるのでつかむ場所がありません。
上下を挟んで持つのはやめた方がよさそう。

Bluetooth 対応した携帯ゲーム機は多くありません。
iPhone や iPod touch も Bluetooth を内蔵していますが A2DP に対応しているものの
外部コントローラやキーボードをつなぐことが出来ません。
iPhone で Bluetooth コントローラが使えるようになる日は来るのでしょうか。

関連エントリ
PSP-N1000 PSP go 購入、Store が無くても出来ること
Media Go で PSP のデータ管理
新型 PSP (PSP-2000) とゲームアーカイブス