8Bitdo SN30Proは素晴らしい
コンパクトでUSB HIDとBluetoothに対応しているゲームパッドで、こんな素晴らしい製品があります。
http://amzn.asia/d/2cOiyGk
精度のよいアナログパッドがついていて、Bluetooth HIDで接続できる、かつコンパクトなゲームパッドってこれぐらいしかないんですよね。
また、ROS でロボットの開発をするときなど、有線でつながっているとロボットに引っ張られてケーブルが切れてしまうこともあり、Bluetoothが便利なのですが、シミュレータの開発などではUSBでつなぐほうが電池切れしないこともあり、両方接続できると便利です。
デバイス名を固定しよう
Linuxだと通常、ゲームパッドデバイスは/dev/input/js*
として認識するのですが、時としてこのデバイス名がずれてしまい、非常に面倒くさいです。
また、私の使っているThinkpad Bluetoothキーボードはなぜかjsデバイスとして認識しているので、先にキーボードを接続するか、ジョイスティックをつなぐかで、デバイス名の順番が変わってしまいます。
udev ruleを書いて、bluetoothで接続した時にも、USBで接続したときでも、常に同じデバイス名で扱えるようにしましょう。
KERNEL=="js*", ATTRS{name}=="8Bitdo SN30 Pro", SYMLINK+="input/joy.sn30pro"
KERNEL=="js*", ATTRS{idVendor}=="045e", ATTRS{idProduct}=="028e", SYMLINK+="input/joy.sn30pro"
udevルールをリロードする:
udevadm control --reload
この状態で、ゲームパッドをBluetoothで接続したり、USBで接続したりしてみましょう。
どちらでも、/dev/input/js.sn30pro
として認識しているはずです。
SF30 Proでも
色違い(日本版スーファミカラー)のSF30という製品もあるようなのですが、SN30 ProのBluetoothのデバイス名はSN30 Proになっているので、おそらく外観だけでなくSF30 ProのBluetoothのデバイス名、USBのidVendor
/ idProduct
はSN30 Proとは異なるでしょう。
SF30 Proをお持ちの方は、ぜひBluetoothで接続した場合とUSBで接続した場合のudevadm info -a -n [device name]
([device name]は/dev/input/js[あなたの環境で認識しているjs番号])の結果をコメントで頂ければ、追記します。
参考
Arch Linux -udev
https://wiki.archlinux.jp/index.php/Udev#udev_.E3.83.AB.E3.83.BC.E3.83.AB.E3.82.92.E8.A8.98.E8.BF.B0.E3.81.99.E3.82.8B