server: detach gadget on stop

This commit is contained in:
Brad Stein 2026-01-07 04:47:39 -03:00
parent 86656054c5
commit 617a1d844f
2 changed files with 63 additions and 1 deletions

View File

@ -6,6 +6,65 @@
set -euo pipefail
log() { printf '[lesavka-core] %s\n' "$*"; }
G=/sys/kernel/config/usb_gadget/lesavka
find_udc() {
ls /sys/class/udc 2>/dev/null | head -n1 || true
}
detach_gadget() {
local udc=""
udc="$(find_udc)"
if [[ -n $udc && -w /sys/class/udc/$udc/soft_connect ]]; then
echo 0 >"/sys/class/udc/$udc/soft_connect" 2>/dev/null || true
fi
if [[ -e $G/UDC ]]; then
echo "" >"$G/UDC" 2>/dev/null || true
fi
if [[ -n $udc && -f /sys/class/udc/$udc/state ]]; then
local state
state="$(cat "/sys/class/udc/$udc/state" 2>/dev/null || true)"
log "detached (state=${state:-unknown})"
else
log "detached (no UDC state)"
fi
}
attach_gadget() {
if [[ ! -d $G ]]; then
log "gadget path missing; need full setup"
return 1
fi
local udc=""
udc="$(find_udc)"
if [[ -z $udc ]]; then
log "UDC not found; need full setup"
return 1
fi
if [[ -e $G/UDC ]]; then
echo "$udc" >"$G/UDC" 2>/dev/null || true
fi
log "attached to $udc"
return 0
}
case "${1:-}" in
--detach)
detach_gadget
exit 0
;;
--attach)
if attach_gadget; then
exit 0
fi
;;
--help|-h)
echo "Usage: $0 [--attach|--detach]"
exit 0
;;
esac
cleanup() { echo "" >"$G/UDC" 2>/dev/null || true; }
DISABLE_UAC=${LESAVKA_DISABLE_UAC:-}
@ -100,7 +159,6 @@ log "✅ UDC detected: $UDC"
# 3. (Re)create gadget
#──────────────────────────────────────────────────
mountpoint -q /sys/kernel/config || mount -t configfs none /sys/kernel/config
G=/sys/kernel/config/usb_gadget/lesavka
if [[ -d $G ]]; then
echo '' >"$G/UDC" 2>/dev/null || true

View File

@ -166,7 +166,11 @@ Description=lesavka gRPC relay
After=network.target lesavka-core.service
[Service]
ExecStartPre=/usr/local/bin/lesavka-core.sh --attach
ExecStart=/usr/local/bin/lesavka-server
ExecStopPre=/usr/local/bin/lesavka-core.sh --detach
TimeoutStopSec=10
KillSignal=SIGTERM
Restart=always
Environment=RUST_LOG=lesavka_server=info,lesavka_server::audio=info,lesavka_server::video=debug,lesavka_server::gadget=info
Environment=RUST_BACKTRACE=1