Troubleshoot Twin USB Gamepad

Troubleshoot USB Gamepad ShanWan Twin USB Joystick (VID_2563&PID_0555). 

Masalah pada gamepad tersebut adalah tidak mendukung mode XInput, hanya mode DirectInput yang didukung. Padahal game jaman sekarang kebanyakan hanya mendukung mode XInput (mode yang dipakai di XBOX Controller). Selain itu gamepad ini memiliki motor getar tapi tidak berfungsi. 
Berikut ini beberapa hal yang dapat dilakukan : 

1. Windows 

Pada Windows gamepad ini plug & play tapi untuk mengaktifkan fitur getar perlu driver bawaannya, jika CD Driver bawaannya hilang bisa unduh ini : https://drive.google.com/file/d/1v9L-qojUCB9bL2sQ_cf4DZ97bc7iNp2d/view?usp=sharing 
Untuk mengubah mode dari DirectInput menjadi XInput bisa menggunakan software ini : https://www.x360ce.com/ 
x360ce bisa mengubah instruksi getar dari XInput ke DirectInput juga kalau sudah diinstal driver gamepadnya, tapi tidak bisa diatur proporsi kiri kanannya. Kekurangan x360ce yaitu harus duplikat file confignya ke folder masing-masing game, selain itu khusus untuk ShanWan Twin USB Joystick ini ada bug pada x360ce yaitu konfigurasinya akan reset ketika restart PC walaupun sudah disimpan. 
Alternatif lain x360ce yaitu menggunakan software ini : https://github.com/csutorasa/XOutput Kelebihannya XOutput tidak perlu duplikat file config ke semua game. Install satu untuk semua karena software ini menggunakan driver virtual. Lalu untuk gamepad ini juga dapat di simpan konfigurasinya tidak seperti x360ce. Kekurangannya XOutput yaitu tidak ada fitur untuk mengatur fitur getar, jadi fitur getarnya tidak aktif. 

2. Linux 

Pada Linux secara default hanya terdeteksi 1 stik saja, untuk mengatasi hal tersebut perlu mengaktifkan fitur quirk HID_QUIRK_MULTI_INPUT (0x040). Kalian juga bisa menggunakan cara ini untuk gamepad double yang lain, tinggal ganti vendor id & product id nya. Jika belum tahu vendor id & product id joystick yang kalian miliki, kalian bisa menggunakan perintah lsusb atau dmesg. Cara mengaktifkan fitur quirk HID_QUIRK_MULTI_INPUT sementara waktu untuk Vendor ID=2563 dan Product ID=0555 seperti ini : 
sudo modprobe usbhid "quirks=0x2563:0x555:0x040"
untuk solusi permanennya buat file .conf baru di /etc/modprobe.d : 
sudo gedit /etc/modprobe.d/usbhid-quirks.conf
isikan : 
options usbhid quirks=0x2563:0x555:0x040
simpan lalu jalankan perintah update initramfs: 
sudo update-initramfs -u
ketika PC nyala maka otomatis quirk tersebut akan diterapkan. Quirk yang sudah ditambahkan bisa dicek menggunakan perintah ini : 
cat /sys/module/usbhid/parameters/quirks
untuk cek apakah stick nya udah jadi dua gunakan perintah ini : 
ls /dev/input
jika sukses maka akan ada dua perangkat yaitu js0 dan js1
selain itu kalian juga bisa menggunakan aplikasi yang lebih interaktif untuk mencoba joystick dengan software ini : 
Mode DirectInput dapat diubah menjadi XInput dengan menggunakan software berikut : https://gitlab.com/xboxdrv/xboxdrv 
Kekurangannya Gamepad ini pada linux yaitu fitur getarnya tidak terbaca, kalau dicek menggunakan evtest tidak ada , sehingga ketika dicoba memakai  fftest pun jadi ga bisa. 

Selain itu bisa cek Arch wiki disana ada dokumen lengkap terkait gamepad di linux https://wiki.archlinux.org/title/Gamepad .
Sumber lain untuk mensimulasikan dinput ke xinput :
https://www.linuxquestions.org/questions/showthread.php?s=7840154b36ea54e5a19205695d161427&p=6282607
https://askubuntu.com/questions/327640/how-to-emulate-xinput-device-with-directinput-gamepad
https://steamcommunity.com/app/236090/discussions/0/558748653724279774/

