summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMyrika Fuwa2022-06-13 03:17:45 -0400
committerMyrika Fuwa2022-06-13 03:17:45 -0400
commit7d88e048ae4a78abbc10d4159268996c5ee366e1 (patch)
treee8f3e18ad7939b716edb2bb11b354a727656a49a
downloadjsfav-7d88e048ae4a78abbc10d4159268996c5ee366e1.tar.gz
jsfav-7d88e048ae4a78abbc10d4159268996c5ee366e1.zip
Initial commitHEADmaster
-rw-r--r--jsfav/etc/udev/rules.d/72-favorite-joystick.rules2
-rwxr-xr-xjsfav/usr/local/bin/jsfav42
-rwxr-xr-xstow2
3 files changed, 46 insertions, 0 deletions
diff --git a/jsfav/etc/udev/rules.d/72-favorite-joystick.rules b/jsfav/etc/udev/rules.d/72-favorite-joystick.rules
new file mode 100644
index 0000000..582200f
--- /dev/null
+++ b/jsfav/etc/udev/rules.d/72-favorite-joystick.rules
@@ -0,0 +1,2 @@
+# js0: Microsoft Xbox 360 over 2.4G (Wireless Gaming Receiver for Windows)
+ACTION=="add", KERNEL=="js?", ATTRS{idVendor}=="045e", ATTRS{idProduct}=="0719", RUN+="/usr/local/bin/jsfav 045e 0719"
diff --git a/jsfav/usr/local/bin/jsfav b/jsfav/usr/local/bin/jsfav
new file mode 100755
index 0000000..61c30a2
--- /dev/null
+++ b/jsfav/usr/local/bin/jsfav
@@ -0,0 +1,42 @@
+#!/usr/bin/env sh
+
+cd /sys/bus/usb/devices
+if [ -z "$1" -a -z "$2" ]; then
+ echo "[ERROR] Missing args (1) vendor_id or (2) product_id"
+ exit 1
+fi
+
+# Disable all controllers but favorite
+all="$(udevadm info -q path /dev/input/js* | grep -Po 'usb\d+/\d+-\d+')"
+fav=""
+for i in $all; do
+ if [ ! "$(cat $i/idVendor)" = "$1" -a ! "$(cat $i/idProduct)" = "$2" ]; then
+ echo "[DISABLE] $(cat $i/product)" >&2
+ echo "0" > "$i/authorized"
+ else
+ echo "[PASS] $(cat $i/product)" >&2
+ fav="$i"
+ fi
+done
+
+# Reset favorite controller to port #0
+js0="$(udevadm info -q path /dev/input/js0 2>/dev/null | grep -Po 'usb\d+/\d+-\d+')"
+if [ -z $fav ]; then
+ echo "[ERROR] Favorite controller $1:$2 not connected"
+elif [ -z $js0 ]; then
+ echo "[RESET] $(cat $fav/product)" >&2
+ echo "0" > "$fav/authorized"
+ sleep 1
+ echo "1" > "$fav/authorized"
+fi
+
+# Enable all controllers
+for i in $all; do
+ if [ ! "$i" = "$fav" ]; then
+ sleep 1
+ echo "[ENABLE] $(cat $i/product)" >&2
+ echo "1" > "$i/authorized"
+ else
+ echo "[PASS] $(cat $i/product)" >&2
+ fi
+done
diff --git a/stow b/stow
new file mode 100755
index 0000000..2d0f53d
--- /dev/null
+++ b/stow
@@ -0,0 +1,2 @@
+#!/usr/bin/env sh
+exec sudo stow -v -t / --no-folding "$@"