ブログだった何か

ジーナちゃん専門ブログ

GPD XDのスタート&セレクトボタンを右側に移す

GPD XDのコントローラーはスタート/セレクトボタンが左側にあり、右側はHOME/BACKボタンになってます。正直言って煩わしいです。
しかしマッピングを入れ替えればHOME/BACKボタンにスタート/セレクトを割り当てることができると思ったので、早速試してみました。

結果から言えば、一応出来ますが色々と不明な点もあります。
また、XBOX360モードでのみ試しておりPS3モードでの動作は確認していません。
Generic.klとrk29-keypad.klを弄る荒業のため、様々な副作用があるかと思われます。
参考にする場合は自己責任でお願いします。



コントローラーのマッピングは、rootの「System」→「User」内にある「Keylayout」フォルダで管理されています。
「Keylayout」フォルダのGeneric.klファイルを見てみると、
key 102 がHOME(172ではない、後述)、key 158 がBACKボタンを管理していることがわかります。(BACKの後に付与されている"WAKE_DROPPED"はスリープから復帰できるコマンドみたいです)
そして key 314 にセレクトが、key 315 にスタートボタンが割り当てられていることが確認できます。
ちなみにkeyがどのボタンに使われているかは、KeyEvent Displayでも調べることができます。

まずはセレクト/スタートボタンをHOME/BACKボタンにします。
Generic.klを開きます。今回はSolid Explorerのテキストエディタを使ってます。
key 314 にHOME、key 315 に BACKを。
key 172 にBUTTON_SELECT、key 158 にBUTTON_STARTを割り当ててみます。
再起動するとセレクトボタンでホーム画面へ、スタートボタンで戻る動作ができます。



一方のHOME/BACKボタンは、同フォルダのrk29-keypad.klでさらに個別に割り当てられています。
そこでrk29-keypad.klに以下の記述を追加。

key 102 BUTTON_SELECT
key 158 BUTTON_START

さらに、既に記述されている"key 102 HOME"と"key 158 BACK"の行は消します。

最初はkey172がHOMEボタンに該当すると思っていましたが、
KeyEvent Displayで確認すると102でした。
rk29-keypad.klで"key 102 HOME"が割り当てられているのはそういうわけで、
どうやらHOME/BACKボタンは電源ボタンやボリュームボタンと同じ扱いみたいです。

ともかくこれでHOME/BACKにセレクト/スタートが割り当てられます。
エミュレーター等のキーコンフィグで割り当てようとするとHOME/BACKボタンはrk29-keypadで認識され、設定ファイルが分かれてしまいますが、
その場合はrk29-keypadで認識された場合の割り当て(セレクト/スタート)も行っておきます。
すると普段はXBOX360、スタート、セレクトボタンだけrk29-keypad.klの設定を借りてる状態になります。
一部のアプリでは対応しない可能性もありますが。

問題が二つあります。
KeyEvent Displayでボタンのkeyupを確認してみると、他ボタンのmflagsが8になっているのに対してセレクトボタン(を割り当てた旧HOMEボタン)だけ520です。
キーを離した時に違う数字が送られているみたいで、これが何なのかわかりません。
ただしコレは何度か再起動している内に変わりました。

あともう一つは仮想パッドでどちらのボタンも使用不可能になるところ。
仮想パッド用の設定を見直せば改善するでしょうが、幸いにも他のボタンが多いので直す必要もなく…。

Generic.klでムリヤリ変えてるので様々な場面で不具合が出るかと思われますが、ひとまずはこれで遊んでみます。