RetroPie-Setup/scriptmodules/supplementary/dbar4gun.sh
Cristi Mitrana 29281727ae
dbar4gun: fix installation (#4030)
On Buster, there's no `virtualenv` command in the `python3-virtualenv` package, so use an alternate syntax to create the virtual environment.
2025-02-04 18:30:50 +02:00

295 lines
8.4 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="dbar4gun"
rp_module_desc="dbar4gun is a Linux userspace driver for the wiimote with DolphinBar support."
rp_module_help="https://github.com/lowlevel-1989/dbar4gun"
rp_module_licence="MIT https://raw.githubusercontent.com/lowlevel-1989/dbar4gun/master/LICENSE"
rp_module_repo="git https://github.com/lowlevel-1989/dbar4gun master"
rp_module_section="driver"
function depends_dbar4gun() {
getDepends python3 python3-dev python3-setuptools python3-virtualenv python3-pygame
}
function sources_dbar4gun() {
gitPullOrClone
}
function install_dbar4gun() {
python3 -m venv "$md_inst"
source "$md_inst/bin/activate"
pip3 install .
deactivate
md_ret_require="$md_inst/bin/dbar4gun"
}
function configure_dbar4gun() {
if [[ "$md_mode" == "remove" ]]; then
return
fi
touch "$configdir/all/dbar4gun.cfg"
iniConfig " = " '"' "$configdir/all/dbar4gun.cfg"
}
function enable_dbar4gun() {
local config="/etc/systemd/system/dbar4gun.service"
iniConfig " = " '"' "$configdir/all/dbar4gun.cfg"
eval $(_loadconfig_dbar4gun)
local dbar4gun_params="--width $db_width --height $db_height"
dbar4gun_params="$dbar4gun_params --calibration $db_calibration"
dbar4gun_params="$dbar4gun_params --setup $db_setup"
dbar4gun_params="$dbar4gun_params --port $db_port"
dbar4gun_params="$dbar4gun_params --smoothing-level $db_smoothing_level"
if [[ "$db_disable_tilt_correction" -eq 1 ]]; then
dbar4gun_params="$dbar4gun_params --disable-tilt-correction"
fi
disable_dbar4gun
cat > "$config" << _EOF_
[Unit]
Description=dbar4gun
[Service]
Type=simple
ExecStart=$md_inst/bin/dbar4gun start $dbar4gun_params
[Install]
WantedBy=multi-user.target
_EOF_
systemctl daemon-reload
systemctl enable dbar4gun --now
printMsgs "dialog" "dbar4gun enabled."
}
function disable_dbar4gun() {
systemctl disable dbar4gun --now
}
function remove_dbar4gun() {
disable_dbar4gun
rm -rf "/etc/systemd/system/dbar4gun.service"
systemctl daemon-reload
}
function _loadconfig_dbar4gun() {
echo "$(loadModuleConfig \
'db_width=1920' \
'db_height=1080' \
'db_disable_tilt_correction=0' \
'db_setup=1' \
'db_port=35460' \
'db_calibration=2' \
'db_smoothing_level=3'
)"
}
function _menu_start_dbar4gun() {
local cmd=(dialog --backtitle "$__backtitle" --menu "dbar4gun service" 22 86 16)
iniConfig " = " '"' "$configdir/all/dbar4gun.cfg"
eval $(_loadconfig_dbar4gun)
while true; do
local options=(
1 "width: $db_width"
2 "height: $db_height"
3 "smoothing level: $db_smoothing_level"
4 "debug port: $db_port"
)
if [[ "$db_disable_tilt_correction" -eq 1 ]]; then
options+=(5 "enable tilt correction")
else
options+=(5 "disable tilt correction")
fi
options+=(6 "dbar4gun start")
local choice=$("${cmd[@]}" "${options[@]}" 2>&1 >/dev/tty)
if [[ -n "$choice" ]]; then
case "$choice" in
1)
local cmd_in=(dialog --backtitle "$__backtitle" --inputbox "Please enter the width" 10 60 "$db_width")
db_width=$("${cmd_in[@]}" 2>&1 >/dev/tty)
iniSet "db_width" "$db_width"
;;
2)
local cmd_in=(dialog --backtitle "$__backtitle" --inputbox "Please enter the height" 10 60 "$db_height")
db_height=$("${cmd_in[@]}" 2>&1 >/dev/tty)
iniSet "db_height" "$db_height"
;;
3)
local cmd_in=(dialog --backtitle "$__backtitle" --inputbox "Please enter the smoothing level" 10 60 "$db_smoothing_level")
db_smoothing_level=$("${cmd_in[@]}" 2>&1 >/dev/tty)
iniSet "db_smoothing_level" "$db_smoothing_level"
;;
4)
local cmd_in=(dialog --backtitle "$__backtitle" --inputbox "Please enter the debug port" 10 60 "$db_port")
db_port=$("${cmd_in[@]}" 2>&1 >/dev/tty)
iniSet "db_port" "$db_port"
;;
5)
db_disable_tilt_correction="$((db_disable_tilt_correction ^ 1))"
iniSet "db_disable_tilt_correction" "$db_disable_tilt_correction"
;;
6)
enable_dbar4gun
break
;;
esac
else
break
fi
done
}
function _menu_ir_setup() {
local cmd=(dialog --backtitle "$__backtitle" --menu "IR Setup" 22 86 16)
iniConfig " = " '"' "$configdir/all/dbar4gun.cfg"
eval $(_loadconfig_dbar4gun)
local options=(
1 "Standard"
)
while true; do
local choice=$("${cmd[@]}" "${options[@]}" 2>&1 >/dev/tty)
if [[ -n "$choice" ]]; then
case "$choice" in
1)
iniSet "db_setup" "1"
_menu_calibration_mode
break
;;
esac
else
break
fi
done
}
function _menu_calibration_mode() {
local cmd=(dialog --backtitle "$__backtitle" --menu "Calibration Mode" 22 86 16)
iniConfig " = " '"' "$configdir/all/dbar4gun.cfg"
eval $(_loadconfig_dbar4gun)
local options=(
1 "TopLeft, TopRight, BottomCenter"
2 "Center, TopLeft"
3 "disabled"
)
while true; do
local choice=$("${cmd[@]}" "${options[@]}" 2>&1 >/dev/tty)
if [[ -n "$choice" ]]; then
case "$choice" in
1)
iniSet "db_calibration" "2"
_menu_start_dbar4gun
break
;;
2)
iniSet "db_calibration" "1"
_menu_start_dbar4gun
break
;;
3)
iniSet "db_calibration" "0"
_menu_start_dbar4gun
break
;;
esac
else
break
fi
done
}
function _menu_set_resolution() {
local cmd=(dialog --backtitle "$__backtitle" --menu "Choose Resolution" 22 86 16)
iniConfig " = " '"' "$configdir/all/dbar4gun.cfg"
eval $(_loadconfig_dbar4gun)
local options=(
1 " 1080p"
2 " 720p"
3 "manual"
)
while true; do
local choice=$("${cmd[@]}" "${options[@]}" 2>&1 >/dev/tty)
if [[ -n "$choice" ]]; then
case "$choice" in
1)
iniSet "db_width" "1920"
iniSet "db_height" "1080"
_menu_ir_setup
break
;;
2)
iniSet "db_width" "1280"
iniSet "db_height" "720"
_menu_ir_setup
break
;;
3)
_menu_ir_setup
break
;;
esac
else
break
fi
done
}
function gui_dbar4gun() {
local title=$($md_inst/bin/dbar4gun version)
local cmd=(dialog --backtitle "$__backtitle" --menu "$title" 22 86 16)
local options=(
1 "Enable dbar4gun"
2 "Disable dbar4gun"
3 "Debug"
)
iniConfig " = " '"' "$configdir/all/dbar4gun.cfg"
eval $(_loadconfig_dbar4gun)
while true; do
local choice=$("${cmd[@]}" "${options[@]}" 2>&1 >/dev/tty)
if [[ -n "$choice" ]]; then
case "$choice" in
1)
_menu_set_resolution
;;
2)
disable_dbar4gun
;;
3)
$md_inst/bin/dbar4gun gui --width 640 --height 480 --port $db_port
;;
esac
else
break
fi
done
}