server: detach gadget on stop
This commit is contained in:
parent
86656054c5
commit
617a1d844f
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user