学生がPS4コントローラーのタッチパッドを解析、2本指の操作まで再現

壊れたDualShock 4から取り出したタッチパッドを自作の機器で使おうとすると、既存のArduino向けライブラリが動かない。luftmyszor氏は自分の製作に必要でこの部品を選び、動かない理由を突き止めてライブラリを書き直し、オープンソースで公開した。

原因はソニーが基板の改訂で仕様を変えていたことにあった。従来のPS4のタッチパッドはALPS社の12ビットの並びを使うが、JDM-050という版では3つの点が変わっている。座標のXとYが同じバイトを共有しなくなり、11ビットの対になる形に組み替えられた。指1本目のY座標は7バイト目へ、2本目は13バイト目へ移っている。

3つ目が最も厄介だった。上位のビットに別の用途の印が混ざっており、これを取り除かずに読むと座標が2048単位で飛ぶ。同氏は、バイトの繰り上がりと格闘して記憶配置を解析するのに時間を使いすぎたと書いている。解いた後は上位3ビットだけを残す処理を入れ、繰り上がりを補正して、毎秒100回の追跡が安定するようにした。

ライブラリの機能は市販のタッチパッドに近い。2本の指を同時に追い、指を離した時点で軽く叩く操作を判定する。1本なら左クリック、2本なら右クリックとして扱う。縦横の巻き取り量と、2本の指の間隔から拡大縮小の量も計算する。取り付ける向きも自由で、上下逆でも横向きでも、軸の反転や回転、任意の2次元変換で座標を合わせられる。

接続はI2Cで、アドレスは0x64に固定されている。電源は3.3Vで、5Vをつなぐと壊れると注意を促す。ESP32とRP2040で動作を確かめてあり、AVR向けの分岐も用意した。32バイトの記憶配置とビット単位の解読手順は、別の資料として図付きでリポジトリに置いてある。

投稿には、同じ部品を持て余していたという声や、Steam Deckのタッチパッドで同じことを試しているという報告が寄せられた。PS5のコントローラーで動くかを尋ねられた同氏は、手元にないので確かめられないと答えている。

関連情報

fabsceneの更新情報はXで配信中です

この記事の感想・意見をSNSで共有しよう
  • URLをコピーしました!

最新記事

YouTube / PodCast

【PR】読んで役立つ注目記事

目次