fix(server): borrow capture power for eye discovery

This commit is contained in:
Brad Stein 2026-04-25 11:14:44 -03:00
parent bb6586272e
commit c6308749fe
2 changed files with 54 additions and 5 deletions

View File

@ -251,6 +251,44 @@ run_as_user() {
sudo -u "$ORIG_USER" env HOME="$USER_HOME" SSH_AUTH_SOCK="${SSH_AUTH_SOCK:-}" "$@"
}
CAPTURE_DISCOVERY_RELAY_PRESENT=0
CAPTURE_DISCOVERY_RELAY_WAS_ACTIVE=0
CAPTURE_DISCOVERY_POWER_BORROWED=0
prepare_capture_power_for_discovery() {
if ! systemctl list-unit-files | grep -q '^relay.service'; then
return 0
fi
CAPTURE_DISCOVERY_RELAY_PRESENT=1
if systemctl is-active --quiet relay.service; then
CAPTURE_DISCOVERY_RELAY_WAS_ACTIVE=1
return 0
fi
echo " ↪ borrowing relay GPIO power for capture discovery"
sudo systemctl start relay.service
CAPTURE_DISCOVERY_POWER_BORROWED=1
sudo udevadm settle --timeout=10 || true
sleep 2
}
restore_capture_power_after_discovery() {
if [ "${CAPTURE_DISCOVERY_RELAY_PRESENT:-0}" -eq 0 ]; then
return 0
fi
if [ "${CAPTURE_DISCOVERY_POWER_BORROWED:-0}" -eq 0 ]; then
return 0
fi
if [ "${CAPTURE_DISCOVERY_RELAY_WAS_ACTIVE:-0}" -ne 0 ]; then
return 0
fi
echo " ↪ returning relay GPIO power control to Lesavka auto mode"
sudo systemctl stop relay.service || true
CAPTURE_DISCOVERY_POWER_BORROWED=0
}
while [[ $# -gt 0 ]]; do
case $1 in
-r|--ref) REF="$2"; shift 2 ;;
@ -314,11 +352,8 @@ EOF
prepare_hdmi_detection_boot_state
echo "==> 2b. Predictable /dev names for each capture card"
# ensure relay (GPIO power) is on if present
if systemctl list-unit-files | grep -q '^relay.service'; then
sudo systemctl enable --now relay.service
sleep 2
fi
prepare_capture_power_for_discovery
trap restore_capture_power_after_discovery EXIT
discover_gc_capture_pairs() {
for dev in /dev/video*; do
@ -378,6 +413,8 @@ EOF
sudo udevadm settle
fi
fi
restore_capture_power_after_discovery
trap - EXIT
echo "==> 3. Rust toolchain"
sudo rustup default stable

View File

@ -74,6 +74,18 @@ fn server_install_builds_eye_links_from_capture_nodes_only() {
SERVER_INSTALL.contains("for _ in {1..20}; do"),
"install script should wait briefly for both GC311 capture nodes to finish enumerating"
);
assert!(
SERVER_INSTALL.contains("borrowing relay GPIO power for capture discovery"),
"install script should temporarily power capture cards for discovery when relay GPIO is available"
);
assert!(
SERVER_INSTALL.contains("returning relay GPIO power control to Lesavka auto mode"),
"install script should restore relay power control after capture discovery"
);
assert!(
SERVER_INSTALL.contains("trap restore_capture_power_after_discovery EXIT"),
"install script should restore borrowed capture power even if discovery exits early"
);
assert!(
SERVER_INSTALL.contains("[ \"$LEFT_TAG\" = \"$RIGHT_TAG\" ]"),
"install script should refuse duplicated path tags instead of assigning both eyes to one card"