試験運用中なLinux備忘録・旧記事

はてなダイアリーで公開していた2007年5月-2015年3月の記事を保存しています。

PSX-CV02上のPlayStation 2コントローラの振動機能をGNU/Linux上で用いるための試行錯誤(Linux 2.6.31.5時点・第2回)

PSX-CV02上のPlayStation 2コントローラの振動機能をGNU/Linux上で用いるための試行錯誤(Linux 2.6.31.5時点・第1回)」の続き。

もう1つ変更が必要

hid-pl.c(pantherlordドライバ)の対応ハードウェア一覧と思われる部分にPLANEX USBゲームパッドコンバータ(PS/PS2対応・2ポート) PSX-CV02のベンダIDと製品IDを指定してビルドしたカーネルで起動してみたが、残念ながら全く変化は見られなかった。
更に調べると
[引用]ファイル名: /usr/src/linux-2.6.31.5-1mnb/drivers/hid/hid-core.c より

/* a list of devices for which there is a specialized driver on HID bus */
static const struct hid_device_id hid_blacklist[] = {
	{ HID_USB_DEVICE(USB_VENDOR_ID_A4TECH, USB_DEVICE_ID_A4TECH_WCP32PU) },
	{ HID_USB_DEVICE(USB_VENDOR_ID_A4TECH, USB_DEVICE_ID_A4TECH_X5_005D) },
(中略)
	{ HID_USB_DEVICE(USB_VENDOR_ID_ZEROPLUS, 0x0030) },

	{ HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_PRESENTER_8K_BT) },
	{ }
};

上の部分を見て分かるように、ベンダIDと製品IDをもとにして特定の製品のみに対して個別のドライバを用いるようにするという仕組みがあるようで、ここにPLANEX USBゲームパッドコンバータ(PS/PS2対応・2ポート) PSX-CV02の各IDを含んだ

	{ HID_USB_DEVICE(USB_VENDOR_ID_GREENASIA, 0x1006) },

の行を挟みつつ、より詳細な出力を得るためdrivers/hid/hid-pl.c内に「#define DEBUG」を記述(コメントを解除)してカーネルを再ビルドして起動してみると、dmesgのメッセージ出力に変化が起こった。実際にはこのpantherlord以外の幾つかのドライバも試していたのだが、エラーメッセージを出力してfftestの変化もないものがほとんどだった。
dmesgの出力の一部を貼り付けると

pantherlord 0003:0E8F:1006.0001: input,hidraw2: USB HID v1.10 Joystick [HuiJia  USB GamePad] on usb-0000:00:13.0-3/input0
hid-plff: detected single-field device
hid-plff: detected single-field device
pantherlord 0003:0E8F:1006.0001: required output report is missing

のようになった。最後に「required output report is missing」が表示されてモジュールの情報が表示されていない(正常に初期化完了していない)のが気になったので色々調べて試したところ
[引用]ファイル名: /usr/src/linux-2.6.31.5-1mnb/drivers/hid/hid-pl.c より

	if (id->driver_data)
		hdev->quirks |= HID_QUIRK_MULTI_INPUT;

の部分を
[一部]ファイル名: /usr/src/linux-2.6.31.5-1mnb/drivers/hid/hid-pl.c

	if (id->driver_data)
		hdev->quirks |= HID_QUIRK_MULTI_INPUT | HID_QUIRK_SKIP_OUTPUT_REPORTS;

にすることで

pantherlord 0003:0E8F:1006.0001: input,hidraw2: USB HID v1.10 Joystick [HuiJia  USB GamePad] on usb-0000:00:13.0-3/input0
hid-plff: detected single-field device
hid-plff: detected single-field device
pantherlord 0003:0E8F:1006.0001: Force feedback for PantherLord/GreenAsia devices by Anssi Hannula <anssi.hannula AT gmail DOT com>

のように正常に初期化処理が完了して情報が表示されるようになった(上の出力の最後の行は一部修正済み)。
「HID_QUIRK_[文字列]」のフラグ指定はデバイスが持つある種の特性をうまく処理するために付けるもののようで、例えばHID_QUIRK_MULTI_INPUTについては、(これまでの汎用のドライバから)このドライバで使用するようにしたことで、これまで(2ポートでありながら)1つの12軸24ボタンのゲームパッドとして認識されていたものが6軸12ボタンの2つのゲームパッドとして認識されるようになった。また、デバイスファイルも/dev/input/js0/dev/input/js1とに分かれた。
下の画像はjstest-gtkのもの。

バイス一覧

各デバイス

割り当ての設定
振動のテストについては次回扱う。

(「PSX-CV02上のPlayStation 2コントローラの振動機能をGNU/Linux上で用いるための試行錯誤(Linux 2.6.31.5時点・第3回)」に続く)

関連記事:

参考URL:

使用したバージョン: