みやけのメモ

個人的なメモ帳です。

2017/09/18

GPD Pocketのタッチパネルで、大きくタッチ位置がずれてしまった状態の直し方。

GPD Pocket(Windows版)で、タッチパネルのタッチ位置が大きくずれてしまう状態になってしまうことがあります。


- 画面の右側をタッチしているのに、反応するのは画面の左上。
- タッチが二重になってしまうこと(場所)もある。  

この状態になってしまうと、OSを再インストールしても、出荷時のOSイメージを復元しても、直らなくなってしまいます。

この原因と考えられることと、直し方をまとめます。
(長いのでWikiではなくブログに書きます。)

なお、ちょっとだけ微妙にずれる。という場合は、本件とは別の問題です。
コントロールパネルからタッチパネルの調整ができるので、
それを試していただくとよいかもしれません。

■原因と考えられること
何かの拍子に、ハードウェア(タッチコントローラ)の記憶領域に書き込まれたコンフィグが誤った値(恐らく空)に上書きされる。
これによって、上記の現象が発生する状態となるようです。

なお、何かの拍子。という点が謎で、
タッチパネルに関するドライバ(Goodix Touch Driver)の更新時や、
OSの再インストール時、
ブルースクリーンでOSが停止した時、
などに稀に発生しているようです。(必ず起こるわけではない)

GPD社が提供している以下の標準の TouchSetting.gt だと、
DefaultCFGが空欄となっています。
"推測ですが"、この空のDefaultCFGで上書きしてしまい、当該コンフィグが"空"になってしまうのではないかなと思います。
 
GPD WIN用では、DefaultCFGにコンフィグが書かれており、
同じ問題が起きている様子はありません。


■直し方
ハードウェア(タッチコントローラ)の記憶領域に、正しいコンフィグを上書きすれば直ります。

TouchSetting.gt の冒頭にある[Setting]の記述を変えると、上書きなどが可能です。
UpdateCFG を1にすると、ハードウェアの記憶領域をドライバのロード時に上書きします。
ちなみに、SendCFG を1にすると、ハードウェアの記憶領域の内容ではなく、TouchSetting.gt の[CFG]欄の内容が使用されるようになります。
(GPD社の配布しているものでは0になっており、ハードウェア側の値を使うようになっています。)

ということで、下記の手順で、
TouchSetting.gt(C:\Windows\INFにあります)を書き換えなどを行います。

1. DefaultCFGにsenserid_0の欄の値をコピぺします。
2. UpdateCFGを1にします。(行頭の ; は消します) また、SendCFGも1にします。
3. 再起動するかドライバを再度読み込ませます。
4. 3の時点で、ハードウェアの記憶領域に正しい値が書き込まれます。
5. UpdateCFGを0にするか、コメントアウト(行頭に;を付ける)します。
6. 念のため再起動するかドライバを再度読み込ませます。

※5. 以下を行うのは、毎回ドライバのロード時に書き込み処理を行うのは無駄なためです。

3の時点での TouchSetting.gt

6の時点での TouchSetting.gt (常用するもの)


これで完全に直ると思います。
また、1でDefaultCFGにsenserid_0の欄の値をコピペしており、SendCFGも1にしているので、
問題は再発しないと思います。


■おまけ
めんどくさそうだったので、簡単に直せるバッチを作りました。
(GPD社が配布しているドライバを勝手に改ざんしているものなので、
心配な方は、上記を手動でお試しください。)
https://noraneko.co.jp/FixTouchForGPDPocket.zip
※ダウンロードして解凍して、RunMe.bat を管理者として実行して、再起動する感じです。
※しっかりテストしているわけでないので、直らなかったり、何かおかしいところがあれば教えてください。