PlayStation 4 で
|
![]() |
PlayStation 3 で使っていた Driving Force GT が PlayStation 4 (PS4) では使えなくなりました。 PS4 用にライセンスされた周辺機器かどうか PS4 がチェックしているのがその理由です。 このチェックを回避する方がいくつかありますが、 手元に Raspberry Pi が余っているので今回はこれを活用して GIMX を使って Driving Force G29 として使用します。
GIMX
を使うためには USB をシリアル通信に変換するアダプターが必要で
す。
これは
頑張って自作する
か
GIMX
の公式サイト
https://blog.gimx.fr/product/gimx-adapter/
から購入するかして入手します。
公式サイトでの購入は到着を待てるのであればお奨めです。
私はイギリスで発注したのですが、
火曜の夜に発注して水曜に受注連絡が来て金曜には物が届きました。
日本では同じようなものをヤフオク等で販売してる人もいるようなので、
それも使えるのかも知れません。
SD カードフォーマッター を使って Windows 上でフォーマットします。
Raspbian のサイトから NOOBS Lite をダウンロードして、フォーマットした micro SD カード上に展開します。
micro SD カードを Raspberry Pi に挿入して起動し、 Raspbian Lite を選択してインストールします。
Raspbian をインストールしたら再起動してログインします。
raspberrypi login: pi Password: raspberry
最初にファームウエアをアップデートします。
$ sudo rpi-update $ sudo reboot
続いてソフトウエアのアップデートと必要なソフトウエアのインストールを行います。 なお、pi ユーザのパスワード変更は必ず行いましょう。
$ sudo apt-get update $ sudo apt-get upgrade $ sudo apt-get install joystick $ sudo apt-get install tcsh $ sudo apt-get install vim $ sudo apt-get install gawk
また、必要に応じて自動アップデートを設定します。
$ sudo apt-get install unattended-upgrades
APT::Periodic::Update-Package-Lists "1"; APT::Periodic::Unattended-Upgrade "1";
- // "o=Raspbian,a=stable"; + "o=Raspbian,a=stable";
- XKBMODEL="pc105" - XKBLAYOUT="gb" + XKBMODEL="pc106" + XKBLAYOUT="jp"
daemon.log のローテーションを設定します。
/var/log/daemon.log { rotate 2 daily missingok notifempty delaycompress compress postrotate invoke-rc.d rsyslog rotate > /dev/null endscript }
rsyslogd-2007: action 'action 17' suspended, next retry is ... 対策として以下をコメントアウトします。
#daemon.*;mail.*;\ # news.err;\ # *.=debug;*.=info;\ # *.=notice;*.=warn |/dev/xconsole
デフォルトではシリアルコンソールが有効化されているので、 それを無効化します。
$ sudo raspi-config
Interfacing Options | P6 Serial | accessible over serial | No |
serial port hardware | Yes |
デフォルトでは高速シリアル通信ができないので、 できるようにします。
init_uart_clock=8000000
足りないライブラリもインストールします。
$ wget https://gimx.fr/download/gimx-raspbian -O gimx.deb $ sudo dpkg -i gimx.deb $ sudo apt-get -f install
$ sudo service triggerhappy stop $ sudo update-rc.d triggerhappy disable
$ mkdir -p /home/pi/.gimx $ mkdir -p /home/pi/.gimx/config $ wget https://raw.githubusercontent.com/matlo/GIMX-configurations/master/Linux/LogitechDrivingForceGT_G29.xml -O /home/pi/.gimx/config/LogitechDrivingForceGT_G29.xml
[Unit] Description=GIMX After=syslog.target network.target [Service] User=pi Type=simple # Replace /dev/ttyUSB0 with /dev/ttyAMA0 when using the on-board UART interface ExecStart=/usr/bin/gimx -p /dev/ttyUSB0 -c LogitechDrivingForceGT_G29.xml --nograb Restart=always RestartSec=5 [Install] WantedBy=multi-user.target
設定を反映させます。
$ sudo systemctl daemon-reload $ sudo systemctl enable gimx && sudo systemctl start gimx
Raspbian を起動し、GIMX adapter、Driving Force GT、DUALSHOCK4
をそれぞれ Raspberry Pi に USB で接続します。
Raspbian で接続機器を認識したら GIMX adapter につながっている
USB ケーブルを PS4 に接続します。
input: Sony Interactive Entertainment Wireless Controller as /devices/platform/soc/3f980000.usb/usb1/1-1/1-1.4/1-1.4:1.3/0003:XXXX:XXXX.0001/input/input0 hid-generic 0003:XXXX:XXXX.0001: input,hidraw0: USB HID v1.11 Gamepad [Sony Interactive Entertainment Wireless Controller] on usb-3f980000.usb-1.4/input3 logitech 0003:XXXX:XXXX.0002: fixing up Logitech Driving Force report descriptor input: Driving Force GT as /devices/platform/soc/3f980000.usb/usb1/1-1/1-1.5/1-1.5:1.0/0003:XXXX:XXXX.0002/input/input1 logitech 0003:XXXX:XXXX.0002: input,hidraw1: USB HID v1.00 Joystick [Driving Force GT] on usb-3f980000.usb-1.5/input0 input: Driving Force GT as /devices/platform/soc/3f980000.usb/usb1/1-1/1-1.5/1-1.5:1.0/0003:XXXX:XXXX.0003/input/input2 logitech 0003:XXXX:XXXX.0003: input,hidraw1: USB HID v1.11 Joystick [Driving Force GT] on usb-3f980000.usb-1.5/input0 logitech 0003:XXXX:XXXX.0003: Force feedback support for Logitech Gaming Wheels
GIMX 6.8 を使用していますが、
プレイ中に PS4 でコントローラーを認識しなくなることがあります。
特に Project CARS Game of the Year Edition と
F1 2016 をプレイしている時に起こる印象があります。
そういうときは GIMX を再起動します。
それでだめなら Driving Force GT の USB ケーブルを抜き差ししてから
GIMX を再起動します。
$ sudo systemctl restart gimx
それでだめなら Raspbian をリブートします。
$ sudo reboot
GIMX の再起動や Raspbian
のシャットダウンのためにいちいちコンソールで操作するのは面倒です。
というわけで、Driving Force GT の操作ボタンで Raspbian
を少しだけコントロールできるようにします。
具体的には
時々、失業SEの開発日誌の
RaspberryPiでJoypadからコマンド入力
で説明されているやり方を若干変更して実装します。
まず、ハンドルの動作に対応できるように jscmd.awk を若干変更します。
--- /home/pi/jscmd/jscmd.awk.orig 2017-06-17 20:06:16.726340770 +0100 +++ /home/pi/jscmd/jscmd.awk 2017-06-17 19:38:38.550891714 +0100 @@ -6,6 +6,7 @@ } /^Event: type 1,/ { + type = 1; n = $7; sub(/,$/,"",n); v = $9; key = names[n+1]; @@ -14,13 +15,15 @@ } /^Event: type 2,/ { + type = 2; n = $7; sub(/,$/,"",n); v = $9; - if (n == 0) { + if (n == 3) { flag["RIGHT"] = (v>0)?1:0; flag["LEFT"] = (v<0)?1:0; - } else { + } + else if (n == 4) { flag["DOWN"] = (v>0)?1:0; flag["UP"] = (v<0)?1:0; } @@ -30,6 +33,7 @@ func addKey() { t = systime(); if (t > lastModify+2) sequence = ""; + else if (t >= lastModify && type == 2) sequence = ""; lastModify = t; keys = "";
デバイスのシーケンスの実装状況をチェックします。
$ sudo udevadm info -a -p $(udevadm info -q path -n /dev/input/js0) > js0.log $ sudo udevadm info -a -p $(udevadm info -q path -n /dev/input/js1) > js1.log
$ jstest /dev/input/js0 Driver version is 2.1.0. Joystick (Sony Interactive Entertainment Wireless Controller) has 8 axes (X, Y, Z, Rx, Ry, Rz, Hat0X, Hat0Y) and 14 buttons (BtnX, BtnY, BtnZ, BtnTL, BtnTR, BtnTL2, BtnTR2, BtnSelect, BtnStart, BtnMode, BtnThumbL, BtnThumbR, ?, ?).
$ jstest /dev/input/js1 Driver version is 2.1.0. Joystick (Driving Force GT) has 5 axes (X, Y, Z, Hat0X, Hat0Y) and 21 buttons (Trigger, ThumbBtn, ThumbBtn2, TopBtn, TopBtn2, PinkieBtn, BaseBtn, BaseBtn2, BaseBtn3, BaseBtn4, BaseBtn5, BaseBtn6, BtnDead, BtnA, BtnB, BtnC, (null), (null), (null), (null), (null)).
チェックしたシーケンスに基づき、 実行するコマンドのシーケンスを設定します。
BUTTONS=BATSU,SHIKAKU,MARU,SANKAKU,R1,L1,R2,L2,SELECT,START,R3,L3,SHIFTUP,SHIFTDOWN,ENTER,PLUS,DIALRIGHT,DIALLEFT,MINUS,PS,RIGHT,LEFT,DOWN,UP SHIKAKU+R2+RIGHT = systemctl restart gimx SANKAKU+R2+LEFT = reboot SANKAKU+L2+LEFT = shutdown -h now
#!/bin/sh BASE=`dirname $0` cd $BASE if [ -c /dev/input/js1 ]; then DEV=/dev/input/js1 elif [ -c /dev/input/js0 ]; then DEV=/dev/input/js0 else exit 1 fi jstest --event $DEV | gawk -v CONFIG=dfgtcmd.conf -f jscmd.awk &
ACTION=="add",\ SUBSYSTEMS=="usb", \ KERNEL=="js*", \ RUN:="/home/pi/jscmd/dfgtcmd-start.sh", \ OPTIONS+="last_rule"
$ sudo service udev reload
Copyright ©2000-2018 T.Hiraga <hiraga@next-hop.net> All Rights Reserved. Last modified: $Date: 2017/10/27 11:59:40 $ |