ひこぽんのーと

覚書と雑記です。

2ポート コントローラ変換アダプタを使うのこと

前回の続き

よくよく周りを整理してみると、
PS1/PS2コントローラ変換アダプタがあちこちにゴロゴロしている。

サンワサプライのJY-PSUAD21 という14、5年前のアダプタも所持している。
1本のケーブルでコントローラが2つ挿せる製品で、
対戦ゲームをやったりするのに便利かと思って買ったのだが、
対戦する機会もあまり無かったので使わなくなってしまった。

また、Linuxではボタンの数がやたらと多いコントローラとして1ポート分しか認識されず、
2P側は死んでいた。

前回、コントローラについて色々調査したので、
今回はコイツをまともに使う方法を調査してみた。

調査

JY-PSUAD21で検索

LinuxでPSコントローラを使うことを研究してた人の記事の中に、
JY-PSUAD21の2P側が認識されない問題が記事になっていた。

kakurasan.hatenadiary.jp

内容を眺めてみると、どうもusbhidドライバのフラグ「HID_QUIRK_MULTI_INPUT」が絡んでいるようだ。
記事の著者はカーネルソースを修正し、カーネルの再構築を行うことで、
2Pポートを使用できるようにしたようだけど、
正直、それは面倒だし、そもそもそんな知識もない。

HID_QUIRK_MULTI_INPUT

HID_QUIRK……前回、自作ドライバを有効化するために、
modprobeのコンフィグに記述したフラグは「HID_QUIRK_IGNORE」で、
今回が「HID_QUIRK_MULTI_INPUT」。
まさか、同じ定義で行けるのか?

実践

/etc/modprobe.d/blacklist.confに追加

ヘッダで値を調べるとHID_QUIRK_MULTI_INPUT = 64。
コンフィグにコントローラのIDを追加してフラグを立ててみた。

# vendor_id, product_id, HID_QUIRK_IGNORE = 4, HID_QUIRK_MULTI_INPUT = 64
options usbhid quirks=0x054c:0x0268:0x04,0x0d9d:0x3014:0x40

念の為、initcpioを再作成してから再起動した。

効いた

1つのデバイスで2つのコントローラとして認識されるようになった。

欲が出た

このコントローラ、Raspberry Pi上のLakkaで使っていたので、
Lakkaでも2ポート対応にしたい。

やってみた……がだめだった

LibreELECでは、/etc/modprobe.d配下にblacklist.confを定義することで、
モジュールのロード制御ができるようだったので、
同じ方式でoptionを書いてみたのだが、結果はだめだった。
なんでやねん。

lakka usbhid optionsで検索

Retroarchのgithubの記事が出てきた。
github.com

これまたざっくり見ているとオプションを指定するのは間違いないが、
記述場所が違うようだ。
/flash/extlinux.conf:の起動パラメータに追記しろなんてあるけど、
Lakkaの/flash配下にはextlinux.confなんてない。

forums.libretro.com
こっちの記事でもいろんなことが書かれているが、
「『cmdline.txt 』に『usbhid.quirks=0x16c0:0x05e1:0x040』を追記すりゃいいんじゃねーの」
との発言がヒントになった。

実践

cmdline.txtは読み込み専用なので、ターミナルでは編集できない。
LakkaのSDカードをPCでマウントして、PC上で編集する。
cmdline.txtの起動パラメータの最後に『usbhid quirks=0x0d9d:0x3014:0x40』を追記し、
Lakkaを起動した。

効いた

Lakkaでも2つのコントローラとして認識されるようになった。

コントローラを使うために頭をひねったところで、
『所詮、ゲームをするためなんでしょ』と言われ、
褒めてもらえないのがちょっとさみしい。