RetroPie-Setup/scriptmodules/supplementary/xboxdrv.sh
cmitu ee346fbf3c xboxdrv: remove obsolete USB options
According to the Raspi docs, `dwc_otg.speed=1` sets the USB port to USB 1.0 speed and should be enabled only for debugging purposes.
I don't think it's needed anymore.
2023-10-15 17:08:09 +01:00

169 lines
5 KiB
Bash

#!/usr/bin/env bash
# This file is part of The RetroPie Project
#
# The RetroPie Project is the legal property of its developers, whose names are
# too numerous to list here. Please refer to the COPYRIGHT.md file distributed with this source.
#
# See the LICENSE.md file at the top-level directory of this distribution and
# at https://raw.githubusercontent.com/RetroPie/RetroPie-Setup/master/LICENSE.md
#
rp_module_id="xboxdrv"
rp_module_desc="Xbox / Xbox 360 gamepad driver"
rp_module_licence="GPL3 https://raw.githubusercontent.com/zerojay/xboxdrv/stable/COPYING"
rp_module_repo="git https://github.com/retropie/xboxdrv.git retropie-stable"
rp_module_section="driver"
function def_controllers_xboxdrv() {
echo "2"
}
function def_deadzone_xboxdrv() {
echo "4000"
}
function depends_xboxdrv() {
getDepends libboost-dev libusb-1.0-0-dev libudev-dev libx11-dev scons pkg-config python3 x11proto-core-dev libdbus-glib-1-dev
}
function sources_xboxdrv() {
gitPullOrClone
}
function build_xboxdrv() {
python3 /usr/bin/scons
}
function install_xboxdrv() {
make install PREFIX="$md_inst"
}
function enable_xboxdrv() {
local controllers="$1"
local deadzone="$2"
[[ -z "$controllers" ]] && controllers="$(def_controllers_xboxdrv)"
[[ -z "$deadzone" ]] && deadzone="$(def_deadzone_xboxdrv)"
local config="\"$md_inst/bin/xboxdrv\" --daemon --detach --dbus disabled --detach-kernel-driver"
local i
for (( i=0; i<$controllers; i++)); do
[[ $i -gt 0 ]] && config+=" --next-controller"
config+=" --id $i --led $((i+2)) --deadzone $deadzone --silent --trigger-as-button"
done
if grep -q "xboxdrv" /etc/rc.local; then
dialog --yesno "xboxdrv is already enabled in /etc/rc.local with the following config. Do you want to update it ?\n\n$(grep "xboxdrv" /etc/rc.local)" 22 76 2>&1 >/dev/tty || return
fi
sed -i "/xboxdrv/d" /etc/rc.local
sed -i "s|^exit 0$|${config}\\nexit 0|" /etc/rc.local
printMsgs "dialog" "xboxdrv enabled in /etc/rc.local with the following config\n\n$config\n\nIt will be started on next boot."
}
function disable_xboxdrv() {
sed -i "/xboxdrv/d" /etc/rc.local
printMsgs "dialog" "xboxdrv configuration in /etc/rc.local has been removed."
}
function controllers_xboxdrv() {
local controllers="$1"
[[ -z "$controllers" ]] && controllers="$(def_controllers_xboxdrv)"
local cmd=(dialog --backtitle "$__backtitle" --default-item "$controllers" --menu "Select the number of controllers to enable" 22 86 16)
local options=(
1 "1 controller"
2 "2 controllers"
3 "3 controllers"
4 "4 controllers"
)
local choice=$("${cmd[@]}" "${options[@]}" 2>&1 >/dev/tty)
if [[ -n "$choice" ]]; then
controllers="$choice"
fi
echo "$controllers"
}
function deadzone_xboxdrv() {
local deadzone="$1"
[[ -z "$deadzone" ]] && deadzone="$(def_deadzone_xboxdrv)"
local zones=()
local options=()
local i
local label
local default
for i in {0..12}; do
zones[i]=$((i*500))
[[ ${zones[i]} -eq $deadzone ]] && default=$i
label="0-${zones[i]}"
[[ "$i" -eq 0 ]] && label="No Deadzone"
options+=($i "$label")
done
local cmd=(dialog --backtitle "$__backtitle" --default-item "$default" --menu "Select range of your analog stick deadzone" 22 86 16)
local choice=$("${cmd[@]}" "${options[@]}" 2>&1 >/dev/tty)
if [[ -n "$choice" ]]; then
deadzone="${zones[$choice]}"
fi
echo "$deadzone"
}
function configure_xboxdrv() {
# make sure existing configs will point to the new xboxdrv
sed -i "s|^xboxdrv|\"$md_inst/bin/xboxdrv\"|" /etc/rc.local
}
function gui_xboxdrv() {
if [[ ! -f "$md_inst/bin/xboxdrv" ]]; then
if [[ $__has_binaries -eq 1 ]]; then
rp_callModule "$md_id" depends
rp_callModule "$md_id" install_bin
rp_callModule "$md_id" configure
else
rp_callModule "$md_id"
fi
fi
local controllers="$(def_controllers_xboxdrv)"
local deadzone="$(def_deadzone_xboxdrv)"
local cmd=(dialog --backtitle "$__backtitle" --menu "Choose an option." 22 86 16)
while true; do
local options=(
1 "Enable xboxdrv"
2 "Disable xboxdrv"
3 "Set number of controllers to enable (currently $controllers)"
4 "Set analog stick deadzone (currently $deadzone)"
)
local choice=$("${cmd[@]}" "${options[@]}" 2>&1 >/dev/tty)
if [[ -n "$choice" ]]; then
case "$choice" in
1)
enable_xboxdrv "$controllers" "$deadzone"
;;
2)
disable_xboxdrv
;;
3)
controllers=$(controllers_xboxdrv $controllers)
;;
4)
deadzone=$(deadzone_xboxdrv $deadzone)
;;
esac
else
break
fi
done
}