3. Sistem Operasi Android 

Gamepad ini sulit untuk digunakan di Android, hanya beberapa aplikasi Android yang mendukung. Lalu untuk fitur getar juga sepertinya tidak bisa. 

- Tested : 

Aplikasi Mantis mendukung gamepad ShanWan ini untuk mapping gamepad jadi sentuhan touchscreen di layar, dua gamepad bisa terbaca terpisah (Update : hanya bisa terbaca satu gamepad). 

Aplikasi ePSXe hanya mendukung 1 gamepad : 

Aplikasi PPSSPP Gold hanya mendukung 1 gamepad :

Aplikasi YUZU tidak support hingga saat ini.
Selain itu sepertinya kebanyakan aplikasi android juga hanya mendukung XInput, misalnya game Dead Cells, ketika saya colokkan gamepad ini, hanya tombol arah panah yang berfungsi. 

- Not Tested, hasil searching di internet : 

Android perlu menambahkan file key layout (.kl) hanya saja hapenya harus di root terlebih dahulu https://source.android.com/devices/input/key-layout-files 

Untuk mencoba hasilnya kalian bisa menggunakan aplikasi ini untuk mencoba & modifikasi file .kl (harus root) :

Kalau aplikasi yang kalian gunakan mendukung keyboard virtual bisa menggunakan aplikasi ini untuk remapping 
Kalau gamepad terdeteksi sebagai keyboard, kalian bisa mapping ulang dengan membuat aplikasi android yang digunakan untuk menambahkan opsi keyboard layout pada Android dengan menggunakan file .kcm : 
selengkapnya : https://forum.xda-developers.com/t/tutorial-external-keyboard-remapping-without-root-4-1.4492481/

Selain itu juga bisa menggunakan aplikasi ini untuk mencoba mode XInput : https://play.google.com/store/apps/details?id=com.chimera.saturday.dualshock4tester 
Lalu juga bisa menggunakan aplikasi ini untuk mencoba controller : https://play.google.com/store/apps/details?id=uk.co.powgames.gamecondiag

Tambahan buat SDL 

SDL merupakan salah satu library yang digunakan untuk input controller. Mungkin aja kalian butuh untuk game development. Tambahkan data mapping ke variabel SDL_GAMECONTROLLERCONFIG di environment variable. Untuk remap gamepad ini bisa menggunakan nilai berikut yang digenerate dari tool https://www.generalarcade.com/gamepadtool/
03000000632500005505000000000000,Twin USB Vibration Gamepad (BM),platform:Windows,a:b2,b:b1,x:b3,y:b0,back:b8,start:b9,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,

atau yg digenerate dari  https://gitlab.com/ryochan7/sdl2-gamepad-mapper
030026fc632500005505000000000000,Twin USB Vibration Gamepad (BM),a:b2,b:b1,x:b3,y:b0,back:b8,start:b9,leftshoulder:b4,rightshoulder:b5,leftstick:b10,rightstick:b11,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,-leftx:-a0,+leftx:+a0,-lefty:-a1,+lefty:+a1,-rightx:-a2,+rightx:+a2,-righty:-a3,+righty:+a3,lefttrigger:b6,righttrigger:b7,platform:Windows,


GUID untuk linux  
- digenerate dari aplikasi sdl2-gamepad-mapper
03005591632500005505000011010000,ShanWan Twin USB Joystick,platform:Linux

- digenerate dari aplikasi gamepadtool
03000000632500005505000011010000,ShanWan Twin USB Joystick,platform:Linux

Database mapping gamepad lain bisa ditemukan di sini https://github.com/gabomdq/SDL_GameControllerDB

Komentar

Postingan populer dari blog ini

Simulasi Software Defined Networking (SDN) Part 1 Install Controller ONOS

Cara Membuat Wi-Fi Hotspot pada Linux Menggunakan Virtual Interfaces dan Hostapd