mirror of
https://github.com/RetroPie/RetroPie-Setup.git
synced 2025-04-02 10:51:41 -04:00
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.
169 lines
5 KiB
Bash
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
|
|
}
|